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 <[email protected]>
>> ---
>>  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

Reply via email to