OSDN Git Service

(LibGoblin)
authorKoine Yuusuke <koinec@users.osdn.me>
Thu, 12 Sep 2019 23:27:32 +0000 (08:27 +0900)
committerKoine Yuusuke <koinec@users.osdn.me>
Thu, 12 Sep 2019 23:27:32 +0000 (08:27 +0900)
  * WorkBackup (dw_setdata readed data flag bit omitted.)

libgoblin/drd64_libgoblin_dwarf_expression.c

index b9fac76..bdbb61c 100644 (file)
@@ -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;