diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2021-07-06 16:47:31 +0200 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2021-09-21 15:24:59 +0000 |
commit | 97a5ed2071fffe85ee1a07e0655740162e4cce64 (patch) | |
tree | b2a939596ff0c398f454b2acdfed436fbd1ee232 /gcc/ada/libgnat | |
parent | 97c5d522c6ee36b7ed1824d1eb6b8f30172c1818 (diff) | |
download | gcc-97a5ed2071fffe85ee1a07e0655740162e4cce64.zip gcc-97a5ed2071fffe85ee1a07e0655740162e4cce64.tar.gz gcc-97a5ed2071fffe85ee1a07e0655740162e4cce64.tar.bz2 |
[Ada] Small optimization to DWARF 5 mode in System.Dwarf_Line
gcc/ada/
* libgnat/s-dwalin.adb (To_File_Name): Fetch only the last string
from the .debug_line_str section.
(Symbolic_Address.Set_Result): Likewise.
Diffstat (limited to 'gcc/ada/libgnat')
-rw-r--r-- | gcc/ada/libgnat/s-dwalin.adb | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gcc/ada/libgnat/s-dwalin.adb b/gcc/ada/libgnat/s-dwalin.adb index 74700e6..4bcd741 100644 --- a/gcc/ada/libgnat/s-dwalin.adb +++ b/gcc/ada/libgnat/s-dwalin.adb @@ -957,8 +957,10 @@ package body System.Dwarf_Lines is when DW_FORM_line_strp => Read_Section_Offset (C.Lines, Off, C.Header.Is64); - Seek (C.Line_Str, Off); - Read_C_String (C.Line_Str, Buf); + if J = File then + Seek (C.Line_Str, Off); + Read_C_String (C.Line_Str, Buf); + end if; when others => raise Dwarf_Error with "DWARF form not implemented"; @@ -1674,8 +1676,10 @@ package body System.Dwarf_Lines is when DW_FORM_line_strp => Read_Section_Offset (C.Lines, Off, C.Header.Is64); - Seek (C.Line_Str, Off); - File_Name := Read_C_String (C.Line_Str); + if J = Match.File then + Seek (C.Line_Str, Off); + File_Name := Read_C_String (C.Line_Str); + end if; when others => raise Dwarf_Error with "DWARF form not implemented"; @@ -1718,8 +1722,10 @@ package body System.Dwarf_Lines is when DW_FORM_line_strp => Read_Section_Offset (C.Lines, Off, C.Header.Is64); - Seek (C.Line_Str, Off); - Dir_Name := Read_C_String (C.Line_Str); + if J = Dir_Idx then + Seek (C.Line_Str, Off); + Dir_Name := Read_C_String (C.Line_Str); + end if; when others => raise Dwarf_Error with "DWARF form not implemented"; |