mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-22 16:59:11 +02:00
FpDebug: Forgot to include file in r48864 #c53e775af5
git-svn-id: trunk@48865 -
This commit is contained in:
parent
c53e775af5
commit
640226c89b
@ -1,6 +1,7 @@
|
|||||||
unit FpImgReaderBase;
|
unit FpImgReaderBase;
|
||||||
|
|
||||||
{$mode objfpc}{$H+}
|
{$mode objfpc}{$H+}
|
||||||
|
{$modeswitch advancedrecords}
|
||||||
|
|
||||||
interface
|
interface
|
||||||
|
|
||||||
@ -8,6 +9,7 @@ uses
|
|||||||
{$ifdef windows}
|
{$ifdef windows}
|
||||||
Windows, // After LCLType
|
Windows, // After LCLType
|
||||||
{$endif}
|
{$endif}
|
||||||
|
fgl, lazfglhash,
|
||||||
fpDbgSymTable,
|
fpDbgSymTable,
|
||||||
Classes, SysUtils, LazUTF8Classes;
|
Classes, SysUtils, LazUTF8Classes;
|
||||||
|
|
||||||
@ -26,6 +28,16 @@ type
|
|||||||
end;
|
end;
|
||||||
PDbgImageSectionEx = ^TDbgImageSectionEx;
|
PDbgImageSectionEx = ^TDbgImageSectionEx;
|
||||||
|
|
||||||
|
type
|
||||||
|
TDbgAddressMap = record
|
||||||
|
OrgAddr: QWord;
|
||||||
|
Length: QWord;
|
||||||
|
NewAddr: QWord;
|
||||||
|
class operator =(r1,r2: TDbgAddressMap) : boolean;
|
||||||
|
end;
|
||||||
|
TDbgAddressMapList = specialize TFPGList<TDbgAddressMap>;
|
||||||
|
TDbgAddressMapHashList = specialize TLazFPGHashTable<TDbgAddressMap>;
|
||||||
|
|
||||||
{ TDbgFileLoader }
|
{ TDbgFileLoader }
|
||||||
{$ifdef windows}
|
{$ifdef windows}
|
||||||
{$define USE_WIN_FILE_MAPPING}
|
{$define USE_WIN_FILE_MAPPING}
|
||||||
@ -60,6 +72,8 @@ type
|
|||||||
FImageBase: QWord;
|
FImageBase: QWord;
|
||||||
FUUID: TGuid;
|
FUUID: TGuid;
|
||||||
protected
|
protected
|
||||||
|
function GetSubFiles: TStrings; virtual;
|
||||||
|
function GetAddressMapList: TDbgAddressMapList; virtual;
|
||||||
function GetSection(const AName: String): PDbgImageSection; virtual; abstract;
|
function GetSection(const AName: String): PDbgImageSection; virtual; abstract;
|
||||||
procedure SetUUID(AGuid: TGuid);
|
procedure SetUUID(AGuid: TGuid);
|
||||||
procedure SetImageBase(ABase: QWord);
|
procedure SetImageBase(ABase: QWord);
|
||||||
@ -68,17 +82,18 @@ type
|
|||||||
class function isValid(ASource: TDbgFileLoader): Boolean; virtual; abstract;
|
class function isValid(ASource: TDbgFileLoader): Boolean; virtual; abstract;
|
||||||
class function UserName: AnsiString; virtual; abstract;
|
class function UserName: AnsiString; virtual; abstract;
|
||||||
procedure ParseSymbolTable(AFpSymbolInfo: TfpSymbolList); virtual;
|
procedure ParseSymbolTable(AFpSymbolInfo: TfpSymbolList); virtual;
|
||||||
constructor Create({%H-}ASource: TDbgFileLoader; {%H-}OwnSource: Boolean); virtual;
|
constructor Create({%H-}ASource: TDbgFileLoader; {%H-}ADebugMap: TObject; OwnSource: Boolean); virtual;
|
||||||
|
|
||||||
property ImageBase: QWord read FImageBase;
|
property ImageBase: QWord read FImageBase;
|
||||||
Property Image64Bit: Boolean read FImage64Bit;
|
Property Image64Bit: Boolean read FImage64Bit;
|
||||||
property UUID: TGuid read FUUID;
|
property UUID: TGuid read FUUID;
|
||||||
property Section[const AName: String]: PDbgImageSection read GetSection;
|
property Section[const AName: String]: PDbgImageSection read GetSection;
|
||||||
|
property SubFiles: TStrings read GetSubFiles;
|
||||||
|
property AddressMapList: TDbgAddressMapList read GetAddressMapList;
|
||||||
end;
|
end;
|
||||||
TDbgImageReaderClass = class of TDbgImageReader;
|
TDbgImageReaderClass = class of TDbgImageReader;
|
||||||
|
|
||||||
|
function GetImageReader(ASource: TDbgFileLoader; ADebugMap: TObject; OwnSource: Boolean): TDbgImageReader; overload;
|
||||||
function GetImageReader(ASource: TDbgFileLoader; OwnSource: Boolean): TDbgImageReader; overload;
|
|
||||||
procedure RegisterImageReaderClass(DataSource: TDbgImageReaderClass);
|
procedure RegisterImageReaderClass(DataSource: TDbgImageReaderClass);
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -86,7 +101,12 @@ implementation
|
|||||||
var
|
var
|
||||||
RegisteredImageReaderClasses : TFPList;
|
RegisteredImageReaderClasses : TFPList;
|
||||||
|
|
||||||
function GetImageReader(ASource: TDbgFileLoader; OwnSource: Boolean): TDbgImageReader;
|
class operator TDbgAddressMap.=(r1,r2: TDbgAddressMap) : boolean;
|
||||||
|
begin
|
||||||
|
result := (r1.OrgAddr=r2.OrgAddr) and (r1.Length=r2.Length) and (r1.NewAddr=r2.NewAddr);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetImageReader(ASource: TDbgFileLoader; ADebugMap: TObject; OwnSource: Boolean): TDbgImageReader;
|
||||||
var
|
var
|
||||||
i : Integer;
|
i : Integer;
|
||||||
cls : TDbgImageReaderClass;
|
cls : TDbgImageReaderClass;
|
||||||
@ -98,7 +118,7 @@ begin
|
|||||||
cls := TDbgImageReaderClass(RegisteredImageReaderClasses[i]);
|
cls := TDbgImageReaderClass(RegisteredImageReaderClasses[i]);
|
||||||
try
|
try
|
||||||
if cls.isValid(ASource) then begin
|
if cls.isValid(ASource) then begin
|
||||||
Result := cls.Create(ASource, OwnSource);
|
Result := cls.Create(ASource, ADebugMap, OwnSource);
|
||||||
Exit;
|
Exit;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -219,6 +239,16 @@ end;
|
|||||||
|
|
||||||
{ TDbgImageReader }
|
{ TDbgImageReader }
|
||||||
|
|
||||||
|
function TDbgImageReader.GetAddressMapList: TDbgAddressMapList;
|
||||||
|
begin
|
||||||
|
result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TDbgImageReader.GetSubFiles: TStrings;
|
||||||
|
begin
|
||||||
|
result := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TDbgImageReader.SetUUID(AGuid: TGuid);
|
procedure TDbgImageReader.SetUUID(AGuid: TGuid);
|
||||||
begin
|
begin
|
||||||
FUUID := AGuid;
|
FUUID := AGuid;
|
||||||
@ -240,7 +270,7 @@ begin
|
|||||||
// platform. That's why parsing the data is done in TDbgImageReader.
|
// platform. That's why parsing the data is done in TDbgImageReader.
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TDbgImageReader.Create(ASource: TDbgFileLoader; OwnSource: Boolean);
|
constructor TDbgImageReader.Create(ASource: TDbgFileLoader; ADebugMap: TObject; OwnSource: Boolean);
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user