[PATCH, V4 9/9] ld: bfd: sframe: Update section size also for relocatable links
Jens Remus
jremus@linux.ibm.com
Wed Jun 25 11:43:09 GMT 2025
More information about the Binutils mailing list
Wed Jun 25 11:43:09 GMT 2025
- Previous message (by thread): [PATCH, V4 9/9] ld: bfd: sframe: Update section size also for relocatable links
- Next message (by thread): [PATCH, V4 9/9] ld: bfd: sframe: Update section size also for relocatable links
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello Indu! On 19.06.2025 08:24, Indu Bhagat via Binutils wrote: > From: Jens Remus <jremus@linux.ibm.com> > > For relocatable links the output .sframe section size may be wrong. ... > 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> > diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c > index 0a2c4695c21..6dfe7053c73 100644 > --- a/bfd/elf-sframe.c > +++ b/bfd/elf-sframe.c > @@ -665,13 +665,11 @@ _bfd_elf_write_section_sframe (bfd *abfd, struct bfd_link_info *info) > (file_ptr) sec->output_offset, > sec->size)) > retval = false; > - else if (!bfd_link_relocatable (info)) > + else > { > Elf_Internal_Shdr *hdr = &elf_section_data (sec)->this_hdr; > hdr->sh_size = sec->size; > } > - /* For relocatable links, do not update the section size as the section > - contents have not been relocated. */ > > sframe_encoder_free (&sfe_ctx); In the process of re-creating my Glibc libc.so SFrame statistics for V3 of my s390x sframe support series I noticed that there are multiple linker errors regarding the .sframe section in Glibc Scrt1.o (at lest on s390x): ld: error in .../glibc/build-sframe/csu/Scrt1.o(.sframe); no .sframe will be created The reason is "missing SFrame decoder context". Dumping the Scrt1.o .sframe section reveals that it is "empty" (zeroed): $ readelf -WS -x .sframe --sframe build-sframe/csu/Scrt1.o Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 6] .sframe PROGBITS 0000000000000000 0000b8 000020 00 A 0 0 8 Hex dump of section '.sframe': 0x00000000 00000000 00000000 00000000 00000000 ................ 0x00000010 00000000 00000000 00000000 00000000 ................ readelf: Error: SFrame decode failure: Buffer does not contain SFrame data. I immediately thought about this patch. With (only!) this patch applied one of the Glibc links fails as follows: gcc -B/home/jremus/temp/binutils-sframe/bin -Wa,--gsframe -nostdlib -nostartfiles -r -o /home/jremus/git/glibc/build-sframe/elf/librtld.os '-Wl,-(' /home/jremus/git/glibc/build-sframe/elf/dl-allobjs.os /home/jremus/git/glibc/build-sframe/elf/rtld-libc.a -lgcc '-Wl,-)' \ -Wl,-Map,/home/jremus/git/glibc/build-sframe/elf/librtld.os.map gcc -B/home/jremus/temp/binutils-sframe/bin -Wa,--gsframe -nostdlib -nostartfiles -shared -o /home/jremus/git/glibc/build-sframe/elf/ld.so.new \ -Wl,-z,relro -Wl,-z,defs \ \ /home/jremus/git/glibc/build-sframe/elf/librtld.os -Wl,--version-script=/home/jremus/git/glibc/build-sframe/ld.map \ -Wl,-soname=ld64.so.1 /home/jremus/temp/binutils-sframe/bin/ld: /home/jremus/git/glibc/build-sframe/elf/librtld.os(.sframe+0x2afc): reloc against `.text': error 4 With error code 4 indicating (note to self: might be worth to improve this error message): /* The address to relocate was not within the section supplied. */ bfd_reloc_outofrange, With your series applied (which includes this patch) resolves the issue, as it corrects the rela r_offset values. For this particular object it now causes an empty .sframe section to be output, which is an improvement but still not ideal: $ readelf -WS -x .sframe --sframe build-sframe/csu/Scrt1.o Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [ 0] NULL 0000000000000000 000000 000000 00 0 0 0 [ 6] .sframe PROGBITS 0000000000000000 0000b8 000000 00 A 0 0 8 Section '.sframe' has no data to dump. Section '.sframe' has no debugging data. Any idea how this could be improved to not generate any .sframe section in that case? Not necessarily as part of this series, although it would be a great fit. The reason for the "empty" .sframe section is that Scrt1.o is produced by the following relocatable link and only start.os has a .sframe section, that only consists of a SFrame header (no FDEs and FREs): gcc -Wa,--gsframe -nostdlib -nostartfiles -r -o .../build-sframe/csu/Scrt1.o .../build-sframe/csu/start.os .../build-sframe/csu/abi-note.o .../build-sframe/csu/init.o $ readelf -WS -x .sframe --sframe build-sframe/csu/start.os Section Headers: [Nr] Name Type Address Off Size ES Flg Lk Inf Al [17] .sframe PROGBITS 0000000000000000 000210 000020 00 A 0 0 8 Hex dump of section '.sframe': 0x00000000 dee20200 04000000 00000000 00000000 ................ 0x00000010 00000000 00000000 00000000 00000000 ................ Contents of the SFrame section .sframe: Header : Version: SFRAME_VERSION_2 Flags: NONE Num FDEs: 0 Num FREs: 0 Function Index : $ readelf -x .sframe --sframe build-sframe/csu/abi-note.o readelf: Warning: Section '.sframe' was not dumped because it does not exist readelf: Warning: Section '.sframe' was not dumped because it does not exist $ readelf -x .sframe --sframe build-sframe/csu/init.o readelf: Warning: Section '.sframe' was not dumped because it does not exist readelf: Warning: Section '.sframe' was not dumped because it does not exist The reason for the .sframe section without any FDEs and FREs is: Warning: no SFrame FDE emitted; RA reg 14 in .cfi_undefined Maybe it would be possible to improve the assembler not to generate any .sframe section if there are no FDEs? Not as part of this series of course. Thanks and regards, Jens -- Jens Remus Linux on Z Development (D3303) +49-7031-16-1128 Office jremus@de.ibm.com IBM IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: Böblingen; Registergericht: Amtsgericht Stuttgart, HRB 243294 IBM Data Privacy Statement: https://www.ibm.com/privacy/
- Previous message (by thread): [PATCH, V4 9/9] ld: bfd: sframe: Update section size also for relocatable links
- Next message (by thread): [PATCH, V4 9/9] ld: bfd: sframe: Update section size also for relocatable links
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list