mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[Clang][A32/T32][Linux] -O1 implies -fomit-frame-pointer
Summary: An upgrade of LLVM for CrOS [0] containing [1] triggered a bunch of errors related to writing to reserved registers for a Linux kernel's arm64 compat vdso (which is a aarch32 image). After a discussion on LKML [2], it was determined that -f{no-}omit-frame-pointer was not being specified. Comparing GCC and Clang [3], it becomes apparent that GCC defaults to omitting the frame pointer implicitly when optimizations are enabled, and Clang does not. ie. setting -O1 (or above) implies -fomit-frame-pointer. Clang was defaulting to -fno-omit-frame-pointer implicitly unless -fomit-frame-pointer was set explicitly. Why this becomes a problem is that the Linux kernel's arm64 compat vdso contains code that uses r7. r7 is used sometimes for the frame pointer (for example, when targeting thumb (-mthumb)). See useR7AsFramePointer() in llvm/llvm-project/llvm/lib/Target/ARM/ARMSubtarget.h. This is mostly for legacy/compatibility reasons, and the 2019 Q4 revision of the ARM AAPCS looks to standardize r11 as the frame pointer for aarch32, though this is not yet implemented in LLVM. Users that are reliant on the implicit value if unspecified when optimizations are enabled should explicitly choose -fomit-frame-pointer (new behavior) or -fno-omit-frame-pointer (old behavior). [0] https://bugs.chromium.org/p/chromium/issues/detail?id=1084372 [1] https://reviews.llvm.org/D76848 [2] https://lore.kernel.org/lkml/20200526173117.155339-1-ndesaulniers@google.com/ [3] https://godbolt.org/z/0oY39t Reviewers: kristof.beyls, psmith, danalbert, srhines, MaskRay, ostannard, efriedma Reviewed By: psmith, danalbert, srhines, MaskRay, efriedma Subscribers: efriedma, olista01, MaskRay, vhscampos, cfe-commits, llvm-commits, manojgupta, llozano, glider, hctim, eugenis, pcc, peter.smith, srhines Tags: #clang, #llvm Differential Revision: https://reviews.llvm.org/D80828
This commit is contained in:
parent
995cc9c405
commit
6cf6be73f3
@ -91,6 +91,12 @@ During this release ...
|
||||
|
||||
* Implemented C-language intrinsics ``<arm_cde.h>`` for the CDE instruction set.
|
||||
|
||||
* Clang now defaults to ``-fomit-frame-pointer`` when targeting non-Android
|
||||
Linux for arm and thumb when optimizations are enabled. Users that were
|
||||
previously not specifying a value and relying on the implicit compiler
|
||||
default may wish to specify ``-fno-omit-frame-pointer`` to get the old
|
||||
behavior. This improves compatibility with GCC.
|
||||
|
||||
Changes to the MIPS Target
|
||||
--------------------------
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user