This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! Is this beast ever going to die... On Fri, 22 Jul 2011 17:53:12 +0200, ludo@gnu.org wrote: > Pushed a slightly different version, thanks! > > http://git.savannah.gnu.org/cgit/hurd/glibc.git/commit/?h=t/init-first.c&id=53b56b1101fc9bb4f295f23f54e7e19f8da8da16 Just a heads-up, and I'm afraid, but with this patch I get: $ ./testrun.sh ./libc.so Segmentation fault Undoing it (see below), I'm back in service: $ ./testrun.sh ./libc.so GNU C Library development release version 2.11.90, by Roland McGrath et al. [...] This is still based on 2010-04 glibc sources, GCC 4.4, and old binutils 2.20.1. Perhaps it'd really be best to write this in a few lines of assembly? Undo patch: diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c index caf65bb..7d93638 100644 --- a/sysdeps/mach/hurd/i386/init-first.c +++ b/sysdeps/mach/hurd/i386/init-first.c @@ -257,8 +257,8 @@ init (int *data) /* Push the user code address on the top of the new stack. It will be the return address for `init1'; we will jump there with NEWSP as the stack pointer. */ - *--newsp = __builtin_return_address (0); - * ((void **) __builtin_frame_address (0) + 1) = &switch_stacks; + *--newsp = data[-1]; + data[-1] = (int) &switch_stacks; /* Force NEWSP into %eax and &init1 into %ecx, which are not restored by function return. */ asm volatile ("# a %0 c %1" : : "a" (newsp), "c" (&init1)); @@ -286,8 +286,8 @@ init (int *data) /* The argument data is just above the stack frame we will unwind by returning. Mutate our own return address to run the code below. */ - usercode = __builtin_return_address (0); - * ((void **) __builtin_frame_address (0) + 1) = &call_init1; + usercode = data[-1]; + data[-1] = (int) &call_init1; /* Force USERCODE into %eax and &init1 into %ecx, which are not restored by function return. */ asm volatile ("# a %0 c %1" : : "a" (usercode), "c" (&init1)); GrÃÃe, Thomas
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |