diff options
Diffstat (limited to 'Patches/macppc')
-rw-r--r-- | Patches/macppc | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/Patches/macppc b/Patches/macppc new file mode 100644 index 0000000..c52adc4 --- /dev/null +++ b/Patches/macppc @@ -0,0 +1,147 @@ +Here is a patch to port GC library to NetBSD/macppc. If you are +using NetBSD on PowerMac, apply this patch first. + +This patch is provided by K. Sunagawa (kei_sun@ba2.so-net.ne.jp). + +Index: gc/dyn_load.c +=================================================================== +RCS file: /cvsroot/w3m/gc/dyn_load.c,v +retrieving revision 1.1.1.2 +retrieving revision 1.2 +diff -u -u -r1.1.1.2 -r1.2 +--- gc/dyn_load.c 1999/06/02 19:29:13 1.1.1.2 ++++ gc/dyn_load.c 1999/06/03 12:44:49 1.2 +@@ -48,7 +48,8 @@ + #if !defined(SUNOS4) && !defined(SUNOS5DL) && !defined(IRIX5) && \ + !defined(MSWIN32) && !(defined(ALPHA) && defined(OSF1)) && \ + !defined(HP_PA) && !(defined(LINUX) && defined(__ELF__)) && \ +- !defined(RS6000) && !defined(SCO_ELF) ++ !defined(RS6000) && !defined(SCO_ELF) && \ ++ !(defined(NETBSD) && defined(POWERPC)) + --> We only know how to find data segments of dynamic libraries for the + --> above. Additional SVR4 variants might not be too + --> hard to add. +@@ -260,14 +261,22 @@ + # endif /* !USE_PROC ... */ + # endif /* SUNOS */ + +-#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) ++#if defined(LINUX) && defined(__ELF__) || defined(SCO_ELF) || \ ++ (defined(NETBSD) && defined(POWERPC)) + + /* Dynamic loading code for Linux running ELF. Somewhat tested on + * Linux/x86, untested but hopefully should work on Linux/Alpha. + * This code was derived from the Solaris/ELF support. Thanks to + * whatever kind soul wrote that. - Patrick Bridges */ + ++#if defined(NETBSD) ++#include <sys/exec_elf.h> ++#define DT_DEBUG 21 ++#define PT_LOAD 1 ++#define PF_W 0x2 ++#else + #include <elf.h> ++#endif + #include <link.h> + + /* Newer versions of Linux/Alpha and Linux/x86 define this macro. We +Index: gc/gcconfig.h +=================================================================== +RCS file: /cvsroot/w3m/gc/gcconfig.h,v +retrieving revision 1.1.1.2 +retrieving revision 1.2 +diff -u -u -r1.1.1.2 -r1.2 +--- gc/gcconfig.h 1999/06/02 19:29:18 1.1.1.2 ++++ gc/gcconfig.h 1999/06/03 12:44:49 1.2 +@@ -48,6 +48,11 @@ + # define NETBSD + # define mach_type_known + # endif ++# if defined(__NetBSD__) && defined(__powerpc__) ++# define POWERPC ++# define NETBSD ++# define mach_type_known ++# endif + # if defined(vax) + # define VAX + # ifdef ultrix +@@ -486,8 +491,8 @@ + + # ifdef POWERPC + # define MACH_TYPE "POWERPC" +-# define ALIGNMENT 2 + # ifdef MACOS ++# define ALIGNMENT 2 + # ifndef __LOWMEM__ + # include <LowMem.h> + # endif +@@ -497,6 +502,7 @@ + # define DATAEND /* not needed */ + # endif + # ifdef LINUX ++# define ALIGNMENT 2 + # define OS_TYPE "LINUX" + # define HEURISTIC1 + # undef STACK_GRAN +@@ -504,6 +510,14 @@ + # define DATASTART GC_data_start + extern int _end; + # define DATAEND (&_end) ++# endif ++# ifdef NETBSD ++# define ALIGNMENT 4 ++# define OS_TYPE "NETBSD" ++# define HEURISTIC2 ++ extern char etext; ++# define DATASTART GC_data_start ++# define DYNAMIC_LOADING + # endif + # endif + +Index: gc/misc.c +=================================================================== +RCS file: /cvsroot/w3m/gc/misc.c,v +retrieving revision 1.1.1.1 +retrieving revision 1.2 +diff -u -u -r1.1.1.1 -r1.2 +--- gc/misc.c 1999/06/02 19:23:56 1.1.1.1 ++++ gc/misc.c 1999/06/03 12:44:50 1.2 +@@ -433,6 +433,9 @@ + # if defined(LINUX) && defined(SPARC) + GC_init_linuxsparc(); + # endif ++# if defined(NETBSD) && defined(POWERPC) ++ GC_init_netbsd_powerpc(); ++# endif + # ifdef SOLARIS_THREADS + GC_thr_init(); + /* We need dirty bits in order to find live stack sections. */ +Index: gc/os_dep.c +=================================================================== +RCS file: /cvsroot/w3m/gc/os_dep.c,v +retrieving revision 1.1.1.2 +retrieving revision 1.2 +diff -u -u -r1.1.1.2 -r1.2 +--- gc/os_dep.c 1999/06/02 19:29:10 1.1.1.2 ++++ gc/os_dep.c 1999/06/03 12:44:50 1.2 +@@ -84,6 +84,19 @@ + # include <machine/trap.h> + #endif + ++#if defined(NETBSD) && defined(POWERPC) ++ ptr_t GC_data_start; ++ ++ void GC_init_netbsd_powerpc() ++ { ++ extern ptr_t GC_find_limit(); ++ extern char **environ; ++ /* This may need to be environ, without the underscore, for */ ++ /* some versions. */ ++ GC_data_start = GC_find_limit((ptr_t)&environ, FALSE); ++ } ++#endif ++ + #ifdef AMIGA + # include <proto/exec.h> + # include <proto/dos.h> + |