Don't allocate .got.plt section if there are no GOT nor PLT entries.

bfd/

2010-07-13  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/11812
	* elf32-i386.c (elf_i386_size_dynamic_sections): Don't
	 allocate .got.plt section if there are no GOT nor PLT
	 entries.
	 * elf64-x86-64.c (elf64_x86_64_size_dynamic_sections): Likewise.

ld/testsuite/

2010-07-13  H.J. Lu  <hongjiu.lu@intel.com>

	PR ld/11812
	* ld-elf/exclude3b.d: Don't run on ia64-*-*.  Replace .got with
	.dynamic.

	* ld-elf/exclude3d.d: New.
	* ld-i386/nogot1.d: Likewise.
	* ld-i386/nogot1.s: Likewise.
	* ld-x86-64/nogot1.d: Likewise.
	* ld-x86-64/nogot1.s: Likewise.

	* ld-i386/i386.exp: Run nogot1.
	* ld-x86-64/x86-64.exp: Likewise.
This commit is contained in:
H.J. Lu 2010-07-14 00:30:57 +00:00
parent 6ae10a3087
commit a7b16ceb92
12 changed files with 106 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11812
* elf32-i386.c (elf_i386_size_dynamic_sections): Don't
allocate .got.plt section if there are no GOT nor PLT
entries.
* elf64-x86-64.c (elf64_x86_64_size_dynamic_sections): Likewise.
2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11791

View File

@ -2555,6 +2555,23 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
if (htab->elf.srelplt)
htab->sgotplt_jump_table_size = htab->next_tls_desc_index * 4;
if (htab->elf.sgotplt)
{
/* Don't allocate .got.plt section if there are no GOT nor PLT
entries. */
if ((htab->elf.sgotplt->size
== get_elf_backend_data (output_bfd)->got_header_size)
&& (htab->elf.splt == NULL
|| htab->elf.splt->size == 0)
&& (htab->elf.sgot == NULL
|| htab->elf.sgot->size == 0)
&& (htab->elf.iplt == NULL
|| htab->elf.iplt->size == 0)
&& (htab->elf.igotplt == NULL
|| htab->elf.igotplt->size == 0))
htab->elf.sgotplt->size = 0;
}
/* We now have determined the sizes of the various dynamic sections.
Allocate memory for them. */
relocs = FALSE;

View File

@ -2374,6 +2374,23 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
}
}
if (htab->elf.sgotplt)
{
/* Don't allocate .got.plt section if there are no GOT nor PLT
entries. */
if ((htab->elf.sgotplt->size
== get_elf_backend_data (output_bfd)->got_header_size)
&& (htab->elf.splt == NULL
|| htab->elf.splt->size == 0)
&& (htab->elf.sgot == NULL
|| htab->elf.sgot->size == 0)
&& (htab->elf.iplt == NULL
|| htab->elf.iplt->size == 0)
&& (htab->elf.igotplt == NULL
|| htab->elf.igotplt->size == 0))
htab->elf.sgotplt->size = 0;
}
/* We now have determined the sizes of the various dynamic sections.
Allocate memory for them. */
relocs = FALSE;

View File

@ -1,3 +1,18 @@
2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11812
* ld-elf/exclude3b.d: Don't run on ia64-*-*. Replace .got with
.dynamic.
* ld-elf/exclude3d.d: New.
* ld-i386/nogot1.d: Likewise.
* ld-i386/nogot1.s: Likewise.
* ld-x86-64/nogot1.d: Likewise.
* ld-x86-64/nogot1.s: Likewise.
* ld-i386/i386.exp: Run nogot1.
* ld-x86-64/x86-64.exp: Likewise.
2010-07-13 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/hidden2.d: Don't hard code expected output.

View File

@ -1,9 +1,9 @@
#source: exclude3.s
#ld: --shared
#readelf: -S --wide
#target: x86_64-*-* i?86-*-* ia64-*-*
#target: x86_64-*-* i?86-*-*
#...
[ ]*\[.*\][ ]+\.got.*[ ]+PROGBITS.*
[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
[ ]*\[.*\][ ]+.*STRTAB.*
#pass

View File

@ -0,0 +1,9 @@
#source: exclude3.s
#ld: --shared
#readelf: -S --wide
#target: ia64-*-*
#...
[ ]*\[.*\][ ]+\.got.*[ ]+PROGBITS.*
[ ]*\[.*\][ ]+.*STRTAB.*
#pass

View File

@ -189,3 +189,4 @@ run_dump_test "protected1"
run_dump_test "protected2"
run_dump_test "protected3"
run_dump_test "tlspie1"
run_dump_test "nogot1"

View File

@ -0,0 +1,8 @@
#ld: --shared -melf_i386
#readelf: -S --wide
#as: --32
#...
[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
[ ]*\[.*\][ ]+.*STRTAB.*
#pass

View File

@ -0,0 +1,10 @@
.type bar, @function
bar:
ret
.size bar, .-bar
.globl foo
.type foo, @function
foo:
leal bar@GOTOFF(%ecx), %eax
ret
.size foo, .-foo

View File

@ -0,0 +1,8 @@
#ld: --shared -melf_x86_64
#readelf: -S --wide
#as: --64
#...
[ ]*\[.*\][ ]+\.dynamic[ ]+DYNAMIC.*
[ ]*\[.*\][ ]+.*STRTAB.*
#pass

View File

@ -0,0 +1,10 @@
.type bar, @function
bar:
ret
.size bar, .-bar
.globl foo
.type foo, @function
foo:
leaq bar(%rip), %rax
ret
.size foo, .-foo

View File

@ -98,3 +98,4 @@ run_dump_test "protected3-l1om"
run_dump_test "tlsle1"
run_dump_test "tlspie1"
run_dump_test "unique1"
run_dump_test "nogot1"