FpDebug,LazDebugger: changes to MemManager to allow avr-read-register-as-address

This commit is contained in:
Martin 2023-12-10 14:19:47 +01:00
parent 86c274950e
commit c2e59c7885
7 changed files with 33 additions and 17 deletions

View File

@ -600,11 +600,7 @@ begin
FRemoteConfig.Assign(AProcessConfig);
end;
// Create own memory manager to manage register address reads
// Pass through other helper classes as is
FMemManager := TAvrMemManager.Create(AMemManager.MemReader, AMemManager.TargetMemConvertor, AMemManager.SelfMemConvertor);
inherited Create(AFileName, AnOsClasses, FMemManager);
inherited Create(AFileName, AnOsClasses, AMemManager, AProcessConfig);
end;
destructor TDbgAvrProcess.Destroy;
@ -613,8 +609,6 @@ begin
FreeAndNil(FConnection);
if Assigned(FRemoteConfig) then
FreeAndNil(FRemoteConfig);
if Assigned(FMemManager) then
FreeAndNil(FMemManager);
inherited Destroy;
end;

View File

@ -603,6 +603,7 @@ type
TDbgInstance = class(TObject)
private
FMemManager: TFpDbgMemManager;
FMode: TFPDMode;
FFileName: String;
FProcess: TDbgProcess;
@ -617,7 +618,6 @@ type
function FindProcSymbol(AAdress: TDbgPtr): TFpSymbol; overload;
protected
FDbgInfo: TDbgInfo;
FMemManager: TFpDbgMemManager;
procedure InitializeLoaders; virtual;
procedure SetFileName(const AValue: String);
procedure SetMode(AMode: TFPDMode); experimental; // for testcase

View File

@ -896,9 +896,6 @@ property DwarfSymbolClassMapList: TFpSymbolDwarfClassMapList read GetDwarfSymbol
implementation
uses
FpDbgCommon;
var
FPDBG_DWARF_ERRORS, FPDBG_DWARF_WARNINGS, FPDBG_DWARF_SEARCH, FPDBG_DWARF_VERBOSE,
// FPDBG_DWARF_DATA_WARNINGS,

View File

@ -428,6 +428,7 @@ type
*)
function ReadRegister(ARegNum: Cardinal; out AValue: TDbgPtr; AContext: TFpDbgLocationContext {= nil}): Boolean;
function ReadRegisterAsAddress(ARegNum: Cardinal; out AValue: TDbgPtr; AContext: TFpDbgLocationContext {= nil}): Boolean; virtual;
property MemReader: TFpDbgMemReaderBase read FMemReader;
public
procedure SetCacheManager(ACacheMgr: TFpDbgMemCacheManagerBase);
property CacheManager: TFpDbgMemCacheManagerBase read GetCacheManager;
@ -456,7 +457,6 @@ type
property PartialReadResultLenght: QWord read FPartialReadResultLenght;
property LastError: TFpError read FLastError;
property MemLimits: TFpDbgMemLimits read FMemLimits;
property MemReader: TFpDbgMemReaderBase read FMemReader;
end;
function NilLoc: TFpDbgMemLocation; inline;

View File

@ -382,6 +382,9 @@ type
procedure GetCurrentThreadAndStackFrame(out AThreadId, AStackFrame: Integer);
function GetContextForEvaluate(const ThreadId, StackFrame: Integer): TFpDbgSymbolScope;
function CreateMemReader: TDbgMemReader; virtual;
function CreateMemConverter: TFpDbgMemConvertor; virtual;
function CreateMemManager: TFpDbgMemManager; virtual;
function CreateLineInfo: TDBGLineInfo; override;
function CreateWatches: TWatchesSupplier; override;
function CreateThreads: TThreadsSupplier; override;
@ -3583,6 +3586,21 @@ begin
Result := FindSymbolScope(ThreadId, StackFrame);
end;
function TFpDebugDebugger.CreateMemReader: TDbgMemReader;
begin
Result := TFpDbgMemReader.Create(self);
end;
function TFpDebugDebugger.CreateMemConverter: TFpDbgMemConvertor;
begin
Result := TFpDbgMemConvertorLittleEndian.Create;
end;
function TFpDebugDebugger.CreateMemManager: TFpDbgMemManager;
begin
Result := TFpDbgMemManager.Create(FMemReader, FMemConverter);
end;
function TFpDebugDebugger.GetClassInstanceName(AnAddr: TDBGPtr): string;
var
AnErr: TFpError;
@ -4590,9 +4608,9 @@ begin
FBreakUpdateList := TBreakPointUpdateList.create();
FExceptionStepper := TFpDebugExceptionStepping.Create(Self);
FPrettyPrinter := TFpPascalPrettyPrinter.Create(sizeof(pointer));
FMemReader := TFpDbgMemReader.Create(self);
FMemConverter := TFpDbgMemConvertorLittleEndian.Create;
FMemManager := TFpDbgMemManager.Create(FMemReader, FMemConverter);
FMemReader := CreateMemReader;
FMemConverter := CreateMemConverter;
FMemManager := CreateMemManager;
FMemManager.MemLimits.MaxMemReadSize := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxMemReadSize;
FMemManager.MemLimits.MaxArrayLen := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxArrayLen;
FMemManager.MemLimits.MaxStringLen := TFpDebugDebuggerProperties(GetProperties).MemLimits.MaxStringLen;

View File

@ -22,7 +22,7 @@ type
FDbgController: TDbgController;
FMemManager: TFpDbgMemManager;
FMemReader: TDbgMemReader;
FMemConverter: TFpDbgMemConvertorLittleEndian;
FMemConverter: TFpDbgMemConvertor;
FLockList: TFpDbgLockList;
FWorkQueue: TFpThreadPriorityWorkerQueue;
@ -71,7 +71,7 @@ type
property DbgController: TDbgController read FDbgController;
property MemManager: TFpDbgMemManager read FMemManager;
property MemReader: TDbgMemReader read FMemReader;
property MemConverter: TFpDbgMemConvertorLittleEndian read FMemConverter;
property MemConverter: TFpDbgMemConvertor read FMemConverter;
property LockList: TFpDbgLockList read FLockList;
property WorkQueue: TFpThreadPriorityWorkerQueue read FWorkQueue;
end;

View File

@ -66,6 +66,8 @@ type
private
FProcessConfig: TRemoteConfig;
procedure UpdateProcessConfig;
protected
function CreateMemManager: TFpDbgMemManager; override;
public
constructor Create(const AExternalDebugger: String); override;
destructor Destroy; override;
@ -96,6 +98,11 @@ begin
TRemoteConfig(FProcessConFig).SkipSectionsList.Assign(AProperties.SkipUploadOfSectionList);
end;
function TFpRspRemoteDebugger.CreateMemManager: TFpDbgMemManager;
begin
Result := TAvrMemManager.Create(FMemReader, FMemConverter);
end;
constructor TFpRspRemoteDebugger.Create(const AExternalDebugger: String);
begin
inherited Create(AExternalDebugger);