This patch series adds support for the Guarded Control Stack extension [1].
GCS marking for binaries is specified in [2]. Regression tested on AArch64 and no regressions have been found. Is this OK for trunk? Sources and branches: - binutils-gdb: sourceware.org/git/binutils-gdb.git users/ARM/gcs - gcc: this patch series, or gcc.gnu.org/git/gcc.git vendors/ARM/gcs-v3 see https://gcc.gnu.org/gitwrite.html#vendor for setup details - glibc: sourceware.org/git/glibc.git arm/gcs-v2 - kernel: git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-next/gcs Cross-building the toolchain for target aarch64-none-linux-gnu: - build and install binutils-gdb - build and install GCC stage 1 - install kernel headers - install glibc headers - build and install GCC stage 2 configuring with --enable-standard-branch-protection - build and install glibc - build and install GCC stage 3 along with target libraries configuring with --enable-standard-branch-protection FVP model provided by the Shrinkwrap tool [3] can be used for testing. Run tests with environment var GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1:glibc.cpu.aarch64_gcs_policy=2 See details about Glibc tunables in corresponding Glibc patch [4]. Corresponding binutils patch [5]. [1] https://developer.arm.com/documentation/ddi0487/ka/ (chapter D11) [2] https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst [3] https://git.gitlab.arm.com/tooling/shrinkwrap.git [4] https://inbox.sourceware.org/libc-alpha/20241023083920.466015-1-yury.khrusta...@arm.com/ [5] https://inbox.sourceware.org/binutils/20241014101743.3222246-1-yury.khrusta...@arm.com/ --- Matthieu Longo (1): aarch64: Fix tests incompatible with GCS Richard Ball (1): aarch64: Add tests and docs for indirect_return attribute Szabolcs Nagy (19): aarch64: Add -mbranch-protection=gcs option aarch64: Add branch-protection target pragma tests aarch64: Add support for chkfeat insn aarch64: Add __builtin_aarch64_chkfeat aarch64: Add __builtin_aarch64_chkfeat tests aarch64: Add GCS instructions aarch64: Add GCS builtins aarch64: Add __builtin_aarch64_gcs* tests aarch64: Add GCS support for nonlocal stack save aarch64: Add non-local goto and jump tests for GCS aarch64: Add ACLE feature macros for GCS aarch64: Add test for GCS ACLE defs aarch64: Add target pragma tests for gcs aarch64: Add GCS support to the unwinder aarch64: Emit GNU property NOTE for GCS aarch64: libgcc: add GCS marking to asm aarch64: libatomic: add GCS marking to asm aarch64: libitm: Add GCS support aarch64: Introduce indirect_return attribute Yury Khrustalev (1): aarch64: Fix nonlocal goto tests incompatible with GCS gcc/config/aarch64/aarch64-builtins.cc | 88 ++++++++++++ gcc/config/aarch64/aarch64-c.cc | 3 + gcc/config/aarch64/aarch64-protos.h | 2 + gcc/config/aarch64/aarch64.cc | 40 ++++++ gcc/config/aarch64/aarch64.h | 7 + gcc/config/aarch64/aarch64.md | 126 ++++++++++++++++++ gcc/config/aarch64/aarch64.opt | 3 + gcc/config/arm/aarch-bti-insert.cc | 36 ++++- gcc/configure | 2 +- gcc/configure.ac | 6 +- gcc/doc/extend.texi | 5 + gcc/doc/invoke.texi | 5 +- gcc/testsuite/g++.target/aarch64/pr94515-1.C | 6 +- .../return_address_sign_ab_exception.C | 19 ++- gcc/testsuite/gcc.target/aarch64/chkfeat-1.c | 75 +++++++++++ gcc/testsuite/gcc.target/aarch64/chkfeat-2.c | 15 +++ gcc/testsuite/gcc.target/aarch64/eh_return.c | 13 ++ .../gcc.target/aarch64/gcs-nonlocal-1.c | 25 ++++ .../gcc.target/aarch64/gcs-nonlocal-2.c | 21 +++ .../gcc.target/aarch64/gcs-nonlocal-3.c | 33 +++++ gcc/testsuite/gcc.target/aarch64/gcspopm-1.c | 69 ++++++++++ gcc/testsuite/gcc.target/aarch64/gcspr-1.c | 31 +++++ gcc/testsuite/gcc.target/aarch64/gcsss-1.c | 49 +++++++ .../gcc.target/aarch64/indirect_return.c | 25 ++++ gcc/testsuite/gcc.target/aarch64/pr104689.c | 3 +- .../gcc.target/aarch64/pragma_cpp_predefs_1.c | 30 +++++ .../gcc.target/aarch64/pragma_cpp_predefs_4.c | 85 ++++++++++++ .../gcc.target/aarch64/sme/nonlocal_goto_4.c | 2 +- .../gcc.target/aarch64/sme/nonlocal_goto_5.c | 2 +- .../gcc.target/aarch64/sme/nonlocal_goto_6.c | 2 +- libatomic/config/linux/aarch64/atomic_16.S | 11 +- libgcc/config/aarch64/aarch64-asm.h | 16 ++- libgcc/config/aarch64/aarch64-unwind.h | 59 +++++++- libitm/config/aarch64/sjlj.S | 60 ++++++++- libitm/config/aarch64/target.h | 1 + 35 files changed, 944 insertions(+), 31 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/chkfeat-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/chkfeat-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcs-nonlocal-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcs-nonlocal-2.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcs-nonlocal-3.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcspopm-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcspr-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/gcsss-1.c create mode 100644 gcc/testsuite/gcc.target/aarch64/indirect_return.c -- 2.39.5