|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8.1 14/27] xsplice, symbols: Implement symbol name resolution on address.
>>> On 25.04.16 at 08:41, <ross.lagerwall@xxxxxxxxxx> wrote:
> On 04/22/2016 10:10 PM, Konrad Rzeszutek Wilk wrote:
>>> As per my earlier reply to Konrad, there must be more to this. I.e.
>>> "normal" local symbols won't get dropped together with relocations
>>> referencing them getting resolved.
>>
>> Correct. These .LCx symbols only cover .rodata.* sections. Any other
>> local symbols:
>>
>> [konrad@x230 x86]$ readelf --symbols prelink.o |grep bad_hypercall
>> 8946: 0000000000145549 0 NOTYPE LOCAL DEFAULT 1
> compat_bad_hypercall
>> 8967: 0000000000145c79 0 NOTYPE LOCAL DEFAULT 1 bad_hypercall
>>
>> don't get dropped and do show up in the binary (nm --defined finds them).
>>
>> While .LC matches the type:
>> 9147: 00000000000008c0 0 NOTYPE LOCAL DEFAULT 33 .LC5
>>
>> They are in four other sections:
>> konrad@x230 x86]$ readelf --symbols prelink.o |grep LC | awk '{print
>> $7}' | sort | uniq
>> 22
>> 23
>> 33
>> 34
>>
>> [22] .rodata.str1.1 PROGBITS 0000000000000000 0019d500
>> 000000000000a088 0000000000000001 AMS 0 0 1
>> [23] .rodata.str1.8 PROGBITS 0000000000000000 001a7588
>> 0000000000020a31 0000000000000001 AMS 0 0 8
>> [33] .init.rodata.str1 PROGBITS 0000000000000000 001d5a78
>> 0000000000000a1e 0000000000000001 AMS 0 0 1
>> [34] .init.rodata.str1 PROGBITS 0000000000000000 001d6498
>> 0000000000002331 0000000000000001 AMS 0 0 8
>>
>
> With some helpful investigation by Konrad, I've found this snippet in
> binutils:
>
> /* See if we are discarding symbols with this name. */
> if ((flinfo->info->strip == strip_some
> && (bfd_hash_lookup (flinfo->info->keep_hash, name, FALSE, FALSE)
> == NULL))
> || (((flinfo->info->discard == discard_sec_merge
> && (isec->flags & SEC_MERGE)
> && !bfd_link_relocatable (flinfo->info))
> || flinfo->info->discard == discard_l)
> && bfd_is_local_label_name (input_bfd, name)))
> continue;
>
> The default value for info->discard is discard_sec_merge, so:
> Local labels referring to a mergeable section are discarded when the
> output is not relocatable.
> A local label is defined as:
> 1) Starts with .X (for i386 unixware compilers)
> 2) Starts with .L
> 3) Starts with .. (for SRV4 compilers)
> 4) Starts with _.L_ (for older buggy GCC)
> 5) Matches L0^A.*
> 6) Matches L[0-9]+{^A|^B}[0-9]* (for assembler generated local labels)
>
> So to match what is used by the default hypervisor build, I think we
> should change the check to discard when the symbol matches (2), (5), or
> (6) above and refers to a mergeable section. The above rules are defined
> in _bfd_elf_is_local_label_name and elf_i386_is_local_label_name.
Yes. (Note that we don't really care about
elf_i386_is_local_label_name(), as we don't have a 32-bit
hypervisor anymore.)
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |