llvm-project

Форк
0
63 строки · 1.9 Кб
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

22
NORETURN extern void panic(const char *, ...);
23
#ifndef _WIN32
24
__attribute__((visibility("hidden")))
25
#endif
26
void __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
33
NORETURN extern void __assert_rtn(const char *func, const char *file, int line,
34
                                  const char *message);
35

36
__attribute__((weak))
37
__attribute__((visibility("hidden")))
38
void __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
52
void __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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.