]>
Commit | Line | Data |
---|---|---|
cacbc350 RK |
1 | ------------------------------------------------------------------------------ |
2 | -- -- | |
3 | -- GNAT COMPILER COMPONENTS -- | |
4 | -- -- | |
5 | -- S Y S T E M . T R A C E B A C K -- | |
6 | -- -- | |
7 | -- S p e c -- | |
8 | -- -- | |
fbf5a39b | 9 | -- Copyright (C) 1999-2003 Free Software Foundation, Inc. -- |
cacbc350 RK |
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 2, 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. See the GNU General Public License -- | |
17 | -- for more details. You should have received a copy of the GNU General -- | |
18 | -- Public License distributed with GNAT; see file COPYING. If not, write -- | |
19 | -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, -- | |
20 | -- MA 02111-1307, USA. -- | |
21 | -- -- | |
22 | -- As a special exception, if other files instantiate generics from this -- | |
23 | -- unit, or you link this unit with other files to produce an executable, -- | |
24 | -- this unit does not by itself cause the resulting executable to be -- | |
25 | -- covered by the GNU General Public License. This exception does not -- | |
26 | -- however invalidate any other reasons why the executable file might be -- | |
27 | -- covered by the GNU Public License. -- | |
28 | -- -- | |
29 | -- GNAT was originally developed by the GNAT team at New York University. -- | |
1f02b6af | 30 | -- Extensive contributions were provided by Ada Core Technologies Inc. -- |
cacbc350 RK |
31 | -- -- |
32 | ------------------------------------------------------------------------------ | |
33 | ||
34 | -- This package provides a method for generating a traceback of the | |
35 | -- current execution location. The traceback shows the locations of | |
36 | -- calls in the call chain, up to either the top or a designated | |
37 | -- number of levels. | |
38 | ||
39 | pragma Polling (Off); | |
40 | -- We must turn polling off for this unit, because otherwise we get | |
41 | -- elaboration circularities with System.Exception_Tables. | |
42 | ||
43 | package System.Traceback is | |
44 | ||
45 | ---------------- | |
46 | -- Call_Chain -- | |
47 | ---------------- | |
48 | ||
49 | procedure Call_Chain | |
50 | (Traceback : System.Address; | |
51 | Max_Len : Natural; | |
52 | Len : out Natural; | |
53 | Exclude_Min : System.Address := System.Null_Address; | |
fbf5a39b AC |
54 | Exclude_Max : System.Address := System.Null_Address; |
55 | Skip_Frames : Natural := 1); | |
cacbc350 RK |
56 | -- Store up to Max_Len code locations in Traceback, corresponding to |
57 | -- the current call chain. | |
58 | -- | |
59 | -- Traceback is the address of an array of addresses where the | |
60 | -- result will be stored. | |
61 | -- | |
62 | -- Max_Len is the length of the Traceback array. If the call chain | |
63 | -- is longer than this, then additional entries are discarded, and | |
64 | -- the traceback is missing some of the highest level entries. | |
65 | -- | |
66 | -- Len is the returned actual number of addresses stored | |
67 | -- in the Traceback array. | |
68 | -- | |
69 | -- Exclude_Min/Exclude_Max, if non null, provide a range of addresses | |
70 | -- to ignore from the computation of the traceback. | |
71 | -- | |
fbf5a39b AC |
72 | -- Skip_Frames says how many of the most recent calls should at least |
73 | -- be excluded from the result, regardless of the exclusion bounds and | |
74 | -- starting with this procedure itself: 1 means exclude the frame for | |
75 | -- this procedure, 2 means 1 + exclude the frame for this procedure's | |
76 | -- caller, ... | |
77 | -- | |
cacbc350 RK |
78 | -- On return, the Traceback array is filled in, and Len indicates |
79 | -- the number of stored entries. The first entry is the most recent | |
80 | -- call, and the last entry is the highest level call. | |
81 | ||
82 | function C_Call_Chain | |
83 | (Traceback : System.Address; | |
84 | Max_Len : Natural) | |
85 | return Natural; | |
86 | pragma Export (C, C_Call_Chain, "system__traceback__c_call_chain"); | |
87 | -- Version that can be used directly from C. | |
88 | ||
89 | end System.Traceback; |