From c8831961f9fecf81e90fe7c8c94b47e01ee64662 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 27 Aug 2014 07:59:48 -0700 Subject: [PATCH] Use bfd_is_abs_section to check discarded input section bfd/ PR ld/17306 * elf32-i386.c (elf_i386_convert_mov_to_lea): Use bfd_is_abs_section to check discarded input section. * elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Likewise. ld/testsuite/ PR ld/17306 * ld-i386/i386.exp (i386tests): Add tests for PR ld/17306. * ld-x86-64/x86-64.exp (x86_64tests): Likewise. * ld-i386/pr17306a.s: New file. * ld-i386/pr17306b.s: Likewise. * ld-x86-64/pr17306a.s: Likewise. * ld-x86-64/pr17306b.s: Likewise. --- bfd/ChangeLog | 7 +++++++ bfd/elf32-i386.c | 2 +- bfd/elf64-x86-64.c | 2 +- ld/testsuite/ChangeLog | 11 +++++++++++ ld/testsuite/ld-i386/i386.exp | 4 ++++ ld/testsuite/ld-i386/pr17306a.s | 9 +++++++++ ld/testsuite/ld-i386/pr17306b.s | 2 ++ ld/testsuite/ld-x86-64/pr17306a.s | 9 +++++++++ ld/testsuite/ld-x86-64/pr17306b.s | 2 ++ ld/testsuite/ld-x86-64/x86-64.exp | 4 ++++ 10 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 ld/testsuite/ld-i386/pr17306a.s create mode 100644 ld/testsuite/ld-i386/pr17306b.s create mode 100644 ld/testsuite/ld-x86-64/pr17306a.s create mode 100644 ld/testsuite/ld-x86-64/pr17306b.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3f81ba49c9..bba079f481 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2014-08-27 H.J. Lu + + PR ld/17306 + * elf32-i386.c (elf_i386_convert_mov_to_lea): Use bfd_is_abs_section + to check discarded input section. + * elf64-x86-64.c (elf_x86_64_convert_mov_to_lea): Likewise. + 2014-08-27 H.J. Lu PR ld/17313 diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 7c4b4bb918..a00d47cb5b 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2533,7 +2533,7 @@ elf_i386_convert_mov_to_lea (bfd *abfd, asection *sec, /* Nothing to do if there are no codes, no relocations or no output. */ if ((sec->flags & (SEC_CODE | SEC_RELOC)) != (SEC_CODE | SEC_RELOC) || sec->reloc_count == 0 - || discarded_section (sec)) + || bfd_is_abs_section (sec->output_section)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index f71291e87f..9d18a545a9 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2777,7 +2777,7 @@ elf_x86_64_convert_mov_to_lea (bfd *abfd, asection *sec, /* Nothing to do if there are no codes, no relocations or no output. */ if ((sec->flags & (SEC_CODE | SEC_RELOC)) != (SEC_CODE | SEC_RELOC) || sec->reloc_count == 0 - || discarded_section (sec)) + || bfd_is_abs_section (sec->output_section)) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index a7bde81a7c..51355efc7d 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2014-08-27 H.J. Lu + + PR ld/17306 + * ld-i386/i386.exp (i386tests): Add tests for PR ld/17306. + * ld-x86-64/x86-64.exp (x86_64tests): Likewise. + + * ld-i386/pr17306a.s: New file. + * ld-i386/pr17306b.s: Likewise. + * ld-x86-64/pr17306a.s: Likewise. + * ld-x86-64/pr17306b.s: Likewise. + 2014-08-27 H.J. Lu PR ld/17313 diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 875c816b43..30be98a3e5 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -187,6 +187,10 @@ set i386tests { "--32" {zero.s} {} ""} {"PR ld/17313 (2)" "-melf_i386 -shared --just-symbols=tmpdir/zero.o" "" "--32" {lea1.s} {} "libpr17313.so"} + {"PR ld/17306 (1)" "-melf_i386" "" + "--32" {pr17306b.s} {} ""} + {"PR ld/17306 (2)" "-melf_i386 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" "" + "--32" {pr17306a.s} {} "libpr17306.so"} } # So as to avoid rewriting every last test case here in a nacl variant, diff --git a/ld/testsuite/ld-i386/pr17306a.s b/ld/testsuite/ld-i386/pr17306a.s new file mode 100644 index 0000000000..fe2d49c7e9 --- /dev/null +++ b/ld/testsuite/ld-i386/pr17306a.s @@ -0,0 +1,9 @@ + .data + .globl foo +foo: + .long -1 + .text + .globl _start + .type _start, @function +_start: + pushl foo@GOT(%ebx) diff --git a/ld/testsuite/ld-i386/pr17306b.s b/ld/testsuite/ld-i386/pr17306b.s new file mode 100644 index 0000000000..2f84e52298 --- /dev/null +++ b/ld/testsuite/ld-i386/pr17306b.s @@ -0,0 +1,2 @@ + .text + movl foo@GOT(%ebx), %eax diff --git a/ld/testsuite/ld-x86-64/pr17306a.s b/ld/testsuite/ld-x86-64/pr17306a.s new file mode 100644 index 0000000000..a2ee48d3a6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr17306a.s @@ -0,0 +1,9 @@ + .data + .globl foo +foo: + .quad -1 + .text + .globl _start + .type _start, @function +_start: + pushq foo@GOTPCREL(%rip) diff --git a/ld/testsuite/ld-x86-64/pr17306b.s b/ld/testsuite/ld-x86-64/pr17306b.s new file mode 100644 index 0000000000..c63bd2af89 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr17306b.s @@ -0,0 +1,2 @@ + .text + movq foo@GOTPCREL(%rip), %rax diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index a9af367e12..54786a78a2 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -140,6 +140,10 @@ set x86_64tests { "--64" {dummy.s} {} ""} {"PR ld/17313 (2)" "-melf_x86_64 -shared --just-symbols=tmpdir/dummy.o" "" "--64" {lea1.s} {} "libpr17313.so"} + {"PR ld/17306 (1)" "-melf_x86_64" "" + "--64" {pr17306b.s} {} ""} + {"PR ld/17306 (2)" "-melf_x86_64 -shared -Bsymbolic --just-symbols=tmpdir/pr17306b.o" "" + "--64" {pr17306a.s} {} "libpr17306.so"} } # So as to avoid rewriting every last test case here in a nacl variant, -- 2.34.1