diff --git a/src/apps/debugger/AttributeValue.h b/src/apps/debugger/AttributeValue.h index f8f076606b..94711e158b 100644 --- a/src/apps/debugger/AttributeValue.h +++ b/src/apps/debugger/AttributeValue.h @@ -66,4 +66,33 @@ struct DynamicAttributeValue { }; +struct DeclarationLocation { + uint32 file; + uint32 line; + uint32 column; + + DeclarationLocation() + : + file(0), + line(0), + column(0) + { + } + + void SetFile(uint32 file) + { + this->file = file; + } + + void SetLine(uint32 line) + { + this->line = line; + } + + void SetColumn(uint32 column) + { + this->column = column; + } +}; + #endif // ATTRIBUTE_VALUE_H diff --git a/src/apps/debugger/DebugInfoEntries.cpp b/src/apps/debugger/DebugInfoEntries.cpp index 7aebca34b2..178e5a36fb 100644 --- a/src/apps/debugger/DebugInfoEntries.cpp +++ b/src/apps/debugger/DebugInfoEntries.cpp @@ -273,6 +273,33 @@ DIEDeclaredType::DIEDeclaredType() } +status_t +DIEDeclaredType::AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetFile(value.constant); + return B_OK; +} + + +status_t +DIEDeclaredType::AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetLine(value.constant); + return B_OK; +} + + +status_t +DIEDeclaredType::AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetColumn(value.constant); + return B_OK; +} + + // #pragma mark - DIEDerivedType @@ -1128,6 +1155,33 @@ DIEVolatileType::Tag() const } +status_t +DIEVolatileType::AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetFile(value.constant); + return B_OK; +} + + +status_t +DIEVolatileType::AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetLine(value.constant); + return B_OK; +} + + +status_t +DIEVolatileType::AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetColumn(value.constant); + return B_OK; +} + + // #pragma mark - DIEDwarfProcedure @@ -1218,6 +1272,33 @@ DIEUnspecifiedType::Tag() const } +status_t +DIEUnspecifiedType::AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetFile(value.constant); + return B_OK; +} + + +status_t +DIEUnspecifiedType::AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetLine(value.constant); + return B_OK; +} + + +status_t +DIEUnspecifiedType::AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetColumn(value.constant); + return B_OK; +} + + // #pragma mark - DIEPartialUnit @@ -1289,6 +1370,33 @@ DIESharedType::AddAttribute_count(uint16 attributeName, } +status_t +DIESharedType::AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetFile(value.constant); + return B_OK; +} + + +status_t +DIESharedType::AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetLine(value.constant); + return B_OK; +} + + +status_t +DIESharedType::AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value) +{ + fDeclarationLocation.SetColumn(value.constant); + return B_OK; +} + + // #pragma mark - DebugInfoEntryFactory diff --git a/src/apps/debugger/DebugInfoEntries.h b/src/apps/debugger/DebugInfoEntries.h index 218536e2da..89446dd786 100644 --- a/src/apps/debugger/DebugInfoEntries.h +++ b/src/apps/debugger/DebugInfoEntries.h @@ -246,8 +246,14 @@ class DIEDeclaredType : public DIEType { public: DIEDeclaredType(); + virtual status_t AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value); + // TODO: -// DECL // DW_AT_accessibility // !file, !pointer to member // DW_AT_declaration // !file // DW_AT_abstract_origin // !interface @@ -255,6 +261,7 @@ public: // DW_AT_visibility // !interface protected: + DeclarationLocation fDeclarationLocation; }; @@ -759,8 +766,15 @@ public: virtual uint16 Tag() const; -// TODO: -// DECL + virtual status_t AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value); + +private: + DeclarationLocation fDeclarationLocation; }; @@ -810,9 +824,18 @@ public: virtual uint16 Tag() const; + virtual status_t AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value); + // TODO: -// DECL // DW_AT_description + +private: + DeclarationLocation fDeclarationLocation; }; @@ -852,12 +875,16 @@ public: virtual status_t AddAttribute_count(uint16 attributeName, const AttributeValue& value); - -// TODO: -// DECL + virtual status_t AddAttribute_decl_file(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_line(uint16 attributeName, + const AttributeValue& value); + virtual status_t AddAttribute_decl_column(uint16 attributeName, + const AttributeValue& value); private: uint64 fBlockSize; + DeclarationLocation fDeclarationLocation; };