Re: stack base (was Re: someone could port libgc)
>
> >
> > > Doesn't it store it in __libc_stack_end? See
> > > libc/sysdeps/generic/libc-start.c . This program
> > >
> > > extern void* __libc_stack_end;
> > > main () { printf ("%p\n", __libc_stack_end); }
> > >
> > > prints 0xbffffd1c on Linux/i386 and 0x101abfc on Hurd.
> >
Have done some testing of this, whilst working on libgc. The address above is
not readable and generates a SIGBUS, (well it does here, have you tried reading
the contents of this pointer)? I need to work out a 'stack start' for libgc,
but cannot use the above variable.
The package libgc has code to find the stack start, by starting with any stack
address, then reading successive higher/lower (stack direction) addresses until
this generates a either a SIGBUS or SIGSEGV signal. The signal is generated at
the boundary.
I have also been told that using a fixed address is not safe for the Hurd.
One strange anomoly is that this works fine for C; but when I use it in C++ then
signal handlers are not called
(gdb) run mop.cc
Starting program: /home/cal/openc++2.5.7/src/occ mop.cc
[Switching to thread 1246.3]
[Switching to thread 1246.4]
Program received signal SIGBUS, Bus error.
0x1030fbd in GC_find_limit (p=0x1019a08 "¸\212\001", up=1) at ../os_dep.c:604
604 GC_noop1((word)(*result));
Current language: auto; currently c
(gdb) quit
This is at start up, when the program is initialising everything, and before it
gets to main. Does C++ disable signals?
Chris
Reply to: