Test_LibGoblin_DWARF_Expression_RegBase_bregX( DW_OP_breg30 );
Test_LibGoblin_DWARF_Expression_RegBase_bregX( DW_OP_breg31 );
+
+ // 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)
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_REQUESTED,
+ (LIBGOBLIN_DWARF_DATA_REG | 0x0a), LIBGOBLIN_DWARF_DATA_NONE );
+
+ t_exp.qw_reg[0x0a] = 0x80000000;
+ t_exp.dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | 0x0a );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | 0x0a) );
+ CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+
+
+ b_data[0] = DW_OP_bregx;
+ b_data[1] = 0x1f;
+ b_data[2] = 0xff;
+ b_data[3] = 0x7e; // value = -129 (0xff 0x7e)
+ DWARF_Expression_ClearValue( &t_exp );
+ t_exp.qw_reg[0x1f] = 0x80000000;
+ t_exp.dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | 0x1f );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | 0x1f ) );
+ CU_ASSERT( t_exp.result.qw_value == (0x80000000 - 129) );
+
+
+ return;
+}
+
+
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
+{
+ Byte b_data[16];
+ DWord dw_result;
+ LibGoblin_DWARF_Expression t_exp;
+
+ // DW_OP_dup ---------------
+ b_data[0] = DW_OP_dup;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_ERROR,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ b_data[0] = DW_OP_lit10;
+ b_data[1] = DW_OP_dup;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+ CU_ASSERT( t_exp.result.qw_value == 10 );
+
+ // DW_OP_drop ---------------
+ b_data[0] = DW_OP_drop;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_ERROR,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ b_data[0] = DW_OP_lit10;
+ b_data[1] = DW_OP_drop;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_ERROR,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ b_data[0] = DW_OP_lit31;
+ b_data[1] = DW_OP_lit10;
+ b_data[2] = DW_OP_drop;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+ CU_ASSERT( t_exp.result.qw_value == 31 );
+
+ // DW_OP_over ---------------
+ b_data[0] = DW_OP_over;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_ERROR,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ b_data[0] = DW_OP_lit10;
+ b_data[1] = DW_OP_over;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_ERROR,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ b_data[0] = DW_OP_lit30;
+ b_data[1] = DW_OP_lit11;
+ b_data[2] = DW_OP_drop;
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+ CU_ASSERT( t_exp.result.qw_value == 30 );
+
+ // DW_OP_pick ---------------
+
+
+ // DW_OP_fbreg --------------
+/*
+ b_data[0] = DW_OP_fbreg;
+ b_data[1] = 0x81;
+ b_data[2] = 0x01; // value = 129 (0x81 0x01)
+ DWARF_Expression_ClearValue( &t_exp );
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_REQUESTED,
+ LIBGOBLIN_DWARF_DATA_FRAME_BASE, LIBGOBLIN_DWARF_DATA_NONE );
+
+ t_exp.qw_frame_base = 0x80000000;
+ t_exp.dw_setdata |= LIBGOBLIN_DWARF_DATA_FRAME_BASE;
+ dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ LIBGOBLIN_DWARF_STATUS_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_FRAME_BASE );
+ CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+*/
+
return;
}
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
DRD64_TEST_LIBGOBLIN_DWARF_EXPRESSION_EXTERN
Test_LibGoblin_DWARF_Expression_Constant_test00_001 );
CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_RegBase_test01_001",
Test_LibGoblin_DWARF_Expression_RegBase_test01_001 );
+ CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_StackOperation_test02_001",
+ Test_LibGoblin_DWARF_Expression_StackOperation_test02_001 );
return 0x00;
/* EOF of drd64_.c ----------------------------------- */
/*
- DW_OP_addr: // 0x03
DW_OP_deref: // 0x06
- DW_OP_const1u: // 0x08
- DW_OP_const1s: // 0x09
- DW_OP_const2u: // 0x0a
- DW_OP_const2s: // 0x0b
- DW_OP_const4u: // 0x0c
- DW_OP_const4s: // 0x0d
- DW_OP_const8u: // 0x0e
- DW_OP_const8s: // 0x0f
- DW_OP_constu: // 0x10
- DW_OP_consts: // 0x11
- DW_OP_dup: // 0x12
- DW_OP_drop: // 0x13
- DW_OP_over: // 0x14
- DW_OP_pick: // 0x15
DW_OP_swap: // 0x16
DW_OP_rot: // 0x17
DW_OP_xderef: // 0x18
DW_OP_reg29: // 0x6d
DW_OP_reg30: // 0x6e
DW_OP_reg31: // 0x6f
- DW_OP_breg0: // 0x70
- DW_OP_breg1: // 0x71
- DW_OP_breg2: // 0x72
- DW_OP_breg3: // 0x73
- DW_OP_breg4: // 0x74
- DW_OP_breg5: // 0x75
- DW_OP_breg6: // 0x76
- DW_OP_breg7: // 0x77
- DW_OP_breg8: // 0x78
- DW_OP_breg9: // 0x79
- DW_OP_breg10: // 0x7a
- DW_OP_breg11: // 0x7b
- DW_OP_breg12: // 0x7c
- DW_OP_breg13: // 0x7d
- DW_OP_breg14: // 0x7e
- DW_OP_breg15: // 0x7f
- DW_OP_breg16: // 0x80
- DW_OP_breg17: // 0x81
- DW_OP_breg18: // 0x82
- DW_OP_breg19: // 0x83
- DW_OP_breg20: // 0x84
- DW_OP_breg21: // 0x85
- DW_OP_breg22: // 0x86
- DW_OP_breg23: // 0x87
- DW_OP_breg24: // 0x88
- DW_OP_breg25: // 0x89
- DW_OP_breg26: // 0x8a
- DW_OP_breg27: // 0x8b
- DW_OP_breg28: // 0x8c
- DW_OP_breg29: // 0x8d
- DW_OP_breg30: // 0x8e
- DW_OP_breg31: // 0x8f
DW_OP_regx: // 0x90
- DW_OP_fbreg: // 0x91
- DW_OP_bregx: // 0x92
DW_OP_piece: // 0x93
DW_OP_deref_size: // 0x94
DW_OP_xderef_size: // 0x95