/* Get the register value from the given frame and format it for the display. When changep is set, check if the new register value has changed with respect to the previous call. */ static enum tui_status tui_get_register (struct frame_info *frame, struct tui_data_element *data, int regnum, int *changedp) { enum tui_status ret = TUI_FAILURE; if (changedp) *changedp = FALSE; if (target_has_registers) { char *prev_content = data->content; data->content = tui_register_format (frame, regnum); if (changedp != NULL && strcmp (prev_content, data->content) != 0) *changedp = 1; xfree (prev_content); ret = TUI_SUCCESS; } return ret; }
/* Get the register value from the given frame and format it for the display. When changep is set, check if the new register value has changed with respect to the previous call. */ static enum tui_status tui_get_register (struct gdbarch *gdbarch, struct frame_info *frame, struct tui_data_element *data, int regnum, int *changedp) { enum tui_status ret = TUI_FAILURE; if (changedp) *changedp = FALSE; if (target_has_registers) { gdb_byte buf[MAX_REGISTER_SIZE]; get_frame_register (frame, regnum, buf); /* NOTE: cagney/2003-03-13: This is bogus. It is refering to the register cache and not the frame which could have pulled the register value off the stack. */ if (register_cached (regnum) >= 0) { if (changedp) { int size = register_size (gdbarch, regnum); char *old = (char*) data->value; int i; for (i = 0; i < size; i++) if (buf[i] != old[i]) { *changedp = TRUE; old[i] = buf[i]; } } /* Reformat the data content if the value changed. */ if (changedp == 0 || *changedp == TRUE) tui_register_format (gdbarch, frame, data, regnum); ret = TUI_SUCCESS; } } return ret; }