CU_ASSERT( NULL != p_exp );
// DW_OP_eq: // 0x29
- // DW_OP_ge: // 0x2a
- // DW_OP_gt: // 0x2b
- // DW_OP_le: // 0x2c
- // DW_OP_lt: // 0x2d
+ b_data[0] = DW_OP_lit5;
+ b_data[1] = DW_OP_lit4;
+ b_data[2] = DW_OP_eq;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit3;
+ b_data[1] = DW_OP_lit3;
+ b_data[2] = DW_OP_eq;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ // DW_OP_ge: // 0x2a (second >= first)
+ b_data[0] = DW_OP_lit2; // second.
+ b_data[1] = DW_OP_lit6; // first.
+ b_data[2] = DW_OP_ge;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit6; // second.
+ b_data[1] = DW_OP_lit2; // first.
+ b_data[2] = DW_OP_ge;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit2;
+ b_data[1] = DW_OP_lit2;
+ b_data[2] = DW_OP_ge;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ // DW_OP_gt: // 0x2b (second > first)
+ b_data[0] = DW_OP_lit2; // second.
+ b_data[1] = DW_OP_lit6; // first.
+ b_data[2] = DW_OP_gt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit6; // second.
+ b_data[1] = DW_OP_lit2; // first.
+ b_data[2] = DW_OP_gt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit2;
+ b_data[1] = DW_OP_lit2;
+ b_data[2] = DW_OP_gt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ // DW_OP_le: // 0x2c (second <= first)
+ b_data[0] = DW_OP_lit7; // second.
+ b_data[1] = DW_OP_lit8; // first.
+ b_data[2] = DW_OP_le;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit8; // second.
+ b_data[1] = DW_OP_lit7; // first.
+ b_data[2] = DW_OP_le;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit7;
+ b_data[1] = DW_OP_lit7;
+ b_data[2] = DW_OP_le;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ // DW_OP_lt: // 0x2d (second < first)
+ b_data[0] = DW_OP_lit7; // second.
+ b_data[1] = DW_OP_lit8; // first.
+ b_data[2] = DW_OP_lt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit8; // second.
+ b_data[1] = DW_OP_lit7; // first.
+ b_data[2] = DW_OP_lt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit7;
+ b_data[1] = DW_OP_lit7;
+ b_data[2] = DW_OP_lt;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
// DW_OP_ne: // 0x2e
+ b_data[0] = DW_OP_lit12;
+ b_data[1] = DW_OP_lit14;
+ b_data[2] = DW_OP_ne;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x01 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x01 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
+ b_data[0] = DW_OP_lit13;
+ b_data[1] = DW_OP_lit13;
+ b_data[2] = DW_OP_ne;
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_REQUEST_NONE, LIBGOBLIN_DWARF_REQUEST_NONE );
+ CU_ASSERT( p_exp->result.qw_value == 0x00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0x00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+
// DW_OP_skip: // 0x2f
- // DW_OP_bra: // 0x28
+ b_data[0] = DW_OP_lit15;
+ b_data[1] = DW_OP_skip;
+ b_data[2] = 0x04;
+ b_data[3] = 0x00; // for b_data[8]
+ b_data[4] = DW_OP_lit17;
+ b_data[5] = DW_OP_skip;
+ b_data[6] = 0x04;
+ b_data[7] = 0x00; // for b_data[12]
+ b_data[8] = DW_OP_lit16;
+ b_data[9] = DW_OP_skip;
+ b_data[10] = 0xf8;
+ b_data[11] = 0xff; // for b_data[4]
+ b_data[12] = DW_OP_lit18;
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 13 );
+ 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->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 );
+ CU_ASSERT( p_exp->t_stack[ 3 ].value.ii_value == 18 );
+ CU_ASSERT( p_exp->dw_depth == 4 );
+
+ // DW_OP_bra // 0x28
/*
+ b_data[0] = DW_OP_const4u;
+ b_data[1] = 0xff;
+ 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 );
+ 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 == 0xff00ff00 );
+ CU_ASSERT( p_exp->t_stack[ 0 ].value.ii_value == 0xff00ff00 );
+ CU_ASSERT( p_exp->dw_depth == 1 );
+*/
+/*
b_data[0] = DW_OP_fbreg;
b_data[1] = 0x81;
b_data[2] = 0x01; // value = 129 (0x81 0x01)
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 );
*/