diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-01-15 11:06:33 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-01-15 11:08:59 -0800 |
commit | 6333bc0dd6e92dd5a76ba0a6890e08db2a6f7a29 (patch) | |
tree | e63abc4928496451a64b4eac09e5a780ddb716b8 /bfd/elf64-x86-64.c | |
parent | d221e7efd61fc80f6fbf862b7e32927835575329 (diff) | |
download | gdb-6333bc0dd6e92dd5a76ba0a6890e08db2a6f7a29.zip gdb-6333bc0dd6e92dd5a76ba0a6890e08db2a6f7a29.tar.gz gdb-6333bc0dd6e92dd5a76ba0a6890e08db2a6f7a29.tar.bz2 |
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.
Diffstat (limited to 'bfd/elf64-x86-64.c')
-rw-r--r-- | bfd/elf64-x86-64.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 6b7d3c9..bf7d386 100644 --- a/bfd/elf64-x86-64.c +++ b/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 |