123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- #ifndef BASE_IMMEDIATE_CRASH_H_
- #define BASE_IMMEDIATE_CRASH_H_
- #include "build/build_config.h"
- #if defined(COMPILER_GCC)
- #if defined(OS_NACL)
- #define TRAP_SEQUENCE1_() __builtin_trap()
- #define TRAP_SEQUENCE2_() asm volatile("")
- #elif defined(ARCH_CPU_X86_FAMILY)
- #define TRAP_SEQUENCE1_() asm volatile("int3")
- #if defined(OS_APPLE)
- #define TRAP_SEQUENCE2_() asm volatile("")
- #else
- #define TRAP_SEQUENCE2_() asm volatile("ud2")
- #endif
- #elif defined(ARCH_CPU_ARMEL)
- #define TRAP_SEQUENCE1_() asm volatile("bkpt #0")
- #define TRAP_SEQUENCE2_() asm volatile("udf #0")
- #elif defined(ARCH_CPU_ARM64)
- #define TRAP_SEQUENCE1_() asm volatile("brk #0")
- #define TRAP_SEQUENCE2_() asm volatile("hlt #0")
- #else
- #define TRAP_SEQUENCE1_() __builtin_trap()
- #define TRAP_SEQUENCE2_() asm volatile("")
- #endif
- #elif defined(COMPILER_MSVC)
- #if !defined(__clang__)
- #define TRAP_SEQUENCE1_() __debugbreak()
- #define TRAP_SEQUENCE2_()
- #elif defined(ARCH_CPU_ARM64)
- #define TRAP_SEQUENCE1_() __debugbreak()
- #define TRAP_SEQUENCE2_() __asm volatile("")
- #else
- #define TRAP_SEQUENCE1_() asm volatile("int3")
- #define TRAP_SEQUENCE2_() asm volatile("ud2")
- #endif
- #else
- #error No supported trap sequence!
- #endif
- #define TRAP_SEQUENCE_() \
- do { \
- TRAP_SEQUENCE1_()
- TRAP_SEQUENCE2_()
- } while (false)
- #if !defined(COMPILER_GCC)
- #define WRAPPED_TRAP_SEQUENCE_() TRAP_SEQUENCE_()
- #else
- #define WRAPPED_TRAP_SEQUENCE_() \
- do { \
- [] { TRAP_SEQUENCE_()
- } while (false)
- #endif
- #if defined(__clang__) || defined(COMPILER_GCC)
- #define IMMEDIATE_CRASH() \
- ({ \
- WRAPPED_TRAP_SEQUENCE_()
- __builtin_unreachable()
- })
- #else
- #define IMMEDIATE_CRASH() WRAPPED_TRAP_SEQUENCE_()
- #endif
- #endif
|