mirror of
https://github.com/torvalds/linux
synced 2026-07-22 18:20:51 +09:00
Commit1ba9f89794("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros") added .text and made .data, .bss, and .rodata sections unconditional in the module linker script, but without an explicit address like the other sections in the same file. When linking modules with ld.bfd -r, sections defined without an address inherit the location counter, resulting in non-zero sh_addr values in the .ko. Relocatable objects are expected to have sh_addr=0 for these sections and these non-zero addresses confuse elfutils and have been reported to cause segmentation faults in SystemTap [1]. Add the 0 address specifier to all sections in module.lds, including the .codetag.* sections via MOD_SEPARATE_CODETAG_SECTIONS macro. Link: https://sourceware.org/bugzilla/show_bug.cgi?id=33958 Fixes:1ba9f89794("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros") Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com> Reviewed-by: Petr Pavlu <petr.pavlu@suse.com> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
34 lines
937 B
C
34 lines
937 B
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
#ifndef __ASM_GENERIC_CODETAG_LDS_H
|
|
#define __ASM_GENERIC_CODETAG_LDS_H
|
|
|
|
#ifdef CONFIG_MEM_ALLOC_PROFILING
|
|
#define IF_MEM_ALLOC_PROFILING(...) __VA_ARGS__
|
|
#else
|
|
#define IF_MEM_ALLOC_PROFILING(...)
|
|
#endif
|
|
|
|
#define SECTION_WITH_BOUNDARIES(_name) \
|
|
. = ALIGN(8); \
|
|
__start_##_name = .; \
|
|
KEEP(*(_name)) \
|
|
__stop_##_name = .;
|
|
|
|
#define CODETAG_SECTIONS() \
|
|
IF_MEM_ALLOC_PROFILING(SECTION_WITH_BOUNDARIES(alloc_tags))
|
|
|
|
#define MOD_SEPARATE_CODETAG_SECTION(_name) \
|
|
.codetag.##_name 0 : { \
|
|
SECTION_WITH_BOUNDARIES(_name) \
|
|
}
|
|
|
|
/*
|
|
* For codetags which might be used after module unload, therefore might stay
|
|
* longer in memory. Each such codetag type has its own section so that we can
|
|
* unload them individually once unused.
|
|
*/
|
|
#define MOD_SEPARATE_CODETAG_SECTIONS() \
|
|
IF_MEM_ALLOC_PROFILING(MOD_SEPARATE_CODETAG_SECTION(alloc_tags))
|
|
|
|
#endif /* __ASM_GENERIC_CODETAG_LDS_H */
|