public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/43872]  New: VLAs are not aligned correctly on ARM
@ 2010-04-23 19:12 mikpe at it dot uu dot se
  2010-04-23 19:14 ` [Bug target/43872] " mikpe at it dot uu dot se
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: mikpe at it dot uu dot se @ 2010-04-23 19:12 UTC (permalink / raw)
  To: gcc-bugs

This test case is derived from gcc.c-torture/execute/920929-1.c. It creates a
VLA of doubles and fills it with zeros:

> cat bad-vla-align.c
unsigned long mask = sizeof(double) - 1;

unsigned int __attribute__((noinline)) f(int n)
{
    double v[n];

    while (n > 0)
        v[--n] = 0;

    return (unsigned long)v & mask;
}

int main(void)
{
    if (f(100) != 0)
        __builtin_abort();
    return 0;
}

With -march=armv5te -O2 gcc uses STRD instructions to write 8 bytes at a time.
STRD requires an 8-byte aligned address, but gcc fails to align the VLA to 8
bytes, resulting in misaligned accesses at runtime. Depending on hardware and
kernel configuration, this may result in abnormal termination or slow but
correct execution. On my Marvell Kirkwood machine, it results in EXTREMELY slow
execution due to the high overhead of kernel fixups for alignment traps.

The reason for the misalignment can be seen in the assembly code:

> cat bad-vla-align.s
        .arch armv5te
...
f:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 1, uses_anonymous_args = 0
        @ link register save eliminated.
        str     fp, [sp, #-4]!

sp is 8-byte aligned on entry but not after the prologue.

        mov     r1, r0, asl #3
        add     r3, r1, #8

Both these offsets are multiples of 8.

        add     fp, sp, #0
        cmp     r0, #0
        sub     sp, sp, r3

Now sp == &v[0] is not 8-byte aligned.

        mov     ip, sp
        ble     .L2
        add     r1, sp, r1

r1 == &v[n] is not 8-byte aligned.

        mov     r2, #0
        mov     r3, #0
.L3:
        subs    r0, r0, #1
        strd    r2, [r1, #-8]!

r1 == &v[--n] is not 8-byte aligned so strd fails.
...

I can reproduce this failure with 4.6.0 (r158675) and the 4.5.0 and 4.4.3
releases. 4.3.4 and 4.2.4 appear to work, but I don't know if that is by design
or by accident (different register allocation resulting in different frame
layouts and prologues).

A version of the test case tried to perform the alignment check inside the f
function, but gcc optimized it away completely, apparently "knowing" that the
array address was a multiple of 8. Still another version tried to pass the
array address to a separate checking function, but that changed f's prologue
enough to mask the error.


-- 
           Summary: VLAs are not aligned correctly on ARM
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: mikpe at it dot uu dot se
GCC target triplet: armv5tel-unknown-linux-gnueabi


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43872


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/43872] VLAs are not aligned correctly on ARM
  2010-04-23 19:12 [Bug target/43872] New: VLAs are not aligned correctly on ARM mikpe at it dot uu dot se
@ 2010-04-23 19:14 ` mikpe at it dot uu dot se
  2010-04-23 19:15 ` mikpe at it dot uu dot se
  2010-04-23 21:31 ` rearnsha at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: mikpe at it dot uu dot se @ 2010-04-23 19:14 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from mikpe at it dot uu dot se  2010-04-23 19:14 -------
Created an attachment (id=20476)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20476&action=view)
test case


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43872


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/43872] VLAs are not aligned correctly on ARM
  2010-04-23 19:12 [Bug target/43872] New: VLAs are not aligned correctly on ARM mikpe at it dot uu dot se
  2010-04-23 19:14 ` [Bug target/43872] " mikpe at it dot uu dot se
@ 2010-04-23 19:15 ` mikpe at it dot uu dot se
  2010-04-23 21:31 ` rearnsha at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: mikpe at it dot uu dot se @ 2010-04-23 19:15 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from mikpe at it dot uu dot se  2010-04-23 19:15 -------
Created an attachment (id=20477)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=20477&action=view)
gcc-4.6.0 -O2 -march=armv5te -S output


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43872


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [Bug target/43872] VLAs are not aligned correctly on ARM
  2010-04-23 19:12 [Bug target/43872] New: VLAs are not aligned correctly on ARM mikpe at it dot uu dot se
  2010-04-23 19:14 ` [Bug target/43872] " mikpe at it dot uu dot se
  2010-04-23 19:15 ` mikpe at it dot uu dot se
@ 2010-04-23 21:31 ` rearnsha at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: rearnsha at gcc dot gnu dot org @ 2010-04-23 21:31 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from rearnsha at gcc dot gnu dot org  2010-04-23 21:31 -------
Confirmed on trunk.


-- 

rearnsha at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rearnsha at gcc dot gnu dot
                   |                            |org
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2010-04-23 21:31:24
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43872


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-04-23 21:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-04-23 19:12 [Bug target/43872] New: VLAs are not aligned correctly on ARM mikpe at it dot uu dot se
2010-04-23 19:14 ` [Bug target/43872] " mikpe at it dot uu dot se
2010-04-23 19:15 ` mikpe at it dot uu dot se
2010-04-23 21:31 ` rearnsha at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).