[Dwarf-Discuss] variable locations - safe use as lvalues

Frank Ch. Eigler fche@redhat.com
Tue Jan 21 02:21:25 GMT 2020


Hi -

> > - ... and undoubtedly other complications exist!
> 
> Interesting question.

Thanks!

We have been thinking in similar directions generally as y'all.


> Complication 2: The compiler reuses variable locations at the same PC. This
> seems to be a compiler bug.  

(Actually, this could be a valid optimization, e.g.:

           int a = expression;
           int b = expression;
  >>>>>
           /* use/modify a */
           /* use/modify b */

at that point, if $expression is a pure function, a compiler
could evaluate it once and reuse the value.  It could do this
by temporarily storing both a and b in the same register, and
only separating the variables afterwards.

> [...]
> Presumably, a debugger could check that location lists do not
> overlap.

This could nevertheless be a valid heuristic to detect the case.


> Complication 3a: That the value of a variable has been fetched for a
> computation before the debugger modifies it.  This is more complicated. The
> live range of the variable is accurate, but its value has been used before
> the current PC.  DWARF does not include descriptions of data flow or
> indicate where variables are fetched, so there is no information that a
> debugger can use to assure that a modified value is actually used.

Yeah, and in the absence of dataflow metadata, tools like dyninst must
try to reverse-engineer the dataflow in order to perform binary
rewriting.  Is this something way out of forseeable dwarf scope?


> There are a lot of issues with a debugger modifying a program while it is
> running.  A debugger can make essentially unbounded changes to the program
> state.  Some of these may work as expected, some may not, and it is unclear
> how a debugger would be able to know the difference.

This is the key question: how can a tool know what is safe.  While the
trivial case of assuming every write is unsafe is not helpful :-), it
could be okay to have fairly conservative heuristics, known-partial
information, and rely on only clear signals to enable write
operations.


Anyway, it sounds like the next step is on us to analyze & prototype
in a compiler (gcc?).  I'd also appreciate authors of other dwarf
consumer and producer tools to mention whether they have considered
this area, so as to collect a census.


- FChE




More information about the Dwarf-discuss mailing list