[Dwarf-discuss] performance tools and inverted location lists
Ben Woodard
woodard@redhat.com
Fri Jun 16 15:28:45 GMT 2023
I was looking at 2 level location tables
https://dwarfstd.org/issues/140906.1.html and can see how it could
improve things there. One thing that I noticed about it was that it was
based on some prior art done in HP-UX.
A nut that I have been trying to crack for a few years but haven't
really figured out comes from the performance tools, binary analysis
people and I could even make use of it for my ABI work. They would
really like something that I've been calling "inverted location lists".
Location lists are basically a function (yes I know it is technically a
relation but let's not quibble about that right now):
f( PC, "variable") -> location description
This totally makes sense in the context of a debugger where the context
of the lookup includes the PC, and the user inputs the symbolic name of
the variable. The point that I try to make is DWARF is not just for
debuggers anymore. A much broader range of consumers is emerging.
In the context of performance tools, they need:
f( PC, <concrete> location) -> symbolic name
The reason why I specify "concrete" location is because it is never
going to be a literal constant or an implicit or a DWARF expression or
any of the other things along those lines. It is going to be an address
or a register, things that have concrete existence.
Here are the use cases for this that have come up:
* For performance tools, they have some piece of code which is not
performing as it should. The tools show them that they are getting a
large number of cache misses between this PC and another PC. They
can disassemble the machine code and they see a handful of
instructions. To be able to figure out what is wrong they need to
associate the operands of these instructions to what they refer to
at the source level. Doing this disassembled optimized machine code
and then associating the data accesses within it back to constructs
within the source language really puts this level of analysis is the
domain of experts and must be done by hand. Because of the limited
information currently provided by DWARF it is not something that can
be coded into a tool.
* Within ABI analysis there are a few cases where compilation options
can change the calling convention of a function sufficiently enough
that it can create an ABI mismatch. The simple example that
illustrates the point is SSE. You can pass vector operands by value
in vector registers. However, if you compile a program without SSE
then it is passed by reference. So in the ABI testing program, if I
take the locations of the formal parameters at the call site and
then use an inverted location list to look up what variables exist
at those locations in the called function, if they don't match then
I have an ABI problem.
* One binary analysis use case is quite similar to the ABI use case,
they see a call instruction, they can look up the target of the call
to find the function prototype. From that they can figure out where
the parameters to the function call are at the time of the call.
However, they want to know in the calling scope what symbolic name
in the source language for the parameter in a particular location at
the time of the call. Simple example: find all the examples of
"dlopen" calls - what library name is being opened, is it something
that we can determine from static analysis or is it something read
from a config file...
What all three of us have tried doing with limited success is taking the
location list data and then inverting the mappings. The problem is that
this is far from complete and generating that data is very
computationally expensive.
I've looked for prior art to see if someone had come up with a solution
to this but I haven't found any. The allusion to the HP-UX two level
line maps is something that I had never come across before. Since the
combined experience of this group is much deeper than what I have, does
anybody know of any prior art that I can use as a basis for a DWARF
feature enhancement issue?
-ben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.dwarfstd.org/pipermail/dwarf-discuss/attachments/20230616/bd9e9b29/attachment.htm>
More information about the Dwarf-discuss
mailing list