This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi! This patch fixes two things: the test for whether run-program-prefix should be empty cannot be done using ifeq, because that's at the parsing time while we need to do the test at invocation time, because otherwise we call the program through ld.so even if it is in tests-static. The other issue is the reason why tst-mtrace is failing on alpha: when alpha/sparc32/sparc64 copy down argv/envp/aux arrays, they don't update _dl_argv, so it point usually somewhere into environment and mtrace is using dladdr to print where the allocation comes from (and in the alpha case it contained some spaces which mtrace program was confused about). I think ia64 does it right. I found also a bug in sparc64 dl-machine.h, where if there were some aux entries, it looped back to copying environment, not aux data, so it could copy more than it should. 2000-11-15 Jakub Jelinek <jakub@redhat.com> * Makeconfig (run-program-prefix): Move test-static test into the variable. * sysdeps/alpha/dl-machine.h (RTLD_START): Update _dl_argv. * sysdeps/sparc/sparc32/dl-machine.h (RTLD_START): Likewise, schedule instructions. * sysdeps/sparc/sparc64/dl-machine.h (RTLD_START): Likewise, schedule instructions, fix a bug in copying auxiliary data. --- libc/Makeconfig.jj Thu Nov 2 17:08:05 2000 +++ libc/Makeconfig Wed Nov 15 13:56:05 2000 @@ -495,12 +495,9 @@ sysdep-library-path = \ $(subst $(empty) ,:,$(strip $(patsubst -Wl$(comma)-rpath-link=%, %,\ $(filter -Wl$(comma)-rpath-link=%,\ $(sysdep-LDFLAGS))))) -ifeq (,$(findstring $(notdir $(built-program-file)), $(tests-static))) -run-program-prefix = $(elf-objpfx)$(rtld-installed-name) \ - --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) -else -run-program-prefix = -endif +run-program-prefix = $(if $(findstring $(notdir $(built-program-file)), $(tests-static)),, \ + $(elf-objpfx)$(rtld-installed-name) \ + --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path))) else run-program-prefix = endif --- libc/sysdeps/alpha/dl-machine.h.jj Wed Oct 25 11:14:38 2000 +++ libc/sysdeps/alpha/dl-machine.h Wed Nov 15 11:25:49 2000 @@ -314,10 +314,14 @@ $fixup_stack: involves copying everything down, since the stack pointer must always be 16-byte aligned. */ ldq $2, 0($sp) + ldq $5, _dl_argv + subq $31, $1, $6 subq $2, $1, $2 + s8addq $6, $5, $5 mov $sp, $4 s8addq $1, $sp, $3 stq $2, 0($sp) + stq $5, _dl_argv /* Copy down argv. */ 0: ldq $5, 8($3) addq $4, 8, $4 --- libc/sysdeps/sparc/sparc32/dl-machine.h.jj Wed Oct 25 11:14:48 2000 +++ libc/sysdeps/sparc/sparc32/dl-machine.h Wed Nov 15 10:57:59 2000 @@ -224,23 +224,29 @@ _dl_start_user: sethi %hi(__libc_stack_end), %g2 or %g2, %lo(__libc_stack_end), %g2 ld [%l7 + %g2], %l1 + sethi %hi(_dl_skip_args), %g2 add %sp, 6*4, %l2 + or %g2, %lo(_dl_skip_args), %g2 st %l2, [%l1] /* See if we were run as a command with the executable file name as an extra leading argument. If so, adjust the contents of the stack. */ - sethi %hi(_dl_skip_args), %g2 - or %g2, %lo(_dl_skip_args), %g2 ld [%l7+%g2], %i0 ld [%i0], %i0 tst %i0 beq 3f ld [%sp+22*4], %i5 /* load argc */ /* Find out how far to shift. */ + sethi %hi(_dl_argv), %l3 + or %l3, %lo(_dl_argv), %l3 + ld [%l7+%l3], %l3 sub %i5, %i0, %i5 + ld [%l3], %l4 sll %i0, 2, %i2 st %i5, [%sp+22*4] + sub %l4, %i2, %l4 add %sp, 23*4, %i1 add %i1, %i2, %i2 + st %l4, [%l3] /* Copy down argv */ 21: ld [%i2], %i3 add %i2, 4, %i2 --- libc/sysdeps/sparc/sparc64/dl-machine.h.jj Wed Oct 25 11:14:48 2000 +++ libc/sysdeps/sparc/sparc64/dl-machine.h Wed Nov 15 11:06:14 2000 @@ -544,38 +544,43 @@ _start: _dl_start_user: /* Load the GOT register. */ 1: call 11f - sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7 -11: or %l7,%lo(_GLOBAL_OFFSET_TABLE_-(1b-.)),%l7 - add %l7,%o7,%l7 - /* Save the user entry point address in %l0. */ - mov %o0,%l0 + sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 +11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 /* Store the highest stack address. */ sethi %hi(__libc_stack_end), %g5 + add %l7, %o7, %l7 or %g5, %lo(__libc_stack_end), %g5 + /* Save the user entry point address in %l0. */ + mov %o0, %l0 ldx [%l7 + %g5], %l1 + sethi %hi(_dl_skip_args), %g5 add %sp, 6*8, %l2 - stx %l2, [%l1] /* See if we were run as a command with the executable file name as an extra leading argument. If so, we must shift things around since we must keep the stack doubleword aligned. */ - sethi %hi(_dl_skip_args), %g5 or %g5, %lo(_dl_skip_args), %g5 - ldx [%l7+%g5], %i0 + stx %l2, [%l1] + ldx [%l7 + %g5], %i0 ld [%i0], %i0 brz,pt %i0, 2f - ldx [%sp+" __S(STACK_BIAS) "+22*8], %i5 + ldx [%sp + " __S(STACK_BIAS) " + 22*8], %i5 /* Find out how far to shift. */ + sethi %hi(_dl_argv), %l4 sub %i5, %i0, %i5 - sllx %i0, 3, %i2 - stx %i5, [%sp+" __S(STACK_BIAS) "+22*8] - add %sp, " __S(STACK_BIAS) "+23*8, %i1 - add %i1, %i2, %i2 + or %l4, %lo(_dl_argv), %l4 + sllx %i0, 3, %l6 + ldx [%l7 + %l4], %l4 + stx %i5, [%sp + " __S(STACK_BIAS) " + 22*8] + add %sp, " __S(STACK_BIAS) " + 23*8, %i1 + add %i1, %l6, %i2 + ldx [%l4], %l5 /* Copy down argv. */ 12: ldx [%i2], %i3 add %i2, 8, %i2 stx %i3, [%i1] brnz,pt %i3, 12b add %i1, 8, %i1 + sub %l5, %l6, %l5 /* Copy down envp. */ 13: ldx [%i2], %i3 add %i2, 8, %i2 @@ -584,18 +589,19 @@ _dl_start_user: add %i1, 8, %i1 /* Copy down auxiliary table. */ 14: ldx [%i2], %i3 - ldx [%i2+8], %i4 + ldx [%i2 + 8], %i4 add %i2, 16, %i2 stx %i3, [%i1] - stx %i4, [%i1+8] - brnz,pt %i3, 13b + stx %i4, [%i1 + 8] + brnz,pt %i3, 14b add %i1, 16, %i1 + stx %l5, [%l4] /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */ 2: sethi %hi(_dl_loaded), %o0 - add %sp, " __S(STACK_BIAS) "+23*8, %o2 + add %sp, " __S(STACK_BIAS) " + 23*8, %o2 orcc %o0, %lo(_dl_loaded), %o0 sllx %i5, 3, %o3 - ldx [%l7+%o0], %o0 + ldx [%l7 + %o0], %o0 add %o3, 8, %o3 mov %i5, %o1 add %o2, %o3, %o3 @@ -604,7 +610,7 @@ _dl_start_user: /* Pass our finalizer function to the user in %g1. */ sethi %hi(_dl_fini), %g1 or %g1, %lo(_dl_fini), %g1 - ldx [%l7+%g1], %g1 + ldx [%l7 + %g1], %g1 /* Jump to the user's entry point and deallocate the extra stack we got. */ jmp %l0 add %sp, 6*8, %sp Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |