mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 01:08:35 +02:00
+ use a hash table to speed up line info retrieval
git-svn-id: trunk@49080 -
This commit is contained in:
parent
e7e2b7db41
commit
4dfcdeaef8
@ -1284,6 +1284,23 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
const
|
||||
{ 64 bit and 32 bit CPUs tend to have more memory }
|
||||
{$if defined(CPU64)}
|
||||
LineInfoCacheLength = 2039;
|
||||
{$elseif defined(CPU32)}
|
||||
LineInfoCacheLength = 251;
|
||||
{$else}
|
||||
LineInfoCacheLength = 1;
|
||||
{$endif CPU64}
|
||||
|
||||
var
|
||||
LineInfoCache : array[0..LineInfoCacheLength-1] of
|
||||
record
|
||||
addr : codeptruint;
|
||||
func, source : string;
|
||||
line : longint;
|
||||
end;
|
||||
|
||||
function GetLineInfo(addr : codeptruint; var func, source : string; var line : longint) : boolean;
|
||||
var
|
||||
@ -1292,6 +1309,7 @@ var
|
||||
segment : Word = 0;
|
||||
|
||||
found, found_aranges : Boolean;
|
||||
CacheIndex: CodePtrUInt;
|
||||
|
||||
begin
|
||||
func := '';
|
||||
@ -1301,6 +1319,17 @@ begin
|
||||
if not OpenDwarf(codepointer(addr)) then
|
||||
exit;
|
||||
|
||||
CacheIndex:=addr mod LineInfoCacheLength;
|
||||
|
||||
if LineInfoCache[CacheIndex].addr=addr then
|
||||
begin
|
||||
func:=LineInfoCache[CacheIndex].func;
|
||||
source:=LineInfoCache[CacheIndex].source;
|
||||
line:=LineInfoCache[CacheIndex].line;
|
||||
GetLineInfo:=true;
|
||||
exit;
|
||||
end;
|
||||
|
||||
{$ifdef CPUI8086}
|
||||
{$if defined(FPC_MM_MEDIUM) or defined(FPC_MM_LARGE) or defined(FPC_MM_HUGE)}
|
||||
segment := (addr shr 16) - e.processsegment;
|
||||
@ -1363,6 +1392,11 @@ begin
|
||||
if not AllowReuseOfLineInfoData then
|
||||
CloseDwarf;
|
||||
|
||||
LineInfoCache[CacheIndex].addr:=addr;
|
||||
LineInfoCache[CacheIndex].func:=func;
|
||||
LineInfoCache[CacheIndex].source:=source;
|
||||
LineInfoCache[CacheIndex].line:=line;
|
||||
|
||||
GetLineInfo:=true;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user