Subject: w3m

From: Nicholas Clark <[email-masked]>
Date: Thu, 24 Feb 2000 19:46:53 +0000

Has anyone taken a look at w3m on ARM linux? w3m uses a garbage collection
library (http://reality.sgi.com/boehm/gc.html) that seems to have a sick
makingly hacky desire to know:

the address of the beginning and end of the data segment.
the address of cool end of the stack, which is usually the highest address in
the stack.
what registers might contain pointers
how shared libraries work (so as to find where they might be squirreling
pointers

and possibly a couple of other cringeworthily non-portable things.

Anyway, I found that with the attached patch to the gc library the gc library
appears to be happy to compile and pass its testsuite, and w3m compiles and runs
(for the time I tried it) without segving. However, I've no idea if it'sleaking
slowly, or about to suffer horrible death by freeing things it should not.

Does anyone here have any idea or experience. Have I duplicated someone else's
patching?

Nick

PS gc library has (IMHO) bad habit of just leaving plain text comments in as
   error traps, rather than using a #error
   Aaaaaaargh

*** w3m/gc/gcconfig.h.orig	Thu Nov 11 05:21:05 1999
--- w3m/gc/gcconfig.h	Thu Feb 24 17:57:33 2000
***************
*** 270,275 ****
--- 270,280 ----
  #   endif
  #   define mach_type_known
  # endif
+ # if defined(__arm__) &&  defined(__linux__)
+ #    define ARM
+ #    define LINUX
+ #    define mach_type_known
+ # endif
  
  /* Feel free to add more clauses here */
  
***************
*** 281,287 ****
  /* SYSV on an M68K actually means A/UX.					*/
  /* The distinction in these cases is usually the stack starting address */
  # ifndef mach_type_known
! 	--> unknown machine type
  # endif
  		    /* Mapping is: M68K       ==> Motorola 680X0	*/
  		    /*		   (SUNOS4,HP,NEXT, and SYSV (A/UX),	*/
--- 286,292 ----
  /* SYSV on an M68K actually means A/UX.					*/
  /* The distinction in these cases is usually the stack starting address */
  # ifndef mach_type_known
! #error	--> unknown machine type
  # endif
  		    /* Mapping is: M68K       ==> Motorola 680X0	*/
  		    /*		   (SUNOS4,HP,NEXT, and SYSV (A/UX),	*/
***************
*** 983,988 ****
--- 988,1002 ----
  #       define DATASTART (ptr_t)GC_SysVGetDataStart(0x10000, &_etext)
  #	define DATAEND (&_end)
  #	define HEURISTIC2
+ # endif
+ 
+ # ifdef ARM
+ #   define MACH_TYPE "ARM"
+ #   define ALIGNMENT 4
+ 		 extern int __data_start;
+ #		 define DATASTART ((ptr_t)(&__data_start))
+ #define USE_GENERIC_PUSH_REGS
+ #	define HEURISTIC1
  # endif
  
  # ifndef STACK_GROWS_UP

unsubscribe: body of `unsubscribe linux-arm' to [email-masked]
++        Please use [email-masked] for           ++
++                        kernel-related discussions.                      ++