File : s-trasym.adb


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --           S Y S T E M . T R A C E B A C K . S Y M B O L I C              --
   6 --                                                                          --
   7 --                                 B o d y                                  --
   8 --                                                                          --
   9 --                     Copyright (C) 1999-2015, AdaCore                     --
  10 --                                                                          --
  11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  12 -- terms of the  GNU General Public License as published  by the Free Soft- --
  13 -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
  14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  16 -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
  17 --                                                                          --
  18 --                                                                          --
  19 --                                                                          --
  20 --                                                                          --
  21 --                                                                          --
  22 -- You should have received a copy of the GNU General Public License and    --
  23 -- a copy of the GCC Runtime Library Exception along with this program;     --
  24 -- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
  25 -- <http://www.gnu.org/licenses/>.                                          --
  26 --                                                                          --
  27 -- GNAT was originally developed  by the GNAT team at  New York University. --
  28 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
  29 --                                                                          --
  30 ------------------------------------------------------------------------------
  31 
  32 --  This is the default implementation for platforms where the full capability
  33 --  is not supported. It returns tracebacks as lists of hexadecimal addresses
  34 --  of the form "0x...".
  35 
  36 pragma Polling (Off);
  37 --  We must turn polling off for this unit, because otherwise we can get
  38 --  elaboration circularities when polling is turned on.
  39 
  40 with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
  41 with System.Address_Image;
  42 
  43 package body System.Traceback.Symbolic is
  44 
  45    ------------------------
  46    -- Symbolic_Traceback --
  47    ------------------------
  48 
  49    function Symbolic_Traceback
  50      (Traceback : System.Traceback_Entries.Tracebacks_Array) return String
  51    is
  52    begin
  53       if Traceback'Length = 0 then
  54          return "";
  55 
  56       else
  57          declare
  58             Img : String := System.Address_Image (Traceback (Traceback'First));
  59 
  60             Result : String (1 .. (Img'Length + 3) * Traceback'Length);
  61             Last   : Natural := 0;
  62 
  63          begin
  64             for J in Traceback'Range loop
  65                Img := System.Address_Image (Traceback (J));
  66                Result (Last + 1 .. Last + 2) := "0x";
  67                Last := Last + 2;
  68                Result (Last + 1 .. Last + Img'Length) := Img;
  69                Last := Last + Img'Length + 1;
  70                Result (Last) := ' ';
  71             end loop;
  72 
  73             Result (Last) := ASCII.LF;
  74             return Result (1 .. Last);
  75          end;
  76       end if;
  77    end Symbolic_Traceback;
  78 
  79    function Symbolic_Traceback
  80      (E : Ada.Exceptions.Exception_Occurrence) return String
  81    is
  82    begin
  83       return Symbolic_Traceback (Ada.Exceptions.Traceback.Tracebacks (E));
  84    end Symbolic_Traceback;
  85 
  86 end System.Traceback.Symbolic;