This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
ia64 and garbage collection
- From: Camm Maguire <camm at enhanced dot com>
- To: gcc at gcc dot gnu dot org
- Cc: gcl-devel at gnu dot org, debian-ia64 at lists dot debian dot org
- Date: Tue, 30 Jul 2002 13:33:12 -0400
- Subject: 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