diff options
author | Fangrui Song <i@maskray.me> | 2025-01-06 08:59:42 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-06 08:59:42 -0800 |
commit | 5e0be962feb37b224590e91879f9ac4a1fcacb85 (patch) | |
tree | 532dfaa77f4186f21c1bea7920015f12a6e4ea24 /clang/lib/Frontend/CompilerInvocation.cpp | |
parent | d00f65c6acd9f0e1ddae83391f55eb9d232d2f9e (diff) | |
download | llvm-5e0be962feb37b224590e91879f9ac4a1fcacb85.zip llvm-5e0be962feb37b224590e91879f9ac4a1fcacb85.tar.gz llvm-5e0be962feb37b224590e91879f9ac4a1fcacb85.tar.bz2 |
[PowerPC] Support PIC Secure PLT for CALL_RM
https://reviews.llvm.org/D111433 introduced PPCISD::CALL_RM for
-frounding-math. -msecure-plt -frounding-math {-fpic,-fPIC} codegen for
PPC32 became incorrect when a function contains function calls but no
global variable references (GlobalBaseReg).
As reported by @q66 , musl/src/dirent/closedir.c implements such a
function, which is miscompiled.
PPCISD::CALL has custom logic to set up the base register
(https://reviews.llvm.org/D42112). Add an extra case for CALL_RM.
While here, improve the test to
* actually test `case PPCISD::CALL`: we need a non-leaf function that
doesn't access global variables (global variables lead to
GlobalBaseReg, which call `getGlobalBaseReg()` as well).
* test `ExternalSymbolSDNode` with a memset.
Supersedes: #72758
Pull Request: https://github.com/llvm/llvm-project/pull/121281
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
0 files changed, 0 insertions, 0 deletions