[PATCH,V4 9/9] ld: bfd: sframe: Update section size also for relocatable links

Jan Beulich jbeulich@suse.com
Fri Jun 27 08:00:32 GMT 2025
On 19.06.2025 08:24, Indu Bhagat wrote:
> From: Jens Remus <jremus@linux.ibm.com>
> 
> For relocatable links the output .sframe section size may be wrong.
> This can be observed when dumping the SFrame information from the x86-64
> sframe-reloc-1 test:
> 
> Name              Address          Off    Size
> .sframe           0000000000000000 000110 00007f
> 
> Offset            Type               Symbol's Value  Symbol's Name + Addend
> 000000000000001c  R_X86_64_PC32      0000000000000000 .text + 1c
> 0000000000000030  R_X86_64_PC32      0000000000000000 .text + 65
> 
> 0x00000000 e2de0201 0300f800 02000000 08000000 ................
> 0x00000010 1e000000 00000000 28000000 00000000 ........(.......
> 0x00000020 35000000 00000000 04000000 00000000 5...............
> 0x00000030 00000000 25000000 0f000000 04000000 ....%...........
>             offset 1st FRE---^^^^^^^^ ^^^^^^^^---number of FREs
> 0x00000040 00000000 00030801 0510f004 0410f034 ...............4
> FDE info---^^      | begin of FDEs
> 0x00000050 0508f000 03080105 10f00404 10f02405 ..............$.
>                  11111112222222223333333334444---FRE 1, 2, 3, 4
> 0x00000060 08f00000 00000000 00000000 00000000 ................
>            4444^^^^...
> 0x00000070 00000000 00000000 00000000 000000   ...............
>                                    ...^^^^^^---excessive section
> 
> When running the x86-64 test cross build on a big-endian system, such
> as s390x, objdump and readelf fail to dump the SFrame information with
> the following error message:
> 
> Error: SFrame decode failure: Buffer does not contain SFrame data.
> 
> This is because the following check in flip_sframe() fails, which gets
> only invoked if the endianness of the SFrame data is different from the
> host system one:
> 
> /* All FDEs and FREs must have been endian flipped by now.  */
> if ((j != ihp->sfh_num_fres) || (bytes_flipped != (buf_size - hdrsz)))
>                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
> With:
> j=8, ihp->sfh_num_fres=8, bytes_flipped=70, buf_size=127, hdrsz=28
> 
> While at it, remove the incorrect code comment.  There is no
> relationship between "do not update size" and the fact that the
> "contents have not been relocated".
> 
> bfd/
> 	* elf-sframe.c (_bfd_elf_write_section_sframe): Update section
> 	size also for relocatable links.
> 
> Signed-off-by: Jens Remus <jremus@linux.ibm.com>

Okay, provided my understanding is correct that Jens' subsequent reply
indicates an independent issue, not one with the change here.

Jan


More information about the Binutils mailing list