mirror of
https://git.yoctoproject.org/poky
synced 2026-03-02 05:19:40 +01:00
This fixes the linking errors seen on mips64 when linking sln/ from eglibc 2.18 /builds1/angstrom/build/tmp-angstrom_next-eglibc/sysroots/x86_64-linux/usr/libexec/mips64-angstrom-linux.gcc-cross-initial/gcc/mips64-angstrom-linux/4.8.1/ld: BFD (GNU Binutils) 2.23.2 assertion fail /builds1/angstrom/build/tmp-angstrom_next-eglibc/work/mips64-angstrom-linux/binutils-cross/2.23.2-r4/binutils-2.23.2/bfd/elfxx-mips.c:3453 | collect2: error: ld returned 1 exit status (From OE-Core rev: eda721f0c85afa30c2b3030ef76522cc3451af21) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Saul Wold <sgw@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
204 lines
8.1 KiB
Diff
204 lines
8.1 KiB
Diff
From a347c1bd9be53513f60ed0e5f440c1f5cd78dec4 Mon Sep 17 00:00:00 2001
|
|
From: "Maciej W. Rozycki" <macro@linux-mips.org>
|
|
Date: Fri, 3 May 2013 15:19:26 +0000
|
|
Subject: [PATCH] gold/ PR ld/15365 * layout.cc
|
|
(Layout::finalize): Make __ehdr_start STV_HIDDEN.
|
|
|
|
ld/
|
|
PR ld/15365
|
|
* emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation):
|
|
Restrict __ehdr_start's export class to no less than STV_HIDDEN.
|
|
|
|
ld/testsuite/
|
|
PR ld/15365
|
|
* ld-elf/ehdr_start.d: Expect __ehdr_start to be STB_LOCAL.
|
|
* ld-mips-elf/ehdr_start-1.nd: New test.
|
|
* ld-mips-elf/ehdr_start-2.nd: New test.
|
|
* ld-mips-elf/ehdr_start-1.ld: New test linker script.
|
|
* ld-mips-elf/ehdr_start-2.ld: New test linker script.
|
|
* ld-mips-elf/ehdr_start-new.s: New test source.
|
|
* ld-mips-elf/ehdr_start-o32.s: New test source.
|
|
* ld-mips-elf/mips-elf.exp: Run the new tests.
|
|
---
|
|
gold/ChangeLog | 5 +++++
|
|
gold/layout.cc | 2 +-
|
|
ld/ChangeLog | 6 ++++++
|
|
ld/emultempl/elf32.em | 7 +++++++
|
|
ld/testsuite/ChangeLog | 12 ++++++++++++
|
|
ld/testsuite/ld-elf/ehdr_start.d | 2 +-
|
|
ld/testsuite/ld-mips-elf/ehdr_start-1.ld | 9 +++++++++
|
|
ld/testsuite/ld-mips-elf/ehdr_start-1.nd | 4 ++++
|
|
ld/testsuite/ld-mips-elf/ehdr_start-2.ld | 10 ++++++++++
|
|
ld/testsuite/ld-mips-elf/ehdr_start-2.nd | 4 ++++
|
|
ld/testsuite/ld-mips-elf/ehdr_start-new.s | 13 +++++++++++++
|
|
ld/testsuite/ld-mips-elf/ehdr_start-o32.s | 14 ++++++++++++++
|
|
ld/testsuite/ld-mips-elf/mips-elf.exp | 25 +++++++++++++++++++++++++
|
|
13 files changed, 111 insertions(+), 2 deletions(-)
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-1.ld
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-1.nd
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-2.ld
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-2.nd
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-new.s
|
|
create mode 100644 ld/testsuite/ld-mips-elf/ehdr_start-o32.s
|
|
|
|
Upstream-Status: Backport
|
|
Index: binutils-2.23.2/gold/layout.cc
|
|
===================================================================
|
|
--- binutils-2.23.2.orig/gold/layout.cc 2013-06-26 23:29:32.000000000 -0700
|
|
+++ binutils-2.23.2/gold/layout.cc 2013-06-26 23:39:22.170432315 -0700
|
|
@@ -2516,7 +2516,7 @@
|
|
symtab->define_in_output_segment("__ehdr_start", NULL,
|
|
Symbol_table::PREDEFINED, load_seg, 0, 0,
|
|
elfcpp::STT_NOTYPE, elfcpp::STB_GLOBAL,
|
|
- elfcpp::STV_DEFAULT, 0,
|
|
+ elfcpp::STV_HIDDEN, 0,
|
|
Symbol::SEGMENT_START, true);
|
|
|
|
// Set the file offsets of all the non-data sections we've seen so
|
|
Index: binutils-2.23.2/ld/emultempl/elf32.em
|
|
===================================================================
|
|
--- binutils-2.23.2.orig/ld/emultempl/elf32.em 2013-06-26 23:37:04.000000000 -0700
|
|
+++ binutils-2.23.2/ld/emultempl/elf32.em 2013-06-26 23:39:22.174432315 -0700
|
|
@@ -1498,6 +1498,13 @@
|
|
{
|
|
_bfd_elf_tls_setup (link_info.output_bfd, &link_info);
|
|
|
|
+ /* Make __ehdr_start hidden if it has been referenced, to
|
|
+ prevent the symbol from being dynamic. */
|
|
+ if (!bfd_elf_record_link_assignment (link_info.output_bfd, &link_info,
|
|
+ "__ehdr_start", TRUE, TRUE))
|
|
+ einfo ("%P%F: failed to record assignment to %s: %E\n",
|
|
+ "__ehdr_start");
|
|
+
|
|
/* If we are going to make any variable assignments, we need to
|
|
let the ELF backend know about them in case the variables are
|
|
referred to by dynamic objects. */
|
|
Index: binutils-2.23.2/ld/testsuite/ld-elf/ehdr_start.d
|
|
===================================================================
|
|
--- binutils-2.23.2.orig/ld/testsuite/ld-elf/ehdr_start.d 2013-06-26 23:29:32.000000000 -0700
|
|
+++ binutils-2.23.2/ld/testsuite/ld-elf/ehdr_start.d 2013-06-26 23:39:22.174432315 -0700
|
|
@@ -4,5 +4,5 @@
|
|
#target: *-*-linux* *-*-gnu* *-*-nacl*
|
|
|
|
#...
|
|
-[0-9a-f]*000 [ADRT] __ehdr_start
|
|
+[0-9a-f]*000 [Adrt] __ehdr_start
|
|
#pass
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-1.ld
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-1.ld 2013-06-26 23:39:22.174432315 -0700
|
|
@@ -0,0 +1,9 @@
|
|
+ENTRY (__start)
|
|
+SECTIONS
|
|
+{
|
|
+ . = 0x12300000 + SIZEOF_HEADERS;
|
|
+ .text : { *(.text) }
|
|
+ . = 0x23400000;
|
|
+ HIDDEN (_gp = ALIGN (16) + 0x7ff0);
|
|
+ .got : { *(.got) }
|
|
+}
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-1.nd
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-1.nd 2013-06-26 23:39:22.174432315 -0700
|
|
@@ -0,0 +1,4 @@
|
|
+Symbol table '\.symtab' contains [0-9]+ entries:
|
|
+#...
|
|
+ *[0-9]+: 0*12300000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ __ehdr_start
|
|
+#pass
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-2.ld
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-2.ld 2013-06-26 23:39:22.174432315 -0700
|
|
@@ -0,0 +1,10 @@
|
|
+ENTRY (__start)
|
|
+SECTIONS
|
|
+{
|
|
+ . = 0x12300000 + SIZEOF_HEADERS;
|
|
+ .text : { *(.text) }
|
|
+ . = 0x23400000;
|
|
+ __ehdr_start = .;
|
|
+ HIDDEN (_gp = ALIGN (16) + 0x7ff0);
|
|
+ .got : { *(.got) }
|
|
+}
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-2.nd
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-2.nd 2013-06-26 23:39:22.178432315 -0700
|
|
@@ -0,0 +1,4 @@
|
|
+Symbol table '\.symtab' contains [0-9]+ entries:
|
|
+#...
|
|
+ *[0-9]+: 0*23400000 +0 (?:NOTYPE|OBJECT) +LOCAL +DEFAULT +[0-9]+ __ehdr_start
|
|
+#pass
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-new.s
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-new.s 2013-06-26 23:39:22.178432315 -0700
|
|
@@ -0,0 +1,13 @@
|
|
+ .abicalls
|
|
+ .text
|
|
+ .weak __ehdr_start
|
|
+ .globl __start
|
|
+ .ent __start
|
|
+ .frame $29, 0, $31
|
|
+ .mask 0x00000000, 0
|
|
+__start:
|
|
+ .cplocal $2
|
|
+ .cpsetup $t9, $zero, __start
|
|
+ lw $2, __ehdr_start
|
|
+ jr $31
|
|
+ .end __start
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-o32.s
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/ehdr_start-o32.s 2013-06-26 23:39:22.178432315 -0700
|
|
@@ -0,0 +1,14 @@
|
|
+ .abicalls
|
|
+ .text
|
|
+ .weak __ehdr_start
|
|
+ .globl __start
|
|
+ .ent __start
|
|
+ .frame $29, 0, $31
|
|
+ .mask 0x00000000, 0
|
|
+__start:
|
|
+ .set noreorder
|
|
+ .cpload $25
|
|
+ .set reorder
|
|
+ lw $2, __ehdr_start
|
|
+ jr $31
|
|
+ .end __start
|
|
Index: binutils-2.23.2/ld/testsuite/ld-mips-elf/mips-elf.exp
|
|
===================================================================
|
|
--- binutils-2.23.2.orig/ld/testsuite/ld-mips-elf/mips-elf.exp 2013-06-26 23:29:32.000000000 -0700
|
|
+++ binutils-2.23.2/ld/testsuite/ld-mips-elf/mips-elf.exp 2013-06-26 23:39:22.178432315 -0700
|
|
@@ -669,3 +669,28 @@
|
|
"readelf -A export-class-call16-${abi}.gd"] \
|
|
"export-class-call16-${abi}.so"]]
|
|
}
|
|
+
|
|
+# Magic __ehdr_start symbol tests.
|
|
+set abis [concat o32 [expr {$has_newabi ? "n32 n64" : ""}]]
|
|
+foreach { abi } $abis {
|
|
+ set suff [string map {o32 o32 n32 new n64 new} $abi]
|
|
+ run_ld_link_tests [list \
|
|
+ [list \
|
|
+ "MIPS magic __ehdr_start symbol test 1 ($abi)" \
|
|
+ "$abi_ldflags($abi) -T ehdr_start-1.ld" "" \
|
|
+ "$abi_asflags($abi)" \
|
|
+ [list ehdr_start-${suff}.s] \
|
|
+ [list "readelf -s ehdr_start-1.nd"] \
|
|
+ "ehdr_start-1-${abi}"]]
|
|
+ if [regexp "(?:n32|n64)" "$abi"] {
|
|
+ setup_kfail "mips*-*-*" "ld/15428"
|
|
+ }
|
|
+ run_ld_link_tests [list \
|
|
+ [list \
|
|
+ "MIPS magic __ehdr_start symbol test 2 ($abi)" \
|
|
+ "$abi_ldflags($abi) -T ehdr_start-2.ld" "" \
|
|
+ "$abi_asflags($abi)" \
|
|
+ [list ehdr_start-${suff}.s] \
|
|
+ [list "readelf -s ehdr_start-2.nd"] \
|
|
+ "ehdr_start-2-${abi}"]]
|
|
+}
|