aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
diff options
context:
space:
mode:
authorJoao Moreira <joao.moreira@intel.com>2020-10-09 15:25:24 -0700
committerCraig Topper <craig.topper@intel.com>2020-10-09 15:54:23 -0700
commite0b89df2e0f0130881bf6c39bf31d7f6aac00e0f (patch)
treeb3b24b5e36270b345bd3cf7e8624252dbd92b019 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp
parent488f1c48937ce0dae5566fa4f1dbdf8c43ffb9e4 (diff)
downloadllvm-e0b89df2e0f0130881bf6c39bf31d7f6aac00e0f.zip
llvm-e0b89df2e0f0130881bf6c39bf31d7f6aac00e0f.tar.gz
llvm-e0b89df2e0f0130881bf6c39bf31d7f6aac00e0f.tar.bz2
[X86] Check if call is indirect before emitting NT_CALL
The notrack prefix is a relaxation of CET policies which makes it possible to indirectly call targets which do not have an ENDBR instruction in the landing address. To emit a call with this prefix, the special attribute "nocf_check" is used. When used as a function attribute, a CallInst targeting the respective function will return true for the method "doesNoCfCheck()", no matter if it is a direct call (and such should remain like this, as the information that the to-be-called function won't perform control-flow checks is useful in other contexts). Yet, when emitting an X86ISD::NT_CALL, the respective CallInst should be verified for its indirection, allowing that the prefixed calls are only emitted in the right situations. Update the respective testing unit to also verify for direct calls to functions with ''nocf_check'' attributes. The bug can also be reproduced through compiling the following C code using the -fcf-protection=full flag. int __attribute__((nocf_check)) foo(int a) {}; int main() { foo(42); } Differential Revision: https://reviews.llvm.org/D87320
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
0 files changed, 0 insertions, 0 deletions