- 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.
- We now handle augmentation 'zR', which in the case of gcc's
.eh_frame format specifies how the addresses in the FDEs are
encoded. Not actually used yet though since that will require
some refactoring of _UnwindCallFrame(), since we currently parse
the CIE too late to apply the above address size rules to the
initial offset + range. This is also the reason x86-64 stack unwind
currently fails, since the addresses there are, for most current tests
actually being encoded in 32-bit format rather than architecture
address size as should be the case for a standard DWARF debug_frame.