sanitizer_stackdepot_test.cc revision d0dc91869f197d2df69ceaecce0889931e18de67
1c55a96383497a772a307b346368133960b02ad03Eric Laurent//===-- sanitizer_stackdepot_test.cc --------------------------------------===//
2c55a96383497a772a307b346368133960b02ad03Eric Laurent//
3c55a96383497a772a307b346368133960b02ad03Eric Laurent//                     The LLVM Compiler Infrastructure
4c55a96383497a772a307b346368133960b02ad03Eric Laurent//
5c55a96383497a772a307b346368133960b02ad03Eric Laurent// This file is distributed under the University of Illinois Open Source
6c55a96383497a772a307b346368133960b02ad03Eric Laurent// License. See LICENSE.TXT for details.
7c55a96383497a772a307b346368133960b02ad03Eric Laurent//
8c55a96383497a772a307b346368133960b02ad03Eric Laurent//===----------------------------------------------------------------------===//
9c55a96383497a772a307b346368133960b02ad03Eric Laurent//
10c55a96383497a772a307b346368133960b02ad03Eric Laurent// This file is a part of ThreadSanitizer/AddressSanitizer runtime.
11c55a96383497a772a307b346368133960b02ad03Eric Laurent//
12c55a96383497a772a307b346368133960b02ad03Eric Laurent//===----------------------------------------------------------------------===//
13c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "sanitizer_common/sanitizer_stackdepot.h"
14c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "sanitizer_common/sanitizer_internal_defs.h"
15c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "sanitizer_common/sanitizer_libc.h"
16c55a96383497a772a307b346368133960b02ad03Eric Laurent#include "gtest/gtest.h"
17c55a96383497a772a307b346368133960b02ad03Eric Laurent
18c55a96383497a772a307b346368133960b02ad03Eric Laurentnamespace __sanitizer {
19c55a96383497a772a307b346368133960b02ad03Eric Laurent
20c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotBasic) {
21c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr s1[] = {1, 2, 3, 4, 5};
22c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i1 = StackDepotPut(s1, ARRAY_SIZE(s1));
23c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr sz1 = 0;
24c55a96383497a772a307b346368133960b02ad03Eric Laurent  const uptr *sp1 = StackDepotGet(i1, &sz1);
25c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_NE(sp1, (uptr*)0);
26c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(sz1, ARRAY_SIZE(s1));
27c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(internal_memcmp(sp1, s1, sizeof(s1)), 0);
28c55a96383497a772a307b346368133960b02ad03Eric Laurent}
29c55a96383497a772a307b346368133960b02ad03Eric Laurent
30c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotAbsent) {
31c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr sz1 = 0;
32c55a96383497a772a307b346368133960b02ad03Eric Laurent  const uptr *sp1 = StackDepotGet((1 << 30) - 1, &sz1);
33c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(sp1, (uptr*)0);
34c55a96383497a772a307b346368133960b02ad03Eric Laurent}
35c55a96383497a772a307b346368133960b02ad03Eric Laurent
36c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotEmptyStack) {
37c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i1 = StackDepotPut(0, 0);
38c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr sz1 = 0;
39c55a96383497a772a307b346368133960b02ad03Eric Laurent  const uptr *sp1 = StackDepotGet(i1, &sz1);
40c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(sp1, (uptr*)0);
41c55a96383497a772a307b346368133960b02ad03Eric Laurent}
42c55a96383497a772a307b346368133960b02ad03Eric Laurent
43c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotZeroId) {
44c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr sz1 = 0;
45c55a96383497a772a307b346368133960b02ad03Eric Laurent  const uptr *sp1 = StackDepotGet(0, &sz1);
46c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(sp1, (uptr*)0);
47c55a96383497a772a307b346368133960b02ad03Eric Laurent}
48c55a96383497a772a307b346368133960b02ad03Eric Laurent
49c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotSame) {
50c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr s1[] = {1, 2, 3, 4, 6};
51c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i1 = StackDepotPut(s1, ARRAY_SIZE(s1));
52c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i2 = StackDepotPut(s1, ARRAY_SIZE(s1));
53c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(i1, i2);
54c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr sz1 = 0;
55c55a96383497a772a307b346368133960b02ad03Eric Laurent  const uptr *sp1 = StackDepotGet(i1, &sz1);
56c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_NE(sp1, (uptr*)0);
57c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(sz1, ARRAY_SIZE(s1));
58c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_EQ(internal_memcmp(sp1, s1, sizeof(s1)), 0);
59c55a96383497a772a307b346368133960b02ad03Eric Laurent}
60c55a96383497a772a307b346368133960b02ad03Eric Laurent
61c55a96383497a772a307b346368133960b02ad03Eric LaurentTEST(SanitizerCommon, StackDepotSeveral) {
62c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr s1[] = {1, 2, 3, 4, 7};
63c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i1 = StackDepotPut(s1, ARRAY_SIZE(s1));
64c55a96383497a772a307b346368133960b02ad03Eric Laurent  uptr s2[] = {1, 2, 3, 4, 8, 9};
65c55a96383497a772a307b346368133960b02ad03Eric Laurent  u32 i2 = StackDepotPut(s2, ARRAY_SIZE(s2));
66c55a96383497a772a307b346368133960b02ad03Eric Laurent  EXPECT_NE(i1, i2);
67c55a96383497a772a307b346368133960b02ad03Eric Laurent}
68c55a96383497a772a307b346368133960b02ad03Eric Laurent
69c55a96383497a772a307b346368133960b02ad03Eric Laurent}  // namespace __sanitizer
70c55a96383497a772a307b346368133960b02ad03Eric Laurent