xref: /openbmc/u-boot/include/linux/linkage.h (revision e8f80a5a)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2273d11eaSMacpaul Lin /*
3a187559eSBin Meng  * U-Boot - linkage.h
4273d11eaSMacpaul Lin  *
5273d11eaSMacpaul Lin  * Copyright (c) 2005-2007 Analog Devices Inc.
6273d11eaSMacpaul Lin  */
7273d11eaSMacpaul Lin 
8273d11eaSMacpaul Lin #ifndef _LINUX_LINKAGE_H
9273d11eaSMacpaul Lin #define _LINUX_LINKAGE_H
10273d11eaSMacpaul Lin 
11273d11eaSMacpaul Lin #include <asm/linkage.h>
12273d11eaSMacpaul Lin 
13950cb9bbSChen Gang /* Some toolchains use other characters (e.g. '`') to mark new line in macro */
14950cb9bbSChen Gang #ifndef ASM_NL
15950cb9bbSChen Gang #define ASM_NL		 ;
16950cb9bbSChen Gang #endif
17950cb9bbSChen Gang 
18273d11eaSMacpaul Lin #ifdef __cplusplus
19273d11eaSMacpaul Lin #define CPP_ASMLINKAGE		extern "C"
20273d11eaSMacpaul Lin #else
21273d11eaSMacpaul Lin #define CPP_ASMLINKAGE
22273d11eaSMacpaul Lin #endif
23273d11eaSMacpaul Lin 
24e6126a58SMasahiro Yamada #ifndef asmlinkage
25273d11eaSMacpaul Lin #define asmlinkage CPP_ASMLINKAGE
26e6126a58SMasahiro Yamada #endif
27273d11eaSMacpaul Lin 
28273d11eaSMacpaul Lin #define SYMBOL_NAME_STR(X)	#X
29273d11eaSMacpaul Lin #define SYMBOL_NAME(X)		X
30273d11eaSMacpaul Lin #ifdef __STDC__
31273d11eaSMacpaul Lin #define SYMBOL_NAME_LABEL(X)	X##:
32273d11eaSMacpaul Lin #else
33273d11eaSMacpaul Lin #define SYMBOL_NAME_LABEL(X)	X:
34273d11eaSMacpaul Lin #endif
35273d11eaSMacpaul Lin 
367245536dSAneesh V #ifndef __ALIGN
37273d11eaSMacpaul Lin #define __ALIGN .align		4
387245536dSAneesh V #endif
397245536dSAneesh V 
407245536dSAneesh V #ifndef __ALIGN_STR
41273d11eaSMacpaul Lin #define __ALIGN_STR		".align 4"
427245536dSAneesh V #endif
43273d11eaSMacpaul Lin 
44273d11eaSMacpaul Lin #ifdef __ASSEMBLY__
45273d11eaSMacpaul Lin 
46273d11eaSMacpaul Lin #define ALIGN			__ALIGN
47273d11eaSMacpaul Lin #define ALIGN_STR		__ALIGN_STR
48273d11eaSMacpaul Lin 
49273d11eaSMacpaul Lin #define LENTRY(name) \
50950cb9bbSChen Gang 	ALIGN ASM_NL \
51273d11eaSMacpaul Lin 	SYMBOL_NAME_LABEL(name)
52273d11eaSMacpaul Lin 
53273d11eaSMacpaul Lin #define ENTRY(name) \
54950cb9bbSChen Gang 	.globl SYMBOL_NAME(name) ASM_NL \
55273d11eaSMacpaul Lin 	LENTRY(name)
56273d11eaSMacpaul Lin 
57ec4fa567SDavid Feng #define WEAK(name) \
58950cb9bbSChen Gang 	.weak SYMBOL_NAME(name) ASM_NL \
59ec4fa567SDavid Feng 	LENTRY(name)
60ec4fa567SDavid Feng 
61273d11eaSMacpaul Lin #ifndef END
62273d11eaSMacpaul Lin #define END(name) \
63273d11eaSMacpaul Lin 	.size name, .-name
64273d11eaSMacpaul Lin #endif
65273d11eaSMacpaul Lin 
66273d11eaSMacpaul Lin #ifndef ENDPROC
67273d11eaSMacpaul Lin #define ENDPROC(name) \
68950cb9bbSChen Gang 	.type name STT_FUNC ASM_NL \
69273d11eaSMacpaul Lin 	END(name)
70273d11eaSMacpaul Lin #endif
71273d11eaSMacpaul Lin 
72273d11eaSMacpaul Lin #endif
73273d11eaSMacpaul Lin 
74273d11eaSMacpaul Lin #endif
75