[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
  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

- 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:


The PACBTI-M specification can be found in the Armv8-M Architecture Reference


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