1------------------------------------------------------------------------------ 2-- -- 3-- GNAT RUN-TIME COMPONENTS -- 4-- -- 5-- G N A T . D E B U G _ U T I L I T I E S -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1995-2010, 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-- As a special exception under Section 7 of GPL version 3, you are granted -- 19-- additional permissions described in the GCC Runtime Library Exception, -- 20-- version 3.1, as published by the Free Software Foundation. -- 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-- Debugging utilities 33 34-- This package provides some useful utility subprograms for use in writing 35-- routines that generate debugging output. 36 37with System; 38 39package GNAT.Debug_Utilities is 40 pragma Pure; 41 42 Address_64 : constant Boolean := Standard'Address_Size = 64; 43 -- Set true if 64 bit addresses (assumes only 32 and 64 are possible) 44 45 Address_Image_Length : constant := 13 + 10 * Boolean'Pos (Address_64); 46 -- Length of string returned by Image function for an address 47 48 subtype Image_String is String (1 .. Address_Image_Length); 49 -- Subtype returned by Image function for an address 50 51 Address_Image_C_Length : constant := 10 + 8 * Boolean'Pos (Address_64); 52 -- Length of string returned by Image_C function 53 54 subtype Image_C_String is String (1 .. Address_Image_C_Length); 55 -- Subtype returned by Image_C function 56 57 function Image (S : String) return String; 58 -- Returns a string image of S, obtained by prepending and appending 59 -- quote (") characters and doubling any quote characters in the string. 60 -- The maximum length of the result is thus 2 ** S'Length + 2. 61 62 function Image (A : System.Address) return Image_String; 63 -- Returns a string of the form 16#hhhh_hhhh# for 32-bit addresses 64 -- or 16#hhhh_hhhh_hhhh_hhhh# for 64-bit addresses. Hex characters 65 -- are in upper case. 66 67 function Image_C (A : System.Address) return Image_C_String; 68 -- Returns a string of the form 0xhhhhhhhh for 32 bit addresses or 69 -- 0xhhhhhhhhhhhhhhhh for 64-bit addresses. Hex characters are in 70 -- upper case. 71 72 function Value (S : String) return System.Address; 73 -- Given a valid integer literal in any form, including the form returned 74 -- by the Image function in this package, yields the corresponding address. 75 -- Note that this routine will handle any Ada integer format, and will 76 -- also handle hex constants in C format (0xhh..hhh). Constraint_Error 77 -- may be raised for obviously incorrect data, but the routine is fairly 78 -- permissive, and in particular, all underscores in whatever position 79 -- are simply ignored completely. 80 81end GNAT.Debug_Utilities; 82