diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-07-30 16:12:37 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-07-30 16:12:37 +0200 |
commit | 995683a614a3a5f3ac8466a6a13776a27d0f0666 (patch) | |
tree | 8439071ec216e8e7e5e38d76037ef763d0436196 /gcc/ada/s-trasym.adb | |
parent | 793c5f05923d8faf0005ae1c100777f46554537a (diff) | |
download | gcc-995683a614a3a5f3ac8466a6a13776a27d0f0666.zip gcc-995683a614a3a5f3ac8466a6a13776a27d0f0666.tar.gz gcc-995683a614a3a5f3ac8466a6a13776a27d0f0666.tar.bz2 |
[multiple changes]
2014-07-30 Bob Duff <duff@adacore.com>
* g-exctra.adb, g-exctra.ads, s-exctra.adb, s-exctra.ads, Makefile.rtl,
g-trasym.adb, g-trasym.ads, s-trasym.adb, s-trasym.ads: Move
GNAT.Traceback.Symbolic and GNAT.Exception_Traces into the System
hierarchy (System.Traceback.Symbolic and System.Exception_Traces), so
we can call them from the runtimes. Leave renamings in place under GNAT.
2014-07-30 Yannick Moy <moy@adacore.com>
* inline.adb (Check_And_Build_Body_To_Inline): Include code for
inlining in GNATprove mode.
2014-07-30 Ed Schonberg <schonberg@adacore.com>
* a-cohase.adb, a-cohase.ads (Generic_Keys): Add a
Reference_Control_Type to generic package, to keep additional
information for Reference_Types that manipulate keys. Add Adjust and
Finalize procedures for this type.
(Delete_Node): New procedure called when finalizing a
Reference_Control_Type, to remove a node whose element has been
improperly updated through a Reference.
(Insert): Detect tampering.
(Reference_Preserving_Key): Build proper Reference_Control_Type,
and update Busy and Lock bits to detect tampering.
2014-07-30 Bob Duff <duff@adacore.com>
* exp_intr.ads: Minor comment fix.
From-SVN: r213276
Diffstat (limited to 'gcc/ada/s-trasym.adb')
-rw-r--r-- | gcc/ada/s-trasym.adb | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/gcc/ada/s-trasym.adb b/gcc/ada/s-trasym.adb new file mode 100644 index 0000000..ad55887 --- /dev/null +++ b/gcc/ada/s-trasym.adb @@ -0,0 +1,81 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- S Y S T E M . T R A C E B A C K . S Y M B O L I C -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 1999-2014, AdaCore -- +-- -- +-- GNAT is free software; you can redistribute it and/or modify it under -- +-- terms of the GNU General Public License as published by the Free Soft- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- <http://www.gnu.org/licenses/>. -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is the default implementation for platforms where the full capability +-- is not supported. It returns tracebacks as lists of LF separated strings of +-- the form "0x..." corresponding to the addresses. + +with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback; +with System.Address_Image; + +package body System.Traceback.Symbolic is + + ------------------------ + -- Symbolic_Traceback -- + ------------------------ + + function Symbolic_Traceback + (Traceback : System.Traceback_Entries.Tracebacks_Array) return String + is + begin + if Traceback'Length = 0 then + return ""; + + else + declare + Img : String := System.Address_Image (Traceback (Traceback'First)); + + Result : String (1 .. (Img'Length + 3) * Traceback'Length); + Last : Natural := 0; + + begin + for J in Traceback'Range loop + Img := System.Address_Image (Traceback (J)); + Result (Last + 1 .. Last + 2) := "0x"; + Last := Last + 2; + Result (Last + 1 .. Last + Img'Length) := Img; + Last := Last + Img'Length + 1; + Result (Last) := ASCII.LF; + end loop; + + return Result (1 .. Last); + end; + end if; + end Symbolic_Traceback; + + function Symbolic_Traceback + (E : Ada.Exceptions.Exception_Occurrence) return String + is + begin + return Symbolic_Traceback (Ada.Exceptions.Traceback.Tracebacks (E)); + end Symbolic_Traceback; + +end System.Traceback.Symbolic; |