From: Olivier Hainque Date: Mon, 21 May 2018 14:50:28 +0000 (+0000) Subject: [Ada] Propagate load addresses for traceback cache on Linux X-Git-Tag: basepoints/gcc-10~6704 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08f8a7162498b232831808a37b7fe6b9d95c8536;p=thirdparty%2Fgcc.git [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 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 79f5759a4f68..6eadcf957fad 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2018-04-04 Olivier Hainque + + * 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 * einfo.adb (Has_Discriminants): Stronger assertion. diff --git a/gcc/ada/libgnat/s-trasym__dwarf.adb b/gcc/ada/libgnat/s-trasym__dwarf.adb index db7c5eb4cdd8..5330e4a270f3 100644 --- a/gcc/ada/libgnat/s-trasym__dwarf.adb +++ b/gcc/ada/libgnat/s-trasym__dwarf.adb @@ -123,7 +123,8 @@ package body System.Traceback.Symbolic is -- Return the String contained in Item, up until the first NUL character 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 -- list. May not be referenced. @@ -217,12 +218,14 @@ package body System.Traceback.Symbolic is -- 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; Success : Boolean; begin Module := new Module_Cache; - Init_Module (Module.all, Success, Module_Name); + Init_Module (Module.all, Success, Module_Name, Load_Address); if not Success then Free (Module); return; diff --git a/gcc/ada/libgnat/s-tsmona__linux.adb b/gcc/ada/libgnat/s-tsmona__linux.adb index cbebd0652048..ae91c40278cb 100644 --- a/gcc/ada/libgnat/s-tsmona__linux.adb +++ b/gcc/ada/libgnat/s-tsmona__linux.adb @@ -122,7 +122,7 @@ package body Module_Name is while lm /= null loop if Big_String_Conv.To_Pointer (lm.l_name) (1) /= ASCII.NUL then -- 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; lm := lm.l_next; end loop;