]> granicus.if.org Git - llvm/commit
AArch64: Add a tagged-globals backend feature.
authorPeter Collingbourne <peter@pcc.me.uk>
Wed, 31 Jul 2019 20:14:19 +0000 (20:14 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Wed, 31 Jul 2019 20:14:19 +0000 (20:14 +0000)
commit15bab22a5270ef77be9b051df04fc14bf53b8b1c
tree3185cfbe4bcb8f7e391b409158b0155d36e77860
parent5c2d5457ddbced0fac5a19546ae88f6a16e74bfe
AArch64: Add a tagged-globals backend feature.

This feature instructs the backend to allow locally defined global variable
addresses to contain a pointer tag in bits 56-63 that will be ignored by
the hardware (i.e. TBI), but may be used by an instrumentation pass such
as HWASAN. It works by adding a MOVK instruction to the regular ADRP/ADD
sequence that sets bits 48-63 to the corresponding bits of the global, with
the linker bounds check disabled on the ADRP instruction to prevent the tag
from causing a link failure.

This implementation of the feature omits the MOVK when loading from or storing
to a global, which is sufficient for TBI. If the same approach is extended
to MTE, assuming that 0 is not configured as a catch-all tag, we will most
likely also need the MOVK in this case in order to avoid a tag mismatch.

Differential Revision: https://reviews.llvm.org/D65364

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367475 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/AArch64/AArch64.td
lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp
lib/Target/AArch64/AArch64InstrInfo.cpp
lib/Target/AArch64/AArch64MCInstLower.cpp
lib/Target/AArch64/AArch64Subtarget.cpp
lib/Target/AArch64/AArch64Subtarget.h
lib/Target/AArch64/Utils/AArch64BaseInfo.h
test/CodeGen/AArch64/tagged-globals.ll [new file with mode: 0644]