summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2015-01-15 20:48:38 +0000
committerHal Finkel <hfinkel@anl.gov>2015-01-15 20:48:38 +0000
commit6fd59ad0def1f66a1f668aab80d6c7af6683da74 (patch)
treed9fe0273c724e0743b671d5546132339dc64ad24 /test
parent976c7d984baf7725c1dc32ec91df0566f3558bca (diff)
[asan] Loosen test for upcoming ppc64 change
This test casts 0x4 to a function pointer and calls it. Unfortunately, the faulting address may not exactly be 0x4 on PPC64 ELFv1 systems. The LLVM PPC backend used to always generate the loads "in order", so we'd fault at 0x4 anyway. However, at upcoming change to loosen that ordering, and we'll pick a different order on some targets. As a result, as explained in the comment, we need to allow for certain nearby addresses as well. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@226202 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/asan/TestCases/zero_page_pc.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/test/asan/TestCases/zero_page_pc.cc b/test/asan/TestCases/zero_page_pc.cc
index 5810a9fb9..925cbc63a 100644
--- a/test/asan/TestCases/zero_page_pc.cc
+++ b/test/asan/TestCases/zero_page_pc.cc
@@ -6,7 +6,11 @@ int main() {
void_f *func = (void_f *)0x4;
func();
// x86 reports the SEGV with both address=4 and pc=4.
- // PowerPC64 reports it with address=4 but pc still in main().
- // CHECK: {{AddressSanitizer: SEGV.*(address|pc) 0x0*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.*(address|pc) 0x0*[4c]}}
return 0;
}