- When creating a stack frame, we now look at the current function's
state to determine if the last executed statement was a function call.
Still need to determine the call destination in order to look up
the latter function, retrieve its return type, and then request
retrieval of the actual return value if applicable.
- CreateStackTrace() now takes a parameter indicating whether or not
to try and retrieve full frame information. This in turn is passed
on to SpecificImageDebugInfo, where e.g. DwarfImageDebugInfo can
use it to avoid constructing variables and parameters. This is
used by ThreadHandler since, when it requests the top frame for
its stepping calculations, this additional data/work is completely
unnecessary.
- If a template type parameter resolves to a void type, gcc doesn't
actually generate a type attribute for the instantiation, leading
to a crash in CreateType(). Was observable with MemoryDeleter and
others.
A few attribute names that used to be "Audio:..." were changed a
while ago to the more general "Media:...". Applied those changes.
Fixes#9316, thanks ttcoder!
- Add address size parameter to EvaluateExpression since the compilation
unit may not be available (i.e. in non-debug code). Accordingly, also
add accessor for address size to DwarfExpressionEvaluationContext,
and adjust callers accordingly.
- Correctly handle augmentation 'P'. This one consists of a data byte
describing the address encoding, followed by the address of the
personality function encoded in the aforementioned format. Not
skipping this correctly was resulting in us retrieving the wrong
FDE address format in e.g. CIEs encoded with augmentation 'zPLR'.
- The address range should be retrieved as value only without accounting
for the relative offset portion of the address encoding format. Fixes
some issues where we'd pick the wrong FDE to use for unwinding due
to us misinterpreting it as covering a far larger PC range than it
in fact did.
- DW_CFA_set_loc also needs to respect the encoded address format.
Overall, these changes fix a number of regressions introduced by the
previous commits, and also mean that stack unwinding for x86-64 should
now work as expected in all cases where either debug information or
an exception table is available.
After switching from outline only selection mode to transparent rectangle,
a drawing artifact could occur because the last selection rectangle wasn't
reset properly. On following update, Tracker thought a selection rectangle
was still to be shown.
This is a proper fix for the issue I tried to fix with hrev43552.
Previous fix only fixed the stack overflow caused by it but still
generated ghost devices due to the duplicated enumeration.
Affected motherboards include FIC PA-2013 (mine), and FIC VA503+
as mentionned on:
http://lkml.indiana.edu/hypermail/linux/kernel/9912.0/0539.html
We now check the header type for bridge devices and just ignore
wrong ones.
- Rename _ParseCIEAugmentation to _ParseCIEHeader since that more
accurately reflects what it does.
- Refactor a bit to avoid having to parse the header twice, and
simplify various places as a result.
- Pull out a _ParseCIEAugmentation() from _ParseCIE().
- If .eh_frame is being used, do a quick parse of the CIE up front
in order to determine the augmentation (if any), and use it to
retrieve addresses in the appropriate format. This fixes stack
unwinding on x86-64, and possibly other cases where the address
encoding didn't correspond to architectural target size in absolute
address format.