Skip to content

Commit 64489c9

Browse files
committed
[PAC][Driver] Support ptrauth flags only on ARM64 Darwin
Most ptrauth flags are ABI-affecting, so they should not be exposed to end users. Under certain conditions, some ptrauth driver flags are intended to be used for ARM64 Darwin, so allow them in this case. Leave `-faarch64-jump-table-hardening` available for all AArch64 targets since it's not ABI-affecting.
1 parent 7cba9a3 commit 64489c9

File tree

3 files changed

+135
-110
lines changed

3 files changed

+135
-110
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1662,34 +1662,6 @@ void Clang::AddAArch64TargetArgs(const ArgList &Args,
16621662

16631663
AddUnalignedAccessWarning(CmdArgs);
16641664

1665-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_intrinsics,
1666-
options::OPT_fno_ptrauth_intrinsics);
1667-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_calls,
1668-
options::OPT_fno_ptrauth_calls);
1669-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_returns,
1670-
options::OPT_fno_ptrauth_returns);
1671-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_auth_traps,
1672-
options::OPT_fno_ptrauth_auth_traps);
1673-
Args.addOptInFlag(
1674-
CmdArgs, options::OPT_fptrauth_vtable_pointer_address_discrimination,
1675-
options::OPT_fno_ptrauth_vtable_pointer_address_discrimination);
1676-
Args.addOptInFlag(
1677-
CmdArgs, options::OPT_fptrauth_vtable_pointer_type_discrimination,
1678-
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination);
1679-
Args.addOptInFlag(
1680-
CmdArgs, options::OPT_fptrauth_type_info_vtable_pointer_discrimination,
1681-
options::OPT_fno_ptrauth_type_info_vtable_pointer_discrimination);
1682-
Args.addOptInFlag(
1683-
CmdArgs, options::OPT_fptrauth_function_pointer_type_discrimination,
1684-
options::OPT_fno_ptrauth_function_pointer_type_discrimination);
1685-
1686-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_indirect_gotos,
1687-
options::OPT_fno_ptrauth_indirect_gotos);
1688-
Args.addOptInFlag(CmdArgs, options::OPT_fptrauth_init_fini,
1689-
options::OPT_fno_ptrauth_init_fini);
1690-
Args.addOptInFlag(CmdArgs,
1691-
options::OPT_fptrauth_init_fini_address_discrimination,
1692-
options::OPT_fno_ptrauth_init_fini_address_discrimination);
16931665
Args.addOptInFlag(CmdArgs, options::OPT_faarch64_jump_table_hardening,
16941666
options::OPT_fno_aarch64_jump_table_hardening);
16951667

clang/lib/Driver/ToolChains/Linux.cpp

Lines changed: 10 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -484,49 +484,16 @@ std::string Linux::ComputeEffectiveClangTriple(const llvm::opt::ArgList &Args,
484484
// options represent the default signing schema.
485485
static void handlePAuthABI(const Driver &D, const ArgList &DriverArgs,
486486
ArgStringList &CC1Args) {
487-
if (!DriverArgs.hasArg(options::OPT_fptrauth_intrinsics,
488-
options::OPT_fno_ptrauth_intrinsics))
489-
CC1Args.push_back("-fptrauth-intrinsics");
490-
491-
if (!DriverArgs.hasArg(options::OPT_fptrauth_calls,
492-
options::OPT_fno_ptrauth_calls))
493-
CC1Args.push_back("-fptrauth-calls");
494-
495-
if (!DriverArgs.hasArg(options::OPT_fptrauth_returns,
496-
options::OPT_fno_ptrauth_returns))
497-
CC1Args.push_back("-fptrauth-returns");
498-
499-
if (!DriverArgs.hasArg(options::OPT_fptrauth_auth_traps,
500-
options::OPT_fno_ptrauth_auth_traps))
501-
CC1Args.push_back("-fptrauth-auth-traps");
502-
503-
if (!DriverArgs.hasArg(
504-
options::OPT_fptrauth_vtable_pointer_address_discrimination,
505-
options::OPT_fno_ptrauth_vtable_pointer_address_discrimination))
506-
CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
507-
508-
if (!DriverArgs.hasArg(
509-
options::OPT_fptrauth_vtable_pointer_type_discrimination,
510-
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
511-
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
512-
513-
if (!DriverArgs.hasArg(
514-
options::OPT_fptrauth_type_info_vtable_pointer_discrimination,
515-
options::OPT_fno_ptrauth_type_info_vtable_pointer_discrimination))
516-
CC1Args.push_back("-fptrauth-type-info-vtable-pointer-discrimination");
517-
518-
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
519-
options::OPT_fno_ptrauth_indirect_gotos))
520-
CC1Args.push_back("-fptrauth-indirect-gotos");
521-
522-
if (!DriverArgs.hasArg(options::OPT_fptrauth_init_fini,
523-
options::OPT_fno_ptrauth_init_fini))
524-
CC1Args.push_back("-fptrauth-init-fini");
525-
526-
if (!DriverArgs.hasArg(
527-
options::OPT_fptrauth_init_fini_address_discrimination,
528-
options::OPT_fno_ptrauth_init_fini_address_discrimination))
529-
CC1Args.push_back("-fptrauth-init-fini-address-discrimination");
487+
CC1Args.push_back("-fptrauth-intrinsics");
488+
CC1Args.push_back("-fptrauth-calls");
489+
CC1Args.push_back("-fptrauth-returns");
490+
CC1Args.push_back("-fptrauth-auth-traps");
491+
CC1Args.push_back("-fptrauth-vtable-pointer-address-discrimination");
492+
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
493+
CC1Args.push_back("-fptrauth-type-info-vtable-pointer-discrimination");
494+
CC1Args.push_back("-fptrauth-indirect-gotos");
495+
CC1Args.push_back("-fptrauth-init-fini");
496+
CC1Args.push_back("-fptrauth-init-fini-address-discrimination");
530497

531498
if (!DriverArgs.hasArg(options::OPT_faarch64_jump_table_hardening,
532499
options::OPT_fno_aarch64_jump_table_hardening))

0 commit comments

Comments
 (0)