//===-- int_util.c - Implement internal utilities -------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "int_lib.h" // NOTE: The definitions in this file are declared weak because we clients to be // able to arbitrarily package individual functions into separate .a files. If // we did not declare these weak, some link situations might end up seeing // duplicate strong definitions of the same symbol. // // We can't use this solution for kernel use (which may not support weak), but // currently expect that when built for kernel use all the functionality is // packaged into a single library. #ifdef KERNEL_USE NORETURN extern void panic(const char *, ...); #ifndef _WIN32 __attribute__((visibility("hidden"))) #endif void __compilerrt_abort_impl(const char *file, int line, const char *function) { panic("%s:%d: abort in %s", file, line, function); } #elif __APPLE__ // from libSystem.dylib NORETURN extern void __assert_rtn(const char *func, const char *file, int line, const char *message); __attribute__((weak)) __attribute__((visibility("hidden"))) void __compilerrt_abort_impl(const char *file, int line, const char *function) { __assert_rtn(function, file, line, "libcompiler_rt abort"); } #else #ifdef _WIN32 #include #endif #ifndef _WIN32 __attribute__((weak)) __attribute__((visibility("hidden"))) #endif void __compilerrt_abort_impl(const char *file, int line, const char *function) { #if !__STDC_HOSTED__ // Avoid depending on libc when compiling with -ffreestanding. __builtin_trap(); #elif defined(_WIN32) abort(); #else __builtin_abort(); #endif } #endif