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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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