diff options
author | Petar Jovanovic <petar.jovanovic@rt-rk.com> | 2014-08-20 00:50:54 +0200 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-08-19 05:37:01 -0700 |
commit | fa19d5c48a6b36518ce68412e3bdde6bfa8aa4a6 (patch) | |
tree | feace153d8cbcbcf965076a32bdceee33d5c9895 /sysdeps/x86_64/tst-split-dynreloc.c | |
parent | 33c898d1607c1b8dac69c76eec289980292ebfc2 (diff) | |
download | glibc-fa19d5c48a6b36518ce68412e3bdde6bfa8aa4a6.zip glibc-fa19d5c48a6b36518ce68412e3bdde6bfa8aa4a6.tar.gz glibc-fa19d5c48a6b36518ce68412e3bdde6bfa8aa4a6.tar.bz2 |
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.
[BZ #14341]
* elf/dynamic-link.h (elf_machine_lazy_rel): Properly handle the
case when there is a gap between DT_REL and DT_JMPREL sections.
* sysdeps/x86_64/Makefile (tests): Add tst-split-dynreloc.
(LDFLAGS-tst-split-dynreloc): New.
(tst-split-dynreloc-ENV): Likewise.
* sysdeps/x86_64/tst-split-dynreloc.c: New file.
* sysdeps/x86_64/tst-split-dynreloc.lds: Likewise.
Diffstat (limited to 'sysdeps/x86_64/tst-split-dynreloc.c')
-rw-r--r-- | sysdeps/x86_64/tst-split-dynreloc.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sysdeps/x86_64/tst-split-dynreloc.c b/sysdeps/x86_64/tst-split-dynreloc.c new file mode 100644 index 0000000..2f9e9b9 --- /dev/null +++ b/sysdeps/x86_64/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> + +const 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" |