Hi Andrew,
Andrew Burgess wrote,
Some old versions of binutils did not support @pcl
relocations. This
commit adds a new flag to the uClibc configuration system that detects
if the toolchain supports @pcl relocations or not.
If this relocation is supported then the define ARC_HAS_AT_PCL_RELOC
will be passed to the compiler, which is then used in the arc ldso to
choose between generating old or new style code.
This commit addresses and issue that was worked around in commit
181d410ad00cddd1d6c9f4835e129136b74c5187 (ARC: Conditionalise certain
relocations as provided by TLS tools only). In this commit the choice
between old or new style relocations was made based on whether uClibc
was configured with native threads or not. The problem is that a user
of a new toolchain might choose to configure without native threads.
---
Rules.mak | 2 ++
ldso/ldso/arc/dl-startup.h | 2 +-
ldso/ldso/arc/dl-sysdep.h | 4 ++++
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Rules.mak b/Rules.mak
index 3c80016..04ff02f 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -507,9 +507,11 @@ ifeq ($(TARGET_ARCH),c6x)
endif
ifeq ($(TARGET_ARCH),arc)
+ ARC_HAS_AT_PCL_RELOC:=$(shell echo -e "\t.text\n\tadd r0,pcl,_symbol@pcl" |
$(CC) -c -x assembler -o /dev/null - 2> /dev/null && echo -n y || echo -n n)
CPU_CFLAGS-y += -mlock -mswape
CPU_CFLAGS-$(CONFIG_ARC_CPU_700) += -mA7
CPU_CFLAGS-$(CONFIG_ARC_CPU_HS) += -mcpu=archs
+ CPU_CFLAGS-$(ARC_HAS_AT_PCL_RELOC) += -DARC_HAS_AT_PCL_RELOC
CPU_LDFLAGS-y += $(CPU_CFLAGS) -marclinux
endif
I tried the patch, but get this with arc 2016.03 (ARC700, LE):
/home/wbx/embedded-test/openadk/toolchain_nsim-arcv1_uclibc-ng_arc700/usr/bin/arc-openadk-linux-uclibc-gcc
-c libc/sysdeps/linux/common/pause.c -o
libc/sysdeps/linux/common/pause.os -Wall -Wstrict-prototypes
-Wstrict-aliasing -funsigned-char -fno-builtin -fno-asm
-fmerge-all-constants -std=gnu99 -mlock -mswape -mA7
-fno-stack-protector -nostdinc -I./include -I./include -include
libc-symbols.h -I./libc/sysdeps/linux/arc -I./libc/sysdeps/linux
-I./ldso/ldso/arc -I./ldso/include -I. -Os -fstrict-aliasing -fwrapv
-fno-ident -mcpu=arc700 -Os -pipe -fomit-frame-pointer
-fno-unwind-tables -fno-asynchronous-unwind-tables
-D__USE_STDIO_FUTEXES__ -DHAVE_FORCED_UNWIND -D_LIBC_REENTRANT
-I./libpthread/nptl -I./libpthread/nptl
-I./libpthread/nptl/sysdeps/unix/sysv/linux/arc
-I./libpthread/nptl/sysdeps/arc -I./libpthread/nptl/sysdeps/arc
-I./libpthread/nptl/sysdeps/unix/sysv/linux
-I./libpthread/nptl/sysdeps/unix/sysv/linux
-I./libpthread/nptl/sysdeps/pthread
-I./libpthread/nptl/sysdeps/pthread/bits
-I./libpthread/nptl/sysdeps/generic -I./libc/sysdeps/linux/common
-isystem
/home/wbx/embedded-test/openadk/toolchain_nsim-arcv1_uclibc-ng_arc700/usr/lib/gcc/arc-openadk-linux-uclibc/4.8.5/include-fixed
-isystem
/home/wbx/embedded-test/openadk/toolchain_nsim-arcv1_uclibc-ng_arc700/usr/lib/gcc/arc-openadk-linux-uclibc/4.8.5/include
-I/home/wbx/embedded-test/openadk/target_nsim-arcv1_uclibc-ng_arc700/usr/include/
-DNDEBUG -DIN_LIB=libc -fPIC -fexceptions
-fasynchronous-unwind-tables -MT libc/sysdeps/linux/common/pause.os
-MD -MP -MF libc/sysdeps/linux/common/.pause.os.dep
{standard input}: Assembler messages:
{standard input}:15: Error: invalid operands (.bss and .text
sections) for `-'
{standard input}:15: Error: invalid operands (.text and *ABS*
sections) for `&'
{standard input}:17: Error: invalid operands (.text.exit and .text
sections) for `-'
{standard input}:17: Error: invalid operands (.text and *ABS*
sections) for `&'
Makerules:385: recipe for target 'ldso/ldso/ldso.oS' failed
make[6]: *** [ldso/ldso/ldso.oS] Error 1
It seems ARC_HAS_AT_PCL_RELOC isn't set. I tracked it down, it seems
a combination of my shell and echo -e usage. I know there is another
echo -e usage in Rules.mak and I will fix it later. Can you please
resend the patch with printf instead of echo -e, if the Synopsis ARC
developers agree on this patch?
I added the trailing "\n" to avoid a unnecessary warning when trying
just the command in a shell, sth like that:
diff --git a/Rules.mak b/Rules.mak
index 04ff02f..8b962b4 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -507,7 +507,7 @@ ifeq ($(TARGET_ARCH),c6x)
endif
ifeq ($(TARGET_ARCH),arc)
- ARC_HAS_AT_PCL_RELOC:=$(shell echo -e "\t.text\n\tadd
r0,pcl,_symbol@pcl" | $(CC) -c -x assembler -o /dev/null -
2> /dev/null && echo -n y || echo -n n)
+ ARC_HAS_AT_PCL_RELOC:=$(shell printf "\t.text\n\tadd
r0,pcl,_symbol@pcl\n" | $(CC) -c -x assembler -o /dev/null - 2>
/dev/null && echo -n y || echo -n n)
CPU_CFLAGS-y += -mlock -mswape
CPU_CFLAGS-$(CONFIG_ARC_CPU_700) += -mA7
CPU_CFLAGS-$(CONFIG_ARC_CPU_HS) += -mcpu=archs
Otherwise looks good to me and fixes my problem with a nothread
build :)
thanks
Waldemar