#include "../src/mc/mc_private.h"
+static
uintptr_t eval_binary_operation(mc_expression_state_t state, int op, uintptr_t a, uintptr_t b) {
state->stack_size = 0;
Dwarf_Op ops[15];
- ops[0].atom = DW_OP_addr;
+ ops[0].atom = DW_OP_const8u;
ops[0].number = a;
- ops[1].atom = DW_OP_addr;
+ ops[1].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = op;
return state->stack[state->stack_size - 1];
}
+static
void basic_test(mc_expression_state_t state) {
Dwarf_Op ops[60];
assert(state->stack_size==1);
assert(state->stack[state->stack_size-1]==21);
- ops[0].atom = DW_OP_addr;
+ ops[0].atom = DW_OP_const8u;
ops[0].number = a;
assert(mc_dwarf_execute_expression(1, ops, state) == MC_EXPRESSION_OK);
assert(state->stack_size==2);
assert(state->stack[state->stack_size-1]== a + 21);
state->stack_size = 0;
- ops[0].atom = DW_OP_addr;
+ ops[0].atom = DW_OP_const8u;
ops[0].number = a;
ops[1].atom = DW_OP_dup;
ops[2].atom = DW_OP_plus;
assert(state->stack[state->stack_size-1]== a + a);
state->stack_size = 0;
- ops[0].atom = DW_OP_addr;
+ ops[0].atom = DW_OP_const8u;
ops[0].number = a;
- ops[1].atom = DW_OP_addr;
+ ops[1].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = DW_OP_over;
assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
assert(state->stack[state->stack_size-3]== a);
state->stack_size = 0;
- ops[0].atom = DW_OP_addr;
+ ops[0].atom = DW_OP_const8u;
ops[0].number = a;
- ops[1].atom = DW_OP_addr;
+ ops[1].atom = DW_OP_const8u;
ops[1].number = b;
ops[2].atom = DW_OP_swap;
assert(mc_dwarf_execute_expression(3, ops, state) == MC_EXPRESSION_OK);
assert(state->stack[state->stack_size-2]== b);
}
-int test_deref(mc_expression_state_t state) {
+static
+void test_deref(mc_expression_state_t state) {
uintptr_t foo = 42;
Dwarf_Op ops[60];
- ops[0].atom = DW_OP_addr;
- ops[0].number = (Dwarf_Word) &foo;
+ ops[0].atom = DW_OP_const8u;
+ ops[0].number = (uintptr_t) &foo;
ops[1].atom = DW_OP_deref;
state->stack_size = 0;