aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorMike Frysinger <vapier@chromium.org>2020-03-09 23:59:12 +0000
committerMike Frysinger <vapier@chromium.org>2020-03-10 18:29:58 +0000
commitfea1913f297dda42d9f0901bb89f50c49608a5a4 (patch)
treeddebcf0ae8bb50cb2e763dd3020f6509b3c44e1e /src/common
parentdump_syms: Reintroduce warnings inadvertently removed by 47cd498384fd (diff)
downloadbreakpad-fea1913f297dda42d9f0901bb89f50c49608a5a4.tar.xz
Revert "Add dwarf5 compilation-unit header handling."
This reverts commit dbd454dbe47e584571388fc3533193416bdce67f. Reason for revert: The parent CL is causing breakage on CrOS due to unhandled enums. Before we can revert that, we need to revert this. Bug: google-breakpad:812 Change-Id: I7c2446f3cd8ed9f6411e90dbdd2434bc463b2f6c Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/2095798 Reviewed-by: Mark Mentovai <mark@chromium.org>
Diffstat (limited to 'src/common')
-rw-r--r--src/common/dwarf/dwarf2enums.h2
-rw-r--r--src/common/dwarf/dwarf2reader.cc84
-rw-r--r--src/common/dwarf/dwarf2reader.h21
-rw-r--r--src/common/dwarf/dwarf2reader_die_unittest.cc6
-rw-r--r--src/common/dwarf/dwarf2reader_test_common.h10
5 files changed, 18 insertions, 105 deletions
diff --git a/src/common/dwarf/dwarf2enums.h b/src/common/dwarf/dwarf2enums.h
index b11a4fd1..51253ed4 100644
--- a/src/common/dwarf/dwarf2enums.h
+++ b/src/common/dwarf/dwarf2enums.h
@@ -686,7 +686,7 @@ enum DwarfLanguage
DW_LANG_ObjC_plus_plus =0x0011,
DW_LANG_UPC =0x0012,
DW_LANG_D =0x0013,
- DW_LANG_Python =0x0014,
+ DW_LANG__Python =0x0014,
DW_LANG_OpenCL =0x0015,
DW_LANG_Go =0x0016,
DW_LANG_Modula3 =0x0017,
diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc
index 7b8e043d..3e6a3e89 100644
--- a/src/common/dwarf/dwarf2reader.cc
+++ b/src/common/dwarf/dwarf2reader.cc
@@ -243,51 +243,11 @@ const uint8_t *CompilationUnit::SkipAttribute(const uint8_t *start,
return NULL;
}
-// Read the abbreviation offset from a compilation unit header.
-int CompilationUnit::ReadAbbrevOffset(const uint8_t *headerptr) {
- assert(headerptr + reader_->OffsetSize() < buffer_ + buffer_length_);
- header_.abbrev_offset = reader_->ReadOffset(headerptr);
- return reader_->OffsetSize();
-}
-
-// Read the address size from a compilation unit header.
-int CompilationUnit::ReadAddressSize(const uint8_t *headerptr) {
- // Compare against less than or equal because this may be the last
- // section in the file.
- assert(headerptr + 1 <= buffer_ + buffer_length_);
- header_.address_size = reader_->ReadOneByte(headerptr);
- reader_->SetAddressSize(header_.address_size);
- return 1;
-}
-
-// Read the DWO id from a split or skeleton compilation unit header.
-int CompilationUnit::ReadDwoId(const uint8_t *headerptr) {
- assert(headerptr + 8 <= buffer_ + buffer_length_);
- dwo_id_ = reader_->ReadEightBytes(headerptr);
- return 8;
-}
-
-// Read the type signature from a type or split type compilation unit header.
-int CompilationUnit::ReadTypeSignature(const uint8_t *headerptr) {
- assert(headerptr + 8 <= buffer_ + buffer_length_);
- type_signature_ = reader_->ReadEightBytes(headerptr);
- return 8;
-}
-
-// Read the DWO id from a split or skeleton compilation unit header.
-int CompilationUnit::ReadTypeOffset(const uint8_t *headerptr) {
- assert(headerptr + reader_->OffsetSize() < buffer_ + buffer_length_);
- type_offset_ = reader_->ReadOffset(headerptr);
- return reader_->OffsetSize();
-}
-
-
-// Read a DWARF header.
-// The header is variable length in DWARF3 and DWARF4 (and DWARF2 as extended by
+// Read a DWARF2/3 header.
+// The header is variable length in DWARF3 (and DWARF2 as extended by
// most compilers), and consists of an length field, a version number,
// the offset in the .debug_abbrev section for our abbrevs, and an
-// address size. DWARF5 adds a unit_type to distinguish between
-// partial-, full-, skeleton-, split-, and type- compilation units.
+// address size.
void CompilationUnit::ReadHeader() {
const uint8_t *headerptr = buffer_;
size_t initial_length_size;
@@ -302,33 +262,17 @@ void CompilationUnit::ReadHeader() {
header_.version = reader_->ReadTwoBytes(headerptr);
headerptr += 2;
- if (header_.version <= 4) {
- // Older versions of dwarf have a relatively simple structure.
- headerptr += ReadAbbrevOffset(headerptr);
- headerptr += ReadAddressSize(headerptr);
- } else {
- // DWARF5 adds a unit_type field, and various fields based on unit_type.
- assert(headerptr + 1 < buffer_ + buffer_length_);
- int unit_type = reader_->ReadOneByte(headerptr);
- headerptr += 1;
- headerptr += ReadAddressSize(headerptr);
- headerptr += ReadAbbrevOffset(headerptr);
- switch (unit_type) {
- case DW_UT_compile:
- case DW_UT_partial:
- // nothing else to read
- break;
- case DW_UT_skeleton:
- case DW_UT_split_compile:
- headerptr += ReadDwoId(headerptr);;
- break;
- case DW_UT_type:
- case DW_UT_split_type:
- headerptr += ReadTypeSignature(headerptr);;
- headerptr += ReadTypeOffset(headerptr);;
- break;
- }
- }
+ assert(headerptr + reader_->OffsetSize() < buffer_ + buffer_length_);
+ header_.abbrev_offset = reader_->ReadOffset(headerptr);
+ headerptr += reader_->OffsetSize();
+
+ // Compare against less than or equal because this may be the last
+ // section in the file.
+ assert(headerptr + 1 <= buffer_ + buffer_length_);
+ header_.address_size = reader_->ReadOneByte(headerptr);
+ reader_->SetAddressSize(header_.address_size);
+ headerptr += 1;
+
after_header_ = headerptr;
// This check ensures that we don't have to do checking during the
diff --git a/src/common/dwarf/dwarf2reader.h b/src/common/dwarf/dwarf2reader.h
index 6f1b1a4d..902d9ef1 100644
--- a/src/common/dwarf/dwarf2reader.h
+++ b/src/common/dwarf/dwarf2reader.h
@@ -410,21 +410,6 @@ class CompilationUnit {
// Reads the DWARF2/3 abbreviations for this compilation unit
void ReadAbbrevs();
- // Read the abbreviation offset for this compilation unit
- int ReadAbbrevOffset(const uint8_t *headerptr);
-
- // Read the address size for this compilation unit
- int ReadAddressSize(const uint8_t *headerptr);
-
- // Read the DWO id from a split or skeleton compilation unit header
- int ReadDwoId(const uint8_t *headerptr);
-
- // Read the type signature from a type or split type compilation unit header
- int ReadTypeSignature(const uint8_t *headerptr);
-
- // Read the DWO id from a split or skeleton compilation unit header
- int ReadTypeOffset(const uint8_t *headerptr);
-
// Processes a single DIE for this compilation unit and return a new
// pointer just past the end of it
const uint8_t *ProcessDIE(uint64 dieoffset,
@@ -579,12 +564,6 @@ class CompilationUnit {
// The value of the DW_AT_GNU_dwo_id attribute, if any.
uint64 dwo_id_;
- // The value of the DW_AT_GNU_type_signature attribute, if any.
- uint64 type_signature_;
-
- // The value of the DW_AT_GNU_type_offset attribute, if any.
- size_t type_offset_;
-
// The value of the DW_AT_GNU_dwo_name attribute, if any.
const char* dwo_name_;
diff --git a/src/common/dwarf/dwarf2reader_die_unittest.cc b/src/common/dwarf/dwarf2reader_die_unittest.cc
index 60541ff5..71418eb8 100644
--- a/src/common/dwarf/dwarf2reader_die_unittest.cc
+++ b/src/common/dwarf/dwarf2reader_die_unittest.cc
@@ -217,8 +217,6 @@ INSTANTIATE_TEST_CASE_P(
DwarfHeaderParams(kLittleEndian, 8, 3, 8),
DwarfHeaderParams(kLittleEndian, 8, 4, 4),
DwarfHeaderParams(kLittleEndian, 8, 4, 8),
- DwarfHeaderParams(kLittleEndian, 8, 5, 4),
- DwarfHeaderParams(kLittleEndian, 8, 5, 8),
DwarfHeaderParams(kBigEndian, 4, 2, 4),
DwarfHeaderParams(kBigEndian, 4, 2, 8),
DwarfHeaderParams(kBigEndian, 4, 3, 4),
@@ -230,9 +228,7 @@ INSTANTIATE_TEST_CASE_P(
DwarfHeaderParams(kBigEndian, 8, 3, 4),
DwarfHeaderParams(kBigEndian, 8, 3, 8),
DwarfHeaderParams(kBigEndian, 8, 4, 4),
- DwarfHeaderParams(kBigEndian, 8, 4, 8),
- DwarfHeaderParams(kBigEndian, 8, 5, 4),
- DwarfHeaderParams(kBigEndian, 8, 5, 8)));
+ DwarfHeaderParams(kBigEndian, 8, 4, 8)));
struct DwarfFormsFixture: public DIEFixture {
// Start a compilation unit, as directed by |params|, containing one
diff --git a/src/common/dwarf/dwarf2reader_test_common.h b/src/common/dwarf/dwarf2reader_test_common.h
index 545bc455..e91de906 100644
--- a/src/common/dwarf/dwarf2reader_test_common.h
+++ b/src/common/dwarf/dwarf2reader_test_common.h
@@ -80,14 +80,8 @@ class TestCompilationUnit: public google_breakpad::test_assembler::Section {
}
post_length_offset_ = Size();
D16(version);
- if (version <= 4) {
- SectionOffset(abbrev_offset);
- D8(address_size);
- } else {
- D8(0x01); // DW_UT_compile
- D8(address_size);
- SectionOffset(abbrev_offset);
- }
+ SectionOffset(abbrev_offset);
+ D8(address_size);
return *this;
}