| SECTIONS { | |
| #ifdef CONFIG_ARM64_MODULE_PLTS | |
| .plt 0 (NOLOAD) : { BYTE(0) } | |
| .init.plt 0 (NOLOAD) : { BYTE(0) } | |
| .text.ftrace_trampoline 0 (NOLOAD) : { BYTE(0) } | |
| #ifdef CONFIG_CRYPTO_FIPS140 | |
| /* | |
| * The FIPS140 module incorporates copies of builtin code, which gets | |
| * integrity checked at module load time, and registered in a way that | |
| * ensures that the integrity checked versions supersede the builtin | |
| * ones. These objects are compiled as builtin code, and so their init | |
| * hooks will be exported from the binary in the same way as builtin | |
| * initcalls are, i.e., annotated with a level that defines the order | |
| * in which the hooks are expected to be invoked. | |
| */ | |
| #define INIT_CALLS_LEVEL(level) \ | |
| KEEP(*(.initcall##level##.init*)) \ | |
| KEEP(*(.initcall##level##s.init*)) | |
| .initcalls : { | |
| *(.initcalls._start) | |
| INIT_CALLS_LEVEL(0) | |
| INIT_CALLS_LEVEL(1) | |
| INIT_CALLS_LEVEL(2) | |
| INIT_CALLS_LEVEL(3) | |
| INIT_CALLS_LEVEL(4) | |
| INIT_CALLS_LEVEL(5) | |
| INIT_CALLS_LEVEL(rootfs) | |
| INIT_CALLS_LEVEL(6) | |
| INIT_CALLS_LEVEL(7) | |
| *(.initcalls._end) | |
| } | |
| #endif | |
| #endif | |
| #ifdef CONFIG_KASAN_SW_TAGS | |
| /* | |
| * Outlined checks go into comdat-deduplicated sections named .text.hot. | |
| * Because they are in comdats they are not combined by the linker and | |
| * we otherwise end up with multiple sections with the same .text.hot | |
| * name in the .ko file. The kernel module loader warns if it sees | |
| * multiple sections with the same name so we use this sections | |
| * directive to force them into a single section and silence the | |
| * warning. | |
| */ | |
| .text.hot : { *(.text.hot) } | |
| #endif | |
| } |