diff options
Diffstat (limited to '')
-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)) |