[PATCH v1] GAS: Keep symbols in their own section [PR27566]

Xiao Zeng zengxiao@eswincomputing.com
Wed Oct 23 06:45:40 GMT 2024


2024-10-23 12:43  Alan Modra <amodra@gmail.com> wrote:
>
>On Tue, Oct 22, 2024 at 05:43:18PM +0800, Xiao Zeng wrote:
>> PR27566 is categorized under ld:
>> <https://sourceware.org/bugzilla/show_bug.cgi?id=27566>
>> but the root cause of this issue is in gas.
>>
>> The following assembly example is provided:
>>         .section        .rodata
>>         .globl Sym
>>         .type  Sym, @object
>>         .set   Sym, . + 0x1200
>>         .size	Sym, 8
>>
>> readelf reads ELF information:
>> Section Headers:
>>   [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
>>   [ 4] .rodata           PROGBITS        0000000000000000 000040 000000 00   A  0   0  1
>>
>> Symbol table '.symtab' contains 7 entries:
>>    Num:    Value          Size Type    Bind   Vis      Ndx Name
>>      6: 0000000000001200     8 OBJECT  GLOBAL DEFAULT    4 Sym
>>
>> The Sym belongs to the .rodata section, but the size of .rodata is 0.
>
>It is not unreasonable to define a symbol relative to some section
>with a value outside of the section.  Automatically extending a
>section to enclose a symbol should only happen in special cases.
>Patch rejected.
>
>--
>Alan Modra

Dear maintainer, thank you for your reply. I think I should provide more detailed information:
The test case <abs-run.c> is in:
<https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/testsuite/gcc.target/riscv/rvv/autovec/unop/abs-run.c;h=f3be58ec4938e1ae8b125da3e6796f8e448b04df;hb=ee030b28004eade3da872e7ae62a526a2940a705>

1 Compilation command:
riscv64-unknown-elf-gcc                                                                                     \
-fno-schedule-insns -mcmodel=medlow -march=rv64gcv_zvfh -mabi=lp64d \
-O3 -mrvv-max-lmul=m4 -mrvv-vector-bits=zvl -ffast-math                            \
-fdata-sections abs-run.c -S -o abs-run.c.upstream.s

Compiler version information:
Supported LTO compression algorithms: zlib
gcc version 15.0.0 20240912 (experimental) (g3f212eabbba-dirty)

2 Assembly command:
riscv64-unknown-elf-as abs-run.c.upstream.s -o abs-run.c.upstream.s.o

3 readelf outputs the information:
riscv64-unknown-elf-readelf -SsW abs-run.c.upstream.o > abs-run.c.upstream.o.txt

Section Headers:
  [Nr] Name              Type                   Address                      Off    Size   ES Flg Lk Inf Al
  [ 9] .rodata           PROGBITS        0000000000000000 000c78 000d80 00   A  0   0  8

Symbol table '.symtab' contains 110 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS abs-run.c
    12: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    9 .LANCHOR0
    13: 0000000000001000     0 NOTYPE  LOCAL  DEFAULT    9 .LANCHOR1

This situation, where a symbol is in a section but the section's size is insufficient to contain the symbol, does exist.

Thanks
Xiao Zeng



More information about the Binutils mailing list