On Thu, Mar 3, 2016 at 1:07 PM, Renlin Li <renlin...@foss.arm.com> wrote: > Hi Richard, > > > On 03/03/16 10:13, Richard Biener wrote: >> >> On Wed, Mar 2, 2016 at 5:12 PM, Renlin Li <renlin...@foss.arm.com> wrote: >>> >>> Hi Richard, >>> >>> >>> On 02/03/16 13:35, Richard Biener wrote: >>>> >>>> On Tue, Mar 1, 2016 at 4:56 PM, Renlin Li <renlin...@foss.arm.com> >>>> wrote: >>>>> >>>>> Hi Richard, >>>>> >>>>> >>>>> On 01/03/16 09:16, Richard Biener wrote: >>>>>> >>>>>> On Mon, Feb 29, 2016 at 5:13 PM, Renlin Li <renlin...@foss.arm.com> >>>>>> wrote: >>>>>>> >>>>>>> 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. >>>>>> >>>>>> Note that -shared is not equivalent to -r -nostdlib so please verify >>>>>> that >>>>>> the >>>>>> original issue can be still reproduced with its fix reverted but -r >>>>>> -nostdlib >>>>>> used with the new -r -nostdlib handling on trunk. >>>>> >>>>> >>>>> pr54709_0.c: Cannot be reproduced with even -shared. The error message >>>>> is >>>>> the same as shown above. >>>>> pr64415_0.c: Reproduced with "-r -nostdlib". >>>>> pr61526_0.c: Reproduced with "-r -nostdlib". >>>>> >>>>> By the way, those linking test cases all pass for linux toolchain. Only >>>>> fail >>>>> for aarch64/arm baremetal toolchain. >>>>> >>>>> Andrew, I saw you have done similar things in r153555 >>>>> https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=153555 >>>>> >>>>> Do you have any thoughts? >>>>> >>>>> And also here, the last comments in this ticket suggests to add >>>>> check_effective_target_shared to the exp file to limit it to linux >>>>> targets >>>>> only: >>>>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61526 >>>> >>>> As said LTO testcases tend to be somewhat fragile so limiting them to >>>> targets known to work might be the best option. >>>> >>>> Richard. >>> >>> >>> Forgot the mention that, by purely adding "-nostdlib" option (instead of >>> replacing -shared) >>> fixes the failures as well. >>> >>> I test those test cases again with fix reverted, keep "-shared" option, >>> add >>> "-nostdlib" option. >> >> Ok, so I discovered we have a "shared" target which means if a target >> doesn't >> support shared libs we can guard against it with using >> >> /* { dg-require-effective-target shared } */ >> >> does adding that to the three testcases fix the issue for you? > > By adding this target check > /* { dg-require-effective-target shared } */ > > Those test cases aredeemed to be unsupported, and thus skipped for > aarch64-none-elf target. > > However, it's a little bit tricky for arm bare-metal target. > > The shared option check actually successes for arm-none-eabi toolchain. > This is because the default cpu for arm-none-eabi toolchain is arm7tdmi. And > the start file crtbegin.o doesn't contains any modifications not allowed in > shared object. > > arm-none-eabi is built with multilib. When running this testcase, it's > compiled with "-march=armv7-a". > The crtbegin.o for this architecture version contains relocations which > cannot be used in shared object. > That's why they fails to linking test.
For -shared it should provide a crtbeginS.o then. Why not fix it properly? Richard. > Will adding "-nostdlib" (instead of replace -shared) option be an reasonable > fix given my previous check? > > Regards, > Renlin > > > >> >> Thanks, >> Richard. >> >>> pr54709_0.c: Cannot be reproduced even with test case unmodified. >>> The error message is the same as shown above. with "-nostdlib", no >>> failure. >>> >>> pr64415_0.c: Reproduced. >>> pr61526_0.c: Reproduced. >>> >>> Regards, >>> Renlin >>> >>> >>> >>>>> Regards, >>>>> Renlin >>>>> >>>>> >>>>>> Otherwise simply dg-skip for aarch64. >>>>>> >>>>>> Richard. >>>>>> >>>>>>> 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. >>>>>>> >