FpDebug: MemModel for Win/Darwin / fixes

This commit is contained in:
Martin 2024-01-14 14:24:20 +01:00
parent c327f03044
commit dbd0141eac
6 changed files with 23 additions and 14 deletions

View File

@ -72,6 +72,7 @@ type
public
constructor Create(const ABaseContext: TFpDbgLocationContext;
AMemReader: TFpDbgMemReaderBase;
AMemModel: TFpDbgMemModel;
AMemConverter: TFpDbgMemConvertor;
ADbgProcess: TDbgProcess;
ADbgThread: TDbgThread);
@ -450,10 +451,10 @@ end;
constructor TFpDbgInfoCallContext.Create(
const ABaseContext: TFpDbgLocationContext; AMemReader: TFpDbgMemReaderBase;
AMemConverter: TFpDbgMemConvertor; ADbgProcess: TDbgProcess;
AMemModel: TFpDbgMemModel; AMemConverter: TFpDbgMemConvertor; ADbgProcess: TDbgProcess;
ADbgThread: TDbgThread);
begin
inherited Create(ABaseContext, AMemReader, AMemConverter);
inherited Create(ABaseContext, AMemReader, AMemModel, AMemConverter);
FDbgProcess := ADbgProcess;
FDbgThread := ADbgThread;
FNextParamRegister := 0;

View File

@ -2133,7 +2133,7 @@ begin
then
exit;
Context := TFpDbgInfoCallContext.Create(ABaseContext, AMemReader, AMemConverter, FCurrentProcess, FCurrentThread);
Context := TFpDbgInfoCallContext.Create(ABaseContext, AMemReader, MemModel, AMemConverter, FCurrentProcess, FCurrentThread);
Context.AddReference;
InitializeCommand(TDbgControllerCallRoutineCmd.Create(self, FunctionAddress, Context));
Result := Context;

View File

@ -155,7 +155,7 @@ type
AWorkingDirectory, AConsoleTty: string; AFlags: TStartInstanceFlags;
out AnError: TFpError): boolean; override;
class function isSupported(ATargetInfo: TTargetDescriptor): boolean; override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AMemModel: TFpDbgMemModel; AProcessConfig: TDbgProcessConfig = nil); override;
destructor Destroy; override;
function ReadData(const AAdress: TDbgPtr; const ASize: Cardinal; out AData): Boolean; override;
@ -637,10 +637,10 @@ begin
end;
constructor TDbgDarwinProcess.Create(const AFileName: string;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager; AMemModel: TFpDbgMemModel;
AProcessConfig: TDbgProcessConfig);
begin
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
inherited Create(AFileName, AnOsClasses, AMemManager, AMemModel, AProcessConfig);
GetDebugAccessRights;
end;

View File

@ -5728,7 +5728,7 @@ end;
function TFpSymbolDwarfTypeSubroutine.GetDataAddress(AValueObj: TFpValueDwarf;
var AnAddress: TFpDbgMemLocation; ATargetType: TFpSymbolDwarfType): Boolean;
begin
inherited;
Result := inherited GetDataAddress(AValueObj, AnAddress, ATargetType);
AnAddress := AValueObj.Context.MemModel.UpdateLocationToCodeAddress(AnAddress);
end;

View File

@ -662,12 +662,14 @@ type
FMessage: string;
protected
function GetMemManager: TFpDbgMemManager; override;
function GetMemModel: TFpDbgMemModel; override;
function GetAddress: TDbgPtr; override;
function GetThreadId: Integer; override;
function GetStackFrame: Integer; override;
function GetSizeOfAddress: Integer; override;
public
constructor Create(const ABaseContext: TFpDbgLocationContext; AMemReader: TFpDbgMemReaderBase; AMemConverter: TFpDbgMemConvertor);
constructor Create(const ABaseContext: TFpDbgLocationContext;
AMemReader: TFpDbgMemReaderBase; AMemModel: TFpDbgMemModel; AMemConverter: TFpDbgMemConvertor);
destructor Destroy; override;
procedure SetRegisterValue(ARegNum: Cardinal; AValue: TDbgPtr);
@ -783,12 +785,12 @@ end;
constructor TFpDbgAbstractCallContext.Create(
const ABaseContext: TFpDbgLocationContext; AMemReader: TFpDbgMemReaderBase;
AMemConverter: TFpDbgMemConvertor);
AMemModel: TFpDbgMemModel; AMemConverter: TFpDbgMemConvertor);
begin
FBaseContext:=ABaseContext;
FBaseContext.AddReference;
FMemModel := TFpDbgMemModel.Create;
FMemModel := AMemModel;
FMemReader := TFpDbgCallMemReader.Create(AMemReader);
FMemManager := TFpDbgMemManager.Create(FMemReader, AMemConverter, FMemModel);
@ -815,6 +817,11 @@ begin
Result := FMemManager;
end;
function TFpDbgAbstractCallContext.GetMemModel: TFpDbgMemModel;
begin
Result := FMemModel;
end;
function TFpDbgAbstractCallContext.GetSizeOfAddress: Integer;
begin
Result := FBaseContext.SizeOfAddress;

View File

@ -198,7 +198,7 @@ type
function CreateWatchPointData: TFpWatchPointData; override;
public
constructor Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig = nil); override;
AMemManager: TFpDbgMemManager; AMemModel: TFpDbgMemModel; AProcessConfig: TDbgProcessConfig = nil); override;
destructor Destroy; override;
function ReadData(const AAdress: TDbgPtr; const ASize: Cardinal; out AData): Boolean; override;
@ -555,15 +555,16 @@ begin
Result := TFpIntelWatchPointData.Create;
end;
constructor TDbgWinProcess.Create(const AFileName: string; AnOsClasses: TOSDbgClasses;
AMemManager: TFpDbgMemManager; AProcessConfig: TDbgProcessConfig);
constructor TDbgWinProcess.Create(const AFileName: string;
AnOsClasses: TOSDbgClasses; AMemManager: TFpDbgMemManager;
AMemModel: TFpDbgMemModel; AProcessConfig: TDbgProcessConfig);
begin
{$ifdef cpui386}
FBitness := b32;
{$else}
FBitness := b64;
{$endif}
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
inherited Create(AFileName, AnOsClasses, AMemManager, AMemModel, AProcessConfig);
end;
destructor TDbgWinProcess.Destroy;