22#include "gdbsupport/gdb_obstack.h"
23#include "gdbsupport/pathstuff.h"
54 const char *comp_dir_,
55 const char *name_for_id,
58 : m_objfile (objfile_),
60 m_comp_dir (comp_dir_ ==
nullptr ?
"" : comp_dir_),
61 m_language (language_),
62 m_last_source_start_addr (last_addr)
100 xfree ((
void *) next);
106 xfree ((
void *) next);
138 link->
next = *listhead;
143 (*listhead)->symbol[(*listhead)->nsyms++] =
symbol;
157 for (j = list->
nsyms; --j >= 0;)
160 if (*pp == *
name && strncmp (pp,
name, length) == 0
161 && pp[length] ==
'\0')
186 opblock->
next = pblock;
206 int is_global,
int expandable)
256 int nparams = 0, iparams;
262 if (sym->is_argument ())
274 if (iparams == nparams)
277 if (sym->is_argument ())
290 if (static_link != NULL)
295 for (next = *listhead; next; next = next1)
309 complaint (_(
"block end address less than block "
310 "start address in %s (patched it)"),
315 complaint (_(
"block end address %s less than block "
316 "start address %s (patched it)"),
329 pblock && pblock != old_blocks;
330 pblock = pblock->
next)
347 complaint (_(
"inner block not inside outer block in %s"),
353 "inside outer block (%s-%s)"),
392 old_blocks, static_link, start, end, 0, 0);
406 CORE_ADDR end_inclusive)
414 || end_inclusive + 1 !=
block->
end ())
436 + (i - 1) *
sizeof (
struct block *)));
475 complaint (_(
"block at %s out of order"),
476 hex_string ((LONGEST) start));
627 unrelocated_addr pc, linetable_entry_flags
flags)
646 gdb::optional<int> last_line;
651 last_line = last->
line;
660 if (!last_line.has_value () || *last_line == 0)
695 && mainsub->
symtab == NULL)
697 const char *mainbase = lbasename (mainsub->
name.c_str ());
700 struct subfile *mainsub_alias = NULL;
701 struct subfile *prev_mainsub_alias = NULL;
710 if (filename_cmp (lbasename (
subfile->
name.c_str ()), mainbase) == 0)
714 prev_mainsub_alias = prevsub;
721 gdb_assert (mainsub_alias != NULL && mainsub_alias != mainsub);
728 mainsub_alias->
name.c_str ());
734 if (prev_mainsub_alias == NULL)
737 prev_mainsub_alias->
next = mainsub_alias->
next;
739 delete mainsub_alias;
782 complaint (_(
"Context stack not empty in end_compunit_symtab"));
793 std::vector<block *> barray;
796 barray.push_back (pb->
block);
801 std::stable_sort (barray.begin (), barray.end (),
804 return a->start () > b->start ();
809 pb->
block = barray[i++];
841 end_addr, 0, expandable);
852 (
struct block *static_block,
int expandable)
859 gdb_assert (static_block != NULL);
862 end_addr = static_block->
end ();
912 int linetablesize =
sizeof (
struct linetable) + entry_array_size;
918 new_table->
nitems = n_entries;
919 memcpy (new_table->
item,
985 if (sym->symtab () == NULL)
1003 (
struct block *static_block,
int expandable)
1007 if (static_block == NULL)
1048 struct block *static_block;
1060 struct block *static_block;
1098 complaint (_(
"Context stack not empty in augment_type_symtab"));
1100 complaint (_(
"Blocks in a type symtab"));
1102 complaint (_(
"Macro in a type symtab"));
1104 complaint (_(
"Line numbers recorded in a type symtab"));
1139 newobj->
depth = desc;
1144 newobj->
name = NULL;
1158 gdb_assert (!m_context_stack.empty ());
1160 m_context_stack.pop_back ();
struct context_stack pop_context()
struct symbol * find_symbol_in_list(struct pending *list, char *name, int length)
static void set_missing_symtab(struct pending *pending_list, struct compunit_symtab *cu)
void add_symbol_to_list(struct symbol *symbol, struct pending **listhead)
std::unique_ptr< subfile > subfile_up
#define complaint(FMT,...)
struct multidictionary * mdict_create_hashed_expandable(enum language language)
struct multidictionary * mdict_create_hashed(struct obstack *obstack, const struct pending *symbol_list)
struct multidictionary * mdict_create_linear(struct obstack *obstack, const struct pending *symbol_list)
void mdict_add_pending(struct multidictionary *mdict, const struct pending *symbol_list)
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
struct macro_table * new_macro_table(struct obstack *obstack, gdb::bcache *b, struct compunit_symtab *cust)
void free_macro_table(struct macro_table *table)
static struct mdebug_pending ** pending_list
void objfile_register_static_link(struct objfile *objfile, const struct block *block, const struct dynamic_prop *static_link)
#define SECT_OFF_TEXT(objfile)
void finish_global_stabs(struct objfile *objfile)
void cleanup_undefined_stabs_types(struct objfile *objfile)
void set_empty(CORE_ADDR start, CORE_ADDR end_inclusive, void *obj) override
const block * superblock() const
void set_using(struct using_direct *using_decl, struct obstack *obstack)
multidictionary * multidict() const
void set_start(CORE_ADDR start)
void set_multidict(multidictionary *multidict)
void set_compunit_symtab(struct compunit_symtab *)
struct dynamic_prop * static_link() const
iterator_range< mdict_iterator_wrapper > multidict_symbols() const
void set_end(CORE_ADDR end)
symbol * function() const
void set_superblock(const block *superblock)
void set_function(symbol *function)
struct block * block(size_t i)
struct block * static_block()
void set_map(addrmap *map)
void set_block(int i, struct block *block)
struct block * global_block()
void set_num_blocks(int num_blocks)
struct objfile * m_objfile
struct macro_table * get_macro_table()
struct macro_table * release_macros()
std::vector< struct context_stack > m_context_stack
CORE_ADDR m_last_source_start_addr
void start_subfile(const char *name, const char *name_for_id)
struct pending * m_local_symbols
const char * m_debugformat
buildsym_compunit(struct objfile *objfile_, const char *name, const char *comp_dir_, const char *name_for_id, enum language language_, CORE_ADDR last_addr)
struct compunit_symtab * end_compunit_symtab_from_static_block(struct block *static_block, int expandable)
void record_pending_block(struct block *block, struct pending_block *opblock)
struct pending * m_file_symbols
struct using_direct * m_local_using_directives
void watch_main_source_file_lossage()
struct block * finish_block(struct symbol *symbol, struct pending_block *old_blocks, const struct dynamic_prop *static_link, CORE_ADDR start, CORE_ADDR end)
struct pending * m_global_symbols
struct subfile * m_subfiles
struct blockvector * make_blockvector()
auto_obstack m_pending_block_obstack
void record_line(struct subfile *subfile, int line, unrelocated_addr pc, linetable_entry_flags flags)
struct using_direct * m_global_using_directives
struct block * finish_block_internal(struct symbol *symbol, struct pending **listhead, struct pending_block *old_blocks, const struct dynamic_prop *static_link, CORE_ADDR start, CORE_ADDR end, int is_global, int expandable)
struct compunit_symtab * end_expandable_symtab(CORE_ADDR end_addr)
void set_last_source_file(const char *name)
struct compunit_symtab * m_compunit_symtab
struct block * end_compunit_symtab_get_static_block(CORE_ADDR end_addr, int expandable, int required)
struct compunit_symtab * end_compunit_symtab_with_blockvector(struct block *static_block, int expandable)
struct addrmap_mutable m_pending_addrmap
void augment_type_symtab()
struct pending ** get_file_symbols()
bool m_pending_addrmap_interesting
std::vector< const char * > m_subfile_stack
struct subfile * m_current_subfile
void free_pending_blocks()
struct pending_block * m_pending_blocks
struct subfile * m_main_subfile
struct context_stack pop_context()
struct pending ** get_global_symbols()
void patch_subfile_names(struct subfile *subfile, const char *name)
const char * pop_subfile()
void record_block_range(struct block *block, CORE_ADDR start, CORE_ADDR end_inclusive)
struct compunit_symtab * end_compunit_symtab(CORE_ADDR end_addr)
struct macro_table * m_pending_macros
struct context_stack * push_context(int desc, CORE_ADDR valu)
symtab * primary_filetab() const
void set_blockvector(struct blockvector *blockvector)
struct blockvector * blockvector()
void set_macro_table(struct macro_table *macro_table)
void set_dirname(const char *dirname)
void set_debugformat(const char *debugformat)
void set_producer(const char *producer)
void set_primary_filetab(symtab *primary_filetab)
struct using_direct * local_using_directives
struct pending_block * old_blocks
void set_type(struct type *type)
void set_is_artificial(bool is_artificial)
void set_section_index(short idx)
const char * print_name() const
const char * linkage_name() const
void set_unrelocated_pc(unrelocated_addr pc)
unrelocated_addr unrelocated_pc() const
struct linetable_entry item[1]
auto_obstack storage_obstack
const struct sym_fns * sf
struct gdbarch * arch() const
struct objfile_per_bfd_storage * per_bfd
auto_obstack objfile_obstack
struct pending_block * next
struct symbol * symbol[PENDINGSIZE]
std::vector< linetable_entry > line_vector_entries
void(* sym_read_linetable)(struct objfile *)
struct type * type() const
void set_value_block(const block *block)
void set_symtab(struct symtab *symtab)
void set_linetable(const struct linetable *linetable)
void set_language(enum language language)
struct field & field(int idx) const
unsigned int num_fields() const
void alloc_fields(unsigned int nfields, bool init=true)
enum language deduce_language_from_filename(const char *filename)
void add_compunit_symtab_to_objfile(struct compunit_symtab *cu)
struct symtab * allocate_symtab(struct compunit_symtab *cust, const char *filename, const char *filename_for_id)
struct compunit_symtab * allocate_compunit_symtab(struct objfile *objfile, const char *name)
#define symtab_create_debug_printf(fmt,...)
const char * paddress(struct gdbarch *gdbarch, CORE_ADDR addr)