mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 21:10:07 +00:00
fa19d5c48a
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.
29 lines
712 B
C
29 lines
712 B
C
/* 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"
|