Style & indentation tweaks.

llvm-svn: 139646
This commit is contained in:
Benjamin Kramer 2011-09-13 21:47:32 +00:00
parent 3eb2470eed
commit eaa7433c85
7 changed files with 202 additions and 212 deletions

View File

@ -38,8 +38,7 @@ DWARFAbbreviationDeclaration::extract(DataExtractor data, uint32_t* offset_ptr,
} }
return Tag != 0; return Tag != 0;
} } else {
else {
Tag = 0; Tag = 0;
HasChildren = false; HasChildren = false;
} }

View File

@ -32,13 +32,11 @@ bool DWARFAbbreviationDeclarationSet::extract(DataExtractor data,
return beginOffset != *offset_ptr; return beginOffset != *offset_ptr;
} }
void DWARFAbbreviationDeclarationSet::dump(raw_ostream &OS) const { void DWARFAbbreviationDeclarationSet::dump(raw_ostream &OS) const {
for (unsigned i = 0, e = Decls.size(); i != e; ++i) for (unsigned i = 0, e = Decls.size(); i != e; ++i)
Decls[i].dump(OS); Decls[i].dump(OS);
} }
const DWARFAbbreviationDeclaration* const DWARFAbbreviationDeclaration*
DWARFAbbreviationDeclarationSet::getAbbreviationDeclaration(uint32_t abbrCode) DWARFAbbreviationDeclarationSet::getAbbreviationDeclaration(uint32_t abbrCode)
const { const {
@ -58,8 +56,8 @@ DWARFAbbreviationDeclarationSet::getAbbreviationDeclaration(uint32_t abbrCode)
} }
DWARFDebugAbbrev::DWARFDebugAbbrev() : DWARFDebugAbbrev::DWARFDebugAbbrev() :
m_abbrevCollMap(), AbbrevCollMap(),
m_prev_abbr_offset_pos(m_abbrevCollMap.end()) {} PrevAbbrOffsetPos(AbbrevCollMap.end()) {}
void DWARFDebugAbbrev::parse(DataExtractor data) { void DWARFDebugAbbrev::parse(DataExtractor data) {
@ -70,21 +68,21 @@ void DWARFDebugAbbrev::parse(DataExtractor data) {
DWARFAbbreviationDeclarationSet abbrevDeclSet; DWARFAbbreviationDeclarationSet abbrevDeclSet;
if (abbrevDeclSet.extract(data, &offset)) if (abbrevDeclSet.extract(data, &offset))
m_abbrevCollMap[initial_cu_offset] = abbrevDeclSet; AbbrevCollMap[initial_cu_offset] = abbrevDeclSet;
else else
break; break;
} }
m_prev_abbr_offset_pos = m_abbrevCollMap.end(); PrevAbbrOffsetPos = AbbrevCollMap.end();
} }
void DWARFDebugAbbrev::dump(raw_ostream &OS) const { void DWARFDebugAbbrev::dump(raw_ostream &OS) const {
if (m_abbrevCollMap.empty()) { if (AbbrevCollMap.empty()) {
OS << "< EMPTY >\n"; OS << "< EMPTY >\n";
return; return;
} }
DWARFAbbreviationDeclarationCollMapConstIter pos; DWARFAbbreviationDeclarationCollMapConstIter pos;
for (pos = m_abbrevCollMap.begin(); pos != m_abbrevCollMap.end(); ++pos) { for (pos = AbbrevCollMap.begin(); pos != AbbrevCollMap.end(); ++pos) {
OS << format("Abbrev table for offset: 0x%8.8x\n", pos->first); OS << format("Abbrev table for offset: 0x%8.8x\n", pos->first);
pos->second.dump(OS); pos->second.dump(OS);
} }
@ -92,17 +90,17 @@ void DWARFDebugAbbrev::dump(raw_ostream &OS) const {
const DWARFAbbreviationDeclarationSet* const DWARFAbbreviationDeclarationSet*
DWARFDebugAbbrev::getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const { DWARFDebugAbbrev::getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const {
DWARFAbbreviationDeclarationCollMapConstIter end = m_abbrevCollMap.end(); DWARFAbbreviationDeclarationCollMapConstIter end = AbbrevCollMap.end();
DWARFAbbreviationDeclarationCollMapConstIter pos; DWARFAbbreviationDeclarationCollMapConstIter pos;
if (m_prev_abbr_offset_pos != end && if (PrevAbbrOffsetPos != end &&
m_prev_abbr_offset_pos->first == cu_abbr_offset) { PrevAbbrOffsetPos->first == cu_abbr_offset) {
return &(m_prev_abbr_offset_pos->second); return &(PrevAbbrOffsetPos->second);
} else { } else {
pos = m_abbrevCollMap.find(cu_abbr_offset); pos = AbbrevCollMap.find(cu_abbr_offset);
m_prev_abbr_offset_pos = pos; PrevAbbrOffsetPos = pos;
} }
if (pos != m_abbrevCollMap.end()) if (pos != AbbrevCollMap.end())
return &(pos->second); return &(pos->second);
return NULL; return NULL;
} }

View File

@ -47,23 +47,25 @@ class DWARFAbbreviationDeclarationSet {
getAbbreviationDeclaration(uint32_t abbrCode) const; getAbbreviationDeclaration(uint32_t abbrCode) const;
}; };
typedef std::map<uint64_t, DWARFAbbreviationDeclarationSet>
DWARFAbbreviationDeclarationCollMap;
typedef DWARFAbbreviationDeclarationCollMap::iterator
DWARFAbbreviationDeclarationCollMapIter;
typedef DWARFAbbreviationDeclarationCollMap::const_iterator
DWARFAbbreviationDeclarationCollMapConstIter;
class DWARFDebugAbbrev { class DWARFDebugAbbrev {
public:
typedef std::map<uint64_t, DWARFAbbreviationDeclarationSet>
DWARFAbbreviationDeclarationCollMap;
typedef DWARFAbbreviationDeclarationCollMap::iterator
DWARFAbbreviationDeclarationCollMapIter;
typedef DWARFAbbreviationDeclarationCollMap::const_iterator
DWARFAbbreviationDeclarationCollMapConstIter;
private:
DWARFAbbreviationDeclarationCollMap AbbrevCollMap;
mutable DWARFAbbreviationDeclarationCollMapConstIter PrevAbbrOffsetPos;
public: public:
DWARFDebugAbbrev(); DWARFDebugAbbrev();
const DWARFAbbreviationDeclarationSet * const DWARFAbbreviationDeclarationSet *
getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const; getAbbreviationDeclarationSet(uint64_t cu_abbr_offset) const;
void dump(raw_ostream &OS) const; void dump(raw_ostream &OS) const;
void parse(DataExtractor data); void parse(DataExtractor data);
protected:
DWARFAbbreviationDeclarationCollMap m_abbrevCollMap;
mutable DWARFAbbreviationDeclarationCollMapConstIter m_prev_abbr_offset_pos;
}; };
} }

View File

@ -351,8 +351,7 @@ DWARFDebugInfoEntryMinimal::getAttributeValue(const DWARFCompileUnit *cu,
const uint32_t attr_offset = offset; const uint32_t attr_offset = offset;
form_value = DWARFFormValue(AbbrevDecl->getFormByIndex(idx)); form_value = DWARFFormValue(AbbrevDecl->getFormByIndex(idx));
if (form_value.extractValue(debug_info_data, &offset, cu)) if (form_value.extractValue(debug_info_data, &offset, cu)) {
{
if (end_attr_offset_ptr) if (end_attr_offset_ptr)
*end_attr_offset_ptr = offset; *end_attr_offset_ptr = offset;
return attr_offset; return attr_offset;

View File

@ -85,19 +85,16 @@ public:
// We know we are kept in a vector of contiguous entries, so we know // We know we are kept in a vector of contiguous entries, so we know
// our parent will be some index behind "this". // our parent will be some index behind "this".
ParentIdx = this - parent; ParentIdx = this - parent;
} } else
else
ParentIdx = 0; ParentIdx = 0;
} }
void setSibling(DWARFDebugInfoEntryMinimal *sibling) { void setSibling(DWARFDebugInfoEntryMinimal *sibling) {
if (sibling) if (sibling) {
{
// We know we are kept in a vector of contiguous entries, so we know // We know we are kept in a vector of contiguous entries, so we know
// our sibling will be some index after "this". // our sibling will be some index after "this".
SiblingIdx = sibling - this; SiblingIdx = sibling - this;
sibling->setParent(getParent()); sibling->setParent(getParent());
} } else
else
SiblingIdx = 0; SiblingIdx = 0;
} }

View File

@ -17,156 +17,156 @@ using namespace llvm;
using namespace dwarf; using namespace dwarf;
static const uint8_t form_sizes_addr4[] = { static const uint8_t form_sizes_addr4[] = {
0, // 0x00 unused 0, // 0x00 unused
4, // 0x01 DW_FORM_addr 4, // 0x01 DW_FORM_addr
0, // 0x02 unused 0, // 0x02 unused
0, // 0x03 DW_FORM_block2 0, // 0x03 DW_FORM_block2
0, // 0x04 DW_FORM_block4 0, // 0x04 DW_FORM_block4
2, // 0x05 DW_FORM_data2 2, // 0x05 DW_FORM_data2
4, // 0x06 DW_FORM_data4 4, // 0x06 DW_FORM_data4
8, // 0x07 DW_FORM_data8 8, // 0x07 DW_FORM_data8
0, // 0x08 DW_FORM_string 0, // 0x08 DW_FORM_string
0, // 0x09 DW_FORM_block 0, // 0x09 DW_FORM_block
0, // 0x0a DW_FORM_block1 0, // 0x0a DW_FORM_block1
1, // 0x0b DW_FORM_data1 1, // 0x0b DW_FORM_data1
1, // 0x0c DW_FORM_flag 1, // 0x0c DW_FORM_flag
0, // 0x0d DW_FORM_sdata 0, // 0x0d DW_FORM_sdata
4, // 0x0e DW_FORM_strp 4, // 0x0e DW_FORM_strp
0, // 0x0f DW_FORM_udata 0, // 0x0f DW_FORM_udata
4, // 0x10 DW_FORM_ref_addr 4, // 0x10 DW_FORM_ref_addr
1, // 0x11 DW_FORM_ref1 1, // 0x11 DW_FORM_ref1
2, // 0x12 DW_FORM_ref2 2, // 0x12 DW_FORM_ref2
4, // 0x13 DW_FORM_ref4 4, // 0x13 DW_FORM_ref4
8, // 0x14 DW_FORM_ref8 8, // 0x14 DW_FORM_ref8
0, // 0x15 DW_FORM_ref_udata 0, // 0x15 DW_FORM_ref_udata
0, // 0x16 DW_FORM_indirect 0, // 0x16 DW_FORM_indirect
}; };
static const uint8_t form_sizes_addr8[] = { static const uint8_t form_sizes_addr8[] = {
0, // 0x00 unused 0, // 0x00 unused
8, // 0x01 DW_FORM_addr 8, // 0x01 DW_FORM_addr
0, // 0x02 unused 0, // 0x02 unused
0, // 0x03 DW_FORM_block2 0, // 0x03 DW_FORM_block2
0, // 0x04 DW_FORM_block4 0, // 0x04 DW_FORM_block4
2, // 0x05 DW_FORM_data2 2, // 0x05 DW_FORM_data2
4, // 0x06 DW_FORM_data4 4, // 0x06 DW_FORM_data4
8, // 0x07 DW_FORM_data8 8, // 0x07 DW_FORM_data8
0, // 0x08 DW_FORM_string 0, // 0x08 DW_FORM_string
0, // 0x09 DW_FORM_block 0, // 0x09 DW_FORM_block
0, // 0x0a DW_FORM_block1 0, // 0x0a DW_FORM_block1
1, // 0x0b DW_FORM_data1 1, // 0x0b DW_FORM_data1
1, // 0x0c DW_FORM_flag 1, // 0x0c DW_FORM_flag
0, // 0x0d DW_FORM_sdata 0, // 0x0d DW_FORM_sdata
4, // 0x0e DW_FORM_strp 4, // 0x0e DW_FORM_strp
0, // 0x0f DW_FORM_udata 0, // 0x0f DW_FORM_udata
8, // 0x10 DW_FORM_ref_addr 8, // 0x10 DW_FORM_ref_addr
1, // 0x11 DW_FORM_ref1 1, // 0x11 DW_FORM_ref1
2, // 0x12 DW_FORM_ref2 2, // 0x12 DW_FORM_ref2
4, // 0x13 DW_FORM_ref4 4, // 0x13 DW_FORM_ref4
8, // 0x14 DW_FORM_ref8 8, // 0x14 DW_FORM_ref8
0, // 0x15 DW_FORM_ref_udata 0, // 0x15 DW_FORM_ref_udata
0, // 0x16 DW_FORM_indirect 0, // 0x16 DW_FORM_indirect
}; };
const uint8_t * const uint8_t *
DWARFFormValue::getFixedFormSizesForAddressSize(uint8_t addr_size) { DWARFFormValue::getFixedFormSizesForAddressSize(uint8_t addr_size) {
switch (addr_size) { switch (addr_size) {
case 4: return form_sizes_addr4; case 4: return form_sizes_addr4;
case 8: return form_sizes_addr8; case 8: return form_sizes_addr8;
} }
return NULL; return NULL;
} }
bool bool
DWARFFormValue::extractValue(DataExtractor data, uint32_t *offset_ptr, DWARFFormValue::extractValue(DataExtractor data, uint32_t *offset_ptr,
const DWARFCompileUnit* cu) { const DWARFCompileUnit* cu) {
bool indirect = false; bool indirect = false;
bool is_block = false; bool is_block = false;
Value.data = NULL; Value.data = NULL;
// Read the value for the form into value and follow and DW_FORM_indirect // Read the value for the form into value and follow and DW_FORM_indirect
// instances we run into // instances we run into
do { do {
indirect = false; indirect = false;
switch (Form) { switch (Form) {
case DW_FORM_addr: case DW_FORM_addr:
case DW_FORM_ref_addr: case DW_FORM_ref_addr:
Value.uval = data.getUnsigned(offset_ptr, cu->getAddressByteSize()); Value.uval = data.getUnsigned(offset_ptr, cu->getAddressByteSize());
break; break;
case DW_FORM_block: case DW_FORM_block:
Value.uval = data.getULEB128(offset_ptr); Value.uval = data.getULEB128(offset_ptr);
is_block = true; is_block = true;
break; break;
case DW_FORM_block1: case DW_FORM_block1:
Value.uval = data.getU8(offset_ptr); Value.uval = data.getU8(offset_ptr);
is_block = true; is_block = true;
break; break;
case DW_FORM_block2: case DW_FORM_block2:
Value.uval = data.getU16(offset_ptr); Value.uval = data.getU16(offset_ptr);
is_block = true; is_block = true;
break; break;
case DW_FORM_block4: case DW_FORM_block4:
Value.uval = data.getU32(offset_ptr); Value.uval = data.getU32(offset_ptr);
is_block = true; is_block = true;
break; break;
case DW_FORM_data1: case DW_FORM_data1:
case DW_FORM_ref1: case DW_FORM_ref1:
case DW_FORM_flag: case DW_FORM_flag:
Value.uval = data.getU8(offset_ptr); Value.uval = data.getU8(offset_ptr);
break; break;
case DW_FORM_data2: case DW_FORM_data2:
case DW_FORM_ref2: case DW_FORM_ref2:
Value.uval = data.getU16(offset_ptr); Value.uval = data.getU16(offset_ptr);
break; break;
case DW_FORM_data4: case DW_FORM_data4:
case DW_FORM_ref4: case DW_FORM_ref4:
Value.uval = data.getU32(offset_ptr); Value.uval = data.getU32(offset_ptr);
break; break;
case DW_FORM_data8: case DW_FORM_data8:
case DW_FORM_ref8: case DW_FORM_ref8:
Value.uval = data.getU64(offset_ptr); Value.uval = data.getU64(offset_ptr);
break; break;
case DW_FORM_sdata: case DW_FORM_sdata:
Value.sval = data.getSLEB128(offset_ptr); Value.sval = data.getSLEB128(offset_ptr);
break; break;
case DW_FORM_strp: case DW_FORM_strp:
Value.uval = data.getU32(offset_ptr); Value.uval = data.getU32(offset_ptr);
break; break;
case DW_FORM_udata: case DW_FORM_udata:
case DW_FORM_ref_udata: case DW_FORM_ref_udata:
Value.uval = data.getULEB128(offset_ptr); Value.uval = data.getULEB128(offset_ptr);
break; break;
case DW_FORM_string: case DW_FORM_string:
Value.cstr = data.getCStr(offset_ptr); Value.cstr = data.getCStr(offset_ptr);
// Set the string value to also be the data for inlined cstr form // Set the string value to also be the data for inlined cstr form
// values only so we can tell the differnence between DW_FORM_string // values only so we can tell the differnence between DW_FORM_string
// and DW_FORM_strp form values // and DW_FORM_strp form values
Value.data = (uint8_t*)Value.cstr; Value.data = (uint8_t*)Value.cstr;
break; break;
case DW_FORM_indirect: case DW_FORM_indirect:
Form = data.getULEB128(offset_ptr); Form = data.getULEB128(offset_ptr);
indirect = true; indirect = true;
break; break;
default: default:
return false; return false;
}
} while (indirect);
if (is_block) {
StringRef str = data.getData().substr(*offset_ptr, Value.uval);
Value.data = NULL;
if (!str.empty()) {
Value.data = reinterpret_cast<const uint8_t *>(str.data());
*offset_ptr += Value.uval;
} }
} } while (indirect);
return true; if (is_block) {
StringRef str = data.getData().substr(*offset_ptr, Value.uval);
Value.data = NULL;
if (!str.empty()) {
Value.data = reinterpret_cast<const uint8_t *>(str.data());
*offset_ptr += Value.uval;
}
}
return true;
} }
bool bool
DWARFFormValue::skipValue(DataExtractor debug_info_data, uint32_t* offset_ptr, DWARFFormValue::skipValue(DataExtractor debug_info_data, uint32_t* offset_ptr,
const DWARFCompileUnit* cu) const { const DWARFCompileUnit* cu) const {
return DWARFFormValue::skipValue(Form, debug_info_data, offset_ptr, cu); return DWARFFormValue::skipValue(Form, debug_info_data, offset_ptr, cu);
} }
bool bool
@ -261,8 +261,7 @@ DWARFFormValue::dump(raw_ostream &OS, const DataExtractor *debug_str_data,
uint64_t uvalue = getUnsigned(); uint64_t uvalue = getUnsigned();
bool cu_relative_offset = false; bool cu_relative_offset = false;
switch (Form) switch (Form) {
{
case DW_FORM_addr: OS << format("0x%016x", uvalue); break; case DW_FORM_addr: OS << format("0x%016x", uvalue); break;
case DW_FORM_flag: case DW_FORM_flag:
case DW_FORM_data1: OS << format("0x%02x", uvalue); break; case DW_FORM_data1: OS << format("0x%02x", uvalue); break;
@ -365,22 +364,21 @@ DWARFFormValue::getAsCString(const DataExtractor *debug_str_data_ptr) const {
return NULL; return NULL;
} }
uint64_t uint64_t DWARFFormValue::getReference(const DWARFCompileUnit *cu) const {
DWARFFormValue::getReference(const DWARFCompileUnit *cu) const { uint64_t die_offset = Value.uval;
uint64_t die_offset = Value.uval; switch (Form) {
switch (Form) { case DW_FORM_ref1:
case DW_FORM_ref1: case DW_FORM_ref2:
case DW_FORM_ref2: case DW_FORM_ref4:
case DW_FORM_ref4: case DW_FORM_ref8:
case DW_FORM_ref8: case DW_FORM_ref_udata:
case DW_FORM_ref_udata: die_offset += (cu ? cu->getOffset() : 0);
die_offset += (cu ? cu->getOffset() : 0); break;
break; default:
default: break;
break; }
}
return die_offset; return die_offset;
} }
bool bool
@ -391,44 +389,41 @@ DWARFFormValue::resolveCompileUnitReferences(const DWARFCompileUnit* cu) {
case DW_FORM_ref4: case DW_FORM_ref4:
case DW_FORM_ref8: case DW_FORM_ref8:
case DW_FORM_ref_udata: case DW_FORM_ref_udata:
Value.uval += cu->getOffset(); Value.uval += cu->getOffset();
Form = DW_FORM_ref_addr; Form = DW_FORM_ref_addr;
return true; return true;
default: default:
break; break;
} }
return false; return false;
} }
const uint8_t *DWARFFormValue::BlockData() const { const uint8_t *DWARFFormValue::BlockData() const {
if (!isInlinedCStr()) if (!isInlinedCStr())
return Value.data; return Value.data;
return NULL; return NULL;
} }
bool DWARFFormValue::isBlockForm(uint16_t form) { bool DWARFFormValue::isBlockForm(uint16_t form) {
switch (form) switch (form) {
{ case DW_FORM_block:
case DW_FORM_block: case DW_FORM_block1:
case DW_FORM_block1: case DW_FORM_block2:
case DW_FORM_block2: case DW_FORM_block4:
case DW_FORM_block4: return true;
return true; }
} return false;
return false;
} }
bool DWARFFormValue::isDataForm(uint16_t form) { bool DWARFFormValue::isDataForm(uint16_t form) {
switch (form) switch (form) {
{ case DW_FORM_sdata:
case DW_FORM_sdata: case DW_FORM_udata:
case DW_FORM_udata: case DW_FORM_data1:
case DW_FORM_data1: case DW_FORM_data2:
case DW_FORM_data2: case DW_FORM_data4:
case DW_FORM_data4: case DW_FORM_data8:
case DW_FORM_data8: return true;
return true; }
} return false;
return false;
} }

View File

@ -51,7 +51,7 @@ public:
void dump(raw_ostream &OS, const DataExtractor *debug_str_data, void dump(raw_ostream &OS, const DataExtractor *debug_str_data,
const DWARFCompileUnit* cu) const; const DWARFCompileUnit* cu) const;
bool extractValue(DataExtractor data, uint32_t *offset_ptr, bool extractValue(DataExtractor data, uint32_t *offset_ptr,
const DWARFCompileUnit *cu); const DWARFCompileUnit *cu);
bool isInlinedCStr() const { bool isInlinedCStr() const {
return Value.data != NULL && Value.data == (uint8_t*)Value.cstr; return Value.data != NULL && Value.data == (uint8_t*)Value.cstr;
} }