diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2025-03-06 15:30:31 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2025-03-07 09:37:30 -0500 |
commit | d991cb7396592243696987c83cadc8f61e1073d1 (patch) | |
tree | f4751070a6f45817b6e739cccbae50c540e05f63 | |
parent | 0d93e61c318823da567053d8f1561c78e2efcf06 (diff) | |
download | binutils-d991cb7396592243696987c83cadc8f61e1073d1.zip binutils-d991cb7396592243696987c83cadc8f61e1073d1.tar.gz binutils-d991cb7396592243696987c83cadc8f61e1073d1.tar.bz2 |
gdb/dwarf: move cutu_reader to read.h
In order to move some things outside of read.c, cutu_reader needs to be
in a header file.
Change-Id: Ib26d7949c55867848d109332caf2efb1a6e72923
Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r-- | gdb/dwarf2/read.c | 146 | ||||
-rw-r--r-- | gdb/dwarf2/read.h | 148 |
2 files changed, 148 insertions, 146 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a6f2f5e..833f424 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -627,152 +627,6 @@ struct dwp_file asection **elf_sections = nullptr; }; -class cutu_reader -{ -public: - - cutu_reader (dwarf2_per_cu *this_cu, - dwarf2_per_objfile *per_objfile, - const struct abbrev_table *abbrev_table, - dwarf2_cu *existing_cu, - bool skip_partial, - enum language pretend_language, - const abbrev_table_cache *cache = nullptr); - - cutu_reader (dwarf2_per_cu *this_cu, - dwarf2_per_objfile *per_objfile, - enum language pretend_language, - struct dwarf2_cu *parent_cu = nullptr, - struct dwo_file *dwo_file = nullptr); - - DISABLE_COPY_AND_ASSIGN (cutu_reader); - - cutu_reader (cutu_reader &&) = default; - - bool is_dummy () const { return m_dummy_p; } - - dwarf2_cu *cu () const { return m_cu; } - - die_info *comp_unit_die () const { return m_comp_unit_die; } - - const gdb_byte *info_ptr () const { return m_info_ptr; } - - bfd *abfd () const { return m_abfd; } - - const gdb_byte *buffer () const { return m_buffer; } - - const gdb_byte *buffer_end () const { return m_buffer_end; } - - const dwarf2_section_info *section () const { return m_die_section; } - - /* Release the new CU, putting it on the chain. This cannot be done - for dummy CUs. */ - void keep (); - - /* Release the abbrev table, transferring ownership to the - caller. */ - abbrev_table_up release_abbrev_table () - { - return std::move (m_abbrev_table_holder); - } - - die_info *read_die_and_siblings (const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - die_info *parent); - - const gdb_byte *read_attribute (attribute *attr, const attr_abbrev *abbrev, - const gdb_byte *info_ptr, - bool allow_reprocess = true); - - const abbrev_info *peek_die_abbrev (const gdb_byte *info_ptr, - unsigned int *bytes_read); - - const gdb_byte *skip_one_die (const gdb_byte *info_ptr, - const abbrev_info *abbrev, - bool do_skip_children = true); - - const gdb_byte *skip_children (const gdb_byte *info_ptr); - -private: - void init_cu_die_reader (dwarf2_cu *cu, dwarf2_section_info *section, - struct dwo_file *dwo_file, - const struct abbrev_table *abbrev_table); - - void init_tu_and_read_dwo_dies (dwarf2_per_cu *this_cu, - dwarf2_per_objfile *per_objfile, - dwarf2_cu *existing_cu, - enum language pretend_language); - - int read_cutu_die_from_dwo (dwarf2_cu *cu, dwo_unit *dwo_unit, - die_info *stub_comp_unit_die, - const char *stub_comp_dir, - const gdb_byte **result_info_ptr, - die_info **result_comp_unit_die, - abbrev_table_up *result_dwo_abbrev_table); - - void prepare_one_comp_unit (struct dwarf2_cu *cu, - enum language pretend_language); - - const gdb_byte *read_toplevel_die (die_info **diep, const gdb_byte *info_ptr, - gdb::array_view<attribute *> extra_attrs - = {}); - - die_info *read_die_and_siblings_1 (const gdb_byte *, const gdb_byte **, - die_info *); - - die_info *read_die_and_children (const gdb_byte *info_ptr, - const gdb_byte **new_info_ptr, - die_info *parent); - - const gdb_byte *read_full_die_1 (die_info **diep, const gdb_byte *info_ptr, - int num_extra_attrs, bool allow_reprocess); - - const gdb_byte *read_attribute_value (attribute *attr, unsigned form, - LONGEST implicit_const, - const gdb_byte *info_ptr, - bool allow_reprocess); - - void read_attribute_reprocess (attribute *attr, - dwarf_tag tag = DW_TAG_padding); - - const char *read_dwo_str_index (ULONGEST str_index); - - /* The bfd of die_section. */ - bfd *m_abfd; - - /* The CU of the DIE we are parsing. */ - struct dwarf2_cu *m_cu; - - /* Non-NULL if reading a DWO file (including one packaged into a DWP). */ - struct dwo_file *m_dwo_file; - - /* The section the die comes from. - This is either .debug_info or .debug_types, or the .dwo variants. */ - struct dwarf2_section_info *m_die_section; - - /* die_section->buffer. */ - const gdb_byte *m_buffer; - - /* The end of the buffer. */ - const gdb_byte *m_buffer_end; - - /* The abbreviation table to use when reading the DIEs. */ - const struct abbrev_table *m_abbrev_table; - - const gdb_byte *m_info_ptr = nullptr; - struct die_info *m_comp_unit_die = nullptr; - bool m_dummy_p = false; - - dwarf2_per_cu *m_this_cu; - dwarf2_cu_up m_new_cu; - - /* The ordinary abbreviation table. */ - abbrev_table_up m_abbrev_table_holder; - - /* The DWO abbreviation table. */ - abbrev_table_up m_dwo_abbrev_table; -}; - /* FIXME: We might want to set this from BFD via bfd_arch_bits_per_byte, but this would require a corresponding change in unpack_field_as_long and friends. */ diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h index 44747bf..dcaea14 100644 --- a/gdb/dwarf2/read.h +++ b/gdb/dwarf2/read.h @@ -21,6 +21,7 @@ #define GDB_DWARF2_READ_H #include <queue> +#include "dwarf2/abbrev.h" #include "dwarf2/comp-unit-head.h" #include "dwarf2/file-and-dir.h" #include "dwarf2/index-cache.h" @@ -46,6 +47,7 @@ struct tu_stats int nr_tus = 0; }; +struct abbrev_table_cache; struct dwarf2_cu; struct dwarf2_debug_sections; struct dwarf2_per_bfd; @@ -921,6 +923,152 @@ private: gdb::unordered_map<dwarf2_per_cu *, dwarf2_cu_up> m_dwarf2_cus; }; +class cutu_reader +{ +public: + + cutu_reader (dwarf2_per_cu *this_cu, + dwarf2_per_objfile *per_objfile, + const struct abbrev_table *abbrev_table, + dwarf2_cu *existing_cu, + bool skip_partial, + enum language pretend_language, + const abbrev_table_cache *cache = nullptr); + + cutu_reader (dwarf2_per_cu *this_cu, + dwarf2_per_objfile *per_objfile, + enum language pretend_language, + struct dwarf2_cu *parent_cu = nullptr, + struct dwo_file *dwo_file = nullptr); + + DISABLE_COPY_AND_ASSIGN (cutu_reader); + + cutu_reader (cutu_reader &&) = default; + + bool is_dummy () const { return m_dummy_p; } + + dwarf2_cu *cu () const { return m_cu; } + + die_info *comp_unit_die () const { return m_comp_unit_die; } + + const gdb_byte *info_ptr () const { return m_info_ptr; } + + bfd *abfd () const { return m_abfd; } + + const gdb_byte *buffer () const { return m_buffer; } + + const gdb_byte *buffer_end () const { return m_buffer_end; } + + const dwarf2_section_info *section () const { return m_die_section; } + + /* Release the new CU, putting it on the chain. This cannot be done + for dummy CUs. */ + void keep (); + + /* Release the abbrev table, transferring ownership to the + caller. */ + abbrev_table_up release_abbrev_table () + { + return std::move (m_abbrev_table_holder); + } + + die_info *read_die_and_siblings (const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + die_info *parent); + + const gdb_byte *read_attribute (attribute *attr, const attr_abbrev *abbrev, + const gdb_byte *info_ptr, + bool allow_reprocess = true); + + const abbrev_info *peek_die_abbrev (const gdb_byte *info_ptr, + unsigned int *bytes_read); + + const gdb_byte *skip_one_die (const gdb_byte *info_ptr, + const abbrev_info *abbrev, + bool do_skip_children = true); + + const gdb_byte *skip_children (const gdb_byte *info_ptr); + +private: + void init_cu_die_reader (dwarf2_cu *cu, dwarf2_section_info *section, + struct dwo_file *dwo_file, + const struct abbrev_table *abbrev_table); + + void init_tu_and_read_dwo_dies (dwarf2_per_cu *this_cu, + dwarf2_per_objfile *per_objfile, + dwarf2_cu *existing_cu, + enum language pretend_language); + + int read_cutu_die_from_dwo (dwarf2_cu *cu, dwo_unit *dwo_unit, + die_info *stub_comp_unit_die, + const char *stub_comp_dir, + const gdb_byte **result_info_ptr, + die_info **result_comp_unit_die, + abbrev_table_up *result_dwo_abbrev_table); + + void prepare_one_comp_unit (struct dwarf2_cu *cu, + enum language pretend_language); + + const gdb_byte *read_toplevel_die (die_info **diep, const gdb_byte *info_ptr, + gdb::array_view<attribute *> extra_attrs + = {}); + + die_info *read_die_and_siblings_1 (const gdb_byte *, const gdb_byte **, + die_info *); + + die_info *read_die_and_children (const gdb_byte *info_ptr, + const gdb_byte **new_info_ptr, + die_info *parent); + + const gdb_byte *read_full_die_1 (die_info **diep, const gdb_byte *info_ptr, + int num_extra_attrs, bool allow_reprocess); + + const gdb_byte *read_attribute_value (attribute *attr, unsigned form, + LONGEST implicit_const, + const gdb_byte *info_ptr, + bool allow_reprocess); + + void read_attribute_reprocess (attribute *attr, + dwarf_tag tag = DW_TAG_padding); + + const char *read_dwo_str_index (ULONGEST str_index); + + /* The bfd of die_section. */ + bfd *m_abfd; + + /* The CU of the DIE we are parsing. */ + struct dwarf2_cu *m_cu; + + /* Non-NULL if reading a DWO file (including one packaged into a DWP). */ + struct dwo_file *m_dwo_file; + + /* The section the die comes from. + This is either .debug_info or .debug_types, or the .dwo variants. */ + struct dwarf2_section_info *m_die_section; + + /* die_section->buffer. */ + const gdb_byte *m_buffer; + + /* The end of the buffer. */ + const gdb_byte *m_buffer_end; + + /* The abbreviation table to use when reading the DIEs. */ + const struct abbrev_table *m_abbrev_table; + + const gdb_byte *m_info_ptr = nullptr; + struct die_info *m_comp_unit_die = nullptr; + bool m_dummy_p = false; + + dwarf2_per_cu *m_this_cu; + dwarf2_cu_up m_new_cu; + + /* The ordinary abbreviation table. */ + abbrev_table_up m_abbrev_table_holder; + + /* The DWO abbreviation table. */ + abbrev_table_up m_dwo_abbrev_table; +}; + /* Converts DWARF language names to GDB language names. */ enum language dwarf_lang_to_enum_language (unsigned int lang); |