2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Copyright 2011-2014, Rene Gollent, rene@gollent.com.
4 * Distributed under the terms of the MIT License.
7 #include "DebugInfoEntries.h"
11 #include "AttributeValue.h"
13 #include "SourceLanguageInfo.h"
16 // #pragma mark - DIECompileUnitBase
19 DIECompileUnitBase::DIECompileUnitBase()
22 fCompilationDir(NULL
),
25 fStatementListOffset(-1),
27 fAddressRangesOffset(-1),
32 fContainsMainSubprogram(false)
37 DIECompileUnitBase::~DIECompileUnitBase()
43 DIECompileUnitBase::InitAfterAttributes(DebugInfoEntryInitInfo
& info
)
47 info
.languageInfo
= &kUnknownLanguageInfo
;
50 info
.languageInfo
= &kC89LanguageInfo
;
53 info
.languageInfo
= &kCLanguageInfo
;
55 case DW_LANG_C_plus_plus
:
56 info
.languageInfo
= &kCPlusPlusLanguageInfo
;
59 info
.languageInfo
= &kC99LanguageInfo
;
62 info
.languageInfo
= &kUnsupportedLanguageInfo
;
69 DIECompileUnitBase::Name() const
76 DIECompileUnitBase::AddChild(DebugInfoEntry
* child
)
81 fOtherChildren
.Add(child
);
87 DIECompileUnitBase::AddAttribute_name(uint16 attributeName
,
88 const AttributeValue
& value
)
96 DIECompileUnitBase::AddAttribute_comp_dir(uint16 attributeName
,
97 const AttributeValue
& value
)
99 fCompilationDir
= value
.string
;
105 DIECompileUnitBase::AddAttribute_low_pc(uint16 attributeName
,
106 const AttributeValue
& value
)
108 fLowPC
= value
.address
;
114 DIECompileUnitBase::AddAttribute_high_pc(uint16 attributeName
,
115 const AttributeValue
& value
)
117 fHighPC
= value
.address
;
118 if (fLowPC
!= 0 && fHighPC
< fLowPC
)
126 DIECompileUnitBase::AddAttribute_producer(uint16 attributeName
,
127 const AttributeValue
& value
)
135 DIECompileUnitBase::AddAttribute_stmt_list(uint16 attributeName
,
136 const AttributeValue
& value
)
138 fStatementListOffset
= value
.pointer
;
144 DIECompileUnitBase::AddAttribute_macro_info(uint16 attributeName
,
145 const AttributeValue
& value
)
147 fMacroInfoOffset
= value
.pointer
;
153 DIECompileUnitBase::AddAttribute_base_types(uint16 attributeName
,
154 const AttributeValue
& value
)
156 fBaseTypesUnit
= dynamic_cast<DIECompileUnitBase
*>(value
.reference
);
157 return fBaseTypesUnit
!= NULL
? B_OK
: B_BAD_DATA
;
162 DIECompileUnitBase::AddAttribute_language(uint16 attributeName
,
163 const AttributeValue
& value
)
165 fLanguage
= value
.constant
;
171 DIECompileUnitBase::AddAttribute_identifier_case(uint16 attributeName
,
172 const AttributeValue
& value
)
174 fIdentifierCase
= value
.constant
;
180 DIECompileUnitBase::AddAttribute_use_UTF8(uint16 attributeName
,
181 const AttributeValue
& value
)
183 fUseUTF8
= value
.flag
;
189 DIECompileUnitBase::AddAttribute_ranges(uint16 attributeName
,
190 const AttributeValue
& value
)
192 fAddressRangesOffset
= value
.pointer
;
198 DIECompileUnitBase::AddAttribute_main_subprogram(uint16 attributeName
,
199 const AttributeValue
& value
)
201 fContainsMainSubprogram
= true;
206 // #pragma mark - DIEType
213 fAllocated
.SetTo((uint64
)0);
214 fAssociated
.SetTo((uint64
)0);
219 DIEType::IsType() const
226 DIEType::Name() const
233 DIEType::IsDeclaration() const
239 const DynamicAttributeValue
*
240 DIEType::ByteSize() const
247 DIEType::AddAttribute_name(uint16 attributeName
,
248 const AttributeValue
& value
)
250 fName
= value
.string
;
256 DIEType::AddAttribute_allocated(uint16 attributeName
,
257 const AttributeValue
& value
)
259 return SetDynamicAttributeValue(fAllocated
, value
);
264 DIEType::AddAttribute_associated(uint16 attributeName
,
265 const AttributeValue
& value
)
267 return SetDynamicAttributeValue(fAssociated
, value
);
271 // #pragma mark - DIEModifiedType
274 DIEModifiedType::DIEModifiedType()
282 DIEModifiedType::AddAttribute_type(uint16 attributeName
,
283 const AttributeValue
& value
)
285 fType
= dynamic_cast<DIEType
*>(value
.reference
);
286 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
290 // #pragma mark - DIEAddressingType
293 DIEAddressingType::DIEAddressingType()
301 DIEAddressingType::AddAttribute_address_class(uint16 attributeName
,
302 const AttributeValue
& value
)
304 // TODO: How is the address class handled?
305 fAddressClass
= value
.constant
;
310 // #pragma mark - DIEDeclaredType
313 DIEDeclaredType::DIEDeclaredType()
316 fAbstractOrigin(NULL
),
317 fSignatureType(NULL
),
325 DIEDeclaredType::Description() const
332 DIEDeclaredType::AbstractOrigin() const
334 return fAbstractOrigin
;
339 DIEDeclaredType::SignatureType() const
341 return fSignatureType
;
346 DIEDeclaredType::IsDeclaration() const
353 DIEDeclaredType::AddAttribute_accessibility(uint16 attributeName
,
354 const AttributeValue
& value
)
356 fAccessibility
= value
.constant
;
362 DIEDeclaredType::AddAttribute_declaration(uint16 attributeName
,
363 const AttributeValue
& value
)
365 fDeclaration
= value
.flag
;
371 DIEDeclaredType::AddAttribute_description(uint16 attributeName
,
372 const AttributeValue
& value
)
374 fDescription
= value
.string
;
380 DIEDeclaredType::AddAttribute_abstract_origin(uint16 attributeName
,
381 const AttributeValue
& value
)
383 fAbstractOrigin
= value
.reference
;
389 DIEDeclaredType::AddAttribute_signature(uint16 attributeName
,
390 const AttributeValue
& value
)
392 fSignatureType
= value
.reference
;
398 DIEDeclaredType::GetDeclarationLocation()
400 return &fDeclarationLocation
;
404 // #pragma mark - DIEDerivedType
407 DIEDerivedType::DIEDerivedType()
415 DIEDerivedType::AddAttribute_type(uint16 attributeName
,
416 const AttributeValue
& value
)
418 fType
= dynamic_cast<DIEType
*>(value
.reference
);
419 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
425 // #pragma mark - DIECompoundType
428 DIECompoundType::DIECompoundType()
436 DIECompoundType::IsNamespace() const
443 DIECompoundType::Specification() const
445 return fSpecification
;
449 const DynamicAttributeValue
*
450 DIECompoundType::ByteSize() const
457 DIECompoundType::AddChild(DebugInfoEntry
* child
)
459 if (child
->Tag() == DW_TAG_member
) {
460 // TODO: Not for interfaces!
461 fDataMembers
.Add(child
);
465 return DIEDeclaredType::AddChild(child
);
470 DIECompoundType::AddAttribute_byte_size(uint16 attributeName
,
471 const AttributeValue
& value
)
473 return SetDynamicAttributeValue(fByteSize
, value
);
478 DIECompoundType::AddAttribute_specification(uint16 attributeName
,
479 const AttributeValue
& value
)
481 fSpecification
= dynamic_cast<DIECompoundType
*>(value
.reference
);
482 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
486 // #pragma mark - DIEClassBaseType
489 DIEClassBaseType::DIEClassBaseType()
495 DIEClassBaseType::AddChild(DebugInfoEntry
* child
)
497 switch (child
->Tag()) {
498 case DW_TAG_inheritance
:
499 fBaseTypes
.Add(child
);
504 case DW_TAG_access_declaration
:
505 fAccessDeclarations
.Add(child
);
507 case DW_TAG_subprogram
:
508 fMemberFunctions
.Add(child
);
510 case DW_TAG_template_type_parameter
:
511 case DW_TAG_template_value_parameter
:
512 fTemplateParameters
.Add(child
);
517 if (child
->IsType()) {
518 fInnerTypes
.Add(child
);
522 return DIECompoundType::AddChild(child
);
528 // #pragma mark - DIENamedBase
531 DIENamedBase::DIENamedBase()
540 DIENamedBase::Name() const
547 DIENamedBase::Description() const
554 DIENamedBase::AddAttribute_name(uint16 attributeName
,
555 const AttributeValue
& value
)
557 fName
= value
.string
;
563 DIENamedBase::AddAttribute_description(uint16 attributeName
,
564 const AttributeValue
& value
)
566 fDescription
= value
.string
;
571 // #pragma mark - DIEDeclaredBase
574 DIEDeclaredBase::DIEDeclaredBase()
580 DIEDeclaredBase::GetDeclarationLocation()
582 return &fDeclarationLocation
;
586 // #pragma mark - DIEDeclaredNamedBase
589 DIEDeclaredNamedBase::DIEDeclaredNamedBase()
601 DIEDeclaredNamedBase::Name() const
608 DIEDeclaredNamedBase::Description() const
615 DIEDeclaredNamedBase::IsDeclaration() const
622 DIEDeclaredNamedBase::AddAttribute_name(uint16 attributeName
,
623 const AttributeValue
& value
)
625 fName
= value
.string
;
631 DIEDeclaredNamedBase::AddAttribute_description(uint16 attributeName
,
632 const AttributeValue
& value
)
634 fDescription
= value
.string
;
640 DIEDeclaredNamedBase::AddAttribute_accessibility(uint16 attributeName
,
641 const AttributeValue
& value
)
643 fAccessibility
= value
.constant
;
649 DIEDeclaredNamedBase::AddAttribute_declaration(uint16 attributeName
,
650 const AttributeValue
& value
)
652 fDeclaration
= value
.flag
;
657 // #pragma mark - DIEArrayIndexType
660 DIEArrayIndexType::DIEArrayIndexType()
665 const DynamicAttributeValue
*
666 DIEArrayIndexType::ByteSize() const
673 DIEArrayIndexType::AddAttribute_bit_stride(uint16 attributeName
,
674 const AttributeValue
& value
)
676 return SetDynamicAttributeValue(fBitStride
, value
);
681 DIEArrayIndexType::AddAttribute_byte_size(uint16 attributeName
,
682 const AttributeValue
& value
)
684 return SetDynamicAttributeValue(fByteSize
, value
);
689 DIEArrayIndexType::AddAttribute_byte_stride(uint16 attributeName
,
690 const AttributeValue
& value
)
692 return SetDynamicAttributeValue(fByteStride
, value
);
696 // #pragma mark - DIEArrayType
699 DIEArrayType::DIEArrayType()
701 fSpecification(NULL
),
702 fOrdering(DW_ORD_row_major
)
708 DIEArrayType::Tag() const
710 return DW_TAG_array_type
;
715 DIEArrayType::InitAfterHierarchy(DebugInfoEntryInitInfo
& info
)
717 fOrdering
= info
.languageInfo
->arrayOrdering
;
723 DIEArrayType::Specification() const
725 return fSpecification
;
729 const DynamicAttributeValue
*
730 DIEArrayType::ByteSize() const
737 DIEArrayType::AddChild(DebugInfoEntry
* child
)
739 // a dimension child must be of subrange or enumeration type
740 uint16 tag
= child
->Tag();
741 if (tag
== DW_TAG_subrange_type
|| tag
== DW_TAG_enumeration_type
) {
742 fDimensions
.Add(child
);
746 return DIEDerivedType::AddChild(child
);
751 DIEArrayType::AddAttribute_ordering(uint16 attributeName
,
752 const AttributeValue
& value
)
754 fOrdering
= value
.constant
;
760 DIEArrayType::AddAttribute_bit_stride(uint16 attributeName
,
761 const AttributeValue
& value
)
763 return SetDynamicAttributeValue(fBitStride
, value
);
768 DIEArrayType::AddAttribute_stride_size(uint16 attributeName
,
769 const AttributeValue
& value
)
771 return SetDynamicAttributeValue(fBitStride
, value
);
776 DIEArrayType::AddAttribute_byte_size(uint16 attributeName
,
777 const AttributeValue
& value
)
779 return SetDynamicAttributeValue(fByteSize
, value
);
784 DIEArrayType::AddAttribute_specification(uint16 attributeName
,
785 const AttributeValue
& value
)
787 fSpecification
= dynamic_cast<DIEArrayType
*>(value
.reference
);
788 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
792 // #pragma mark - DIEClassType
795 DIEClassType::DIEClassType()
801 DIEClassType::Tag() const
803 return DW_TAG_class_type
;
807 // #pragma mark - DIEEntryPoint
810 DIEEntryPoint::DIEEntryPoint()
816 DIEEntryPoint::Tag() const
818 return DW_TAG_entry_point
;
822 // #pragma mark - DIEEnumerationType
825 DIEEnumerationType::DIEEnumerationType()
833 DIEEnumerationType::Tag() const
835 return DW_TAG_enumeration_type
;
840 DIEEnumerationType::Specification() const
842 return fSpecification
;
847 DIEEnumerationType::AddChild(DebugInfoEntry
* child
)
849 if (child
->Tag() == DW_TAG_enumerator
) {
850 fEnumerators
.Add(child
);
854 return DIEDerivedType::AddChild(child
);
859 DIEEnumerationType::AddAttribute_specification(uint16 attributeName
,
860 const AttributeValue
& value
)
862 fSpecification
= dynamic_cast<DIEEnumerationType
*>(value
.reference
);
863 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
867 // #pragma mark - DIEFormalParameter
870 DIEFormalParameter::DIEFormalParameter()
872 fAbstractOrigin(NULL
),
880 DIEFormalParameter::Tag() const
882 return DW_TAG_formal_parameter
;
887 DIEFormalParameter::AbstractOrigin() const
889 return fAbstractOrigin
;
894 DIEFormalParameter::GetLocationDescription()
896 return &fLocationDescription
;
901 DIEFormalParameter::AddAttribute_abstract_origin(uint16 attributeName
,
902 const AttributeValue
& value
)
904 fAbstractOrigin
= value
.reference
;
910 DIEFormalParameter::AddAttribute_artificial(uint16 attributeName
,
911 const AttributeValue
& value
)
913 fArtificial
= value
.flag
;
919 DIEFormalParameter::AddAttribute_const_value(uint16 attributeName
,
920 const AttributeValue
& value
)
922 return SetConstantAttributeValue(fValue
, value
);
927 DIEFormalParameter::AddAttribute_type(uint16 attributeName
,
928 const AttributeValue
& value
)
930 fType
= dynamic_cast<DIEType
*>(value
.reference
);
931 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
935 // #pragma mark - DIEImportedDeclaration
938 DIEImportedDeclaration::DIEImportedDeclaration()
944 DIEImportedDeclaration::Tag() const
946 return DW_TAG_imported_declaration
;
950 // #pragma mark - DIELabel
959 DIELabel::Tag() const
965 // #pragma mark - DIELexicalBlock
968 DIELexicalBlock::DIELexicalBlock()
972 fAddressRangesOffset(-1),
973 fAbstractOrigin(NULL
)
979 DIELexicalBlock::Tag() const
981 return DW_TAG_lexical_block
;
986 DIELexicalBlock::AbstractOrigin() const
988 return fAbstractOrigin
;
993 DIELexicalBlock::AddChild(DebugInfoEntry
* child
)
995 switch (child
->Tag()) {
996 case DW_TAG_variable
:
997 fVariables
.Add(child
);
999 case DW_TAG_lexical_block
:
1003 return DIENamedBase::AddChild(child
);
1009 DIELexicalBlock::AddAttribute_low_pc(uint16 attributeName
,
1010 const AttributeValue
& value
)
1012 fLowPC
= value
.address
;
1018 DIELexicalBlock::AddAttribute_high_pc(uint16 attributeName
,
1019 const AttributeValue
& value
)
1021 fHighPC
= value
.address
;
1022 if (fLowPC
!= 0 && fHighPC
< fLowPC
)
1030 DIELexicalBlock::AddAttribute_ranges(uint16 attributeName
,
1031 const AttributeValue
& value
)
1033 fAddressRangesOffset
= value
.pointer
;
1039 DIELexicalBlock::AddAttribute_abstract_origin(uint16 attributeName
,
1040 const AttributeValue
& value
)
1042 fAbstractOrigin
= dynamic_cast<DIELexicalBlock
*>(value
.reference
);
1043 return fAbstractOrigin
!= NULL
? B_OK
: B_BAD_DATA
;
1047 // #pragma mark - DIEMember
1050 DIEMember::DIEMember()
1058 DIEMember::Tag() const
1060 return DW_TAG_member
;
1065 DIEMember::AddAttribute_type(uint16 attributeName
,
1066 const AttributeValue
& value
)
1068 fType
= dynamic_cast<DIEType
*>(value
.reference
);
1069 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
1074 DIEMember::AddAttribute_byte_size(uint16 attributeName
,
1075 const AttributeValue
& value
)
1077 return SetDynamicAttributeValue(fByteSize
, value
);
1082 DIEMember::AddAttribute_bit_size(uint16 attributeName
,
1083 const AttributeValue
& value
)
1085 return SetDynamicAttributeValue(fBitSize
, value
);
1090 DIEMember::AddAttribute_data_member_location(uint16 attributeName
,
1091 const AttributeValue
& value
)
1093 return SetMemberLocation(fLocation
, value
);
1098 DIEMember::AddAttribute_bit_offset(uint16 attributeName
,
1099 const AttributeValue
& value
)
1101 return SetDynamicAttributeValue(fBitOffset
, value
);
1106 DIEMember::AddAttribute_data_bit_offset(uint16 attributeName
,
1107 const AttributeValue
& value
)
1109 return SetDynamicAttributeValue(fDataBitOffset
, value
);
1113 // #pragma mark - DIEPointerType
1116 DIEPointerType::DIEPointerType()
1118 fSpecification(NULL
)
1124 DIEPointerType::Tag() const
1126 return DW_TAG_pointer_type
;
1131 DIEPointerType::Specification() const
1133 return fSpecification
;
1138 DIEPointerType::AddAttribute_specification(uint16 attributeName
,
1139 const AttributeValue
& value
)
1141 fSpecification
= dynamic_cast<DIEPointerType
*>(value
.reference
);
1142 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
1146 // #pragma mark - DIEReferenceType
1149 DIEReferenceType::DIEReferenceType()
1155 DIEReferenceType::Tag() const
1157 return DW_TAG_reference_type
;
1161 // #pragma mark - DIECompileUnit
1164 DIECompileUnit::DIECompileUnit()
1170 DIECompileUnit::Tag() const
1172 return DW_TAG_compile_unit
;
1176 // #pragma mark - DIEStringType
1179 DIEStringType::DIEStringType()
1185 DIEStringType::Tag() const
1187 return DW_TAG_string_type
;
1191 const DynamicAttributeValue
*
1192 DIEStringType::ByteSize() const
1199 DIEStringType::AddAttribute_byte_size(uint16 attributeName
,
1200 const AttributeValue
& value
)
1202 return SetDynamicAttributeValue(fByteSize
, value
);
1206 // #pragma mark - DIEStructureType
1209 DIEStructureType::DIEStructureType()
1215 DIEStructureType::Tag() const
1217 return DW_TAG_structure_type
;
1221 // #pragma mark - DIESubroutineType
1224 DIESubroutineType::DIESubroutineType()
1234 DIESubroutineType::Tag() const
1236 return DW_TAG_subroutine_type
;
1241 DIESubroutineType::AddChild(DebugInfoEntry
* child
)
1243 switch (child
->Tag()) {
1244 case DW_TAG_formal_parameter
:
1245 case DW_TAG_unspecified_parameters
:
1246 fParameters
.Add(child
);
1249 return DIEDeclaredType::AddChild(child
);
1255 DIESubroutineType::AddAttribute_address_class(uint16 attributeName
,
1256 const AttributeValue
& value
)
1258 // TODO: How is the address class handled?
1259 fAddressClass
= value
.constant
;
1265 DIESubroutineType::AddAttribute_prototyped(uint16 attributeName
,
1266 const AttributeValue
& value
)
1268 fPrototyped
= value
.flag
;
1274 DIESubroutineType::AddAttribute_type(uint16 attributeName
,
1275 const AttributeValue
& value
)
1277 fReturnType
= dynamic_cast<DIEType
*>(value
.reference
);
1278 return fReturnType
!= NULL
? B_OK
: B_BAD_DATA
;
1282 // #pragma mark - DIETypedef
1285 DIETypedef::DIETypedef()
1291 DIETypedef::Tag() const
1293 return DW_TAG_typedef
;
1297 // #pragma mark - DIEUnionType
1300 DIEUnionType::DIEUnionType()
1306 DIEUnionType::Tag() const
1308 return DW_TAG_union_type
;
1312 // #pragma mark - DIEUnspecifiedParameters
1315 DIEUnspecifiedParameters::DIEUnspecifiedParameters()
1321 DIEUnspecifiedParameters::Tag() const
1323 return DW_TAG_unspecified_parameters
;
1327 // #pragma mark - DIEVariant
1330 DIEVariant::DIEVariant()
1336 DIEVariant::Tag() const
1338 return DW_TAG_variant
;
1342 // #pragma mark - DIECommonBlock
1345 DIECommonBlock::DIECommonBlock()
1351 DIECommonBlock::Tag() const
1353 return DW_TAG_common_block
;
1357 LocationDescription
*
1358 DIECommonBlock::GetLocationDescription()
1360 return &fLocationDescription
;
1364 // #pragma mark - DIECommonInclusion
1367 DIECommonInclusion::DIECommonInclusion()
1373 DIECommonInclusion::Tag() const
1375 return DW_TAG_common_inclusion
;
1379 // #pragma mark - DIEInheritance
1382 DIEInheritance::DIEInheritance()
1390 DIEInheritance::Tag() const
1392 return DW_TAG_inheritance
;
1397 DIEInheritance::AddAttribute_type(uint16 attributeName
,
1398 const AttributeValue
& value
)
1400 fType
= dynamic_cast<DIEType
*>(value
.reference
);
1401 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
1406 DIEInheritance::AddAttribute_data_member_location(uint16 attributeName
,
1407 const AttributeValue
& value
)
1409 return SetMemberLocation(fLocation
, value
);
1413 // #pragma mark - DIEInlinedSubroutine
1416 DIEInlinedSubroutine::DIEInlinedSubroutine()
1422 DIEInlinedSubroutine::Tag() const
1424 return DW_TAG_inlined_subroutine
;
1428 // #pragma mark - DIEModule
1431 DIEModule::DIEModule()
1437 DIEModule::Tag() const
1439 return DW_TAG_module
;
1443 // #pragma mark - DIEPointerToMemberType
1446 DIEPointerToMemberType::DIEPointerToMemberType()
1448 fContainingType(NULL
),
1455 DIEPointerToMemberType::Tag() const
1457 return DW_TAG_ptr_to_member_type
;
1462 DIEPointerToMemberType::AddAttribute_address_class(uint16 attributeName
,
1463 const AttributeValue
& value
)
1465 // TODO: How is the address class handled?
1466 fAddressClass
= value
.constant
;
1472 DIEPointerToMemberType::AddAttribute_containing_type(uint16 attributeName
,
1473 const AttributeValue
& value
)
1475 DebugInfoEntry
* type
= value
.reference
;
1476 DIEModifiedType
* modifiedType
;
1477 while ((modifiedType
= dynamic_cast<DIEModifiedType
*>(type
)) != NULL
)
1478 type
= modifiedType
->GetType();
1480 fContainingType
= dynamic_cast<DIECompoundType
*>(type
);
1481 return fContainingType
!= NULL
? B_OK
: B_BAD_DATA
;
1486 DIEPointerToMemberType::AddAttribute_use_location(uint16 attributeName
,
1487 const AttributeValue
& value
)
1489 if (value
.attributeClass
== ATTRIBUTE_CLASS_LOCLISTPTR
) {
1490 fUseLocation
.SetToLocationList(value
.pointer
);
1494 if (value
.attributeClass
== ATTRIBUTE_CLASS_BLOCK
) {
1495 fUseLocation
.SetToExpression(value
.block
.data
, value
.block
.length
);
1503 // #pragma mark - DIESetType
1506 DIESetType::DIESetType()
1512 DIESetType::Tag() const
1514 return DW_TAG_set_type
;
1518 const DynamicAttributeValue
*
1519 DIESetType::ByteSize() const
1526 DIESetType::AddAttribute_byte_size(uint16 attributeName
,
1527 const AttributeValue
& value
)
1529 return SetDynamicAttributeValue(fByteSize
, value
);
1533 // #pragma mark - DIESubrangeType
1536 DIESubrangeType::DIESubrangeType()
1538 fThreadsScaled(false)
1544 DIESubrangeType::Tag() const
1546 return DW_TAG_subrange_type
;
1551 DIESubrangeType::AddAttribute_count(uint16 attributeName
,
1552 const AttributeValue
& value
)
1554 return SetDynamicAttributeValue(fCount
, value
);
1559 DIESubrangeType::AddAttribute_lower_bound(uint16 attributeName
,
1560 const AttributeValue
& value
)
1562 return SetDynamicAttributeValue(fLowerBound
, value
);
1567 DIESubrangeType::AddAttribute_upper_bound(uint16 attributeName
,
1568 const AttributeValue
& value
)
1570 return SetDynamicAttributeValue(fUpperBound
, value
);
1575 DIESubrangeType::AddAttribute_threads_scaled(uint16 attributeName
,
1576 const AttributeValue
& value
)
1578 fThreadsScaled
= value
.flag
;
1583 // #pragma mark - DIEWithStatement
1586 DIEWithStatement::DIEWithStatement()
1594 DIEWithStatement::Tag() const
1596 return DW_TAG_with_stmt
;
1600 LocationDescription
*
1601 DIEWithStatement::GetLocationDescription()
1603 return &fLocationDescription
;
1608 DIEWithStatement::AddAttribute_type(uint16 attributeName
,
1609 const AttributeValue
& value
)
1611 fType
= dynamic_cast<DIEType
*>(value
.reference
);
1612 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
1616 // #pragma mark - DIEAccessDeclaration
1619 DIEAccessDeclaration::DIEAccessDeclaration()
1625 DIEAccessDeclaration::Tag() const
1627 return DW_TAG_access_declaration
;
1631 // #pragma mark - DIEBaseType
1634 DIEBaseType::DIEBaseType()
1643 DIEBaseType::Tag() const
1645 return DW_TAG_base_type
;
1649 const DynamicAttributeValue
*
1650 DIEBaseType::ByteSize() const
1657 DIEBaseType::AddAttribute_encoding(uint16 attributeName
,
1658 const AttributeValue
& value
)
1660 fEncoding
= value
.constant
;
1666 DIEBaseType::AddAttribute_byte_size(uint16 attributeName
,
1667 const AttributeValue
& value
)
1669 return SetDynamicAttributeValue(fByteSize
, value
);
1674 DIEBaseType::AddAttribute_bit_size(uint16 attributeName
,
1675 const AttributeValue
& value
)
1677 return SetDynamicAttributeValue(fBitSize
, value
);
1682 DIEBaseType::AddAttribute_bit_offset(uint16 attributeName
,
1683 const AttributeValue
& value
)
1685 return SetDynamicAttributeValue(fBitOffset
, value
);
1690 DIEBaseType::AddAttribute_data_bit_offset(uint16 attributeName
,
1691 const AttributeValue
& value
)
1693 return SetDynamicAttributeValue(fDataBitOffset
, value
);
1698 DIEBaseType::AddAttribute_endianity(uint16 attributeName
,
1699 const AttributeValue
& value
)
1701 fEndianity
= value
.constant
;
1706 // #pragma mark - DIECatchBlock
1709 DIECatchBlock::DIECatchBlock()
1715 DIECatchBlock::Tag() const
1717 return DW_TAG_catch_block
;
1721 // #pragma mark - DIEConstType
1724 DIEConstType::DIEConstType()
1730 DIEConstType::Tag() const
1732 return DW_TAG_const_type
;
1736 // #pragma mark - DIEConstant
1739 DIEConstant::DIEConstant()
1747 DIEConstant::Tag() const
1749 return DW_TAG_constant
;
1754 DIEConstant::AddAttribute_const_value(uint16 attributeName
,
1755 const AttributeValue
& value
)
1757 return SetConstantAttributeValue(fValue
, value
);
1762 DIEConstant::AddAttribute_type(uint16 attributeName
,
1763 const AttributeValue
& value
)
1765 fType
= dynamic_cast<DIEType
*>(value
.reference
);
1766 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
1770 // #pragma mark - DIEEnumerator
1773 DIEEnumerator::DIEEnumerator()
1779 DIEEnumerator::Tag() const
1781 return DW_TAG_enumerator
;
1786 DIEEnumerator::AddAttribute_const_value(uint16 attributeName
,
1787 const AttributeValue
& value
)
1789 return SetConstantAttributeValue(fValue
, value
);
1793 // #pragma mark - DIEFileType
1796 DIEFileType::DIEFileType()
1802 DIEFileType::Tag() const
1804 return DW_TAG_file_type
;
1808 const DynamicAttributeValue
*
1809 DIEFileType::ByteSize() const
1816 DIEFileType::AddAttribute_byte_size(uint16 attributeName
,
1817 const AttributeValue
& value
)
1819 return SetDynamicAttributeValue(fByteSize
, value
);
1823 // #pragma mark - DIEFriend
1826 DIEFriend::DIEFriend()
1832 DIEFriend::Tag() const
1834 return DW_TAG_friend
;
1838 // #pragma mark - DIENameList
1841 DIENameList::DIENameList()
1847 DIENameList::Tag() const
1849 return DW_TAG_namelist
;
1853 // #pragma mark - DIENameListItem
1856 DIENameListItem::DIENameListItem()
1862 DIENameListItem::Tag() const
1864 return DW_TAG_namelist_item
;
1868 // #pragma mark - DIEPackedType
1871 DIEPackedType::DIEPackedType()
1877 DIEPackedType::Tag() const
1879 return DW_TAG_packed_type
;
1883 // #pragma mark - DIESubprogram
1886 DIESubprogram::DIESubprogram()
1890 fAddressRangesOffset(-1),
1891 fSpecification(NULL
),
1892 fAbstractOrigin(NULL
),
1896 fInline(DW_INL_not_inlined
),
1899 fCallingConvention(DW_CC_normal
)
1904 DIESubprogram::~DIESubprogram()
1910 DIESubprogram::Tag() const
1912 return DW_TAG_subprogram
;
1917 DIESubprogram::Specification() const
1919 return fSpecification
;
1925 DIESubprogram::AbstractOrigin() const
1927 return fAbstractOrigin
;
1932 DIESubprogram::AddChild(DebugInfoEntry
* child
)
1934 switch (child
->Tag()) {
1935 case DW_TAG_formal_parameter
:
1936 case DW_TAG_unspecified_parameters
:
1937 fParameters
.Add(child
);
1939 case DW_TAG_variable
:
1940 fVariables
.Add(child
);
1942 case DW_TAG_lexical_block
:
1945 case DW_TAG_template_type_parameter
:
1946 fTemplateTypeParameters
.Add(child
);
1948 case DW_TAG_template_value_parameter
:
1949 fTemplateValueParameters
.Add(child
);
1951 case DW_TAG_GNU_call_site
:
1952 fCallSites
.Add(child
);
1955 return DIEDeclaredNamedBase::AddChild(child
);
1961 DIESubprogram::AddAttribute_low_pc(uint16 attributeName
,
1962 const AttributeValue
& value
)
1964 fLowPC
= value
.address
;
1970 DIESubprogram::AddAttribute_high_pc(uint16 attributeName
,
1971 const AttributeValue
& value
)
1973 fHighPC
= value
.address
;
1974 if (fLowPC
!= 0 && fHighPC
< fLowPC
)
1982 DIESubprogram::AddAttribute_ranges(uint16 attributeName
,
1983 const AttributeValue
& value
)
1985 fAddressRangesOffset
= value
.pointer
;
1991 DIESubprogram::AddAttribute_specification(uint16 attributeName
,
1992 const AttributeValue
& value
)
1994 fSpecification
= dynamic_cast<DIESubprogram
*>(value
.reference
);
1995 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
2000 DIESubprogram::AddAttribute_address_class(uint16 attributeName
,
2001 const AttributeValue
& value
)
2003 // TODO: How is the address class handled?
2004 fAddressClass
= value
.constant
;
2010 DIESubprogram::AddAttribute_prototyped(uint16 attributeName
,
2011 const AttributeValue
& value
)
2013 fPrototyped
= value
.flag
;
2019 DIESubprogram::AddAttribute_type(uint16 attributeName
,
2020 const AttributeValue
& value
)
2022 fReturnType
= dynamic_cast<DIEType
*>(value
.reference
);
2023 return fReturnType
!= NULL
? B_OK
: B_BAD_DATA
;
2028 DIESubprogram::AddAttribute_inline(uint16 attributeName
,
2029 const AttributeValue
& value
)
2031 // TODO: How is the address class handled?
2032 fInline
= value
.constant
;
2038 DIESubprogram::AddAttribute_abstract_origin(uint16 attributeName
,
2039 const AttributeValue
& value
)
2041 fAbstractOrigin
= dynamic_cast<DIESubprogram
*>(value
.reference
);
2042 return fAbstractOrigin
!= NULL
? B_OK
: B_BAD_DATA
;
2047 DIESubprogram::AddAttribute_frame_base(uint16 attributeName
,
2048 const AttributeValue
& value
)
2050 if (value
.attributeClass
== ATTRIBUTE_CLASS_LOCLISTPTR
) {
2051 fFrameBase
.SetToLocationList(value
.pointer
);
2055 if (value
.attributeClass
== ATTRIBUTE_CLASS_BLOCK
) {
2056 fFrameBase
.SetToExpression(value
.block
.data
, value
.block
.length
);
2065 DIESubprogram::AddAttribute_artificial(uint16 attributeName
,
2066 const AttributeValue
& value
)
2068 fArtificial
= value
.flag
;
2074 DIESubprogram::AddAttribute_calling_convention(uint16 attributeName
,
2075 const AttributeValue
& value
)
2077 fCallingConvention
= value
.constant
;
2083 DIESubprogram::AddAttribute_main_subprogram(uint16 attributeName
,
2084 const AttributeValue
& value
)
2091 // #pragma mark - DIETemplateTypeParameter
2094 DIETemplateTypeParameter::DIETemplateTypeParameter()
2102 DIETemplateTypeParameter::Tag() const
2104 return DW_TAG_template_type_parameter
;
2109 DIETemplateTypeParameter::AddAttribute_type(uint16 attributeName
,
2110 const AttributeValue
& value
)
2112 fType
= dynamic_cast<DIEType
*>(value
.reference
);
2113 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
2117 // #pragma mark - DIETemplateValueParameter
2120 DIETemplateValueParameter::DIETemplateValueParameter()
2128 DIETemplateValueParameter::Tag() const
2130 return DW_TAG_template_value_parameter
;
2135 DIETemplateValueParameter::AddAttribute_const_value(uint16 attributeName
,
2136 const AttributeValue
& value
)
2138 return SetConstantAttributeValue(fValue
, value
);
2143 DIETemplateValueParameter::AddAttribute_type(uint16 attributeName
,
2144 const AttributeValue
& value
)
2146 fType
= dynamic_cast<DIEType
*>(value
.reference
);
2147 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
2151 // #pragma mark - DIEThrownType
2154 DIEThrownType::DIEThrownType()
2162 DIEThrownType::Tag() const
2164 return DW_TAG_thrown_type
;
2169 DIEThrownType::AddAttribute_type(uint16 attributeName
,
2170 const AttributeValue
& value
)
2172 fType
= dynamic_cast<DIEType
*>(value
.reference
);
2173 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
2177 // #pragma mark - DIETryBlock
2180 DIETryBlock::DIETryBlock()
2186 DIETryBlock::Tag() const
2188 return DW_TAG_try_block
;
2192 // #pragma mark - DIEVariantPart
2195 DIEVariantPart::DIEVariantPart()
2203 DIEVariantPart::Tag() const
2205 return DW_TAG_variant_part
;
2210 DIEVariantPart::AddAttribute_type(uint16 attributeName
,
2211 const AttributeValue
& value
)
2213 fType
= dynamic_cast<DIEType
*>(value
.reference
);
2214 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
2218 // #pragma mark - DIEVariable
2221 DIEVariable::DIEVariable()
2224 fSpecification(NULL
),
2225 fAbstractOrigin(NULL
),
2232 DIEVariable::Tag() const
2234 return DW_TAG_variable
;
2239 DIEVariable::Specification() const
2241 return fSpecification
;
2247 DIEVariable::AbstractOrigin() const
2249 return fAbstractOrigin
;
2253 LocationDescription
*
2254 DIEVariable::GetLocationDescription()
2256 return &fLocationDescription
;
2261 DIEVariable::AddAttribute_const_value(uint16 attributeName
,
2262 const AttributeValue
& value
)
2264 return SetConstantAttributeValue(fValue
, value
);
2269 DIEVariable::AddAttribute_type(uint16 attributeName
,
2270 const AttributeValue
& value
)
2272 fType
= dynamic_cast<DIEType
*>(value
.reference
);
2273 return fType
!= NULL
? B_OK
: B_BAD_DATA
;
2278 DIEVariable::AddAttribute_specification(uint16 attributeName
,
2279 const AttributeValue
& value
)
2281 fSpecification
= dynamic_cast<DIEVariable
*>(value
.reference
);
2282 // in the case of static variables declared within a compound type,
2283 // the specification may point to a member entry rather than
2285 if (fSpecification
== NULL
)
2286 fSpecification
= dynamic_cast<DIEMember
*>(value
.reference
);
2288 return fSpecification
!= NULL
? B_OK
: B_BAD_DATA
;
2293 DIEVariable::AddAttribute_abstract_origin(uint16 attributeName
,
2294 const AttributeValue
& value
)
2296 fAbstractOrigin
= dynamic_cast<DIEVariable
*>(value
.reference
);
2297 return fAbstractOrigin
!= NULL
? B_OK
: B_BAD_DATA
;
2302 DIEVariable::AddAttribute_start_scope(uint16 attributeName
,
2303 const AttributeValue
& value
)
2305 fStartScope
= value
.constant
;
2311 DIEVariable::AddAttribute_external(uint16 attributeName
,
2312 const AttributeValue
& value
)
2314 fIsExternal
= value
.flag
;
2319 // #pragma mark - DIEVolatileType
2322 DIEVolatileType::DIEVolatileType()
2328 DIEVolatileType::Tag() const
2330 return DW_TAG_volatile_type
;
2335 DIEVolatileType::AddAttribute_decl_file(uint16 attributeName
,
2336 const AttributeValue
& value
)
2338 fDeclarationLocation
.SetFile(value
.constant
);
2344 DIEVolatileType::AddAttribute_decl_line(uint16 attributeName
,
2345 const AttributeValue
& value
)
2347 fDeclarationLocation
.SetLine(value
.constant
);
2353 DIEVolatileType::AddAttribute_decl_column(uint16 attributeName
,
2354 const AttributeValue
& value
)
2356 fDeclarationLocation
.SetColumn(value
.constant
);
2361 // #pragma mark - DIEDwarfProcedure
2364 DIEDwarfProcedure::DIEDwarfProcedure()
2370 DIEDwarfProcedure::Tag() const
2372 return DW_TAG_dwarf_procedure
;
2376 LocationDescription
*
2377 DIEDwarfProcedure::GetLocationDescription()
2379 return &fLocationDescription
;
2383 // #pragma mark - DIERestrictType
2386 DIERestrictType::DIERestrictType()
2392 DIERestrictType::Tag() const
2394 return DW_TAG_restrict_type
;
2398 // #pragma mark - DIEInterfaceType
2401 DIEInterfaceType::DIEInterfaceType()
2407 DIEInterfaceType::Tag() const
2409 return DW_TAG_interface_type
;
2413 // #pragma mark - DIENamespace
2416 DIENamespace::DIENamespace()
2422 DIENamespace::Tag() const
2424 return DW_TAG_namespace
;
2429 DIENamespace::IsNamespace() const
2436 DIENamespace::AddChild(DebugInfoEntry
* child
)
2438 fChildren
.Add(child
);
2443 // #pragma mark - DIEImportedModule
2446 DIEImportedModule::DIEImportedModule()
2452 DIEImportedModule::Tag() const
2454 return DW_TAG_imported_module
;
2458 // #pragma mark - DIEUnspecifiedType
2461 DIEUnspecifiedType::DIEUnspecifiedType()
2467 DIEUnspecifiedType::Tag() const
2469 return DW_TAG_unspecified_type
;
2474 DIEUnspecifiedType::AddAttribute_decl_file(uint16 attributeName
,
2475 const AttributeValue
& value
)
2477 fDeclarationLocation
.SetFile(value
.constant
);
2483 DIEUnspecifiedType::AddAttribute_decl_line(uint16 attributeName
,
2484 const AttributeValue
& value
)
2486 fDeclarationLocation
.SetLine(value
.constant
);
2492 DIEUnspecifiedType::AddAttribute_decl_column(uint16 attributeName
,
2493 const AttributeValue
& value
)
2495 fDeclarationLocation
.SetColumn(value
.constant
);
2500 // #pragma mark - DIEPartialUnit
2503 DIEPartialUnit::DIEPartialUnit()
2509 DIEPartialUnit::Tag() const
2511 return DW_TAG_partial_unit
;
2515 // #pragma mark - DIEImportedUnit
2518 DIEImportedUnit::DIEImportedUnit()
2524 DIEImportedUnit::Tag() const
2526 return DW_TAG_imported_unit
;
2530 // #pragma mark - DIECondition
2533 DIECondition::DIECondition()
2539 DIECondition::Tag() const
2541 return DW_TAG_condition
;
2545 // #pragma mark - DIESharedType
2548 DIESharedType::DIESharedType()
2550 fBlockSize
.SetTo(~(uint64
)0);
2555 DIESharedType::Tag() const
2557 return DW_TAG_shared_type
;
2562 DIESharedType::AddAttribute_count(uint16 attributeName
,
2563 const AttributeValue
& value
)
2565 return SetDynamicAttributeValue(fBlockSize
, value
);
2570 DIESharedType::AddAttribute_decl_file(uint16 attributeName
,
2571 const AttributeValue
& value
)
2573 fDeclarationLocation
.SetFile(value
.constant
);
2579 DIESharedType::AddAttribute_decl_line(uint16 attributeName
,
2580 const AttributeValue
& value
)
2582 fDeclarationLocation
.SetLine(value
.constant
);
2588 DIESharedType::AddAttribute_decl_column(uint16 attributeName
,
2589 const AttributeValue
& value
)
2591 fDeclarationLocation
.SetColumn(value
.constant
);
2596 // #pragma mark - DIETypeUnit
2599 DIETypeUnit::DIETypeUnit()
2605 DIETypeUnit::Tag() const
2607 return DW_TAG_type_unit
;
2611 // #pragma mark - DIERValueReferenceType
2614 DIERValueReferenceType::DIERValueReferenceType()
2620 DIERValueReferenceType::Tag() const
2622 return DW_TAG_rvalue_reference_type
;
2626 // #pragma mark - DIETemplateTemplateParameter
2629 DIETemplateTemplateParameter::DIETemplateTemplateParameter()
2637 DIETemplateTemplateParameter::Tag() const
2639 return DW_TAG_GNU_template_template_param
;
2644 DIETemplateTemplateParameter::Name() const
2651 DIETemplateTemplateParameter::AddAttribute_name(uint16 attributeName
,
2652 const AttributeValue
& value
)
2654 fName
= value
.string
;
2659 // #pragma mark - DIETemplateTypeParameterPack
2662 DIETemplateTypeParameterPack::DIETemplateTypeParameterPack()
2670 DIETemplateTypeParameterPack::Tag() const
2672 return DW_TAG_GNU_template_parameter_pack
;
2677 DIETemplateTypeParameterPack::Name() const
2684 DIETemplateTypeParameterPack::AddAttribute_name(uint16 attributeName
,
2685 const AttributeValue
& value
)
2687 fName
= value
.string
;
2693 DIETemplateTypeParameterPack::AddChild(DebugInfoEntry
* child
)
2695 if (child
->Tag() == DW_TAG_template_type_parameter
) {
2696 fChildren
.Add(child
);
2700 return DIEDeclaredBase::AddChild(child
);
2704 // #pragma mark - DIETemplateValueParameterPack
2707 DIETemplateValueParameterPack::DIETemplateValueParameterPack()
2715 DIETemplateValueParameterPack::Tag() const
2717 return DW_TAG_GNU_formal_parameter_pack
;
2722 DIETemplateValueParameterPack::Name() const
2729 DIETemplateValueParameterPack::AddAttribute_name(uint16 attributeName
,
2730 const AttributeValue
& value
)
2732 fName
= value
.string
;
2738 DIETemplateValueParameterPack::AddChild(DebugInfoEntry
* child
)
2740 if (child
->Tag() == DW_TAG_formal_parameter
) {
2741 fChildren
.Add(child
);
2745 return DIEDeclaredBase::AddChild(child
);
2749 // #pragma mark - DIECallSite
2752 DIECallSite::DIECallSite()
2760 DIECallSite::Tag() const
2762 return DW_TAG_GNU_call_site
;
2767 DIECallSite::Name() const
2774 DIECallSite::AddAttribute_name(uint16 attributeName
,
2775 const AttributeValue
& value
)
2777 fName
= value
.string
;
2783 DIECallSite::AddChild(DebugInfoEntry
* child
)
2785 if (child
->Tag() == DW_TAG_GNU_call_site_parameter
) {
2786 fChildren
.Add(child
);
2790 return DIEDeclaredBase::AddChild(child
);
2794 // #pragma mark - DIECallSiteParameter
2797 DIECallSiteParameter::DIECallSiteParameter()
2805 DIECallSiteParameter::Tag() const
2807 return DW_TAG_GNU_call_site_parameter
;
2812 DIECallSiteParameter::Name() const
2819 DIECallSiteParameter::AddAttribute_name(uint16 attributeName
,
2820 const AttributeValue
& value
)
2822 fName
= value
.string
;
2828 DIECallSiteParameter::AddChild(DebugInfoEntry
* child
)
2830 return DIEDeclaredBase::AddChild(child
);
2834 // #pragma mark - DebugInfoEntryFactory
2837 DebugInfoEntryFactory::DebugInfoEntryFactory()
2843 DebugInfoEntryFactory::CreateDebugInfoEntry(uint16 tag
, DebugInfoEntry
*& _entry
)
2845 DebugInfoEntry
* entry
= NULL
;
2848 case DW_TAG_array_type
:
2849 entry
= new(std::nothrow
) DIEArrayType
;
2851 case DW_TAG_class_type
:
2852 entry
= new(std::nothrow
) DIEClassType
;
2854 case DW_TAG_entry_point
:
2855 entry
= new(std::nothrow
) DIEEntryPoint
;
2857 case DW_TAG_enumeration_type
:
2858 entry
= new(std::nothrow
) DIEEnumerationType
;
2860 case DW_TAG_formal_parameter
:
2861 entry
= new(std::nothrow
) DIEFormalParameter
;
2863 case DW_TAG_imported_declaration
:
2864 entry
= new(std::nothrow
) DIEImportedDeclaration
;
2867 entry
= new(std::nothrow
) DIELabel
;
2869 case DW_TAG_lexical_block
:
2870 entry
= new(std::nothrow
) DIELexicalBlock
;
2873 entry
= new(std::nothrow
) DIEMember
;
2875 case DW_TAG_pointer_type
:
2876 entry
= new(std::nothrow
) DIEPointerType
;
2878 case DW_TAG_reference_type
:
2879 entry
= new(std::nothrow
) DIEReferenceType
;
2881 case DW_TAG_compile_unit
:
2882 entry
= new(std::nothrow
) DIECompileUnit
;
2884 case DW_TAG_string_type
:
2885 entry
= new(std::nothrow
) DIEStringType
;
2887 case DW_TAG_structure_type
:
2888 entry
= new(std::nothrow
) DIEStructureType
;
2890 case DW_TAG_subroutine_type
:
2891 entry
= new(std::nothrow
) DIESubroutineType
;
2893 case DW_TAG_typedef
:
2894 entry
= new(std::nothrow
) DIETypedef
;
2896 case DW_TAG_union_type
:
2897 entry
= new(std::nothrow
) DIEUnionType
;
2899 case DW_TAG_unspecified_parameters
:
2900 entry
= new(std::nothrow
) DIEUnspecifiedParameters
;
2902 case DW_TAG_variant
:
2903 entry
= new(std::nothrow
) DIEVariant
;
2905 case DW_TAG_common_block
:
2906 entry
= new(std::nothrow
) DIECommonBlock
;
2908 case DW_TAG_common_inclusion
:
2909 entry
= new(std::nothrow
) DIECommonInclusion
;
2911 case DW_TAG_inheritance
:
2912 entry
= new(std::nothrow
) DIEInheritance
;
2914 case DW_TAG_inlined_subroutine
:
2915 entry
= new(std::nothrow
) DIEInlinedSubroutine
;
2918 entry
= new(std::nothrow
) DIEModule
;
2920 case DW_TAG_ptr_to_member_type
:
2921 entry
= new(std::nothrow
) DIEPointerToMemberType
;
2923 case DW_TAG_set_type
:
2924 entry
= new(std::nothrow
) DIESetType
;
2926 case DW_TAG_subrange_type
:
2927 entry
= new(std::nothrow
) DIESubrangeType
;
2929 case DW_TAG_with_stmt
:
2930 entry
= new(std::nothrow
) DIEWithStatement
;
2932 case DW_TAG_access_declaration
:
2933 entry
= new(std::nothrow
) DIEAccessDeclaration
;
2935 case DW_TAG_base_type
:
2936 entry
= new(std::nothrow
) DIEBaseType
;
2938 case DW_TAG_catch_block
:
2939 entry
= new(std::nothrow
) DIECatchBlock
;
2941 case DW_TAG_const_type
:
2942 entry
= new(std::nothrow
) DIEConstType
;
2944 case DW_TAG_constant
:
2945 entry
= new(std::nothrow
) DIEConstant
;
2947 case DW_TAG_enumerator
:
2948 entry
= new(std::nothrow
) DIEEnumerator
;
2950 case DW_TAG_file_type
:
2951 entry
= new(std::nothrow
) DIEFileType
;
2954 entry
= new(std::nothrow
) DIEFriend
;
2956 case DW_TAG_namelist
:
2957 entry
= new(std::nothrow
) DIENameList
;
2959 case DW_TAG_namelist_item
:
2960 entry
= new(std::nothrow
) DIENameListItem
;
2962 case DW_TAG_packed_type
:
2963 entry
= new(std::nothrow
) DIEPackedType
;
2965 case DW_TAG_subprogram
:
2966 entry
= new(std::nothrow
) DIESubprogram
;
2968 case DW_TAG_template_type_parameter
:
2969 entry
= new(std::nothrow
) DIETemplateTypeParameter
;
2971 case DW_TAG_template_value_parameter
:
2972 entry
= new(std::nothrow
) DIETemplateValueParameter
;
2974 case DW_TAG_thrown_type
:
2975 entry
= new(std::nothrow
) DIEThrownType
;
2977 case DW_TAG_try_block
:
2978 entry
= new(std::nothrow
) DIETryBlock
;
2980 case DW_TAG_variant_part
:
2981 entry
= new(std::nothrow
) DIEVariantPart
;
2983 case DW_TAG_variable
:
2984 entry
= new(std::nothrow
) DIEVariable
;
2986 case DW_TAG_volatile_type
:
2987 entry
= new(std::nothrow
) DIEVolatileType
;
2989 case DW_TAG_dwarf_procedure
:
2990 entry
= new(std::nothrow
) DIEDwarfProcedure
;
2992 case DW_TAG_restrict_type
:
2993 entry
= new(std::nothrow
) DIERestrictType
;
2995 case DW_TAG_interface_type
:
2996 entry
= new(std::nothrow
) DIEInterfaceType
;
2998 case DW_TAG_namespace
:
2999 entry
= new(std::nothrow
) DIENamespace
;
3001 case DW_TAG_imported_module
:
3002 entry
= new(std::nothrow
) DIEImportedModule
;
3004 case DW_TAG_unspecified_type
:
3005 entry
= new(std::nothrow
) DIEUnspecifiedType
;
3007 case DW_TAG_partial_unit
:
3008 entry
= new(std::nothrow
) DIEPartialUnit
;
3010 case DW_TAG_imported_unit
:
3011 entry
= new(std::nothrow
) DIEImportedUnit
;
3013 case DW_TAG_condition
:
3014 entry
= new(std::nothrow
) DIECondition
;
3016 case DW_TAG_shared_type
:
3017 entry
= new(std::nothrow
) DIESharedType
;
3019 case DW_TAG_type_unit
:
3020 entry
= new(std::nothrow
) DIETypeUnit
;
3022 case DW_TAG_rvalue_reference_type
:
3023 entry
= new(std::nothrow
) DIERValueReferenceType
;
3025 case DW_TAG_GNU_template_template_param
:
3026 entry
= new(std::nothrow
) DIETemplateTemplateParameter
;
3028 case DW_TAG_GNU_template_parameter_pack
:
3029 entry
= new(std::nothrow
) DIETemplateTypeParameterPack
;
3031 case DW_TAG_GNU_formal_parameter_pack
:
3032 entry
= new(std::nothrow
) DIETemplateValueParameterPack
;
3034 case DW_TAG_GNU_call_site
:
3035 entry
= new(std::nothrow
) DIECallSite
;
3037 case DW_TAG_GNU_call_site_parameter
:
3038 entry
= new(std::nothrow
) DIECallSiteParameter
;
3041 return B_ENTRY_NOT_FOUND
;