forked from pool/binutils
daae1fdd3d
- Update to binutils 2.39: * The ELF linker will now generate a warning message if the stack is made executable. Similarly it will warn if the output binary contains a segment with all three of the read, write and execute permission bits set. These warnings are intended to help developers identify programs which might be vulnerable to attack via these executable memory regions. The warnings are enabled by default but can be disabled via a command line option. It is also possible to build a linker with the warnings disabled, should that be necessary. * The ELF linker now supports a --package-metadata option that allows embedding a JSON payload in accordance to the Package Metadata specification. * In linker scripts it is now possible to use TYPE=<type> in an output section description to set the section type value. * The objdump program now supports coloured/colored syntax highlighting of its disassembler output for some architectures. (Currently: AVR, RiscV, s390, x86, x86_64). * The nm program now supports a --no-weak/-W option to make it ignore weak symbols. * The readelf and objdump programs now support a -wE option to prevent them from attempting to access debuginfod servers when following links. * The objcopy program's --weaken, --weaken-symbol, and --weaken-symbols options now works with unique symbols as well. - Rebase binutils-compat-old-behaviour.diff, binutils-revert-hlasm-insns.diff, binutils-revert-plt32-in-branches.diff and remove binutils-2.38-branch.diff.gz. - For now use --disable-gprofng. - Includes fixes for these CVEs: bnc#1142579 aka CVE-2019-1010204 aka PR23765 OBS-URL: https://build.opensuse.org/request/show/993443 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/binutils?expand=0&rev=413
605 lines
23 KiB
Diff
605 lines
23 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-mpx-branch-1.d b/gas/testsuite/gas/i386/x86-64-mpx-branch-1.d
|
|
index 795f3fdacc4..1d692e8f04d 100644
|
|
--- a/gas/testsuite/gas/i386/x86-64-mpx-branch-1.d
|
|
+++ b/gas/testsuite/gas/i386/x86-64-mpx-branch-1.d
|
|
@@ -23,9 +23,9 @@ Disassembly of section .text:
|
|
[ ]*[a-f0-9]+: f2 e8 00 00 00 00 bnd call 34 <foo2>
|
|
|
|
0+34 <foo2>:
|
|
-[ ]*[a-f0-9]+: f2 e9 00 00 00 00 bnd jmp 3a <foo2\+0x6> 36: R_X86_64_PLT32 foo-0x4
|
|
-[ ]*[a-f0-9]+: f2 0f 82 00 00 00 00 bnd jb 41 <foo2\+0xd> 3d: R_X86_64_PLT32 foo-0x4
|
|
-[ ]*[a-f0-9]+: f2 e8 00 00 00 00 bnd call 47 <foo2\+0x13> 43: R_X86_64_PLT32 foo-0x4
|
|
+[ ]*[a-f0-9]+: f2 e9 00 00 00 00 bnd jmp 3a <foo2\+0x6> 36: R_X86_64_PC32 foo-0x4
|
|
+[ ]*[a-f0-9]+: f2 0f 82 00 00 00 00 bnd jb 41 <foo2\+0xd> 3d: R_X86_64_PC32 foo-0x4
|
|
+[ ]*[a-f0-9]+: f2 e8 00 00 00 00 bnd call 47 <foo2\+0x13> 43: R_X86_64_PC32 foo-0x4
|
|
[ ]*[a-f0-9]+: f2 e9 00 00 00 00 bnd jmp 4d <foo2\+0x19> 49: R_X86_64_PLT32 foo-0x4
|
|
[ ]*[a-f0-9]+: f2 0f 82 00 00 00 00 bnd jb 54 <foo2\+0x20> 50: R_X86_64_PLT32 foo-0x4
|
|
[ ]*[a-f0-9]+: f2 e8 00 00 00 00 bnd call 5a <foo2\+0x26> 56: R_X86_64_PLT32 foo-0x4
|
|
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/mpx1c.rd b/ld/testsuite/ld-x86-64/mpx1c.rd
|
|
index d66524c8834..d3b292cbdc1 100644
|
|
--- a/ld/testsuite/ld-x86-64/mpx1c.rd
|
|
+++ b/ld/testsuite/ld-x86-64/mpx1c.rd
|
|
@@ -1,3 +1,3 @@
|
|
#...
|
|
-[0-9a-f ]+R_X86_64_PLT32 +0+ +.*
|
|
+[0-9a-f ]+R_X86_64_PC32 +0+ +.*
|
|
#...
|
|
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" \
|