aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineFunction.cpp
diff options
context:
space:
mode:
authorDaniil Kovalev <dkovalev@accesssoftek.com>2024-08-06 08:02:13 +0300
committerGitHub <noreply@github.com>2024-08-06 08:02:13 +0300
commit6e45fa95be9db5318ac7037c673c9b18a48ac5b1 (patch)
treeccd9345d2ec3e0bc661084df846522f7118ee5c2 /llvm/lib/CodeGen/MachineFunction.cpp
parent1745c8e08dde9f32d0f0b701d3a6a271697458eb (diff)
downloadllvm-6e45fa95be9db5318ac7037c673c9b18a48ac5b1.zip
llvm-6e45fa95be9db5318ac7037c673c9b18a48ac5b1.tar.gz
llvm-6e45fa95be9db5318ac7037c673c9b18a48ac5b1.tar.bz2
[PAC][AArch64] Support init/fini array signing (#96478)
If both `-fptrauth-init-fini` and `-fptrauth-calls` are passed, sign function pointers in `llvm.global_ctors` and `llvm.global_dtors` with constant discriminator 0xD9D4 (`ptrauth_string_discriminator("init_fini")`). Additionally, if `-fptrauth-init-fini-address-discrimination` is passed, address discrimination is used for signing (otherwise, just constant discriminator is used). For address discrimination, we use it's special form since uses of `llvm.global_{c|d}tors` are disallowed (see `Verifier::visitGlobalVariable`) and we can't emit `getelementptr` expressions referencing these special arrays. A signed ctor/dtor pointer with special address discrimination applied looks like the following: ``` ptr ptrauth (ptr @foo, i32 0, i64 55764, ptr inttoptr (i64 1 to ptr)) ```
Diffstat (limited to 'llvm/lib/CodeGen/MachineFunction.cpp')
0 files changed, 0 insertions, 0 deletions