Re: [PATCH v2] module.lds,codetag: force 0 sh_addr for sections

Petr Pavlu
2026-03-16T14:23:22Z

On 3/11/26 10:12 PM, Sami Tolvanen wrote:
> On Wed, Mar 04, 2026 at 08:52:37PM -0500, Joe Lawrence wrote:
>> Commit 1ba9f8979426 ("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: 1ba9f8979426 ("vmlinux.lds: Unify TEXT_MAIN, DATA_MAIN, and related macros")
>> Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
>> ---
>> include/asm-generic/codetag.lds.h | 2 +-
>> scripts/module.lds.S | 12 ++++++------
>> 2 files changed, 7 insertions(+), 7 deletions(-)
>>
>> v2:
>> - Update the MOD_SEPARATE_CODETAG_SECTION for .codetag.* as well [Petr]
>
> Do we also need similar changes in any of the architecture-specific module
> linker scripts (arch/*/include/asm/module.lds.h)?

I overlooked these architecture-specific files. I believe we should do
the same for them. For instance, riscv explicitly defines the .plt, .got
and .got.plt sections, and they have misleading addresses:

$ readelf -t fs/xfs/xfs.ko
[...]
Section Headers:
[Nr] Name
Type Address Offset Link
Size EntSize Info Align
Flags
[...]
[48] __versions
PROGBITS 0000000000000000 0000000000194e90 0
0000000000007900 0000000000000000 0 8
[0000000000000002]: ALLOC
[49] .plt
PROGBITS 0000000000007900 000000000019c790 0
0000000000000001 0000000000000000 0 1
[0000000000000006]: ALLOC, EXEC
[50] .got
PROGBITS 0000000000007901 000000000019c791 0
0000000000000001 0000000000000000 0 1
[0000000000000003]: WRITE, ALLOC
[51] .got.plt
PROGBITS 0000000000007902 000000000019c792 0
0000000000000001 0000000000000000 0 1
[0000000000000002]: ALLOC
[...]

Nonetheless, this can be done separately. I think fixes for these files
should better go through architecture-specific trees anyway.

I can check the individual architectures and prepare the necessary
patches, unless someone else is already looking into this or wants to
take a look.

--
Thanks,
Petr