VFP float aligned to 1 on stack causes fault

Bug #1514087 reported by Piotr
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
GNU Arm Embedded Toolchain
New
Undecided
Unassigned

Bug Description

//Cortex M4F, VFP: hard, no optimizations

typedef float FLOAT __attribute__((aligned(1)));

#pragma pack(1)
struct STRUCT {
 char a;
 FLOAT val;
 FLOAT val2;
};

volatile STRUCT sss;

FLOAT vfp_fault()
{
 volatile float v = sss.val; // this is handled ok

 v *= sss.val2;

 sss.val = v;

 volatile char b = sss.val2;

 volatile FLOAT v1 = v; // fault here

 v1 *= sss.val;

 return v1;
}

Revision history for this message
Piotr (stepien-p) wrote :

arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors) 4.9.3 20141119 (re
lease) [ARM/embedded-4_9-branch revision 218278]

Revision history for this message
Piotr (stepien-p) wrote :

FLOAT vfp_fault()
{
 8038e18: b480 push {r7}
 8038e1a: b087 sub sp, #28
 8038e1c: af00 add r7, sp, #0
 volatile float v = sss.val;
 8038e1e: 4b20 ldr r3, [pc, #128] ; (8038ea0 <_Z9vfp_faultv+0x88>)
 8038e20: f8d3 3001 ldr.w r3, [r3, #1]
 8038e24: 617b str r3, [r7, #20]

 v *= sss.val2;
 8038e26: 4b1e ldr r3, [pc, #120] ; (8038ea0 <_Z9vfp_faultv+0x88>)
 8038e28: f8d3 3005 ldr.w r3, [r3, #5]
 8038e2c: edd7 7a05 vldr s15, [r7, #20]
 8038e30: ee07 3a10 vmov s14, r3
 8038e34: ee67 7a87 vmul.f32 s15, s15, s14
 8038e38: edc7 7a05 vstr s15, [r7, #20]

 sss.val = v;
 8038e3c: 697a ldr r2, [r7, #20]
 8038e3e: 4b18 ldr r3, [pc, #96] ; (8038ea0 <_Z9vfp_faultv+0x88>)
 8038e40: f8c3 2001 str.w r2, [r3, #1]

 volatile char b = sss.val2;
 8038e44: 4b16 ldr r3, [pc, #88] ; (8038ea0 <_Z9vfp_faultv+0x88>)
 8038e46: f8d3 3005 ldr.w r3, [r3, #5]
 8038e4a: ee07 3a90 vmov s15, r3
 8038e4e: eefd 7ae7 vcvt.s32.f32 s15, s15
 8038e52: edc7 7a01 vstr s15, [r7, #4]
 8038e56: 793b ldrb r3, [r7, #4]
 8038e58: b2db uxtb r3, r3
 8038e5a: 74fb strb r3, [r7, #19]

 volatile FLOAT v1 = v;
 8038e5c: 697a ldr r2, [r7, #20]
 8038e5e: f107 030f add.w r3, r7, #15
 8038e62: 601a str r2, [r3, #0]

 v1 *= sss.val;
 8038e64: 4b0e ldr r3, [pc, #56] ; (8038ea0 <_Z9vfp_faultv+0x88>)
 8038e66: f8d3 2001 ldr.w r2, [r3, #1]
 8038e6a: 4613 mov r3, r2
 8038e6c: 461a mov r2, r3
 8038e6e: f107 030f add.w r3, r7, #15
 8038e72: edd3 7a00 vldr s15, [r3] // FAULT HERE
 8038e76: ee07 2a10 vmov s14, r2
 8038e7a: ee67 7a87 vmul.f32 s15, s15, s14
 8038e7e: f107 030f add.w r3, r7, #15
 8038e82: edc3 7a00 vstr s15, [r3]

 return v1;
 8038e86: f107 030f add.w r3, r7, #15
 8038e8a: 681b ldr r3, [r3, #0]
 8038e8c: ee07 3a90 vmov s15, r3
}
 8038e90: eeb0 0a67 vmov.f32 s0, s15
 8038e94: 371c adds r7, #28
 8038e96: 46bd mov sp, r7
 8038e98: f85d 7b04 ldr.w r7, [sp], #4
 8038e9c: 4770 bx lr

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.