Commit b8bbe739 by Olivier Hainque Committed by Pierre-Marie de Rodat

[Ada] Prevent caching of non-text symbols for symbolic tracebacks

We now only have the executable code section boundaries at hand,
so can only infer offsets for symbols within those boundaries.

Symbols outside of this region are non-text symbols, pointless for
traceback symbolization anyway.

2018-05-22  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

	* libgnat/s-dwalin.adb (Enable_Cache): Skip symbols outside of the
	executable code section boundaries.

From-SVN: r260510
parent 92ea8dd2
2018-05-22 Olivier Hainque <hainque@adacore.com>
* libgnat/s-dwalin.adb (Enable_Cache): Skip symbols outside of the
executable code section boundaries.
2018-05-22 Javier Miranda <miranda@adacore.com>
* locales.c: New implementation for the Ada.Locales package.
......
......@@ -1202,6 +1202,9 @@ package body System.Dwarf_Lines is
-- Phase 1: count number of symbols. Phase 2: fill the cache.
declare
S : Object_Symbol;
Val : uint64;
Xcode_Low : constant uint64 := uint64 (C.Low);
Xcode_High : constant uint64 := uint64 (C.High);
Sz : uint32;
Addr, Prev_Addr : uint32;
Nbr_Symbols : Natural;
......@@ -1211,13 +1214,21 @@ package body System.Dwarf_Lines is
S := First_Symbol (C.Obj.all);
Prev_Addr := uint32'Last;
while S /= Null_Symbol loop
-- Discard symbols whose length is 0
-- Discard symbols of length 0 or located outside of the
-- execution code section outer boundaries.
Sz := uint32 (Size (S));
Val := Value (S);
if Sz > 0
and then Val >= Xcode_Low
and then Val <= Xcode_High
then
Addr := uint32 (Val - Xcode_Low);
-- Try to filter symbols at the same address. This is a best
-- effort as they might not be consecutive.
Addr := uint32 (Value (S) - uint64 (C.Low));
if Sz > 0 and then Addr /= Prev_Addr then
if Addr /= Prev_Addr then
Nbr_Symbols := Nbr_Symbols + 1;
Prev_Addr := Addr;
......@@ -1229,6 +1240,7 @@ package body System.Dwarf_Lines is
Line => 0);
end if;
end if;
end if;
S := Next_Symbol (C.Obj.all, S);
end loop;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment