On 2 March 2016 at 10:49, Christophe Lyon <christophe.l...@linaro.org> wrote: > On 2 March 2016 at 10:16, James Greenhalgh <james.greenha...@arm.com> wrote: >> On Tue, Mar 01, 2016 at 05:56:30PM +0100, Christophe Lyon wrote: >>> On 1 March 2016 at 10:51, James Greenhalgh <james.greenha...@arm.com> wrote: >>> > On Tue, Mar 01, 2016 at 10:21:27AM +0100, Richard Biener wrote: >>> >> On Mon, 29 Feb 2016, James Greenhalgh wrote: >>> >> >>> >> > On Fri, Feb 26, 2016 at 09:32:53AM +0100, Richard Biener wrote: >>> >> > > >>> >> > > The following fixes PR69951, hopefully the last case of decl alias >>> >> > > issues with alias analysis. This time it's points-to and the >>> >> > > DECL_UIDs >>> >> > > used in points-to sets not being canonicalized. >>> >> > > >>> >> > > The simplest (and cheapest) fix is to make aliases refer to the >>> >> > > ultimate alias target via their DECL_PT_UID which we conveniently >>> >> > > have available. >>> >> > > >>> >> > > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to >>> >> > > trunk. >>> >> > > >>> >> > > Richard. >>> >> > > >>> >> > > 2016-02-26 Richard Biener <rguent...@suse.de> >>> >> > > >>> >> > > PR tree-optimization/69551 >>> >> > > * tree-ssa-structalias.c (get_constraint_for_ssa_var): When >>> >> > > looking through aliases adjust DECL_PT_UID to refer to the >>> >> > > ultimate alias target. >>> >> > > >>> >> > > * gcc.dg/torture/pr69951.c: New testcase. >>> >> > >>> >> > I see this new testcase failing on an ARM target as so: >>> >> > >>> >> > /tmp/ccChjoFc.s: Assembler messages: >>> >> > /tmp/ccChjoFc.s:21: Warning: [-mwarn-syms]: Assignment makes a >>> >> > symbol match an ARM instruction: b >>> >> > >>> >> > FAIL: gcc.dg/torture/pr69951.c -O0 (test for excess errors) >>> >> > >>> >> > But I haven't managed to reproduce it outside of the test environment. >>> >> > >>> >> > The fix looks trivial, rename b to anything else you fancy (well... >>> >> > stay >>> >> > clear of add and ldr). I'll put a fix in myself if I can manage to get >>> >> > this to reproduce - though if anyone else wants to do it I won't be >>> >> > offended :-). >>> >> >>> >> Huh, I wonder what's the use of such warning. After all 'ldr' is a valid >>> >> C symbol name, too. In fact my cross arm as doesn't report this >>> >> warning (binutils 2.25.0) >>> >> >>> >> > arm-suse-linux-gnueabi-as t.s -mwarn-syms >>> >> Assembler messages: >>> >> Error: unrecognized option -mwarn-syms >>> > >>> > Right, I've figured out the set of conditions... You need to be targeting >>> > an arm-*-linux-* system to make sure that the ASM_OUTPUT_DEF definition >>> > from config/arm/linux-elf.h is pulled in. This causes us to emit: >>> > >>> > b = a >>> > >>> > Rather than >>> > >>> > .set b,a >>> > >>> > Writing it as "b = a" causes the warning added to resolve binutils >>> > PR18347 [1] to kick in, so you need binutils > 2.26 or to have backported >>> > that patch). >>> > >>> James, >>> >>> What happens for you on arm-none-eabi configurations? >>> I'm using binutils-2.25, so I can't see this warning whatever the target. >>> However, I'm using qemu-arm and this test fails on arm-none-eabi, >>> because argc is set to 0 during the startup-code. >>> >>> As I understand it, qemu-arm considers the code page as readonly, >>> and thus the GetCmdLine semi hosting call cannot write argc/argv >>> back to memory in the same code page (I'm using libgloss' crt0). >>> >>> I tried to play with qemu-system-arm, but then libgloss' crt0 does not >>> set the reset vector and the simulation does random things, starting at >>> address 0. >>> >>> Am I missing some newlib/libgloss configuration bits, or should I >>> send a newlib patch to address this? >> >> Hi Christophe, >> >> I didn't get this running under arm-none-eabi. The testcase does have >> undefined behaviour (too few arguments to main), but I'd be surprised if >> that was the issue... I'm sure the testcase could be rewritten to avoid >> the dependence on argc if this proves an issue for other bare-metal >> testers running under an emulator. >> > > Indeed, I'm wondering why the testcase depends on argc beeing non-zero? >
To avoid modifying the testcase too much, I propose to replace if (argc) by if (argc >= 0) as in the attached patch. This does make the trick on arm-non-eabi. OK? Christophe. >> Thanks, >> James >> >>> > Resolving it by hacking the testcase would be one fix, but I wonder why >>> > the >>> > ARM port prefers to emit "b = a" in a linux environment if .set does the >>> > same thing and always avoids the warning? Maybe Ramana/Richard/Kyrill/Nick >>> > remember? (AArch64 does the same thing, but the AArch64 gas port doesn't >>> > have the PR18347 fix). >>> > >>> > Cheers, >>> > James >>> > >>> > --- >>> > >>> > [1]: https://sourceware.org/bugzilla/show_bug.cgi?id=18347 >>> > >>> >> >>> >> Richard. >>> >> >>>
2016-03-04 Christophe Lyon <christophe.l...@linaro.org> * gcc.dg/torture/pr69951.c: Accept argc==0.
diff --git a/gcc/testsuite/gcc.dg/torture/pr69951.c b/gcc/testsuite/gcc.dg/torture/pr69951.c index cb46fef..be9a027 100644 --- a/gcc/testsuite/gcc.dg/torture/pr69951.c +++ b/gcc/testsuite/gcc.dg/torture/pr69951.c @@ -9,7 +9,7 @@ extern int d __attribute__((alias("c"))); int main(int argc) { int *p, *q; - if (argc) + if (argc >= 0) p = &c, q = &d; else p = &b, q = &d;