diff options
Diffstat (limited to 'Patches/ews4800')
| -rw-r--r-- | Patches/ews4800 | 209 | 
1 files changed, 175 insertions, 34 deletions
| diff --git a/Patches/ews4800 b/Patches/ews4800 index 954523a..979d6a6 100644 --- a/Patches/ews4800 +++ b/Patches/ews4800 @@ -1,34 +1,175 @@ ---- XMakefile.orig	Mon Mar 19 10:47:56 2001 -+++ XMakefile	Mon Mar 19 21:03:34 2001 -@@ -65,7 +65,7 @@ - 	$(CC) $(CFLAGS) -o $(HELPER) w3mhelperpanel.o  $(LIBS) -  - gc/gc.a: --	cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS)' -+	cd gc; make CC='$(CC)' CFLAGS='$(GCCFLAGS) -Dmips' -  - install: $(TARGETS) - 	-$(MKDIR) $(DESTDIR)$(BIN_DIR) ---- gc/Makefile.orig	Tue Jan  4 14:46:50 2000 -+++ gc/Makefile	Thu Mar 22 18:10:10 2001 -@@ -7,7 +7,7 @@ - #      	 and runs some tests of collector and cords.  Does not add cords or - #	 c++ interface to gc.a - # cord/de - builds dumb editor based on cords. --ABI_FLAG= -+ABI_FLAG=-Kconform_pic - CC=cc $(ABI_FLAG) - CXX=CC $(ABI_FLAG) - AS=as $(ABI_FLAG) ---- gc/gcconfig.h.orig	Tue Jun  6 14:39:29 2000 -+++ gc/gcconfig.h	Mon Mar 19 21:02:51 2001 -@@ -64,7 +64,8 @@ - # endif - # if defined(mips) || defined(__mips) - #    define MIPS --#    if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) -+#    if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) ||\ -+        defined(nec_ews) - #	define ULTRIX - #    else - #       if !defined(LINUX) +diff -bcrN gc.org/doc/README.ews4800 gc/doc/README.ews4800 +*** gc.org/doc/README.ews4800	Thu Jan  1 09:00:00 1970 +--- gc/doc/README.ews4800	Wed Jul 25 17:38:57 2001 +*************** +*** 0 **** +--- 1,75 ---- ++ GC on EWS4800 ++ ------------- ++  ++ 1. About EWS4800 ++    EWS4800 is 32bit/64bit workstation. ++  ++      Vender: NEC Corporation ++      OS: UX/4800 R9.* - R13.* (SystemV R4.2) ++      CPU: R4000, R4400, R10000 (MIPS) ++  ++ 2. Compiler ++  ++  32bit: ++    Use ANSI C compiler. ++      CC = /usr/abiccs/bin/cc ++  ++  64bit: ++    Use 64bit ANSI C compiler. ++      CC = /usr/ccs64/bin/cc ++      AR = /usr/ccs64/bin/ar ++  ++ 3. ELF file format ++    *** Caution: The following infomation is empirical. *** ++  ++  32bit: ++    ELF file has an unique format. (See a.out(4) and end(3C).) ++  ++      &_start ++         :      text segment ++      &etext ++      DATASTART ++         :      data segment (initialized) ++      &edata ++      DATASTART2 ++         :      data segment (uninitialized) ++      &end ++  ++    Here, DATASTART and DATASTART2 are macros of GC, and are defined as ++    the following equations. (See include/private/gcconfig.h.) ++    The algorithm for DATASTART is similar with the function ++    GC_SysVGetDataStart() in os_dep.c. ++  ++      DATASTART  = ((&etext + 0x3ffff) & ~0x3ffff) + (&etext & 0xffff) ++  ++     Dynamically linked: ++      DATASTART2 = (&_gp + 0x8000 + 0x3ffff) & ~0x3ffff ++  ++     Statically linked: ++      DATASTART2 = &edata ++  ++    GC has to check addresses both between DATASTART and &edata, and ++    between DATASTART2 and &end. If a program accesses between &etext ++    and DATASTART, or between &edata and DATASTART2, the segmentation ++    error occurs and the program stops. ++  ++    If a program is statically linked, there is not a gap between ++    &edata and DATASTART2. The global symbol &_DYNAMIC_LINKING is used ++    for the detection. ++  ++  64bit: ++    ELF file has a simple format. (See end(3C).) ++  ++      _ftext ++         :      text segment ++      _etext ++      _fdata = DATASTART ++         :      data segment (initialized) ++      _edata ++      _fbss ++         :      data segment (uninitialized) ++      _end = DATAEND ++  ++ -- ++ Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> ++  +diff -bcrN gc.org/include/private/gcconfig.h gc/include/private/gcconfig.h +*** gc.org/include/private/gcconfig.h	Sun Jul  1 06:29:27 2001 +--- gc/include/private/gcconfig.h	Wed Jul 25 17:38:57 2001 +*************** +*** 75,83 **** +  #    endif +  #    define mach_type_known +  # endif +! # if defined(mips) || defined(__mips) +  #    define MIPS +! #    if !defined(LINUX) +  #      if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) +  #	 define ULTRIX +  #      else +--- 75,86 ---- +  #    endif +  #    define mach_type_known +  # endif +! # if defined(mips) || defined(__mips) || defined(_mips) +  #    define MIPS +! #    if defined(nec_ews) || defined(_nec_ews) +! #      define EWS4800 +! #    endif +! #    if !defined(LINUX) && !defined(EWS4800) +  #      if defined(ultrix) || defined(__ultrix) || defined(__NetBSD__) +  #	 define ULTRIX +  #      else +*************** +*** 1083,1088 **** +--- 1086,1114 ---- +  	/* instead. But some kernel versions seem to give the wrong	*/ +  	/* value from /proc.						*/ +  #   endif /* Linux */ ++ #   ifdef EWS4800 ++ #      define HEURISTIC2 ++ #      if defined(_MIPS_SZPTR) && (_MIPS_SZPTR == 64) ++          extern int _fdata[], _end[]; ++ #        define DATASTART ((ptr_t)_fdata) ++ #        define DATAEND ((ptr_t)_end) ++ #        define CPP_WORDSZ _MIPS_SZPTR ++ #        define ALIGNMENT (_MIPS_SZPTR/8) ++ #      else ++          extern int etext, edata, end; ++          extern int _DYNAMIC_LINKING, _gp; ++ #        define DATASTART ((ptr_t)((((word)&etext + 0x3ffff) & ~0x3ffff) \ ++                + ((word)&etext & 0xffff))) ++ #        define DATAEND (&edata) ++ #        define DATASTART2 (&_DYNAMIC_LINKING \ ++                ? (ptr_t)(((word)&_gp + 0x8000 + 0x3ffff) & ~0x3ffff) \ ++                : (ptr_t)&edata) ++ #        define DATAEND2 (&end) ++ #        define ALIGNMENT 4 ++ #      endif ++ #      define OS_TYPE "EWS4800" ++ #      define USE_GENERIC_PUSH_REGS 1 ++ #   endif +  #   ifdef ULTRIX +  #	define HEURISTIC2 +  #       define DATASTART (ptr_t)0x10000000 +diff -bcrN gc.org/mach_dep.c gc/mach_dep.c +*** gc.org/mach_dep.c	Thu Jun 28 05:54:23 2001 +--- gc/mach_dep.c	Wed Jul 25 17:38:57 2001 +*************** +*** 429,435 **** +  		    *i = 0; +  		} +  #	      if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \ +! 	         || defined(UTS4) || defined(LINUX) +  		  (void) setjmp(regs); +  #	      else +  	          (void) _setjmp(regs); +--- 429,435 ---- +  		    *i = 0; +  		} +  #	      if defined(POWERPC) || defined(MSWIN32) || defined(MSWINCE) \ +!                 || defined(UTS4) || defined(LINUX) || defined(EWS4800) +  		  (void) setjmp(regs); +  #	      else +  	          (void) _setjmp(regs); +diff -bcrN gc.org/os_dep.c gc/os_dep.c +*** gc.org/os_dep.c	Tue Jun 26 11:32:26 2001 +--- gc/os_dep.c	Wed Jul 25 17:38:57 2001 +*************** +*** 1088,1093 **** +--- 1088,1096 ---- +  	GC_add_roots_inner(DATASTART, (char *)sbrk(0), FALSE); +  #     else +  	GC_add_roots_inner(DATASTART, (char *)(DATAEND), FALSE); ++ #       if defined(DATASTART2) ++          GC_add_roots_inner(DATASTART2, (char *)(DATAEND2), FALSE); ++ #       endif +  #     endif +  #   endif +  #   if !defined(PCR) && (defined(NEXT) || defined(MACOSX)) | 
