forked from OSchip/llvm-project
62 lines
1.8 KiB
C
62 lines
1.8 KiB
C
|
/* ===-- int_util.c - Implement internal utilities --------------------------===
|
||
|
*
|
||
|
* The LLVM Compiler Infrastructure
|
||
|
*
|
||
|
* This file is dual licensed under the MIT and the University of Illinois Open
|
||
|
* Source Licenses. See LICENSE.TXT for details.
|
||
|
*
|
||
|
* ===----------------------------------------------------------------------===
|
||
|
*/
|
||
|
|
||
|
#include "int_util.h"
|
||
|
#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
|
||
|
|
||
|
extern void panic(const char *, ...) __attribute__((noreturn));
|
||
|
#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 */
|
||
|
extern void __assert_rtn(const char *func, const char *file,
|
||
|
int line, const char * message) __attribute__((noreturn));
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
__attribute__((weak))
|
||
|
__attribute__((visibility("hidden")))
|
||
|
#endif
|
||
|
void compilerrt_abort_impl(const char *file, int line, const char *function) {
|
||
|
__assert_rtn(function, file, line, "libcompiler_rt abort");
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
/* Get the system definition of abort() */
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
__attribute__((weak))
|
||
|
__attribute__((visibility("hidden")))
|
||
|
#endif
|
||
|
void compilerrt_abort_impl(const char *file, int line, const char *function) {
|
||
|
abort();
|
||
|
}
|
||
|
|
||
|
#endif
|