18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __ASM_LINKAGE_H
38c2ecf20Sopenharmony_ci#define __ASM_LINKAGE_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <asm/asm-const.h>
68c2ecf20Sopenharmony_ci#include <linux/stringify.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#define __ALIGN .align 4, 0x07
98c2ecf20Sopenharmony_ci#define __ALIGN_STR __stringify(__ALIGN)
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci/*
128c2ecf20Sopenharmony_ci * Helper macro for exception table entries
138c2ecf20Sopenharmony_ci */
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define __EX_TABLE(_section, _fault, _target)				\
168c2ecf20Sopenharmony_ci	stringify_in_c(.section	_section,"a";)				\
178c2ecf20Sopenharmony_ci	stringify_in_c(.align	8;)					\
188c2ecf20Sopenharmony_ci	stringify_in_c(.long	(_fault) - .;)				\
198c2ecf20Sopenharmony_ci	stringify_in_c(.long	(_target) - .;)				\
208c2ecf20Sopenharmony_ci	stringify_in_c(.quad	0;)					\
218c2ecf20Sopenharmony_ci	stringify_in_c(.previous)
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_ci#define EX_TABLE(_fault, _target)					\
248c2ecf20Sopenharmony_ci	__EX_TABLE(__ex_table, _fault, _target)
258c2ecf20Sopenharmony_ci#define EX_TABLE_DMA(_fault, _target)					\
268c2ecf20Sopenharmony_ci	__EX_TABLE(.dma.ex_table, _fault, _target)
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#endif
29