public inbox for gdb-testers@sourceware.org help / color / mirror / Atom feed
From: gdb-buildbot@sergiodj.net To: gdb-testers@sourceware.org Subject: [binutils-gdb] Add dwarf2_per_cu_data::index Date: Tue, 23 Jun 2020 04:06:50 -0400 [thread overview] Message-ID: <d3473f0c4b8e8d791ed87b1919a666bc368497dc@gdb-build> (raw) *** TEST RESULTS FOR COMMIT d3473f0c4b8e8d791ed87b1919a666bc368497dc *** commit d3473f0c4b8e8d791ed87b1919a666bc368497dc Author: Tom Tromey <tom@tromey.com> AuthorDate: Wed May 27 11:13:49 2020 -0400 Commit: Simon Marchi <simon.marchi@efficios.com> CommitDate: Wed May 27 11:13:49 2020 -0400 Add dwarf2_per_cu_data::index Currently, a dwarf2_per_cu_data can hold a link to the corresponding expanded compunit_symtab. However, the dwarf2_per_cu_data objects are shared across objfiles, a simple pointer won't work: each objfile sharing the dwarf2_per_cu_data instance will have a corresponding compunit_symtab. Instead, this link will be stored in the dwarf2_per_objfile object (which will contain the objfile-specific data). To enable this, we add an index to each dwarf2_per_cu_data and signatured_type. The data structure in the dwarf2_per_objfile will use this new index to map a dwarf2_per_cu_data to its corresponding compunit_symtab, for this objfile. gdb/ChangeLog: * dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu, allocate_signatured_type>: Declare new methods. <m_num_psymtabs>: New member. (struct dwarf2_per_cu_data) <index>: New member. * dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu) (dwarf2_per_objfile::allocate_signatured_type): New methods. (create_cu_from_index_list): Use allocate_per_cu. (create_signatured_type_table_from_index) (create_signatured_type_table_from_debug_names) (create_debug_type_hash_table, add_type_unit) (read_comp_units_from_section): Use allocate_signatured_type. Change-Id: I7733479a38ce82a5015cb184c8acce5f8bbf2e69 diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2bf42407ce..4f49e3992c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,17 @@ +2020-05-27 Tom Tromey <tom@tromey.com> + + * dwarf2/read.h (struct dwarf2_per_objfile) <allocate_per_cu, + allocate_signatured_type>: Declare new methods. + <m_num_psymtabs>: New member. + (struct dwarf2_per_cu_data) <index>: New member. + * dwarf2/read.c (dwarf2_per_objfile::allocate_per_cu) + (dwarf2_per_objfile::allocate_signatured_type): New methods. + (create_cu_from_index_list): Use allocate_per_cu. + (create_signatured_type_table_from_index) + (create_signatured_type_table_from_debug_names) + (create_debug_type_hash_table, add_type_unit) + (read_comp_units_from_section): Use allocate_signatured_type. + 2020-05-27 Tom Tromey <tom@tromey.com> * psymtab.c (partial_map_expand_apply) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 59f3a08f6e..8b4f385856 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -2408,6 +2408,26 @@ dwarf2_per_objfile::get_tu (int index) return this->all_type_units[index]; } +/* See read.h. */ + +dwarf2_per_cu_data * +dwarf2_per_objfile::allocate_per_cu () +{ + dwarf2_per_cu_data *result = OBSTACK_ZALLOC (&obstack, dwarf2_per_cu_data); + result->index = m_num_psymtabs++; + return result; +} + +/* See read.h. */ + +signatured_type * +dwarf2_per_objfile::allocate_signatured_type () +{ + signatured_type *result = OBSTACK_ZALLOC (&obstack, signatured_type); + result->per_cu.index = m_num_psymtabs++; + return result; +} + /* Return a new dwarf2_per_cu_data allocated on the dwarf2_per_objfile obstack, and constructed with the specified field values. */ @@ -2417,9 +2437,7 @@ create_cu_from_index_list (struct dwarf2_per_objfile *dwarf2_per_objfile, int is_dwz, sect_offset sect_off, ULONGEST length) { - dwarf2_per_cu_data *the_cu - = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack, - struct dwarf2_per_cu_data); + dwarf2_per_cu_data *the_cu = dwarf2_per_objfile->allocate_per_cu (); the_cu->sect_off = sect_off; the_cu->length = length; the_cu->dwarf2_per_objfile = dwarf2_per_objfile; @@ -2508,8 +2526,7 @@ create_signatured_type_table_from_index signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE); bytes += 3 * 8; - sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack, - struct signatured_type); + sig_type = dwarf2_per_objfile->allocate_signatured_type (); sig_type->signature = signature; sig_type->type_offset_in_tu = type_offset_in_tu; sig_type->per_cu.is_debug_types = 1; @@ -2565,8 +2582,7 @@ create_signatured_type_table_from_debug_names section->buffer + to_underlying (sect_off), rcuh_kind::TYPE); - sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack, - struct signatured_type); + sig_type = dwarf2_per_objfile->allocate_signatured_type (); sig_type->signature = cu_header.signature; sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; sig_type->per_cu.is_debug_types = 1; @@ -6242,8 +6258,7 @@ create_debug_type_hash_table (struct dwarf2_per_objfile *dwarf2_per_objfile, /* N.B.: type_offset is not usable if this type uses a DWO file. The real type_offset is in the DWO file. */ dwo_tu = NULL; - sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack, - struct signatured_type); + sig_type = dwarf2_per_objfile->allocate_signatured_type (); sig_type->signature = header.signature; sig_type->type_offset_in_tu = header.type_cu_offset_in_tu; sig_type->per_cu.dwarf2_per_objfile = dwarf2_per_objfile; @@ -6358,8 +6373,7 @@ add_type_unit (struct dwarf2_per_objfile *dwarf2_per_objfile, ULONGEST sig, == dwarf2_per_objfile->all_type_units.capacity ()) ++dwarf2_per_objfile->tu_stats.nr_all_type_units_reallocs; - signatured_type *sig_type = OBSTACK_ZALLOC (&dwarf2_per_objfile->obstack, - struct signatured_type); + signatured_type *sig_type = dwarf2_per_objfile->allocate_signatured_type (); dwarf2_per_objfile->all_type_units.push_back (sig_type); sig_type->signature = sig; @@ -7964,16 +7978,10 @@ read_comp_units_from_section (struct dwarf2_per_objfile *dwarf2_per_objfile, /* Save the compilation unit for later lookup. */ if (cu_header.unit_type != DW_UT_type) - { - this_cu = XOBNEW (&dwarf2_per_objfile->obstack, - struct dwarf2_per_cu_data); - memset (this_cu, 0, sizeof (*this_cu)); - } + this_cu = dwarf2_per_objfile->allocate_per_cu (); else { - auto sig_type = XOBNEW (&dwarf2_per_objfile->obstack, - struct signatured_type); - memset (sig_type, 0, sizeof (*sig_type)); + auto sig_type = dwarf2_per_objfile->allocate_signatured_type (); sig_type->signature = cu_header.signature; sig_type->type_offset_in_tu = cu_header.type_cu_offset_in_tu; this_cu = &sig_type->per_cu; diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h index 8dbda90aa5..bbc4f96b7c 100644 --- a/gdb/dwarf2/read.h +++ b/gdb/dwarf2/read.h @@ -111,6 +111,16 @@ struct dwarf2_per_objfile /* Free all cached compilation units. */ void free_cached_comp_units (); + /* A convenience function to allocate a dwarf2_per_cu_data. The + returned object has its "index" field set properly. The object + is allocated on the dwarf2_per_objfile obstack. */ + dwarf2_per_cu_data *allocate_per_cu (); + + /* A convenience function to allocate a signatured_type. The + returned object has its "index" field set properly. The object + is allocated on the dwarf2_per_objfile obstack. */ + signatured_type *allocate_signatured_type (); + /* Return pointer to string at .debug_line_str offset as read from BUF. BUF is assumed to be in a compilation unit described by CU_HEADER. Return *BYTES_READ_PTR count of bytes read from BUF. */ @@ -249,6 +259,12 @@ public: /* CUs that are queued to be read. */ std::queue<dwarf2_queue_item> queue; + +private: + + /* The total number of per_cu and signatured_type objects that have + been created so far for this reader. */ + size_t m_num_psymtabs = 0; }; /* Get the dwarf2_per_objfile associated to OBJFILE. */ @@ -322,6 +338,9 @@ struct dwarf2_per_cu_data This flag is only valid if is_debug_types is true. */ unsigned int tu_read : 1; + /* Our index in the unshared "symtabs" vector. */ + unsigned index; + /* The section this CU/TU lives in. If the DIE refers to a DWO file, this is always the original die, not the DWO file. */
next reply other threads:[~2020-06-23 8:06 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-23 8:06 gdb-buildbot [this message] 2020-06-23 8:06 ` Failures on Fedora-x86_64-cc-with-index, branch master gdb-buildbot 2020-06-23 8:09 ` Failures on Fedora-x86_64-m32, " gdb-buildbot 2020-06-23 8:40 ` Failures on Fedora-x86_64-m64, " gdb-buildbot 2020-06-23 8:53 ` Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot 2020-06-23 9:25 ` Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot 2020-06-23 9:28 ` Failures on Fedora-x86_64-native-gdbserver-m32, " gdb-buildbot 2020-06-23 10:04 ` Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=d3473f0c4b8e8d791ed87b1919a666bc368497dc@gdb-build \ --to=gdb-buildbot@sergiodj.net \ --cc=gdb-testers@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).