Debugger: Extend FunctionDebugInfo interface.
- Add hook to FunctionDebugInfo to determine if the represented function
is the main function of the program. Adjust
{Basic,Dwarf}FunctionDebugInfo accordingly.
- {Team,Image}DebugInfo: When loading, see if the current image contains
the main function. If so, cache it for later retrieval.
This commit is contained in:
@@ -63,6 +63,13 @@ BasicFunctionDebugInfo::PrettyName() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
BasicFunctionDebugInfo::IsMain() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LocatableFile*
|
LocatableFile*
|
||||||
BasicFunctionDebugInfo::SourceFile() const
|
BasicFunctionDebugInfo::SourceFile() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ public:
|
|||||||
virtual const BString& Name() const;
|
virtual const BString& Name() const;
|
||||||
virtual const BString& PrettyName() const;
|
virtual const BString& PrettyName() const;
|
||||||
|
|
||||||
|
virtual bool IsMain() const;
|
||||||
|
|
||||||
virtual LocatableFile* SourceFile() const;
|
virtual LocatableFile* SourceFile() const;
|
||||||
virtual SourceLocation SourceStartLocation() const;
|
virtual SourceLocation SourceStartLocation() const;
|
||||||
virtual SourceLocation SourceEndLocation() const;
|
virtual SourceLocation SourceEndLocation() const;
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ DwarfFunctionDebugInfo::PrettyName() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
DwarfFunctionDebugInfo::IsMain() const
|
||||||
|
{
|
||||||
|
return fSubprogramEntry->IsMain();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LocatableFile*
|
LocatableFile*
|
||||||
DwarfFunctionDebugInfo::SourceFile() const
|
DwarfFunctionDebugInfo::SourceFile() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ public:
|
|||||||
virtual const BString& Name() const;
|
virtual const BString& Name() const;
|
||||||
virtual const BString& PrettyName() const;
|
virtual const BString& PrettyName() const;
|
||||||
|
|
||||||
|
virtual bool IsMain() const;
|
||||||
|
|
||||||
virtual LocatableFile* SourceFile() const;
|
virtual LocatableFile* SourceFile() const;
|
||||||
virtual SourceLocation SourceStartLocation() const;
|
virtual SourceLocation SourceStartLocation() const;
|
||||||
virtual SourceLocation SourceEndLocation() const;
|
virtual SourceLocation SourceEndLocation() const;
|
||||||
|
|||||||
@@ -27,6 +27,8 @@ public:
|
|||||||
virtual const BString& Name() const = 0;
|
virtual const BString& Name() const = 0;
|
||||||
virtual const BString& PrettyName() const = 0;
|
virtual const BString& PrettyName() const = 0;
|
||||||
|
|
||||||
|
virtual bool IsMain() const = 0;
|
||||||
|
|
||||||
virtual LocatableFile* SourceFile() const = 0;
|
virtual LocatableFile* SourceFile() const = 0;
|
||||||
virtual SourceLocation SourceStartLocation() const = 0;
|
virtual SourceLocation SourceStartLocation() const = 0;
|
||||||
virtual SourceLocation SourceEndLocation() const = 0;
|
virtual SourceLocation SourceEndLocation() const = 0;
|
||||||
|
|||||||
@@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
ImageDebugInfo::ImageDebugInfo(const ImageInfo& imageInfo)
|
ImageDebugInfo::ImageDebugInfo(const ImageInfo& imageInfo)
|
||||||
:
|
:
|
||||||
fImageInfo(imageInfo)
|
fImageInfo(imageInfo),
|
||||||
|
fMainFunction(NULL)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +69,9 @@ ImageDebugInfo::FinishInit(DebuggerInterface* interface)
|
|||||||
error = B_NO_MEMORY;
|
error = B_NO_MEMORY;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (function->IsMain())
|
||||||
|
fMainFunction = instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove references returned by the specific debug info -- the
|
// Remove references returned by the specific debug info -- the
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ public:
|
|||||||
FunctionInstance* FunctionAtAddress(target_addr_t address) const;
|
FunctionInstance* FunctionAtAddress(target_addr_t address) const;
|
||||||
FunctionInstance* FunctionByName(const char* name) const;
|
FunctionInstance* FunctionByName(const char* name) const;
|
||||||
|
|
||||||
|
FunctionInstance* MainFunction() const
|
||||||
|
{ return fMainFunction; }
|
||||||
|
|
||||||
status_t AddSourceCodeInfo(LocatableFile* file,
|
status_t AddSourceCodeInfo(LocatableFile* file,
|
||||||
FileSourceCode* sourceCode) const;
|
FileSourceCode* sourceCode) const;
|
||||||
|
|
||||||
@@ -73,6 +76,7 @@ private:
|
|||||||
ImageInfo fImageInfo;
|
ImageInfo fImageInfo;
|
||||||
SpecificInfoList fSpecificInfos;
|
SpecificInfoList fSpecificInfos;
|
||||||
FunctionList fFunctions;
|
FunctionList fFunctions;
|
||||||
|
FunctionInstance* fMainFunction;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -267,7 +267,8 @@ TeamDebugInfo::TeamDebugInfo(DebuggerInterface* debuggerInterface,
|
|||||||
fSpecificInfos(10, true),
|
fSpecificInfos(10, true),
|
||||||
fFunctions(NULL),
|
fFunctions(NULL),
|
||||||
fSourceFiles(NULL),
|
fSourceFiles(NULL),
|
||||||
fTypeCache(NULL)
|
fTypeCache(NULL),
|
||||||
|
fMainFunction(NULL)
|
||||||
{
|
{
|
||||||
fDebuggerInterface->AcquireReference();
|
fDebuggerInterface->AcquireReference();
|
||||||
}
|
}
|
||||||
@@ -452,6 +453,12 @@ TeamDebugInfo::LoadImageDebugInfo(const ImageInfo& imageInfo,
|
|||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
if (fMainFunction == NULL) {
|
||||||
|
FunctionInstance* instance = imageDebugInfo->MainFunction();
|
||||||
|
if (instance != NULL)
|
||||||
|
fMainFunction = instance;
|
||||||
|
}
|
||||||
|
|
||||||
_imageDebugInfo = imageDebugInfoReference.Detach();
|
_imageDebugInfo = imageDebugInfoReference.Detach();
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ public:
|
|||||||
FunctionInstance* functionInstance,
|
FunctionInstance* functionInstance,
|
||||||
DisassembledCode*& _sourceCode);
|
DisassembledCode*& _sourceCode);
|
||||||
// returns reference
|
// returns reference
|
||||||
|
FunctionInstance* MainFunction() const
|
||||||
|
{ return fMainFunction; }
|
||||||
|
|
||||||
// team is locked
|
// team is locked
|
||||||
status_t AddImageDebugInfo(
|
status_t AddImageDebugInfo(
|
||||||
@@ -99,6 +101,7 @@ private:
|
|||||||
FunctionTable* fFunctions;
|
FunctionTable* fFunctions;
|
||||||
SourceFileTable* fSourceFiles;
|
SourceFileTable* fSourceFiles;
|
||||||
GlobalTypeCache* fTypeCache;
|
GlobalTypeCache* fTypeCache;
|
||||||
|
FunctionInstance* fMainFunction;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user