xref: /openbsd-src/gnu/llvm/compiler-rt/lib/scudo/standalone/platform.h (revision 810390e339a5425391477d5d41c78d7cab2424ac)
13cab2bb3Spatrick //===-- platform.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 #ifndef SCUDO_PLATFORM_H_
103cab2bb3Spatrick #define SCUDO_PLATFORM_H_
113cab2bb3Spatrick 
123cab2bb3Spatrick // Transitive includes of stdint.h specify some of the defines checked below.
133cab2bb3Spatrick #include <stdint.h>
143cab2bb3Spatrick 
15d89ec533Spatrick #if defined(__linux__) && !defined(__TRUSTY__)
163cab2bb3Spatrick #define SCUDO_LINUX 1
173cab2bb3Spatrick #else
183cab2bb3Spatrick #define SCUDO_LINUX 0
193cab2bb3Spatrick #endif
203cab2bb3Spatrick 
213cab2bb3Spatrick // See https://android.googlesource.com/platform/bionic/+/master/docs/defines.md
223cab2bb3Spatrick #if defined(__BIONIC__)
233cab2bb3Spatrick #define SCUDO_ANDROID 1
243cab2bb3Spatrick #else
253cab2bb3Spatrick #define SCUDO_ANDROID 0
263cab2bb3Spatrick #endif
273cab2bb3Spatrick 
283cab2bb3Spatrick #if defined(__Fuchsia__)
293cab2bb3Spatrick #define SCUDO_FUCHSIA 1
303cab2bb3Spatrick #else
313cab2bb3Spatrick #define SCUDO_FUCHSIA 0
323cab2bb3Spatrick #endif
333cab2bb3Spatrick 
34d89ec533Spatrick #if defined(__TRUSTY__)
35d89ec533Spatrick #define SCUDO_TRUSTY 1
36d89ec533Spatrick #else
37d89ec533Spatrick #define SCUDO_TRUSTY 0
38d89ec533Spatrick #endif
39d89ec533Spatrick 
40*810390e3Srobert #if defined(__LP64__)
413cab2bb3Spatrick #define SCUDO_WORDSIZE 64U
423cab2bb3Spatrick #else
433cab2bb3Spatrick #define SCUDO_WORDSIZE 32U
443cab2bb3Spatrick #endif
453cab2bb3Spatrick 
463cab2bb3Spatrick #if SCUDO_WORDSIZE == 64U
473cab2bb3Spatrick #define FIRST_32_SECOND_64(a, b) (b)
483cab2bb3Spatrick #else
493cab2bb3Spatrick #define FIRST_32_SECOND_64(a, b) (a)
503cab2bb3Spatrick #endif
513cab2bb3Spatrick 
523cab2bb3Spatrick #ifndef SCUDO_CAN_USE_PRIMARY64
533cab2bb3Spatrick #define SCUDO_CAN_USE_PRIMARY64 (SCUDO_WORDSIZE == 64U)
543cab2bb3Spatrick #endif
553cab2bb3Spatrick 
563cab2bb3Spatrick #ifndef SCUDO_MIN_ALIGNMENT_LOG
573cab2bb3Spatrick // We force malloc-type functions to be aligned to std::max_align_t, but there
583cab2bb3Spatrick // is no reason why the minimum alignment for all other functions can't be 8
593cab2bb3Spatrick // bytes. Except obviously for applications making incorrect assumptions.
603cab2bb3Spatrick // TODO(kostyak): define SCUDO_MIN_ALIGNMENT_LOG 3
613cab2bb3Spatrick #define SCUDO_MIN_ALIGNMENT_LOG FIRST_32_SECOND_64(3, 4)
623cab2bb3Spatrick #endif
633cab2bb3Spatrick 
643cab2bb3Spatrick #if defined(__aarch64__)
653cab2bb3Spatrick #define SCUDO_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 48)
663cab2bb3Spatrick #else
673cab2bb3Spatrick #define SCUDO_MMAP_RANGE_SIZE FIRST_32_SECOND_64(1ULL << 32, 1ULL << 47)
683cab2bb3Spatrick #endif
693cab2bb3Spatrick 
703cab2bb3Spatrick // Older gcc have issues aligning to a constexpr, and require an integer.
713cab2bb3Spatrick // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56859 among others.
723cab2bb3Spatrick #if defined(__powerpc__) || defined(__powerpc64__)
733cab2bb3Spatrick #define SCUDO_CACHE_LINE_SIZE 128
743cab2bb3Spatrick #else
753cab2bb3Spatrick #define SCUDO_CACHE_LINE_SIZE 64
763cab2bb3Spatrick #endif
773cab2bb3Spatrick 
783cab2bb3Spatrick #define SCUDO_POINTER_FORMAT_LENGTH FIRST_32_SECOND_64(8, 12)
793cab2bb3Spatrick 
803cab2bb3Spatrick #endif // SCUDO_PLATFORM_H_
81