diff options
author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-03-30 20:10:09 +0000 |
---|---|---|
committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2021-03-30 20:10:09 +0000 |
commit | 43175cc9bcd71d2a1352d01a2db695dd69ba9bbb (patch) | |
tree | 7b85d664e091d9bc97b83b1f968c37be4a4c37c0 | |
parent | 6432b512726f0b3167ec916c5cf67cf3dfbd922a (diff) | |
download | fpc-43175cc9bcd71d2a1352d01a2db695dd69ba9bbb.tar.gz |
--- Merging r49080 into '.':
U rtl/inc/lnfodwrf.pp
--- Recording mergeinfo for merge of r49080 into '.':
U .
--- Merging r49086 into '.':
G rtl/inc/lnfodwrf.pp
--- Recording mergeinfo for merge of r49086 into '.':
G .
# revisions: 49080,49086
r49080 | florian | 2021-03-29 14:20:39 +0200 (Mon, 29 Mar 2021) | 1 line
Changed paths:
M /trunk/rtl/inc/lnfodwrf.pp
+ use a hash table to speed up line info retrieval
r49086 | florian | 2021-03-30 16:06:19 +0200 (Tue, 30 Mar 2021) | 1 line
Changed paths:
M /trunk/rtl/inc/lnfodwrf.pp
* check for cache entry before even trying to open the file containing the debug info
git-svn-id: https://svn.freepascal.org/svn/fpc/branches/fixes_3_2@49088 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r-- | rtl/inc/lnfodwrf.pp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/rtl/inc/lnfodwrf.pp b/rtl/inc/lnfodwrf.pp index d182c1f918..2a0de65da6 100644 --- a/rtl/inc/lnfodwrf.pp +++ b/rtl/inc/lnfodwrf.pp @@ -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,12 +1309,24 @@ var segment : Word = 0; found, found_aranges : Boolean; + CacheIndex: CodePtrUInt; begin func := ''; source := ''; GetLineInfo:=false; + 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; + if not OpenDwarf(codepointer(addr)) then exit; @@ -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; |