From eda721f0c85afa30c2b3030ef76522cc3451af21 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 26 Jun 2013 23:52:59 -0700 Subject: binutils: Backport emulation template fixes 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 Signed-off-by: Khem Raj Signed-off-by: Saul Wold --- meta/recipes-devtools/binutils/binutils-2.23.2.inc | 3 + ...lf32.em-gld-EMULATION_NAME-_before_alloca.patch | 31 ++++ ...lf32.em-gld-EMULATION_NAME-_before_alloca.patch | 43 +++++ .../binutils-2.23.2/backport/0003-gold.patch | 203 +++++++++++++++++++++ 4 files changed, 280 insertions(+) create mode 100644 meta/recipes-devtools/binutils/binutils-2.23.2/backport/0001-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch create mode 100644 meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch create mode 100644 meta/recipes-devtools/binutils/binutils-2.23.2/backport/0003-gold.patch (limited to 'meta/recipes-devtools/binutils') diff --git a/meta/recipes-devtools/binutils/binutils-2.23.2.inc b/meta/recipes-devtools/binutils/binutils-2.23.2.inc index f5b5a99a46..99fe2e558f 100644 --- a/meta/recipes-devtools/binutils/binutils-2.23.2.inc +++ b/meta/recipes-devtools/binutils/binutils-2.23.2.inc @@ -43,6 +43,9 @@ BACKPORT = "\ file://backport/aarch64-movi.patch \ file://backport/0001-config-tc-ppc.c-PPC_VLE_SPLIT16A-Delete-unused-macro.patch \ file://backport/0002-config-tc-ppc.c-md_apply_fix-Sign-extend-fieldval-un.patch \ + file://backport/0001-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch \ + file://backport/0002-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch \ + file://backport/0003-gold.patch \ " SRC_URI[md5sum] = "4f8fa651e35ef262edc01d60fb45702e" SRC_URI[sha256sum] = "fe914e56fed7a9ec2eb45274b1f2e14b0d8b4f41906a5194eac6883cfe5c1097" diff --git a/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0001-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0001-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch new file mode 100644 index 0000000000..050450fae2 --- /dev/null +++ b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0001-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch @@ -0,0 +1,31 @@ +From 4c147afe1796611c431aa86ea12342c1d80c2c4b Mon Sep 17 00:00:00 2001 +From: "Maciej W. Rozycki" +Date: Wed, 1 May 2013 17:18:43 +0000 +Subject: [PATCH] * emultempl/elf32.em + (gld${EMULATION_NAME}_before_allocation): Use + is_elf_hash_table rather than a handcoded condition. + +--- + ld/ChangeLog | 5 +++++ + ld/emultempl/elf32.em | 2 +- + 2 files changed, 6 insertions(+), 1 deletion(-) + +2013-05-01 Maciej W. Rozycki + + * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): + Use is_elf_hash_table rather than a handcoded condition. + +Upstream-Status: Backport +Index: binutils-2.23.2/ld/emultempl/elf32.em +=================================================================== +--- binutils-2.23.2.orig/ld/emultempl/elf32.em 2013-06-26 23:29:32.000000000 -0700 ++++ binutils-2.23.2/ld/emultempl/elf32.em 2013-06-26 23:35:45.798428256 -0700 +@@ -1494,7 +1494,7 @@ + asection *sinterp; + bfd *abfd; + +- if (link_info.hash->type == bfd_link_elf_hash_table) ++ if (is_elf_hash_table (link_info.hash)) + _bfd_elf_tls_setup (link_info.output_bfd, &link_info); + + /* If we are going to make any variable assignments, we need to let diff --git a/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch new file mode 100644 index 0000000000..36e5924d48 --- /dev/null +++ b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0002-emultempl-elf32.em-gld-EMULATION_NAME-_before_alloca.patch @@ -0,0 +1,43 @@ +From b0d2b7b6eae7b7f4fbfd1695d4d2f1b45198d597 Mon Sep 17 00:00:00 2001 +From: "Maciej W. Rozycki" +Date: Fri, 3 May 2013 15:01:19 +0000 +Subject: [PATCH] * emultempl/elf32.em + (gld${EMULATION_NAME}_before_allocation): Only call + lang_for_each_statement if an ELF hash table is used. + +--- + ld/ChangeLog | 5 +++++ + ld/emultempl/elf32.em | 12 +++++++----- + 2 files changed, 12 insertions(+), 5 deletions(-) + +2013-05-03 Alan Modra + + * emultempl/elf32.em (gld${EMULATION_NAME}_before_allocation): + Only call lang_for_each_statement if an ELF hash table is used. + +Upstream-Status: Backport + +Index: binutils-2.23.2/ld/emultempl/elf32.em +=================================================================== +--- binutils-2.23.2.orig/ld/emultempl/elf32.em 2013-06-26 23:35:45.000000000 -0700 ++++ binutils-2.23.2/ld/emultempl/elf32.em 2013-06-26 23:37:04.530429733 -0700 +@@ -1495,12 +1495,14 @@ + bfd *abfd; + + if (is_elf_hash_table (link_info.hash)) +- _bfd_elf_tls_setup (link_info.output_bfd, &link_info); ++ { ++ _bfd_elf_tls_setup (link_info.output_bfd, &link_info); + +- /* 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. */ +- lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment); ++ /* 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. */ ++ lang_for_each_statement (gld${EMULATION_NAME}_find_statement_assignment); ++ } + + /* Let the ELF backend work out the sizes of any sections required + by dynamic linking. */ diff --git a/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0003-gold.patch b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0003-gold.patch new file mode 100644 index 0000000000..141e66bce2 --- /dev/null +++ b/meta/recipes-devtools/binutils/binutils-2.23.2/backport/0003-gold.patch @@ -0,0 +1,203 @@ +From a347c1bd9be53513f60ed0e5f440c1f5cd78dec4 Mon Sep 17 00:00:00 2001 +From: "Maciej W. Rozycki" +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}"]] ++} -- cgit 1.2.3-korg