tsan: fix strerror interceptor (eliminate false positives)
[blocksruntime.git] / lib / assembly.h
blob3d8e50dc8ad992895e302ffc42c76cf506c3acf4
1 /* ===-- assembly.h - compiler-rt assembler support macros -----------------===
3 * The LLVM Compiler Infrastructure
5 * This file is dual licensed under the MIT and the University of Illinois Open
6 * Source Licenses. See LICENSE.TXT for details.
8 * ===----------------------------------------------------------------------===
10 * This file defines macros for use in compiler-rt assembler source.
11 * This file is not part of the interface of this library.
13 * ===----------------------------------------------------------------------===
16 #ifndef COMPILERRT_ASSEMBLY_H
17 #define COMPILERRT_ASSEMBLY_H
19 #if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
20 #define SEPARATOR @
21 #else
22 #define SEPARATOR ;
23 #endif
25 #if defined(__APPLE__)
26 #define HIDDEN_DIRECTIVE .private_extern
27 #define LOCAL_LABEL(name) L_##name
28 #define FILE_LEVEL_DIRECTIVE .subsections_via_symbols
29 #else
30 #define HIDDEN_DIRECTIVE .hidden
31 #define LOCAL_LABEL(name) .L_##name
32 #define FILE_LEVEL_DIRECTIVE
33 #endif
35 #define GLUE2(a, b) a ## b
36 #define GLUE(a, b) GLUE2(a, b)
37 #define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
39 #ifdef VISIBILITY_HIDDEN
40 #define DECLARE_SYMBOL_VISIBILITY(name) \
41 HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR
42 #else
43 #define DECLARE_SYMBOL_VISIBILITY(name)
44 #endif
46 #define DEFINE_COMPILERRT_FUNCTION(name) \
47 FILE_LEVEL_DIRECTIVE SEPARATOR \
48 .globl SYMBOL_NAME(name) SEPARATOR \
49 DECLARE_SYMBOL_VISIBILITY(name) \
50 SYMBOL_NAME(name):
52 #define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
53 .globl SYMBOL_NAME(name) SEPARATOR \
54 HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR \
55 SYMBOL_NAME(name):
57 #define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
58 .globl name SEPARATOR \
59 HIDDEN_DIRECTIVE name SEPARATOR \
60 name:
62 #define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target) \
63 .globl SYMBOL_NAME(name) SEPARATOR \
64 .set SYMBOL_NAME(name), SYMBOL_NAME(target) SEPARATOR
66 #if defined (__ARM_EABI__)
67 # define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name) \
68 DEFINE_COMPILERRT_FUNCTION_ALIAS(aeabi_name, name)
69 #else
70 # define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name)
71 #endif
73 #endif /* COMPILERRT_ASSEMBLY_H */