On Wed, Apr 15, 2009 at 7:11 AM, Dave Korn
<dave.korn.cyg...@googlemail.com> wrote:
> H.J. Lu wrote:
>> On Wed, Apr 15, 2009 at 6:49 AM, Dave Korn
>> <dave.korn.cyg...@googlemail.com> wrote:
>>> Jakub Jelinek wrote:
>>>> GCC 4.4.0 release candidate 1 is now available at:
>>>>
>>>> ftp://gcc.gnu.org/pub/gcc/snapshots/4.4.0-RC-20090414/
>>>>
>>>> Please test the tarballs there and report any problems to Bugzilla.  CC
>>>> me on the bugs if you believe they are regressions from previous
>>>> releases severe enough that they should block the 4.4.0 release.
>>> My testsuite run is still only part-way through, and I'll file PRs when
>>> it's complete, but I just wanted to flag this up: I'm seeing a lot of
>>> failures related to stack alignment and vectorisation.
>>>
>>> All the FAILs that I've examined so far turn out to be misaligned
>>> addresses in SSE2 instructions resulting in SIGILL at runtime.
>>>
>>> For instance: gcc.dg/torture/stackalign/push-1.c compiles to have this
>>> line of assembly:
>>>
>>> 0x004011f6 <foo+59>:    movaps %xmm0,0x404024
>>>
>>> I tried the same testcase with 4.3.2, and it also fails, but for a
>>> different reason.  The testcase uses "-mpreferred-stack-boundary=2", and
>>> without that option it still fails with 4.4.0rc1 but passes with 4.3.2.
>>>
>>
>> Gcc 4.4 tests are OK on Linux/i686. Gcc should align stack automatically.
>> Please include the assembly outputs for any stack alignment related bug
>> reports.
>
>  Sure, although in this particular testcase it's not stack alignment but
> .data section objects.  (I think the stack alignment is probably working;
> that's what causes the "fails, but for a different reason" with 4.3.2, it's a
> failure in main() where the stack isn't aligned.  This doesn't happen with
> 4.4.0, but I still get the unaligned access).
>
>  The push-1.c testcase has:
>
> __m128 r;
>
> void
> __attribute__ ((noinline))
> foo (__m128 x, __m128 y ,__m128 z ,__m128 a, int size)
> {
>  aligned i;
>
>  if (size != 5 || check_int (&i, __alignof__(i)) != i)
>    abort ();
>
>  r = a;
> }
>
> and it fails on the assignment "r = a;" because r is unaligned (0x404024); in
> the assembly source, it is simply defined as
>
>        .comm   _r, 16   # 16
>
> so maybe the problem is in the Cygwin linker script?  Is the COMMON section
> supposed to be aligned?  In Cygwin, it just gets appended into .bss, like so:
>
>  .bss           0x00404024        0x0
> /gnu/gcc/releases/4.4.0rc1/gcc/libgcc.a(_ctors.o)
>  .bss           0x00404024        0x0 /gnu/gcc/releases/4.4.0rc1/gcc/crtend.o
>  *(COMMON)
>  COMMON         0x00404024       0x10
> /win/c/DOCUME~1/ADMINI~1/LOCALS~1/Temp/cc86uXzW.o
>                0x00404024                _r
>  COMMON         0x00404034       0x20
> /gnu/gcc/releases/4.4.0rc1/gcc/libgcc.a(_ctors.o)
>                0x00404054                __bss_end__ = .
>
>  Does there need to be an alignment specified for COMMON (and/or other
> sections)?
>

It does look like a Cygwin specific issue.



-- 
H.J.

Reply via email to