Commit 08f8a716 by Olivier Hainque Committed by Pierre-Marie de Rodat

[Ada] Propagate load addresses for traceback cache on Linux

Symbolization of traceback addresses through shared libraries
requires information on the shared libraries load addresses, which
was at hand on Linuxbut not propagated through the runtime when
caching is enabled.  This change fixes this.

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

gcc/ada/

	* libgnat/s-trasym__dwarf.adb (Add_Module_To_Cache): Expect a
	Load_Address argument and pass it down to Init_Module.
	* libgnat/s-tsmona__linux.adb (Build_Cache_For_All_Modules): Pass
	lm.l_addr as the Load_Address to Add_Module_To_Cache.

From-SVN: r260448
parent 689751d2
2018-04-04 Olivier Hainque <hainque@adacore.com>
* libgnat/s-trasym__dwarf.adb (Add_Module_To_Cache): Expect a
Load_Address argument and pass it down to Init_Module.
* libgnat/s-tsmona__linux.adb (Build_Cache_For_All_Modules): Pass
lm.l_addr as the Load_Address to Add_Module_To_Cache.
2018-04-04 Piotr Trojanek <trojanek@adacore.com> 2018-04-04 Piotr Trojanek <trojanek@adacore.com>
* einfo.adb (Has_Discriminants): Stronger assertion. * einfo.adb (Has_Discriminants): Stronger assertion.
......
...@@ -123,7 +123,8 @@ package body System.Traceback.Symbolic is ...@@ -123,7 +123,8 @@ package body System.Traceback.Symbolic is
-- Return the String contained in Item, up until the first NUL character -- Return the String contained in Item, up until the first NUL character
pragma Warnings (Off, "*Add_Module_To_Cache*"); pragma Warnings (Off, "*Add_Module_To_Cache*");
procedure Add_Module_To_Cache (Module_Name : String); procedure Add_Module_To_Cache (Module_Name : String;
Load_Address : System.Address);
-- To be called by Build_Cache_For_All_Modules to add a new module to the -- To be called by Build_Cache_For_All_Modules to add a new module to the
-- list. May not be referenced. -- list. May not be referenced.
...@@ -217,12 +218,14 @@ package body System.Traceback.Symbolic is ...@@ -217,12 +218,14 @@ package body System.Traceback.Symbolic is
-- Add_Module_To_Cache -- -- Add_Module_To_Cache --
------------------------- -------------------------
procedure Add_Module_To_Cache (Module_Name : String) is procedure Add_Module_To_Cache (Module_Name : String;
Load_Address : System.Address)
is
Module : Module_Cache_Acc; Module : Module_Cache_Acc;
Success : Boolean; Success : Boolean;
begin begin
Module := new Module_Cache; Module := new Module_Cache;
Init_Module (Module.all, Success, Module_Name); Init_Module (Module.all, Success, Module_Name, Load_Address);
if not Success then if not Success then
Free (Module); Free (Module);
return; return;
......
...@@ -122,7 +122,7 @@ package body Module_Name is ...@@ -122,7 +122,7 @@ package body Module_Name is
while lm /= null loop while lm /= null loop
if Big_String_Conv.To_Pointer (lm.l_name) (1) /= ASCII.NUL then if Big_String_Conv.To_Pointer (lm.l_name) (1) /= ASCII.NUL then
-- Discard non-file (like the executable itself or the gate). -- Discard non-file (like the executable itself or the gate).
Add_Module_To_Cache (Value (lm.l_name)); Add_Module_To_Cache (Value (lm.l_name), lm.l_addr);
end if; end if;
lm := lm.l_next; lm := lm.l_next;
end loop; 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