OSDN Git Service

(LibGoblin)
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 16 Sep 2019 12:15:45 +0000 (21:15 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Mon, 16 Sep 2019 12:15:45 +0000 (21:15 +0900)
  * WorkBackup

libgoblin/drd64_libgoblin_dwarf_expression.c
libgoblin/drd64_libgoblin_type_dwarf.h
libgoblin/test_libgoblin_dwarf_expression.c

index 98a7ef5..db5df24 100644 (file)
@@ -117,10 +117,14 @@ DWord
        Int64   ii_value;
        Int64   ii_temp;
 
-#define        PUSH_DWARF(m,n)         {(m)->t_stack[(m)->dw_depth++].value.qw_value = (n);} 
+#define        PUSH_DWARF(m,n) \
+               { (m)->t_stack[(m)->dw_depth].value.qw_value = (n); \
+                 (m)->t_stack[(m)->dw_depth].b_flag = LIBGOBLIN_DWARF_FLAG_LOCATION; \
+                 (m)->dw_depth++; } 
 #define        PUSH_DWARF_SIGN(m,n)    \
                { (m)->t_stack[(m)->dw_depth].value.ii_value = (n); \
-                 (m)->t_stack[(m)->dw_depth].b_flag = LIBGOBLIN_DWARF_STACK_SIGN; \
+                 (m)->t_stack[(m)->dw_depth].b_flag \
+                       = (LIBGOBLIN_DWARF_FLAG_SIGN | LIBGOBLIN_DWARF_FLAG_LOCATION); \
                  (m)->dw_depth++; } 
 #define        POP_DWARF(m)            (m)->t_stack[--((m)->dw_depth)].value.qw_value 
 #define        POP_DWARF_SIGN(m)       (m)->t_stack[--((m)->dw_depth)].value.ii_value 
@@ -174,7 +178,7 @@ DWord
                }
        }
        qw_value                                = 0x00000000;
-       p_exp->result.qw_value  = 0x00000000;
+       //p_exp->result.qw_value        = 0x00000000;
        p_exp->dw_requested             = LIBGOBLIN_DWARF_REQUEST_NONE;
        p_exp->dw_status                = LIBGOBLIN_DWARF_STATUS_ERROR;
        if( LIBGOBLIN_DWARF_REQUEST_NONE != p_exp->dw_setdata )
@@ -383,22 +387,24 @@ DWord
                        case DW_OP_bregx:                               // 0x92
                                // Get RegID
                                pb_now  = DWARF_Common_DecodeULEB128( &qw_value, pb_now, &qw_remain );
-                               b_reg   = (Byte)(qw_value & 0x1f);
+                               p_exp->dw_regid = (DWord)(qw_value & 0xffffffff);
 
                                // Get Offset
                                pb_now  = DWARF_Common_DecodeLEB128( &ii_value, pb_now, &qw_remain );
 
-                               if( p_exp->dw_setdata & (LIBGOBLIN_DWARF_REQUEST_REG | b_reg) ) {
+                               if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_REGX )  {
                                        if( 0 > ii_value )
-                                               { qw_value      = p_exp->qw_reqdata[b_reg] - (QWord)(-1 * ii_value); }
+                                               { qw_value      = p_exp->qw_reqdata[LIBGOBLIN_DWARF_DATAID_REGX]
+                                                                                                       - (QWord)(-1 * ii_value); }
                                        else
-                                               { qw_value      = p_exp->qw_reqdata[b_reg] + (QWord)ii_value; }
+                                               { qw_value      = p_exp->qw_reqdata[LIBGOBLIN_DWARF_DATAID_REGX]
+                                                                                                       + (QWord)ii_value; }
 
                                        PUSH_DWARF( p_exp, qw_value );
-                                       p_exp->dw_setdata       &= (~(LIBGOBLIN_DWARF_REQUEST_REG | b_reg));
+                                       p_exp->dw_setdata       &= (~LIBGOBLIN_DWARF_REQUEST_REGX);
                                }
                                else    {
-                                       p_exp->dw_requested |= (LIBGOBLIN_DWARF_REQUEST_REG | b_reg);
+                                       p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_REGX;
                                        qw_remain       = 0;    // for Loop-Break
                                }
                                break;
@@ -579,7 +585,7 @@ DWord
                                        { goto  goto_DWARF_Expression_Evaluate_post; }
                                ii_value        = POP_DWARF_SIGN( p_exp );
 
-                               if( LIBGOBLIN_DWARF_STACK_SIGN == p_exp->t_stack[p_exp->dw_depth].b_flag )      {
+                               if( LIBGOBLIN_DWARF_FLAG_SIGN & p_exp->t_stack[p_exp->dw_depth].b_flag )        {
                                        if( 0 > ii_value )      { ii_value      *= -1; }
                                        PUSH_DWARF_SIGN( p_exp, ii_value );
                                }
@@ -860,6 +866,7 @@ DWord
 
                        // Special Operation ----
                        case DW_OP_nop:                                 // 0x96
+                               // XXX: Not TESTED!!
                                // NONE operation .
                                break;
 
@@ -895,11 +902,37 @@ DWord
                        case DW_OP_reg29:                               // 0x6d
                        case DW_OP_reg30:                               // 0x6e
                        case DW_OP_reg31:                               // 0x6f
+                               // XXX: Not TESTED!!
+                               b_reg   = b_opcode - DW_OP_reg0;
+                               p_exp->result[ p_exp->b_results ].b_type        = b_reg;
+                               //p_exp->b_results++;
                                break;
                        case DW_OP_regx:                                // 0x90
+                               // XXX: Not TESTED!!
+                               pb_now  = DWARF_Common_DecodeULEB128( &qw_temp, pb_now, &qw_remain );
+                               p_exp->result[ p_exp->b_results ].b_type        = LIBGOBLIN_DWARF_FLAG_REGX;
+                               p_exp->result[ p_exp->b_results ].value.qw_value        = qw_temp;      // reg.id
+                               //p_exp->b_results++;
                                break;
 
                        case DW_OP_piece:                               // 0x93
+                               // XXX: Not TESTED!!
+                               pb_now  = DWARF_Common_DecodeULEB128( &qw_temp, pb_now, &qw_remain );
+                               dw_value        = (DWord)(qw_temp & 0xffffffff);
+
+                               b_value         = p_exp->result[ p_exp->b_results ].b_type;
+                               if( !(LIBGOBLIN_DWARF_FLAG_REG & b_value)
+                                                       && !(LIBGOBLIN_DWARF_FLAG_REGX & b_value))      {
+                                       if( 0 < p_exp->dw_depth )       {
+                                               p_exp->result[p_exp->b_results].b_type
+                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].b_flag;
+                                               p_exp->result[p_exp->b_results].value.qw_value
+                                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
+                                       }
+                               }
+                               p_exp->result[p_exp->b_results].dw_bytes        = dw_value;
+                               p_exp->b_results++;
+                               
                                break;
                        case DW_OP_bit_piece:                   // 0x9d
                                break;
@@ -964,7 +997,11 @@ DWord
 
        if( 0 < p_exp->dw_depth )       {
                p_exp->dw_status                = LIBGOBLIN_DWARF_STATUS_EVALUATED;
-               p_exp->result.qw_value  = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
+               p_exp->result[p_exp->b_results].b_type
+                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].b_flag;
+               p_exp->result[p_exp->b_results].value.qw_value
+                                               = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
+               p_exp->b_results++;
        }
 
 goto_DWARF_Expression_Evaluate_post:
index d840ec5..f72b032 100644 (file)
@@ -57,6 +57,7 @@ Comment:
 #define        LIBGOBLIN_DWARF_REQUEST_OBJADDR                 0x00002000
 #define        LIBGOBLIN_DWARF_REQUEST_TLSADDR                 0x00004000
 #define        LIBGOBLIN_DWARF_REQUEST_CFAADDR                 0x00008000
+#define        LIBGOBLIN_DWARF_REQUEST_REGX                    0x00010000
 
 #define        LIBGOBLIN_DWARF_REQDATA_MAX                                       0x40
 #define        LIBGOBLIN_DWARF_DATAID_REG                              0x0000001f      // 0x00 - 0x1f
@@ -67,10 +68,19 @@ Comment:
 #define        LIBGOBLIN_DWARF_DATAID_OBJADDR                  0x00000024
 #define        LIBGOBLIN_DWARF_DATAID_TLSADDR                  0x00000025
 #define        LIBGOBLIN_DWARF_DATAID_CFAADDR                  0x00000026
+#define        LIBGOBLIN_DWARF_DATAID_REGX                             0x00000027
+
+#define        LIBGOBLIN_DWARF_FLAG_REG                                0x1f    // 0x00 - 0x1f
+#define        LIBGOBLIN_DWARF_FLAG_REGX                               0x20
+#define        LIBGOBLIN_DWARF_FLAG_LOCATION                   0x30
+#define        LIBGOBLIN_DWARF_FLAG_IMMEDIATE                  0x40
+//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x50
+//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x60
+//#define      LIBGOBLIN_DWARF_FLAG_NOUSE                      0x70
+#define        LIBGOBLIN_DWARF_FLAG_SIGN                               0x80    // First bit is sign-flag
 
 
 /*=====================================================================*/
-#define        LIBGOBLIN_DWARF_STACK_SIGN      0x01
 typedef        struct  {
        Byte    b_flag;
        union   {
@@ -90,10 +100,6 @@ typedef     struct  {
        DWord   dw_setdata;
 
        Byte    b_flag;
-       union   {
-               QWord   qw_value;
-               Int64   ii_value;
-       } result;
 
        struct  {
                Byte    *pb_resume;
@@ -106,16 +112,18 @@ typedef   struct  {
        } caller[4];
        Byte    b_callers;
 
-/*
+       Byte    b_results;
        struct  {
+               Byte    b_type;
+               DWord   dw_bytes;
                union   {
                        QWord   qw_value;
                        Int64   ii_value;
                } value;
        } result[8];
-*/
 
        Byte    b_dwsize;
+       DWord   dw_regid;                       // for DW_OP_bregx
        QWord   qw_calloffset;
        DWord   dw_reqsize;                     // for DW_OP_deref_size & DW_OP_xderef_size
        Ptr             ptr_reference;          // for DW_OP_deref(_size) & DW_OP_xderef(_size)
index bdb0811..41e0796 100644 (file)
@@ -121,7 +121,7 @@ void Test_LibGoblin_DWARF_Expression_CheckStruct(
                printf( "  [DEBUG] DWARF Expression: status= %2xh, requested= %2xh,"
                                " setdata=%2xh, result= %8lxh(%ld)\n",
                                        p_exp->dw_status, p_exp->dw_requested, p_exp->dw_setdata,
-                                       p_exp->result.qw_value, p_exp->result.ii_value );
+                                       p_exp->result[0].value.qw_value, p_exp->result[0].value.ii_value );
        }
 
        CU_ASSERT( dw_status == p_exp->dw_status );
@@ -152,7 +152,7 @@ void Test_LibGoblin_DWARF_Expression_CheckLitX(
        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 == qw_value );
+       CU_ASSERT( p_exp->result[0].value.qw_value == qw_value );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == qw_value );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -234,7 +234,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == 8 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 8 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 8 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -246,7 +246,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == 0x12 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x12 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x12 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -258,7 +258,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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->result[0].value.ii_value == -1 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = -1 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -271,7 +271,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == 0x1234 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x1234 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x1234 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -284,7 +284,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == -12345 );
+       CU_ASSERT( p_exp->result[0].value.ii_value == -12345 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = -12345 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -297,7 +297,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == 0x12345678 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x12345678 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x12345678 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -310,7 +310,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == -1234567890 );
+       CU_ASSERT( p_exp->result[0].value.ii_value == -1234567890 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = -1234567890 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -323,7 +323,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 ==  0x1234567890abcdef );
+       CU_ASSERT( p_exp->result[0].value.qw_value ==  0x1234567890abcdef );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x1234567890abcdef );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -336,7 +336,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == -123456789012345 );
+       CU_ASSERT( p_exp->result[0].value.ii_value == -123456789012345 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = -123456789012345 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -349,7 +349,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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 == 12857 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 12857 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 12857 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -362,7 +362,7 @@ void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
        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->result[0].value.ii_value == -129 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value = -129 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -407,7 +407,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_bregX( Byte b_opcode )
        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 == (0x80000000 + 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -422,7 +422,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_bregX( Byte b_opcode )
        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 == (0x80000000 - 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -462,7 +462,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        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 == (0x80000000 + 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -477,7 +477,7 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        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 == (0x80000000 - 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -519,22 +519,23 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
 
        // DW_OP_bregx --------------
        b_data[0]       = DW_OP_bregx;
-       b_data[1]       = 0x0a;
-       b_data[2]       = 0x81;
-       b_data[3]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[1]       = 0x81;
+       b_data[2]       = 0x01;         // value = 129 (0x81 0x01)
+       b_data[3]       = 0x81;
+       b_data[4]       = 0x01;         // value = 129 (0x81 0x01)
        DWARF_Expression_ClearValue( p_exp );
-       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+       dw_result       = DWARF_Expression_Evaluate( p_exp, b_data, 5 );
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_REQUESTED,
-                               (LIBGOBLIN_DWARF_REQUEST_REG | 0x0a), LIBGOBLIN_DWARF_REQUEST_NONE );
+                               LIBGOBLIN_DWARF_REQUEST_REGX, LIBGOBLIN_DWARF_REQUEST_NONE );
 
-       p_exp->qw_reqdata[0x0a] = 0x80000000;
-       p_exp->dw_setdata       |= (LIBGOBLIN_DWARF_REQUEST_REG | 0x0a );
+       p_exp->qw_reqdata[LIBGOBLIN_DWARF_DATAID_REGX]  = 0x80000000;
+       p_exp->dw_setdata       |= LIBGOBLIN_DWARF_REQUEST_REGX;
        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.qw_value == (0x80000000 + 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -544,13 +545,13 @@ void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
        b_data[2]       = 0xff;
        b_data[3]       = 0x7e;         // value = -129 (0xff 0x7e)
        DWARF_Expression_ClearValue( p_exp );
-       p_exp->qw_reqdata[0x1f] = 0x80000000;
-       p_exp->dw_setdata       |= (LIBGOBLIN_DWARF_REQUEST_REG | 0x1f );
+       p_exp->qw_reqdata[LIBGOBLIN_DWARF_DATAID_REGX]  = 0x80000000;
+       p_exp->dw_setdata       |= LIBGOBLIN_DWARF_REQUEST_REGX;
        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.qw_value == (0x80000000 - 129) );
+       CU_ASSERT( p_exp->result[0].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == (0x80000000 - 129) );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -596,7 +597,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 10 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->dw_depth == 2 );
@@ -625,7 +626,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 31 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 31 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 31 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->dw_depth == 1 );
@@ -658,7 +659,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 10 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 20 );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 30 );
@@ -689,7 +690,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 30 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 30 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 30 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 11 );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 30 );
@@ -713,7 +714,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 20 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 20 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 30 );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 20 );
@@ -738,7 +739,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 20 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 20 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 30 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == 10 );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 20 );
@@ -776,7 +777,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xabcdef );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef );
        CU_ASSERT( 1 == p_exp->dw_depth );
 
        // DW_OP_deref_size -------------
@@ -814,7 +815,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xabcd );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcd );
        CU_ASSERT( 1 == p_exp->dw_depth );
 
        // DW_OP_xderef -----------------
@@ -850,7 +851,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xabcdef );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef );
        CU_ASSERT( 1 == p_exp->dw_depth );
 
        // DW_OP_xderef_size ------------
@@ -889,7 +890,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xabcd );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcd );
        CU_ASSERT( 1 == p_exp->dw_depth );
 
        // DW_OP_push_object_address ----
@@ -923,7 +924,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xab01cd23 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xab01cd23 );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
        // DW_OP_form_tls_address -------
@@ -958,7 +959,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xabcdef );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef );
        CU_ASSERT( 1 == p_exp->dw_depth );
 
        // DW_OP_call_frame_cfa ---------
@@ -992,7 +993,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
        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 == 0xab01cd23 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xab01cd23 );
        CU_ASSERT( 2 == p_exp->dw_depth );
 
 
@@ -1030,7 +1031,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == 129 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 129 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1051,7 +1052,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == 0x005500ff );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x005500ff );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x005500ff );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1068,7 +1069,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == -1 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -1 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1085,7 +1086,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == -258 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -258 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1102,7 +1103,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == 0 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1119,7 +1120,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == -16641 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -16641 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1133,7 +1134,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == -129 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -129 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1146,7 +1147,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == 129 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 129 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1162,7 +1163,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.qw_value == 0xffffffffffaa5500 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0xffffffffffaa5500 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -1183,7 +1184,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == 0xff55ffff );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xff55ffff );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0xff55ffff );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1200,7 +1201,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.ii_value == 0 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1216,7 +1217,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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->result[0].value.qw_value == 25714 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25714 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1233,7 +1234,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == 0x55aaff00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1250,7 +1251,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == 0x55aaff00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 0x55aaff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1265,7 +1266,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == -65 );
+       CU_ASSERT( p_exp->result[0].value.ii_value == -65 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == -65 );
        CU_ASSERT( p_exp->dw_depth == 1 );
        
@@ -1286,7 +1287,7 @@ void Test_LibGoblin_DWARF_Expression_ArithmeticLogical_test01_001( void )
        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 == 0xff00ff00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xff00ff00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0xff00ff00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1324,7 +1325,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1336,7 +1337,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1349,7 +1350,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1361,7 +1362,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1373,7 +1374,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1386,7 +1387,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1398,7 +1399,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1410,7 +1411,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1423,7 +1424,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1435,7 +1436,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1447,7 +1448,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1460,7 +1461,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1472,7 +1473,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1484,7 +1485,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1497,7 +1498,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x01 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x01 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1509,7 +1510,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
        CU_ASSERT( p_exp->dw_depth == 1 );
 
@@ -1532,7 +1533,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 18 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 18 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 15 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.ii_value == 16 );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.ii_value == 17 );
@@ -1556,7 +1557,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test01_001( void )
        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 == 22 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 22 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 18 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.ii_value == 22 );
        CU_ASSERT( p_exp->dw_depth == 2 );
@@ -1610,7 +1611,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_CALLING,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 13 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 2 );
@@ -1657,7 +1658,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_RETCALL,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->b_callers == 1 );
        CU_ASSERT( p_exp->caller[ 0 ].pb_return == b_data1 + 7 );
        CU_ASSERT( p_exp->caller[ 0 ].qw_retremain == 1 );
@@ -1688,7 +1689,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        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 == 0xabcdef0123456789 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef0123456789 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 13 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 7 );
@@ -1721,7 +1722,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_CALLING,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 2 );
@@ -1767,7 +1768,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_RETCALL,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->b_callers == 1 );
        CU_ASSERT( p_exp->caller[ 0 ].pb_return == b_data1 + 9 );
        CU_ASSERT( p_exp->caller[ 0 ].qw_retremain == 1 );
@@ -1799,7 +1800,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->b_callers == 0 );
-       CU_ASSERT( p_exp->result.qw_value == 0xabcdef0123456789 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef0123456789 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 26 );
@@ -1836,7 +1837,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_CALLING,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->dw_depth == 2 );
@@ -1882,7 +1883,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
        Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
                                LIBGOBLIN_DWARF_STATUS_RETCALL,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
-       CU_ASSERT( p_exp->result.qw_value == 0x00 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0x00 );
        CU_ASSERT( p_exp->b_callers == 1 );
        CU_ASSERT( p_exp->caller[ 0 ].pb_return == b_data1 + 13 );
        CU_ASSERT( p_exp->caller[ 0 ].qw_retremain == 1 );
@@ -1914,7 +1915,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void )
                                LIBGOBLIN_DWARF_STATUS_EVALUATED,
                                LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
        CU_ASSERT( p_exp->b_callers == 0 );
-       CU_ASSERT( p_exp->result.qw_value == 0xabcdef0123456789 );
+       CU_ASSERT( p_exp->result[0].value.qw_value == 0xabcdef0123456789 );
        CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25 );
        CU_ASSERT( p_exp->t_stack[ 1 ].value.qw_value == (0x80000000 + 129) );
        CU_ASSERT( p_exp->t_stack[ 2 ].value.qw_value == 26 );