Check if .got.plt section is discarded before using it.

bfd/

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

	PR ld/11913
	* elf32-i386.c (elf_i386_finish_dynamic_sections): Check if
	 .got.plt section is discarded.
	 * elf64-x86-64.c (elf64_x86_64_finish_dynamic_sections): Likewise.

ld/testsuite/

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

	PR ld/11913
	* ld-i386/discarded1.d: New.
	* ld-i386/discarded1.s: Likewise.
	* ld-i386/discarded1.t: Likewise.
	* ld-x86-64/discarded1.d: Likewise.
	* ld-x86-64/discarded1.s: Likewise.
	* ld-x86-64/discarded1.t: Likewise.

	* ld-i386/i386.exp: Run discarded1.
	* ld-x86-64/x86-64.exp: Likewise.
This commit is contained in:
H.J. Lu 2010-08-13 20:50:27 +00:00
parent e2054bcbe6
commit 56d4289c6c
12 changed files with 82 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2010-08-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11913
* elf32-i386.c (elf_i386_finish_dynamic_sections): Check if
.got.plt section is discarded.
* elf64-x86-64.c (elf64_x86_64_finish_dynamic_sections): Likewise.
2010-08-13 Nathan Sidwell <nathan@codesourcery.com> 2010-08-13 Nathan Sidwell <nathan@codesourcery.com>
* elf32-m69k.c (elf32_m68k_print_private_bfd_data): Detect EMAC_B * elf32-m69k.c (elf32_m68k_print_private_bfd_data): Detect EMAC_B

View file

@ -4613,6 +4613,13 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd,
if (htab->elf.sgotplt) if (htab->elf.sgotplt)
{ {
if (bfd_is_abs_section (htab->elf.sgotplt->output_section))
{
(*_bfd_error_handler)
(_("discarded output section: `%A'"), htab->elf.sgotplt);
return FALSE;
}
/* Fill in the first three entries in the global offset table. */ /* Fill in the first three entries in the global offset table. */
if (htab->elf.sgotplt->size > 0) if (htab->elf.sgotplt->size > 0)
{ {

View file

@ -4186,6 +4186,13 @@ elf64_x86_64_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf
if (htab->elf.sgotplt) if (htab->elf.sgotplt)
{ {
if (bfd_is_abs_section (htab->elf.sgotplt->output_section))
{
(*_bfd_error_handler)
(_("discarded output section: `%A'"), htab->elf.sgotplt);
return FALSE;
}
/* Fill in the first three entries in the global offset table. */ /* Fill in the first three entries in the global offset table. */
if (htab->elf.sgotplt->size > 0) if (htab->elf.sgotplt->size > 0)
{ {

View file

@ -1,3 +1,16 @@
2010-08-13 H.J. Lu <hongjiu.lu@intel.com>
PR ld/11913
* ld-i386/discarded1.d: New.
* ld-i386/discarded1.s: Likewise.
* ld-i386/discarded1.t: Likewise.
* ld-x86-64/discarded1.d: Likewise.
* ld-x86-64/discarded1.s: Likewise.
* ld-x86-64/discarded1.t: Likewise.
* ld-i386/i386.exp: Run discarded1.
* ld-x86-64/x86-64.exp: Likewise.
2010-08-09 Catherine Moore <clm@codesourcery.com> 2010-08-09 Catherine Moore <clm@codesourcery.com>
* ld-mips-elf/mode-change-error-1.d: New. * ld-mips-elf/mode-change-error-1.d: New.

View file

@ -0,0 +1,3 @@
#as: --32
#ld: -melf_i386 -T discarded1.t
#error: .*discarded output section: `.got.plt'

View file

@ -0,0 +1,13 @@
.text
.globl _start
.type _start, @function
_start:
movl x@GOT(%ecx), %eax
.size _start, .-_start
.globl x
.data
.align 4
.type x, @object
.size x, 4
x:
.long 2

View file

@ -0,0 +1,7 @@
ENTRY(_start)
SECTIONS
{
.text : {*(.text)}
.data : {*(.data)}
/DISCARD/ : {*(*)}
}

View file

@ -190,6 +190,7 @@ run_dump_test "protected2"
run_dump_test "protected3" run_dump_test "protected3"
run_dump_test "tlspie1" run_dump_test "tlspie1"
run_dump_test "nogot1" run_dump_test "nogot1"
run_dump_test "discarded1"
if { !([istarget "i?86-*-linux*"] if { !([istarget "i?86-*-linux*"]
|| [istarget "x86_64-*-linux*"]) } { || [istarget "x86_64-*-linux*"]) } {

View file

@ -0,0 +1,3 @@
#as: --64
#ld: -melf_x86_64 -T discarded1.t
#error: .*discarded output section: `.got.plt'

View file

@ -0,0 +1,13 @@
.text
.globl _start
.type _start, @function
_start:
movq x@GOTPCREL(%rip), %rax
.size _start, .-_start
.globl x
.data
.align 4
.type x, @object
.size x, 4
x:
.long 2

View file

@ -0,0 +1,7 @@
ENTRY(_start)
SECTIONS
{
.text : {*(.text)}
.data : {*(.data)}
/DISCARD/ : {*(*)}
}

View file

@ -99,6 +99,7 @@ run_dump_test "tlsle1"
run_dump_test "tlspie1" run_dump_test "tlspie1"
run_dump_test "unique1" run_dump_test "unique1"
run_dump_test "nogot1" run_dump_test "nogot1"
run_dump_test "discarded1"
if { ![istarget "x86_64-*-linux*"] } { if { ![istarget "x86_64-*-linux*"] } {
return return