Question about ADDR(SECTION) of ld in document
Cao jin
caoj.fnst@cn.fujitsu.com
Sun Nov 11 11:41:00 GMT 2018
Hi Nick
Sorry for late and thanks very much for your demonstration.
On 11/7/18 12:40 AM, Nick Clifton wrote:
> Hi Cao,
>
>> 'ADDR(SECTION)'
>> Return the address (VMA) of the named SECTION. Your script must
>> previously have defined the location of that section. In the
>> following example, 'start_of_output_1', 'symbol_1' and 'symbol_2'
>> are assigned equivalent values, except that 'symbol_1' will be
>> relative to the '.output1' section while the other two will be
>> absolute:
>> SECTIONS { ...
>> .output1 :
>> {
>> start_of_output_1 = ABSOLUTE(.);
>> ...
>> }
>> .output :
>> {
>> symbol_1 = ADDR(.output1);
>> symbol_2 = start_of_output_1;
>> }
>> ... }
>>
>> My intuition tell me the symbol_1's value is relative to the ".output"
>> section, not ".output1", which is also the offset inside ".output", and
>> symbol_2's value is the same as symbol_1.
>
> It is non-intuitive, I agree. But the documentation is correct. If you
> look at the symbol table qfter linking something with the above linker
> script you will see that symbol_1 is actually set to be relative to the
> .output1 section, not the .output section. This is despite the fact that
> it is defined in the .output section.
>
> For example:
>
> % readelf --syms --wide --sections a.out
> Section Headers:
> [Nr] Name Type Address Off Size ES Flg Lk Inf Al
> [ 1] .output2 PROGBITS 0000000000000000 200000 000004 00 WA 0 0 1
> [ 2] .output1 PROGBITS 0000000000000004 200004 000004 00 WA 0 0 1
> [ 3] .output PROGBITS 0000000000000008 200008 00000c 00 WA 0 0 1
>
> Symbol table '.symtab' contains 9 entries:
> Num: Value Size Type Bind Vis Ndx Name
> 4: 0000000000000004 0 NOTYPE GLOBAL DEFAULT ABS start_of_output_1
> 5: 0000000000000004 0 NOTYPE GLOBAL DEFAULT 2 symbol_1
> 6: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 3 symbol_2
>
> Note that the "Ndx" field of symbol_1 is 2 (ie the .output1 section)
> whereas the Ndx field of symbol_2 is 3 (ie the .output section).
>
> (I am using a slightly tweaked version of the linker script from the documentation
> which is why some of the actual values may not be what you expect).
>
I did the test as you did, it does shows the same as yours. It looks
like the confusing point is what does the "relative" mean exactly, after
looking at st_shndx of `man elf`, I can understand it a little bit more,
but still not clear how it would be used:(
Sincerely,
Cao jin
More information about the Binutils
mailing list