// Copyright 2017 The Dawn Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "dawn/common/Assert.h" #include #include "dawn/common/Log.h" #include "dawn/common/Platform.h" #if DAWN_COMPILER_IS(MSVC) extern void __cdecl __debugbreak(void); #endif namespace dawn { #if DAWN_COMPILER_IS(CLANG) || DAWN_COMPILER_IS(GCC) void BreakPoint() { #if DAWN_PLATFORM_IS(X86) __asm__ __volatile__("int $3\n\t"); #elif DAWN_PLATFORM_IS(ARM32) __asm__ __volatile__("bkpt 0"); #elif DAWN_PLATFORM_IS(ARM64) __asm__ __volatile__("brk 0"); #elif DAWN_PLATFORM_IS(LOONGARCH) __asm__ __volatile__("break 0"); #elif DAWN_PLATFORM_IS(RISCV) __asm__ __volatile__("ebreak"); #elif DAWN_PLATFORM_IS(MIPS) __asm__ __volatile__("break"); #elif DAWN_PLATFORM_IS(S390) || DAWN_PLATFORM_IS_(S390X) __asm__ __volatile__(".word 0x0001"); #elif DAWN_PLATFORM_IS(PPC) || DAWN_PLATFORM_IS_(PPC64) __asm__ __volatile__("twge 2,2"); #else #error "Unsupported platform" #endif } #elif DAWN_COMPILER_IS(MSVC) void BreakPoint() { __debugbreak(); } #else #error "Unsupported compiler" #endif void HandleAssertionFailure(const char* file, const char* function, int line, const char* condition) { dawn::ErrorLog() << "Assertion failure at " << file << ":" << line << " (" << function << "): " << condition; #if defined(DAWN_ABORT_ON_ASSERT) abort(); #else BreakPoint(); #endif } } // namespace dawn