aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorDaniil Kovalev <dkovalev@accesssoftek.com>2024-12-05 11:34:29 +0300
committerGitHub <noreply@github.com>2024-12-05 11:34:29 +0300
commit41cde465acfddb44d400b0a53bb57960762312a2 (patch)
tree8711f8e0eff2d0f0d0e01afab44a48f212b02cc6 /clang/lib/Frontend/CompilerInvocation.cpp
parentfd3907ccb583df99e9c19d2fe84e4e7c52d75de9 (diff)
downloadllvm-41cde465acfddb44d400b0a53bb57960762312a2.zip
llvm-41cde465acfddb44d400b0a53bb57960762312a2.tar.gz
llvm-41cde465acfddb44d400b0a53bb57960762312a2.tar.bz2
[PAC][Driver] Add `-faarch64-jump-table-hardening` flag (#113149)
The flag is placed together with pointer authentication flags since they serve the same security purpose of protecting against attacks on control flow. The flag is not ABI-affecting and might be enabled separately if needed, but it's also intended to be enabled as part of pauth-enabled environments (e.g. pauthtest). See also codegen implementation #97666.
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--clang/lib/Frontend/CompilerInvocation.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 3dd94c3..98136b7 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1511,6 +1511,7 @@ void CompilerInvocation::setDefaultPointerAuthOptions(
Opts.ReturnAddresses = LangOpts.PointerAuthReturns;
Opts.AuthTraps = LangOpts.PointerAuthAuthTraps;
Opts.IndirectGotos = LangOpts.PointerAuthIndirectGotos;
+ Opts.AArch64JumpTableHardening = LangOpts.AArch64JumpTableHardening;
}
static void parsePointerAuthOptions(PointerAuthOptions &Opts,
@@ -1518,7 +1519,8 @@ static void parsePointerAuthOptions(PointerAuthOptions &Opts,
const llvm::Triple &Triple,
DiagnosticsEngine &Diags) {
if (!LangOpts.PointerAuthCalls && !LangOpts.PointerAuthReturns &&
- !LangOpts.PointerAuthAuthTraps && !LangOpts.PointerAuthIndirectGotos)
+ !LangOpts.PointerAuthAuthTraps && !LangOpts.PointerAuthIndirectGotos &&
+ !LangOpts.AArch64JumpTableHardening)
return;
CompilerInvocation::setDefaultPointerAuthOptions(Opts, LangOpts, Triple);
@@ -3454,6 +3456,8 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts,
GenerateArg(Consumer, OPT_fptrauth_init_fini_address_discrimination);
if (Opts.PointerAuthELFGOT)
GenerateArg(Consumer, OPT_fptrauth_elf_got);
+ if (Opts.AArch64JumpTableHardening)
+ GenerateArg(Consumer, OPT_faarch64_jump_table_hardening);
}
static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args,
@@ -3475,6 +3479,8 @@ static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args,
Opts.PointerAuthInitFiniAddressDiscrimination =
Args.hasArg(OPT_fptrauth_init_fini_address_discrimination);
Opts.PointerAuthELFGOT = Args.hasArg(OPT_fptrauth_elf_got);
+ Opts.AArch64JumpTableHardening =
+ Args.hasArg(OPT_faarch64_jump_table_hardening);
}
/// Check if input file kind and language standard are compatible.