|
@@ -1,105 +0,0 @@
|
|
|
-
|
|
|
-MODULE Glue; (** AUTHOR "GF"; PURPOSE "Interface to OberonLoader"; *)
|
|
|
-
|
|
|
-IMPORT SYSTEM, Trace;
|
|
|
-
|
|
|
-CONST
|
|
|
- debug* = {};
|
|
|
-
|
|
|
-VAR
|
|
|
- last-: RECORD END; (* empty variable linked to end of kernel *)
|
|
|
-
|
|
|
- baseAdr*: ADDRESS;
|
|
|
- endAdr*: ADDRESS;
|
|
|
-
|
|
|
- dlsym- : PROCEDURE {C} ( handle: ADDRESS; name: ADDRESS ): ADDRESS;
|
|
|
- dlopen- : PROCEDURE {C} ( pathname: ADDRESS; mode: LONGINT ): ADDRESS;
|
|
|
- dlclose- : PROCEDURE {C} ( handle: ADDRESS );
|
|
|
- cout : PROCEDURE {C} ( ch: CHAR ); (* console output *)
|
|
|
-
|
|
|
- stackBottom- : ADDRESS; (* of main thread *)
|
|
|
-
|
|
|
- argc-: WORD;
|
|
|
- argv-: ADDRESS;
|
|
|
- environ-: ADDRESS;
|
|
|
-
|
|
|
-
|
|
|
- PROCEDURE {INITIAL, NOPAF} Header; (* header needed by OberonLoader *)
|
|
|
- CODE
|
|
|
- DB 'Oberon64G.binary' ; ID (24 byte)
|
|
|
- DD 0
|
|
|
- DD 0
|
|
|
- DD 0 ; size of statially linked binary ( filled in by static linker )
|
|
|
- DD 0 ; # relocations ( filled in by static linker )
|
|
|
- DQ @Init0 ; Loader <-- Oberon (entrypoint)
|
|
|
- DQ @dlopen ; Loader --> Oberon
|
|
|
- DQ @dlclose ; Loader --> Oberon
|
|
|
- DQ @dlsym ; Loader --> Oberon
|
|
|
- DQ @argc ; Loader --> Oberon
|
|
|
- DQ @argv ; Loader --> Oberon
|
|
|
- DQ @environ ; Loader --> Oberon
|
|
|
- DQ @cout ; Loader --> Oberon
|
|
|
- END Header;
|
|
|
-
|
|
|
-
|
|
|
- PROCEDURE Char ( c: CHAR );
|
|
|
- BEGIN
|
|
|
- cout( c )
|
|
|
- END Char;
|
|
|
-
|
|
|
-
|
|
|
- PROCEDURE Dlsym*( handle: ADDRESS; CONST name: ARRAY OF CHAR; adr: ADDRESS );
|
|
|
- VAR val: ADDRESS;
|
|
|
- BEGIN
|
|
|
- val := dlsym( handle, ADDRESSOF( name[0] ) );
|
|
|
- SYSTEM.PUT64( adr, val );
|
|
|
- END Dlsym;
|
|
|
-
|
|
|
-
|
|
|
- PROCEDURE {INITIAL, NOPAF} Init0;
|
|
|
- VAR localvar: ADDRESS;
|
|
|
- CONST CR = 0DX; NL = 0AX;
|
|
|
- BEGIN
|
|
|
- baseAdr := ADDRESSOF( Header );
|
|
|
- endAdr := ADDRESSOF( last );
|
|
|
-
|
|
|
- Trace.Init;
|
|
|
- Trace.Char := Char;
|
|
|
-
|
|
|
- stackBottom := ADDRESSOF( localvar ) + 2*SIZEOF( ADDRESS );
|
|
|
- END Init0;
|
|
|
-
|
|
|
-END Glue.
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- Building the SolarisA2 Generic elf binary:
|
|
|
-
|
|
|
-Compiler.Compile -p=Linux64
|
|
|
- I386.Builtins.Mod Trace.Mod
|
|
|
- Unix.I386.Glue.Mod Solaris.I386.Unix.Mod Unix.I386.Machine.Mod
|
|
|
- Heaps.Mod Modules.Mod Solaris.Objects.Mod Unix.Kernel.Mod
|
|
|
- KernelLog.Mod Streams.Mod Pipes.Mod Commands.Mod TrapWriters.Mod Reflection.Mod
|
|
|
- Unix.StdIO.Mod Unix.Traps.Mod UTF8Strings.Mod Files.Mod Unix.UnixFiles.Mod
|
|
|
- RelativeFileSystem.Mod StringPool.Mod BitSets.Mod ObjectFile.Mod
|
|
|
- I386.Reals.Mod Unix.Clock.Mod Dates.Mod Strings.Mod Diagnostics.Mod
|
|
|
- GenericLinker.Mod Loader.Mod Unix.BootConsole.Mod
|
|
|
-
|
|
|
- UnixBinary.Mod
|
|
|
- ~
|
|
|
-
|
|
|
-
|
|
|
-Linker.Link -p=Solaris64
|
|
|
- Builtins Trace Glue
|
|
|
- Unix Machine Heaps Modules Objects Kernel KernelLog
|
|
|
- Streams Pipes Commands StdIO TrapWriters Traps
|
|
|
- Files UnixFiles Clock Dates Reals Strings Diagnostics
|
|
|
- BitSets StringPool GenericLinker Reflection Loader
|
|
|
- BootConsole
|
|
|
- ~
|
|
|
-
|
|
|
-
|
|
|
- Build 'A2Core' by joining OberonLoader (C) and oberon.bin (Oberon).
|
|
|
-
|
|
|
- UnixBinary.Build oberon.bin -> A2Core ~
|