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(__powerpc64__)
21 #define PPC64_OFFS_SRR0 0
22 #define PPC64_OFFS_CR 272
23 #define PPC64_OFFS_XER 280
24 #define PPC64_OFFS_LR 288
25 #define PPC64_OFFS_CTR 296
26 #define PPC64_OFFS_VRSAVE 304
27 #define PPC64_OFFS_FP 312
28 #define PPC64_OFFS_V 824
32 #elif defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
34 #elif defined(__arm64__)
40 #define GLUE2(a, b) a ## b
41 #define GLUE(a, b) GLUE2(a, b)
42 #define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
44 #if defined(__APPLE__)
46 #define SYMBOL_IS_FUNC(name)
47 #define EXPORT_SYMBOL(name)
48 #define HIDDEN_SYMBOL(name) .private_extern name
49 #define NO_EXEC_STACK_DIRECTIVE
51 #elif defined(__ELF__)
54 #define SYMBOL_IS_FUNC(name) .type name,%function
56 #define SYMBOL_IS_FUNC(name) .type name,@function
58 #define EXPORT_SYMBOL(name)
59 #define HIDDEN_SYMBOL(name) .hidden name
61 #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) || \
63 #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits
65 #define NO_EXEC_STACK_DIRECTIVE
70 #define SYMBOL_IS_FUNC(name) \
75 #define EXPORT_SYMBOL2(name) \
76 .section .drectve,"yn" SEPARATOR \
77 .ascii "-export:", #name, "\0" SEPARATOR \
79 #if defined(_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS)
80 #define EXPORT_SYMBOL(name)
82 #define EXPORT_SYMBOL(name) EXPORT_SYMBOL2(name)
84 #define HIDDEN_SYMBOL(name)
86 #define NO_EXEC_STACK_DIRECTIVE
88 #elif defined(__sparc__)
92 #error Unsupported target
96 #define DEFINE_LIBUNWIND_FUNCTION(name) \
97 .globl SYMBOL_NAME(name) SEPARATOR \
98 EXPORT_SYMBOL(name) SEPARATOR \
99 SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
102 #define DEFINE_LIBUNWIND_PRIVATE_FUNCTION(name) \
103 .globl SYMBOL_NAME(name) SEPARATOR \
104 HIDDEN_SYMBOL(SYMBOL_NAME(name)) SEPARATOR \
105 SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR \
109 #if !defined(__ARM_ARCH)
113 #if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5
120 #define JMP(r) mov pc, r
124 #endif /* UNWIND_ASSEMBLY_H */