1*76559068SAndroid Build Coastguard Worker //===-- report.h ------------------------------------------------*- C++ -*-===// 2*76559068SAndroid Build Coastguard Worker // 3*76559068SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*76559068SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information. 5*76559068SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*76559068SAndroid Build Coastguard Worker // 7*76559068SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 8*76559068SAndroid Build Coastguard Worker 9*76559068SAndroid Build Coastguard Worker #ifndef SCUDO_REPORT_H_ 10*76559068SAndroid Build Coastguard Worker #define SCUDO_REPORT_H_ 11*76559068SAndroid Build Coastguard Worker 12*76559068SAndroid Build Coastguard Worker #include "internal_defs.h" 13*76559068SAndroid Build Coastguard Worker 14*76559068SAndroid Build Coastguard Worker namespace scudo { 15*76559068SAndroid Build Coastguard Worker 16*76559068SAndroid Build Coastguard Worker // Reports are *fatal* unless stated otherwise. 17*76559068SAndroid Build Coastguard Worker 18*76559068SAndroid Build Coastguard Worker // Generic error, adds newline to end of message. 19*76559068SAndroid Build Coastguard Worker void NORETURN reportError(const char *Message); 20*76559068SAndroid Build Coastguard Worker 21*76559068SAndroid Build Coastguard Worker // Generic error, but the message is not modified. 22*76559068SAndroid Build Coastguard Worker void NORETURN reportRawError(const char *Message); 23*76559068SAndroid Build Coastguard Worker 24*76559068SAndroid Build Coastguard Worker // Flags related errors. 25*76559068SAndroid Build Coastguard Worker void NORETURN reportInvalidFlag(const char *FlagType, const char *Value); 26*76559068SAndroid Build Coastguard Worker 27*76559068SAndroid Build Coastguard Worker // Chunk header related errors. 28*76559068SAndroid Build Coastguard Worker void NORETURN reportHeaderCorruption(void *Ptr); 29*76559068SAndroid Build Coastguard Worker 30*76559068SAndroid Build Coastguard Worker // Sanity checks related error. 31*76559068SAndroid Build Coastguard Worker void NORETURN reportSanityCheckError(const char *Field); 32*76559068SAndroid Build Coastguard Worker 33*76559068SAndroid Build Coastguard Worker // Combined allocator errors. 34*76559068SAndroid Build Coastguard Worker void NORETURN reportAlignmentTooBig(uptr Alignment, uptr MaxAlignment); 35*76559068SAndroid Build Coastguard Worker void NORETURN reportAllocationSizeTooBig(uptr UserSize, uptr TotalSize, 36*76559068SAndroid Build Coastguard Worker uptr MaxSize); 37*76559068SAndroid Build Coastguard Worker void NORETURN reportOutOfBatchClass(); 38*76559068SAndroid Build Coastguard Worker void NORETURN reportOutOfMemory(uptr RequestedSize); 39*76559068SAndroid Build Coastguard Worker enum class AllocatorAction : u8 { 40*76559068SAndroid Build Coastguard Worker Recycling, 41*76559068SAndroid Build Coastguard Worker Deallocating, 42*76559068SAndroid Build Coastguard Worker Reallocating, 43*76559068SAndroid Build Coastguard Worker Sizing, 44*76559068SAndroid Build Coastguard Worker }; 45*76559068SAndroid Build Coastguard Worker void NORETURN reportInvalidChunkState(AllocatorAction Action, void *Ptr); 46*76559068SAndroid Build Coastguard Worker void NORETURN reportMisalignedPointer(AllocatorAction Action, void *Ptr); 47*76559068SAndroid Build Coastguard Worker void NORETURN reportDeallocTypeMismatch(AllocatorAction Action, void *Ptr, 48*76559068SAndroid Build Coastguard Worker u8 TypeA, u8 TypeB); 49*76559068SAndroid Build Coastguard Worker void NORETURN reportDeleteSizeMismatch(void *Ptr, uptr Size, uptr ExpectedSize); 50*76559068SAndroid Build Coastguard Worker 51*76559068SAndroid Build Coastguard Worker // C wrappers errors. 52*76559068SAndroid Build Coastguard Worker void NORETURN reportAlignmentNotPowerOfTwo(uptr Alignment); 53*76559068SAndroid Build Coastguard Worker void NORETURN reportInvalidPosixMemalignAlignment(uptr Alignment); 54*76559068SAndroid Build Coastguard Worker void NORETURN reportCallocOverflow(uptr Count, uptr Size); 55*76559068SAndroid Build Coastguard Worker void NORETURN reportPvallocOverflow(uptr Size); 56*76559068SAndroid Build Coastguard Worker void NORETURN reportInvalidAlignedAllocAlignment(uptr Size, uptr Alignment); 57*76559068SAndroid Build Coastguard Worker 58*76559068SAndroid Build Coastguard Worker } // namespace scudo 59*76559068SAndroid Build Coastguard Worker 60*76559068SAndroid Build Coastguard Worker #endif // SCUDO_REPORT_H_ 61