1 /* ===-- assembly.h - libUnwind 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 libUnwind assembler source.
11 * This file is not part of the interface of this library.
13 * ===----------------------------------------------------------------------===
16 #ifndef UNWIND_ASSEMBLY_H
17 #define UNWIND_ASSEMBLY_H
19 #if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
21 #elif defined(__arm64__)
27 #if defined(__APPLE__)
28 #define HIDDEN_DIRECTIVE .private_extern
30 #define HIDDEN_DIRECTIVE .hidden
33 #define GLUE2(a, b) a ## b
34 #define GLUE(a, b) GLUE2(a, b)
35 #define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
37 #if defined(__APPLE__)
38 #define SYMBOL_IS_FUNC(name)
39 #elif defined(__ELF__)
41 #define SYMBOL_IS_FUNC(name) .type name,%function
43 #define SYMBOL_IS_FUNC(name) .type name,@function
46 #define SYMBOL_IS_FUNC(name) \
53 #define DEFINE_LIBUNWIND_FUNCTION(name) \
54 .globl SYMBOL_NAME(name) SEPARATOR \
55 SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
58 #define DEFINE_LIBUNWIND_PRIVATE_FUNCTION(name) \
59 .globl SYMBOL_NAME(name) SEPARATOR \
60 HIDDEN_DIRECTIVE SYMBOL_NAME(name) SEPARATOR \
61 SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
64 #endif /* UNWIND_ASSEMBLY_H */