]>
git.proxmox.com Git - rustc.git/blob - src/compiler-rt/lib/sanitizer_common/tests/sanitizer_stackdepot_test.cc
1 //===-- sanitizer_stackdepot_test.cc --------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file is a part of ThreadSanitizer/AddressSanitizer runtime.
12 //===----------------------------------------------------------------------===//
13 #include "sanitizer_common/sanitizer_stackdepot.h"
14 #include "sanitizer_common/sanitizer_internal_defs.h"
15 #include "sanitizer_common/sanitizer_libc.h"
16 #include "gtest/gtest.h"
18 namespace __sanitizer
{
20 TEST(SanitizerCommon
, StackDepotBasic
) {
21 uptr array
[] = {1, 2, 3, 4, 5};
22 StackTrace
s1(array
, ARRAY_SIZE(array
));
23 u32 i1
= StackDepotPut(s1
);
24 StackTrace stack
= StackDepotGet(i1
);
25 EXPECT_NE(stack
.trace
, (uptr
*)0);
26 EXPECT_EQ(ARRAY_SIZE(array
), stack
.size
);
27 EXPECT_EQ(0, internal_memcmp(stack
.trace
, array
, sizeof(array
)));
30 TEST(SanitizerCommon
, StackDepotAbsent
) {
31 StackTrace stack
= StackDepotGet((1 << 30) - 1);
32 EXPECT_EQ((uptr
*)0, stack
.trace
);
35 TEST(SanitizerCommon
, StackDepotEmptyStack
) {
36 u32 i1
= StackDepotPut(StackTrace());
37 StackTrace stack
= StackDepotGet(i1
);
38 EXPECT_EQ((uptr
*)0, stack
.trace
);
41 TEST(SanitizerCommon
, StackDepotZeroId
) {
42 StackTrace stack
= StackDepotGet(0);
43 EXPECT_EQ((uptr
*)0, stack
.trace
);
46 TEST(SanitizerCommon
, StackDepotSame
) {
47 uptr array
[] = {1, 2, 3, 4, 6};
48 StackTrace
s1(array
, ARRAY_SIZE(array
));
49 u32 i1
= StackDepotPut(s1
);
50 u32 i2
= StackDepotPut(s1
);
52 StackTrace stack
= StackDepotGet(i1
);
53 EXPECT_NE(stack
.trace
, (uptr
*)0);
54 EXPECT_EQ(ARRAY_SIZE(array
), stack
.size
);
55 EXPECT_EQ(0, internal_memcmp(stack
.trace
, array
, sizeof(array
)));
58 TEST(SanitizerCommon
, StackDepotSeveral
) {
59 uptr array1
[] = {1, 2, 3, 4, 7};
60 StackTrace
s1(array1
, ARRAY_SIZE(array1
));
61 u32 i1
= StackDepotPut(s1
);
62 uptr array2
[] = {1, 2, 3, 4, 8, 9};
63 StackTrace
s2(array2
, ARRAY_SIZE(array2
));
64 u32 i2
= StackDepotPut(s2
);
68 TEST(SanitizerCommon
, StackDepotReverseMap
) {
69 uptr array1
[] = {1, 2, 3, 4, 5};
70 uptr array2
[] = {7, 1, 3, 0};
71 uptr array3
[] = {10, 2, 5, 3};
72 uptr array4
[] = {1, 3, 2, 5};
74 StackTrace
s1(array1
, ARRAY_SIZE(array1
));
75 StackTrace
s2(array2
, ARRAY_SIZE(array2
));
76 StackTrace
s3(array3
, ARRAY_SIZE(array3
));
77 StackTrace
s4(array4
, ARRAY_SIZE(array4
));
78 ids
[0] = StackDepotPut(s1
);
79 ids
[1] = StackDepotPut(s2
);
80 ids
[2] = StackDepotPut(s3
);
81 ids
[3] = StackDepotPut(s4
);
83 StackDepotReverseMap map
;
85 for (uptr i
= 0; i
< 4; i
++) {
86 StackTrace stack
= StackDepotGet(ids
[i
]);
87 StackTrace from_map
= map
.Get(ids
[i
]);
88 EXPECT_EQ(stack
.size
, from_map
.size
);
89 EXPECT_EQ(stack
.trace
, from_map
.trace
);
93 } // namespace __sanitizer