xref: /rk3399_rockchip-uboot/include/linux/linkage.h (revision 57dc53a72460e8e301fa1cc7951b41db8e731485)
1273d11eaSMacpaul Lin /*
2*a187559eSBin Meng  * U-Boot - linkage.h
3273d11eaSMacpaul Lin  *
4273d11eaSMacpaul Lin  * Copyright (c) 2005-2007 Analog Devices Inc.
5273d11eaSMacpaul Lin  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
7273d11eaSMacpaul Lin  */
8273d11eaSMacpaul Lin 
9273d11eaSMacpaul Lin #ifndef _LINUX_LINKAGE_H
10273d11eaSMacpaul Lin #define _LINUX_LINKAGE_H
11273d11eaSMacpaul Lin 
12273d11eaSMacpaul Lin #include <asm/linkage.h>
13273d11eaSMacpaul Lin 
14950cb9bbSChen Gang /* Some toolchains use other characters (e.g. '`') to mark new line in macro */
15950cb9bbSChen Gang #ifndef ASM_NL
16950cb9bbSChen Gang #define ASM_NL		 ;
17950cb9bbSChen Gang #endif
18950cb9bbSChen Gang 
19273d11eaSMacpaul Lin #ifdef __cplusplus
20273d11eaSMacpaul Lin #define CPP_ASMLINKAGE		extern "C"
21273d11eaSMacpaul Lin #else
22273d11eaSMacpaul Lin #define CPP_ASMLINKAGE
23273d11eaSMacpaul Lin #endif
24273d11eaSMacpaul Lin 
25e6126a58SMasahiro Yamada #ifndef asmlinkage
26273d11eaSMacpaul Lin #define asmlinkage CPP_ASMLINKAGE
27e6126a58SMasahiro Yamada #endif
28273d11eaSMacpaul Lin 
29273d11eaSMacpaul Lin #define SYMBOL_NAME_STR(X)	#X
30273d11eaSMacpaul Lin #define SYMBOL_NAME(X)		X
31273d11eaSMacpaul Lin #ifdef __STDC__
32273d11eaSMacpaul Lin #define SYMBOL_NAME_LABEL(X)	X##:
33273d11eaSMacpaul Lin #else
34273d11eaSMacpaul Lin #define SYMBOL_NAME_LABEL(X)	X:
35273d11eaSMacpaul Lin #endif
36273d11eaSMacpaul Lin 
377245536dSAneesh V #ifndef __ALIGN
38273d11eaSMacpaul Lin #define __ALIGN .align		4
397245536dSAneesh V #endif
407245536dSAneesh V 
417245536dSAneesh V #ifndef __ALIGN_STR
42273d11eaSMacpaul Lin #define __ALIGN_STR		".align 4"
437245536dSAneesh V #endif
44273d11eaSMacpaul Lin 
45273d11eaSMacpaul Lin #ifdef __ASSEMBLY__
46273d11eaSMacpaul Lin 
47273d11eaSMacpaul Lin #define ALIGN			__ALIGN
48273d11eaSMacpaul Lin #define ALIGN_STR		__ALIGN_STR
49273d11eaSMacpaul Lin 
50273d11eaSMacpaul Lin #define LENTRY(name) \
51950cb9bbSChen Gang 	ALIGN ASM_NL \
52273d11eaSMacpaul Lin 	SYMBOL_NAME_LABEL(name)
53273d11eaSMacpaul Lin 
54273d11eaSMacpaul Lin #define ENTRY(name) \
55950cb9bbSChen Gang 	.globl SYMBOL_NAME(name) ASM_NL \
56273d11eaSMacpaul Lin 	LENTRY(name)
57273d11eaSMacpaul Lin 
58ec4fa567SDavid Feng #define WEAK(name) \
59950cb9bbSChen Gang 	.weak SYMBOL_NAME(name) ASM_NL \
60ec4fa567SDavid Feng 	LENTRY(name)
61ec4fa567SDavid Feng 
62273d11eaSMacpaul Lin #ifndef END
63273d11eaSMacpaul Lin #define END(name) \
64273d11eaSMacpaul Lin 	.size name, .-name
65273d11eaSMacpaul Lin #endif
66273d11eaSMacpaul Lin 
67273d11eaSMacpaul Lin #ifndef ENDPROC
68273d11eaSMacpaul Lin #define ENDPROC(name) \
69950cb9bbSChen Gang 	.type name STT_FUNC ASM_NL \
70273d11eaSMacpaul Lin 	END(name)
71273d11eaSMacpaul Lin #endif
72273d11eaSMacpaul Lin 
73273d11eaSMacpaul Lin #endif
74273d11eaSMacpaul Lin 
75273d11eaSMacpaul Lin #endif
76