one bug fix & reformeatting of the code
This commit is contained in:
@@ -175,9 +175,6 @@ uint32_t __pst_context::print_expr_block (Dwarf_Op *exprs, int len, char* buff,
|
|||||||
} else {
|
} else {
|
||||||
offset += snprintf(buff + offset, buff_size - offset, "0x%hhX(0x%lX, 0x%lx) ", exprs[i].atom, exprs[i].number, exprs[i].number2);
|
offset += snprintf(buff + offset, buff_size - offset, "0x%hhX(0x%lX, 0x%lx) ", exprs[i].atom, exprs[i].number, exprs[i].number2);
|
||||||
}
|
}
|
||||||
// if(exprs[i].atom >= DW_OP_reg0 && exprs[i].atom <= DW_OP_bregx) {
|
|
||||||
// print_framereg(exprs[i].atom);
|
|
||||||
// }DW_OP_addr
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
@@ -194,7 +191,7 @@ bool __pst_context::calc_expression(Dwarf_Op *exprs, int expr_len, Dwarf_Attribu
|
|||||||
}
|
}
|
||||||
|
|
||||||
dwarf_value* v = stack.get();
|
dwarf_value* v = stack.get();
|
||||||
if(v && v->type == DWARF_TYPE_REGISTER_LOC) {
|
if(v && (v->type & DWARF_TYPE_REGISTER_LOC)) {
|
||||||
// dereference register location
|
// dereference register location
|
||||||
unw_word_t value = 0;
|
unw_word_t value = 0;
|
||||||
uint64_t regno = *((uint64_t*)v->value);
|
uint64_t regno = *((uint64_t*)v->value);
|
||||||
|
|||||||
+13
-13
@@ -9,19 +9,19 @@
|
|||||||
#include "linkedlist.h"
|
#include "linkedlist.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DWARF_TYPE_INVALID = 0,
|
DWARF_TYPE_INVALID = 0, // no type
|
||||||
DWARF_TYPE_SIGNED = 1,
|
DWARF_TYPE_SIGNED = 1, // signed type
|
||||||
DWARF_TYPE_UNSIGNED = 2,
|
DWARF_TYPE_UNSIGNED = 2, // unsigned type
|
||||||
DWARF_TYPE_CONST = 4,
|
DWARF_TYPE_CONST = 4, // constant signed/unsigned type
|
||||||
DWARF_TYPE_GENERIC = 8,
|
DWARF_TYPE_GENERIC = 8, // size of machine address type
|
||||||
DWARF_TYPE_CHAR = 16,
|
DWARF_TYPE_CHAR = 16, // 1 byte size
|
||||||
DWARF_TYPE_FLOAT = 32,
|
DWARF_TYPE_FLOAT = 32, // machine-dependent floating point size
|
||||||
DWARF_TYPE_REGISTER_LOC = 64,
|
DWARF_TYPE_REGISTER_LOC = 64, // value located in register specified as 'value'
|
||||||
DWARF_TYPE_MEMORY_LOC = 128,
|
DWARF_TYPE_MEMORY_LOC = 128, // value located in memory address specified as 'value'
|
||||||
DWARF_TYPE_PIECE = 256,
|
DWARF_TYPE_PIECE = 256, // piece of whole value located in current value
|
||||||
DWARF_TYPE_SHORT = 512,
|
DWARF_TYPE_SHORT = 512, // 2 byte size
|
||||||
DWARF_TYPE_INT = 1024,
|
DWARF_TYPE_INT = 1024, // 4 byte size
|
||||||
DWARF_TYPE_LONG = 2048
|
DWARF_TYPE_LONG = 2048 // 8 byte size
|
||||||
} dwarf_value_type;
|
} dwarf_value_type;
|
||||||
|
|
||||||
typedef struct __dwarf_value : public SC_ListNode {
|
typedef struct __dwarf_value : public SC_ListNode {
|
||||||
|
|||||||
Reference in New Issue
Block a user