[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

ia64 and garbage collection

Greetings!  gcl uses its own garbage collector, which has been
successfully tested on all Debian architectures except ia64 and hppa
(including successful tests on the 64bit alpha).  The algorithm is a
simple mark-sweep.  On the ia64, variables which the gcl algorithm
thinks should be on the C stack are missed in the marking phase, and
then erroneously swept.  I've checked this in a debugger, and can
provide a more detailed report on request.  But the essence appears to
be that certain stack variables are stored in registers even across
function calls.  For example, stopping at the point of erroneous
sweeping in gdb, a backtrace shows an earlier frame with a stack
variable holding the address in question, but for which gdb cannot
report an address.  Certain stack variables can print their address
with 'p &i', for example, and others cannot.  I assume this is because
the variables are stored in registers.

1) Is there a work around, i.e. a way in which I can ensure clearing
   all registers back to the stack at a certain point in the program?
2) I thought that the compiler flags -fvolatile{,-global,-static}
   would do this throughout the code, but it doesn't.

Any advice much appreciated!

Take care,  

Camm Maguire			     			camm@enhanced.com
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply to: