diff options
author | Eugene Tarassov | 2011-12-23 23:24:12 +0000 |
---|---|---|
committer | Eugene Tarassov | 2011-12-23 23:24:12 +0000 |
commit | 866417fda66e11b1686d3e95581f544dea1af9ac (patch) | |
tree | 3c95020c8332373c7840ee62bf218bf675e23476 /agent | |
parent | d05ce39c66fe87e5470ecbf7137721426ea21217 (diff) | |
download | org.eclipse.tcf.agent-866417fda66e11b1686d3e95581f544dea1af9ac.tar.gz org.eclipse.tcf.agent-866417fda66e11b1686d3e95581f544dea1af9ac.tar.xz org.eclipse.tcf.agent-866417fda66e11b1686d3e95581f544dea1af9ac.zip |
TCF Agent: fixed handling of DW_FORM_exprloc in DWARF 4.
Diffstat (limited to 'agent')
-rw-r--r-- | agent/tcf/services/dwarfcache.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/agent/tcf/services/dwarfcache.c b/agent/tcf/services/dwarfcache.c index d80bb55a..15cd804e 100644 --- a/agent/tcf/services/dwarfcache.c +++ b/agent/tcf/services/dwarfcache.c @@ -1098,6 +1098,9 @@ static void read_dwarf_object_property(Context * Ctx, int Frame, ObjectInfo * Ob case FORM_BLOCK4 : case FORM_BLOCK : case FORM_STRP : + case FORM_SEC_OFFSET: + case FORM_EXPRLOC : + case FORM_REF_SIG8 : Value->mAddr = (U1_T *)gop_gFormDataAddr; Value->mSize = gop_gFormDataSize; break; @@ -1176,7 +1179,10 @@ void read_and_evaluate_dwarf_object_property(Context * Ctx, int Frame, U8_T Base assert(Value->mFrame == Frame); assert(Value->mObject == Obj); assert(Value->mAttr == Attr); - if (Attr == AT_location || Attr == AT_data_member_location || Attr == AT_string_length || Attr == AT_frame_base) { + if (Value->mForm == FORM_EXPRLOC) { + dwarf_evaluate_expression(Base, Value); + } + else if (Attr == AT_location || Attr == AT_data_member_location || Attr == AT_string_length || Attr == AT_frame_base) { switch (Value->mForm) { case FORM_DATA4 : case FORM_DATA8 : |