Browse Source

Don't complain about -fPIC for undefined symbol

When building executable, undefined symbol is a fatal error.  We don't
complain about -fPIC if the symbol is undefined.

bfd/

	PR ld/17847
	* elf64-x86-64.c (elf_x86_64_relocate_section): Don't complain
	about -fPIC if the symbol is undefined when building executable.

ld/testsuite/

	PR ld/17847
	* ld-x86-64/pie1.d: New file.
	* ld-x86-64/pie1.s: Likwise.
	* ld-x86-64/x86-64.exp: Run pie1.
gdb-7.10-branch
H.J. Lu 12 years ago
parent
commit
6333bc0dd6
  1. 6
      bfd/ChangeLog
  2. 13
      bfd/elf64-x86-64.c
  3. 7
      ld/testsuite/ChangeLog
  4. 9
      ld/testsuite/ld-x86-64/pie1.d
  5. 4
      ld/testsuite/ld-x86-64/pie1.s
  6. 1
      ld/testsuite/ld-x86-64/x86-64.exp

6
bfd/ChangeLog

@ -1,3 +1,9 @@
2015-01-15 H.J. Lu <hongjiu.lu@intel.com>
PR ld/17847
* elf64-x86-64.c (elf_x86_64_relocate_section): Don't complain
about -fPIC if the symbol is undefined when building executable.
2015-01-15 Nick Clifton <nickc@redhat.com>
PR binutils/17512

13
bfd/elf64-x86-64.c

@ -4063,10 +4063,14 @@ elf_x86_64_relocate_section (bfd *output_bfd,
case R_X86_64_PC16:
case R_X86_64_PC32:
case R_X86_64_PC32_BND:
/* Don't complain about -fPIC if the symbol is undefined when
building executable. */
if (info->shared
&& (input_section->flags & SEC_ALLOC) != 0
&& (input_section->flags & SEC_READONLY) != 0
&& h != NULL)
&& h != NULL
&& !(info->executable
&& h->root.type == bfd_link_hash_undefined))
{
bfd_boolean fail = FALSE;
bfd_boolean branch
@ -4140,11 +4144,14 @@ direct:
break;
/* Don't copy a pc-relative relocation into the output file
if the symbol needs copy reloc. */
if the symbol needs copy reloc or the symbol is undefined
when building executable. */
if ((info->shared
&& !(info->executable
&& h != NULL
&& (h->needs_copy || eh->needs_copy)
&& (h->needs_copy
|| eh->needs_copy
|| h->root.type == bfd_link_hash_undefined)
&& IS_X86_64_PCREL_TYPE (r_type))
&& (h == NULL
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT

7
ld/testsuite/ChangeLog

@ -1,3 +1,10 @@
2015-01-15 H.J. Lu <hongjiu.lu@intel.com>
PR ld/17847
* ld-x86-64/pie1.d: New file.
* ld-x86-64/pie1.s: Likwise.
* ld-x86-64/x86-64.exp: Run pie1.
2015-01-13 Thomas Preud'homme <thomas.preudhomme@arm.com>
* ld-aarch64/aarch64-elf.exp: Added relocs-257-symbolic-func test.

9
ld/testsuite/ld-x86-64/pie1.d

@ -0,0 +1,9 @@
#name: PIE with undefined symbol
#as: --64
#ld: -pie -melf_x86_64 --noinhibit-exec
#readelf: -s --wide
#warning: \A[^\n]*\.o[^\n]*In function `_start':\n[^\n]*: undefined reference to `foo'\Z
#...
+[0-9]+: +[0-9a-f]+ +0 +NOTYPE +GLOBAL +DEFAULT +UND foo
#pass

4
ld/testsuite/ld-x86-64/pie1.s

@ -0,0 +1,4 @@
.text
.global _start
_start:
movl foo(%rip), %eax

1
ld/testsuite/ld-x86-64/x86-64.exp

@ -228,6 +228,7 @@ run_dump_test "pr12570b"
run_dump_test "pr14215"
run_dump_test "pr14207"
run_dump_test "gotplt1"
run_dump_test "pie1"
if { ![istarget "x86_64-*-linux*"] && ![istarget "x86_64-*-nacl*"]} {
return

Loading…
Cancel
Save