It turned out one of the previous fixes (required to build Linux
kernel)
------------------>8-------------------
ARC Binutils: a65b844aed
Buildroot: http://git.buildroot.net/buildroot/commit/?id=2d4e2e238a0ea9395152ae71d882d79b1f35094c
------------------>8-------------------
broke building of some other software packages.
In particular perf built for ARCv2 had corrupted .plt entries that lead
to immediate crash on perf execution.
That's an example of normal .plt entries:
------------------>8-------------------
< 1-st PLT entry >:
12c24: 30 27 8c 7f 0d 00 74 95 ld r12,[pcl,0x000d9574]
12c2c: 21 20 00 03 j.d [r12]
12c30: 0a 24 c0 1f mov r12,pcl
< 2-nd PLT entry >:
12c34: 30 27 8c 7f 0d 00 68 95 ld r12,[pcl,0x000d9568]
12c3c: 21 20 00 03 j.d [r12]
12c40: 0a 24 c0 1f mov r12,pcl
------------------>8-------------------
Note right after jump in its delay-slot r12 gets set with current value
of program counter. This is required for the first symbol resolution,
see implementation of _dl_linux_resolve here:
http://git.uclibc.org/uClibc/tree/ldso/ldso/arc/resolve.S#n46
And that's what we got in .plt after mentioned fixes:
------------------>8-------------------
< 1-st PLT entry>:
13384: 30 27 8c 7f 0f 00 84 75 ld r12,[pcl,0x000f7584]
1338c: 21 20 00 03 j.d [r12]
< 2-nd PLT entry>:
13390: 30 27 8c 7f 0f 00 78 75 ld r12,[pcl,0x000f7578]
13398: 21 20 00 03 j.d [r12]
------------------>8-------------------
Note r12 setup is missing.
That happened because linker thought the size of PLT entry is 12 bytes
(which is exactly the size of PLT entry for ARCv1, read ARC750/770)
while for ARCv2 PLT entry is 16-bytes long. And erroneously trailing 4
bytes were truncated.
Current commit fixes this misbehavior and PLT gets generated properly
again.
Now we have a fix for that issue, see
5df50c6108
This fix is in arc-2.23-dev branch and will be a part of the next
release of ARC tools, so then this patch must be removed from buildroot.
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
With the fix for missing .tdata/.tbss sections we unintentionally
introduced a regression for ARCv2 ISA (read ARC HS38) kernel building.
That's what we got on attempt to build kernel:
----------------------------------->8--------------------------------------
LD drivers/video/fbdev/built-in.o
arc-linux-ld: ERROR: Attempting to link drivers/video/fbdev/omap2/built-in.o with a binary drivers/video/fbdev/built-in.o of different architecture
arc-linux-ld: failed to merge target specific data of file drivers/video/fbdev/omap2/built-in.o
scripts/Makefile.build:337: recipe for target 'drivers/video/fbdev/built-in.o' failed
make[3]: *** [drivers/video/fbdev/built-in.o] Error 1
scripts/Makefile.build:403: recipe for target 'drivers/video/fbdev' failed
make[2]: *** [drivers/video/fbdev] Error 2
scripts/Makefile.build:403: recipe for target 'drivers/video' failed
make[1]: *** [drivers/video] Error 2
Makefile:944: recipe for target 'drivers' failed
make: *** [drivers] Error 2
----------------------------------->8--------------------------------------
The reason was empty .tdata and .tbss sections in empty archives. And
later empty archives were linked in built-in.o with default architecture
(in our case ARCv1 ISA, read for ARC 700) and then expected failure
happened when objets for different architectures were attempted to link
together.
Now we have a fix for that issue, see
a65b844aed
This fix is in arc-2.23-dev branch and will be a part of the next
release of ARC tools, so then this patch must be removed from buildroot.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
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 <abrodkin@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
I'm happy to update GNU tools for ARC cores to the most recent
arc-2015.06 release.
This release brings following major improvements:
* GCC: source update to v4.8.4
* GCC: C ABI compatibility between MetaWare and GNU toolchains
* uClibc: support for thread local storage and Native Pthread Library (NPTL)
* GDB: updated to version 7.9.1
Also a lot of fixes and improvements has been done, please refer to
https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain/releases/tag/arc-2015.06
for more details.
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Cc: Anton Kolesov <akolesov@synopsys.com>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: Peter Korsgaard <peter@korsgaard.com>
Cc: Romain Naour <romain.naour@openwide.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>