From: Koine Yuusuke(koinec) Date: Mon, 16 Sep 2019 02:21:25 +0000 (+0900) Subject: (LibGoblin) X-Git-Url: http://git.sourceforge.jp/view?a=commitdiff_plain;h=dc72930f3eca984a6b60a858640506467f53ec48;p=drdeamon64%2Fdrdeamon64.git (LibGoblin) * WorkBackup --- diff --git a/libgoblin/drd64_libgoblin_dwarf_expression.c b/libgoblin/drd64_libgoblin_dwarf_expression.c index 85874e7..37c1e0d 100644 --- a/libgoblin/drd64_libgoblin_dwarf_expression.c +++ b/libgoblin/drd64_libgoblin_dwarf_expression.c @@ -113,6 +113,7 @@ DWord QWord qw_remain; QWord qw_value; QWord qw_temp; + QWord qw_pop[4]; Int64 ii_value; Int64 ii_temp; @@ -163,9 +164,12 @@ DWord else { pb_now = pb_data; qw_remain = (QWord)dw_size; - p_exp->dw_depth = 0; - memset( &((p_exp)->t_stack), 0x00, - sizeof( LibGoblin_DWARF_Expression_Stack ) * LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH ); + + if( 0 == p_exp->b_callers ) { + p_exp->dw_depth = 0; + memset( &((p_exp)->t_stack), 0x00, + sizeof( LibGoblin_DWARF_Expression_Stack ) * LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH ); + } } qw_value = 0x00000000; p_exp->result.qw_value = 0x00000000; @@ -393,7 +397,7 @@ DWord case DW_OP_drop: // 0x13 if( 0 == p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } - qw_value = POP_DWARF( p_exp ); + qw_pop[0] = POP_DWARF( p_exp ); break; case DW_OP_pick: // 0x15 b_value = *pb_now++; @@ -435,6 +439,7 @@ DWord case DW_OP_deref: // 0x06 if( 0 == p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } + qw_pop[0] = POP_DWARF( p_exp ); if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_DEREF ) { qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_DEREF ]; @@ -442,7 +447,7 @@ DWord p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_DEREF); } else { - p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp ); + p_exp->ptr_reference.value = (PtrValue)qw_pop[0]; p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_DEREF; qw_remain = 0; // for Loop-Break } @@ -450,6 +455,7 @@ DWord case DW_OP_deref_size: // 0x94 if( 0 == p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } + qw_pop[0] = POP_DWARF( p_exp ); b_value = *pb_now++; qw_remain--; @@ -461,7 +467,7 @@ DWord } else { p_exp->dw_reqsize = (DWord)b_value; - p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp ); + p_exp->ptr_reference.value = (PtrValue)qw_pop[0]; p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_DEREF; qw_remain = 0; // for Loop-Break } @@ -469,6 +475,8 @@ DWord case DW_OP_xderef: // 0x18 if( 2 > p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } + qw_pop[0] = POP_DWARF( p_exp ); + qw_pop[1] = POP_DWARF( p_exp ); if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_XDEREF ) { qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_XDEREF ]; @@ -476,8 +484,8 @@ DWord p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_XDEREF); } else { - p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp ); - p_exp->qw_ident_addrspace = POP_DWARF( p_exp ); + p_exp->ptr_reference.value = (PtrValue)qw_pop[0]; + p_exp->qw_ident_addrspace = qw_pop[1]; p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_XDEREF; qw_remain = 0; // for Loop-Break } @@ -485,6 +493,8 @@ DWord case DW_OP_xderef_size: // 0x95 if( 2 > p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } + qw_pop[0] = POP_DWARF( p_exp ); + qw_pop[1] = POP_DWARF( p_exp ); b_value = *pb_now++; qw_remain--; @@ -496,8 +506,8 @@ DWord } else { p_exp->dw_reqsize = (DWord)b_value; - p_exp->ptr_reference.value = (PtrValue)POP_DWARF( p_exp ); - p_exp->qw_ident_addrspace = POP_DWARF( p_exp ); + p_exp->ptr_reference.value = (PtrValue)qw_pop[0]; + p_exp->qw_ident_addrspace = qw_pop[1]; p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_XDEREF; qw_remain = 0; // for Loop-Break } @@ -516,6 +526,7 @@ DWord case DW_OP_form_tls_address: // 0x9b if( 1 > p_exp->dw_depth ) { goto goto_DWARF_Expression_Evaluate_post; } + qw_pop[0] = POP_DWARF( p_exp ); if( p_exp->dw_setdata & LIBGOBLIN_DWARF_REQUEST_TLSADDR ) { qw_value = p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_TLSADDR ]; @@ -523,7 +534,7 @@ DWord p_exp->dw_setdata &= (~LIBGOBLIN_DWARF_REQUEST_TLSADDR); } else { - p_exp->ptr_tlsbase.value = (PtrValue)POP_DWARF( p_exp ); + p_exp->ptr_tlsbase.value = (PtrValue)qw_pop[0]; p_exp->dw_requested |= LIBGOBLIN_DWARF_REQUEST_TLSADDR; qw_remain = 0; // for Loop-Break } @@ -544,8 +555,9 @@ DWord case DW_OP_abs: // 0x19 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 ) { - ii_value = POP_DWARF_SIGN( p_exp ); + ii_value = POP_DWARF_SIGN( p_exp ); + + if( LIBGOBLIN_DWARF_STACK_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 ); } @@ -774,7 +786,6 @@ DWord break; case DW_OP_call2: // 0x98 - // 2019/09/10 (Required TEST!!) w_value = *((Word *)pb_now); pb_now += 2; qw_remain -= 2; @@ -788,7 +799,6 @@ DWord goto goto_DWARF_Expression_Evaluate_post; break; // NOT reach. case DW_OP_call4: // 0x99 - // 2019/09/10 (Required TEST!!) dw_value = *((DWord *)pb_now); pb_now += 4; qw_remain -= 4; diff --git a/libgoblin/test_libgoblin_dwarf_expression.c b/libgoblin/test_libgoblin_dwarf_expression.c index 5fa31bc..cb5440b 100644 --- a/libgoblin/test_libgoblin_dwarf_expression.c +++ b/libgoblin/test_libgoblin_dwarf_expression.c @@ -777,7 +777,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void ) LIBGOBLIN_DWARF_STATUS_EVALUATED, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0xabcdef ); - CU_ASSERT( 2 == p_exp->dw_depth ); + CU_ASSERT( 1 == p_exp->dw_depth ); // DW_OP_deref_size ------------- b_data[0] = DW_OP_deref_size; @@ -815,7 +815,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void ) LIBGOBLIN_DWARF_STATUS_EVALUATED, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0xabcd ); - CU_ASSERT( 2 == p_exp->dw_depth ); + CU_ASSERT( 1 == p_exp->dw_depth ); // DW_OP_xderef ----------------- b_data[0] = DW_OP_xderef; @@ -851,7 +851,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void ) LIBGOBLIN_DWARF_STATUS_EVALUATED, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0xabcdef ); - CU_ASSERT( 3 == p_exp->dw_depth ); + CU_ASSERT( 1 == p_exp->dw_depth ); // DW_OP_xderef_size ------------ b_data[0] = DW_OP_xderef_size; @@ -890,7 +890,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void ) LIBGOBLIN_DWARF_STATUS_EVALUATED, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0xabcd ); - CU_ASSERT( 3 == p_exp->dw_depth ); + CU_ASSERT( 1 == p_exp->dw_depth ); // DW_OP_push_object_address ---- b_data[0] = DW_OP_push_object_address; @@ -959,7 +959,7 @@ void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void ) LIBGOBLIN_DWARF_STATUS_EVALUATED, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0xabcdef ); - CU_ASSERT( 2 == p_exp->dw_depth ); + CU_ASSERT( 1 == p_exp->dw_depth ); // DW_OP_call_frame_cfa --------- b_data[0] = DW_OP_call_frame_cfa; @@ -1595,12 +1595,14 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void ) b_data1[4] = DW_OP_call2; b_data1[5] = 0x81; b_data1[6] = 0x01; // value = 129 (0x81 0x01) - b_data2[7] = DW_OP_deref; + b_data1[7] = DW_OP_deref; DWARF_Expression_ClearValue( p_exp ); dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 8 ); Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, LIBGOBLIN_DWARF_STATUS_REQUESTED, LIBGOBLIN_DWARF_REQUEST_FRAME_BASE, LIBGOBLIN_DWARF_REQUEST_NONE ); + CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 13 ); + CU_ASSERT( p_exp->dw_depth == 1 ); p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_FRAME_BASE ] = 0x80000000; p_exp->dw_setdata |= LIBGOBLIN_DWARF_REQUEST_FRAME_BASE; @@ -1609,6 +1611,7 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void ) LIBGOBLIN_DWARF_STATUS_CALLING, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.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 ); @@ -1637,7 +1640,12 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void ) LIBGOBLIN_DWARF_REQUEST_XDEREF, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->ptr_reference.value == 0x1234567890abcdef ); CU_ASSERT( p_exp->dw_reqsize == 2 ); - CU_ASSERT( 3 == p_exp->dw_depth ); + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 24 ); + CU_ASSERT( p_exp->t_stack[ 4 ].value.qw_value == 0x1234567890abcdef ); + CU_ASSERT( 5 == p_exp->dw_depth ); CU_ASSERT( p_exp->resume.pb_resume == b_data2 + 11 ); CU_ASSERT( p_exp->resume.qw_remain == 2 ); @@ -1650,34 +1658,155 @@ void Test_LibGoblin_DWARF_Expression_FlowControl_test02_001( void ) LIBGOBLIN_DWARF_STATUS_RETCALL, LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->result.qw_value == 0x00 ); - CU_ASSERT( 4 == p_exp->dw_depth ); 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 ); + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcd ); + CU_ASSERT( 4 == p_exp->dw_depth ); -/* XXX dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 8 ); Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, LIBGOBLIN_DWARF_STATUS_REQUESTED, LIBGOBLIN_DWARF_REQUEST_DEREF, LIBGOBLIN_DWARF_REQUEST_NONE ); CU_ASSERT( p_exp->b_callers == 0 ); - CU_ASSERT( p_exp->resume.pb_resume == b_data1 + 7 ); CU_ASSERT( p_exp->resume.qw_remain == 1 ); -*/ + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcd ); + CU_ASSERT( 4 == p_exp->dw_depth ); -/* + + p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_DEREF ] = 0xabcdef0123456789; + p_exp->dw_setdata |= LIBGOBLIN_DWARF_REQUEST_DEREF; + dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 8 ); + 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->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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcdef0123456789 ); + CU_ASSERT( 4 == p_exp->dw_depth ); + + + // DW_OP_call4: // 0x99 + b_data1[0] = DW_OP_lit25; + b_data1[1] = DW_OP_fbreg; + b_data1[2] = 0x81; + b_data1[3] = 0x01; // value = 129 (0x81 0x01) + b_data1[4] = DW_OP_call4; + b_data1[5] = 0x78; + b_data1[6] = 0x56; + b_data1[7] = 0x34; + b_data1[8] = 0x12; + b_data1[9] = DW_OP_deref; + DWARF_Expression_ClearValue( p_exp ); + dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 10 ); + Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, + LIBGOBLIN_DWARF_STATUS_REQUESTED, + LIBGOBLIN_DWARF_REQUEST_FRAME_BASE, LIBGOBLIN_DWARF_REQUEST_NONE ); + CU_ASSERT( p_exp->t_stack[ 0 ].value.qw_value == 25 ); + CU_ASSERT( p_exp->dw_depth == 1 ); + + 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_data1, 10 ); + 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->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 ); + CU_ASSERT( p_exp->qw_calloffset == 0x12345678 ); + 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 ); - CU_ASSERT( p_exp->qw_calloffset == 0x181 ); + + b_data2[0] = DW_OP_lit26; + b_data2[1] = DW_OP_lit27; + b_data2[2] = DW_OP_const8u; + b_data2[3] = 0xef; + b_data2[4] = 0xcd; + b_data2[5] = 0xab; + b_data2[6] = 0x90; + b_data2[7] = 0x78; + b_data2[8] = 0x56; + b_data2[9] = 0x34; + b_data2[10] = 0x12; + b_data2[11] = DW_OP_xderef_size; + b_data2[12] = 2; + dw_result = DWARF_Expression_Evaluate( p_exp, b_data2, 13 ); + Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, + LIBGOBLIN_DWARF_STATUS_REQUESTED, + LIBGOBLIN_DWARF_REQUEST_XDEREF, LIBGOBLIN_DWARF_REQUEST_NONE ); + CU_ASSERT( p_exp->ptr_reference.value == 0x1234567890abcdef ); + CU_ASSERT( p_exp->dw_reqsize == 2 ); + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 27 ); + CU_ASSERT( p_exp->t_stack[ 4 ].value.qw_value == 0x1234567890abcdef ); + CU_ASSERT( 5 == p_exp->dw_depth ); + + CU_ASSERT( p_exp->resume.pb_resume == b_data2 + 11 ); + CU_ASSERT( p_exp->resume.qw_remain == 2 ); + + + p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_XDEREF ] = 0xabcd; + p_exp->dw_setdata |= LIBGOBLIN_DWARF_REQUEST_XDEREF; + dw_result = DWARF_Expression_Evaluate( p_exp, b_data2, 13 ); + 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->b_callers == 1 ); - CU_ASSERT( p_exp->caller[ 0 ].pb_return == b_data1 + 7 ); + CU_ASSERT( p_exp->caller[ 0 ].pb_return == b_data1 + 9 ); CU_ASSERT( p_exp->caller[ 0 ].qw_retremain == 1 ); -*/ - // DW_OP_call4: // 0x99 + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcd ); + CU_ASSERT( 4 == p_exp->dw_depth ); + + + dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 10 ); + Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, + LIBGOBLIN_DWARF_STATUS_REQUESTED, + LIBGOBLIN_DWARF_REQUEST_DEREF, LIBGOBLIN_DWARF_REQUEST_NONE ); + CU_ASSERT( p_exp->b_callers == 0 ); + CU_ASSERT( p_exp->resume.pb_resume == b_data1 + 9 ); + CU_ASSERT( p_exp->resume.qw_remain == 1 ); + 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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcd ); + CU_ASSERT( 4 == p_exp->dw_depth ); + + + p_exp->qw_reqdata[ LIBGOBLIN_DWARF_DATAID_DEREF ] = 0xabcdef0123456789; + p_exp->dw_setdata |= LIBGOBLIN_DWARF_REQUEST_DEREF; + dw_result = DWARF_Expression_Evaluate( p_exp, b_data1, 10 ); + Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp, + 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->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 ); + CU_ASSERT( p_exp->t_stack[ 3 ].value.qw_value == 0xabcdef0123456789 ); + CU_ASSERT( 4 == p_exp->dw_depth ); + + // DW_OP_call_ref: // 0x9a