Hi all, The gcc.dg/lto/pr54709, pr61526, pr64415 linking testcases keep failing on arm/aarch64 bare-metal target.
It's because statically built newlib library is used to link with shared object. And the linker complains about relocations which cannot be used in shared object. For example, the following errors are produced: crtbegin.o: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC crtbegin.o: relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC librdimon.a(rdimon-syscalls.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `_impure_ptr' can not be used when making a shared object; recompile with -fPIC Presumably, bare-metal toolchain for other architecture have those test case failures as well? In this patch, -shared option is replace by -r -nostdlib. So that the standard system startup files or libraries are not used when linking. arm-none-eabi, aarch64-none-elf regression test OK, OK for trunk? Regards, Renlin Li gcc/testsuite/ChangeLog: 2016-02-29 Renlin Li<renlin...@arm.com> * gcc.dg/lto/pr54709_0.c: Replace -shard with -r -nostdlib. * gcc.dg/lto/pr61526_0.c: Ditto. * gcc.dg/lto/pr64415_0.c: Ditto.
diff --git a/gcc/testsuite/gcc.dg/lto/pr54709_0.c b/gcc/testsuite/gcc.dg/lto/pr54709_0.c index f3db5dc..12a10e0 100644 --- a/gcc/testsuite/gcc.dg/lto/pr54709_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr54709_0.c @@ -1,7 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-visibility "hidden" } */ /* { dg-require-effective-target fpic } */ -/* { dg-extra-ld-options { -shared } } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ /* { dg-lto-options { { -fPIC -fvisibility=hidden -flto } } } */ void foo (void *p, void *q, unsigned s) diff --git a/gcc/testsuite/gcc.dg/lto/pr61526_0.c b/gcc/testsuite/gcc.dg/lto/pr61526_0.c index 8a631f0..5e2f7acf 100644 --- a/gcc/testsuite/gcc.dg/lto/pr61526_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr61526_0.c @@ -1,7 +1,7 @@ /* { dg-require-effective-target fpic } */ /* { dg-lto-do link } */ /* { dg-lto-options { { -fPIC -flto -flto-partition=1to1 } } } */ -/* { dg-extra-ld-options { -shared } } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ static void *master; void *foo () { return master; } diff --git a/gcc/testsuite/gcc.dg/lto/pr64415_0.c b/gcc/testsuite/gcc.dg/lto/pr64415_0.c index 4faab2b..0f583a5 100644 --- a/gcc/testsuite/gcc.dg/lto/pr64415_0.c +++ b/gcc/testsuite/gcc.dg/lto/pr64415_0.c @@ -1,7 +1,7 @@ /* { dg-lto-do link } */ /* { dg-require-effective-target fpic } */ /* { dg-lto-options { { -O -flto -fpic } } } */ -/* { dg-extra-ld-options { -shared } } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ /* { dg-extra-ld-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ extern void bar(char *, int);