1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * U-Boot - linkage.h
4  *
5  * Copyright (c) 2005-2007 Analog Devices Inc.
6  */
7 
8 #ifndef _LINUX_LINKAGE_H
9 #define _LINUX_LINKAGE_H
10 
11 #include <asm/linkage.h>
12 
13 /* Some toolchains use other characters (e.g. '`') to mark new line in macro */
14 #ifndef ASM_NL
15 #define ASM_NL		 ;
16 #endif
17 
18 #ifdef __cplusplus
19 #define CPP_ASMLINKAGE		extern "C"
20 #else
21 #define CPP_ASMLINKAGE
22 #endif
23 
24 #ifndef asmlinkage
25 #define asmlinkage CPP_ASMLINKAGE
26 #endif
27 
28 #define SYMBOL_NAME_STR(X)	#X
29 #define SYMBOL_NAME(X)		X
30 #ifdef __STDC__
31 #define SYMBOL_NAME_LABEL(X)	X##:
32 #else
33 #define SYMBOL_NAME_LABEL(X)	X:
34 #endif
35 
36 #ifndef __ALIGN
37 #define __ALIGN .align		4
38 #endif
39 
40 #ifndef __ALIGN_STR
41 #define __ALIGN_STR		".align 4"
42 #endif
43 
44 #ifdef __ASSEMBLY__
45 
46 #define ALIGN			__ALIGN
47 #define ALIGN_STR		__ALIGN_STR
48 
49 #define LENTRY(name) \
50 	ALIGN ASM_NL \
51 	SYMBOL_NAME_LABEL(name)
52 
53 #define ENTRY(name) \
54 	.globl SYMBOL_NAME(name) ASM_NL \
55 	LENTRY(name)
56 
57 #define WEAK(name) \
58 	.weak SYMBOL_NAME(name) ASM_NL \
59 	LENTRY(name)
60 
61 #ifndef END
62 #define END(name) \
63 	.size name, .-name
64 #endif
65 
66 #ifndef ENDPROC
67 #define ENDPROC(name) \
68 	.type name STT_FUNC ASM_NL \
69 	END(name)
70 #endif
71 
72 #endif
73 
74 #endif
75