5#ifndef CORE_FXCRT_IMMEDIATE_CRASH_H_
6#define CORE_FXCRT_IMMEDIATE_CRASH_H_
8#include "build/build_config.h"
42#if defined(COMPILER_GCC)
47#define TRAP_SEQUENCE1_() __builtin_trap()
48#define TRAP_SEQUENCE2_() asm volatile("")
50#elif defined(ARCH_CPU_X86_FAMILY)
56#define TRAP_SEQUENCE1_() asm volatile("int3")
58#if BUILDFLAG(IS_APPLE)
61#define TRAP_SEQUENCE2_() asm volatile("")
63#define TRAP_SEQUENCE2_() asm volatile("ud2")
66#elif defined(ARCH_CPU_ARMEL)
73#define TRAP_SEQUENCE1_() asm volatile("bkpt #0")
74#define TRAP_SEQUENCE2_() asm volatile("udf #0")
76#elif defined(ARCH_CPU_ARM64)
80#define TRAP_SEQUENCE1_() asm volatile("brk #0")
81#define TRAP_SEQUENCE2_() asm volatile("hlt #0")
87#define TRAP_SEQUENCE1_() __builtin_trap()
88#define TRAP_SEQUENCE2_() asm volatile("")
92#elif defined(COMPILER_MSVC)
94#if !defined(__clang__)
97#define TRAP_SEQUENCE1_() __debugbreak()
98#define TRAP_SEQUENCE2_()
100#elif defined(ARCH_CPU_ARM64)
104#define TRAP_SEQUENCE1_() __debugbreak()
108#define TRAP_SEQUENCE2_() __asm volatile("")
112#define TRAP_SEQUENCE1_() asm volatile("int3")
113#define TRAP_SEQUENCE2_() asm volatile("ud2")
119#error No supported trap sequence!
123#define TRAP_SEQUENCE_()
133#if defined(COMPILER_GCC)
134#define IMMEDIATE_CRASH_ALWAYS_INLINE inline __attribute__((__always_inline__))
135#elif defined(COMPILER_MSVC)
136#define IMMEDIATE_CRASH_ALWAYS_INLINE __forceinline
138#define IMMEDIATE_CRASH_ALWAYS_INLINE inline
145#if defined(__clang__
) || defined(COMPILER_GCC)
146 __builtin_unreachable();
constexpr span(T(&array)[N]) noexcept
constexpr reverse_iterator rend() const noexcept
constexpr reverse_iterator rbegin() const noexcept
constexpr const_reverse_iterator crend() const noexcept
std::reverse_iterator< iterator > reverse_iterator
const span first(size_t count) const
typename std::remove_cv< T >::type value_type
span & operator=(const span &other) noexcept
constexpr const_iterator cbegin() const noexcept
constexpr const_iterator cend() const noexcept
constexpr const_reverse_iterator crbegin() const noexcept
const span last(size_t count) const
constexpr bool empty() const noexcept
constexpr size_t size() const noexcept
constexpr span(Container &container)
friend constexpr span< U > make_span(U *data, size_t size) noexcept
std::reverse_iterator< const_iterator > const_reverse_iterator
const span subspan(size_t pos, size_t count=dynamic_extent) const
constexpr iterator begin() const noexcept
constexpr size_t size_bytes() const noexcept
constexpr span() noexcept=default
span(const Container &container)
constexpr span(std::array< T, N > &array) noexcept
constexpr T & back() const noexcept
constexpr span(const std::array< std::remove_cv_t< T >, N > &array) noexcept
constexpr T * data() const noexcept
constexpr T & front() const noexcept
constexpr span(const span &other) noexcept=default
UNSAFE_BUFFER_USAGE constexpr span(T *data, size_t size) noexcept
constexpr span(const span< U, M, R > &other)
T & operator[](size_t index) const noexcept
constexpr iterator end() const noexcept
#define UNSAFE_BUFFERS(...)
#define UNSAFE_BUFFER_USAGE
void CRYPT_MD5Finish(CRYPT_md5_context *context, pdfium::span< uint8_t, 16 > digest)
#define P(a, b, c, d, k, s, t)
void CRYPT_MD5Generate(pdfium::span< const uint8_t > data, pdfium::span< uint8_t, 16 > digest)
void CRYPT_ArcFourCryptBlock(pdfium::span< uint8_t > data, pdfium::span< const uint8_t > key)
void CRYPT_ArcFourSetup(CRYPT_rc4_context *context, pdfium::span< const uint8_t > key)
void CRYPT_MD5Update(CRYPT_md5_context *context, pdfium::span< const uint8_t > data)
void CRYPT_ArcFourCrypt(CRYPT_rc4_context *context, pdfium::span< uint8_t > data)
CRYPT_md5_context CRYPT_MD5Start()
void CRYPT_AESEncrypt(CRYPT_aes_context *ctx, pdfium::span< uint8_t > dest, pdfium::span< const uint8_t > src)
void CRYPT_AESSetIV(CRYPT_aes_context *ctx, const uint8_t *iv)
void CRYPT_AESDecrypt(CRYPT_aes_context *ctx, uint8_t *dest, const uint8_t *src, uint32_t size)
void CRYPT_AESSetKey(CRYPT_aes_context *ctx, const uint8_t *key, uint32_t keylen)
std::is_integral< decltype(std::declval< Container >().size())> ContainerHasIntegralSize
IsSpanImpl< typename std::decay< T >::type > IsSpan
std::is_convertible< From *, To * > IsLegalSpanConversion
IsStdArrayImpl< typename std::decay< T >::type > IsStdArray
constexpr span< T > make_span(T(&array)[N]) noexcept
span< char > as_writable_chars(span< T, N, P > s) noexcept
span< const uint8_t > as_bytes(span< T, N, P > s) noexcept
constexpr size_t dynamic_extent
static constexpr span< T > span_from_ref(T &single_object) noexcept
static constexpr span< const uint8_t > byte_span_from_ref(const T &single_object) noexcept
UNSAFE_BUFFER_USAGE constexpr span< T > make_span(T *data, size_t size) noexcept
span< const uint8_t > as_byte_span(T &&arg)
span< const char > as_chars(span< T, N, P > s) noexcept
span< const uint8_t > as_byte_span(const T &arg)
UNOWNED_PTR_EXCLUSION T * DefaultSpanInternalPtr
span< uint8_t > as_writable_bytes(span< T, N, P > s) noexcept
constexpr span< T > make_span(std::array< T, N > &array) noexcept
constexpr span< T > make_span(Container &container)
constexpr span< uint8_t > as_writable_byte_span(T &&arg)
IMMEDIATE_CRASH_ALWAYS_INLINE void ImmediateCrash()
static constexpr span< uint8_t > byte_span_from_ref(T &single_object) noexcept
constexpr span< T > make_span(const Container &container)
#define __has_attribute(x)
std::array< uint32_t, kMaxNb > iv
std::array< uint32_t, kSchedSize > invkeysched
static constexpr int kMaxNr
static constexpr int kSchedSize
static constexpr int kMaxNb
std::array< uint32_t, kSchedSize > keysched
std::array< uint32_t, 4 > state
std::array< uint32_t, 2 > total
std::array< int32_t, kPermutationLength > m
static constexpr int32_t kPermutationLength
#define UNOWNED_PTR_EXCLUSION