29 if (IsUint())
return GetUint(cu);
33 return ReadFixed<uint8_t>(&
str);
35 return ReadFixed<uint8_t>(&
str);
37 return ReadFixed<uint32_t>(&
str);
39 return ReadFixed<uint64_t>(&
str);
45 if (
type_ == Type::kUnresolvedUint) {
46 return ResolveIndirectAddress(cu);
48 assert(
type_ == Type::kUint);
54 if (
type_ == Type::kUnresolvedString) {
55 return ResolveDoubleIndirectString(cu);
57 assert(
type_ == Type::kString);
81 return ResolveIndirectString(cu, ReadFixed<D>(
data));
85 AttrValue::ResolveDoubleIndirectString(
const CU &cu)
const {
91 ofs2 = ReadFixed<uint64_t>(&offsets);
94 ofs2 = ReadFixed<uint32_t>(&offsets);
101 uint64_t AttrValue::ResolveIndirectAddress(
const CU& cu)
const {
110 THROW(
"indirect attribute has indirect form type");
112 return ParseAttr(cu, indirect_form,
data);
125 return AttrValue::UnresolvedString(form, ReadFixed<uint8_t>(
data));
127 return AttrValue::UnresolvedString(form, ReadFixed<uint16_t>(
data));
129 return AttrValue::UnresolvedString(form, ReadFixed<uint32_t>(
data));
131 return AttrValue::UnresolvedString(form, ReadLEB128<uint64_t>(
data));
133 return AttrValue::UnresolvedUint(form, ReadFixed<uint8_t>(
data));
135 return AttrValue::UnresolvedUint(form, ReadFixed<uint16_t>(
data));
137 return AttrValue::UnresolvedUint(form, ReadFixed<uint32_t, 3>(
data));
139 return AttrValue::UnresolvedUint(form, ReadFixed<uint32_t>(
data));
141 return AttrValue::UnresolvedUint(form, ReadLEB128<uint64_t>(
data));
178 return AttrValue(form, ReadIndirectString<uint64_t>(cu,
data));
180 return AttrValue(form, ReadIndirectString<uint32_t>(cu,
data));
203 THROWF(
"Don't know how to parse DWARF form: $0", form);