OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sat, 14 Sep 2019 11:55:36 +0000 (20:55 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Sat, 14 Sep 2019 11:55:36 +0000 (20:55 +0900)
  * WorkBackup (Tested DWARF_Expression Arithmetic & Logical Calc Op.)

libgoblin/drd64_libgoblin_dwarf_expression.c
libgoblin/test_libgoblin_dwarf_expression.c

index bdbb61c..2f71e91 100644 (file)
@@ -542,7 +542,6 @@ DWord
 
                        // Arithmetic & Logical Operation ----
                        case DW_OP_abs:                                 // 0x19
-                               // 2019/09/03 Lunch-Coding (Required TEST!!)
                                if( 0 == p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
                                if( LIBGOBLIN_DWARF_STACK_SIGN == p_exp->t_stack[p_exp->dw_depth - 1].b_flag )  {
@@ -553,7 +552,6 @@ DWord
                                break;
 
                        case DW_OP_and:                                 // 0x1a
-                               // 2019/09/03 Lunch-Coding (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -564,7 +562,6 @@ DWord
                                break;
 
                        case DW_OP_div:                                 // 0x1b
-                               // 2019/09/03 Lunch-Coding (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -578,7 +575,6 @@ DWord
                                break;
 
                        case DW_OP_minus:                               // 0x1c
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -588,17 +584,18 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_mod:                                 // 0x1d
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
-                               qw_temp         = POP_DWARF( p_exp );
-                               qw_value        = POP_DWARF( p_exp );
-                               qw_value        %= qw_temp;
-                               PUSH_DWARF( p_exp, qw_value );
+                               ii_temp         = POP_DWARF_SIGN( p_exp );
+                               ii_value        = POP_DWARF_SIGN( p_exp );
+                               if( 0 == ii_temp )
+                                       { goto  goto_DWARF_Expression_Evaluate_post; }
+
+                               ii_value        %= ii_temp;
+                               PUSH_DWARF_SIGN( p_exp, ii_value );
                                break;
                        case DW_OP_mul:                                 // 0x1e
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -608,7 +605,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_neg:                                 // 0x1f
-                               // 2019/09/08 (Required TEST!!)
                                if( 1 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -617,7 +613,6 @@ DWord
                                PUSH_DWARF_SIGN( p_exp, ii_value );
                                break;
                        case DW_OP_not:                                 // 0x20
-                               // 2019/09/08 (Required TEST!!)
                                if( 1 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -626,7 +621,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_or:                                  // 0x21
-                               // 2019/09/03 Lunch-Coding (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -636,7 +630,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_plus:                                // 0x22
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -646,7 +639,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_plus_uconst:                 // 0x23
-                               // 2019/09/08 (Required TEST!!)
                                if( 1 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -657,7 +649,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_shl:                                 // 0x24
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -667,7 +658,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_shr:                                 // 0x25
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -677,7 +667,6 @@ DWord
                                PUSH_DWARF( p_exp, qw_value );
                                break;
                        case DW_OP_shra:                                // 0x26
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
@@ -687,7 +676,6 @@ DWord
                                PUSH_DWARF_SIGN( p_exp, ii_value );
                                break;
                        case DW_OP_xor:                                 // 0x27
-                               // 2019/09/08 (Required TEST!!)
                                if( 2 > p_exp->dw_depth )
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
 
index 27be41f..3eb8ea8 100644 (file)
@@ -233,7 +233,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_ADDRSIZE );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 8 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 8 );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -406,7 +406,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_bregX( Byte b_opcode )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, (LIBGOBLIN_DWARF_REQUEST_REG | b_reg) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -421,7 +421,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_bregX( Byte b_opcode )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, (LIBGOBLIN_DWARF_REQUEST_REG | b_reg) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -461,7 +461,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_FRAME_BASE );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -476,7 +476,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_FRAME_BASE );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -533,7 +533,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, (LIBGOBLIN_DWARF_REQUEST_REG | 0x0a) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -549,7 +549,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, (LIBGOBLIN_DWARF_REQUEST_REG | 0x1f ) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -775,7 +775,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 10 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_DEREF );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xabcdef );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
@@ -813,7 +813,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_DEREF );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xabcd );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
@@ -849,7 +849,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_XDEREF );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xabcdef );
        CU_ASSERT( 3 == p_exp->dw_depth );
 
@@ -888,7 +888,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 12 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_XDEREF );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xabcd );
        CU_ASSERT( 3 == p_exp->dw_depth );
 
@@ -922,7 +922,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 10 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_OBJADDR );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xab01cd23 );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
@@ -957,7 +957,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 10 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_TLSADDR );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xabcdef );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
@@ -991,7 +991,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 10 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_CFAADDR );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.qw_value == 0xab01cd23 );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
@@ -1031,160 +1031,264 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->result.ii_value == 129 );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = 129 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 129 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
        // DW_OP_and:                           // 0x1a
        b_data[0]       = DW_OP_const4u;
        b_data[1]       = 0xff;
-       b_data[2] = 0xff;
+       b_data[2]       = 0xff;
        b_data[3]       = 0x55;
-       b_data[4]       = 0x55;         // 0xffff5555
+       b_data[4]       = 0x55;         // 0x5555ffff
        b_data[5]       = DW_OP_const4u;
        b_data[6]       = 0xff;
-       b_data[7] = 0x00;
+       b_data[7]       = 0x00;
        b_data[8]       = 0x55;
-       b_data[9]       = 0xaa;         // 0xff0055aa
+       b_data[9]       = 0xaa;         // 0xaa5500ff
        b_data[10]      = DW_OP_and;
        DWARF_Expression_ClearValue( p_exp );
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0xff005500 );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = 0xff005500 );
+       CU_ASSERT( p_exp->result.qw_value == 0x005500ff );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x005500ff );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
        // DW_OP_div:                           // 0x1b
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_consts;
+       b_data[4]       = 0x81;
+       b_data[5]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[6]       = DW_OP_div;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == -1 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -1 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_minus:                 // 0x1c
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_consts;
+       b_data[4]       = 0x81;
+       b_data[5]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[6]       = DW_OP_minus;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == -258 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -258 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_mod:                           // 0x1d
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_consts;
+       b_data[4]       = 0x81;
+       b_data[5]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[6]       = DW_OP_mod;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == 0 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_mul:                           // 0x1e
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_consts;
+       b_data[4]       = 0x81;
+       b_data[5]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[6]       = DW_OP_mul;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == -16641 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -16641 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_neg:                           // 0x1f
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0x81;
+       b_data[2]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[3]       = DW_OP_neg;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == -129 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -129 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_neg;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == 129 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 129 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_not:                           // 0x20
+       b_data[0]       = DW_OP_const4u;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0xaa;
+       b_data[3]       = 0x55;
+       b_data[4]       = 0x00;         // 0x0055aaff
+       b_data[5]       = DW_OP_not;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 6 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.qw_value == 0xffffffffffaa5500 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0xffffffffffaa5500 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
        
        // DW_OP_or:                            // 0x21
        b_data[0]       = DW_OP_const4u;
        b_data[1]       = 0xff;
-       b_data[2] = 0xff;
+       b_data[2]       = 0xff;
        b_data[3]       = 0x55;
-       b_data[4]       = 0x55;         // 0xffff5555
+       b_data[4]       = 0x55;         // 0x5555ffff
        b_data[5]       = DW_OP_const4u;
        b_data[6]       = 0xff;
-       b_data[7] = 0x00;
+       b_data[7]       = 0x00;
        b_data[8]       = 0x55;
-       b_data[9]       = 0xaa;         // 0xff0055aa
+       b_data[9]       = 0xaa;         // 0xaa5500ff
        b_data[10]      = DW_OP_or;
        DWARF_Expression_ClearValue( p_exp );
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0xffff55ff );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = 0xffff55ff );
+       CU_ASSERT( p_exp->result.qw_value == 0xff55ffff );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0xff55ffff );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
        // DW_OP_plus:                          // 0x22
+       b_data[0]       = DW_OP_consts;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_consts;
+       b_data[4]       = 0x81;
+       b_data[5]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[6]       = DW_OP_plus;
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == 0 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_plus_uconst:           // 0x23
+       b_data[0]       = DW_OP_constu;
+       b_data[1]       = 0xb9;
+       b_data[2]       = 0x64;         // value = 12857 (0xb9 0x64)
+       b_data[3]       = DW_OP_plus_uconst;
+       b_data[4]       = 0xb9;
+       b_data[5]       = 0x64;         // value = 12857 (0xb9 0x64)
+       DWARF_Expression_ClearValue( p_exp );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 6 );
+       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
+                               LIBGOBLIN_DWARF_STATUS_EVALUATED,
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.qw_value == 25714 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25714 );
+       CU_ASSERT( p_exp->dw_depth == 1 );
+
        // DW_OP_shl:                           // 0x24
-       b_data[0]       = DW_OP_lit4;
-       b_data[1]       = DW_OP_const4u;
-       b_data[2]       = 0xff;
-       b_data[3] = 0xff;
-       b_data[4]       = 0x55;
-       b_data[5]       = 0xaa;         // 0xffff55aa
+       b_data[0]       = DW_OP_const4u;
+       b_data[1]       = 0xff;
+       b_data[2]       = 0xaa;
+       b_data[3]       = 0x55;
+       b_data[4]       = 0x00;         // 0x0055aaff
+       b_data[5]       = DW_OP_lit8;
        b_data[6]       = DW_OP_shl;
        DWARF_Expression_ClearValue( p_exp );
        dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0xff55aa00 );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = 0xff55aa00 );
+       CU_ASSERT( p_exp->result.qw_value == 0x55aaff00 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
        // DW_OP_shr:                           // 0x25
-       // DW_OP_shra:                          // 0x26
-       
-       // DW_OP_xor:                           // 0x27
        b_data[0]       = DW_OP_const4u;
        b_data[1]       = 0xff;
-       b_data[2] = 0xff;
+       b_data[2]       = 0xaa;
        b_data[3]       = 0x55;
-       b_data[4]       = 0x55;         // 0xffff5555
-       b_data[5]       = DW_OP_const4u;
-       b_data[6]       = 0xff;
-       b_data[7] = 0x00;
-       b_data[8]       = 0x55;
-       b_data[9]       = 0xaa;         // 0xff0055aa
-       b_data[10]      = DW_OP_xor;
+       b_data[4]       = 0x00;         // 0x0055aaff
+       b_data[5]       = DW_OP_lit8;
+       b_data[6]       = DW_OP_shl;
        DWARF_Expression_ClearValue( p_exp );
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 7 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00ff00ff );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = 0x00ff00ff );
+       CU_ASSERT( p_exp->result.qw_value == 0x55aaff00 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
-
-/*
+       // DW_OP_shra:                          // 0x26
        b_data[0]       = DW_OP_consts;
-       b_data[1]       = 0xef;
-       b_data[2]       = 0xcd;
-       b_data[3]       = 0xab;
-       b_data[4]       = 0x90;
-       b_data[5]       = 0x78;
-       b_data[6]       = 0x56;
-       b_data[7]       = 0x34;
-       b_data[8]       = 0x12;
-       b_data[9]       = DW_OP_deref_size;
-       b_data[10]      = 2;
-       DWARF_Expression_ClearValue( p_exp );
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
-       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
-                               LIBGOBLIN_DWARF_STATUS_REQUESTED,
-                               LIBGOBLIN_DWARF_REQUEST_DEREF, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->ptr_reference.value == 0x1234567890abcdef );
-       CU_ASSERT( p_exp->dw_reqsize == 2 );
-       CU_ASSERT( 1 == p_exp->dw_depth );
-*/
-
-/*
-       b_data[0]       = DW_OP_fbreg;
-       b_data[1]       = 0x81;
-       b_data[2]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[1]       = 0xff;
+       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[3]       = DW_OP_lit1;
+       b_data[4]       = DW_OP_shra;
        DWARF_Expression_ClearValue( p_exp );
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
-       Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
-                               LIBGOBLIN_DWARF_STATUS_REQUESTED,
-                               LIBGOBLIN_DWARF_REQUEST_FRAME_BASE, LIBGOBLIN_DWARF_REQUEST_NONE );
-
-       p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_FRAME_BASE ]  = 0x80000000;
-       p_exp->dw_setdata       |= LIBGOBLIN_DWARF_REQUEST_FRAME_BASE;
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 5 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_FRAME_BASE );
-       CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.ii_value == -65 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -65 );
        CU_ASSERT( p_exp->dw_depth == 1 );
-
-
-       b_data[0]       = DW_OP_fbreg;
+       
+       // DW_OP_xor:                           // 0x27
+       b_data[0]       = DW_OP_const4u;
        b_data[1]       = 0xff;
-       b_data[2]       = 0x7e;         // value = -129 (0xff 0x7e)
+       b_data[2]       = 0xff;
+       b_data[3]       = 0x55;
+       b_data[4]       = 0x55;         // 0x5555ffff
+       b_data[5]       = DW_OP_const4u;
+       b_data[6]       = 0xff;
+       b_data[7]       = 0x00;
+       b_data[8]       = 0x55;
+       b_data[9]       = 0xaa;         // 0xaa5500ff
+       b_data[10]      = DW_OP_xor;
        DWARF_Expression_ClearValue( p_exp );
-       p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_FRAME_BASE ]  = 0x80000000;
-       p_exp->dw_setdata       |= LIBGOBLIN_DWARF_REQUEST_FRAME_BASE;
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 11 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
-                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_FRAME_BASE );
-       CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
-       CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
+                               LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+       CU_ASSERT( p_exp->result.qw_value == 0xff00ff00 );
+       CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0xff00ff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
-*/
-
 
 
        i_result        = DWARF_Expression_Free( p_exp );
@@ -1440,6 +1544,7 @@ int
                                                                        Test_LibGoblin_DWARF_Expression_InitTerm_test00_001 );
        CU_add_test( pt_goblin, "Test_LibGoblin_DWARF_Expression_AllocFree_test00_001",
                                                                        Test_LibGoblin_DWARF_Expression_AllocFree_test00_001 );
+
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_Constant_test00_001",
                                                                 Test_LibGoblin_DWARF_Expression_Constant_test00_001 );
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_RegBase_test01_001",
@@ -1449,10 +1554,12 @@ int
 
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001",
                                                                 Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001 );
+/*
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_FlowControl_test01_001",
                                                                 Test_LibGoblin_DWARF_Expression_FlowControl_test01_001 );
        CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_FlowControl_test02_001",
                                                                 Test_LibGoblin_DWARF_Expression_FlowControl_test02_001 );
+*/
        return 0x00;
 }