Message ID | 001f01d0be28$0f35ae90$2da10bb0$@rt-rk.com |
---|---|
State | New |
Headers | show |
On Tue, Jul 14, 2015 at 4:27 AM, Petar Jovanovic <petar.jovanovic@rt-rk.com> wrote: > ping > > -----Original Message----- > From: Petar Jovanovic [mailto:petar.jovanovic@rt-rk.com] > Sent: Friday, June 12, 2015 6:36 PM > To: 'libc-alpha@sourceware.org' > Cc: 'vapier@gentoo.org'; 'roland@hack.frob.com' > Subject: [PING 2][PATCH v4] Fix dynamic linker issue with bind-now > > ping > > -----Original Message----- > From: Petar Jovanovic [mailto:petar.jovanovic@rt-rk.com] > Sent: Tuesday, May 26, 2015 5:21 PM > To: 'libc-alpha@sourceware.org' > Cc: 'vapier@gentoo.org'; 'roland@hack.frob.com' > Subject: [PING][PATCH v4] Fix dynamic linker issue with bind-now > > PTAL. > > -----Original Message----- > From: Petar Jovanovic [mailto:petar.jovanovic@rt-rk.com] > Sent: Tuesday, April 28, 2015 8:03 PM > To: libc-alpha@sourceware.org > Cc: vapier@gentoo.org; roland@hack.frob.com; Petar Jovanovic > Subject: [PATCH v4] Fix dynamic linker issue with bind-now > > Fix the bind-now case when DT_REL and DT_JMPREL sections are separate and > there is a gap between them. > --- > v4: > - Moved the Makefile part into sysdeps/x86_64/Makefile, so the test is > executed for x86-64 only > It will be helpful to open a bug report.
-----Original Message----- From: H.J. Lu [mailto:hjl.tools@gmail.com] Sent: Tuesday, July 14, 2015 3:17 PM To: Petar Jovanovic Cc: GNU C Library; Mike Frysinger; Roland McGrath Subject: Re: [PING 3][PATCH v4] Fix dynamic linker issue with bind-now On Tue, Jul 14, 2015 at 4:27 AM, Petar Jovanovic <petar.jovanovic@rt-rk.com> wrote: > It will be helpful to open a bug report. > > -- > H.J. There has been a bug report [1] for this issue since 2012. I mentioned it in my post [2] almost a year ago. Regards, Petar [1] https://sourceware.org/bugzilla/show_bug.cgi?id=14341 [2] https://sourceware.org/ml/libc-alpha/2014-08/msg00322.html
On Tue, Jul 14, 2015 at 6:31 AM, Petar Jovanovic <petar.jovanovic@rt-rk.com> wrote: > -----Original Message----- > From: H.J. Lu [mailto:hjl.tools@gmail.com] > Sent: Tuesday, July 14, 2015 3:17 PM > To: Petar Jovanovic > Cc: GNU C Library; Mike Frysinger; Roland McGrath > Subject: Re: [PING 3][PATCH v4] Fix dynamic linker issue with bind-now > > On Tue, Jul 14, 2015 at 4:27 AM, Petar Jovanovic <petar.jovanovic@rt-rk.com> wrote: >> It will be helpful to open a bug report. >> >> -- >> H.J. > > There has been a bug report [1] for this issue since 2012. > I mentioned it in my post [2] almost a year ago. > > Regards, > Petar > > [1] https://sourceware.org/bugzilla/show_bug.cgi?id=14341 > [2] https://sourceware.org/ml/libc-alpha/2014-08/msg00322.html > Please include PR # in your patch as well as ChangeLog entry.
diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h index 8d428e2..83e760b 100644 --- a/elf/dynamic-link.h +++ b/elf/dynamic-link.h @@ -135,7 +135,9 @@ elf_machine_lazy_rel (struct link_map *map, \ if (ranges[0].start + ranges[0].size == (start + size)) \ ranges[0].size -= size; \ - if (! ELF_DURING_STARTUP && ((do_lazy) || ranges[0].size == 0)) \ + if (! ELF_DURING_STARTUP \ + && ((do_lazy) || ranges[0].size == 0 \ + || ranges[0].start + ranges[0].size != start)) \ { \ ranges[1].start = start; \ ranges[1].size = size; \ diff --git a/elf/tst-split-dynreloc.c b/elf/tst-split-dynreloc.c new file mode 100644 index 0000000..bdb6b7c --- /dev/null +++ b/elf/tst-split-dynreloc.c @@ -0,0 +1,28 @@ +/* This test will be used to create an executable with a specific + section layout in which .rela.dyn and .rela.plt are not contiguous. + For x86 case, readelf will report something like: + + ... + [10] .rela.dyn RELA + [11] .bar PROGBITS + [12] .rela.plt RELA + ... + + This is important as this case was not correctly handled by dynamic + linker in the bind-now case, and the second section was never + processed. */ + +#include <stdio.h> + +static int __attribute__ ((section(".bar"))) bar = 0x12345678; static +const char foo[] = "foo"; + +static int +do_test (void) +{ + printf ("%s %d\n", foo, bar); + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/elf/tst-split-dynreloc.lds b/elf/tst-split-dynreloc.lds new file mode 100644 index 0000000..ed0a656 --- /dev/null +++ b/elf/tst-split-dynreloc.lds @@ -0,0 +1,6 @@ +SECTIONS +{ + .bar : { *(.bar) } +} +INSERT AFTER .rela.dyn; + diff --git a/sysdeps/x86_64/Makefile b/sysdeps/x86_64/Makefile index ef70a50..b9d949c 100644 --- a/sysdeps/x86_64/Makefile +++ b/sysdeps/x86_64/Makefile @@ -38,6 +38,10 @@ tests += tst-audit3 tst-audit4 tst-audit5 tst-audit10 ifeq (yes,$(config-cflags-avx)) tests += tst-audit6 tst-audit7 endif + +tests += tst-split-dynreloc +LDFLAGS-tst-split-dynreloc = -Wl,-T,tst-split-dynreloc.lds -Wl,-z,now + modules-names += tst-auditmod3a tst-auditmod3b \ tst-auditmod4a tst-auditmod4b \ tst-auditmod5a tst-auditmod5b \ -- 1.7.9.5