On Mon, Jan 07, 2002 at 10:51:40PM +0100, Marcus Brinkmann wrote: > 0x8048494 <_hurd_stack_setup>: push %ebp > 0x8048495 <_hurd_stack_setup+1>: mov %esp,%ebp > 0x8048497 <_hurd_stack_setup+3>: push %ebx > 0x8048498 <_hurd_stack_setup+4>: sub $0x24,%esp > 0x804849b <_hurd_stack_setup+7>: mov 0x8(%ebp),%eax
So far I have been able to reduce the offending code, by trial-and-error, to this: extern void __mach_init (void); void _hurd_stack_setup (int argc __attribute__ ((unused)), ...) { void doinit (int *data) { *--data = (&argc)[-1]; } __mach_init (); } Which produces: _hurd_stack_setup: pushl %ebp movl %esp, %ebp subl $8, %esp movl 8(%ebp), %eax movl %eax, -4(%ebp) call __mach_init leave ret Which has a movl 8(%ebp), %eax, just like the one above. This is related to the function-within-function. For example: extern void __mach_init (void); void _hurd_stack_setup (int argc __attribute__ ((unused)), ...) { int *data; *--data = (&argc)[-1]; __mach_init (); } Has: _hurd_stack_setup: pushl %ebp movl %esp, %ebp subl $8, %esp movl 4(%ebp), %eax movl %eax, -4(%edx) call __mach_init leave ret BTW, the corresponding glibc-2.2.4/gcc2.95 code for the above code (function in function) is _hurd_stack_setup: pushl %ebp movl %esp,%ebp subl $24,%esp leal 8(%ebp),%eax movl %eax,-4(%ebp) call __mach_init leave ret Mmmh. It does the same derefernce 8(%ebp). Maybe the code is right and the problem is even before that? Thanks, Marcus -- `Rhubarb is no Egyptian god.' Debian http://www.debian.org [EMAIL PROTECTED] Marcus Brinkmann GNU http://www.gnu.org [EMAIL PROTECTED] [EMAIL PROTECTED] http://www.marcus-brinkmann.de _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd