Reland "[llvm][AArch64] Insert "bti j" after call to setjmp"
authorDavid Spickett <david.spickett@linaro.org>
Wed, 23 Mar 2022 10:51:08 +0000 (10:51 +0000)
committerDavid Spickett <david.spickett@linaro.org>
Wed, 23 Mar 2022 11:43:43 +0000 (11:43 +0000)
commitc3b98194df5572bc9b33024b48457538a7213b4c
tree0f4dc948c70cf5ececea6b03096f28992438e617
parentc070d5ceff05c3459b9a9add6d18aae9a3fa5916
Reland "[llvm][AArch64] Insert "bti j" after call to setjmp"

This reverts commit edb7ba714acba1d18a20d9f4986d2e38aee1d109.

This changes BLR_BTI to take variable_ops meaning that we can accept
a register or a label. The pattern still expects one argument so we'll
never get more than one. Then later we can check the type of the operand
to choose BL or BLR to emit.

(this is what BLR_RVMARKER does but I missed this detail of it first time around)

Also require NoSLSBLRMitigation which I missed in the first version.
14 files changed:
clang/docs/ClangCommandLineReference.rst
clang/docs/ReleaseNotes.rst
clang/include/clang/Driver/Options.td
clang/lib/Driver/ToolChains/Arch/AArch64.cpp
llvm/lib/Target/AArch64/AArch64.td
llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
llvm/lib/Target/AArch64/AArch64FastISel.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/lib/Target/AArch64/AArch64ISelLowering.h
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
llvm/test/CodeGen/AArch64/setjmp-bti-no-enforcement.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/setjmp-bti-outliner.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/setjmp-bti.ll [new file with mode: 0644]