Skip to content

Commit 838b0d0

Browse files
committed
[PAC][clang] Add new features to pauthtest ABI
Enable init/fini address discrimination, type info vtable pointer discrimination and AArch64 jump table hardening as part of pauthtest ABI.
1 parent 0e11e19 commit 838b0d0

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1531,13 +1531,27 @@ static void handlePAuthABI(const ArgList &DriverArgs, ArgStringList &CC1Args) {
15311531
options::OPT_fno_ptrauth_vtable_pointer_type_discrimination))
15321532
CC1Args.push_back("-fptrauth-vtable-pointer-type-discrimination");
15331533

1534+
if (!DriverArgs.hasArg(
1535+
options::OPT_fptrauth_type_info_vtable_pointer_discrimination,
1536+
options::OPT_fno_ptrauth_type_info_vtable_pointer_discrimination))
1537+
CC1Args.push_back("-fptrauth-type-info-vtable-pointer-discrimination");
1538+
15341539
if (!DriverArgs.hasArg(options::OPT_fptrauth_indirect_gotos,
15351540
options::OPT_fno_ptrauth_indirect_gotos))
15361541
CC1Args.push_back("-fptrauth-indirect-gotos");
15371542

15381543
if (!DriverArgs.hasArg(options::OPT_fptrauth_init_fini,
15391544
options::OPT_fno_ptrauth_init_fini))
15401545
CC1Args.push_back("-fptrauth-init-fini");
1546+
1547+
if (!DriverArgs.hasArg(
1548+
options::OPT_fptrauth_init_fini_address_discrimination,
1549+
options::OPT_fno_ptrauth_init_fini_address_discrimination))
1550+
CC1Args.push_back("-fptrauth-init-fini-address-discrimination");
1551+
1552+
if (!DriverArgs.hasArg(options::OPT_faarch64_jump_table_hardening,
1553+
options::OPT_fno_aarch64_jump_table_hardening))
1554+
CC1Args.push_back("-faarch64-jump-table-hardening");
15411555
}
15421556

15431557
static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,

clang/test/Driver/aarch64-ptrauth.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,23 @@
2323
// RUN: %clang -### -c --target=aarch64-linux-pauthtest %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI1
2424
// PAUTHABI1: "-cc1"{{.*}} "-triple" "aarch64-unknown-linux-pauthtest"
2525
// PAUTHABI1-SAME: "-target-abi" "pauthtest"
26-
// PAUTHABI1-SAME: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-indirect-gotos" "-fptrauth-init-fini"
26+
// PAUTHABI1-SAME: "-fptrauth-intrinsics" "-fptrauth-calls" "-fptrauth-returns" "-fptrauth-auth-traps" "-fptrauth-vtable-pointer-address-discrimination" "-fptrauth-vtable-pointer-type-discrimination" "-fptrauth-type-info-vtable-pointer-discrimination" "-fptrauth-indirect-gotos" "-fptrauth-init-fini" "-fptrauth-init-fini-address-discrimination" "-faarch64-jump-table-hardening"
2727

2828
// RUN: %clang -### -c --target=aarch64 -mabi=pauthtest -fno-ptrauth-intrinsics \
2929
// RUN: -fno-ptrauth-calls -fno-ptrauth-returns -fno-ptrauth-auth-traps \
3030
// RUN: -fno-ptrauth-vtable-pointer-address-discrimination -fno-ptrauth-vtable-pointer-type-discrimination \
31-
// RUN: -fno-ptrauth-indirect-gotos -fno-ptrauth-init-fini %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
31+
// RUN: -fno-ptrauth-type-info-vtable-pointer-discrimination -fno-ptrauth-indirect-gotos \
32+
// RUN: -fno-ptrauth-init-fini -fno-ptrauth-init-fini-address-discrimination \
33+
// RUN: -fno-aarch64-jump-table-hardening %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
3234
// RUN: %clang -### -c --target=aarch64-pauthtest -fno-ptrauth-intrinsics \
3335
// RUN: -fno-ptrauth-calls -fno-ptrauth-returns -fno-ptrauth-auth-traps \
3436
// RUN: -fno-ptrauth-vtable-pointer-address-discrimination -fno-ptrauth-vtable-pointer-type-discrimination \
35-
// RUN: -fno-ptrauth-indirect-gotos -fno-ptrauth-init-fini %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
37+
// RUN: -fno-ptrauth-type-info-vtable-pointer-discrimination -fno-ptrauth-indirect-gotos \
38+
// RUN: -fno-ptrauth-init-fini -fno-ptrauth-init-fini-address-discrimination \
39+
// RUN: -fno-aarch64-jump-table-hardening %s 2>&1 | FileCheck %s --check-prefix=PAUTHABI2
3640
// PAUTHABI2: "-cc1"
3741
// PAUTHABI2-NOT: "-fptrauth-
42+
// PAUTHABI2-NOT: "-faarch64-jump-table-hardening"
3843

3944
// RUN: not %clang -### -c --target=x86_64 -fptrauth-intrinsics -fptrauth-calls -fptrauth-returns -fptrauth-auth-traps \
4045
// RUN: -fptrauth-vtable-pointer-address-discrimination -fptrauth-vtable-pointer-type-discrimination \

0 commit comments

Comments
 (0)