xref: /minix3/sys/external/bsd/compiler_rt/dist/lib/builtins/int_util.c (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1  /* ===-- int_util.c - Implement internal utilities --------------------------===
2   *
3   *                     The LLVM Compiler Infrastructure
4   *
5   * This file is dual licensed under the MIT and the University of Illinois Open
6   * Source Licenses. See LICENSE.TXT for details.
7   *
8   * ===----------------------------------------------------------------------===
9   */
10  
11  #include "int_util.h"
12  #include "int_lib.h"
13  
14  /* NOTE: The definitions in this file are declared weak because we clients to be
15   * able to arbitrarily package individual functions into separate .a files. If
16   * we did not declare these weak, some link situations might end up seeing
17   * duplicate strong definitions of the same symbol.
18   *
19   * We can't use this solution for kernel use (which may not support weak), but
20   * currently expect that when built for kernel use all the functionality is
21   * packaged into a single library.
22   */
23  
24  #ifdef KERNEL_USE
25  
26  extern void panic(const char *, ...) __attribute__((noreturn));
27  #ifndef _WIN32
28  __attribute__((visibility("hidden")))
29  #endif
compilerrt_abort_impl(const char * file,int line,const char * function)30  void compilerrt_abort_impl(const char *file, int line, const char *function) {
31    panic("%s:%d: abort in %s", file, line, function);
32  }
33  
34  #elif __APPLE__
35  
36  /* from libSystem.dylib */
37  extern void __assert_rtn(const char *func, const char *file,
38                       int line, const char * message) __attribute__((noreturn));
39  
40  #ifndef _WIN32
41  __attribute__((weak))
42  __attribute__((visibility("hidden")))
43  #endif
compilerrt_abort_impl(const char * file,int line,const char * function)44  void compilerrt_abort_impl(const char *file, int line, const char *function) {
45    __assert_rtn(function, file, line, "libcompiler_rt abort");
46  }
47  
48  #else
49  
50  /* Get the system definition of abort() */
51  #include <stdlib.h>
52  
53  #ifndef _WIN32
54  __attribute__((weak))
55  __attribute__((visibility("hidden")))
56  #endif
compilerrt_abort_impl(const char * file,int line,const char * function)57  void compilerrt_abort_impl(const char *file, int line, const char *function) {
58    abort();
59  }
60  
61  #endif
62