Files
clang-p2996/compiler-rt/test/asan/TestCases/zero_page_pc.cpp
Emily Shi f26adaa28d [compiler-rt][test] fix zero_page_pc on arm64e
on arm64e, pointer auth would catch this access violation before asan.
sign the function pointer so pointer auth will ignore this violation and let asan catch it in this test case.

rdar://79652167

Reviewed By: delcypher

Differential Revision: https://reviews.llvm.org/D104828
2021-06-24 13:40:12 -07:00

25 lines
910 B
C++

// Check that ASan correctly detects SEGV on the zero page.
// RUN: %clangxx_asan %s -o %t && not %run %t 2>&1 | FileCheck %s
#if __has_feature(ptrauth_calls)
# include <ptrauth.h>
#endif
typedef void void_f();
int main() {
void_f *func = (void_f *)0x4;
#if __has_feature(ptrauth_calls)
func = ptrauth_sign_unauthenticated(
func, ptrauth_key_function_pointer, 0);
#endif
func();
// x86 reports the SEGV with both address=4 and pc=4.
// On PowerPC64 ELFv1, the pointer is taken to be a function-descriptor
// pointer out of which three 64-bit quantities are read. This will SEGV, but
// the compiler is free to choose the order. As a result, the address is
// either 0x4, 0xc or 0x14. The pc is still in main() because it has not
// actually made the call when the faulting access occurs.
// CHECK: {{AddressSanitizer: (SEGV|access-violation).*(address|pc) 0x0*[4c]}}
return 0;
}