FuzzerBuiltins.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. //===- FuzzerBuiltins.h - Internal header for builtins ----------*- C++ -* ===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // Wrapper functions and marcos around builtin functions.
  9. //===----------------------------------------------------------------------===//
  10. #ifndef LLVM_FUZZER_BUILTINS_H
  11. #define LLVM_FUZZER_BUILTINS_H
  12. #include "FuzzerPlatform.h"
  13. #if !LIBFUZZER_MSVC
  14. #include <cstdint>
  15. #define GET_CALLER_PC() __builtin_return_address(0)
  16. namespace fuzzer {
  17. inline uint8_t Bswap(uint8_t x) { return x; }
  18. inline uint16_t Bswap(uint16_t x) { return __builtin_bswap16(x); }
  19. inline uint32_t Bswap(uint32_t x) { return __builtin_bswap32(x); }
  20. inline uint64_t Bswap(uint64_t x) { return __builtin_bswap64(x); }
  21. inline uint32_t Clzll(unsigned long long X) { return __builtin_clzll(X); }
  22. inline int Popcountll(unsigned long long X) { return __builtin_popcountll(X); }
  23. } // namespace fuzzer
  24. #endif // !LIBFUZZER_MSVC
  25. #endif // LLVM_FUZZER_BUILTINS_H