static SCM gdbscm_find_pc_line (SCM pc_scm) { ULONGEST pc_ull; struct symtab_and_line sal; volatile struct gdb_exception except; init_sal (&sal); /* -Wall */ gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "U", pc_scm, &pc_ull); TRY_CATCH (except, RETURN_MASK_ALL) { CORE_ADDR pc = (CORE_ADDR) pc_ull; sal = find_pc_line (pc, 0); }
/* Function to display source in the source/asm window. This function shows the source as specified by the horizontal offset. */ void tui_update_source_window_as_is (struct tui_win_info *win_info, struct gdbarch *gdbarch, struct symtab *s, struct tui_line_or_address line_or_addr, int noerror) { enum tui_status ret; if (win_info->generic.type == SRC_WIN) ret = tui_set_source_content (s, line_or_addr.u.line_no, noerror); else ret = tui_set_disassem_content (gdbarch, line_or_addr.u.addr); if (ret == TUI_FAILURE) { tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT); tui_clear_exec_info_content (win_info); } else { tui_update_breakpoint_info (win_info, 0); tui_show_source_content (win_info); tui_update_exec_info (win_info); if (win_info->generic.type == SRC_WIN) { struct symtab_and_line sal; init_sal (&sal); sal.line = line_or_addr.u.line_no + (win_info->generic.content_size - 2); sal.symtab = s; sal.pspace = SYMTAB_PSPACE (s); set_current_source_symtab_and_line (&sal); /* If the focus was in the asm win, put it in the src win if we don't have a split layout. */ if (tui_win_with_focus () == TUI_DISASM_WIN && tui_current_layout () != SRC_DISASSEM_COMMAND) tui_set_win_focus_to (TUI_SRC_WIN); } } return; }
static SCM gdbscm_find_pc_line (SCM pc_scm) { ULONGEST pc_ull; struct symtab_and_line sal; init_sal (&sal); /* -Wall */ gdbscm_parse_function_args (FUNC_NAME, SCM_ARG1, NULL, "U", pc_scm, &pc_ull); TRY { CORE_ADDR pc = (CORE_ADDR) pc_ull; sal = find_pc_line (pc, 0); } CATCH (except, RETURN_MASK_ALL) { GDBSCM_HANDLE_GDB_EXCEPTION (except); }
static void save_bookmark_command (char *args, int from_tty) { /* Get target's idea of a bookmark. */ gdb_byte *bookmark_id = target_get_bookmark (args, from_tty); struct bookmark *b, *b1; struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ()); /* CR should not cause another identical bookmark. */ dont_repeat (); if (bookmark_id == NULL) error (_("target_get_bookmark failed.")); /* Set up a bookmark struct. */ b = xcalloc (1, sizeof (struct bookmark)); b->number = ++bookmark_count; init_sal (&b->sal); b->pc = regcache_read_pc (get_current_regcache ()); b->sal = find_pc_line (b->pc, 0); b->sal.pspace = get_frame_program_space (get_current_frame ()); b->opaque_data = bookmark_id; b->next = NULL; /* Add this bookmark to the end of the chain, so that a list of bookmarks will come out in order of increasing numbers. */ b1 = bookmark_chain; if (b1 == 0) bookmark_chain = b; else { while (b1->next) b1 = b1->next; b1->next = b; } printf_filtered (_("Saved bookmark %d at %s\n"), b->number, paddress (gdbarch, b->sal.pc)); }