57 #if defined (HOST_CPU_x86_64) 58 case XED_REG_RBP:
return 8;
60 case XED_REG_EBP:
return 4;
61 case XED_REG_BP:
return 2;
73 const xed_operand_t *op0 = xed_inst_operand(xi, 0);
74 const xed_operand_t *op1 = xed_inst_operand(xi, 1);
76 xed_operand_enum_t op0_name = xed_operand_name(op0);
77 xed_operand_enum_t op1_name = xed_operand_name(op1);
81 if ((op0_name == XED_OPERAND_MEM0) && (op1_name == XED_OPERAND_REG0)) {
85 xed_reg_enum_t basereg = xed_decoded_inst_get_base_reg(xptr, 0);
86 if (x86_isReg_SP(basereg)) {
90 xed_reg_enum_t reg1 = xed_decoded_inst_get_reg(xptr, op1_name);
91 if (x86_isReg_BP(reg1) ||
105 reg.
sp_bp_pos = xed_decoded_inst_get_memory_displacement(xptr, 0);
113 }
else if ((op1_name == XED_OPERAND_MEM0) && (op0_name == XED_OPERAND_REG0)) {
117 xed_reg_enum_t reg0 = xed_decoded_inst_get_reg(xptr, op0_name);
118 if (x86_isReg_BP(reg0)) {
123 int64_t offset = xed_decoded_inst_get_memory_displacement(xptr, 0);
124 xed_reg_enum_t basereg = xed_decoded_inst_get_base_reg(xptr, 0);
125 if (x86_isReg_SP(basereg) && (offset == reg.
sp_bp_pos)) {
153 }
else if (x86_isReg_SP(reg0)) {
157 xed_reg_enum_t basereg = xed_decoded_inst_get_base_reg(xptr, 0);
158 if (x86_isReg_SP(basereg)) {
169 }
else if ((op0_name == XED_OPERAND_REG0) && (op1_name == XED_OPERAND_REG1)){
173 xed_reg_enum_t reg0 = xed_decoded_inst_get_reg(xptr, op0_name);
174 xed_reg_enum_t reg1 = xed_decoded_inst_get_reg(xptr, op1_name);
175 if (x86_isReg_BP(reg1) && x86_isReg_SP(reg0)) {
183 }
else if (x86_isReg_BP(reg0) && x86_isReg_SP(reg1)) {
213 }
else if (x86_isReg_BP(reg1) && x86_isReg_AX(reg0)) {
218 }
else if (x86_isReg_BP(reg0)) {
#define HW_NEW_STATE(state, set)
int x86_bp_size(xed_reg_enum_t reg)
#define UWI_RECIPE(btuwi)
#define HW_BP_OVERWRITTEN
static char * nextInsn(uint32_t *insn)
highwatermark_t highwatermark
unwind_interval * new_ui(char *startaddr, sp_ty_t sp_ty, ra_ty_t ra_ty, int sp_arg, int ra_arg)
void * rax_rbp_equivalent_at
#define HW_TEST_STATE(state, is_set, is_clear)
unwind_interval * process_move(xed_decoded_inst_t *xptr, const xed_inst_t *xi, interval_arg_t *iarg)
bitree_uwi_t unwind_interval