[all-commits] [llvm/llvm-project] e3b2f0: [clang][ARM] PACBTI-M frontend support
Ties Stuij via All-commits
all-commits at lists.llvm.org
Wed Dec 1 02:37:49 PST 2021
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: e3b2f0226bc09f16d5cdba9b94d1db3f15ee7d4a
https://github.com/llvm/llvm-project/commit/e3b2f0226bc09f16d5cdba9b94d1db3f15ee7d4a
Author: Ties Stuij <ties.stuij at arm.com>
Date: 2021-12-01 (Wed, 01 Dec 2021)
Changed paths:
M clang/include/clang/Basic/DiagnosticDriverKinds.td
M clang/include/clang/Basic/DiagnosticGroups.td
M clang/include/clang/Basic/DiagnosticSemaKinds.td
M clang/lib/Basic/Targets/AArch64.cpp
M clang/lib/Basic/Targets/ARM.cpp
M clang/lib/Basic/Targets/ARM.h
M clang/lib/CodeGen/CodeGenModule.cpp
M clang/lib/CodeGen/TargetInfo.cpp
M clang/lib/Driver/ToolChains/Clang.cpp
M clang/lib/Sema/SemaDeclAttr.cpp
A clang/test/CodeGen/arm-branch-protection-attr-1.c
A clang/test/CodeGen/arm-branch-protection-attr-2.c
M clang/test/CodeGen/arm_neon_intrinsics.c
M clang/test/Driver/aarch64-security-options.c
A clang/test/Driver/arm-security-options.c
A clang/test/Frontend/arm-invalid-branch-protection.c
A clang/test/Sema/aarch64-branch-protection-attr-err.c
A clang/test/Sema/arm-branch-protection-attr-err.c
R clang/test/Sema/branch-protection-attr-err.c
M llvm/include/llvm/Support/AArch64TargetParser.h
M llvm/include/llvm/Support/TargetParser.h
M llvm/lib/Support/AArch64TargetParser.cpp
M llvm/lib/Support/TargetParser.cpp
Log Message:
-----------
[clang][ARM] PACBTI-M frontend support
Handle branch protection option on the commandline as well as a function
attribute. One patch for both mechanisms, as they use the same underlying
parsing mechanism.
These are recorded in a set of LLVM IR module-level attributes like we do for
AArch64 PAC/BTI (see https://reviews.llvm.org/D85649):
- command-line options are "translated" to module-level LLVM IR
attributes (metadata).
- functions have PAC/BTI specific attributes iff the
__attribute__((target("branch-protection=...))) was used in the function
declaration.
- command-line option -mbranch-protection to armclang targeting Arm,
following this grammar:
branch-protection ::= "-mbranch-protection=" <protection>
protection ::= "none" | "standard" | "bti" [ "+" <pac-ret-clause> ]
| <pac-ret-clause> [ "+" "bti"]
pac-ret-clause ::= "pac-ret" [ "+" <pac-ret-option> ]
pac-ret-option ::= "leaf" ["+" "b-key"] | "b-key" ["+" "leaf"]
b-key is simply a placeholder to make it consistent with AArch64's
version. In Arm, however, it triggers a warning informing that b-key is
unsupported and a-key will be selected instead.
- Handle _attribute_((target(("branch-protection=..."))) for AArch32 with the
same grammer as the commandline options.
This patch is part of a series that adds support for the PACBTI-M extension of
the Armv8.1-M architecture, as detailed here:
https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension
The PACBTI-M specification can be found in the Armv8-M Architecture Reference
Manual:
https://developer.arm.com/documentation/ddi0553/latest
The following people contributed to this patch:
- Momchil Velikov
- Victor Campos
- Ties Stuij
Reviewed By: vhscampos
Differential Revision: https://reviews.llvm.org/D112421
More information about the All-commits
mailing list