// dwarf_reader.h -- parse dwarf2/3 debug information for gold -*- C++ -*-
-// Copyright 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+// Copyright (C) 2007-2019 Free Software Foundation, Inc.
// Written by Ian Lance Taylor <iant@google.com>.
// This file is part of gold.
public:
Dwarf_pubnames_table(Dwarf_info_reader* dwinfo, bool is_pubtypes)
: dwinfo_(dwinfo), buffer_(NULL), buffer_end_(NULL), owns_buffer_(false),
- offset_size_(0), pinfo_(NULL), is_pubtypes_(is_pubtypes),
- output_section_offset_(0), unit_length_(0), cu_offset_(0)
+ offset_size_(0), pinfo_(NULL), end_of_table_(NULL),
+ is_pubtypes_(is_pubtypes), is_gnu_style_(false),
+ unit_length_(0), cu_offset_(0)
{ }
~Dwarf_pubnames_table()
subsection_size()
{ return this->unit_length_; }
- // Read the next name from the set.
+ // Read the next name from the set. If the pubname table is gnu-style,
+ // FLAG_BYTE is set to the high-byte of a gdb_index version 7 cu_index.
const char*
- next_name();
+ next_name(uint8_t* flag_byte);
private:
// The Dwarf_info_reader, for reading data.
unsigned int offset_size_;
// The current position within the buffer.
const unsigned char* pinfo_;
+ // The end of the current pubnames table.
+ const unsigned char* end_of_table_;
// TRUE if this is a .debug_pubtypes section.
bool is_pubtypes_;
- // For incremental update links, this will hold the offset of the
- // input section within the output section. Offsets read from
- // relocated data will be relative to the output section, and need
- // to be corrected before reading data from the input section.
- uint64_t output_section_offset_;
+ // Gnu-style pubnames table. This style has an extra flag byte between the
+ // offset and the name, and is used for generating version 7 of gdb-index.
+ bool is_gnu_style_;
// Fields read from the header.
uint64_t unit_length_;
off_t cu_offset_;
symtab_size_(symtab_size), shndx_(shndx), reloc_shndx_(reloc_shndx),
reloc_type_(reloc_type), abbrev_shndx_(0), string_shndx_(0),
buffer_(NULL), buffer_end_(NULL), cu_offset_(0), cu_length_(0),
- offset_size_(0), address_size_(0), cu_version_(0), type_signature_(0),
- type_offset_(0), abbrev_table_(), ranges_table_(this),
+ offset_size_(0), address_size_(0), cu_version_(0),
+ abbrev_table_(), ranges_table_(this),
reloc_mapper_(NULL), string_buffer_(NULL), string_buffer_end_(NULL),
owns_string_buffer_(false), string_output_section_offset_(0)
{ }
address_size() const
{ return this->address_size_; }
+ // Return the size of a DW_FORM_ref_addr.
+ // In DWARF v2, this was the size of an address; in DWARF v3 and later,
+ // it is the size of an DWARF offset.
+ unsigned int
+ ref_addr_size() const
+ { return this->cu_version_ > 2 ? this->offset_size_ : this->address_size_; }
+
// Set the section index of the .debug_abbrev section.
// We use this if there are no relocations for the .debug_info section.
// If not set, the code parse() routine will search for the section by name.
unsigned int address_size_;
// Compilation unit version number.
unsigned int cu_version_;
- // Type signature (for a type unit).
- uint64_t type_signature_;
- // Offset from the type unit header to the type DIE (for a type unit).
- off_t type_offset_;
// Abbreviations table for current compilation unit.
Dwarf_abbrev_table abbrev_table_;
// Ranges table for the current compilation unit.
off_t total_length;
int version;
off_t prologue_length;
- int min_insn_length; // insn stands for instructin
+ int min_insn_length; // insn stands for instruction
+ int max_ops_per_insn; // Added in DWARF-4.
bool default_is_stmt; // stmt stands for statement
signed char line_base;
int line_range;