Browse Source

Combined Unix.Glue modules

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8186 8c9fc860-2736-0410-a75d-ab315db34111
negelef 7 years ago
parent
commit
30b09b4ddb
5 changed files with 27 additions and 114 deletions
  1. 2 2
      UnixAos/boot/OberonLoader.c
  2. 1 1
      source/Linker.Mod
  3. 4 4
      source/Release.Tool
  4. 0 105
      source/Unix.AMD64.Glue.Mod
  5. 20 2
      source/Unix.Glue.Mod

+ 2 - 2
UnixAos/boot/OberonLoader.c

@@ -51,9 +51,9 @@ typedef struct {  /* cf. Unix.*.Glue.Mod */
 } *Header;
 
 #if defined(__LP64__) || defined(_LP64)
-   char *coreID = "Oberon64G.binary";	/* cf. Unix.AMD64.Glue.Mod */
+   char *coreID = "Oberon64G.binary";	/* cf. Unix.Glue.Mod */
 #else
-   char *coreID = "Oberon32G.binary";	/* cf. Unix.I386.Glue.Mod */
+   char *coreID = "Oberon32G.binary";	/* cf. Unix.Glue.Mod */
 #endif
 
 addr heap;

+ 1 - 1
source/Linker.Mod

@@ -249,7 +249,7 @@ BEGIN
 		END;
 		pb := pb.next;
 	END;
-	(* now patch header (cf  Unix.I386.Glue.Mod)  *)
+	(* now patch header (cf  Unix.Glue.Mod)  *)
 	w.SetPos( 24 );
 	w.RawLInt( binsize );
 	w.RawLInt( relocations );

+ 4 - 4
source/Release.Tool

@@ -277,10 +277,10 @@ PACKAGE Kernel ARCHIVE "Kernel.zip" SOURCE "KernelSrc.zip" DESCRIPTION "A2 Kerne
 
 	LINUX32 { Linux.Glue.Mod Linux.I386.Unix.Mod }
 	LINUX64 { Linux.Glue.Mod Linux.AMD64.Unix.Mod }
-	DARWIN32 { Unix.I386.Glue.Mod Darwin.I386.Unix.Mod }
-	DARWIN64 { Unix.AMD64.Glue.Mod Darwin.AMD64.Unix.Mod }
-	SOLARIS32 { Unix.I386.Glue.Mod Solaris.I386.Unix.Mod }
-	SOLARIS64 { Unix.AMD64.Glue.Mod Solaris.AMD64.Unix.Mod }
+	DARWIN32 { Unix.Glue.Mod Darwin.I386.Unix.Mod }
+	DARWIN64 { Unix.Glue.Mod Darwin.AMD64.Unix.Mod }
+	SOLARIS32 { Unix.Glue.Mod Solaris.I386.Unix.Mod }
+	SOLARIS64 { Unix.Glue.Mod Solaris.AMD64.Unix.Mod }
 
 	WIN32 { Windows.I386.Kernel32.Mod }
 	WIN64 { Windows.AMD64.Kernel32.Mod }

+ 0 - 105
source/Unix.AMD64.Glue.Mod

@@ -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 ~

+ 20 - 2
source/Unix.I386.Glue.Mod → source/Unix.Glue.Mod

@@ -26,6 +26,7 @@ VAR
 
 	PROCEDURE {INITIAL, NOPAF} Header;		(* header needed by OberonLoader *)
 	CODE
+	#IF I386 THEN
 		DB 'Oberon32G.binary'	; ID (24 byte)
 		DD 0
 		DD 0
@@ -39,6 +40,23 @@ VAR
 		DD @argv			; Loader --> Oberon 
 		DD @environ		; Loader --> Oberon
 		DD @cout			; Loader --> Oberon
+	#ELSIF AMD64 THEN
+		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
+	#ELSE
+		unimplemented
+	#END
 	END Header;		
 	
 	
@@ -52,7 +70,7 @@ VAR
 	VAR val: ADDRESS;
 	BEGIN
 		val := dlsym( handle, ADDRESSOF( name[0] ) );
-		SYSTEM.PUT32( adr, val );	
+		SYSTEM.PUT( adr, val );	
 	END Dlsym;
 	
 	
@@ -78,7 +96,7 @@ END Glue.
 
 Compiler.Compile -p=Linux32
 		I386.Builtins.Mod Trace.Mod 
-		Unix.I386.Glue.Mod  Solaris.I386.Unix.Mod  Unix.I386.Machine.Mod	
+		Unix.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