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 +#define DT_DEBUG 21 +#define PT_LOAD 1 +#define PF_W 0x2 +#else #include +#endif #include /* 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 # 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 #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 # include