break;
case DW_OP_addr: // 0x03
- if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_ADDRSIZE )
- { PUSH_DWARF( p_exp, p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_ADDRSIZE ] ); }
+ if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_ADDRSIZE ) {
+ PUSH_DWARF( p_exp, p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_ADDRSIZE ] );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_ADDRSIZE);
+ }
else {
p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_ADDRSIZE;
qw_remain = 0; // for Loop-Break
}
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_FRAME_BASE);
}
else {
p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_FRAME_BASE;
{ qw_value = p_exp->qw_reqdata[b_reg] + (QWord)ii_value; }
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~(LIBGOBLIN_DWARF_REQUEST_REG | b_reg));
}
else {
p_exp->dw_requested |= (LIBGOBLIN_DWARF_REQUEST_REG | b_reg);
{ qw_value = p_exp->qw_reqdata[b_reg] + (QWord)ii_value; }
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~(LIBGOBLIN_DWARF_REQUEST_REG | b_reg));
}
else {
p_exp->dw_requested |= (LIBGOBLIN_DWARF_REQUEST_REG | b_reg);
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_DEREF ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_DEREF ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_DEREF);
}
else {
p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp );
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_DEREF ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_DEREF ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_DEREF);
}
else {
p_exp->dw_reqsize = (DWord)b_value;
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_XDEREF ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_XDEREF ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_XDEREF);
}
else {
p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp );
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_XDEREF ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_XDEREF ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_XDEREF);
}
else {
p_exp->dw_reqsize = (DWord)b_value;
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_OBJADDR ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_OBJADDR ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_OBJADDR);
}
else {
p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_OBJADDR;
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_TLSADDR ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_TLSADDR ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_TLSADDR);
}
else {
p_exp->ptr_tlsbase.value = (PtrValue)POP_DWARF( p_exp );
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_CFAADDR ) {
qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_CFAADDR ];
PUSH_DWARF( p_exp, qw_value );
+ p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_CFAADDR);
}
else {
p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_CFAADDR;