From: Koine Yuusuke Date: Thu, 12 Sep 2019 23:27:32 +0000 (+0900) Subject: (LibGoblin) X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0b36533eb06a853ffc8ef26dddb9fce76273c463;p=drdeamon64%2Fdrdeamon64.git (LibGoblin) * WorkBackup (dw_setdata readed data flag bit omitted.) --- diff --git a/libgoblin/drd64_libgoblin_dwarf_expression.c b/libgoblin/drd64_libgoblin_dwarf_expression.c index b9fac76..bdbb61c 100644 --- a/libgoblin/drd64_libgoblin_dwarf_expression.c +++ b/libgoblin/drd64_libgoblin_dwarf_expression.c @@ -221,8 +221,10 @@ DWord 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 @@ -300,6 +302,7 @@ DWord } 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; @@ -348,6 +351,7 @@ DWord { 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); @@ -369,6 +373,7 @@ DWord { 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); @@ -434,6 +439,7 @@ DWord 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 ); @@ -451,6 +457,7 @@ DWord 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; @@ -466,6 +473,7 @@ DWord 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 ); @@ -484,6 +492,7 @@ DWord 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; @@ -497,6 +506,7 @@ DWord 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; @@ -510,6 +520,7 @@ DWord 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 ); @@ -521,6 +532,7 @@ DWord 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;