]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Propagate load addresses for traceback cache on Linux
authorOlivier Hainque <hainque@adacore.com>
Mon, 21 May 2018 14:50:28 +0000 (14:50 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 21 May 2018 14:50:28 +0000 (14:50 +0000)
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

gcc/ada/ChangeLog
gcc/ada/libgnat/s-trasym__dwarf.adb
gcc/ada/libgnat/s-tsmona__linux.adb

index 79f5759a4f682e0475aa17563ca99cc9a3685fac..6eadcf957fadc6efec6b7f7f5c854896231c0b90 100644 (file)
@@ -1,3 +1,10 @@
+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>
 
        * einfo.adb (Has_Discriminants): Stronger assertion.
index db7c5eb4cdd8825ab711d5a27e8b472d28df5591..5330e4a270f365ddfead2b11db0c9662d294de62 100644 (file)
@@ -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;
index cbebd065204801c36b37e3cc7c115b2511e3b296..ae91c40278cb713c77e70b8bbbfdcf7ae75d1af2 100644 (file)
@@ -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;