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