1//===-- int_util.c - Implement internal utilities -------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "int_lib.h"
10
11// NOTE: The definitions in this file are declared weak because we clients to be
12// able to arbitrarily package individual functions into separate .a files. If
13// we did not declare these weak, some link situations might end up seeing
14// duplicate strong definitions of the same symbol.
15//
16// We can't use this solution for kernel use (which may not support weak), but
17// currently expect that when built for kernel use all the functionality is
18// packaged into a single library.
19
20#ifdef KERNEL_USE
21
22NORETURN extern void panic(const char *, ...);
23#ifndef _WIN32
24__attribute__((visibility("hidden")))
25#endif
26void __compilerrt_abort_impl(const char *file, int line, const char *function) {
27 panic("%s:%d: abort in %s", file, line, function);
28}
29
30#elif __APPLE__
31
32// from libSystem.dylib
33NORETURN extern void __assert_rtn(const char *func, const char *file, int line,
34 const char *message);
35
36__attribute__((weak))
37__attribute__((visibility("hidden")))
38void __compilerrt_abort_impl(const char *file, int line, const char *function) {
39 __assert_rtn(function, file, line, "libcompiler_rt abort");
40}
41
42#else
43
44#ifdef _WIN32
45#include <stdlib.h>
46#endif
47
48#ifndef _WIN32
49__attribute__((weak))
50__attribute__((visibility("hidden")))
51#endif
52void __compilerrt_abort_impl(const char *file, int line, const char *function) {
53#if !__STDC_HOSTED__
54 // Avoid depending on libc when compiling with -ffreestanding.
55 __builtin_trap();
56#elif defined(_WIN32)
57 abort();
58#else
59 __builtin_abort();
60#endif
61}
62
63#endif
64

source code of compiler-rt/lib/builtins/int_util.c