xref: /openbsd-src/gnu/llvm/compiler-rt/lib/asan/tests/asan_test_utils.h (revision 1f9cb04fc6f537ca6cf5a53c28927340cba218a2)
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)723cab2bb3Spatrick NOINLINE 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