123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- //===-- 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 <stdlib.h>
- #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
|