1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
-- Bug handling
-- Copyright (C) 2002, 2003, 2004, 2005 Tristan Gingold
--
-- GHDL is free software; you can redistribute it and/or modify it under
-- the terms of the GNU General Public License as published by the Free
-- Software Foundation; either version 2, or (at your option) any later
-- version.
--
-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or
-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-- for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with GHDL; see the file COPYING. If not, write to the Free
-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-- 02111-1307, USA.
with Ada.Command_Line; use Ada.Command_Line;
with GNAT.Directory_Operations;
with Simple_IO; use Simple_IO;
with Version; use Version;
package body Bug is
-- Declared in the files generated by gnatbind.
-- Note: since the string is exported with C convension, there is no way
-- to know the length (gnat1 crashes if the string is unconstrained).
-- Hopefully, the format of the string seems to be fixed.
-- We don't use GNAT.Compiler_Version because it doesn't exist
-- in gnat 3.15p
GNAT_Version : constant String (1 .. 31 + 15);
pragma Import (C, GNAT_Version, "__gnat_version");
function Get_Gnat_Version return String
is
C : Character;
begin
for I in GNAT_Version'Range loop
C := GNAT_Version (I);
case C is
when ' '
| 'A' .. 'Z'
| 'a' .. 'z'
| '0' .. '9'
| ':'
| '-'
| '.'
| '(' =>
-- Accept only a few printable characters.
-- Underscore is excluded since the next bytes after
-- GNAT_Version is Ada_Main_Program_Name, which often starts
-- with _ada_.
null;
when ')' =>
return GNAT_Version (1 .. I);
when others =>
return GNAT_Version (1 .. I - 1);
end case;
end loop;
return GNAT_Version;
end Get_Gnat_Version;
procedure Disp_Bug_Box (Except : Exception_Occurrence)
is
Id : Exception_Id;
begin
New_Line_Err;
Put_Line_Err
("******************** GHDL Bug occurred ***************************");
Put_Line_Err
("Please report this bug on https://github.com/ghdl/ghdl/issues");
Put_Line_Err ("GHDL release: " & Ghdl_Ver & ' ' & Ghdl_Release);
Put_Line_Err ("Compiled with " & Get_Gnat_Version);
Put_Line_Err ("Target: " & Standard'Target_Name);
Put_Line_Err (GNAT.Directory_Operations.Get_Current_Dir);
--Put_Line
-- ("Program name: " & Command_Name);
--Put_Line
-- ("Program arguments:");
--for I in 1 .. Argument_Count loop
-- Put_Line (" " & Argument (I));
--end loop;
Put_Line_Err ("Command line:");
Put_Err (Command_Name);
for I in 1 .. Argument_Count loop
Put_Err (' ');
Put_Err (Argument (I));
end loop;
New_Line_Err;
Id := Exception_Identity (Except);
if Id /= Null_Id then
Put_Line_Err ("Exception " & Exception_Name (Id) & " raised");
--Put_Line ("exception message: " & Exception_Message (Except));
Put_Line_Err ("Exception information:");
Put_Err (Exception_Information (Except));
end if;
Put_Line_Err
("******************************************************************");
end Disp_Bug_Box;
end Bug;
|