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>