diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-05-22 21:30:31 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-05-22 21:30:31 -0400 |
commit | de7ce8f171b88b2db025fdb6c8cca89c16e541dc (patch) | |
tree | ffe7a3ea3630f8437d1781201bfb5d1a9bf77b47 | |
parent | 05bb4a68ad7b05e16f942552a867da6ffb88278f (diff) | |
download | glibc-de7ce8f171b88b2db025fdb6c8cca89c16e541dc.tar.gz glibc-de7ce8f171b88b2db025fdb6c8cca89c16e541dc.tar.xz glibc-de7ce8f171b88b2db025fdb6c8cca89c16e541dc.zip |
Fix flags parameter value passed to pltenter and pltexit
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | elf/dl-runtime.c | 12 |
2 files changed, 11 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index 8a55e9da7b..eb321b7701 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-05-22 Ulrich Drepper <drepper@gmail.com> + + * elf/dl-runtime.c (_dl_profile_fixup): Also store LA_SYMB_NOPLTENTER + and LA_SYMB_NOPLTEXIT in flags which are passed to pltenter and + pltexit. + 2011-05-21 Ulrich Drepper <drepper@gmail.com> * sysdeps/unix/sysv/linux/bits/time.h: Define CLOCK_REALTIME_ALARM diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c index ae2d05c776..b27cfbf204 100644 --- a/elf/dl-runtime.c +++ b/elf/dl-runtime.c @@ -271,7 +271,7 @@ _dl_profile_fixup ( interested in auditing. */ if ((l->l_audit_any_plt | result->l_audit_any_plt) != 0) { - unsigned int altvalue = 0; + unsigned int flags = 0; struct audit_ifaces *afct = GLRO(dl_audit); /* Synthesize a symbol record where the st_value field is the result. */ @@ -294,7 +294,6 @@ _dl_profile_fixup ( if ((l->l_audit[cnt].bindflags & LA_FLG_BINDFROM) != 0 && (result->l_audit[cnt].bindflags & LA_FLG_BINDTO) != 0) { - unsigned int flags = altvalue; if (afct->symbind != NULL) { uintptr_t new_value @@ -305,7 +304,7 @@ _dl_profile_fixup ( strtab2 + defsym->st_name); if (new_value != (uintptr_t) sym.st_value) { - altvalue = LA_SYMB_ALTVALUE; + flags |= LA_SYMB_ALTVALUE; sym.st_value = new_value; } } @@ -328,7 +327,7 @@ _dl_profile_fixup ( afct = afct->next; } - reloc_result->flags = altvalue; + reloc_result->flags = flags; value = DL_FIXUP_ADDR_VALUE (sym.st_value); } else @@ -366,7 +365,7 @@ _dl_profile_fixup ( const char *symname = strtab + sym.st_name; /* Keep track of overwritten addresses. */ - unsigned int altvalue = reloc_result->flags; + unsigned int flags = reloc_result->flags; struct audit_ifaces *afct = GLRO(dl_audit); for (unsigned int cnt = 0; cnt < GLRO(dl_naudit); ++cnt) @@ -375,7 +374,6 @@ _dl_profile_fixup ( && (reloc_result->enterexit & (LA_SYMB_NOPLTENTER << (2 * (cnt + 1)))) == 0) { - unsigned int flags = altvalue; long int new_framesize = -1; uintptr_t new_value = afct->ARCH_LA_PLTENTER (&sym, reloc_result->boundndx, @@ -385,7 +383,7 @@ _dl_profile_fixup ( &new_framesize); if (new_value != (uintptr_t) sym.st_value) { - altvalue = LA_SYMB_ALTVALUE; + flags |= LA_SYMB_ALTVALUE; sym.st_value = new_value; } |