diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-20 11:01:37 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-07-16 08:55:16 -0600 |
commit | 2c99ee5c4f44d52258fa176563cc6a4cfbf0069d (patch) | |
tree | 8c4cc533610f3262a43cf562d6bfae0b4b71f8e2 /gdb/buildsym.c | |
parent | 530fedbcbf61b6d74c76a8ba720fe29d98896831 (diff) | |
download | gdb-2c99ee5c4f44d52258fa176563cc6a4cfbf0069d.zip gdb-2c99ee5c4f44d52258fa176563cc6a4cfbf0069d.tar.gz gdb-2c99ee5c4f44d52258fa176563cc6a4cfbf0069d.tar.bz2 |
Move last_source_start_addr to buildsym_compunit
This moves the global last_source_start_addr into buildsym_compunit,
adding some accessors as well.
gdb/ChangeLog
2018-07-16 Tom Tromey <tom@tromey.com>
* xcoffread.c (aix_process_linenos, complete_symtab): Update.
* dbxread.c (read_ofile_symtab): Update.
* coffread.c (coff_start_symtab, coff_end_symtab): Update.
* buildsym.h (last_source_start_addr): Remove.
(set_last_source_start_addr, get_last_source_start_addr):
Declare.
* buildsym.c (buildsym_compunit::buildsym_compunit): Add last_addr
parameter.
(struct buildsym_compunit) <m_last_source_start_addr>: New
member.
(prepare_for_building): Remove start_addr parameter.
(start_symtab, restart_symtab, end_symtab_get_static_block)
(end_symtab_with_blockvector): Update.
(set_last_source_start_addr, get_last_source_start_addr): New
functions.
Diffstat (limited to 'gdb/buildsym.c')
-rw-r--r-- | gdb/buildsym.c | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/gdb/buildsym.c b/gdb/buildsym.c index 8fd1009..1cbde1d 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -106,11 +106,13 @@ struct buildsym_compunit (or NULL if not known). */ buildsym_compunit (struct objfile *objfile_, const char *name, - const char *comp_dir_, enum language language_) + const char *comp_dir_, enum language language_, + CORE_ADDR last_addr) : objfile (objfile_), m_last_source_file (name == nullptr ? nullptr : xstrdup (name)), comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)), - language (language_) + language (language_), + m_last_source_start_addr (last_addr) { } @@ -195,6 +197,11 @@ struct buildsym_compunit /* True if symtab has line number info. This prevents an otherwise empty symtab from being tossed. */ bool m_have_line_numbers = false; + + /* Core address of start of text of current source file. This too + comes from the N_SO symbol. For Dwarf it typically comes from the + DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */ + CORE_ADDR m_last_source_start_addr; }; /* The work-in-progress of the compunit we are building. @@ -1017,10 +1024,8 @@ get_macro_table (void) buildsym_init. */ static void -prepare_for_building (CORE_ADDR start_addr) +prepare_for_building () { - last_source_start_addr = start_addr; - local_symbols = NULL; local_using_directives = NULL; within_function = 0; @@ -1053,10 +1058,10 @@ struct compunit_symtab * start_symtab (struct objfile *objfile, const char *name, const char *comp_dir, CORE_ADDR start_addr, enum language language) { - prepare_for_building (start_addr); + prepare_for_building (); buildsym_compunit = new struct buildsym_compunit (objfile, name, comp_dir, - language); + language, start_addr); /* Allocate the compunit symtab now. The caller needs it to allocate non-primary symtabs. It is also needed by get_macro_table. */ @@ -1090,13 +1095,14 @@ void restart_symtab (struct compunit_symtab *cust, const char *name, CORE_ADDR start_addr) { - prepare_for_building (start_addr); + prepare_for_building (); buildsym_compunit = new struct buildsym_compunit (COMPUNIT_OBJFILE (cust), name, COMPUNIT_DIRNAME (cust), - compunit_language (cust)); + compunit_language (cust), + start_addr); buildsym_compunit->compunit_symtab = cust; } @@ -1291,8 +1297,8 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required) { /* Define the STATIC_BLOCK. */ return finish_block_internal (NULL, &file_symbols, NULL, NULL, - last_source_start_addr, end_addr, - 0, expandable); + buildsym_compunit->m_last_source_start_addr, + end_addr, 0, expandable); } } @@ -1319,7 +1325,7 @@ end_symtab_with_blockvector (struct block *static_block, /* Create the GLOBAL_BLOCK and build the blockvector. */ finish_block_internal (NULL, &global_symbols, NULL, NULL, - last_source_start_addr, end_addr, + buildsym_compunit->m_last_source_start_addr, end_addr, 1, expandable); blockvector = make_blockvector (); @@ -1727,6 +1733,24 @@ get_last_source_file (void) return buildsym_compunit->m_last_source_file.get (); } +/* See buildsym.h. */ + +void +set_last_source_start_addr (CORE_ADDR addr) +{ + gdb_assert (buildsym_compunit != nullptr); + buildsym_compunit->m_last_source_start_addr = addr; +} + +/* See buildsym.h. */ + +CORE_ADDR +get_last_source_start_addr () +{ + gdb_assert (buildsym_compunit != nullptr); + return buildsym_compunit->m_last_source_start_addr; +} + /* Initialize anything that needs initializing when starting to read a |