DWARF_Expression_ClearValue(
LibGoblin_DWARF_Expression *p_exp )
{
+ int i_id;
+ LibGoblin_DWARF_Expression *p_next;
+
assert( NULL != p_exp );
- memset( p_exp, 0x00, sizeof( LibGoblin_DWARF_Expression ) );
+ i_id = p_exp->i_id;
+ p_next = p_exp->p_next;
+ memset( p_exp, 0x00, sizeof( LibGoblin_DWARF_Expression ) );
+ p_exp->i_id = i_id;
+ p_exp->p_next = p_next;
+
return;
}
Byte b_reg;
Byte *pb_now;
QWord qw_remain;
- DWord dw_depth;
DWord dw_value;
QWord qw_value;
QWord qw_temp;
Int64 ii_value;
Int64 ii_temp;
- LibGoblin_DWARF_Expression_Stack
- t_stack[LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH];
-#define PUSH_DWARF(n) {t_stack[dw_depth++].value.qw_value = (n);}
-#define PUSH_DWARF_SIGN(n) \
- { t_stack[dw_depth].value.ii_value = (n); \
- t_stack[dw_depth].b_flag = LIBGOBLIN_DWARF_STACK_SIGN; \
- dw_depth++; }
-#define POP_DWARF() t_stack[dw_depth--].value.qw_value
-#define POP_DWARF_SIGN() t_stack[dw_depth--].value.ii_value
+#define PUSH_DWARF(m,n) {(m)->t_stack[(m)->dw_depth++].value.qw_value = (n);}
+#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)->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
// ------------------------
if( NULL == p_exp ) {
// ------------------------
pb_now = pb_data;
- dw_depth = 0;
+ //dw_depth = 0;
qw_remain = (( 0 == dw_size ) ? 512 : (QWord)dw_size );
qw_value = 0x00000000;
p_exp->result.qw_value = 0x00000000;
p_exp->dw_requested = LIBGOBLIN_DWARF_DATA_NONE;
- p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_ERROR;
-
- memset( &t_stack, 0x00,
+ p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_ERROR;
+ p_exp->dw_depth = 0;
+ memset( &((p_exp)->t_stack), 0x00,
sizeof( LibGoblin_DWARF_Expression_Stack ) * LIBGOBLIN_DWARF_EXPRESSION_STACK_DEPTH );
do {
switch( b_opcode ) {
case DW_OP_addr: // 0x03
if( p_exp->dw_setdata & LIBGOBLIN_DWARF_DATA_ADDRSIZE )
- { PUSH_DWARF( p_exp->dw_addrsize ); }
+ { PUSH_DWARF( p_exp, p_exp->dw_addrsize ); }
else
{ p_exp->dw_requested |= LIBGOBLIN_DWARF_DATA_ADDRSIZE; }
break;
case DW_OP_const1u: // 0x08
qw_value = (QWord)*pb_now++;
qw_remain--;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_const1s: // 0x09
ii_value = (Int64)*((char *)pb_now);
pb_now++;
qw_remain--;
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_const2u: // 0x0a
qw_value = (QWord)*((Word *)pb_now);
pb_now += 2;
qw_remain -= 2;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_const2s: // 0x0b
ii_value = (Int64)*((short *)pb_now);
pb_now += 2;
qw_remain -= 2;
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_const4u: // 0x0c
qw_value = (QWord)*((DWord *)pb_now);
pb_now += 4;
qw_remain -= 4;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_const4s: // 0x0d
ii_value = (Int64)*((int *)pb_now);
pb_now += 4;
qw_remain -= 4;
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_const8u: // 0x0e
qw_value = (QWord)*((QWord *)pb_now);
pb_now += 8;
qw_remain -= 8;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_const8s: // 0x0f
ii_value = (Int64)*((Int64 *)pb_now);
pb_now += 8;
qw_remain -= 8;
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_constu: // 0x10
pb_now = DWARF_Common_DecodeULEB128( &qw_value, pb_now, &qw_remain );
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_consts: // 0x11
pb_now = DWARF_Common_DecodeLEB128( &ii_value, pb_now, &qw_remain );
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_dup: // 0x12
- if( 0 == dw_depth )
+ if( 0 == p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = t_stack[dw_depth - 1].value.qw_value;
- PUSH_DWARF( qw_value );
+ qw_value = p_exp->t_stack[p_exp->dw_depth - 1].value.qw_value;
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_drop: // 0x13
- if( 0 == dw_depth )
+ if( 0 == p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = POP_DWARF();
+ qw_value = POP_DWARF( p_exp );
break;
case DW_OP_over: // 0x14
- if( 2 > dw_depth )
+ if( 2 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- dw_value = dw_depth - 2;
- qw_value = t_stack[dw_value].value.qw_value;
- PUSH_DWARF( qw_value );
+ dw_value = p_exp->dw_depth - 2;
+ qw_value = p_exp->t_stack[dw_value].value.qw_value;
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_pick: // 0x15
b_value = *pb_now++;
qw_remain--;
- if( dw_depth < (DWord)b_value )
+ if( p_exp->dw_depth < (DWord)b_value )
{ goto goto_DWARF_Expression_Evaluate_post; }
- dw_value = dw_depth - (DWord)b_value;
- qw_value = t_stack[dw_value].value.qw_value;
- PUSH_DWARF( qw_value );
+ dw_value = p_exp->dw_depth - (DWord)b_value;
+ qw_value = p_exp->t_stack[dw_value].value.qw_value;
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_swap: // 0x16
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 2 > dw_depth )
+ if( 2 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = t_stack[dw_depth - 2].value.qw_value;
- t_stack[dw_depth - 2].value.qw_value
- = t_stack[dw_depth - 1].value.qw_value;
- t_stack[dw_depth - 1].value.qw_value = qw_value;
+ qw_value = p_exp->t_stack[p_exp->dw_depth - 2].value.qw_value;
+ p_exp->t_stack[p_exp->dw_depth - 2].value.qw_value
+ = p_exp->t_stack[p_exp->dw_depth - 1].value.qw_value;
+ p_exp->t_stack[p_exp->dw_depth - 1].value.qw_value = qw_value;
break;
case DW_OP_rot: // 0x17
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 3 > dw_depth )
+ if( 3 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = t_stack[dw_depth - 1].value.qw_value;
- t_stack[dw_depth - 1].value.qw_value
- = t_stack[dw_depth - 2].value.qw_value;
- t_stack[dw_depth - 2].value.qw_value
- = t_stack[dw_depth - 3].value.qw_value;
- t_stack[dw_depth - 3].value.qw_value = qw_value;
+ qw_value = p_exp->t_stack[p_exp->dw_depth - 1].value.qw_value;
+ p_exp->t_stack[p_exp->dw_depth - 1].value.qw_value
+ = p_exp->t_stack[p_exp->dw_depth - 2].value.qw_value;
+ p_exp->t_stack[p_exp->dw_depth - 2].value.qw_value
+ = p_exp->t_stack[p_exp->dw_depth - 3].value.qw_value;
+ p_exp->t_stack[p_exp->dw_depth - 3].value.qw_value = qw_value;
break;
case DW_OP_xderef: // 0x18
case DW_OP_abs: // 0x19
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 0 == dw_depth )
+ if( 0 == p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- if( LIBGOBLIN_DWARF_STACK_SIGN == t_stack[dw_depth].b_flag ) {
- ii_value = POP_DWARF_SIGN();
+ if( LIBGOBLIN_DWARF_STACK_SIGN == p_exp->t_stack[p_exp->dw_depth].b_flag ) {
+ ii_value = POP_DWARF_SIGN( p_exp );
if( 0 > ii_value ) { ii_value *= -1; }
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
}
break;
case DW_OP_and: // 0x1a
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 2 > dw_depth )
+ if( 2 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = POP_DWARF();
- qw_temp = POP_DWARF();
+ qw_value = POP_DWARF( p_exp );
+ qw_temp = POP_DWARF( p_exp );
qw_value &= qw_temp;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_div: // 0x1b
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 2 > dw_depth )
+ if( 2 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- ii_temp = POP_DWARF_SIGN();
- ii_value = POP_DWARF_SIGN();
+ ii_temp = POP_DWARF_SIGN( p_exp );
+ ii_value = POP_DWARF_SIGN( p_exp );
if( 0 == ii_temp )
{ goto goto_DWARF_Expression_Evaluate_post; }
ii_value /= ii_temp;
- PUSH_DWARF_SIGN( ii_value );
+ PUSH_DWARF_SIGN( p_exp, ii_value );
break;
case DW_OP_minus: // 0x1c
break;
case DW_OP_or: // 0x21
// 2019/09/03 Lunch-Coding (Required TEST!!)
- if( 2 > dw_depth )
+ if( 2 > p_exp->dw_depth )
{ goto goto_DWARF_Expression_Evaluate_post; }
- qw_value = POP_DWARF();
- qw_temp = POP_DWARF();
+ qw_value = POP_DWARF( p_exp );
+ qw_temp = POP_DWARF( p_exp );
qw_value |= qw_temp;
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
break;
case DW_OP_plus: // 0x22
case DW_OP_lit30: // 0x4e
case DW_OP_lit31: // 0x4f
b_value = b_opcode - DW_OP_lit0;
- PUSH_DWARF( (QWord)b_value );
+ PUSH_DWARF( p_exp, (QWord)b_value );
break;
case DW_OP_reg0: // 0x50
else
{ qw_value = p_exp->qw_reg[b_reg] + (QWord)ii_value; }
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
}
else
{ p_exp->dw_requested |= (LIBGOBLIN_DWARF_DATA_REG | b_reg); }
else
{ qw_value = p_exp->qw_frame_base + (QWord)ii_value; }
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
}
else
{ p_exp->dw_requested |= LIBGOBLIN_DWARF_DATA_FRAME_BASE; }
else
{ qw_value = p_exp->qw_reg[b_reg] + (QWord)ii_value; }
- PUSH_DWARF( qw_value );
+ PUSH_DWARF( p_exp, qw_value );
}
else
{ p_exp->dw_requested |= (LIBGOBLIN_DWARF_DATA_REG | b_reg); }
if( LIBGOBLIN_DWARF_DATA_NONE != p_exp->dw_requested )
{ p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_REQUESTED; }
- else if( 0 < dw_depth ) {
+ else if( 0 < p_exp->dw_depth ) {
p_exp->dw_status = LIBGOBLIN_DWARF_STATUS_EVALUATED;
- p_exp->result.qw_value = t_stack[ dw_depth - 1 ].value.qw_value;
+ p_exp->result.qw_value = p_exp->t_stack[ p_exp->dw_depth - 1 ].value.qw_value;
}
goto_DWARF_Expression_Evaluate_post:
}
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+LibGoblin_DWARF_Expression *
+ DWARF_Expression_Alloc(
+ void )
+{
+ int i_id;
+ LibGoblin_DWARF_Expression *p_exp;
+
+ if( NULL == gp_dweempty ) {
+ return NULL;
+ }
+
+ p_exp = gp_dweempty;
+ gp_dweempty = p_exp->p_next;
+
+ i_id = p_exp->i_id;
+ memset( p_exp, 0x00, sizeof( LibGoblin_DWARF_Expression ) );
+ p_exp->i_id = i_id;
+ p_exp->p_next = NULL;
+
+ return p_exp;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+int
+ DWARF_Expression_Free(
+ LibGoblin_DWARF_Expression *p_exp )
+{
+ LibGoblin_DWARF_Expression *p_next;
+
+ if( NULL == p_exp ) {
+ return -0x01;
+ }
+
+ assert( NULL == p_exp->p_next );
+
+ p_next = gp_dweempty;
+ gp_dweempty = p_exp;
+ p_exp->p_next = p_next;
+
+ return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+int
+ DWARF_Expression_Init(
+ void )
+{
+ int i_cnt;
+ DWord dw_size;
+ LibGoblin_DWARF_Expression *p_exp;
+
+ if( NULL != gp_dwexpression ) {
+ return -0x01;
+ }
+
+ dw_size = sizeof( LibGoblin_DWARF_Expression )
+ * LIBGOBLIN_DWARF_EXPRESSION_UNITS;
+ gp_dwexpression = (LibGoblin_DWARF_Expression *)malloc( dw_size );
+ if( NULL == gp_dwexpression ) {
+ return -0x02;
+ }
+ memset( gp_dwexpression, 0x00, dw_size );
+
+ for( i_cnt = 0; i_cnt < LIBGOBLIN_DWARF_EXPRESSION_UNITS; i_cnt++ ) {
+ p_exp = gp_dwexpression + i_cnt;
+ p_exp->i_id = i_cnt;
+ p_exp->p_next = gp_dwexpression + i_cnt + 1;
+ }
+ p_exp->p_next = NULL;
+
+ gp_dweempty = gp_dwexpression;
+
+ return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
+LIBGOBLIN_DWARF_EXPRESSION_EXTERN
+int
+ DWARF_Expression_Term(
+ void )
+{
+ assert( NULL != gp_dwexpression );
+ free( gp_dwexpression );
+
+ gp_dwexpression = NULL;
+
+ return 0x00;
+}
+
+
/* EOF of drd64_.c ----------------------------------- */
#include"drd64_libgoblin.h"
#include"test_libgoblin.h"
+
+
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_InitTerm_test00_001( void )
+{
+ int i_result;
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( -0x01 == i_result );
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
+
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
+
+ return;
+}
+
+
+/*--------------------------------------------------------------------*/
+void Test_LibGoblin_DWARF_Expression_AllocFree_test00_001( void )
+{
+ int i_cnt;
+ int i_result;
+ LibGoblin_DWARF_Expression *p_exp[32 + 3];
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ for( i_cnt = 0; i_cnt < 32; i_cnt++ ) {
+ p_exp[ i_cnt ] = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_exp[ i_cnt ] );
+ CU_ASSERT( i_cnt == p_exp[ i_cnt ]->i_id );
+ }
+ p_exp[ 32 ] = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL == p_exp[ 32 ] );
+
+ for( i_cnt = 0; i_cnt < 32; i_cnt++ ) {
+ i_result = DWARF_Expression_Free( p_exp[ i_cnt ] );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ for( i_cnt = 0; i_cnt < 32; i_cnt++ ) {
+ p_exp[ i_cnt ] = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_exp[ i_cnt ] );
+ CU_ASSERT( (31 - i_cnt) == p_exp[ i_cnt ]->i_id );
+ }
+ p_exp[ 32 ] = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL == p_exp[ 32 ] );
+
+ for( i_cnt = 0; i_cnt < 32; i_cnt++ ) {
+ i_result = DWARF_Expression_Free( p_exp[ i_cnt ] );
+ CU_ASSERT( 0x00 == i_result );
+ }
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
+
+ return;
+}
+
+
/*----------------------------------------------------------------------
----------------------------------------------------------------------*/
void Test_LibGoblin_DWARF_Expression_CheckStruct(
void Test_LibGoblin_DWARF_Expression_CheckLitX(
Byte b_opcode, QWord qw_value )
{
+ int i_result;
Byte b_data[2];
DWord dw_result;
- LibGoblin_DWARF_Expression t_exp;
+ LibGoblin_DWARF_Expression *p_exp;
+
+ p_exp = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == qw_value );
+ CU_ASSERT( p_exp->result.qw_value == qw_value );
+
+ i_result = DWARF_Expression_Free( p_exp );
+ CU_ASSERT( 0x00 == i_result );
return;
}
/*--------------------------------------------------------------------*/
void Test_LibGoblin_DWARF_Expression_Constant_test00_001( void )
{
+ int i_result;
Byte b_data[16];
DWord dw_result;
- LibGoblin_DWARF_Expression t_exp;
+ LibGoblin_DWARF_Expression *p_exp;
short *ps_value;
Word *pw_value;
int *pi_value;
Int64 *pii_value;
QWord *pqw_value;
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
// DW_OP_lit0 - lit31 ---------
Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit0, 0 );
Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit30,30 );
Test_LibGoblin_DWARF_Expression_CheckLitX( DW_OP_lit31,31 );
+
+ p_exp = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_exp );
+
// DW_OP_addr ------------------
b_data[0] = DW_OP_addr;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 1 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_REQUESTED,
LIBGOBLIN_DWARF_DATA_ADDRSIZE, LIBGOBLIN_DWARF_DATA_NONE );
- t_exp.dw_addrsize = 8;
- t_exp.dw_setdata |= LIBGOBLIN_DWARF_DATA_ADDRSIZE;
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 1 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ p_exp->dw_addrsize = 8;
+ p_exp->dw_setdata |= LIBGOBLIN_DWARF_DATA_ADDRSIZE;
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_ADDRSIZE );
- CU_ASSERT( t_exp.result.qw_value == 8 );
+ CU_ASSERT( p_exp->result.qw_value == 8 );
// DW_OP_const1u --------------
b_data[0] = DW_OP_const1u;
b_data[1] = 0x12;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 2 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 0x12 );
+ CU_ASSERT( p_exp->result.qw_value == 0x12 );
// DW_OP_const1s --------------
b_data[0] = DW_OP_const1s;
b_data[1] = (Byte)((char)-1);
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 2 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.ii_value == -1 );
+ CU_ASSERT( p_exp->result.ii_value == -1 );
// DW_OP_const2u --------------
b_data[0] = DW_OP_const2u;
pw_value = (Word *)&(b_data[1]);
*pw_value = 0x1234;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 0x1234 );
+ CU_ASSERT( p_exp->result.qw_value == 0x1234 );
// DW_OP_const2s --------------
b_data[0] = DW_OP_const2s;
ps_value = (short *)&(b_data[1]);
*ps_value = -12345;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.ii_value == -12345 );
+ CU_ASSERT( p_exp->result.ii_value == -12345 );
// DW_OP_const4u --------------
b_data[0] = DW_OP_const4u;
pdw_value = (DWord *)&(b_data[1]);
*pdw_value = 0x12345678;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 5 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 5 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 0x12345678 );
+ CU_ASSERT( p_exp->result.qw_value == 0x12345678 );
// DW_OP_const4s --------------
b_data[0] = DW_OP_const4s;
pi_value = (int *)&(b_data[1]);
*pi_value = -1234567890;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 5 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 5 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.ii_value == -1234567890 );
+ CU_ASSERT( p_exp->result.ii_value == -1234567890 );
// DW_OP_const8u --------------
b_data[0] = DW_OP_const8u;
pqw_value = (QWord *)&(b_data[1]);
*pqw_value = 0x1234567890abcdef;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 9 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 9 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 0x1234567890abcdef );
+ CU_ASSERT( p_exp->result.qw_value == 0x1234567890abcdef );
// DW_OP_const8s --------------
b_data[0] = DW_OP_const8s;
pii_value = (Int64 *)&(b_data[1]);
*pii_value = -123456789012345;
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 9 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 9 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.ii_value == -123456789012345 );
+ CU_ASSERT( p_exp->result.ii_value == -123456789012345 );
// DW_OP_constu --------------
b_data[0] = DW_OP_constu;
b_data[1] = 0xb9;
b_data[2] = 0x64; // value = 12857 (0xb9 0x64)
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 12857 );
+ CU_ASSERT( p_exp->result.qw_value == 12857 );
// DW_OP_consts --------------
b_data[0] = DW_OP_consts;
b_data[1] = 0xff;
b_data[2] = 0x7e; // value = -129 (0xff 0x7e)
- DWARF_Expression_ClearValue( &t_exp );
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.ii_value == -129 );
+ CU_ASSERT( p_exp->result.ii_value == -129 );
-/*
- 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 );
-*/
+
+ i_result = DWARF_Expression_Free( p_exp );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
return;
}
/*--------------------------------------------------------------------*/
void Test_LibGoblin_DWARF_Expression_RegBase_bregX( Byte b_opcode )
{
+ int i_result;
Byte b_reg;
Byte b_data[16];
DWord dw_result;
- LibGoblin_DWARF_Expression t_exp;
+ LibGoblin_DWARF_Expression *p_exp;
+
+ p_exp = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_exp );
+
b_reg = b_opcode - DW_OP_breg0;
b_data[0] = b_opcode;
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,
+ 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_REQUESTED,
(LIBGOBLIN_DWARF_DATA_REG | b_reg), LIBGOBLIN_DWARF_DATA_NONE );
- t_exp.qw_reg[b_reg] = 0x80000000;
- t_exp.dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | b_reg);
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ p_exp->qw_reg[b_reg] = 0x80000000;
+ p_exp->dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | b_reg);
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | b_reg) );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
b_data[0] = b_opcode;
b_data[1] = 0xff;
b_data[2] = 0x7e; // value = -129 (0xff 0x7e)
- DWARF_Expression_ClearValue( &t_exp );
- t_exp.qw_reg[b_reg] = 0x80000000;
- t_exp.dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | b_reg);
- dw_result = DWARF_Expression_Evaluate( &t_exp, b_data, 3 );
- Test_LibGoblin_DWARF_Expression_CheckStruct( &t_exp,
+ DWARF_Expression_ClearValue( p_exp );
+ p_exp->qw_reg[b_reg] = 0x80000000;
+ p_exp->dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | b_reg);
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | b_reg) );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 - 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
+
+ i_result = DWARF_Expression_Free( p_exp );
+ CU_ASSERT( 0x00 == i_result );
return;
}
void Test_LibGoblin_DWARF_Expression_RegBase_test01_001( void )
{
+ int i_result;
Byte b_data[16];
DWord dw_result;
- LibGoblin_DWARF_Expression t_exp;
+ LibGoblin_DWARF_Expression *p_exp;
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ p_exp = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_exp );
// 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,
+ 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_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,
+ p_exp->qw_frame_base = 0x80000000;
+ p_exp->dw_setdata |= LIBGOBLIN_DWARF_DATA_FRAME_BASE;
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_FRAME_BASE );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
b_data[0] = DW_OP_fbreg;
b_data[1] = 0xff;
b_data[2] = 0x7e; // value = -129 (0xff 0x7e)
- DWARF_Expression_ClearValue( &t_exp );
- 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,
+ DWARF_Expression_ClearValue( p_exp );
+ p_exp->qw_frame_base = 0x80000000;
+ p_exp->dw_setdata |= LIBGOBLIN_DWARF_DATA_FRAME_BASE;
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_FRAME_BASE );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 - 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
// 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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ p_exp->qw_reg[0x0a] = 0x80000000;
+ p_exp->dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | 0x0a );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | 0x0a) );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+ CU_ASSERT( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ p_exp->qw_reg[0x1f] = 0x80000000;
+ p_exp->dw_setdata |= (LIBGOBLIN_DWARF_DATA_REG | 0x1f );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 4 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, (LIBGOBLIN_DWARF_DATA_REG | 0x1f ) );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 - 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 - 129) );
+
+ i_result = DWARF_Expression_Free( p_exp );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
return;
}
/*--------------------------------------------------------------------*/
void Test_LibGoblin_DWARF_Expression_StackOperation_test02_001( void )
{
+ int i_result;
Byte b_data[16];
DWord dw_result;
- LibGoblin_DWARF_Expression t_exp;
+ LibGoblin_DWARF_Expression *p_exp;
+
+
+ i_result = DWARF_Expression_Init();
+ CU_ASSERT( 0x00 == i_result );
+
+ p_exp = DWARF_Expression_Alloc();
+ CU_ASSERT( NULL != p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 10 );
+ CU_ASSERT( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 31 );
+ CU_ASSERT( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 1 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ DWARF_Expression_ClearValue( p_exp );
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 2 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_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,
+ 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_DATA_NONE, LIBGOBLIN_DWARF_DATA_NONE );
- CU_ASSERT( t_exp.result.qw_value == 30 );
+ CU_ASSERT( p_exp->result.qw_value == 30 );
// DW_OP_pick ---------------
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,
+ 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_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,
+ p_exp->qw_frame_base = 0x80000000;
+ p_exp->dw_setdata |= LIBGOBLIN_DWARF_DATA_FRAME_BASE;
+ dw_result = DWARF_Expression_Evaluate( p_exp, b_data, 3 );
+ Test_LibGoblin_DWARF_Expression_CheckStruct( p_exp,
LIBGOBLIN_DWARF_STATUS_EVALUATED,
LIBGOBLIN_DWARF_DATA_NONE, LIBGOBLIN_DWARF_DATA_FRAME_BASE );
- CU_ASSERT( t_exp.result.qw_value == (0x80000000 + 129) );
+ CU_ASSERT( p_exp->result.qw_value == (0x80000000 + 129) );
*/
+ i_result = DWARF_Expression_Free( p_exp );
+ CU_ASSERT( 0x00 == i_result );
+
+ i_result = DWARF_Expression_Term();
+ CU_ASSERT( 0x00 == i_result );
+
return;
}
CU_pSuite pt_goblin;
pt_goblin = CU_add_suite( "LibGoblin_DWARF_Expression", NULL, NULL );
-
+ CU_add_test( pt_goblin, "Test_LibGoblin_DWARF_Expression_InitTerm_test00_001",
+ Test_LibGoblin_DWARF_Expression_InitTerm_test00_001 );
+ CU_add_test( pt_goblin, "Test_LibGoblin_DWARF_Expression_AllocFree_test00_001",
+ Test_LibGoblin_DWARF_Expression_AllocFree_test00_001 );
CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_Constant_test00_001",
Test_LibGoblin_DWARF_Expression_Constant_test00_001 );
CU_add_test( pt_goblin, "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;
}