Browse Source

x86: Suggest -fPIE when not building shared object

When PIC is needed, linker should suggest -fPIE, instead of -fPIC, when
not building shared object.

bfd/

	* elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not
	building shared object.
	* elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise.

ld/

	* testsuite/ld-i386/i386.exp: Run pr18801a and pr18801b instead
	of pr18801.
	* testsuite/ld-x86-64/x86-64.exp: Likewise.
	* testsuite/ld-i386/pr18801.d: Removed.
	* testsuite/ld-x86-64/pr18801.d: Likewise.
	* testsuite/ld-i386/pr18801a.d: New file.
	* testsuite/ld-i386/pr18801b.d: Likewise.
	* testsuite/ld-x86-64/pr18801a.d: Likewise.
	* testsuite/ld-x86-64/pr18801b.d: Likewise.
	* testsuite/ld-x86-64/pie2.d: Suggest -fPIE instead of -fPIC.
	* testsuite/ld-x86-64/pie2.d: Likewise.
	* testsuite/ld-x86-64/pr19719.d: Likewise.
	* testsuite/ld-x86-64/pr19807-2a.d: Likewise.
	* testsuite/ld-x86-64/pr19969.d: Likewise.
	* testsuite/ld-x86-64/pr21997-1a.err: Likewise.
	* testsuite/ld-x86-64/pr21997-1b.err: Likewise.
	* testsuite/ld-x86-64/pr22001-1a.err: Likewise.
	* testsuite/ld-x86-64/pr22001-1b.err: Likewise.
	* testsuite/ld-x86-64/pr22791-1.err: Likewise.
binutils-2_33-branch
H.J. Lu 7 years ago
parent
commit
9a7f0679fd
  1. 6
      bfd/ChangeLog
  2. 21
      bfd/elf64-x86-64.c
  3. 3
      bfd/elfxx-x86.c
  4. 22
      ld/ChangeLog
  5. 3
      ld/testsuite/ld-i386/i386.exp
  6. 3
      ld/testsuite/ld-i386/pr18801a.d
  7. 4
      ld/testsuite/ld-i386/pr18801b.d
  8. 2
      ld/testsuite/ld-x86-64/pie2.d
  9. 3
      ld/testsuite/ld-x86-64/pr18801a.d
  10. 4
      ld/testsuite/ld-x86-64/pr18801b.d
  11. 2
      ld/testsuite/ld-x86-64/pr19719.d
  12. 2
      ld/testsuite/ld-x86-64/pr19807-2a.d
  13. 2
      ld/testsuite/ld-x86-64/pr19969.d
  14. 2
      ld/testsuite/ld-x86-64/pr21997-1a.err
  15. 2
      ld/testsuite/ld-x86-64/pr21997-1b.err
  16. 2
      ld/testsuite/ld-x86-64/pr22001-1a.err
  17. 2
      ld/testsuite/ld-x86-64/pr22001-1b.err
  18. 2
      ld/testsuite/ld-x86-64/pr22791-1.err
  19. 3
      ld/testsuite/ld-x86-64/x86-64.exp

6
bfd/ChangeLog

@ -1,3 +1,9 @@
2019-04-17 H.J. Lu <hongjiu.lu@intel.com>
* elf64-x86-64.c (elf_x86_64_need_pic): Suggest -fPIE when not
building shared object.
* elfxx-x86.c (_bfd_x86_elf_size_dynamic_sections): Likewise.
2019-04-17 H.J. Lu <hongjiu.lu@intel.com>
PR ld/24458

21
bfd/elf64-x86-64.c

@ -1422,7 +1422,7 @@ elf_x86_64_need_pic (struct bfd_link_info *info,
v = _("protected symbol ");
else
v = _("symbol ");
pic = _("; recompile with -fPIC");
pic = NULL;
break;
}
@ -1432,15 +1432,24 @@ elf_x86_64_need_pic (struct bfd_link_info *info,
else
{
name = bfd_elf_sym_name (input_bfd, symtab_hdr, isym, NULL);
pic = _("; recompile with -fPIC");
pic = NULL;
}
if (bfd_link_dll (info))
object = _("a shared object");
else if (bfd_link_pie (info))
object = _("a PIE object");
{
object = _("a shared object");
if (!pic)
pic = _("; recompile with -fPIC");
}
else
object = _("a PDE object");
{
if (bfd_link_pie (info))
object = _("a PIE object");
else
object = _("a PDE object");
if (!pic)
pic = _("; recompile with -fPIE");
}
/* xgettext:c-format */
_bfd_error_handler (_("%pB: relocation %s against %s%s`%s' can "

3
bfd/elfxx-x86.c

@ -1381,7 +1381,8 @@ _bfd_x86_elf_size_dynamic_sections (bfd *output_bfd,
{
info->callbacks->einfo
(_("%P%X: read-only segment has dynamic IFUNC relocations;"
" recompile with -fPIC\n"));
" recompile with %s\n"),
bfd_link_dll (info) ? "-fPIC" : "-fPIE");
bfd_set_error (bfd_error_bad_value);
return FALSE;
}

22
ld/ChangeLog

@ -1,3 +1,25 @@
2019-04-17 H.J. Lu <hongjiu.lu@intel.com>
* testsuite/ld-i386/i386.exp: Run pr18801a and pr18801b instead
of pr18801.
* testsuite/ld-x86-64/x86-64.exp: Likewise.
* testsuite/ld-i386/pr18801.d: Removed.
* testsuite/ld-x86-64/pr18801.d: Likewise.
* testsuite/ld-i386/pr18801a.d: New file.
* testsuite/ld-i386/pr18801b.d: Likewise.
* testsuite/ld-x86-64/pr18801a.d: Likewise.
* testsuite/ld-x86-64/pr18801b.d: Likewise.
* testsuite/ld-x86-64/pie2.d: Suggest -fPIE instead of -fPIC.
* testsuite/ld-x86-64/pie2.d: Likewise.
* testsuite/ld-x86-64/pr19719.d: Likewise.
* testsuite/ld-x86-64/pr19807-2a.d: Likewise.
* testsuite/ld-x86-64/pr19969.d: Likewise.
* testsuite/ld-x86-64/pr21997-1a.err: Likewise.
* testsuite/ld-x86-64/pr21997-1b.err: Likewise.
* testsuite/ld-x86-64/pr22001-1a.err: Likewise.
* testsuite/ld-x86-64/pr22001-1b.err: Likewise.
* testsuite/ld-x86-64/pr22791-1.err: Likewise.
2019-04-17 H.J. Lu <hongjiu.lu@intel.com>
PR ld/24458

3
ld/testsuite/ld-i386/i386.exp

@ -512,7 +512,8 @@ run_dump_test "pr14215"
run_dump_test "pr17057"
run_dump_test "pr17935-1"
run_dump_test "pr17935-2"
run_dump_test "pr18801"
run_dump_test "pr18801a"
run_dump_test "pr18801b"
run_dump_test "pr18815"
run_dump_test "pr19939a"
run_dump_test "pr19939b"

3
ld/testsuite/ld-i386/pr18801.d → ld/testsuite/ld-i386/pr18801a.d

@ -1,3 +1,4 @@
#source: pr18801.s
#as: --32
#ld: -m elf_i386 -pie
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIE

4
ld/testsuite/ld-i386/pr18801b.d

@ -0,0 +1,4 @@
#source: pr18801.s
#as: --32
#ld: -m elf_i386 -shared
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIC

2
ld/testsuite/ld-x86-64/pie2.d

@ -1,3 +1,3 @@
#as: --64
#ld: -pie -melf_x86_64
#error: .*relocation R_X86_64_32 against symbol `foo' can not be used when making a PIE object; recompile with -fPIC
#error: .*relocation R_X86_64_32 against symbol `foo' can not be used when making a PIE object; recompile with -fPIE

3
ld/testsuite/ld-x86-64/pr18801.d → ld/testsuite/ld-x86-64/pr18801a.d

@ -1,3 +1,4 @@
#source: pr18801.s
#as: --64
#ld: -melf_x86_64 -pie
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIC
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIE

4
ld/testsuite/ld-x86-64/pr18801b.d

@ -0,0 +1,4 @@
#source: pr18801.s
#as: --64
#ld: -melf_x86_64 -shared
#error: read-only segment has dynamic IFUNC relocations; recompile with -fPIC

2
ld/testsuite/ld-x86-64/pr19719.d

@ -1,3 +1,3 @@
#as: --64
#ld: -pie -melf_x86_64
#error: .*relocation R_X86_64_32 against undefined symbol `foo' can not be used when making a PIE object; recompile with -fPIC
#error: .*relocation R_X86_64_32 against undefined symbol `foo' can not be used when making a PIE object; recompile with -fPIE

2
ld/testsuite/ld-x86-64/pr19807-2a.d

@ -1,4 +1,4 @@
#source: pr19807-2.s
#as: --64
#ld: -pie -melf_x86_64
#error: .*relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIC
#error: .*relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIE

2
ld/testsuite/ld-x86-64/pr19969.d

@ -1,4 +1,4 @@
#source: pr19969b.S
#as: --64
#ld: -melf_x86_64 tmpdir/pr19969.so
#error: .*relocation R_X86_64_32 against symbol `foo' can not be used when making a PDE object; recompile with -fPIC
#error: .*relocation R_X86_64_32 against symbol `foo' can not be used when making a PDE object; recompile with -fPIE

2
ld/testsuite/ld-x86-64/pr21997-1a.err

@ -1,2 +1,2 @@
.*relocation R_X86_64_PC32 against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
.*relocation R_X86_64_PC32 against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIE
#...

2
ld/testsuite/ld-x86-64/pr21997-1b.err

@ -1,2 +1,2 @@
.*relocation R_X86_64_32S against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIC
.*relocation R_X86_64_32S against protected symbol `protected' can not be used when making a P(D|I)E object; recompile with -fPIE
#...

2
ld/testsuite/ld-x86-64/pr22001-1a.err

@ -1,2 +1,2 @@
.*relocation R_X86_64_PC32 against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
.*relocation R_X86_64_PC32 against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIE
#...

2
ld/testsuite/ld-x86-64/pr22001-1b.err

@ -1,2 +1,2 @@
.*relocation R_X86_64_32S against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIC
.*relocation R_X86_64_32S against symbol `copy' can not be used when making a P(D|I)E object; recompile with -fPIE
#...

2
ld/testsuite/ld-x86-64/pr22791-1.err

@ -1,2 +1,2 @@
.*relocation R_X86_64_PC32 against symbol `foo' can not be used when making a PIE object; recompile with -fPIC
.*relocation R_X86_64_PC32 against symbol `foo' can not be used when making a PIE object; recompile with -fPIE
#...

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

@ -566,7 +566,8 @@ run_dump_test "pr17935-1"
run_dump_test "pr17935-2"
run_dump_test "pr18160"
run_dump_test "pr18176"
run_dump_test "pr18801"
run_dump_test "pr18801a"
run_dump_test "pr18801b"
run_dump_test "pr18815"
run_dump_test "pr19013"
run_dump_test "pr19013-x32"

Loading…
Cancel
Save