From cd1fc1360a1df48672ac75bca3265bd5fdbd6ed2 Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Jun 24 2014 19:30:41 +0000 Subject: backport some testsuite fixes from upstream --- diff --git a/binutils-2.24-aarch64-ld-shared-non-PIC-xfail.patch b/binutils-2.24-aarch64-ld-shared-non-PIC-xfail.patch new file mode 100644 index 0000000..8525596 --- /dev/null +++ b/binutils-2.24-aarch64-ld-shared-non-PIC-xfail.patch @@ -0,0 +1,55 @@ +commit 273dc279306c2b69fbc1407cc695397e4b015152 +Author: Will Newton +Date: Fri May 16 15:22:58 2014 +0100 + + ld/aarch64: xfail non-PIC shared object tests on aarch64 + + aarch64 does not support building non-PIC shared objects, so mark + tests for these as xfail. + + ld/testsuite/ChangeLog: + + 2014-05-20 Will Newton + + * ld-shared/shared.exp: Mark non-PIC shared object tests + as xfail on aarch64. + +#-- a/ld/testsuite/ChangeLog +#++ b/ld/testsuite/ChangeLog +#@ -1,3 +1,8 @@ ++2014-05-20 Will Newton ++ ++ * ld-shared/shared.exp: Mark non-PIC shared object tests ++ as xfail on aarch64. ++ + 2014-05-19 Andreas Tobler + + * ld-elf/shared.exp: Introduce the extralibs variable to control +diff --git a/ld/testsuite/ld-shared/shared.exp b/ld/testsuite/ld-shared/shared.exp +index 9996ece..c723ef7 100644 +--- a/ld/testsuite/ld-shared/shared.exp ++++ b/ld/testsuite/ld-shared/shared.exp +@@ -244,6 +244,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } ++ setup_xfail "aarch64*-*-linux*" + shared_test shnp "shared (non PIC)" mainnp.o sh1np.o sh2np.o shared + + # Test ELF shared library relocations with a non-zero load +@@ -270,6 +271,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } ++ setup_xfail "aarch64*-*-linux*" + shared_test shnp "shared (non PIC, load offset)" \ + mainnp.o sh1np.o sh2np.o shared \ + "-T $srcdir/$subdir/elf-offset.ld" +@@ -326,6 +328,7 @@ if ![ld_compile "$CC $CFLAGS $SHCFLAG $picflag" $srcdir/$subdir/main.c $tmpdir/m + if [ string match $shared_needs_pic "yes" ] { + setup_xfail "arm*-*-linux*" + } ++ setup_xfail "aarch64*-*-linux*" + shared_test shmpnp "shared (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o shared + } + } else { diff --git a/binutils-2.24-arm-static-tls.patch b/binutils-2.24-arm-static-tls.patch new file mode 100644 index 0000000..2b580f1 --- /dev/null +++ b/binutils-2.24-arm-static-tls.patch @@ -0,0 +1,42 @@ +commit eea6dad2b3ae91189caa91145dd133bae0398d21 +Author: Kyle McMartin +Date: Fri Jun 20 11:14:09 2014 +0100 + + Similarly to the AArch64 patch, set DF_STATIC_TLS for consistency with + other architectures when we emit IE relocs in a shared library. + + * elf32-arm.c (elf32_arm_check_relocs): Set DF_STATIC_TLS when + emitting initial-exec relocs when not linking an executable. + +--- a/bfd/elf32-arm.c ++++ b/bfd/elf32-arm.c +@@ -12711,6 +12711,9 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, + default: tls_type = GOT_NORMAL; break; + } + ++ if (!info->executable && (tls_type & GOT_TLS_IE)) ++ info->flags |= DF_STATIC_TLS; ++ + if (h != NULL) + { + h->got.refcount++; +--- a/ld/testsuite/ld-arm/tls-gdierelax2.d ++++ b/ld/testsuite/ld-arm/tls-gdierelax2.d +@@ -11,13 +11,13 @@ Disassembly of section .text: + [0-9a-f]+: e59f0004 ldr r0, \[pc, #4\] ; .* + [0-9a-f]+: e79f0000 ldr r0, \[pc, r0\] + [0-9a-f]+: e1a00000 nop ; .* +- [0-9a-f]+: 00008098 .word 0x00008098 +- [0-9a-f]+: 0000809c .word 0x0000809c ++ [0-9a-f]+: 000080a0 .word 0x000080a0 ++ [0-9a-f]+: 000080a4 .word 0x000080a4 + + [0-9a-f]+ : + [0-9a-f]+: 4801 ldr r0, \[pc, #4\] ; .* + [0-9a-f]+: 4478 add r0, pc + [0-9a-f]+: 6800 ldr r0, \[r0, #0\] + [0-9a-f]+: 46c0 nop ; .* +- [0-9a-f]+: 0000808a .word 0x0000808a +- [0-9a-f]+: 0000808c .word 0x0000808c ++ [0-9a-f]+: 00008092 .word 0x00008092 ++ [0-9a-f]+: 00008094 .word 0x00008094 diff --git a/binutils-2.24-fat-lto-objects.patch b/binutils-2.24-fat-lto-objects.patch new file mode 100644 index 0000000..fe9c334 --- /dev/null +++ b/binutils-2.24-fat-lto-objects.patch @@ -0,0 +1,57 @@ +commit b35d44f1af711925bfa4344ef00470fee67122f1 +Author: Kyrylo Tkachov +Date: Wed Nov 27 13:43:39 2013 +0000 + + [ld/testsuite/] + 2013-11-27 Kyrylo Tkachov + + * ld-plugin/lto.exp: Add -ffat-lto-objects. + * lib/ld-lib.exp (check_lto_available): Likewise. + +--- a/ld/testsuite/ld-plugin/lto.exp ++++ b/ld/testsuite/ld-plugin/lto.exp +@@ -57,7 +57,7 @@ set lto_link_tests { + "" "-O2" + {lto-3c.c} {} "libdummy.a"} + {"Build liblto-3.a" +- "" "-flto" ++ "" "-flto -ffat-lto-objects" + {lto-3b.c} {} "liblto-3.a"} + {"Build libdummy.a 5a" + "" "-flto" +@@ -111,7 +111,7 @@ set lto_link_tests { + "" "" + {pr12758a.s} {} "libdummy.a"} + {"Build libpr12758.a" +- "" "-flto -O2" ++ "" "-flto -O2 -ffat-lto-objects" + {pr12758b.c} {} "libpr12758.a"} + {"PR ld/12758" + "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" "" +@@ -120,13 +120,13 @@ set lto_link_tests { + "" "" + {pr12760a.c} {} "libdummy.a"} + {"Build libpr12760.a" +- "" "-flto -O2" ++ "" "-flto -O2 -ffat-lto-objects" + {pr12760b.c} {} "libpr12760.a"} + {"PR ld/12760" + "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" "" + {dummy.c} {} "pr12760.exe" "c" "warning: Bad bar"} + {"Build libpr13183.a" +- "-T" "-flto -O2" ++ "-T" "-flto -O2 -ffat-lto-objects" + {pr13183a.c} {} "libpr13183.a"} + {"Build libdummy.a PR ld/13183" + "" "-flto -O2" +--- a/ld/testsuite/lib/ld-lib.exp ++++ b/ld/testsuite/lib/ld-lib.exp +@@ -1643,7 +1643,7 @@ proc check_lto_available { } { + set f [open $src "w"] + puts $f "" + close $f +- set status [remote_exec host $CC "-shared -B[pwd]/tmpdir/ld/ -flto -fuse-linker-plugin $src -o $output"] ++ set status [remote_exec host $CC "-shared -B[pwd]/tmpdir/ld/ -flto -ffat-lto-objects -fuse-linker-plugin $src -o $output"] + if { [lindex $status 0] == 0 } { + set lto_available_saved 1 + } else { diff --git a/binutils-2.24-symbol-warning.patch b/binutils-2.24-symbol-warning.patch new file mode 100644 index 0000000..aff6c48 --- /dev/null +++ b/binutils-2.24-symbol-warning.patch @@ -0,0 +1,114 @@ +From 4c6d802e592b3762a149c343bc5722e065e57841 Mon Sep 17 00:00:00 2001 +From: H.J. Lu +Date: Wed, 26 Mar 2014 12:18:59 -0700 +Subject: [PATCH] Scan all input files for symbol reference warning + +This patch scans all input files for symbol reference warning if the +symbol reference doesn't exist in the current input file. + +ld/ + + PR ld/16756 + * ldmain.c (symbol_warning): New function. + (warning_callback): Use it. Scan all input files for a reference + to SYMBOL. + +ld/testsuite/ + + PR ld/16756 + * ld-plugin/lto.exp: Expect filename and line number for PR + ld/12760 test. +--- + ld/ChangeLog | 7 ++++ + ld/ldmain.c | 43 ++++++++++++++++---------- + ld/testsuite/ChangeLog | 64 ++++++++++++++++++++++------------------ + ld/testsuite/ld-plugin/lto.exp | 4 +- + 4 files changed, 70 insertions(+), 48 deletions(-) + +diff --git a/ld/ldmain.c b/ld/ldmain.c +index ffc9f84..14253a6 100644 +--- a/ld/ldmain.c ++++ b/ld/ldmain.c +@@ -1150,6 +1150,25 @@ struct warning_callback_info + asymbol **asymbols; + }; + ++/* Look through the relocs to see if we can find a plausible address ++ for SYMBOL in ABFD. Return TRUE if found. Otherwise return FALSE. */ ++ ++static bfd_boolean ++symbol_warning (const char *warning, const char *symbol, bfd *abfd) ++{ ++ struct warning_callback_info cinfo; ++ ++ if (!bfd_generic_link_read_symbols (abfd)) ++ einfo (_("%B%F: could not read symbols: %E\n"), abfd); ++ ++ cinfo.found = FALSE; ++ cinfo.warning = warning; ++ cinfo.symbol = symbol; ++ cinfo.asymbols = bfd_get_outsymbols (abfd); ++ bfd_map_over_sections (abfd, warning_find_reloc, &cinfo); ++ return cinfo.found; ++} ++ + /* This is called when there is a reference to a warning symbol. */ + + static bfd_boolean +--- a/ld/ldmain.c 2014-06-24 14:04:00.700594584 -0400 ++++ b/ld/ldmain.c 2014-06-24 14:07:19.452270808 -0400 +@@ -1172,24 +1172,14 @@ + einfo ("%P: %s%s\n", _("warning: "), warning); + else if (symbol == NULL) + einfo ("%B: %s%s\n", abfd, _("warning: "), warning); +- else if ((abfd->flags & BFD_PLUGIN) == 0) ++ else if (! symbol_warning (warning, symbol, abfd)) + { +- struct warning_callback_info cinfo; +- +- /* Look through the relocs to see if we can find a plausible +- address. */ +- +- if (!bfd_generic_link_read_symbols (abfd)) +- einfo (_("%B%F: could not read symbols: %E\n"), abfd); +- +- cinfo.found = FALSE; +- cinfo.warning = warning; +- cinfo.symbol = symbol; +- cinfo.asymbols = bfd_get_outsymbols (abfd); +- bfd_map_over_sections (abfd, warning_find_reloc, &cinfo); +- +- if (! cinfo.found) +- einfo ("%B: %s%s\n", abfd, _("warning: "), warning); ++ bfd *b; ++ /* Search all input files for a reference to SYMBOL. */ ++ for (b = info->input_bfds; b; b = b->link_next) ++ if (b != abfd && symbol_warning (warning, symbol, b)) ++ return TRUE; ++ einfo ("%B: %s%s\n", abfd, _("warning: "), warning); + } + + return TRUE; +diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp +index af7307f..53543a6 100644 +--- a/ld/testsuite/ld-plugin/lto.exp ++++ b/ld/testsuite/ld-plugin/lto.exp +@@ -116,14 +116,14 @@ set lto_link_tests { + "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" "" + {dummy.c} {} "pr12758.exe"} + {"Build libdummy.a PR ld/12760" +- "" "" ++ "" "-g -O0" + {pr12760a.c} {} "libdummy.a"} + {"Build libpr12760.a" + "" "-flto -O2 -ffat-lto-objects" + {pr12760b.c} {} "libpr12760.a"} + {"PR ld/12760" + "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" "" +- {dummy.c} {} "pr12760.exe" "c" "warning: Bad bar"} ++ {dummy.c} {} "pr12760.exe" "c" "pr12760a.c:6: warning: Bad bar"} + {"Build libpr13183.a" + "-T" "-flto -O2 -ffat-lto-objects" + {pr13183a.c} {} "libpr13183.a"} +-- +1.7.1 diff --git a/binutils.spec b/binutils.spec index 2ce6ad9..403aa68 100644 --- a/binutils.spec +++ b/binutils.spec @@ -17,7 +17,7 @@ Summary: A GNU collection of binary utilities Name: %{?cross}binutils%{?_with_debug:-debug} Version: 2.24 -Release: 15%{?dist} +Release: 16%{?dist} License: GPLv3+ Group: Development/Tools URL: http://sources.redhat.com/binutils @@ -59,6 +59,10 @@ Patch17: binutils-2.24-set-section-macros.patch Patch18: binutils-2.24-fake-zlib-sections.patch # Fix detections little endian PPC shared libraries Patch19: binutils-2.24-ldforcele.patch +Patch20: binutils-2.24-arm-static-tls.patch +Patch21: binutils-2.24-fat-lto-objects.patch +Patch22: binutils-2.24-symbol-warning.patch +Patch23: binutils-2.24-aarch64-ld-shared-non-PIC-xfail.patch Provides: bundled(libiberty) @@ -182,6 +186,10 @@ using libelf instead of BFD. %ifarch ppc64le %patch19 -p0 -b .ldforcele~ %endif +%patch20 -p1 -b .armstatictls~ +%patch21 -p1 -b .fatlto~ +%patch22 -p1 -b .symwarn~ +%patch23 -p1 -b .ld-aarch64-xfails~ # We cannot run autotools as there is an exact requirement of autoconf-2.59. @@ -492,6 +500,16 @@ exit 0 %endif # %{isnative} %changelog +* Tue Jun 24 2014 Kyle McMartin - 2.24-16 +- Backport a couple LTO testsuite fixes from HEAD. + Default to -ffat-lto-objects for some ld tests, which was the default in + gcc 4.8, but changed in 4.9, and resulted in some failures. +- Add STATIC_TLS flag on ARM when IE relocs are emitted in a shared + library. Also fix up offsets in the testsuite resulting from the + addition of the flags. +- XFail some ld tests on AArch64 to cut some of the spurious testsuite + failures down. + * Sat Jun 07 2014 Fedora Release Engineering - 2.24-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild