/* Given a symtab, and a symtab_object that has previously been allocated and initialized, populate the symtab_object with the struct symtab data. Also, register the symtab_object life-cycle with the life-cycle of the object file associated with this symtab, if needed. */ static void set_symtab (symtab_object *obj, struct symtab *symtab) { obj->symtab = symtab; obj->prev = NULL; if (symtab) { obj->next = objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key); if (obj->next) obj->next->prev = obj; set_objfile_data (SYMTAB_OBJFILE (symtab), stpy_objfile_data_key, obj); } else obj->next = NULL; }
/* Function to ensure that the source and/or disassemly windows reflect the input address. */ void tui_update_source_windows_with_line (struct symtab *s, int line) { struct gdbarch *gdbarch; CORE_ADDR pc; struct tui_line_or_address l; if (!s) return; gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); switch (tui_current_layout ()) { case DISASSEM_COMMAND: case DISASSEM_DATA_COMMAND: find_line_pc (s, line, &pc); tui_update_source_windows_with_addr (gdbarch, pc); break; default: l.loa = LOA_LINE; l.u.line_no = line; tui_show_symtab_source (gdbarch, s, l, FALSE); if (tui_current_layout () == SRC_DISASSEM_COMMAND) { find_line_pc (s, line, &pc); tui_show_disassem (gdbarch, pc); } break; } return; }
static SCM gdbscm_symtab_objfile (SCM self) { symtab_smob *st_smob = stscm_get_valid_symtab_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); const struct symtab *symtab = st_smob->symtab; return ofscm_scm_from_objfile (SYMTAB_OBJFILE (symtab)); }
/* Given a sal, and a sal_object that has previously been allocated and initialized, populate the sal_object with the struct sal data. Also, register the sal_object life-cycle with the life-cycle of the object file associated with this sal, if needed. If a failure occurs during the sal population, this function will return -1. */ static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION set_sal (sal_object *sal_obj, struct symtab_and_line sal) { symtab_object *symtab_obj; if (sal.symtab) { symtab_obj = (symtab_object *) symtab_to_symtab_object (sal.symtab); /* If a symtab existed in the sal, but it cannot be duplicated, we exit. */ if (symtab_obj == NULL) return -1; } else { symtab_obj = (symtab_object *) Py_None; Py_INCREF (Py_None); } sal_obj->sal = ((struct symtab_and_line *) xmemdup (&sal, sizeof (struct symtab_and_line), sizeof (struct symtab_and_line))); sal_obj->symtab = symtab_obj; sal_obj->prev = NULL; /* If the SAL does not have a symtab, we do not add it to the objfile cleanup observer linked list. */ if (sal_obj->symtab != (symtab_object *)Py_None) { sal_obj->next = ((struct salpy_sal_object *) objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), salpy_objfile_data_key)); if (sal_obj->next) sal_obj->next->prev = sal_obj; set_objfile_data (SYMTAB_OBJFILE (sal_obj->symtab->symtab), salpy_objfile_data_key, sal_obj); } else sal_obj->next = NULL; return 0; }
static PyObject * stpy_get_objfile (PyObject *self, void *closure) { struct symtab *symtab = NULL; PyObject *result; STPY_REQUIRE_VALID (self, symtab); result = objfile_to_objfile_object (SYMTAB_OBJFILE (symtab)); Py_XINCREF (result); return result; }
static PyObject * stpy_static_block (PyObject *self, PyObject *args) { struct symtab *symtab = NULL; struct block *block = NULL; const struct blockvector *blockvector; STPY_REQUIRE_VALID (self, symtab); blockvector = SYMTAB_BLOCKVECTOR (symtab); block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK); return block_to_block_object (block, SYMTAB_OBJFILE (symtab)); }
static SCM gdbscm_symtab_static_block (SCM self) { symtab_smob *st_smob = stscm_get_valid_symtab_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); const struct symtab *symtab = st_smob->symtab; const struct blockvector *blockvector; const struct block *block; blockvector = SYMTAB_BLOCKVECTOR (symtab); block = BLOCKVECTOR_BLOCK (blockvector, STATIC_BLOCK); return bkscm_scm_from_block (block, SYMTAB_OBJFILE (symtab)); }
static htab_t stscm_objfile_symtab_map (struct symtab *symtab) { struct objfile *objfile = SYMTAB_OBJFILE (symtab); htab_t htab = objfile_data (objfile, stscm_objfile_data_key); if (htab == NULL) { htab = gdbscm_create_eqable_gsmob_ptr_map (stscm_hash_symtab_smob, stscm_eq_symtab_smob); set_objfile_data (objfile, stscm_objfile_data_key, htab); } return htab; }
static void stpy_dealloc (PyObject *obj) { symtab_object *symtab = (symtab_object *) obj; if (symtab->prev) symtab->prev->next = symtab->next; else if (symtab->symtab) { set_objfile_data (SYMTAB_OBJFILE (symtab->symtab), stpy_objfile_data_key, symtab->next); } if (symtab->next) symtab->next->prev = symtab->prev; symtab->symtab = NULL; }
static void salpy_dealloc (PyObject *self) { sal_object *self_sal = (sal_object *) self; if (self_sal->prev) self_sal->prev->next = self_sal->next; else if (self_sal->symtab != (symtab_object * ) Py_None) set_objfile_data (SYMTAB_OBJFILE (self_sal->symtab->symtab), salpy_objfile_data_key, self_sal->next); if (self_sal->next) self_sal->next->prev = self_sal->prev; Py_DECREF (self_sal->symtab); xfree (self_sal->sal); Py_TYPE (self)->tp_free (self); }
void mi_cmd_symbol_list_lines (char *command, char **argv, int argc) { struct gdbarch *gdbarch; char *filename; struct symtab *s; int i; struct cleanup *cleanup_stack, *cleanup_tuple; struct ui_out *uiout = current_uiout; if (argc != 1) error (_("-symbol-list-lines: Usage: SOURCE_FILENAME")); filename = argv[0]; s = lookup_symtab (filename); if (s == NULL) error (_("-symbol-list-lines: Unknown source file name.")); /* Now, dump the associated line table. The pc addresses are already sorted by increasing values in the symbol table, so no need to perform any other sorting. */ gdbarch = get_objfile_arch (SYMTAB_OBJFILE (s)); cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "lines"); if (SYMTAB_LINETABLE (s) != NULL && SYMTAB_LINETABLE (s)->nitems > 0) for (i = 0; i < SYMTAB_LINETABLE (s)->nitems; i++) { cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); uiout->field_core_addr ("pc", gdbarch, SYMTAB_LINETABLE (s)->item[i].pc); uiout->field_int ("line", SYMTAB_LINETABLE (s)->item[i].line); do_cleanups (cleanup_tuple); } do_cleanups (cleanup_stack); }