From 4a484792066222550a2c5c6ba41f7b7e4a391031 Mon Sep 17 00:00:00 2001 From: Alexey Brodkin Date: Tue, 28 Jul 2015 16:33:12 +0300 Subject: [PATCH] binutils: more fixes for arc-2015.06 tools Two patches below are taken from development branch of ARC binutils, so one the next release of ARC tools happens both patches must be removed. These 2 patches: 0003-ld-arc-Provide-the-.tdata-symbol.patch 0004-Provide-.tbss-symbol.patch fix missing .tbss and .tdata sections during linkage stage such as: ------------------------------>8--------------------------- arc-linux-g++ test.cpp ../arc-buildroot-linux-uclibc/lib/libstdc++.so: undefined reference to '.tbss' collect2: error: ld returned 1 exit status ------------------------------>8--------------------------- Signed-off-by: Alexey Brodkin Cc: Thomas Petazzoni Signed-off-by: Thomas Petazzoni --- ...002-ld-arc-Provide-the-.tdata-symbol.patch | 145 ++++++++++++++++++ .../0003-Provide-.tbss-symbol.patch | 70 +++++++++ 2 files changed, 215 insertions(+) create mode 100644 package/binutils/arc-2015.06/0002-ld-arc-Provide-the-.tdata-symbol.patch create mode 100644 package/binutils/arc-2015.06/0003-Provide-.tbss-symbol.patch diff --git a/package/binutils/arc-2015.06/0002-ld-arc-Provide-the-.tdata-symbol.patch b/package/binutils/arc-2015.06/0002-ld-arc-Provide-the-.tdata-symbol.patch new file mode 100644 index 0000000000..40341a50b9 --- /dev/null +++ b/package/binutils/arc-2015.06/0002-ld-arc-Provide-the-.tdata-symbol.patch @@ -0,0 +1,145 @@ +From daf1ff839fc68ef31e3263780de4604a95118702 Mon Sep 17 00:00:00 2001 +From: Andrew Burgess +Date: Thu, 23 Jul 2015 14:44:15 +0100 +Subject: [PATCH 1/2] ld/arc: Provide the .tdata symbol. + +When creating local dynamic tls access we rely on a .tdata symbol being +available to link against. Normally, this is fine, as content is placed +into the .tdata section the linker makes a .tdata symbol available and +all is fine. + +However, these linker created section symbols only exist for input +sections, not output sections, so, when we assemble with +-fdata-sections, and the content is placed not into '.tdata', but into +sections like, '.tdata.variable' we end up in a situation where there is +no input section called '.tdata', and so the linker does not create a +symbol called '.tdata' for us, at which point the link fails. + +The solution it to have the linker script explicitly provide the symbol +'.tdata', this should ensure that the symbol is always available. + +ld/ChangeLog: + + * scripttempl/arclinux.sc (.tdata): Provide the .tdata symbol. + +ld/testsuite/ChangeLog: + + * ld/testsuite/ld-arc/arc.exp: Run new test. + * ld/testsuite/ld-arc/tls-data-sections.d: New file. + * ld/testsuite/ld-arc/tls-data-sections.s: New file. +--- + ld/ChangeLog.ARC | 4 ++++ + ld/scripttempl/arclinux.sc | 2 +- + ld/testsuite/ChangeLog.ARC | 6 ++++++ + ld/testsuite/ld-arc/arc.exp | 1 + + ld/testsuite/ld-arc/tls-data-sections.d | 12 ++++++++++++ + ld/testsuite/ld-arc/tls-data-sections.s | 30 ++++++++++++++++++++++++++++++ + 6 files changed, 54 insertions(+), 1 deletion(-) + create mode 100644 ld/testsuite/ld-arc/tls-data-sections.d + create mode 100644 ld/testsuite/ld-arc/tls-data-sections.s + +diff --git a/ld/ChangeLog.ARC b/ld/ChangeLog.ARC +index fac6f48..0006bb3 100644 +--- a/ld/ChangeLog.ARC ++++ b/ld/ChangeLog.ARC +@@ -1,3 +1,7 @@ ++2015-07-23 Andrew Burgess ++ ++ * scripttempl/arclinux.sc (.tdata): Provide the .tdata symbol. ++ + 2015-03-26: Claudiu Zissulescu + + * testsuite/ld-arc/sda_relocs.d: New file. +diff --git a/ld/scripttempl/arclinux.sc b/ld/scripttempl/arclinux.sc +index 9d43ca3..1385b30 100644 +--- a/ld/scripttempl/arclinux.sc ++++ b/ld/scripttempl/arclinux.sc +@@ -326,7 +326,7 @@ cat < ++ ++ * ld/testsuite/ld-arc/arc.exp: Run new test. ++ * ld/testsuite/ld-arc/tls-data-sections.d: New file. ++ * ld/testsuite/ld-arc/tls-data-sections.s: New file. ++ + 2015-06-06 Andrew Burgess + + * ld-arc/unaligned-pc32.d: New file. +diff --git a/ld/testsuite/ld-arc/arc.exp b/ld/testsuite/ld-arc/arc.exp +index d2bfafe..74ab458 100644 +--- a/ld/testsuite/ld-arc/arc.exp ++++ b/ld/testsuite/ld-arc/arc.exp +@@ -47,3 +47,4 @@ if {[check_shared_lib_support]} { + + run_dump_test "sda_relocs" + run_dump_test "unaligned-pc32" ++run_dump_test "tls-data-sections" +diff --git a/ld/testsuite/ld-arc/tls-data-sections.d b/ld/testsuite/ld-arc/tls-data-sections.d +new file mode 100644 +index 0000000..9823bf0 +--- /dev/null ++++ b/ld/testsuite/ld-arc/tls-data-sections.d +@@ -0,0 +1,12 @@ ++#source: tls-data-sections.s ++#ld: --entry=main ++#objdump: -rd ++ ++ ++.*: file format elf32-littlearc ++ ++ ++Disassembly of section \.text: ++ ++00010094
: ++ 10094: 00 21 80 3f 00 00 08 00 add r0,r25,8 +diff --git a/ld/testsuite/ld-arc/tls-data-sections.s b/ld/testsuite/ld-arc/tls-data-sections.s +new file mode 100644 +index 0000000..f0450c0 +--- /dev/null ++++ b/ld/testsuite/ld-arc/tls-data-sections.s +@@ -0,0 +1,30 @@ ++ /* This file is not intended to be real code, however, the ++ contents of the main function is real code as generated as ++ part of a local dynamic tls model access. The purpose of ++ this test is to check that such an access will link ++ correctly. ++ ++ Notice that the relocation in main references '.tdata', and ++ though we put content into '.tdata.pgsz.1362' we don't ++ create a '.tdata' section. This is intentional, this example ++ was generated using -fdata-sections. ++ ++ The '.tdata' section will be created in the linker script, ++ and we do expect to be able to reference it. This should link. ++ */ ++ ++ .section ".text", "ax" ++ .global main, _start ++_start: ++ .type main, @function ++main: ++ add r0,pcl,@.tdata@tlsgd ;8 ++ .size main, .-main ++ ++ .section .tdata.pgsz.1362,"awT",@progbits ++ .align 8 ++ .type pgsz.1362, @object ++ .size pgsz.1362, 4 ++ ++pgsz.1362: ++ .word 1 +-- +2.4.3 + diff --git a/package/binutils/arc-2015.06/0003-Provide-.tbss-symbol.patch b/package/binutils/arc-2015.06/0003-Provide-.tbss-symbol.patch new file mode 100644 index 0000000000..34bb2a25ff --- /dev/null +++ b/package/binutils/arc-2015.06/0003-Provide-.tbss-symbol.patch @@ -0,0 +1,70 @@ +From a6014a956a4f2263c28240bb9191bee8f924b5db Mon Sep 17 00:00:00 2001 +From: Claudiu Zissulescu +Date: Tue, 28 Jul 2015 13:34:47 +0200 +Subject: [PATCH 2/2] Provide .tbss symbol + +--- + ld/ChangeLog.ARC | 14 +++++++++----- + ld/scripttempl/arclinux.sc | 2 +- + 2 files changed, 10 insertions(+), 6 deletions(-) + +diff --git a/ld/ChangeLog.ARC b/ld/ChangeLog.ARC +index 0006bb3..fb5c717 100644 +--- a/ld/ChangeLog.ARC ++++ b/ld/ChangeLog.ARC +@@ -1,8 +1,12 @@ ++2015-07-28 Claudiu Zissulescu ++ ++ * scripttempl/arclinux.sc (.tbss): Provide the .tbss symbol. ++ + 2015-07-23 Andrew Burgess + + * scripttempl/arclinux.sc (.tdata): Provide the .tdata symbol. + +-2015-03-26: Claudiu Zissulescu ++2015-03-26 Claudiu Zissulescu + + * testsuite/ld-arc/sda_relocs.d: New file. + * testsuite/ld-arc/sda_relocs.ld: Likewise. +@@ -13,21 +17,21 @@ + * scripttempl/arclinux.sc: PROVIDE_HIDDEN .tdata (in case the + section won't be included). + +-2014-12-17: Claudiu Zissulescu ++2014-12-17 Claudiu Zissulescu + + * scripttempl/elfarcv2.sc: Update .startup section. + +-2014-12-08: Claudiu Zissulescu ++2014-12-08 Claudiu Zissulescu + + * emulparams/arcv2elf.sh :Add discarded sections. + * emulparams/arcv2elfb.sh: Likewise + * scripttempl/elfarcv2.sc: New sections. + +-2014-12-01: Claudiu Zissulescu ++2014-12-01 Claudiu Zissulescu + + * scripttempl/elfarcv2.sc: Align the start of the stack. + +-2014-11-27: Claudiu Zissulescu ++2014-11-27 Claudiu Zissulescu + + * Makefile.am: Add two new emulation scripts for ARCv2. + * configure.tgt: Likewise. +diff --git a/ld/scripttempl/arclinux.sc b/ld/scripttempl/arclinux.sc +index 1385b30..bef5336 100644 +--- a/ld/scripttempl/arclinux.sc ++++ b/ld/scripttempl/arclinux.sc +@@ -327,7 +327,7 @@ cat <