linux/include/linux/compiler-clang.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __LINUX_COMPILER_TYPES_H
   3#error "Please don't include <linux/compiler-clang.h> directly, include <linux/compiler.h> instead."
   4#endif
   5
   6/* Compiler specific definitions for Clang compiler */
   7
   8/* same as gcc, this was present in clang-2.6 so we can assume it works
   9 * with any version that can compile the kernel
  10 */
  11#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
  12
  13/* all clang versions usable with the kernel support KASAN ABI version 5 */
  14#define KASAN_ABI_VERSION 5
  15
  16/*
  17 * Note: Checking __has_feature(*_sanitizer) is only true if the feature is
  18 * enabled. Therefore it is not required to additionally check defined(CONFIG_*)
  19 * to avoid adding redundant attributes in other configurations.
  20 */
  21
  22#if __has_feature(address_sanitizer) || __has_feature(hwaddress_sanitizer)
  23/* Emulate GCC's __SANITIZE_ADDRESS__ flag */
  24#define __SANITIZE_ADDRESS__
  25#define __no_sanitize_address \
  26                __attribute__((no_sanitize("address", "hwaddress")))
  27#else
  28#define __no_sanitize_address
  29#endif
  30
  31#if __has_feature(thread_sanitizer)
  32/* emulate gcc's __SANITIZE_THREAD__ flag */
  33#define __SANITIZE_THREAD__
  34#define __no_sanitize_thread \
  35                __attribute__((no_sanitize("thread")))
  36#else
  37#define __no_sanitize_thread
  38#endif
  39
  40#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP)
  41#define __HAVE_BUILTIN_BSWAP32__
  42#define __HAVE_BUILTIN_BSWAP64__
  43#define __HAVE_BUILTIN_BSWAP16__
  44#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
  45
  46#if __has_feature(undefined_behavior_sanitizer)
  47/* GCC does not have __SANITIZE_UNDEFINED__ */
  48#define __no_sanitize_undefined \
  49                __attribute__((no_sanitize("undefined")))
  50#else
  51#define __no_sanitize_undefined
  52#endif
  53
  54/*
  55 * Support for __has_feature(coverage_sanitizer) was added in Clang 13 together
  56 * with no_sanitize("coverage"). Prior versions of Clang support coverage
  57 * instrumentation, but cannot be queried for support by the preprocessor.
  58 */
  59#if __has_feature(coverage_sanitizer)
  60#define __no_sanitize_coverage __attribute__((no_sanitize("coverage")))
  61#else
  62#define __no_sanitize_coverage
  63#endif
  64
  65#if __has_feature(shadow_call_stack)
  66# define __noscs        __attribute__((__no_sanitize__("shadow-call-stack")))
  67#endif
  68
  69#define __nocfi         __attribute__((__no_sanitize__("cfi")))
  70#define __cficanonical  __attribute__((__cfi_canonical_jump_table__))
  71