13cab2bb3Spatrick //===-- asan_test_utils.h ---------------------------------------*- C++ -*-===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // 93cab2bb3Spatrick // This file is a part of AddressSanitizer, an address sanity checker. 103cab2bb3Spatrick // 113cab2bb3Spatrick //===----------------------------------------------------------------------===// 123cab2bb3Spatrick 133cab2bb3Spatrick #ifndef ASAN_TEST_UTILS_H 143cab2bb3Spatrick #define ASAN_TEST_UTILS_H 153cab2bb3Spatrick 163cab2bb3Spatrick #if !defined(SANITIZER_EXTERNAL_TEST_CONFIG) 173cab2bb3Spatrick # define INCLUDED_FROM_ASAN_TEST_UTILS_H 183cab2bb3Spatrick # include "asan_test_config.h" 193cab2bb3Spatrick # undef INCLUDED_FROM_ASAN_TEST_UTILS_H 203cab2bb3Spatrick #endif 213cab2bb3Spatrick 223cab2bb3Spatrick #include "sanitizer_test_utils.h" 233cab2bb3Spatrick #include "sanitizer_pthread_wrappers.h" 243cab2bb3Spatrick 253cab2bb3Spatrick #include <stdio.h> 263cab2bb3Spatrick #include <signal.h> 273cab2bb3Spatrick #include <stdlib.h> 283cab2bb3Spatrick #include <string.h> 293cab2bb3Spatrick #include <stdint.h> 303cab2bb3Spatrick #include <assert.h> 313cab2bb3Spatrick #include <algorithm> 323cab2bb3Spatrick #include <setjmp.h> 333cab2bb3Spatrick 343cab2bb3Spatrick #if !defined(_WIN32) 353cab2bb3Spatrick # include <strings.h> 363cab2bb3Spatrick # include <sys/mman.h> 373cab2bb3Spatrick #endif 383cab2bb3Spatrick 393cab2bb3Spatrick #ifdef __linux__ 403cab2bb3Spatrick # include <sys/prctl.h> 413cab2bb3Spatrick # include <sys/types.h> 423cab2bb3Spatrick # include <sys/stat.h> 433cab2bb3Spatrick # include <fcntl.h> 443cab2bb3Spatrick #include <unistd.h> 453cab2bb3Spatrick #endif 463cab2bb3Spatrick 473cab2bb3Spatrick #if !defined(__APPLE__) && !defined(__FreeBSD__) && !defined(__NetBSD__) 483cab2bb3Spatrick #include <malloc.h> 493cab2bb3Spatrick #endif 503cab2bb3Spatrick 513cab2bb3Spatrick #if ASAN_HAS_EXCEPTIONS 523cab2bb3Spatrick # define ASAN_THROW(x) throw (x) 533cab2bb3Spatrick #else 543cab2bb3Spatrick # define ASAN_THROW(x) 553cab2bb3Spatrick #endif 563cab2bb3Spatrick 573cab2bb3Spatrick typedef uint8_t U1; 583cab2bb3Spatrick typedef uint16_t U2; 593cab2bb3Spatrick typedef uint32_t U4; 603cab2bb3Spatrick typedef uint64_t U8; 613cab2bb3Spatrick 623cab2bb3Spatrick static const int kPageSize = 4096; 633cab2bb3Spatrick 643cab2bb3Spatrick // Big enough to be handled by secondary allocator and small enough to fit into 653cab2bb3Spatrick // quarantine for all configurations. 663cab2bb3Spatrick const size_t kLargeMalloc = 1 << 22; 673cab2bb3Spatrick 683cab2bb3Spatrick extern void free_aaa(void *p); 693cab2bb3Spatrick extern void *malloc_aaa(size_t size); 703cab2bb3Spatrick 713cab2bb3Spatrick template<typename T> asan_write(T * a)723cab2bb3SpatrickNOINLINE void asan_write(T *a) { 733cab2bb3Spatrick *a = 0; 743cab2bb3Spatrick } 753cab2bb3Spatrick 76*1f9cb04fSpatrick std::string RightOOBErrorMessage(int oob_distance, bool is_write); 77*1f9cb04fSpatrick std::string RightOOBWriteMessage(int oob_distance); 78*1f9cb04fSpatrick std::string RightOOBReadMessage(int oob_distance); 79*1f9cb04fSpatrick std::string LeftOOBErrorMessage(int oob_distance, bool is_write); 80*1f9cb04fSpatrick std::string LeftOOBWriteMessage(int oob_distance); 81*1f9cb04fSpatrick std::string LeftOOBReadMessage(int oob_distance); 82*1f9cb04fSpatrick std::string LeftOOBAccessMessage(int oob_distance); 833cab2bb3Spatrick char* MallocAndMemsetString(size_t size, char ch); 843cab2bb3Spatrick char* MallocAndMemsetString(size_t size); 853cab2bb3Spatrick 863cab2bb3Spatrick extern char glob1[1]; 873cab2bb3Spatrick extern char glob2[2]; 883cab2bb3Spatrick extern char glob3[3]; 893cab2bb3Spatrick extern char glob4[4]; 903cab2bb3Spatrick extern char glob5[5]; 913cab2bb3Spatrick extern char glob6[6]; 923cab2bb3Spatrick extern char glob7[7]; 933cab2bb3Spatrick extern char glob8[8]; 943cab2bb3Spatrick extern char glob9[9]; 953cab2bb3Spatrick extern char glob10[10]; 963cab2bb3Spatrick extern char glob11[11]; 973cab2bb3Spatrick extern char glob12[12]; 983cab2bb3Spatrick extern char glob13[13]; 993cab2bb3Spatrick extern char glob14[14]; 1003cab2bb3Spatrick extern char glob15[15]; 1013cab2bb3Spatrick extern char glob16[16]; 1023cab2bb3Spatrick extern char glob17[17]; 1033cab2bb3Spatrick extern char glob1000[1000]; 1043cab2bb3Spatrick extern char glob10000[10000]; 1053cab2bb3Spatrick extern char glob100000[100000]; 1063cab2bb3Spatrick extern int GlobalsTest(int x); 1073cab2bb3Spatrick 1083cab2bb3Spatrick #endif // ASAN_TEST_UTILS_H 109