public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
@ 2020-09-01 12:57 emilie.feral at numworks dot com
2020-09-01 13:25 ` [Bug c/96882] " rearnsha at gcc dot gnu.org
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: emilie.feral at numworks dot com @ 2020-09-01 12:57 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
Bug ID: 96882
Summary: Wrong assembly code generated with arm-none-eabi-gcc
-flto -mfloat-abi=hard options
Product: gcc
Version: 9.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
Assignee: unassigned at gcc dot gnu.org
Reporter: emilie.feral at numworks dot com
Target Milestone: ---
Created attachment 49163
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49163&action=edit
preprocessed file triggering the bug
Hi,
When compiling the following code:
/********************************************************************/
typedef struct {
double m_a;
double m_b;
double m_c;
double m_d;
} AtLeast32BytesObject;
AtLeast32BytesObject __attribute__((noinline)) CalledFunction() {
AtLeast32BytesObject result = {1.1, 2.2, 3.3, 4.4};
return result;
}
void __attribute__((noinline)) _start() {
volatile AtLeast32BytesObject result = CalledFunction();
while(1) {}
}
/********************************************************************/
with "arm-none-eabi-gcc -Os -flto -mthumb -mfloat-abi=hard -mcpu=cortex-m4
-ffreestanding -nostdlib -lgcc", the assembly instructions emitted for the
symbol "CalledFunction" use callee-save registers r4-r7 to store the result of
the CalledFunction procedure (cf following disassemble function addresses range
0x0000805e-0x0000806e). The registers r4-r7 are overwritten when leaving the
subroutine (since they're callee-save registers) leading to a corrupted result
from "CalledFunction" (cf following disassemble function at address
0x00008072).
Dump of assembler code for function CalledFunction:
0x00008000 <+0>: push {r4, r5, r6, r7, lr}
0x00008002 <+2>: ldr r5, [pc, #112] ; (0x8074 <CalledFunction+116>)
0x00008004 <+4>: ldmia r5!, {r0, r1, r2, r3}
0x00008006 <+6>: sub sp, #132 ; 0x84
0x00008008 <+8>: add r4, sp, #64 ; 0x40
0x0000800a <+10>: stmia r4!, {r0, r1, r2, r3}
0x0000800c <+12>: ldmia.w r5, {r0, r1, r2, r3}
0x00008010 <+16>: add r5, sp, #64 ; 0x40
0x00008012 <+18>: stmia.w r4, {r0, r1, r2, r3}
0x00008016 <+22>: ldmia r5!, {r0, r1, r2, r3}
0x00008018 <+24>: add r4, sp, #96 ; 0x60
0x0000801a <+26>: stmia r4!, {r0, r1, r2, r3}
0x0000801c <+28>: ldmia.w r5, {r0, r1, r2, r3}
0x00008020 <+32>: stmia.w r4, {r0, r1, r2, r3}
0x00008024 <+36>: ldr r3, [sp, #96] ; 0x60
0x00008026 <+38>: str r3, [sp, #0]
0x00008028 <+40>: ldr r3, [sp, #100] ; 0x64
0x0000802a <+42>: str r3, [sp, #4]
0x0000802c <+44>: ldr r3, [sp, #104] ; 0x68
0x0000802e <+46>: str r3, [sp, #8]
0x00008030 <+48>: ldr r3, [sp, #108] ; 0x6c
0x00008032 <+50>: str r3, [sp, #12]
0x00008034 <+52>: ldr r3, [sp, #112] ; 0x70
0x00008036 <+54>: str r3, [sp, #16]
0x00008038 <+56>: ldr r3, [sp, #116] ; 0x74
0x0000803a <+58>: ldr r7, [sp, #124] ; 0x7c
0x0000803c <+60>: str r3, [sp, #20]
0x0000803e <+62>: ldr r3, [sp, #120] ; 0x78
0x00008040 <+64>: strd r3, r7, [sp, #24]
0x00008044 <+68>: ldr r3, [sp, #0]
0x00008046 <+70>: str r3, [sp, #32]
0x00008048 <+72>: ldr r3, [sp, #4]
0x0000804a <+74>: str r3, [sp, #36] ; 0x24
0x0000804c <+76>: ldr r3, [sp, #8]
0x0000804e <+78>: str r3, [sp, #40] ; 0x28
0x00008050 <+80>: ldr r3, [sp, #12]
0x00008052 <+82>: str r3, [sp, #44] ; 0x2c
0x00008054 <+84>: ldr r3, [sp, #16]
0x00008056 <+86>: str r3, [sp, #48] ; 0x30
0x00008058 <+88>: ldr r3, [sp, #20]
0x0000805a <+90>: str r3, [sp, #52] ; 0x34
0x0000805c <+92>: ldr r3, [sp, #24]
0x0000805e <+94>: strd r3, r7, [sp, #56] ; 0x38 // HERE, we store
0x00008062 <+98>: ldrd r0, r1, [sp, #32] // the result
0x00008066 <+102>: ldrd r2, r3, [sp, #40] ; 0x28 // in r0-r7
0x0000806a <+106>: ldrd r4, r5, [sp, #48] ; 0x30 //
0x0000806e <+110>: ldr r6, [sp, #56] ; 0x38 //
0x00008070 <+112>: add sp, #132 ; 0x84
0x00008072 <+114>: pop {r4, r5, r6, r7, pc} // HERE, we overwrite r4-r7
0x00008074 <+116>: strh r0, [r5, #4]
0x00008076 <+118>: movs r0, r0
End of assembler dump.
I attach to this report the "main.i" containing the previous preprocessed code.
The toolchain version is arm-none-eabi-gcc (GNU Arm Embedded Toolchain
9-2020-q2-update) 9.3.1 20200408 (release).
It was from the binary package gcc-arm-none-eabi-9-2020-q2-update-mac.pkg
downloaded from
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads.
The host machine is a MacBook Pro with Catalina version 10.15.4 (19E287).
The command lines I used are:
arm-none-eabi-gcc main.c -Os -flto -mthumb -mfloat-abi=hard -mcpu=cortex-m4
-ffreestanding -nostdlib -lgcc -save-temps -o a.elf
arm-none-eabi-gdb -batch -ex 'file a.elf' -ex 'disassemble CalledFunction'
Thanks for your help,
Émilie
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
@ 2020-09-01 13:25 ` rearnsha at gcc dot gnu.org
2020-09-01 13:43 ` emilie.feral at numworks dot com
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rearnsha at gcc dot gnu.org @ 2020-09-01 13:25 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Status|UNCONFIRMED |WAITING
Last reconfirmed| |2020-09-01
--- Comment #1 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
We need to see the configuration information. What is the output of "gcc -v"
for your compiler?
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
2020-09-01 13:25 ` [Bug c/96882] " rearnsha at gcc dot gnu.org
@ 2020-09-01 13:43 ` emilie.feral at numworks dot com
2020-09-01 15:00 ` rearnsha at gcc dot gnu.org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: emilie.feral at numworks dot com @ 2020-09-01 13:43 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #2 from emilie.feral at numworks dot com ---
Here they are:
arm-none-eabi-gcc -v
•[master]
Using built-in specs.
COLLECT_GCC=/Applications/ARM/bin/arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/Applications/ARM/bin/../lib/gcc/arm-none-eabi/9.3.1/lto-wrapper
Target: arm-none-eabi
Configured with:
/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/src/gcc/configure
--target=arm-none-eabi
--prefix=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native
--libexecdir=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/lib
--infodir=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/share/doc/gcc-arm-none-eabi/info
--mandir=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/share/doc/gcc-arm-none-eabi/man
--htmldir=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/share/doc/gcc-arm-none-eabi/html
--pdfdir=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/share/doc/gcc-arm-none-eabi/pdf
--enable-languages=c,c++ --enable-plugins --disable-decimal-float
--disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath
--disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared
--disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib
--with-headers=yes --with-python-dir=share/gcc-arm-none-eabi
--with-sysroot=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/install-native/arm-none-eabi
--build=x86_64-apple-darwin10 --host=x86_64-apple-darwin10
--with-gmp=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/build-native/host-libs/usr
--with-mpfr=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/build-native/host-libs/usr
--with-mpc=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/build-native/host-libs/usr
--with-isl=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/build-native/host-libs/usr
--with-libelf=/tmp/jenkins-GCC-9-pipeline-200_20200521_1590053285/build-native/host-libs/usr
--with-host-libstdcxx='-static-libgcc -Wl,-lstdc++ -lm' --with-pkgversion='GNU
Arm Embedded Toolchain 9-2020-q2-update'
--with-multilib-list=rmprofile,aprofile
Thread model: single
gcc version 9.3.1 20200408 (release) (GNU Arm Embedded Toolchain
9-2020-q2-update)
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug c/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
2020-09-01 13:25 ` [Bug c/96882] " rearnsha at gcc dot gnu.org
2020-09-01 13:43 ` emilie.feral at numworks dot com
@ 2020-09-01 15:00 ` rearnsha at gcc dot gnu.org
2020-09-01 19:36 ` [Bug target/96882] " rearnsha at gcc dot gnu.org
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rearnsha at gcc dot gnu.org @ 2020-09-01 15:00 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|WAITING |NEW
--- Comment #3 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
LTO seems to be getting confused as to the ABI. Investigating...
In the mean time, the only work-around I can think of is to remove -flto from
your build.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (2 preceding siblings ...)
2020-09-01 15:00 ` rearnsha at gcc dot gnu.org
@ 2020-09-01 19:36 ` rearnsha at gcc dot gnu.org
2020-09-02 8:10 ` emilie.feral at numworks dot com
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rearnsha at gcc dot gnu.org @ 2020-09-01 19:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target| |arm
--- Comment #4 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
typedef struct {
double m_a;
double m_b;
double m_c;
double m_d;
} AtLeast32BytesObject;
static AtLeast32BytesObject __attribute__((noinline,noclone)) CalledFunction()
{
AtLeast32BytesObject result = {1.1, 2.2, 3.3, 4.4};
return result;
}
void __attribute__((noinline)) _start() {
volatile AtLeast32BytesObject result = CalledFunction();
while(1) {}
}
Will miscompile without needing LTO.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (3 preceding siblings ...)
2020-09-01 19:36 ` [Bug target/96882] " rearnsha at gcc dot gnu.org
@ 2020-09-02 8:10 ` emilie.feral at numworks dot com
2020-09-02 10:05 ` rearnsha at gcc dot gnu.org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: emilie.feral at numworks dot com @ 2020-09-02 8:10 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #5 from emilie.feral at numworks dot com ---
When compiling without the lto using the command:
arm-none-eabi-gcc main.c -Os -mfloat-abi=hard -mthumb -mcpu=cortex-m4
-ffreestanding -nostdlib -lgcc -save-temps -o a.elf
I get the following instructions for CalledFunction:
Dump of assembler code for function CalledFunction:
0x00008000 <+0>: push {r4, r5, lr}
0x00008002 <+2>: ldr r5, [pc, #52] ; (0x8038 <CalledFunction+56>)
0x00008004 <+4>: ldmia r5!, {r0, r1, r2, r3}
0x00008006 <+6>: sub sp, #100 ; 0x64
0x00008008 <+8>: add r4, sp, #32
0x0000800a <+10>: stmia r4!, {r0, r1, r2, r3}
0x0000800c <+12>: ldmia.w r5, {r0, r1, r2, r3}
0x00008010 <+16>: add r5, sp, #32
0x00008012 <+18>: stmia.w r4, {r0, r1, r2, r3}
0x00008016 <+22>: ldmia r5!, {r0, r1, r2, r3}
0x00008018 <+24>: add r4, sp, #64 ; 0x40
0x0000801a <+26>: stmia r4!, {r0, r1, r2, r3}
0x0000801c <+28>: ldmia.w r5, {r0, r1, r2, r3}
0x00008020 <+32>: stmia.w r4, {r0, r1, r2, r3}
0x00008024 <+36>: vldr d0, [sp, #64] ; 0x40
0x00008028 <+40>: vldr d1, [sp, #72] ; 0x48
0x0000802c <+44>: vldr d2, [sp, #80] ; 0x50
0x00008030 <+48>: vldr d3, [sp, #88] ; 0x58
0x00008034 <+52>: add sp, #100 ; 0x64
0x00008036 <+54>: pop {r4, r5, pc}
0x00008038 <+56>: strh r0, [r3, #2]
0x0000803a <+58>: movs r0, r0
End of assembler dump.
Which seems correct to me: the result is returned through registers d0-d3.
Interesting fact, if I keep the lto but remove the mfloat-abi=hard option:
arm-none-eabi-gcc main.c -Os -flto -mthumb -mcpu=cortex-m4 -ffreestanding
-nostdlib -lgcc -save-temps -o a.elf
The compilation also seems correct: the result is written at the address given
by r0 and the address is returned through r0.
Dump of assembler code for function CalledFunction:
0x00008000 <+0>: push {r4, r5, r6, lr}
0x00008002 <+2>: ldr r5, [pc, #20] ; (0x8018 <CalledFunction+24>)
0x00008004 <+4>: mov r6, r0
0x00008006 <+6>: mov r4, r0
0x00008008 <+8>: ldmia r5!, {r0, r1, r2, r3}
0x0000800a <+10>: stmia r4!, {r0, r1, r2, r3}
0x0000800c <+12>: ldmia.w r5, {r0, r1, r2, r3}
0x00008010 <+16>: stmia.w r4, {r0, r1, r2, r3}
0x00008014 <+20>: mov r0, r6
0x00008016 <+22>: pop {r4, r5, r6, pc}
0x00008018 <+24>: strh r0, [r5, #0]
0x0000801a <+26>: movs r0, r0
End of assembler dump.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (4 preceding siblings ...)
2020-09-02 8:10 ` emilie.feral at numworks dot com
@ 2020-09-02 10:05 ` rearnsha at gcc dot gnu.org
2020-09-15 9:32 ` emilie.feral at numworks dot com
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rearnsha at gcc dot gnu.org @ 2020-09-02 10:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #6 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
Yes, the problem is related to returning values in memory and the ABI variants
we have. If we have hardware floating-point we generally use registers to
return values; if we don't, then we have to return in memory.
However, when we have a function that is not inlinable, but is private to the
compilation unit we can optimize the ABI in some circumstances. That's what is
happening here. Unfortunately, it appears that function that decides whether
or not the result should be returned in memory or in registers lacks important
information as to whether or not the function is private and this in turn leads
to two parts of the compiler making different choices - with the disastrous
consequences you've discovered.
I'm not sure if this is restricted to M-profile parts or if it's more
wide-spread - I'm still investigating.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (5 preceding siblings ...)
2020-09-02 10:05 ` rearnsha at gcc dot gnu.org
@ 2020-09-15 9:32 ` emilie.feral at numworks dot com
2020-09-15 13:36 ` rearnsha at gcc dot gnu.org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: emilie.feral at numworks dot com @ 2020-09-15 9:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #7 from emilie.feral at numworks dot com ---
Hello,
Any news on the subject?
Would you advise in the meantime to discard the LTO (with the -fno-lto option)
on the compilation unit containing the failing code?
The bug occurred for us when returning a structure of four doubles. Do you have
any indication of when the bug might appear to help us track other occurrences?
Thanks for helping!
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (6 preceding siblings ...)
2020-09-15 9:32 ` emilie.feral at numworks dot com
@ 2020-09-15 13:36 ` rearnsha at gcc dot gnu.org
2022-03-14 15:36 ` dcrocker at eschertech dot com
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rearnsha at gcc dot gnu.org @ 2020-09-15 13:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #8 from Richard Earnshaw <rearnsha at gcc dot gnu.org> ---
(In reply to emilie.feral from comment #7)
> Hello,
> Any news on the subject?
> Would you advise in the meantime to discard the LTO (with the -fno-lto
> option) on the compilation unit containing the failing code?
> The bug occurred for us when returning a structure of four doubles. Do you
> have any indication of when the bug might appear to help us track other
> occurrences?
> Thanks for helping!
Sorry, I haven't had time to work on this yet.
The safest work-around for now is to add an additional attribute to force the
PCS to the default for the selected ABI - I think adding
pcs("aapcs-vfp")
to the attributes will solve the problem.
ie.
AtLeast32BytesObject __attribute__((noinline, pcs("aapcs-vfp")))
CalledFunction() {
AtLeast32BytesObject result = {1.1, 2.2, 3.3, 4.4};
return result;
}
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (7 preceding siblings ...)
2020-09-15 13:36 ` rearnsha at gcc dot gnu.org
@ 2022-03-14 15:36 ` dcrocker at eschertech dot com
2022-03-29 16:05 ` cvs-commit at gcc dot gnu.org
2023-04-11 17:18 ` dcrocker at eschertech dot com
10 siblings, 0 replies; 12+ messages in thread
From: dcrocker at eschertech dot com @ 2022-03-14 15:36 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
David Crocker <dcrocker at eschertech dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |dcrocker at eschertech dot com
--- Comment #9 from David Crocker <dcrocker at eschertech dot com> ---
Is there any update on this? I need to turn on LTO to keep the code size of a
large application within the flash memory space of the target ARM Cortex M4F
processor; but by the sound of it, doing so will be unsafe.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (8 preceding siblings ...)
2022-03-14 15:36 ` dcrocker at eschertech dot com
@ 2022-03-29 16:05 ` cvs-commit at gcc dot gnu.org
2023-04-11 17:18 ` dcrocker at eschertech dot com
10 siblings, 0 replies; 12+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2022-03-29 16:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Earnshaw <rearnsha@gcc.gnu.org>:
https://gcc.gnu.org/g:1dca4ca1bf2f1b05537a1052e373d8b0ff11e53c
commit r12-7894-g1dca4ca1bf2f1b05537a1052e373d8b0ff11e53c
Author: Richard Earnshaw <rearnsha@arm.com>
Date: Tue Mar 29 16:59:37 2022 +0100
arm: temporarily disable 'local' pcs selection (PR96882)
The arm port has an optimization used during selection of the
function's ABI to permit deviation from the strict ABI when the
function does not escape the current translation unit.
Unfortunately, the ABI selection it makes can be unsafe if it changes
how a result is returned because not enough information is available
via the RETURN_IN_MEMORY hook to determine where the function gets
used. This can result in some parts of the compiler thinking a value
is returned in memory while others think it is returned in registers.
To mitigate this, this patch temporarily disables the optimization and
falls back to using the default ABI for the translation.
gcc/ChangeLog:
PR target/96882
* config/arm/arm.cc (arm_get_pcs_model): Disable selection of
ARM_PCS_AAPCS_LOCAL.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug target/96882] Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
` (9 preceding siblings ...)
2022-03-29 16:05 ` cvs-commit at gcc dot gnu.org
@ 2023-04-11 17:18 ` dcrocker at eschertech dot com
10 siblings, 0 replies; 12+ messages in thread
From: dcrocker at eschertech dot com @ 2023-04-11 17:18 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96882
--- Comment #11 from David Crocker <dcrocker at eschertech dot com> ---
As the master branch was updated a year ago according to comment 10, does this
mean that there is now a stable release of gcc that incudes the patch?
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2023-04-11 17:18 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-01 12:57 [Bug c/96882] New: Wrong assembly code generated with arm-none-eabi-gcc -flto -mfloat-abi=hard options emilie.feral at numworks dot com
2020-09-01 13:25 ` [Bug c/96882] " rearnsha at gcc dot gnu.org
2020-09-01 13:43 ` emilie.feral at numworks dot com
2020-09-01 15:00 ` rearnsha at gcc dot gnu.org
2020-09-01 19:36 ` [Bug target/96882] " rearnsha at gcc dot gnu.org
2020-09-02 8:10 ` emilie.feral at numworks dot com
2020-09-02 10:05 ` rearnsha at gcc dot gnu.org
2020-09-15 9:32 ` emilie.feral at numworks dot com
2020-09-15 13:36 ` rearnsha at gcc dot gnu.org
2022-03-14 15:36 ` dcrocker at eschertech dot com
2022-03-29 16:05 ` cvs-commit at gcc dot gnu.org
2023-04-11 17:18 ` dcrocker at eschertech dot com
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).