/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+void
+ DWARF_Expression_ClearValue(
+ LibGoblin_DWARF_Expression *p_exp )
+{
+ assert( NULL != p_exp );
+
+ memset( p_exp, 0x00, sizeof( LibGoblin_DWARF_Expression ) );
+ return;
+}
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_EXPRESSION_EXTERN
int
- DWARF_Expression_Evaluate(
- Byte *pb_data,
- DWord dw_size )
+ DWARF_Expression_SetDefaultValue(
+ LibGoblin_DWARF_Expression *p_exp,
+ LibGoblin_BinaryInfo *p_binfo )
{
+ if( NULL == p_exp ) {
+ return -0x01;
+ }
+
+ if( NULL == p_binfo ) {
+ return -0x02;
+ }
+
+ p_exp->dw_setdata = LIBGOBLIN_DWARF_DATA_NONE;
+
+ if( LIBGOBLIN_BINFO_TYPE_ELF32 == p_binfo->b_type )
+ { p_exp->dw_addrsize = 4; }
+ else // LIBGOBLIN_BINFO_TYPE_ELF64
+ { p_exp->dw_addrsize = 8; }
+ p_exp->dw_setdata |= LIBGOBLIN_DWARF_DATA_ADDRSIZE;
+
return 0x00;
}
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+DWord
+ DWARF_Expression_Evaluate(
+ LibGoblin_DWARF_Expression *p_exp,
+ Byte *pb_data,
+ DWord dw_size )
+{
+ Byte b_opcode;
+ Byte *pb_now;
+ DWord dw_remain;
+ DWord dw_depth;
+ QWord qw_stack[32];
+
+#define PUSH_DWARF(n) {qw_stack[dw_depth++] = (n);}
+
+ // ------------------------
+ if( NULL == p_exp ) {
+ return (LIBGOBLIN_DWARF_STATUS_ERROR | 0x01);
+ }
+
+ if( NULL == pb_data ) {
+ return (LIBGOBLIN_DWARF_STATUS_ERROR | 0x01);
+ }
+
+ // ------------------------
+ pb_now = pb_data;
+ dw_depth = 0;
+ dw_remain = (( 0 == dw_size ) ? 512 : dw_size );
+ p_exp->qw_result = 0x00000000;
+ do {
+ b_opcode = *pb_now++;
+ dw_remain--;
+
+ switch( b_opcode ) {
+ case DW_OP_addr: // 0x03
+ if( p_exp->dw_setdata | LIBGOBLIN_DWARF_DATA_ADDRSIZE )
+ { PUSH_DWARF( p_exp->dw_addrsize ); }
+ else {
+ p_exp->dw_requested |= LIBGOBLIN_DWARF_DATA_ADDRSIZE;
+ PUSH_DWARF( 8 ); // 8 is temp. value
+ }
+ break;
+ case DW_OP_deref: // 0x06
+ break;
+ case DW_OP_const1u: // 0x08
+ break;
+ case DW_OP_const1s: // 0x09
+ break;
+ case DW_OP_const2u: // 0x0a
+ break;
+ case DW_OP_const2s: // 0x0b
+ break;
+ case DW_OP_const4u: // 0x0c
+ break;
+ case DW_OP_const4s: // 0x0d
+ break;
+ case DW_OP_const8u: // 0x0e
+ break;
+ case DW_OP_const8s: // 0x0f
+ break;
+ case DW_OP_constu: // 0x10
+ break;
+ case DW_OP_consts: // 0x11
+ break;
+ case DW_OP_dup: // 0x12
+ break;
+ case DW_OP_drop: // 0x13
+ break;
+ case DW_OP_over: // 0x14
+ break;
+ case DW_OP_pick: // 0x15
+ break;
+ case DW_OP_swap: // 0x16
+ break;
+ case DW_OP_rot: // 0x17
+ break;
+ case DW_OP_xderef: // 0x18
+ break;
+ case DW_OP_abs: // 0x19
+ break;
+ case DW_OP_and: // 0x1a
+ break;
+ case DW_OP_div: // 0x1b
+ break;
+ case DW_OP_minus: // 0x1c
+ break;
+ case DW_OP_mod: // 0x1d
+ break;
+ case DW_OP_mul: // 0x1e
+ break;
+ case DW_OP_neg: // 0x1f
+ break;
+ case DW_OP_not: // 0x20
+ break;
+ case DW_OP_or: // 0x21
+ break;
+ case DW_OP_plus: // 0x22
+ break;
+ case DW_OP_plus_uconst: // 0x23
+ break;
+ case DW_OP_shl: // 0x24
+ break;
+ case DW_OP_shr: // 0x25
+ break;
+ case DW_OP_shra: // 0x26
+ break;
+ case DW_OP_xor: // 0x27
+ break;
+ case DW_OP_bra: // 0x28
+ break;
+ case DW_OP_eq: // 0x29
+ break;
+ case DW_OP_ge: // 0x2a
+ break;
+ case DW_OP_gt: // 0x2b
+ break;
+ case DW_OP_le: // 0x2c
+ break;
+ case DW_OP_lt: // 0x2d
+ break;
+ case DW_OP_ne: // 0x2e
+ break;
+ case DW_OP_skip: // 0x2f
+ break;
+
+ case DW_OP_lit0: // 0x30
+ PUSH_DWARF( 0 ); break;
+ case DW_OP_lit1: // 0x31
+ PUSH_DWARF( 1 ); break;
+ case DW_OP_lit2: // 0x32
+ PUSH_DWARF( 2 ); break;
+ case DW_OP_lit3: // 0x33
+ PUSH_DWARF( 3 ); break;
+ case DW_OP_lit4: // 0x34
+ PUSH_DWARF( 4 ); break;
+ case DW_OP_lit5: // 0x35
+ PUSH_DWARF( 5 ); break;
+ case DW_OP_lit6: // 0x36
+ PUSH_DWARF( 6 ); break;
+ case DW_OP_lit7: // 0x37
+ PUSH_DWARF( 7 ); break;
+ case DW_OP_lit8: // 0x38
+ PUSH_DWARF( 8 ); break;
+ case DW_OP_lit9: // 0x39
+ PUSH_DWARF( 9 ); break;
+ case DW_OP_lit10: // 0x3a
+ PUSH_DWARF( 10 ); break;
+ case DW_OP_lit11: // 0x3b
+ PUSH_DWARF( 11 ); break;
+ case DW_OP_lit12: // 0x3c
+ PUSH_DWARF( 12 ); break;
+ case DW_OP_lit13: // 0x3d
+ PUSH_DWARF( 13 ); break;
+ case DW_OP_lit14: // 0x3e
+ PUSH_DWARF( 14 ); break;
+ case DW_OP_lit15: // 0x3f
+ PUSH_DWARF( 15 ); break;
+ case DW_OP_lit16: // 0x40
+ PUSH_DWARF( 16 ); break;
+ case DW_OP_lit17: // 0x41
+ PUSH_DWARF( 17 ); break;
+ case DW_OP_lit18: // 0x42
+ PUSH_DWARF( 18 ); break;
+ case DW_OP_lit19: // 0x43
+ PUSH_DWARF( 19 ); break;
+ case DW_OP_lit20: // 0x44
+ PUSH_DWARF( 20 ); break;
+ case DW_OP_lit21: // 0x45
+ PUSH_DWARF( 21 ); break;
+ case DW_OP_lit22: // 0x46
+ PUSH_DWARF( 22 ); break;
+ case DW_OP_lit23: // 0x47
+ PUSH_DWARF( 23 ); break;
+ case DW_OP_lit24: // 0x48
+ PUSH_DWARF( 24 ); break;
+ case DW_OP_lit25: // 0x49
+ PUSH_DWARF( 25 ); break;
+ case DW_OP_lit26: // 0x4a
+ PUSH_DWARF( 26 ); break;
+ case DW_OP_lit27: // 0x4b
+ PUSH_DWARF( 27 ); break;
+ case DW_OP_lit28: // 0x4c
+ PUSH_DWARF( 28 ); break;
+ case DW_OP_lit29: // 0x4d
+ PUSH_DWARF( 29 ); break;
+ case DW_OP_lit30: // 0x4e
+ PUSH_DWARF( 30 ); break;
+ case DW_OP_lit31: // 0x4f
+ PUSH_DWARF( 31 ); break;
+
+ case DW_OP_reg0: // 0x50
+ break;
+ case DW_OP_reg1: // 0x51
+ break;
+ case DW_OP_reg2: // 0x52
+ break;
+ case DW_OP_reg3: // 0x53
+ break;
+ case DW_OP_reg4: // 0x54
+ break;
+ case DW_OP_reg5: // 0x55
+ break;
+ case DW_OP_reg6: // 0x56
+ break;
+ case DW_OP_reg7: // 0x57
+ break;
+ case DW_OP_reg8: // 0x58
+ break;
+ case DW_OP_reg9: // 0x59
+ break;
+ case DW_OP_reg10: // 0x5a
+ break;
+ case DW_OP_reg11: // 0x5b
+ break;
+ case DW_OP_reg12: // 0x5c
+ break;
+ case DW_OP_reg13: // 0x5d
+ break;
+ case DW_OP_reg14: // 0x5e
+ break;
+ case DW_OP_reg15: // 0x5f
+ break;
+ case DW_OP_reg16: // 0x60
+ break;
+ case DW_OP_reg17: // 0x61
+ break;
+ case DW_OP_reg18: // 0x62
+ break;
+ case DW_OP_reg19: // 0x63
+ break;
+ case DW_OP_reg20: // 0x64
+ break;
+ case DW_OP_reg21: // 0x65
+ break;
+ case DW_OP_reg22: // 0x66
+ break;
+ case DW_OP_reg23: // 0x67
+ break;
+ case DW_OP_reg24: // 0x68
+ break;
+ case DW_OP_reg25: // 0x69
+ break;
+ case DW_OP_reg26: // 0x6a
+ break;
+ case DW_OP_reg27: // 0x6b
+ break;
+ case DW_OP_reg28: // 0x6c
+ break;
+ case DW_OP_reg29: // 0x6d
+ break;
+ case DW_OP_reg30: // 0x6e
+ break;
+ case DW_OP_reg31: // 0x6f
+ break;
+ case DW_OP_breg0: // 0x70
+ break;
+ case DW_OP_breg1: // 0x71
+ break;
+ case DW_OP_breg2: // 0x72
+ break;
+ case DW_OP_breg3: // 0x73
+ break;
+ case DW_OP_breg4: // 0x74
+ break;
+ case DW_OP_breg5: // 0x75
+ break;
+ case DW_OP_breg6: // 0x76
+ break;
+ case DW_OP_breg7: // 0x77
+ break;
+ case DW_OP_breg8: // 0x78
+ break;
+ case DW_OP_breg9: // 0x79
+ break;
+ case DW_OP_breg10: // 0x7a
+ break;
+ case DW_OP_breg11: // 0x7b
+ break;
+ case DW_OP_breg12: // 0x7c
+ break;
+ case DW_OP_breg13: // 0x7d
+ break;
+ case DW_OP_breg14: // 0x7e
+ break;
+ case DW_OP_breg15: // 0x7f
+ break;
+ case DW_OP_breg16: // 0x80
+ break;
+ case DW_OP_breg17: // 0x81
+ break;
+ case DW_OP_breg18: // 0x82
+ break;
+ case DW_OP_breg19: // 0x83
+ break;
+ case DW_OP_breg20: // 0x84
+ break;
+ case DW_OP_breg21: // 0x85
+ break;
+ case DW_OP_breg22: // 0x86
+ break;
+ case DW_OP_breg23: // 0x87
+ break;
+ case DW_OP_breg24: // 0x88
+ break;
+ case DW_OP_breg25: // 0x89
+ break;
+ case DW_OP_breg26: // 0x8a
+ break;
+ case DW_OP_breg27: // 0x8b
+ break;
+ case DW_OP_breg28: // 0x8c
+ break;
+ case DW_OP_breg29: // 0x8d
+ break;
+ case DW_OP_breg30: // 0x8e
+ break;
+ case DW_OP_breg31: // 0x8f
+ break;
+ case DW_OP_regx: // 0x90
+ break;
+ case DW_OP_fbreg: // 0x91
+ break;
+ case DW_OP_bregx: // 0x92
+ break;
+ case DW_OP_piece: // 0x93
+ break;
+ case DW_OP_deref_size: // 0x94
+ break;
+ case DW_OP_xderef_size: // 0x95
+ break;
+ case DW_OP_nop: // 0x96
+ break;
+ case DW_OP_push_object_address: // 0x97
+ break;
+ case DW_OP_call2: // 0x98
+ break;
+ case DW_OP_call4: // 0x99
+ break;
+ case DW_OP_call_ref: // 0x9a
+ break;
+ case DW_OP_form_tls_address: // 0x9b
+ break;
+ case DW_OP_call_frame_cfa: // 0x9c
+ break;
+ case DW_OP_bit_piece: // 0x9d
+ break;
+ case DW_OP_implicit_value: // 0x9e
+ break;
+ case DW_OP_stack_value: // 0x9f
+ break;
+ // case DW_OP_lo_user: // 0xe0
+ // break;
+ // case DW_OP_hi_user: // 0xff
+ // break;
+ case DW_OP_GNU_push_tls_address: // 0xe0
+ break;
+ case DW_OP_GNU_uninit: // 0xf0
+ break;
+ case DW_OP_GNU_encoded_addr: // 0xf1
+ break;
+ case DW_OP_GNU_implicit_pointer: // 0xf2
+ break;
+ case DW_OP_GNU_entry_value: // 0xf3
+ break;
+ case DW_OP_GNU_const_type: // 0xf4
+ break;
+ case DW_OP_GNU_regval_type: // 0xf5
+ break;
+ case DW_OP_GNU_deref_type: // 0xf6
+ break;
+ case DW_OP_GNU_convert: // 0xf7
+ break;
+ case DW_OP_GNU_reinterpret: // 0xf9
+ break;
+ case DW_OP_GNU_parameter_ref: // 0xfa
+ break;
+ case DW_OP_GNU_addr_index: // 0xfb
+ break;
+ case DW_OP_GNU_const_index: // 0xfc
+ break;
+ default:
+ break;
+ }
+
+ }while( 0 < dw_remain );
+
+ if( LIBGOBLIN_DWARF_DATA_NONE != p_exp->dw_requested )
+ { p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_REQUESTED; }
+ else if( 1 == dw_depth ) {
+ p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_EVALUATED;
+ p_exp->qw_result = qw_stack[ 0 ];
+ }
+
+ return p_exp->dw_status;
+}
/* 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_abs: // 0x19
- DW_OP_and: // 0x1a
- DW_OP_div: // 0x1b
- DW_OP_minus: // 0x1c
- DW_OP_mod: // 0x1d
- DW_OP_mul: // 0x1e
- DW_OP_neg: // 0x1f
- DW_OP_not: // 0x20
- DW_OP_or: // 0x21
- DW_OP_plus: // 0x22
- DW_OP_plus_uconst: // 0x23
- DW_OP_shl: // 0x24
- DW_OP_shr: // 0x25
- DW_OP_shra: // 0x26
- DW_OP_xor: // 0x27
- DW_OP_bra: // 0x28
- DW_OP_eq: // 0x29
- DW_OP_ge: // 0x2a
- DW_OP_gt: // 0x2b
- DW_OP_le: // 0x2c
- DW_OP_lt: // 0x2d
- DW_OP_ne: // 0x2e
- DW_OP_skip: // 0x2f
- DW_OP_lit0: // 0x30
- DW_OP_lit1: // 0x31
- DW_OP_lit2: // 0x32
- DW_OP_lit3: // 0x33
- DW_OP_lit4: // 0x34
- DW_OP_lit5: // 0x35
- DW_OP_lit6: // 0x36
- DW_OP_lit7: // 0x37
- DW_OP_lit8: // 0x38
- DW_OP_lit9: // 0x39
- DW_OP_lit10: // 0x3a
- DW_OP_lit11: // 0x3b
- DW_OP_lit12: // 0x3c
- DW_OP_lit13: // 0x3d
- DW_OP_lit14: // 0x3e
- DW_OP_lit15: // 0x3f
- DW_OP_lit16: // 0x40
- DW_OP_lit17: // 0x41
- DW_OP_lit18: // 0x42
- DW_OP_lit19: // 0x43
- DW_OP_lit20: // 0x44
- DW_OP_lit21: // 0x45
- DW_OP_lit22: // 0x46
- DW_OP_lit23: // 0x47
- DW_OP_lit24: // 0x48
- DW_OP_lit25: // 0x49
- DW_OP_lit26: // 0x4a
- DW_OP_lit27: // 0x4b
- DW_OP_lit28: // 0x4c
- DW_OP_lit29: // 0x4d
- DW_OP_lit30: // 0x4e
- DW_OP_lit31: // 0x4f
- DW_OP_reg0: // 0x50
- DW_OP_reg1: // 0x51
- DW_OP_reg2: // 0x52
- DW_OP_reg3: // 0x53
- DW_OP_reg4: // 0x54
- DW_OP_reg5: // 0x55
- DW_OP_reg6: // 0x56
- DW_OP_reg7: // 0x57
- DW_OP_reg8: // 0x58
- DW_OP_reg9: // 0x59
- DW_OP_reg10: // 0x5a
- DW_OP_reg11: // 0x5b
- DW_OP_reg12: // 0x5c
- DW_OP_reg13: // 0x5d
- DW_OP_reg14: // 0x5e
- DW_OP_reg15: // 0x5f
- DW_OP_reg16: // 0x60
- DW_OP_reg17: // 0x61
- DW_OP_reg18: // 0x62
- DW_OP_reg19: // 0x63
- DW_OP_reg20: // 0x64
- DW_OP_reg21: // 0x65
- DW_OP_reg22: // 0x66
- DW_OP_reg23: // 0x67
- DW_OP_reg24: // 0x68
- DW_OP_reg25: // 0x69
- DW_OP_reg26: // 0x6a
- DW_OP_reg27: // 0x6b
- DW_OP_reg28: // 0x6c
- 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
- DW_OP_nop: // 0x96
- DW_OP_push_object_address: // 0x97
- DW_OP_call2: // 0x98
- DW_OP_call4: // 0x99
- DW_OP_call_ref: // 0x9a
- DW_OP_form_tls_address: // 0x9b
- DW_OP_call_frame_cfa: // 0x9c
- DW_OP_bit_piece: // 0x9d
- DW_OP_implicit_value: // 0x9e
- DW_OP_stack_value: // 0x9f
- DW_OP_lo_user: // 0xe0
- DW_OP_hi_user: // 0xff
- DW_OP_GNU_push_tls_address: // 0xe0
- DW_OP_GNU_uninit: // 0xf0
- DW_OP_GNU_encoded_addr: // 0xf1
- DW_OP_GNU_implicit_pointer: // 0xf2
- DW_OP_GNU_entry_value: // 0xf3
- DW_OP_GNU_const_type: // 0xf4
- DW_OP_GNU_regval_type: // 0xf5
- DW_OP_GNU_deref_type: // 0xf6
- DW_OP_GNU_convert: // 0xf7
- DW_OP_GNU_reinterpret: // 0xf9
- DW_OP_GNU_parameter_ref: // 0xfa
- DW_OP_GNU_addr_index: // 0xfb
- DW_OP_GNU_const_index: // 0xfc
-*/
#include"drd64_libgoblin.h"
#include"test_libgoblin.h"
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_CheckStruct(
+ LibGoblin_DWARF_Expression *p_exp,
+ DWord dw_status, DWord dw_requested, DWord dw_setdata )
+{
+ CU_ASSERT( dw_status == p_exp->dw_status );
+ CU_ASSERT( dw_requested == p_exp->dw_requested );
+ CU_ASSERT( dw_setdata == p_exp->dw_setdata );
+
+ if(( dw_status != p_exp->dw_status )
+ || ( dw_requested != p_exp->dw_requested )
+ || ( dw_setdata != p_exp->dw_setdata )) {
+
+ printf( " [DEBUG] DWARF Expression: status= %2xh, requested= %2xh,"
+ " setdata=%2xh, result= %8xh\n",
+ p_exp->dw_status, p_exp->dw_requested,
+ p_exp->dw_setdata, p_exp->qw_result );
+ }
+
+ return;
+}
+
/* (API) LibGoblin_Init() & Term() ************************************/
/*--------------------------------------------------------------------*/
-void Test_LibGoblin_DWARF_Expression_test00_001( void )
+void Test_LibGoblin_DWARF_Expression_CheckLitX(
+ Byte b_opcode, QWord qw_value )
+{
+ Byte b_data[2];
+ DWord dw_result;
+ LibGoblin_DWARF_Expression t_exp;
+
+ b_data[0] = b_opcode;
+
+ 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_EVALUATED,
+ LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
+ CU_ASSERT( t_exp.qw_result == qw_value );
+
+ return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
{
int i_result;
+ Byte b_data[64];
+ DWord dw_size;
+ DWord dw_result;
+ LibGoblin_DWARF_Expression t_exp;
-/*
- i_result = LibGoblin_Init();
- CU_ASSERT( 0x00 == i_result );
- i_result = LibGoblin_Term();
- CU_ASSERT( 0x00 == i_result );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit0, 0 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit1, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit2, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit3, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit4, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit5, 5 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit6, 6 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit7, 7 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit8, 8 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit9, 9 );
+
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit10,10 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit11,11 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit12,12 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit13,13 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit14,14 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit15,15 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit16,16 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit17,17 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit18,18 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit19,19 );
+
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit20,20 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit21,21 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit22,22 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit23,23 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit24,24 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit25,25 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit26,26 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit27,27 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit28,28 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit29,29 );
+
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit30,30 );
+ Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit31,31 );
+
+/*
+ printf( " [DEBUG] DWARF Expression: status= %2xh, requested= %2xh, setdata=%2xh, result= %8xh\n",
+ t_exp.dw_status, t_exp.dw_requested, t_exp.dw_setdata, t_exp.qw_result );
*/
return;
pt_goblin = CU_add_suite( "LibGoblin_DWARF_Expression", NULL, NULL );
- CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_test00_001",
- Test_LibGoblin_DWARF_Expression_test00_001 );
+ CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_Constant_test00_001",
+ Test_LibGoblin_DWARF_Expression_Constant_test00_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_abs: // 0x19
+ DW_OP_and: // 0x1a
+ DW_OP_div: // 0x1b
+ DW_OP_minus: // 0x1c
+ DW_OP_mod: // 0x1d
+ DW_OP_mul: // 0x1e
+ DW_OP_neg: // 0x1f
+ DW_OP_not: // 0x20
+ DW_OP_or: // 0x21
+ DW_OP_plus: // 0x22
+ DW_OP_plus_uconst: // 0x23
+ DW_OP_shl: // 0x24
+ DW_OP_shr: // 0x25
+ DW_OP_shra: // 0x26
+ DW_OP_xor: // 0x27
+ DW_OP_bra: // 0x28
+ DW_OP_eq: // 0x29
+ DW_OP_ge: // 0x2a
+ DW_OP_gt: // 0x2b
+ DW_OP_le: // 0x2c
+ DW_OP_lt: // 0x2d
+ DW_OP_ne: // 0x2e
+ DW_OP_skip: // 0x2f
+ DW_OP_reg0: // 0x50
+ DW_OP_reg1: // 0x51
+ DW_OP_reg2: // 0x52
+ DW_OP_reg3: // 0x53
+ DW_OP_reg4: // 0x54
+ DW_OP_reg5: // 0x55
+ DW_OP_reg6: // 0x56
+ DW_OP_reg7: // 0x57
+ DW_OP_reg8: // 0x58
+ DW_OP_reg9: // 0x59
+ DW_OP_reg10: // 0x5a
+ DW_OP_reg11: // 0x5b
+ DW_OP_reg12: // 0x5c
+ DW_OP_reg13: // 0x5d
+ DW_OP_reg14: // 0x5e
+ DW_OP_reg15: // 0x5f
+ DW_OP_reg16: // 0x60
+ DW_OP_reg17: // 0x61
+ DW_OP_reg18: // 0x62
+ DW_OP_reg19: // 0x63
+ DW_OP_reg20: // 0x64
+ DW_OP_reg21: // 0x65
+ DW_OP_reg22: // 0x66
+ DW_OP_reg23: // 0x67
+ DW_OP_reg24: // 0x68
+ DW_OP_reg25: // 0x69
+ DW_OP_reg26: // 0x6a
+ DW_OP_reg27: // 0x6b
+ DW_OP_reg28: // 0x6c
+ 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
+ DW_OP_nop: // 0x96
+ DW_OP_push_object_address: // 0x97
+ DW_OP_call2: // 0x98
+ DW_OP_call4: // 0x99
+ DW_OP_call_ref: // 0x9a
+ DW_OP_form_tls_address: // 0x9b
+ DW_OP_call_frame_cfa: // 0x9c
+ DW_OP_bit_piece: // 0x9d
+ DW_OP_implicit_value: // 0x9e
+ DW_OP_stack_value: // 0x9f
+ DW_OP_lo_user: // 0xe0
+ DW_OP_hi_user: // 0xff
+ DW_OP_GNU_push_tls_address: // 0xe0
+ DW_OP_GNU_uninit: // 0xf0
+ DW_OP_GNU_encoded_addr: // 0xf1
+ DW_OP_GNU_implicit_pointer: // 0xf2
+ DW_OP_GNU_entry_value: // 0xf3
+ DW_OP_GNU_const_type: // 0xf4
+ DW_OP_GNU_regval_type: // 0xf5
+ DW_OP_GNU_deref_type: // 0xf6
+ DW_OP_GNU_convert: // 0xf7
+ DW_OP_GNU_reinterpret: // 0xf9
+ DW_OP_GNU_parameter_ref: // 0xfa
+ DW_OP_GNU_addr_index: // 0xfb
+ DW_OP_GNU_const_index: // 0xfc
+*/