579 lines
22 KiB
Diff
579 lines
22 KiB
Diff
This reverts the below commit to not generate PLT32 relocs
|
|
on branches by default. Used for old distros to not have to
|
|
update several packages/tools that can't handle them. I.e.
|
|
a compatibility patch.
|
|
|
|
The patch isn't exactly the reverse of commit bd7ab16b
|
|
because commit 83924b38 later moved the checking code
|
|
around somewhat.
|
|
|
|
The changes in nop-[345].d and pr22842b.S are followups to
|
|
not break the testsuite because of this revert.
|
|
As are the changes to x86-64-branch-2.d and x86-64-branch-3.d.
|
|
|
|
commit bd7ab16b4537788ad53521c45469a1bdae84ad4a
|
|
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
Date: Tue Feb 13 07:34:22 2018 -0800
|
|
|
|
x86-64: Generate branch with PLT32 relocation
|
|
|
|
Since there is no need to prepare for PLT branch on x86-64, generate
|
|
R_X86_64_PLT32, instead of R_X86_64_PC32, if possible, which can be
|
|
used as a marker for 32-bit PC-relative branches.
|
|
|
|
To compile Linux kernel, this patch:
|
|
|
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
Subject: [PATCH] x86: Treat R_X86_64_PLT32 as R_X86_64_PC32
|
|
|
|
On i386, there are 2 types of PLTs, PIC and non-PIC. PIE and shared
|
|
objects must use PIC PLT. To use PIC PLT, you need to load
|
|
_GLOBAL_OFFSET_TABLE_ into EBX first. There is no need for that on
|
|
x86-64 since x86-64 uses PC-relative PLT.
|
|
|
|
On x86-64, for 32-bit PC-relative branches, we can generate PLT32
|
|
relocation, instead of PC32 relocation, which can also be used as
|
|
a marker for 32-bit PC-relative branches. Linker can always reduce
|
|
PLT32 relocation to PC32 if function is defined locally. Local
|
|
functions should use PC32 relocation. As far as Linux kernel is
|
|
concerned, R_X86_64_PLT32 can be treated the same as R_X86_64_PC32
|
|
since Linux kernel doesn't use PLT.
|
|
|
|
is needed. It is available on hjl/plt32/master branch at
|
|
|
|
https://github.com/hjl-tools/linux
|
|
|
|
bfd/
|
|
|
|
PR gas/22791
|
|
* elf64-x86-64.c (is_32bit_relative_branch): Removed.
|
|
(elf_x86_64_relocate_section): Check PIC relocations in PIE.
|
|
Remove is_32bit_relative_branch usage. Disallow PC32 reloc
|
|
against protected function in shared object.
|
|
|
|
gas/
|
|
|
|
PR gas/22791
|
|
* config/tc-i386.c (need_plt32_p): New function.
|
|
(output_jump): Generate BFD_RELOC_X86_64_PLT32 if possible.
|
|
(md_estimate_size_before_relax): Likewise.
|
|
* testsuite/gas/i386/reloc64.d: Updated.
|
|
* testsuite/gas/i386/x86-64-jump.d: Likewise.
|
|
* testsuite/gas/i386/x86-64-mpx-branch-1.d: Likewise.
|
|
* testsuite/gas/i386/x86-64-mpx-branch-2.d: Likewise.
|
|
* testsuite/gas/i386/x86-64-relax-2.d: Likewise.
|
|
* testsuite/gas/i386/x86-64-relax-3.d: Likewise.
|
|
* testsuite/gas/i386/ilp32/reloc64.d: Likewise.
|
|
* testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise.
|
|
|
|
ld/
|
|
|
|
PR gas/22791
|
|
* testsuite/ld-x86-64/mpx1c.rd: Updated.
|
|
* testsuite/ld-x86-64/pr22791-1.err: New file.
|
|
* testsuite/ld-x86-64/pr22791-1a.c: Likewise.
|
|
* testsuite/ld-x86-64/pr22791-1b.s: Likewise.
|
|
* testsuite/ld-x86-64/pr22791-2.rd: Likewise.
|
|
* testsuite/ld-x86-64/pr22791-2a.s: Likewise.
|
|
* testsuite/ld-x86-64/pr22791-2b.c: Likewise.
|
|
* testsuite/ld-x86-64/pr22791-2c.s: Likewise.
|
|
* testsuite/ld-x86-64/x86-64.exp: Run PR ld/22791 tests.
|
|
|
|
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
|
|
index dc416a7f..b9f96729 100644
|
|
--- a/bfd/elf64-x86-64.c
|
|
+++ b/bfd/elf64-x86-64.c
|
|
@@ -1817,6 +1817,24 @@ elf_x86_64_convert_load_reloc (bfd *abfd,
|
|
return true;
|
|
}
|
|
|
|
+/* Is the instruction before OFFSET in CONTENTS a 32bit relative
|
|
+ branch? */
|
|
+
|
|
+static bool
|
|
+is_32bit_relative_branch (bfd_byte *contents, bfd_vma offset)
|
|
+{
|
|
+ /* Opcode Instruction
|
|
+ 0xe8 call
|
|
+ 0xe9 jump
|
|
+ 0x0f 0x8x conditional jump */
|
|
+ return ((offset > 0
|
|
+ && (contents [offset - 1] == 0xe8
|
|
+ || contents [offset - 1] == 0xe9))
|
|
+ || (offset > 1
|
|
+ && contents [offset - 2] == 0x0f
|
|
+ && (contents [offset - 1] & 0xf0) == 0x80));
|
|
+}
|
|
+
|
|
/* Look through the relocs for a section during the first phase, and
|
|
calculate needed space in the global offset table, and procedure
|
|
linkage table. */
|
|
@@ -3159,9 +3177,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|
&& (eh == NULL
|
|
|| !UNDEFINED_WEAK_RESOLVED_TO_ZERO (info,
|
|
eh)))
|
|
- || (bfd_link_pie (info)
|
|
- && !SYMBOL_DEFINED_NON_SHARED_P (h)
|
|
- && h->def_dynamic)
|
|
|| (no_copyreloc_p
|
|
&& h->def_dynamic
|
|
&& !(h->root.u.def.section->flags & SEC_CODE))))
|
|
@@ -3170,20 +3185,25 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|
|| bfd_link_dll (info)))
|
|
{
|
|
bool fail = false;
|
|
+ bool branch
|
|
+ = ((r_type == R_X86_64_PC32
|
|
+ || r_type == R_X86_64_PC32_BND)
|
|
+ && is_32bit_relative_branch (contents, rel->r_offset));
|
|
+
|
|
if (SYMBOL_REFERENCES_LOCAL_P (info, h))
|
|
{
|
|
/* Symbol is referenced locally. Make sure it is
|
|
- defined locally. */
|
|
- fail = !SYMBOL_DEFINED_NON_SHARED_P (h);
|
|
+ defined locally or for a branch. */
|
|
+ fail = !SYMBOL_DEFINED_NON_SHARED_P (h) && !branch;
|
|
}
|
|
else if (bfd_link_pie (info))
|
|
{
|
|
/* We can only use PC-relative relocations in PIE
|
|
- from non-code sections. */
|
|
+ from non-code sections or branches. */
|
|
if (h->root.type == bfd_link_hash_undefweak
|
|
|| (h->type == STT_FUNC
|
|
&& (sec->flags & SEC_CODE) != 0))
|
|
- fail = true;
|
|
+ fail = !branch;
|
|
}
|
|
else if (no_copyreloc_p || bfd_link_dll (info))
|
|
{
|
|
@@ -3192,9 +3212,10 @@ elf_x86_64_relocate_section (bfd *output_bfd,
|
|
relocations against default and protected
|
|
symbols since address of protected function
|
|
and location of protected data may not be in
|
|
- the shared object. */
|
|
+ the shared object. We do allow branch to symbol
|
|
+ with non-default visibility. */
|
|
fail = (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
- || ELF_ST_VISIBILITY (h->other) == STV_PROTECTED);
|
|
+ || !branch);
|
|
}
|
|
|
|
if (fail)
|
|
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
|
|
index d3441988e34..8f8fb086cd8 100644
|
|
--- a/gas/config/tc-i386.c
|
|
+++ b/gas/config/tc-i386.c
|
|
@@ -8793,55 +8793,12 @@ output_branch (void)
|
|
frag_var (rs_machine_dependent, 5, i.reloc[0], subtype, sym, off, p);
|
|
}
|
|
|
|
-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
-/* Return TRUE iff PLT32 relocation should be used for branching to
|
|
- symbol S. */
|
|
-
|
|
-static bool
|
|
-need_plt32_p (symbolS *s)
|
|
-{
|
|
- /* PLT32 relocation is ELF only. */
|
|
- if (!IS_ELF)
|
|
- return false;
|
|
-
|
|
-#ifdef TE_SOLARIS
|
|
- /* Don't emit PLT32 relocation on Solaris: neither native linker nor
|
|
- krtld support it. */
|
|
- return false;
|
|
-#endif
|
|
-
|
|
- /* Since there is no need to prepare for PLT branch on x86-64, we
|
|
- can generate R_X86_64_PLT32, instead of R_X86_64_PC32, which can
|
|
- be used as a marker for 32-bit PC-relative branches. */
|
|
- if (!object_64bit)
|
|
- return false;
|
|
-
|
|
- if (s == NULL)
|
|
- return false;
|
|
-
|
|
- /* Weak or undefined symbol need PLT32 relocation. */
|
|
- if (S_IS_WEAK (s) || !S_IS_DEFINED (s))
|
|
- return true;
|
|
-
|
|
- /* Non-global symbol doesn't need PLT32 relocation. */
|
|
- if (! S_IS_EXTERNAL (s))
|
|
- return false;
|
|
-
|
|
- /* Other global symbols need PLT32 relocation. NB: Symbol with
|
|
- non-default visibilities are treated as normal global symbol
|
|
- so that PLT32 relocation can be used as a marker for 32-bit
|
|
- PC-relative branches. It is useful for linker relaxation. */
|
|
- return true;
|
|
-}
|
|
-#endif
|
|
-
|
|
static void
|
|
output_jump (void)
|
|
{
|
|
char *p;
|
|
int size;
|
|
fixS *fixP;
|
|
- bfd_reloc_code_real_type jump_reloc = i.reloc[0];
|
|
|
|
if (i.tm.opcode_modifier.jump == JUMP_BYTE)
|
|
{
|
|
@@ -8990,17 +8947,8 @@ output_jump (void)
|
|
abort ();
|
|
}
|
|
|
|
-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
- if (flag_code == CODE_64BIT && size == 4
|
|
- && jump_reloc == NO_RELOC && i.op[0].disps->X_add_number == 0
|
|
- && need_plt32_p (i.op[0].disps->X_add_symbol))
|
|
- jump_reloc = BFD_RELOC_X86_64_PLT32;
|
|
-#endif
|
|
-
|
|
- jump_reloc = reloc (size, 1, 1, jump_reloc);
|
|
-
|
|
fixP = fix_new_exp (frag_now, p - frag_now->fr_literal, size,
|
|
- i.op[0].disps, 1, jump_reloc);
|
|
+ i.op[0].disps, 1, reloc (size, 1, 1, i.reloc[0]));
|
|
|
|
/* All jumps handled here are signed, but don't unconditionally use a
|
|
signed limit check for 32 and 16 bit jumps as we want to allow wrap
|
|
@@ -12299,11 +12247,6 @@ md_estimate_size_before_relax (fragS *fragP, segT segment)
|
|
reloc_type = (enum bfd_reloc_code_real) fragP->fr_var;
|
|
else if (size == 2)
|
|
reloc_type = BFD_RELOC_16_PCREL;
|
|
-#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
|
|
- else if (fragP->tc_frag_data.code64 && fragP->fr_offset == 0
|
|
- && need_plt32_p (fragP->fr_symbol))
|
|
- reloc_type = BFD_RELOC_X86_64_PLT32;
|
|
-#endif
|
|
else
|
|
reloc_type = BFD_RELOC_32_PCREL;
|
|
|
|
diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.d b/gas/testsuite/gas/i386/ilp32/reloc64.d
|
|
index 78ca3fd9e38..a961679754a 100644
|
|
--- a/gas/testsuite/gas/i386/ilp32/reloc64.d
|
|
+++ b/gas/testsuite/gas/i386/ilp32/reloc64.d
|
|
@@ -17,7 +17,7 @@ Disassembly of section \.text:
|
|
.*[ ]+R_X86_64_PC8[ ]+xtrn\+0x0*1
|
|
.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
-.*[ ]+R_X86_64_PLT32[ ]+xtrn-0x0*4
|
|
+.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
.*[ ]+R_X86_64_PC8[ ]+xtrn-0x0*1
|
|
.*[ ]+R_X86_64_GOT32[ ]+xtrn
|
|
.*[ ]+R_X86_64_GOT32[ ]+xtrn
|
|
diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-branch.d b/gas/testsuite/gas/i386/ilp32/x86-64-branch.d
|
|
index acf8c42ca97..57845fdc208 100644
|
|
--- a/gas/testsuite/gas/i386/ilp32/x86-64-branch.d
|
|
+++ b/gas/testsuite/gas/i386/ilp32/x86-64-branch.d
|
|
@@ -20,9 +20,9 @@ Disassembly of section .text:
|
|
[ ]*[a-f0-9]+: 66 ff 20 data16 jmp \*\(%rax\)
|
|
[ ]*[a-f0-9]+: e8 00 00 00 00 call (0x)?1f <.*> 1b: R_X86_64_PC32 \*ABS\*\+0x10003c
|
|
[ ]*[a-f0-9]+: e9 00 00 00 00 jmp (0x)?24 <.*> 20: R_X86_64_PC32 \*ABS\*\+0x10003c
|
|
-[ ]*[a-f0-9]+: 66 e8 00 00 00 00 data16 call (0x)?2a <.*> 26: R_X86_64_PLT32 foo-0x4
|
|
-[ ]*[a-f0-9]+: 66 e9 00 00 00 00 data16 jmp (0x)?30 <.*> 2c: R_X86_64_PLT32 foo-0x4
|
|
-[ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb (0x)?37 <.*> 33: R_X86_64_PLT32 foo-0x4
|
|
+[ ]*[a-f0-9]+: 66 e8 00 00 00 00 data16 call (0x)?2a <.*> 26: R_X86_64_PC32 foo-0x4
|
|
+[ ]*[a-f0-9]+: 66 e9 00 00 00 00 data16 jmp (0x)?30 <.*> 2c: R_X86_64_PC32 foo-0x4
|
|
+[ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb (0x)?37 <.*> 33: R_X86_64_PC32 foo-0x4
|
|
[ ]*[a-f0-9]+: 66 c3 data16 ret
|
|
[ ]*[a-f0-9]+: 66 c2 08 00 data16 ret \$0x8
|
|
[ ]*[a-f0-9]+: 3e 74 03[ ]+je,pt +[0-9a-fx]+ <.*>
|
|
diff --git a/gas/testsuite/gas/i386/reloc64.d b/gas/testsuite/gas/i386/reloc64.d
|
|
index 540a9b77d35..ea16c68de4b 100644
|
|
--- a/gas/testsuite/gas/i386/reloc64.d
|
|
+++ b/gas/testsuite/gas/i386/reloc64.d
|
|
@@ -20,7 +20,7 @@ Disassembly of section \.text:
|
|
.*[ ]+R_X86_64_PC8[ ]+xtrn\+0x0*1
|
|
.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
-.*[ ]+R_X86_64_PLT32[ ]+xtrn-0x0*4
|
|
+.*[ ]+R_X86_64_PC32[ ]+xtrn-0x0*4
|
|
.*[ ]+R_X86_64_PC8[ ]+xtrn-0x0*1
|
|
.*[ ]+R_X86_64_GOT64[ ]+xtrn
|
|
.*[ ]+R_X86_64_GOT32[ ]+xtrn
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-branch-2.d b/gas/testsuite/gas/i386/x86-64-branch-2.d
|
|
index fab75a6394c..e025de90b68 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-branch-2.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-branch-2.d
|
|
@@ -9,12 +9,12 @@ Disassembly of section .text:
|
|
|
|
0+ <bar-0xb>:
|
|
[ ]*[a-f0-9]+: 66 e9 00 00 jmpw 4 <bar-0x7> 2: R_X86_64_PC16 foo-0x2
|
|
-[ ]*[a-f0-9]+: 66 48 e9 00 00 00 00 data16 rex\.W jmp b <bar> 7: R_X86_64_PLT32 foo-0x4
|
|
+[ ]*[a-f0-9]+: 66 48 e9 00 00 00 00 data16 rex\.W jmp b <bar> 7: R_X86_64_PC32 foo-0x4
|
|
|
|
0+b <bar>:
|
|
[ ]*[a-f0-9]+: 89 c3 mov %eax,%ebx
|
|
[ ]*[a-f0-9]+: 66 e8 00 00 callw 11 <bar\+0x6> f: R_X86_64_PC16 foo-0x2
|
|
-[ ]*[a-f0-9]+: 66 48 e8 00 00 00 00 data16 rex\.W call 18 <bar\+0xd> 14: R_X86_64_PLT32 foo-0x4
|
|
+[ ]*[a-f0-9]+: 66 48 e8 00 00 00 00 data16 rex\.W call 18 <bar\+0xd> 14: R_X86_64_PC32 foo-0x4
|
|
[ ]*[a-f0-9]+: 66 c3 retw
|
|
[ ]*[a-f0-9]+: 66 c2 08 00 retw \$0x8
|
|
#pass
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-jump.d b/gas/testsuite/gas/i386/x86-64-jump.d
|
|
index 7d2c994ce26..58ad424badb 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-jump.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-jump.d
|
|
@@ -9,7 +9,7 @@ Disassembly of section .text:
|
|
|
|
0+ <.text>:
|
|
[ ]*[a-f0-9]+: eb fe jmp (0x0|0 <.text>)
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 0x7 3: R_X86_64_PLT32 xxx-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 0x7 3: R_X86_64_PC32 xxx-0x4
|
|
[ ]*[a-f0-9]+: ff 24 25 00 00 00 00 jmp \*0x0 a: R_X86_64_32S xxx
|
|
[ ]*[a-f0-9]+: ff e7 jmp \*%rdi
|
|
[ ]*[a-f0-9]+: ff 27 jmp \*\(%rdi\)
|
|
@@ -18,7 +18,7 @@ Disassembly of section .text:
|
|
[ ]*[a-f0-9]+: ff 2c 25 00 00 00 00 ljmp \*0x0 24: R_X86_64_32S xxx
|
|
[ ]*[a-f0-9]+: 66 ff 2c 25 00 00 00 00 ljmpw \*0x0 2c: R_X86_64_32S xxx
|
|
[ ]*[a-f0-9]+: e8 cb ff ff ff call 0x0
|
|
-[ ]*[a-f0-9]+: e8 00 00 00 00 call 0x3a 36: R_X86_64_PLT32 xxx-0x4
|
|
+[ ]*[a-f0-9]+: e8 00 00 00 00 call 0x3a 36: R_X86_64_PC32 xxx-0x4
|
|
[ ]*[a-f0-9]+: ff 14 25 00 00 00 00 call \*0x0 3d: R_X86_64_32S xxx
|
|
[ ]*[a-f0-9]+: ff d7 call \*%rdi
|
|
[ ]*[a-f0-9]+: ff 17 call \*\(%rdi\)
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-nop-3.d b/gas/testsuite/gas/i386/x86-64-nop-3.d
|
|
index 1975481cc59..436487b5a99 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-nop-3.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-nop-3.d
|
|
@@ -18,5 +18,5 @@ Disassembly of section .text:
|
|
Disassembly of section .altinstr_replacement:
|
|
|
|
0+ <.altinstr_replacement>:
|
|
- +[a-f0-9]+: e9 00 00 00 00 jmp 5 <_start\+0x5> 1: R_X86_64_PLT32 foo-0x4
|
|
+ +[a-f0-9]+: e9 00 00 00 00 jmp 5 <_start\+0x5> 1: R_X86_64_PC32 foo-0x4
|
|
#pass
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-nop-4.d b/gas/testsuite/gas/i386/x86-64-nop-4.d
|
|
index 2da858db994..e390628b335 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-nop-4.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-nop-4.d
|
|
@@ -21,5 +21,5 @@ Disassembly of section .altinstr_replacement:
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
- +[a-f0-9]+: e9 00 00 00 00 jmp b <_start\+0xb> 7: R_X86_64_PLT32 foo-0x4
|
|
+ +[a-f0-9]+: e9 00 00 00 00 jmp b <_start\+0xb> 7: R_X86_64_PC32 foo-0x4
|
|
#pass
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-nop-5.d b/gas/testsuite/gas/i386/x86-64-nop-5.d
|
|
index d5c84c1edf8..69820d54de8 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-nop-5.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-nop-5.d
|
|
@@ -24,5 +24,5 @@ Disassembly of section .altinstr_replacement:
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
+[a-f0-9]+: 89 c0 mov %eax,%eax
|
|
- +[a-f0-9]+: e9 00 00 00 00 jmp d <_start\+0xd> 9: R_X86_64_PLT32 foo-0x4
|
|
+ +[a-f0-9]+: e9 00 00 00 00 jmp d <_start\+0xd> 9: R_X86_64_PC32 foo-0x4
|
|
#pass
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-relax-2.d b/gas/testsuite/gas/i386/x86-64-relax-2.d
|
|
index fba47c14850..0949ab23907 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-relax-2.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-relax-2.d
|
|
@@ -11,12 +11,12 @@ Disassembly of section .text:
|
|
0+ <foo>:
|
|
[ ]*[a-f0-9]+: eb 24 jmp 26 <local>
|
|
[ ]*[a-f0-9]+: eb 1e jmp 22 <hidden_def>
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 9 <foo\+0x9> 5: R_X86_64_PLT32 global_def-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 9 <foo\+0x9> 5: R_X86_64_PC32 global_def-0x4
|
|
[ ]*[a-f0-9]+: e9 00 00 00 00 jmp e <foo\+0xe> a: R_X86_64_PLT32 global_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 13 <foo\+0x13> f: R_X86_64_PLT32 weak_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 18 <foo\+0x18> 14: R_X86_64_PLT32 weak_hidden_undef-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1d <foo\+0x1d> 19: R_X86_64_PLT32 weak_hidden_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 22 <hidden_def> 1e: R_X86_64_PLT32 hidden_undef-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 13 <foo\+0x13> f: R_X86_64_PC32 weak_def-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 18 <foo\+0x18> 14: R_X86_64_PC32 weak_hidden_undef-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1d <foo\+0x1d> 19: R_X86_64_PC32 weak_hidden_def-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 22 <hidden_def> 1e: R_X86_64_PC32 hidden_undef-0x4
|
|
|
|
0+22 <hidden_def>:
|
|
[ ]*[a-f0-9]+: c3 ret
|
|
diff --git a/gas/testsuite/gas/i386/x86-64-relax-3.d b/gas/testsuite/gas/i386/x86-64-relax-3.d
|
|
index 01df9ef340e..d16e6a55395 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-relax-3.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-relax-3.d
|
|
@@ -12,10 +12,10 @@ Disassembly of section .text:
|
|
[ ]*[a-f0-9]+: eb 1b jmp 1f <hidden_def>
|
|
[ ]*[a-f0-9]+: eb 1b jmp 21 <global_def>
|
|
[ ]*[a-f0-9]+: e9 00 00 00 00 jmp b <foo\+0xb> 7: R_X86_64_PLT32 global_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 10 <foo\+0x10> c: R_X86_64_PLT32 weak_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 15 <foo\+0x15> 11: R_X86_64_PLT32 weak_hidden_undef-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1a <foo\+0x1a> 16: R_X86_64_PLT32 weak_hidden_def-0x4
|
|
-[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1f <hidden_def> 1b: R_X86_64_PLT32 hidden_undef-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 10 <foo\+0x10> c: R_X86_64_PC32 weak_def-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 15 <foo\+0x15> 11: R_X86_64_PC32 weak_hidden_undef-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1a <foo\+0x1a> 16: R_X86_64_PC32 weak_hidden_def-0x4
|
|
+[ ]*[a-f0-9]+: e9 00 00 00 00 jmp 1f <hidden_def> 1b: R_X86_64_PC32 hidden_undef-0x4
|
|
|
|
0+1f <hidden_def>:
|
|
[ ]*[a-f0-9]+: c3 ret
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-1.err b/ld/testsuite/ld-x86-64/pr22791-1.err
|
|
deleted file mode 100644
|
|
index 8c5565992e7..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-1.err
|
|
+++ /dev/null
|
|
@@ -1,2 +0,0 @@
|
|
-.*relocation R_X86_64_PC32 against symbol `foo' can not be used when making a PIE object; recompile with -fPIE
|
|
-#...
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-1a.c b/ld/testsuite/ld-x86-64/pr22791-1a.c
|
|
deleted file mode 100644
|
|
index cd0130cacdf..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-1a.c
|
|
+++ /dev/null
|
|
@@ -1,4 +0,0 @@
|
|
-void
|
|
-foo (void)
|
|
-{
|
|
-}
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-1b.s b/ld/testsuite/ld-x86-64/pr22791-1b.s
|
|
deleted file mode 100644
|
|
index 9751db49aa5..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-1b.s
|
|
+++ /dev/null
|
|
@@ -1,7 +0,0 @@
|
|
- .text
|
|
- .globl main
|
|
- .type main, @function
|
|
-main:
|
|
- movl foo(%rip), %eax
|
|
- .size main, .-main
|
|
- .section .note.GNU-stack
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-2.rd b/ld/testsuite/ld-x86-64/pr22791-2.rd
|
|
deleted file mode 100644
|
|
index 70deb30d84d..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-2.rd
|
|
+++ /dev/null
|
|
@@ -1,6 +0,0 @@
|
|
-#failif
|
|
-#...
|
|
-.*\(TEXTREL\).*
|
|
-#...
|
|
-[0-9a-f ]+R_X86_64_NONE.*
|
|
-#...
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-2a.s b/ld/testsuite/ld-x86-64/pr22791-2a.s
|
|
deleted file mode 100644
|
|
index 0a855024d74..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-2a.s
|
|
+++ /dev/null
|
|
@@ -1,8 +0,0 @@
|
|
- .text
|
|
- .p2align 4,,15
|
|
- .globl foo
|
|
- .type foo, @function
|
|
-foo:
|
|
- jmp bar
|
|
- .size foo, .-foo
|
|
- .section .note.GNU-stack,"",@progbits
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-2b.c b/ld/testsuite/ld-x86-64/pr22791-2b.c
|
|
deleted file mode 100644
|
|
index 79ef27c0857..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-2b.c
|
|
+++ /dev/null
|
|
@@ -1,7 +0,0 @@
|
|
-#include <stdio.h>
|
|
-
|
|
-void
|
|
-bar (void)
|
|
-{
|
|
- puts ("PASS");
|
|
-}
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22791-2c.s b/ld/testsuite/ld-x86-64/pr22791-2c.s
|
|
deleted file mode 100644
|
|
index 1460d1b8288..00000000000
|
|
--- a/ld/testsuite/ld-x86-64/pr22791-2c.s
|
|
+++ /dev/null
|
|
@@ -1,12 +0,0 @@
|
|
- .text
|
|
- .p2align 4,,15
|
|
- .globl main
|
|
- .type main, @function
|
|
-main:
|
|
- subq $8, %rsp
|
|
- call foo
|
|
- xorl %eax, %eax
|
|
- addq $8, %rsp
|
|
- ret
|
|
- .size main, .-main
|
|
- .section .note.GNU-stack,"",@progbits
|
|
diff --git a/ld/testsuite/ld-x86-64/pr22842b.S b/ld/testsuite/ld-x86-64/pr22842b.S
|
|
index f0659cd901e..b9dd81345b7 100644
|
|
--- a/ld/testsuite/ld-x86-64/pr22842b.S
|
|
+++ b/ld/testsuite/ld-x86-64/pr22842b.S
|
|
@@ -7,7 +7,7 @@ main:
|
|
leaq bar(%rip), %rdi
|
|
addq %rax, %rdi
|
|
|
|
- callq foo
|
|
+ callq foo@PLT
|
|
xorl %eax, %eax
|
|
popq %rcx
|
|
retq
|
|
diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp
|
|
index 17fd10ee121..b4ae52ab376 100644
|
|
--- a/ld/testsuite/ld-x86-64/x86-64.exp
|
|
+++ b/ld/testsuite/ld-x86-64/x86-64.exp
|
|
@@ -1264,44 +1264,6 @@ if { [isnative] && [check_compiler_available] } {
|
|
{readelf -lW pr22393-3b.rd}} \
|
|
"pr22393-3-static" \
|
|
] \
|
|
- [list \
|
|
- "Build pr22791-1.so" \
|
|
- "-shared" \
|
|
- "-fPIC -Wa,-mx86-used-note=yes" \
|
|
- { pr22791-1a.c } \
|
|
- {} \
|
|
- "pr22791-1.so" \
|
|
- ] \
|
|
- [list \
|
|
- "Build pr22791-1" \
|
|
- "-pie -Wl,--no-as-needed,-z,notext tmpdir/pr22791-1.so" \
|
|
- "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
|
|
- { pr22791-1b.s } \
|
|
- {{error_output "pr22791-1.err"}} \
|
|
- "pr22791-1" \
|
|
- ] \
|
|
- [list \
|
|
- "Build pr22791-2a.o" \
|
|
- "" \
|
|
- "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
|
|
- { pr22791-2a.s } \
|
|
- ] \
|
|
- [list \
|
|
- "Build pr22791-2.so" \
|
|
- "-shared tmpdir/pr22791-2a.o" \
|
|
- "-fPIC -Wa,-mx86-used-note=yes" \
|
|
- { pr22791-2b.c } \
|
|
- {{readelf -drW pr22791-2.rd}} \
|
|
- "pr22791-2.so" \
|
|
- ] \
|
|
- [list \
|
|
- "Build pr22791-2" \
|
|
- "-pie -Wl,--no-as-needed tmpdir/pr22791-2.so" \
|
|
- "$NOPIE_CFLAGS -Wa,-mx86-used-note=yes" \
|
|
- { pr22791-2c.s } \
|
|
- {{readelf -drW pr22791-2.rd}} \
|
|
- "pr22791-2" \
|
|
- ] \
|
|
[list \
|
|
"Build pr22842.so" \
|
|
"-shared" \
|
|
@@ -1703,15 +1665,6 @@ if { [isnative] && [check_compiler_available] } {
|
|
"pr22393-3-static" \
|
|
"pass.out" \
|
|
] \
|
|
- [list \
|
|
- "Run pr22791-2" \
|
|
- "-pie -Wl,--no-as-needed tmpdir/pr22791-2.so" \
|
|
- "-Wa,-mx86-used-note=yes" \
|
|
- { pr22791-2c.s } \
|
|
- "pr22791-2" \
|
|
- "pass.out" \
|
|
- "$NOPIE_CFLAGS" \
|
|
- ] \
|
|
[list \
|
|
"Run pr22842" \
|
|
"-pie -Wl,--no-as-needed tmpdir/pr22842.so" \
|