mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 23:39:35 +08:00
Don't resolve size relocation against non-zero TLS symbol
bfd/ * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't clear pc_count for non-zero TLS symbol. (elf_i386_relocate_section): Don't resolve size relocation against non-zero TLS symbol. * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Don't clear pc_count for non-zero TLS symbol. (elf_x86_64_relocate_section): Don't resolve size relocation against non-zero TLS symbol. ld/testsuite/ * ld-size/size-10.rd: Updated. * ld-size/size-8.rd: Likewise. * ld-size/size32-2-i386.d: Likewise. * ld-size/size32-2-x32.d: Likewise. * ld-size/size32-2-x86-64.d: Likewise. * ld-size/size64-2-x32.d: Likewise. * ld-size/size64-2-x86-64.d: Likewise. * ld-size/size.exp (run_time_tests): Pass --hash-styl=gnu to linker for size-8 test.
This commit is contained in:
@ -1,5 +1,16 @@
|
|||||||
|
2013-02-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* elf32-i386.c (elf_i386_allocate_dynrelocs): Don't clear pc_count
|
||||||
|
for non-zero TLS symbol.
|
||||||
|
(elf_i386_relocate_section): Don't resolve size relocation against
|
||||||
|
non-zero TLS symbol.
|
||||||
|
* elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Don't clear
|
||||||
|
pc_count for non-zero TLS symbol.
|
||||||
|
(elf_x86_64_relocate_section): Don't resolve size relocation
|
||||||
|
against non-zero TLS symbol.
|
||||||
|
|
||||||
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
|
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
Andrew Jenner <andrew@codesourcery.com>
|
Andrew Jenner <andrew@codesourcery.com>
|
||||||
|
|
||||||
Based on patches from Altera Corporation.
|
Based on patches from Altera Corporation.
|
||||||
|
|
||||||
|
@ -2358,24 +2358,6 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||||||
if (eh->dyn_relocs == NULL)
|
if (eh->dyn_relocs == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Since pc_count for TLS symbol can only have size relocations and
|
|
||||||
we always resolve size relocation against non-zero TLS symbol, we
|
|
||||||
clear pc_count for non-zero TLS symbol. */
|
|
||||||
if (h->type == STT_TLS && h->size != 0)
|
|
||||||
{
|
|
||||||
struct elf_dyn_relocs **pp;
|
|
||||||
|
|
||||||
for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
|
|
||||||
{
|
|
||||||
p->count -= p->pc_count;
|
|
||||||
p->pc_count = 0;
|
|
||||||
if (p->count == 0)
|
|
||||||
*pp = p->next;
|
|
||||||
else
|
|
||||||
pp = &p->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In the shared -Bsymbolic case, discard space allocated for
|
/* In the shared -Bsymbolic case, discard space allocated for
|
||||||
dynamic pc-relative relocs against symbols which turn out to be
|
dynamic pc-relative relocs against symbols which turn out to be
|
||||||
defined in regular objects. For the normal shared case, discard
|
defined in regular objects. For the normal shared case, discard
|
||||||
@ -3709,12 +3691,6 @@ elf_i386_relocate_section (bfd *output_bfd,
|
|||||||
case R_386_SIZE32:
|
case R_386_SIZE32:
|
||||||
/* Set to symbol size. */
|
/* Set to symbol size. */
|
||||||
relocation = st_size;
|
relocation = st_size;
|
||||||
if (h && h->type == STT_TLS && st_size != 0)
|
|
||||||
{
|
|
||||||
/* Resolve size relocation against non-zero TLS symbol. */
|
|
||||||
unresolved_reloc = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* Fall through. */
|
/* Fall through. */
|
||||||
|
|
||||||
case R_386_32:
|
case R_386_32:
|
||||||
|
@ -2400,24 +2400,6 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
|
|||||||
if (eh->dyn_relocs == NULL)
|
if (eh->dyn_relocs == NULL)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Since pc_count for TLS symbol can only have size relocations and
|
|
||||||
we always resolve size relocation against non-zero TLS symbol, we
|
|
||||||
clear pc_count for non-zero TLS symbol. */
|
|
||||||
if (h->type == STT_TLS && h->size != 0)
|
|
||||||
{
|
|
||||||
struct elf_dyn_relocs **pp;
|
|
||||||
|
|
||||||
for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
|
|
||||||
{
|
|
||||||
p->count -= p->pc_count;
|
|
||||||
p->pc_count = 0;
|
|
||||||
if (p->count == 0)
|
|
||||||
*pp = p->next;
|
|
||||||
else
|
|
||||||
pp = &p->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* In the shared -Bsymbolic case, discard space allocated for
|
/* In the shared -Bsymbolic case, discard space allocated for
|
||||||
dynamic pc-relative relocs against symbols which turn out to be
|
dynamic pc-relative relocs against symbols which turn out to be
|
||||||
defined in regular objects. For the normal shared case, discard
|
defined in regular objects. For the normal shared case, discard
|
||||||
@ -3705,12 +3687,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|||||||
case R_X86_64_SIZE64:
|
case R_X86_64_SIZE64:
|
||||||
/* Set to symbol size. */
|
/* Set to symbol size. */
|
||||||
relocation = st_size;
|
relocation = st_size;
|
||||||
if (h && h->type == STT_TLS && st_size != 0)
|
|
||||||
{
|
|
||||||
/* Resolve size relocation against non-zero TLS symbol. */
|
|
||||||
unresolved_reloc = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
goto direct;
|
goto direct;
|
||||||
|
|
||||||
case R_X86_64_PC8:
|
case R_X86_64_PC8:
|
||||||
|
@ -1,5 +1,18 @@
|
|||||||
|
2013-02-06 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* ld-size/size-10.rd: Updated.
|
||||||
|
* ld-size/size-8.rd: Likewise.
|
||||||
|
* ld-size/size32-2-i386.d: Likewise.
|
||||||
|
* ld-size/size32-2-x32.d: Likewise.
|
||||||
|
* ld-size/size32-2-x86-64.d: Likewise.
|
||||||
|
* ld-size/size64-2-x32.d: Likewise.
|
||||||
|
* ld-size/size64-2-x86-64.d: Likewise.
|
||||||
|
|
||||||
|
* ld-size/size.exp (run_time_tests): Pass --hash-styl=gnu to
|
||||||
|
linker for size-8 test.
|
||||||
|
|
||||||
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
|
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
|
||||||
Andrew Jenner <andrew@codesourcery.com>
|
Andrew Jenner <andrew@codesourcery.com>
|
||||||
|
|
||||||
Based on patches from Altera Corporation.
|
Based on patches from Altera Corporation.
|
||||||
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#failif
|
|
||||||
#...
|
|
||||||
.* +R_.*_NONE +.*
|
|
||||||
#...
|
#...
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_.*_SIZE(32|64) +.*
|
||||||
|
#pass
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
#failif
|
|
||||||
#...
|
|
||||||
.* +R_.*_NONE +.*
|
|
||||||
#...
|
#...
|
||||||
|
[0-9a-f]+ +[0-9a-f]+ +R_.*_SIZE(32|64) +.*
|
||||||
|
#pass
|
||||||
|
@ -156,7 +156,7 @@ if { [regexp_diff "tmpdir/dump.out" "$srcdir/$subdir/size-7.out" ] } then {
|
|||||||
# Run-time size relocation tests.
|
# Run-time size relocation tests.
|
||||||
set run_time_tests {
|
set run_time_tests {
|
||||||
{"Run size-8"
|
{"Run size-8"
|
||||||
"tmpdir/libsize-8.so" ""
|
"tmpdir/libsize-8.so --hash-styl=gnu" ""
|
||||||
{size-8a.c} "size-8" "size-8.out"}
|
{size-8a.c} "size-8" "size-8.out"}
|
||||||
{"Run size-9"
|
{"Run size-9"
|
||||||
"tmpdir/libsize-9.so" ""
|
"tmpdir/libsize-9.so" ""
|
||||||
|
@ -8,11 +8,13 @@
|
|||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+1234 R_386_SIZE32 zzz
|
0+123c R_386_SIZE32 xxx
|
||||||
0+1238 R_386_SIZE32 zzz
|
0+1240 R_386_SIZE32 yyy
|
||||||
0+123c R_386_SIZE32 zzz
|
0+1244 R_386_SIZE32 zzz
|
||||||
|
0+1248 R_386_SIZE32 zzz
|
||||||
|
0+124c R_386_SIZE32 zzz
|
||||||
|
|
||||||
|
|
||||||
Contents of section .data:
|
Contents of section .data:
|
||||||
122c 28000000 28000000 00000000 e2ffffff ................
|
123c 00000000 00000000 00000000 e2ffffff ................
|
||||||
123c 1e000000 ....
|
124c 1e000000 ....
|
||||||
|
@ -8,11 +8,13 @@
|
|||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+200268 R_X86_64_SIZE32 zzz
|
0+200278 R_X86_64_SIZE32 xxx
|
||||||
0+20026c R_X86_64_SIZE32 zzz-0x0000001e
|
0+20027c R_X86_64_SIZE32 yyy
|
||||||
0+200270 R_X86_64_SIZE32 zzz\+0x0000001e
|
0+200280 R_X86_64_SIZE32 zzz
|
||||||
|
0+200284 R_X86_64_SIZE32 zzz-0x0000001e
|
||||||
|
0+200288 R_X86_64_SIZE32 zzz\+0x0000001e
|
||||||
|
|
||||||
|
|
||||||
Contents of section .data:
|
Contents of section .data:
|
||||||
200260 28000000 28000000 00000000 00000000 ................
|
200278 00000000 00000000 00000000 00000000 ................
|
||||||
200270 00000000 ....
|
200288 00000000 ....
|
||||||
|
@ -8,11 +8,13 @@
|
|||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+2003b0 R_X86_64_SIZE32 zzz
|
0+2003d8 R_X86_64_SIZE32 xxx
|
||||||
0+2003b4 R_X86_64_SIZE32 zzz-0x000000000000001e
|
0+2003dc R_X86_64_SIZE32 yyy
|
||||||
0+2003b8 R_X86_64_SIZE32 zzz\+0x000000000000001e
|
0+2003e0 R_X86_64_SIZE32 zzz
|
||||||
|
0+2003e4 R_X86_64_SIZE32 zzz-0x000000000000001e
|
||||||
|
0+2003e8 R_X86_64_SIZE32 zzz\+0x000000000000001e
|
||||||
|
|
||||||
|
|
||||||
Contents of section .data:
|
Contents of section .data:
|
||||||
2003a8 28000000 28000000 00000000 00000000 ................
|
2003d8 00000000 00000000 00000000 00000000 ................
|
||||||
2003b8 00000000 ....
|
2003e8 00000000 ....
|
||||||
|
@ -8,12 +8,14 @@
|
|||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+200270 R_X86_64_SIZE32 zzz
|
0+200278 R_X86_64_SIZE32 xxx
|
||||||
0+200278 R_X86_64_SIZE64 zzz-0x0000001e
|
0+200280 R_X86_64_SIZE32 yyy
|
||||||
0+200280 R_X86_64_SIZE64 zzz\+0x0000001e
|
0+200288 R_X86_64_SIZE32 zzz
|
||||||
|
0+200290 R_X86_64_SIZE64 zzz-0x0000001e
|
||||||
|
0+200298 R_X86_64_SIZE64 zzz\+0x0000001e
|
||||||
|
|
||||||
|
|
||||||
Contents of section .data:
|
Contents of section .data:
|
||||||
200260 28000000 00000000 28000000 00000000 ................
|
200278 00000000 00000000 00000000 00000000 ................
|
||||||
200270 00000000 00000000 00000000 00000000 ................
|
200288 00000000 00000000 00000000 00000000 ................
|
||||||
200280 00000000 00000000 ........
|
200298 00000000 00000000 ........
|
||||||
|
@ -8,12 +8,14 @@
|
|||||||
|
|
||||||
DYNAMIC RELOCATION RECORDS
|
DYNAMIC RELOCATION RECORDS
|
||||||
OFFSET TYPE VALUE
|
OFFSET TYPE VALUE
|
||||||
0+2003b8 R_X86_64_SIZE64 zzz
|
0+2003d8 R_X86_64_SIZE64 xxx
|
||||||
0+2003c0 R_X86_64_SIZE64 zzz-0x000000000000001e
|
0+2003e0 R_X86_64_SIZE64 yyy
|
||||||
0+2003c8 R_X86_64_SIZE64 zzz\+0x000000000000001e
|
0+2003e8 R_X86_64_SIZE64 zzz
|
||||||
|
0+2003f0 R_X86_64_SIZE64 zzz-0x000000000000001e
|
||||||
|
0+2003f8 R_X86_64_SIZE64 zzz\+0x000000000000001e
|
||||||
|
|
||||||
|
|
||||||
Contents of section .data:
|
Contents of section .data:
|
||||||
2003a8 28000000 00000000 28000000 00000000 ................
|
2003d8 00000000 00000000 00000000 00000000 ................
|
||||||
2003b8 00000000 00000000 00000000 00000000 ................
|
2003e8 00000000 00000000 00000000 00000000 ................
|
||||||
2003c8 00000000 00000000 ........
|
2003f8 00000000 00000000 ........
|
||||||
|
Reference in New Issue
Block a user