On 13/03/2025 4:48 pm, Jan Beulich wrote:
> On 13.03.2025 17:39, Andrew Cooper wrote:
>> On 13/03/2025 1:54 pm, Jan Beulich wrote:
>>> When determining the symbol for a given address (e.g. for the %pS
>>> logging format specifier), so far the size of a symbol (function) was
>>> assumed to be everything until the next symbol. There may be gaps
>>> though, which would better be recognizable in output (often suggesting
>>> something odd is going on).
>> Do you have an example %pS for this new case?
> I haven't encountered one yet, and I wasn't particularly trying to
> make up one.
>
>>> Insert "fake" end symbols in the address table, accompanied by zero-
>>> length type/name entries (to keep lookup reasonably close to how it
>>> was).
>>>
>>> Note however that this, with present GNU binutils, won't work for
>>> xen.efi: The linker loses function sizes (they're not part of a normal
>>> symbol table entry), and hence nm has no way of reporting them.
>> By "present GNU binutils", does this mean that you've got a fix in mind
>> (or in progress), or that it's an open problem to be solved?
> The latter; I can't even tell yet whether this is legitimate to be
> arranged for in a PE executable's symbol table.

In which case, I'd suggest using the phrase "open problem" to make it
clear that there's no fix.

>
>>> Requested-by: Andrew Cooper <andrew.coop...@citrix.com>
>>> Signed-off-by: Jan Beulich <jbeul...@suse.com>
>>> ---
>>> Note: Style-wise this is a horrible mix. I'm trying to match styles with
>>>       what's used in the respective functions.
>>>
>>> Older GNU ld retains section symbols, which nm then also lists. Should
>>> we perhaps strip those as we read in nm's output? They don't provide any
>>> useful extra information, as our linker scripts add section start
>>> symbols anyway. (For the purposes here, luckily such section symbols are
>>> at least emitted without size.)
>> Will symbols_lookup() ever produce these?  If not, it might be better to
>> ignore the problem.
>>
>> Taking extra logic to work around a benign issue in older toolchains
>> isn't necessarily ideal.
> Afaict it's unpredictable from Xen's pov. All depends on the order of
> entries after we sorted the table by address. The only criteria the
> tool's compare_value() applies for multiple symbols at the same address
> is to prefer global over local. As long as the first symbol in a section
> is global, we wouldn't see section symbols as lookup result.

Hmm, thinking about it, the global-ness does cause problems.

e.g. we get _stextentry()+x rather than restore_all_guest()+x, and RAG
is more likely than some to show up in a backtrace.

So maybe we should strip section symbols, even the explicit linker ones,
from the symbol table.  I can't offhand think of a case where we want to
look up a symbol by address and get back a section name.

(Feel free to leave this as a todo.  I wasn't intending to scope creep
like this, but it would be a nice to have.)

~Andrew

Reply via email to