static struct symtab * get_java_class_symtab (void) { if (class_symtab == NULL) { struct objfile *objfile = get_dynamics_objfile (); struct blockvector *bv; struct block *bl; class_symtab = allocate_symtab ("<java-classes>", objfile); class_symtab->language = language_java; bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct blockvector) + sizeof (struct block *)); BLOCKVECTOR_NBLOCKS (bv) = 1; BLOCKVECTOR (class_symtab) = bv; /* Allocate dummy STATIC_BLOCK. */ bl = allocate_block (&objfile->objfile_obstack); BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack, NULL); BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl; /* Allocate GLOBAL_BLOCK. */ bl = allocate_block (&objfile->objfile_obstack); BLOCK_DICT (bl) = dict_create_hashed_expandable (); BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl; class_symtab->free_func = free_class_block; } return class_symtab; }
static void add_class_symtab_symbol (struct symbol *sym) { struct symtab *symtab = get_java_class_symtab (); struct blockvector *bv = BLOCKVECTOR (symtab); dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym); }
/* Free the dynamic symbols block. */ static void free_class_block (struct symtab *symtab) { struct blockvector *bv = BLOCKVECTOR (symtab); struct block *bl = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); dict_free (BLOCK_DICT (bl)); }
static void add_class_symtab_symbol (struct symbol *sym) { struct symtab *symtab = get_java_class_symtab (get_objfile_arch (SYMBOL_SYMTAB (sym)->objfile)); struct blockvector *bv = BLOCKVECTOR (symtab); dict_add_symbol (BLOCK_DICT (BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK)), sym); }
static struct symtab * get_java_class_symtab (struct gdbarch *gdbarch) { struct objfile *objfile = get_dynamics_objfile (gdbarch); struct symtab *class_symtab = objfile->symtabs; if (class_symtab == NULL) { struct blockvector *bv; struct block *bl; struct jv_per_objfile_data *jv_data; class_symtab = allocate_symtab ("<java-classes>", objfile); class_symtab->language = language_java; bv = (struct blockvector *) obstack_alloc (&objfile->objfile_obstack, sizeof (struct blockvector) + sizeof (struct block *)); BLOCKVECTOR_NBLOCKS (bv) = 1; BLOCKVECTOR (class_symtab) = bv; /* Allocate dummy STATIC_BLOCK. */ bl = allocate_block (&objfile->objfile_obstack); BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack, NULL); BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl; /* Allocate GLOBAL_BLOCK. */ bl = allocate_global_block (&objfile->objfile_obstack); BLOCK_DICT (bl) = dict_create_hashed_expandable (); set_block_symtab (bl, class_symtab); BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl; /* Arrange to free the dict. */ jv_data = objfile_data (objfile, jv_dynamics_objfile_data_key); jv_data->dict = BLOCK_DICT (bl); } return class_symtab; }
struct block * allocate_block(struct obstack *obstack) { struct block *bl = (struct block *)obstack_alloc(obstack, sizeof(struct block)); BLOCK_START(bl) = 0; BLOCK_END(bl) = 0; BLOCK_FUNCTION(bl) = NULL; BLOCK_SUPERBLOCK(bl) = NULL; BLOCK_DICT(bl) = NULL; BLOCK_NAMESPACE(bl) = NULL; BLOCK_GCC_COMPILED(bl) = 0; /* APPLE LOCAL begin address ranges */ BLOCK_RANGES(bl) = NULL; /* APPLE LOCAL end address ranges */ return bl; }
static PyObject * blpy_iter (PyObject *self) { block_syms_iterator_object *block_iter_obj; struct block *block = NULL; BLPY_REQUIRE_VALID (self, block); block_iter_obj = PyObject_New (block_syms_iterator_object, &block_syms_iterator_object_type); if (block_iter_obj == NULL) return NULL; block_iter_obj->dict = BLOCK_DICT (block); block_iter_obj->initialized_p = 0; Py_INCREF (self); block_iter_obj->source = (block_object *) self; return (PyObject *) block_iter_obj; }