17b453719SMasahiro Yamada /* SPDX-License-Identifier: GPL-2.0-only */ 27b453719SMasahiro Yamada /* 37b453719SMasahiro Yamada * Please do not include this explicitly. 47b453719SMasahiro Yamada * This is used by C files generated by modpost. 57b453719SMasahiro Yamada */ 67b453719SMasahiro Yamada 77b453719SMasahiro Yamada #ifndef __LINUX_EXPORT_INTERNAL_H__ 87b453719SMasahiro Yamada #define __LINUX_EXPORT_INTERNAL_H__ 97b453719SMasahiro Yamada 107b453719SMasahiro Yamada #include <linux/compiler.h> 117b453719SMasahiro Yamada #include <linux/types.h> 127b453719SMasahiro Yamada 13ddb5cdbaSMasahiro Yamada #if defined(CONFIG_HAVE_ARCH_PREL32_RELOCATIONS) 14ddb5cdbaSMasahiro Yamada /* 15ddb5cdbaSMasahiro Yamada * relative reference: this reduces the size by half on 64-bit architectures, 16ddb5cdbaSMasahiro Yamada * and eliminates the need for absolute relocations that require runtime 17ddb5cdbaSMasahiro Yamada * processing on relocatable kernels. 18ddb5cdbaSMasahiro Yamada */ 19f6847807SHelge Deller #define __KSYM_ALIGN ".balign 4" 20ddb5cdbaSMasahiro Yamada #define __KSYM_REF(sym) ".long " #sym "- ." 21ddb5cdbaSMasahiro Yamada #elif defined(CONFIG_64BIT) 22f6847807SHelge Deller #define __KSYM_ALIGN ".balign 8" 23ddb5cdbaSMasahiro Yamada #define __KSYM_REF(sym) ".quad " #sym 24ddb5cdbaSMasahiro Yamada #else 25f6847807SHelge Deller #define __KSYM_ALIGN ".balign 4" 26ddb5cdbaSMasahiro Yamada #define __KSYM_REF(sym) ".long " #sym 27ddb5cdbaSMasahiro Yamada #endif 28ddb5cdbaSMasahiro Yamada 29ddb5cdbaSMasahiro Yamada /* 30ddb5cdbaSMasahiro Yamada * For every exported symbol, do the following: 31ddb5cdbaSMasahiro Yamada * 32ddb5cdbaSMasahiro Yamada * - Put the name of the symbol and namespace (empty string "" for none) in 33ddb5cdbaSMasahiro Yamada * __ksymtab_strings. 34ddb5cdbaSMasahiro Yamada * - Place a struct kernel_symbol entry in the __ksymtab section. 35ddb5cdbaSMasahiro Yamada * 36ddb5cdbaSMasahiro Yamada * Note on .section use: we specify progbits since usage of the "M" (SHF_MERGE) 37ddb5cdbaSMasahiro Yamada * section flag requires it. Use '%progbits' instead of '@progbits' since the 38ddb5cdbaSMasahiro Yamada * former apparently works on all arches according to the binutils source. 39ddb5cdbaSMasahiro Yamada */ 40ddb5cdbaSMasahiro Yamada #define __KSYMTAB(name, sym, sec, ns) \ 41ddb5cdbaSMasahiro Yamada asm(" .section \"__ksymtab_strings\",\"aMS\",%progbits,1" "\n" \ 42ddb5cdbaSMasahiro Yamada "__kstrtab_" #name ":" "\n" \ 43ddb5cdbaSMasahiro Yamada " .asciz \"" #name "\"" "\n" \ 44ddb5cdbaSMasahiro Yamada "__kstrtabns_" #name ":" "\n" \ 45ddb5cdbaSMasahiro Yamada " .asciz \"" ns "\"" "\n" \ 46ddb5cdbaSMasahiro Yamada " .previous" "\n" \ 47ddb5cdbaSMasahiro Yamada " .section \"___ksymtab" sec "+" #name "\", \"a\"" "\n" \ 48f6847807SHelge Deller __KSYM_ALIGN "\n" \ 49ddb5cdbaSMasahiro Yamada "__ksymtab_" #name ":" "\n" \ 50ddb5cdbaSMasahiro Yamada __KSYM_REF(sym) "\n" \ 51ddb5cdbaSMasahiro Yamada __KSYM_REF(__kstrtab_ ##name) "\n" \ 52ddb5cdbaSMasahiro Yamada __KSYM_REF(__kstrtabns_ ##name) "\n" \ 53ddb5cdbaSMasahiro Yamada " .previous" "\n" \ 54ddb5cdbaSMasahiro Yamada ) 55ddb5cdbaSMasahiro Yamada 569e0be3f5SLukas Bulwahn #if defined(CONFIG_PARISC) && defined(CONFIG_64BIT) 5708700ec7SMasahiro Yamada #define KSYM_FUNC(name) P%name 58ddb5cdbaSMasahiro Yamada #else 59ddb5cdbaSMasahiro Yamada #define KSYM_FUNC(name) name 60ddb5cdbaSMasahiro Yamada #endif 61ddb5cdbaSMasahiro Yamada 62ddb5cdbaSMasahiro Yamada #define KSYMTAB_FUNC(name, sec, ns) __KSYMTAB(name, KSYM_FUNC(name), sec, ns) 63ddb5cdbaSMasahiro Yamada #define KSYMTAB_DATA(name, sec, ns) __KSYMTAB(name, name, sec, ns) 64ddb5cdbaSMasahiro Yamada 657b453719SMasahiro Yamada #define SYMBOL_CRC(sym, crc, sec) \ 66f3304ecdSMasahiro Yamada asm(".section \"___kcrctab" sec "+" #sym "\",\"a\"" "\n" \ 67*753547deSHelge Deller ".balign 4" "\n" \ 68f3304ecdSMasahiro Yamada "__crc_" #sym ":" "\n" \ 69f3304ecdSMasahiro Yamada ".long " #crc "\n" \ 70f3304ecdSMasahiro Yamada ".previous" "\n") 717b453719SMasahiro Yamada 727b453719SMasahiro Yamada #endif /* __LINUX_EXPORT_INTERNAL_H__ */ 73