1 |
281 |
jeremybenn |
------------------------------------------------------------------------------
|
2 |
|
|
-- --
|
3 |
|
|
-- GNAT COMPILER COMPONENTS --
|
4 |
|
|
-- --
|
5 |
|
|
-- E X P _ D B U G --
|
6 |
|
|
-- --
|
7 |
|
|
-- S p e c --
|
8 |
|
|
-- --
|
9 |
|
|
-- Copyright (C) 1996-2009, Free Software Foundation, Inc. --
|
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. 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 COPYING3. If not, go to --
|
19 |
|
|
-- http://www.gnu.org/licenses for a complete copy of the license. --
|
20 |
|
|
-- --
|
21 |
|
|
-- GNAT was originally developed by the GNAT team at New York University. --
|
22 |
|
|
-- Extensive contributions were provided by Ada Core Technologies Inc. --
|
23 |
|
|
-- --
|
24 |
|
|
------------------------------------------------------------------------------
|
25 |
|
|
|
26 |
|
|
-- Expand routines for generation of special declarations used by the
|
27 |
|
|
-- debugger. In accordance with the Dwarf 2.2 specification, certain
|
28 |
|
|
-- type names are encoded to provide information to the debugger.
|
29 |
|
|
|
30 |
|
|
with Namet; use Namet;
|
31 |
|
|
with Types; use Types;
|
32 |
|
|
with Uintp; use Uintp;
|
33 |
|
|
|
34 |
|
|
package Exp_Dbug is
|
35 |
|
|
|
36 |
|
|
-----------------------------------------------------
|
37 |
|
|
-- Encoding and Qualification of Names of Entities --
|
38 |
|
|
-----------------------------------------------------
|
39 |
|
|
|
40 |
|
|
-- This section describes how the names of entities are encoded in
|
41 |
|
|
-- the generated debugging information.
|
42 |
|
|
|
43 |
|
|
-- An entity in Ada has a name of the form X.Y.Z ... E where X,Y,Z
|
44 |
|
|
-- are the enclosing scopes (not including Standard at the start).
|
45 |
|
|
|
46 |
|
|
-- The encoding of the name follows this basic qualified naming scheme,
|
47 |
|
|
-- where the encoding of individual entity names is as described in Namet
|
48 |
|
|
-- (i.e. in particular names present in the original source are folded to
|
49 |
|
|
-- all lower case, with upper half and wide characters encoded as described
|
50 |
|
|
-- in Namet). Upper case letters are used only for entities generated by
|
51 |
|
|
-- the compiler.
|
52 |
|
|
|
53 |
|
|
-- There are two cases, global entities, and local entities. In more formal
|
54 |
|
|
-- terms, local entities are those which have a dynamic enclosing scope,
|
55 |
|
|
-- and global entities are at the library level, except that we always
|
56 |
|
|
-- consider procedures to be global entities, even if they are nested
|
57 |
|
|
-- (that's because at the debugger level a procedure name refers to the
|
58 |
|
|
-- code, and the code is indeed a global entity, including the case of
|
59 |
|
|
-- nested procedures.) In addition, we also consider all types to be global
|
60 |
|
|
-- entities, even if they are defined within a procedure.
|
61 |
|
|
|
62 |
|
|
-- The reason for treating all type names as global entities is that a
|
63 |
|
|
-- number of our type encodings work by having related type names, and we
|
64 |
|
|
-- need the full qualification to keep this unique.
|
65 |
|
|
|
66 |
|
|
-- For global entities, the encoded name includes all components of the
|
67 |
|
|
-- fully expanded name (but omitting Standard at the start). For example,
|
68 |
|
|
-- if a library level child package P.Q has an embedded package R, and
|
69 |
|
|
-- there is an entity in this embedded package whose name is S, the encoded
|
70 |
|
|
-- name will include the components p.q.r.s.
|
71 |
|
|
|
72 |
|
|
-- For local entities, the encoded name only includes the components up to
|
73 |
|
|
-- the enclosing dynamic scope (other than a block). At run time, such a
|
74 |
|
|
-- dynamic scope is a subprogram, and the debugging formats know about
|
75 |
|
|
-- local variables of procedures, so it is not necessary to have full
|
76 |
|
|
-- qualification for such entities. In particular this means that direct
|
77 |
|
|
-- local variables of a procedure are not qualified.
|
78 |
|
|
|
79 |
|
|
-- As an example of the local name convention, consider a procedure V.W
|
80 |
|
|
-- with a local variable X, and a nested block Y containing an entity Z.
|
81 |
|
|
-- The fully qualified names of the entities X and Z are:
|
82 |
|
|
|
83 |
|
|
-- V.W.X
|
84 |
|
|
-- V.W.Y.Z
|
85 |
|
|
|
86 |
|
|
-- but since V.W is a subprogram, the encoded names will end up
|
87 |
|
|
-- encoding only
|
88 |
|
|
|
89 |
|
|
-- x
|
90 |
|
|
-- y.z
|
91 |
|
|
|
92 |
|
|
-- The separating dots are translated into double underscores
|
93 |
|
|
|
94 |
|
|
-----------------------------
|
95 |
|
|
-- Handling of Overloading --
|
96 |
|
|
-----------------------------
|
97 |
|
|
|
98 |
|
|
-- The above scheme is incomplete for overloaded subprograms, since
|
99 |
|
|
-- overloading can legitimately result in case of two entities with
|
100 |
|
|
-- exactly the same fully qualified names. To distinguish between
|
101 |
|
|
-- entries in a set of overloaded subprograms, the encoded names are
|
102 |
|
|
-- serialized by adding the suffix:
|
103 |
|
|
|
104 |
|
|
-- __nn (two underscores)
|
105 |
|
|
|
106 |
|
|
-- where nn is a serial number (2 for the second overloaded function,
|
107 |
|
|
-- 3 for the third, etc.). A suffix of __1 is always omitted (i.e. no
|
108 |
|
|
-- suffix implies the first instance).
|
109 |
|
|
|
110 |
|
|
-- These names are prefixed by the normal full qualification. So for
|
111 |
|
|
-- example, the third instance of the subprogram qrs in package yz
|
112 |
|
|
-- would have the name:
|
113 |
|
|
|
114 |
|
|
-- yz__qrs__3
|
115 |
|
|
|
116 |
|
|
-- A more subtle case arises with entities declared within overloaded
|
117 |
|
|
-- subprograms. If we have two overloaded subprograms, and both declare
|
118 |
|
|
-- an entity xyz, then the fully expanded name of the two xyz's is the
|
119 |
|
|
-- same. To distinguish these, we add the same __n suffix at the end of
|
120 |
|
|
-- the inner entity names.
|
121 |
|
|
|
122 |
|
|
-- In more complex cases, we can have multiple levels of overloading,
|
123 |
|
|
-- and we must make sure to distinguish which final declarative region
|
124 |
|
|
-- we are talking about. For this purpose, we use a more complex suffix
|
125 |
|
|
-- which has the form:
|
126 |
|
|
|
127 |
|
|
-- __nn_nn_nn ...
|
128 |
|
|
|
129 |
|
|
-- where the nn values are the homonym numbers as needed for any of the
|
130 |
|
|
-- qualifying entities, separated by a single underscore. If all the nn
|
131 |
|
|
-- values are 1, the suffix is omitted, Otherwise the suffix is present
|
132 |
|
|
-- (including any values of 1). The following example shows how this
|
133 |
|
|
-- suffixing works.
|
134 |
|
|
|
135 |
|
|
-- package body Yz is
|
136 |
|
|
-- procedure Qrs is -- Name is yz__qrs
|
137 |
|
|
-- procedure Tuv is ... end; -- Name is yz__qrs__tuv
|
138 |
|
|
-- begin ... end Qrs;
|
139 |
|
|
|
140 |
|
|
-- procedure Qrs (X: Int) is -- Name is yz__qrs__2
|
141 |
|
|
-- procedure Tuv is ... end; -- Name is yz__qrs__tuv__2_1
|
142 |
|
|
-- procedure Tuv (X: Int) is -- Name is yz__qrs__tuv__2_2
|
143 |
|
|
-- begin ... end Tuv;
|
144 |
|
|
|
145 |
|
|
-- procedure Tuv (X: Float) is -- Name is yz__qrs__tuv__2_3
|
146 |
|
|
-- type m is new float; -- Name is yz__qrs__tuv__m__2_3
|
147 |
|
|
-- begin ... end Tuv;
|
148 |
|
|
-- begin ... end Qrs;
|
149 |
|
|
-- end Yz;
|
150 |
|
|
|
151 |
|
|
--------------------
|
152 |
|
|
-- Operator Names --
|
153 |
|
|
--------------------
|
154 |
|
|
|
155 |
|
|
-- The above rules applied to operator names would result in names with
|
156 |
|
|
-- quotation marks, which are not typically allowed by assemblers and
|
157 |
|
|
-- linkers, and even if allowed would be odd and hard to deal with. To
|
158 |
|
|
-- avoid this problem, operator names are encoded as follows:
|
159 |
|
|
|
160 |
|
|
-- Oabs abs
|
161 |
|
|
-- Oand and
|
162 |
|
|
-- Omod mod
|
163 |
|
|
-- Onot not
|
164 |
|
|
-- Oor or
|
165 |
|
|
-- Orem rem
|
166 |
|
|
-- Oxor xor
|
167 |
|
|
-- Oeq =
|
168 |
|
|
-- One /=
|
169 |
|
|
-- Olt <
|
170 |
|
|
-- Ole <=
|
171 |
|
|
-- Ogt >
|
172 |
|
|
-- Oge >=
|
173 |
|
|
-- Oadd +
|
174 |
|
|
-- Osubtract -
|
175 |
|
|
-- Oconcat &
|
176 |
|
|
-- Omultiply *
|
177 |
|
|
-- Odivide /
|
178 |
|
|
-- Oexpon **
|
179 |
|
|
|
180 |
|
|
-- These names are prefixed by the normal full qualification, and
|
181 |
|
|
-- suffixed by the overloading identification. So for example, the
|
182 |
|
|
-- second operator "=" defined in package Extra.Messages would have
|
183 |
|
|
-- the name:
|
184 |
|
|
|
185 |
|
|
-- extra__messages__Oeq__2
|
186 |
|
|
|
187 |
|
|
----------------------------------
|
188 |
|
|
-- Resolving Other Name Clashes --
|
189 |
|
|
----------------------------------
|
190 |
|
|
|
191 |
|
|
-- It might be thought that the above scheme is complete, but in Ada 95,
|
192 |
|
|
-- full qualification is insufficient to uniquely identify an entity in
|
193 |
|
|
-- the program, even if it is not an overloaded subprogram. There are
|
194 |
|
|
-- two possible confusions:
|
195 |
|
|
|
196 |
|
|
-- a.b
|
197 |
|
|
|
198 |
|
|
-- interpretation 1: entity b in body of package a
|
199 |
|
|
-- interpretation 2: child procedure b of package a
|
200 |
|
|
|
201 |
|
|
-- a.b.c
|
202 |
|
|
|
203 |
|
|
-- interpretation 1: entity c in child package a.b
|
204 |
|
|
-- interpretation 2: entity c in nested package b in body of a
|
205 |
|
|
|
206 |
|
|
-- It is perfectly legal in both cases for both interpretations to be
|
207 |
|
|
-- valid within a single program. This is a bit of a surprise since
|
208 |
|
|
-- certainly in Ada 83, full qualification was sufficient, but not in
|
209 |
|
|
-- Ada 95. The result is that the above scheme can result in duplicate
|
210 |
|
|
-- names. This would not be so bad if the effect were just restricted
|
211 |
|
|
-- to debugging information, but in fact in both the above cases, it
|
212 |
|
|
-- is possible for both symbols to be external names, and so we have
|
213 |
|
|
-- a real problem of name clashes.
|
214 |
|
|
|
215 |
|
|
-- To deal with this situation, we provide two additional encoding
|
216 |
|
|
-- rules for names:
|
217 |
|
|
|
218 |
|
|
-- First: all library subprogram names are preceded by the string
|
219 |
|
|
-- _ada_ (which causes no duplications, since normal Ada names can
|
220 |
|
|
-- never start with an underscore. This not only solves the first
|
221 |
|
|
-- case of duplication, but also solves another pragmatic problem
|
222 |
|
|
-- which is that otherwise Ada procedures can generate names that
|
223 |
|
|
-- clash with existing system function names. Most notably, we can
|
224 |
|
|
-- have clashes in the case of procedure Main with the C main that
|
225 |
|
|
-- in some systems is always present.
|
226 |
|
|
|
227 |
|
|
-- Second, for the case where nested packages declared in package
|
228 |
|
|
-- bodies can cause trouble, we add a suffix which shows which
|
229 |
|
|
-- entities in the list are body-nested packages, i.e. packages
|
230 |
|
|
-- whose spec is within a package body. The rules are as follows,
|
231 |
|
|
-- given a list of names in a qualified name name1.name2....
|
232 |
|
|
|
233 |
|
|
-- If none are body-nested package entities, then there is no suffix
|
234 |
|
|
|
235 |
|
|
-- If at least one is a body-nested package entity, then the suffix
|
236 |
|
|
-- is X followed by a string of b's and n's (b = body-nested package
|
237 |
|
|
-- entity, n = not a body-nested package).
|
238 |
|
|
|
239 |
|
|
-- There is one element in this string for each entity in the encoded
|
240 |
|
|
-- expanded name except the first (the rules are such that the first
|
241 |
|
|
-- entity of the encoded expanded name can never be a body-nested'
|
242 |
|
|
-- package. Trailing n's are omitted, as is the last b (there must
|
243 |
|
|
-- be at least one b, or we would not be generating a suffix at all).
|
244 |
|
|
|
245 |
|
|
-- For example, suppose we have
|
246 |
|
|
|
247 |
|
|
-- package x is
|
248 |
|
|
-- pragma Elaborate_Body;
|
249 |
|
|
-- m1 : integer; -- #1
|
250 |
|
|
-- end x;
|
251 |
|
|
|
252 |
|
|
-- package body x is
|
253 |
|
|
-- package y is m2 : integer; end y; -- #2
|
254 |
|
|
-- package body y is
|
255 |
|
|
-- package z is r : integer; end z; -- #3
|
256 |
|
|
-- end;
|
257 |
|
|
-- m3 : integer; -- #4
|
258 |
|
|
-- end x;
|
259 |
|
|
|
260 |
|
|
-- package x.y is
|
261 |
|
|
-- pragma Elaborate_Body;
|
262 |
|
|
-- m2 : integer; -- #5
|
263 |
|
|
-- end x.y;
|
264 |
|
|
|
265 |
|
|
-- package body x.y is
|
266 |
|
|
-- m3 : integer; -- #6
|
267 |
|
|
-- procedure j is -- #7
|
268 |
|
|
-- package k is
|
269 |
|
|
-- z : integer; -- #8
|
270 |
|
|
-- end k;
|
271 |
|
|
-- begin
|
272 |
|
|
-- null;
|
273 |
|
|
-- end j;
|
274 |
|
|
-- end x.y;
|
275 |
|
|
|
276 |
|
|
-- procedure x.m3 is begin null; end; -- #9
|
277 |
|
|
|
278 |
|
|
-- Then the encodings would be:
|
279 |
|
|
|
280 |
|
|
-- #1. x__m1 (no BNPE's in sight)
|
281 |
|
|
-- #2. x__y__m2X (y is a BNPE)
|
282 |
|
|
-- #3. x__y__z__rXb (y is a BNPE, so is z)
|
283 |
|
|
-- #4. x__m3 (no BNPE's in sight)
|
284 |
|
|
-- #5. x__y__m2 (no BNPE's in sight)
|
285 |
|
|
-- #6. x__y__m3 (no BNPE's in signt)
|
286 |
|
|
-- #7. x__y__j (no BNPE's in sight)
|
287 |
|
|
-- #8. k__z (no BNPE's, only up to procedure)
|
288 |
|
|
-- #9 _ada_x__m3 (library level subprogram)
|
289 |
|
|
|
290 |
|
|
-- Note that we have instances here of both kind of potential name
|
291 |
|
|
-- clashes, and the above examples show how the encodings avoid the
|
292 |
|
|
-- clash as follows:
|
293 |
|
|
|
294 |
|
|
-- Lines #4 and #9 both refer to the entity x.m3, but #9 is a library
|
295 |
|
|
-- level subprogram, so it is preceded by the string _ada_ which acts
|
296 |
|
|
-- to distinguish it from the package body entity.
|
297 |
|
|
|
298 |
|
|
-- Lines #2 and #5 both refer to the entity x.y.m2, but the first
|
299 |
|
|
-- instance is inside the body-nested package y, so there is an X
|
300 |
|
|
-- suffix to distinguish it from the child library entity.
|
301 |
|
|
|
302 |
|
|
-- Note that enumeration literals never need Xb type suffixes, since
|
303 |
|
|
-- they are never referenced using global external names.
|
304 |
|
|
|
305 |
|
|
---------------------
|
306 |
|
|
-- Interface Names --
|
307 |
|
|
---------------------
|
308 |
|
|
|
309 |
|
|
-- Note: if an interface name is present, then the external name
|
310 |
|
|
-- is taken from the specified interface name. Given the current
|
311 |
|
|
-- limitations of the gcc backend, this means that the debugging
|
312 |
|
|
-- name is also set to the interface name, but conceptually, it
|
313 |
|
|
-- would be possible (and indeed desirable) to have the debugging
|
314 |
|
|
-- information still use the Ada name as qualified above, so we
|
315 |
|
|
-- still fully qualify the name in the front end.
|
316 |
|
|
|
317 |
|
|
-------------------------------------
|
318 |
|
|
-- Encodings Related to Task Types --
|
319 |
|
|
-------------------------------------
|
320 |
|
|
|
321 |
|
|
-- Each task object defined by a single task declaration is associated
|
322 |
|
|
-- with a prefix that is used to qualify procedures defined in that
|
323 |
|
|
-- task. Given
|
324 |
|
|
--
|
325 |
|
|
-- package body P is
|
326 |
|
|
-- task body TaskObj is
|
327 |
|
|
-- procedure F1 is ... end;
|
328 |
|
|
-- begin
|
329 |
|
|
-- B;
|
330 |
|
|
-- end TaskObj;
|
331 |
|
|
-- end P;
|
332 |
|
|
--
|
333 |
|
|
-- The name of subprogram TaskObj.F1 is encoded as p__taskobjTK__f1,
|
334 |
|
|
-- The body, B, is contained in a subprogram whose name is
|
335 |
|
|
-- p__taskobjTKB.
|
336 |
|
|
|
337 |
|
|
------------------------------------------
|
338 |
|
|
-- Encodings Related to Protected Types --
|
339 |
|
|
------------------------------------------
|
340 |
|
|
|
341 |
|
|
-- Each protected type has an associated record type, that describes
|
342 |
|
|
-- the actual layout of the private data. In addition to the private
|
343 |
|
|
-- components of the type, the Corresponding_Record_Type includes one
|
344 |
|
|
-- component of type Protection, which is the actual lock structure.
|
345 |
|
|
-- The run-time size of the protected type is the size of the corres-
|
346 |
|
|
-- ponding record.
|
347 |
|
|
|
348 |
|
|
-- For a protected type prot, the Corresponding_Record_Type is encoded
|
349 |
|
|
-- as protV.
|
350 |
|
|
|
351 |
|
|
-- The operations of a protected type are encoded as follows: each
|
352 |
|
|
-- operation results in two subprograms, a locking one that is called
|
353 |
|
|
-- from outside of the object, and a non-locking one that is used for
|
354 |
|
|
-- calls from other operations on the same object. The locking operation
|
355 |
|
|
-- simply acquires the lock, and then calls the non-locking version.
|
356 |
|
|
-- The names of all of these have a prefix constructed from the name of
|
357 |
|
|
-- the type, and a suffix which is P or N, depending on whether this is
|
358 |
|
|
-- the protected/non-locking version of the operation.
|
359 |
|
|
|
360 |
|
|
-- Operations generated for protected entries follow the same encoding.
|
361 |
|
|
-- Each entry results in two subprograms: a procedure that holds the
|
362 |
|
|
-- entry body, and a function that holds the evaluation of the barrier.
|
363 |
|
|
-- The names of these subprograms include the prefix '_E' or '_B' res-
|
364 |
|
|
-- pectively. The names also include a numeric suffix to render them
|
365 |
|
|
-- unique in the presence of overloaded entries.
|
366 |
|
|
|
367 |
|
|
-- Given the declaration:
|
368 |
|
|
|
369 |
|
|
-- protected type Lock is
|
370 |
|
|
-- function Get return Integer;
|
371 |
|
|
-- procedure Set (X: Integer);
|
372 |
|
|
-- entry Update (Val : Integer);
|
373 |
|
|
-- private
|
374 |
|
|
-- Value : Integer := 0;
|
375 |
|
|
-- end Lock;
|
376 |
|
|
|
377 |
|
|
-- the following operations are created:
|
378 |
|
|
|
379 |
|
|
-- lock_getN
|
380 |
|
|
-- lock_getP,
|
381 |
|
|
|
382 |
|
|
-- lock_setN
|
383 |
|
|
-- lock_setP
|
384 |
|
|
|
385 |
|
|
-- lock_update_E1s
|
386 |
|
|
-- lock_udpate_B2s
|
387 |
|
|
|
388 |
|
|
-- If the protected type implements at least one interface, the
|
389 |
|
|
-- following additional operations are created:
|
390 |
|
|
|
391 |
|
|
-- lock_get
|
392 |
|
|
|
393 |
|
|
-- lock_set
|
394 |
|
|
|
395 |
|
|
-- These operations are used to ensure overriding of interface level
|
396 |
|
|
-- subprograms and proper dispatching on interface class-wide objects.
|
397 |
|
|
-- The bodies of these operations contain calls to their respective
|
398 |
|
|
-- protected versions:
|
399 |
|
|
|
400 |
|
|
-- function lock_get return Integer is
|
401 |
|
|
-- begin
|
402 |
|
|
-- return lock_getP;
|
403 |
|
|
-- end lock_get;
|
404 |
|
|
|
405 |
|
|
-- procedure lock_set (X : Integer) is
|
406 |
|
|
-- begin
|
407 |
|
|
-- lock_setP (X);
|
408 |
|
|
-- end lock_set;
|
409 |
|
|
|
410 |
|
|
----------------------------------------------------
|
411 |
|
|
-- Conversion between Entities and External Names --
|
412 |
|
|
----------------------------------------------------
|
413 |
|
|
|
414 |
|
|
No_Dollar_In_Label : constant Boolean := True;
|
415 |
|
|
-- True iff the target does not allow dollar signs ("$") in external names
|
416 |
|
|
-- ??? We want to migrate all platforms to use the same convention.
|
417 |
|
|
-- As a first step, we force this constant to always be True. This
|
418 |
|
|
-- constant will eventually be deleted after we have verified that
|
419 |
|
|
-- the migration does not cause any unforseen adverse impact.
|
420 |
|
|
-- We chose "__" because it is supported on all platforms, which is
|
421 |
|
|
-- not the case of "$".
|
422 |
|
|
|
423 |
|
|
procedure Get_External_Name
|
424 |
|
|
(Entity : Entity_Id;
|
425 |
|
|
Has_Suffix : Boolean);
|
426 |
|
|
-- Set Name_Buffer and Name_Len to the external name of entity E.
|
427 |
|
|
-- The external name is the Interface_Name, if specified, unless
|
428 |
|
|
-- the entity has an address clause or a suffix.
|
429 |
|
|
--
|
430 |
|
|
-- If the Interface is not present, or not used, the external name
|
431 |
|
|
-- is the concatenation of:
|
432 |
|
|
--
|
433 |
|
|
-- - the string "_ada_", if the entity is a library subprogram,
|
434 |
|
|
-- - the names of any enclosing scopes, each followed by "__",
|
435 |
|
|
-- or "X_" if the next entity is a subunit)
|
436 |
|
|
-- - the name of the entity
|
437 |
|
|
-- - the string "$" (or "__" if target does not allow "$"), followed
|
438 |
|
|
-- by homonym suffix, if the entity is an overloaded subprogram
|
439 |
|
|
-- or is defined within an overloaded subprogram.
|
440 |
|
|
|
441 |
|
|
procedure Get_External_Name_With_Suffix
|
442 |
|
|
(Entity : Entity_Id;
|
443 |
|
|
Suffix : String);
|
444 |
|
|
-- Set Name_Buffer and Name_Len to the external name of entity E.
|
445 |
|
|
-- If Suffix is the empty string the external name is as above,
|
446 |
|
|
-- otherwise the external name is the concatenation of:
|
447 |
|
|
--
|
448 |
|
|
-- - the string "_ada_", if the entity is a library subprogram,
|
449 |
|
|
-- - the names of any enclosing scopes, each followed by "__",
|
450 |
|
|
-- or "X_" if the next entity is a subunit)
|
451 |
|
|
-- - the name of the entity
|
452 |
|
|
-- - the string "$" (or "__" if target does not allow "$"), followed
|
453 |
|
|
-- by homonym suffix, if the entity is an overloaded subprogram
|
454 |
|
|
-- or is defined within an overloaded subprogram.
|
455 |
|
|
-- - the string "___" followed by Suffix
|
456 |
|
|
--
|
457 |
|
|
-- Note that a call to this procedure has no effect if we are not
|
458 |
|
|
-- generating code, since the necessary information for computing the
|
459 |
|
|
-- proper encoded name is not available in this case.
|
460 |
|
|
|
461 |
|
|
--------------------------------------------
|
462 |
|
|
-- Subprograms for Handling Qualification --
|
463 |
|
|
--------------------------------------------
|
464 |
|
|
|
465 |
|
|
procedure Qualify_Entity_Names (N : Node_Id);
|
466 |
|
|
-- Given a node N, that represents a block, subprogram body, or package
|
467 |
|
|
-- body or spec, or protected or task type, sets a fully qualified name
|
468 |
|
|
-- for the defining entity of given construct, and also sets fully
|
469 |
|
|
-- qualified names for all enclosed entities of the construct (using
|
470 |
|
|
-- First_Entity/Next_Entity). Note that the actual modifications of the
|
471 |
|
|
-- names is postponed till a subsequent call to Qualify_All_Entity_Names.
|
472 |
|
|
-- Note: this routine does not deal with prepending _ada_ to library
|
473 |
|
|
-- subprogram names. The reason for this is that we only prepend _ada_
|
474 |
|
|
-- to the library entity itself, and not to names built from this name.
|
475 |
|
|
|
476 |
|
|
procedure Qualify_All_Entity_Names;
|
477 |
|
|
-- When Qualify_Entity_Names is called, no actual name changes are made,
|
478 |
|
|
-- i.e. the actual calls to Qualify_Entity_Name are deferred until a call
|
479 |
|
|
-- is made to this procedure. The reason for this deferral is that when
|
480 |
|
|
-- names are changed semantic processing may be affected. By deferring
|
481 |
|
|
-- the changes till just before gigi is called, we avoid any concerns
|
482 |
|
|
-- about such effects. Gigi itself does not use the names except for
|
483 |
|
|
-- output of names for debugging purposes (which is why we are doing
|
484 |
|
|
-- the name changes in the first place.
|
485 |
|
|
|
486 |
|
|
-- Note: the routines Get_Unqualified_[Decoded]_Name_String in Namet
|
487 |
|
|
-- are useful to remove qualification from a name qualified by the
|
488 |
|
|
-- call to Qualify_All_Entity_Names.
|
489 |
|
|
|
490 |
|
|
--------------------------------
|
491 |
|
|
-- Handling of Numeric Values --
|
492 |
|
|
--------------------------------
|
493 |
|
|
|
494 |
|
|
-- All numeric values here are encoded as strings of decimal digits.
|
495 |
|
|
-- Only integer values need to be encoded. A negative value is encoded
|
496 |
|
|
-- as the corresponding positive value followed by a lower case m for
|
497 |
|
|
-- minus to indicate that the value is negative (e.g. 2m for -2).
|
498 |
|
|
|
499 |
|
|
-------------------------
|
500 |
|
|
-- Type Name Encodings --
|
501 |
|
|
-------------------------
|
502 |
|
|
|
503 |
|
|
-- In the following typ is the name of the type as normally encoded by
|
504 |
|
|
-- the debugger rules, i.e. a non-qualified name, all in lower case,
|
505 |
|
|
-- with standard encoding of upper half and wide characters
|
506 |
|
|
|
507 |
|
|
------------------------
|
508 |
|
|
-- Encapsulated Types --
|
509 |
|
|
------------------------
|
510 |
|
|
|
511 |
|
|
-- In some cases, the compiler encapsulates a type by wrapping it in
|
512 |
|
|
-- a structure. For example, this is used when a size or alignment
|
513 |
|
|
-- specification requires a larger type. Consider:
|
514 |
|
|
|
515 |
|
|
-- type y is mod 2 ** 64;
|
516 |
|
|
-- for y'size use 256;
|
517 |
|
|
|
518 |
|
|
-- In this case the compile generates a structure type y___PAD, which
|
519 |
|
|
-- has a single field whose name is F. This single field is 64 bits
|
520 |
|
|
-- long and contains the actual value. This kind of padding is used
|
521 |
|
|
-- when the logical value to be stored is shorter than the object in
|
522 |
|
|
-- which it is allocated. For example if a size clause is used to set
|
523 |
|
|
-- a size of 256 for a signed integer value, then a typical choice is
|
524 |
|
|
-- to wrap a 64-bit integer in a 256 bit PAD structure.
|
525 |
|
|
|
526 |
|
|
-- A similar encapsulation is done for some packed array types,
|
527 |
|
|
-- in which case the structure type is y___JM and the field name
|
528 |
|
|
-- is OBJECT. This is used in the case of a packed array stored
|
529 |
|
|
-- in modular representation (see section on representation of
|
530 |
|
|
-- packed array objects). In this case the JM wrapping is used to
|
531 |
|
|
-- achieve correct positioning of the packed array value (left or
|
532 |
|
|
-- right justified in its field depending on endianness.
|
533 |
|
|
|
534 |
|
|
-- When the debugger sees an object of a type whose name has a
|
535 |
|
|
-- suffix of ___PAD or ___JM, the type will be a record containing
|
536 |
|
|
-- a single field, and the name of that field will be all upper case.
|
537 |
|
|
-- In this case, it should look inside to get the value of the inner
|
538 |
|
|
-- field, and neither the outer structure name, nor the field name
|
539 |
|
|
-- should appear when the value is printed.
|
540 |
|
|
|
541 |
|
|
-- When the debugger sees a record named REP being a field inside
|
542 |
|
|
-- another record, it should treat the fields inside REP as being
|
543 |
|
|
-- part of the outer record (this REP field is only present for
|
544 |
|
|
-- code generation purposes). The REP record should not appear in
|
545 |
|
|
-- the values printed by the debugger.
|
546 |
|
|
|
547 |
|
|
-----------------------
|
548 |
|
|
-- Fixed-Point Types --
|
549 |
|
|
-----------------------
|
550 |
|
|
|
551 |
|
|
-- Fixed-point types are encoded using a suffix that indicates the
|
552 |
|
|
-- delta and small values. The actual type itself is a normal
|
553 |
|
|
-- integer type.
|
554 |
|
|
|
555 |
|
|
-- typ___XF_nn_dd
|
556 |
|
|
-- typ___XF_nn_dd_nn_dd
|
557 |
|
|
|
558 |
|
|
-- The first form is used when small = delta. The value of delta (and
|
559 |
|
|
-- small) is given by the rational nn/dd, where nn and dd are decimal
|
560 |
|
|
-- integers.
|
561 |
|
|
--
|
562 |
|
|
-- The second form is used if the small value is different from the
|
563 |
|
|
-- delta. In this case, the first nn/dd rational value is for delta,
|
564 |
|
|
-- and the second value is for small.
|
565 |
|
|
|
566 |
|
|
------------------------------
|
567 |
|
|
-- VAX Floating-Point Types --
|
568 |
|
|
------------------------------
|
569 |
|
|
|
570 |
|
|
-- Vax floating-point types are represented at run time as integer
|
571 |
|
|
-- types, which are treated specially by the code generator. Their
|
572 |
|
|
-- type names are encoded with the following suffix:
|
573 |
|
|
|
574 |
|
|
-- typ___XFF
|
575 |
|
|
-- typ___XFD
|
576 |
|
|
-- typ___XFG
|
577 |
|
|
|
578 |
|
|
-- representing the Vax F Float, D Float, and G Float types. The
|
579 |
|
|
-- debugger must treat these specially. In particular, printing
|
580 |
|
|
-- these values can be achieved using the debug procedures that
|
581 |
|
|
-- are provided in package System.Vax_Float_Operations:
|
582 |
|
|
|
583 |
|
|
-- procedure Debug_Output_D (Arg : D);
|
584 |
|
|
-- procedure Debug_Output_F (Arg : F);
|
585 |
|
|
-- procedure Debug_Output_G (Arg : G);
|
586 |
|
|
|
587 |
|
|
-- These three procedures take a Vax floating-point argument, and
|
588 |
|
|
-- output a corresponding decimal representation to standard output
|
589 |
|
|
-- with no terminating line return.
|
590 |
|
|
|
591 |
|
|
--------------------
|
592 |
|
|
-- Discrete Types --
|
593 |
|
|
--------------------
|
594 |
|
|
|
595 |
|
|
-- Discrete types are coded with a suffix indicating the range in
|
596 |
|
|
-- the case where one or both of the bounds are discriminants or
|
597 |
|
|
-- variable.
|
598 |
|
|
|
599 |
|
|
-- Note: at the current time, we also encode compile time known
|
600 |
|
|
-- bounds if they do not match the natural machine type bounds,
|
601 |
|
|
-- but this may be removed in the future, since it is redundant
|
602 |
|
|
-- for most debugging formats. However, we do not ever need XD
|
603 |
|
|
-- encoding for enumeration base types, since here it is always
|
604 |
|
|
-- clear what the bounds are from the total number of enumeration
|
605 |
|
|
-- literals.
|
606 |
|
|
|
607 |
|
|
-- typ___XD
|
608 |
|
|
-- typ___XDL_lowerbound
|
609 |
|
|
-- typ___XDU_upperbound
|
610 |
|
|
-- typ___XDLU_lowerbound__upperbound
|
611 |
|
|
|
612 |
|
|
-- If a discrete type is a natural machine type (i.e. its bounds
|
613 |
|
|
-- correspond in a natural manner to its size), then it is left
|
614 |
|
|
-- unencoded. The above encoding forms are used when there is a
|
615 |
|
|
-- constrained range that does not correspond to the size or that
|
616 |
|
|
-- has discriminant references or other compile time known bounds.
|
617 |
|
|
|
618 |
|
|
-- The first form is used if both bounds are dynamic, in which case
|
619 |
|
|
-- two constant objects are present whose names are typ___L and
|
620 |
|
|
-- typ___U in the same scope as typ, and the values of these constants
|
621 |
|
|
-- indicate the bounds. As far as the debugger is concerned, these
|
622 |
|
|
-- are simply variables that can be accessed like any other variables.
|
623 |
|
|
-- In the enumeration case, these values correspond to the Enum_Rep
|
624 |
|
|
-- values for the lower and upper bounds.
|
625 |
|
|
|
626 |
|
|
-- The second form is used if the upper bound is dynamic, but the
|
627 |
|
|
-- lower bound is either constant or depends on a discriminant of
|
628 |
|
|
-- the record with which the type is associated. The upper bound
|
629 |
|
|
-- is stored in a constant object of name typ___U as previously
|
630 |
|
|
-- described, but the lower bound is encoded directly into the
|
631 |
|
|
-- name as either a decimal integer, or as the discriminant name.
|
632 |
|
|
|
633 |
|
|
-- The third form is similarly used if the lower bound is dynamic,
|
634 |
|
|
-- but the upper bound is compile time known or a discriminant
|
635 |
|
|
-- reference, in which case the lower bound is stored in a constant
|
636 |
|
|
-- object of name typ___L, and the upper bound is encoded directly
|
637 |
|
|
-- into the name as either a decimal integer, or as the discriminant
|
638 |
|
|
-- name.
|
639 |
|
|
|
640 |
|
|
-- The fourth form is used if both bounds are discriminant references
|
641 |
|
|
-- or compile time known values, with the encoding first for the lower
|
642 |
|
|
-- bound, then for the upper bound, as previously described.
|
643 |
|
|
|
644 |
|
|
-------------------
|
645 |
|
|
-- Modular Types --
|
646 |
|
|
-------------------
|
647 |
|
|
|
648 |
|
|
-- A type declared
|
649 |
|
|
|
650 |
|
|
-- type x is mod N;
|
651 |
|
|
|
652 |
|
|
-- Is encoded as a subrange of an unsigned base type with lower bound
|
653 |
|
|
-- 0 and upper bound N. That is, there is no name encoding. We use
|
654 |
|
|
-- the standard encodings provided by the debugging format. Thus
|
655 |
|
|
-- we give these types a non-standard interpretation: the standard
|
656 |
|
|
-- interpretation of our encoding would not, in general, imply that
|
657 |
|
|
-- arithmetic on type x was to be performed modulo N (especially not
|
658 |
|
|
-- when N is not a power of 2).
|
659 |
|
|
|
660 |
|
|
------------------
|
661 |
|
|
-- Biased Types --
|
662 |
|
|
------------------
|
663 |
|
|
|
664 |
|
|
-- Only discrete types can be biased, and the fact that they are
|
665 |
|
|
-- biased is indicated by a suffix of the form:
|
666 |
|
|
|
667 |
|
|
-- typ___XB_lowerbound__upperbound
|
668 |
|
|
|
669 |
|
|
-- Here lowerbound and upperbound are decimal integers, with the
|
670 |
|
|
-- usual (postfix "m") encoding for negative numbers. Biased
|
671 |
|
|
-- types are only possible where the bounds are compile time
|
672 |
|
|
-- known, and the values are represented as unsigned offsets
|
673 |
|
|
-- from the lower bound given. For example:
|
674 |
|
|
|
675 |
|
|
-- type Q is range 10 .. 15;
|
676 |
|
|
-- for Q'size use 3;
|
677 |
|
|
|
678 |
|
|
-- The size clause will force values of type Q in memory to be
|
679 |
|
|
-- stored in biased form (e.g. 11 will be represented by the
|
680 |
|
|
-- bit pattern 001).
|
681 |
|
|
|
682 |
|
|
----------------------------------------------
|
683 |
|
|
-- Record Types with Variable-Length Fields --
|
684 |
|
|
----------------------------------------------
|
685 |
|
|
|
686 |
|
|
-- The debugging formats do not fully support these types, and indeed
|
687 |
|
|
-- some formats simply generate no useful information at all for such
|
688 |
|
|
-- types. In order to provide information for the debugger, gigi creates
|
689 |
|
|
-- a parallel type in the same scope with one of the names
|
690 |
|
|
|
691 |
|
|
-- type___XVE
|
692 |
|
|
-- type___XVU
|
693 |
|
|
|
694 |
|
|
-- The former name is used for a record and the latter for the union
|
695 |
|
|
-- that is made for a variant record (see below) if that record or
|
696 |
|
|
-- union has a field of variable size or if the record or union itself
|
697 |
|
|
-- has a variable size. These encodings suffix any other encodings that
|
698 |
|
|
-- that might be suffixed to the type name.
|
699 |
|
|
|
700 |
|
|
-- The idea here is to provide all the needed information to interpret
|
701 |
|
|
-- objects of the original type in the form of a "fixed up" type, which
|
702 |
|
|
-- is representable using the normal debugging information.
|
703 |
|
|
|
704 |
|
|
-- There are three cases to be dealt with. First, some fields may have
|
705 |
|
|
-- variable positions because they appear after variable-length fields.
|
706 |
|
|
-- To deal with this, we encode *all* the field bit positions of the
|
707 |
|
|
-- special ___XV type in a non-standard manner.
|
708 |
|
|
|
709 |
|
|
-- The idea is to encode not the position, but rather information
|
710 |
|
|
-- that allows computing the position of a field from the position
|
711 |
|
|
-- of the previous field. The algorithm for computing the actual
|
712 |
|
|
-- positions of all fields and the length of the record is as
|
713 |
|
|
-- follows. In this description, let P represent the current
|
714 |
|
|
-- bit position in the record.
|
715 |
|
|
|
716 |
|
|
-- 1. Initialize P to 0
|
717 |
|
|
|
718 |
|
|
-- 2. For each field in the record:
|
719 |
|
|
|
720 |
|
|
-- 2a. If an alignment is given (see below), then round P
|
721 |
|
|
-- up, if needed, to the next multiple of that alignment.
|
722 |
|
|
|
723 |
|
|
-- 2b. If a bit position is given, then increment P by that
|
724 |
|
|
-- amount (that is, treat it as an offset from the end of the
|
725 |
|
|
-- preceding record).
|
726 |
|
|
|
727 |
|
|
-- 2c. Assign P as the actual position of the field
|
728 |
|
|
|
729 |
|
|
-- 2d. Compute the length, L, of the represented field (see below)
|
730 |
|
|
-- and compute P'=P+L. Unless the field represents a variant part
|
731 |
|
|
-- (see below and also Variant Record Encoding), set P to P'.
|
732 |
|
|
|
733 |
|
|
-- The alignment, if present, is encoded in the field name of the
|
734 |
|
|
-- record, which has a suffix:
|
735 |
|
|
|
736 |
|
|
-- fieldname___XVAnn
|
737 |
|
|
|
738 |
|
|
-- where the nn after the XVA indicates the alignment value in storage
|
739 |
|
|
-- units. This encoding is present only if an alignment is present.
|
740 |
|
|
|
741 |
|
|
-- The size of the record described by an XVE-encoded type (in bits)
|
742 |
|
|
-- is generally the maximum value attained by P' in step 2d above,
|
743 |
|
|
-- rounded up according to the record's alignment.
|
744 |
|
|
|
745 |
|
|
-- Second, the variable-length fields themselves are represented by
|
746 |
|
|
-- replacing the type by a special access type. The designated type
|
747 |
|
|
-- of this access type is the original variable-length type, and the
|
748 |
|
|
-- fact that this field has been transformed in this way is signalled
|
749 |
|
|
-- by encoding the field name as:
|
750 |
|
|
|
751 |
|
|
-- field___XVL
|
752 |
|
|
|
753 |
|
|
-- where field is the original field name. If a field is both
|
754 |
|
|
-- variable-length and also needs an alignment encoding, then the
|
755 |
|
|
-- encodings are combined using:
|
756 |
|
|
|
757 |
|
|
-- field___XVLnn
|
758 |
|
|
|
759 |
|
|
-- Note: the reason that we change the type is so that the resulting
|
760 |
|
|
-- type has no variable-length fields. At least some of the formats
|
761 |
|
|
-- used for debugging information simply cannot tolerate variable-
|
762 |
|
|
-- length fields, so the encoded information would get lost.
|
763 |
|
|
|
764 |
|
|
-- Third, in the case of a variant record, the special union
|
765 |
|
|
-- that contains the variants is replaced by a normal C union.
|
766 |
|
|
-- In this case, the positions are all zero.
|
767 |
|
|
|
768 |
|
|
-- Discriminants appear before any variable-length fields that depend
|
769 |
|
|
-- on them, with one exception. In some cases, a discriminant
|
770 |
|
|
-- governing the choice of a variant clause may appear in the list
|
771 |
|
|
-- of fields of an XVE type after the entry for the variant clause
|
772 |
|
|
-- itself (this can happen in the presence of a representation clause
|
773 |
|
|
-- for the record type in the source program). However, when this
|
774 |
|
|
-- happens, the discriminant's position may be determined by first
|
775 |
|
|
-- applying the rules described in this section, ignoring the variant
|
776 |
|
|
-- clause. As a result, discriminants can always be located
|
777 |
|
|
-- independently of the variable-length fields that depend on them.
|
778 |
|
|
|
779 |
|
|
-- The size of the ___XVE or ___XVU record or union is set to the
|
780 |
|
|
-- alignment (in bytes) of the original object so that the debugger
|
781 |
|
|
-- can calculate the size of the original type.
|
782 |
|
|
|
783 |
|
|
-- As an example of this encoding, consider the declarations:
|
784 |
|
|
|
785 |
|
|
-- type Q is array (1 .. V1) of Float; -- alignment 4
|
786 |
|
|
-- type R is array (1 .. V2) of Long_Float; -- alignment 8
|
787 |
|
|
|
788 |
|
|
-- type X is record
|
789 |
|
|
-- A : Character;
|
790 |
|
|
-- B : Float;
|
791 |
|
|
-- C : String (1 .. V3);
|
792 |
|
|
-- D : Float;
|
793 |
|
|
-- E : Q;
|
794 |
|
|
-- F : R;
|
795 |
|
|
-- G : Float;
|
796 |
|
|
-- end record;
|
797 |
|
|
|
798 |
|
|
-- The encoded type looks like:
|
799 |
|
|
|
800 |
|
|
-- type anonymousQ is access Q;
|
801 |
|
|
-- type anonymousR is access R;
|
802 |
|
|
|
803 |
|
|
-- type X___XVE is record
|
804 |
|
|
-- A : Character; -- position contains 0
|
805 |
|
|
-- B : Float; -- position contains 24
|
806 |
|
|
-- C___XVL : access String (1 .. V3); -- position contains 0
|
807 |
|
|
-- D___XVA4 : Float; -- position contains 0
|
808 |
|
|
-- E___XVL4 : anonymousQ; -- position contains 0
|
809 |
|
|
-- F___XVL8 : anonymousR; -- position contains 0
|
810 |
|
|
-- G : Float; -- position contains 0
|
811 |
|
|
-- end record;
|
812 |
|
|
|
813 |
|
|
-- Any bit sizes recorded for fields other than dynamic fields and
|
814 |
|
|
-- variants are honored as for ordinary records.
|
815 |
|
|
|
816 |
|
|
-- Notes:
|
817 |
|
|
|
818 |
|
|
-- 1) The B field could also have been encoded by using a position
|
819 |
|
|
-- of zero, and an alignment of 4, but in such a case, the coding by
|
820 |
|
|
-- position is preferred (since it takes up less space). We have used
|
821 |
|
|
-- the (illegal) notation access xxx as field types in the example
|
822 |
|
|
-- above.
|
823 |
|
|
|
824 |
|
|
-- 2) The E field does not actually need the alignment indication
|
825 |
|
|
-- but this may not be detected in this case by the conversion
|
826 |
|
|
-- routines.
|
827 |
|
|
|
828 |
|
|
-- 3) Our conventions do not cover all XVE-encoded records in which
|
829 |
|
|
-- some, but not all, fields have representation clauses. Such
|
830 |
|
|
-- records may, therefore, be displayed incorrectly by debuggers.
|
831 |
|
|
-- This situation is not common.
|
832 |
|
|
|
833 |
|
|
-----------------------
|
834 |
|
|
-- Base Record Types --
|
835 |
|
|
-----------------------
|
836 |
|
|
|
837 |
|
|
-- Under certain circumstances, debuggers need two descriptions of a
|
838 |
|
|
-- record type, one that gives the actual details of the base type's
|
839 |
|
|
-- structure (as described elsewhere in these comments) and one that may
|
840 |
|
|
-- be used to obtain information about the particular subtype and the
|
841 |
|
|
-- size of the objects being typed. In such cases the compiler will
|
842 |
|
|
-- substitute type whose name is typically compiler-generated and
|
843 |
|
|
-- irrelevant except as a key for obtaining the actual type.
|
844 |
|
|
|
845 |
|
|
-- Specifically, if this name is x, then we produce a record type named
|
846 |
|
|
-- x___XVS consisting of one field. The name of this field is that of
|
847 |
|
|
-- the actual type being encoded, which we'll call y. The type of this
|
848 |
|
|
-- single field can be either an arbitrary non-reference type, e.g. an
|
849 |
|
|
-- integer type, or a reference type; in the latter case, the referenced
|
850 |
|
|
-- type is also the actual type being encoded y. Both x and y may have
|
851 |
|
|
-- corresponding ___XVE types.
|
852 |
|
|
|
853 |
|
|
-- The size of the objects typed as x should be obtained from the
|
854 |
|
|
-- structure of x (and x___XVE, if applicable) as for ordinary types
|
855 |
|
|
-- unless there is a variable named x___XVZ, which, if present, will
|
856 |
|
|
-- hold the size (in bytes) of x.
|
857 |
|
|
|
858 |
|
|
-- The type x will either be a subtype of y (see also Subtypes of
|
859 |
|
|
-- Variant Records, below) or will contain no fields at all. The layout,
|
860 |
|
|
-- types, and positions of these fields will be accurate, if present.
|
861 |
|
|
-- (Currently, however, the GDB debugger makes no use of x except to
|
862 |
|
|
-- determine its size).
|
863 |
|
|
|
864 |
|
|
-- Among other uses, XVS types are sometimes used to encode
|
865 |
|
|
-- unconstrained types. For example, given
|
866 |
|
|
--
|
867 |
|
|
-- subtype Int is INTEGER range 0..10;
|
868 |
|
|
-- type T1 (N: Int := 0) is record
|
869 |
|
|
-- F1: String (1 .. N);
|
870 |
|
|
-- end record;
|
871 |
|
|
-- type AT1 is array (INTEGER range <>) of T1;
|
872 |
|
|
--
|
873 |
|
|
-- the element type for AT1 might have a type defined as if it had
|
874 |
|
|
-- been written:
|
875 |
|
|
--
|
876 |
|
|
-- type at1___PAD is record null; end record;
|
877 |
|
|
-- for at1___PAD'Size use 16 * 8;
|
878 |
|
|
--
|
879 |
|
|
-- and there would also be
|
880 |
|
|
--
|
881 |
|
|
-- type at1___PAD___XVS is record t1: Integer; end record;
|
882 |
|
|
-- type t1 is ...
|
883 |
|
|
--
|
884 |
|
|
-- Had the subtype Int been dynamic:
|
885 |
|
|
--
|
886 |
|
|
-- subtype Int is INTEGER range 0 .. M; -- M a variable
|
887 |
|
|
--
|
888 |
|
|
-- Then the compiler would also generate a declaration whose effect
|
889 |
|
|
-- would be
|
890 |
|
|
--
|
891 |
|
|
-- at1___PAD___XVZ: constant Integer := 32 + M * 8 + padding term;
|
892 |
|
|
--
|
893 |
|
|
-- Not all unconstrained types are so encoded; the XVS convention may be
|
894 |
|
|
-- unnecessary for unconstrained types of fixed size. However, this
|
895 |
|
|
-- encoding is always necessary when a subcomponent type (array
|
896 |
|
|
-- element's type or record field's type) is an unconstrained record
|
897 |
|
|
-- type some of whose components depend on discriminant values.
|
898 |
|
|
|
899 |
|
|
-----------------
|
900 |
|
|
-- Array Types --
|
901 |
|
|
-----------------
|
902 |
|
|
|
903 |
|
|
-- Since there is no way for the debugger to obtain the index subtypes
|
904 |
|
|
-- for an array type, we produce a type that has the name of the
|
905 |
|
|
-- array type followed by "___XA" and is a record whose field names
|
906 |
|
|
-- are the names of the types for the bounds. The types of these
|
907 |
|
|
-- fields is an integer type which is meaningless.
|
908 |
|
|
|
909 |
|
|
-- To conserve space, we do not produce this type unless one of the
|
910 |
|
|
-- index types is either an enumeration type, has a variable upper
|
911 |
|
|
-- bound, has a lower bound different from the constant 1, is a biased
|
912 |
|
|
-- type, or is wider than "sizetype".
|
913 |
|
|
|
914 |
|
|
-- Given the full encoding of these types (see above description for
|
915 |
|
|
-- the encoding of discrete types), this means that all necessary
|
916 |
|
|
-- information for addressing arrays is available. In some debugging
|
917 |
|
|
-- formats, some or all of the bounds information may be available
|
918 |
|
|
-- redundantly, particularly in the fixed-point case, but this
|
919 |
|
|
-- information can in any case be ignored by the debugger.
|
920 |
|
|
|
921 |
|
|
----------------------------
|
922 |
|
|
-- Note on Implicit Types --
|
923 |
|
|
----------------------------
|
924 |
|
|
|
925 |
|
|
-- The compiler creates implicit type names in many situations where a
|
926 |
|
|
-- type is present semantically, but no specific name is present. For
|
927 |
|
|
-- example:
|
928 |
|
|
|
929 |
|
|
-- S : Integer range M .. N;
|
930 |
|
|
|
931 |
|
|
-- Here the subtype of S is not integer, but rather an anonymous subtype
|
932 |
|
|
-- of Integer. Where possible, the compiler generates names for such
|
933 |
|
|
-- anonymous types that are related to the type from which the subtype
|
934 |
|
|
-- is obtained as follows:
|
935 |
|
|
|
936 |
|
|
-- T name suffix
|
937 |
|
|
|
938 |
|
|
-- where name is the name from which the subtype is obtained, using
|
939 |
|
|
-- lower case letters and underscores, and suffix starts with an upper
|
940 |
|
|
-- case letter. For example the name for the above declaration might be:
|
941 |
|
|
|
942 |
|
|
-- TintegerS4b
|
943 |
|
|
|
944 |
|
|
-- If the debugger is asked to give the type of an entity and the type
|
945 |
|
|
-- has the form T name suffix, it is probably appropriate to just use
|
946 |
|
|
-- "name" in the response since this is what is meaningful to the
|
947 |
|
|
-- programmer.
|
948 |
|
|
|
949 |
|
|
-------------------------------------------------
|
950 |
|
|
-- Subprograms for Handling Encoded Type Names --
|
951 |
|
|
-------------------------------------------------
|
952 |
|
|
|
953 |
|
|
procedure Get_Encoded_Name (E : Entity_Id);
|
954 |
|
|
-- If the entity is a typename, store the external name of the entity as in
|
955 |
|
|
-- Get_External_Name, followed by three underscores plus the type encoding
|
956 |
|
|
-- in Name_Buffer with the length in Name_Len, and an ASCII.NUL character
|
957 |
|
|
-- stored following the name. Otherwise set Name_Buffer and Name_Len to
|
958 |
|
|
-- hold the entity name. Note that a call to this procedure has no effect
|
959 |
|
|
-- if we are not generating code, since the necessary information for
|
960 |
|
|
-- computing the proper encoded name is not available in this case.
|
961 |
|
|
|
962 |
|
|
--------------
|
963 |
|
|
-- Renaming --
|
964 |
|
|
--------------
|
965 |
|
|
|
966 |
|
|
-- Debugging information is generated for exception, object, package,
|
967 |
|
|
-- and subprogram renaming (generic renamings are not significant, since
|
968 |
|
|
-- generic templates are not relevant at debugging time).
|
969 |
|
|
|
970 |
|
|
-- Consider a renaming declaration of the form
|
971 |
|
|
|
972 |
|
|
-- x : typ renames y;
|
973 |
|
|
|
974 |
|
|
-- There is one case in which no special debugging information is required,
|
975 |
|
|
-- namely the case of an object renaming where the back end allocates a
|
976 |
|
|
-- reference for the renamed variable, and the entity x is this reference.
|
977 |
|
|
-- The debugger can handle this case without any special processing or
|
978 |
|
|
-- encoding (it won't know it was a renaming, but that does not matter).
|
979 |
|
|
|
980 |
|
|
-- All other cases of renaming generate a dummy variable for an entity
|
981 |
|
|
-- whose name is of the form:
|
982 |
|
|
|
983 |
|
|
-- x___XR_... for an object renaming
|
984 |
|
|
-- x___XRE_... for an exception renaming
|
985 |
|
|
-- x___XRP_... for a package renaming
|
986 |
|
|
|
987 |
|
|
-- and where the "..." represents a suffix that describes the structure of
|
988 |
|
|
-- the object name given in the renaming (see details below).
|
989 |
|
|
|
990 |
|
|
-- The name is fully qualified in the usual manner, i.e. qualified in the
|
991 |
|
|
-- same manner as the entity x would be. In the case of a package renaming
|
992 |
|
|
-- where x is a child unit, the qualification includes the name of the
|
993 |
|
|
-- parent unit, to disambiguate child units with the same simple name and
|
994 |
|
|
-- (of necessity) different parents.
|
995 |
|
|
|
996 |
|
|
-- Note: subprogram renamings are not encoded at the present time
|
997 |
|
|
|
998 |
|
|
-- The suffix of the variable name describing the renamed object is
|
999 |
|
|
-- defined to use the following encoding:
|
1000 |
|
|
|
1001 |
|
|
-- For the simple entity case, where y is just an entity name, the suffix
|
1002 |
|
|
-- is of the form:
|
1003 |
|
|
|
1004 |
|
|
-- y___XE
|
1005 |
|
|
|
1006 |
|
|
-- i.e. the suffix has a single field, the first part matching the
|
1007 |
|
|
-- name y, followed by a "___" separator, ending with sequence XE.
|
1008 |
|
|
-- The entity name portion is fully qualified in the usual manner.
|
1009 |
|
|
-- This same naming scheme is followed for all forms of encoded
|
1010 |
|
|
-- renamings that rename a simple entity.
|
1011 |
|
|
|
1012 |
|
|
-- For the object renaming case where y is a selected component or an
|
1013 |
|
|
-- indexed component, the variable name is suffixed by additional fields
|
1014 |
|
|
-- that give details of the components. The name starts as above with a
|
1015 |
|
|
-- y___XE name indicating the outer level object entity. Then a series of
|
1016 |
|
|
-- selections and indexing operations can be specified as follows:
|
1017 |
|
|
|
1018 |
|
|
-- Indexed component
|
1019 |
|
|
|
1020 |
|
|
-- A series of subscript values appear in sequence, the number
|
1021 |
|
|
-- corresponds to the number of dimensions of the array. The
|
1022 |
|
|
-- subscripts have one of the following two forms:
|
1023 |
|
|
|
1024 |
|
|
-- XSnnn
|
1025 |
|
|
|
1026 |
|
|
-- Here nnn is a constant value, encoded as a decimal integer
|
1027 |
|
|
-- (pos value for enumeration type case). Negative values have
|
1028 |
|
|
-- a trailing 'm' as usual.
|
1029 |
|
|
|
1030 |
|
|
-- XSe
|
1031 |
|
|
|
1032 |
|
|
-- Here e is the (unqualified) name of a constant entity in the
|
1033 |
|
|
-- same scope as the renaming which contains the subscript value.
|
1034 |
|
|
|
1035 |
|
|
-- Slice
|
1036 |
|
|
|
1037 |
|
|
-- For the slice case, we have two entries. The first is for the
|
1038 |
|
|
-- lower bound of the slice, and has the form:
|
1039 |
|
|
|
1040 |
|
|
-- XLnnn
|
1041 |
|
|
-- XLe
|
1042 |
|
|
|
1043 |
|
|
-- Specifies the lower bound, using exactly the same encoding as
|
1044 |
|
|
-- for an XS subscript as described above.
|
1045 |
|
|
|
1046 |
|
|
-- Then the upper bound appears in the usual XSnnn/XSe form
|
1047 |
|
|
|
1048 |
|
|
-- Selected component
|
1049 |
|
|
|
1050 |
|
|
-- For a selected component, we have a single entry
|
1051 |
|
|
|
1052 |
|
|
-- XRf
|
1053 |
|
|
|
1054 |
|
|
-- Here f is the field name for the selection
|
1055 |
|
|
|
1056 |
|
|
-- For an explicit dereference (.all), we have a single entry
|
1057 |
|
|
|
1058 |
|
|
-- XA
|
1059 |
|
|
|
1060 |
|
|
-- As an example, consider the declarations:
|
1061 |
|
|
|
1062 |
|
|
-- package p is
|
1063 |
|
|
-- type q is record
|
1064 |
|
|
-- m : string (2 .. 5);
|
1065 |
|
|
-- end record;
|
1066 |
|
|
--
|
1067 |
|
|
-- type r is array (1 .. 10, 1 .. 20) of q;
|
1068 |
|
|
--
|
1069 |
|
|
-- g : r;
|
1070 |
|
|
--
|
1071 |
|
|
-- z : string renames g (1,5).m(2 ..3)
|
1072 |
|
|
-- end p;
|
1073 |
|
|
|
1074 |
|
|
-- The generated variable entity would appear as
|
1075 |
|
|
|
1076 |
|
|
-- p__z___XR_p__g___XEXS1XS5XRmXL2XS3 : _renaming_type;
|
1077 |
|
|
-- p__g___XE--------------------outer entity is g
|
1078 |
|
|
-- XS1-----------------first subscript for g
|
1079 |
|
|
-- XS5--------------second subscript for g
|
1080 |
|
|
-- XRm-----------select field m
|
1081 |
|
|
-- XL2--------lower bound of slice
|
1082 |
|
|
-- XS3-----upper bound of slice
|
1083 |
|
|
|
1084 |
|
|
-- Note that the type of the variable is a special internal type named
|
1085 |
|
|
-- _renaming_type. This type is an arbitrary type of zero size created
|
1086 |
|
|
-- in package Standard (see cstand.adb) and is ignored by the debugger.
|
1087 |
|
|
|
1088 |
|
|
function Debug_Renaming_Declaration (N : Node_Id) return Node_Id;
|
1089 |
|
|
-- The argument N is a renaming declaration. The result is a variable
|
1090 |
|
|
-- declaration as described in the above paragraphs. If N is not a special
|
1091 |
|
|
-- debug declaration, then Empty is returned.
|
1092 |
|
|
|
1093 |
|
|
---------------------------
|
1094 |
|
|
-- Packed Array Encoding --
|
1095 |
|
|
---------------------------
|
1096 |
|
|
|
1097 |
|
|
-- For every constrained packed array, two types are created, and both
|
1098 |
|
|
-- appear in the debugging output:
|
1099 |
|
|
|
1100 |
|
|
-- The original declared array type is a perfectly normal array type,
|
1101 |
|
|
-- and its index bounds indicate the original bounds of the array.
|
1102 |
|
|
|
1103 |
|
|
-- The corresponding packed array type, which may be a modular type, or
|
1104 |
|
|
-- may be an array of bytes type (see Exp_Pakd for full details). This
|
1105 |
|
|
-- is the type that is actually used in the generated code and for
|
1106 |
|
|
-- debugging information for all objects of the packed type.
|
1107 |
|
|
|
1108 |
|
|
-- The name of the corresponding packed array type is:
|
1109 |
|
|
|
1110 |
|
|
-- ttt___XPnnn
|
1111 |
|
|
|
1112 |
|
|
-- where
|
1113 |
|
|
|
1114 |
|
|
-- ttt is the name of the original declared array
|
1115 |
|
|
-- nnn is the component size in bits (1-31)
|
1116 |
|
|
|
1117 |
|
|
-- When the debugger sees that an object is of a type that is encoded in
|
1118 |
|
|
-- this manner, it can use the original type to determine the bounds and
|
1119 |
|
|
-- the component type, and the component size to determine the packing
|
1120 |
|
|
-- details.
|
1121 |
|
|
|
1122 |
|
|
-- For an unconstrained packed array, the corresponding packed array type
|
1123 |
|
|
-- is neither used in the generated code nor for debugging information,
|
1124 |
|
|
-- only the original type is used. In order to convey the packing in the
|
1125 |
|
|
-- debugging information, the compiler generates the associated fat- and
|
1126 |
|
|
-- thin-pointer types (see the Pointers to Unconstrained Array section
|
1127 |
|
|
-- below) using the name of the corresponding packed array type as the
|
1128 |
|
|
-- base name, i.e. ttt___XPnnn___XUP and ttt___XPnnn___XUT respectively.
|
1129 |
|
|
|
1130 |
|
|
-- When the debugger sees that an object is of a type that is encoded in
|
1131 |
|
|
-- this manner, it can use the type of the fields to determine the bounds
|
1132 |
|
|
-- and the component type, and the component size to determine the packing
|
1133 |
|
|
-- details.
|
1134 |
|
|
|
1135 |
|
|
-------------------------------------------
|
1136 |
|
|
-- Packed Array Representation in Memory --
|
1137 |
|
|
-------------------------------------------
|
1138 |
|
|
|
1139 |
|
|
-- Packed arrays are represented in tightly packed form, with no extra
|
1140 |
|
|
-- bits between components. This is true even when the component size
|
1141 |
|
|
-- is not a factor of the storage unit size, so that as a result it is
|
1142 |
|
|
-- possible for components to cross storage unit boundaries.
|
1143 |
|
|
|
1144 |
|
|
-- The layout in storage is identical, regardless of whether the
|
1145 |
|
|
-- implementation type is a modular type or an array-of-bytes type.
|
1146 |
|
|
-- See Exp_Pakd for details of how these implementation types are used,
|
1147 |
|
|
-- but for the purpose of the debugger, only the starting address of
|
1148 |
|
|
-- the object in memory is significant.
|
1149 |
|
|
|
1150 |
|
|
-- The following example should show clearly how the packing works in
|
1151 |
|
|
-- the little-endian and big-endian cases:
|
1152 |
|
|
|
1153 |
|
|
-- type B is range 0 .. 7;
|
1154 |
|
|
-- for B'Size use 3;
|
1155 |
|
|
|
1156 |
|
|
-- type BA is array (0 .. 5) of B;
|
1157 |
|
|
-- pragma Pack (BA);
|
1158 |
|
|
|
1159 |
|
|
-- BV : constant BA := (1,2,3,4,5,6);
|
1160 |
|
|
|
1161 |
|
|
-- Little endian case
|
1162 |
|
|
|
1163 |
|
|
-- BV'Address + 2 BV'Address + 1 BV'Address + 0
|
1164 |
|
|
-- +-----------------+-----------------+-----------------+
|
1165 |
|
|
-- | ? ? ? ? ? ? 1 1 | 0 1 0 1 1 0 0 0 | 1 1 0 1 0 0 0 1 |
|
1166 |
|
|
-- +-----------------+-----------------+-----------------+
|
1167 |
|
|
-- <---------> <-----> <---> <---> <-----> <---> <--->
|
1168 |
|
|
-- unused bits BV(5) BV(4) BV(3) BV(2) BV(1) BV(0)
|
1169 |
|
|
--
|
1170 |
|
|
-- Big endian case
|
1171 |
|
|
--
|
1172 |
|
|
-- BV'Address + 0 BV'Address + 1 BV'Address + 2
|
1173 |
|
|
-- +-----------------+-----------------+-----------------+
|
1174 |
|
|
-- | 0 0 1 0 1 0 0 1 | 1 1 0 0 1 0 1 1 | 1 0 ? ? ? ? ? ? |
|
1175 |
|
|
-- +-----------------+-----------------+-----------------+
|
1176 |
|
|
-- <---> <---> <-----> <---> <---> <-----> <--------->
|
1177 |
|
|
-- BV(0) BV(1) BV(2) BV(3) BV(4) BV(5) unused bits
|
1178 |
|
|
|
1179 |
|
|
-- Note that if a modular type is used to represent the array, the
|
1180 |
|
|
-- allocation in memory is not the same as a normal modular type. The
|
1181 |
|
|
-- difference occurs when the allocated object is larger than the size of
|
1182 |
|
|
-- the array. For a normal modular type, we extend the value on the left
|
1183 |
|
|
-- with zeroes.
|
1184 |
|
|
|
1185 |
|
|
-- For example, in the normal modular case, if we have a 6-bit modular
|
1186 |
|
|
-- type, declared as mod 2**6, and we allocate an 8-bit object for this
|
1187 |
|
|
-- type, then we extend the value with two bits on the most significant
|
1188 |
|
|
-- end, and in either the little-endian or big-endian case, the value 63 is
|
1189 |
|
|
-- represented as 00111111 in binary in memory.
|
1190 |
|
|
|
1191 |
|
|
-- For a modular type used to represent a packed array, the rule is
|
1192 |
|
|
-- different. In this case, if we have to extend the value, then we do it
|
1193 |
|
|
-- with undefined bits (which are not initialized and whose value is
|
1194 |
|
|
-- irrelevant to any generated code). Furthermore these bits are on the
|
1195 |
|
|
-- right (least significant bits) in the big-endian case, and on the left
|
1196 |
|
|
-- (most significant bits) in the little-endian case.
|
1197 |
|
|
|
1198 |
|
|
-- For example, if we have a packed boolean array of 6 bits, all set to
|
1199 |
|
|
-- True, stored in an 8-bit object, then the value in memory in binary is
|
1200 |
|
|
-- ??111111 in the little-endian case, and 111111?? in the big-endian case.
|
1201 |
|
|
|
1202 |
|
|
-- This is done so that the representation of packed arrays does not
|
1203 |
|
|
-- depend on whether we use a modular representation or array of bytes
|
1204 |
|
|
-- as previously described. This ensures that we can pass such values by
|
1205 |
|
|
-- reference in the case where a subprogram has to be able to handle values
|
1206 |
|
|
-- stored in either form.
|
1207 |
|
|
|
1208 |
|
|
-- Note that when we extract the value of such a modular packed array, we
|
1209 |
|
|
-- expect to retrieve only the relevant bits, so in this same example, when
|
1210 |
|
|
-- we extract the value we get 111111 in both cases, and the code generated
|
1211 |
|
|
-- by the front end assumes this although it does not assume that any high
|
1212 |
|
|
-- order bits are defined.
|
1213 |
|
|
|
1214 |
|
|
-- There are opportunities for optimization based on the knowledge that the
|
1215 |
|
|
-- unused bits are irrelevant for these type of packed arrays. For example
|
1216 |
|
|
-- if we have two such 6-bit-in-8-bit values and we do an assignment:
|
1217 |
|
|
|
1218 |
|
|
-- a := b;
|
1219 |
|
|
|
1220 |
|
|
-- Then logically, we extract the 6 bits and store only 6 bits in the
|
1221 |
|
|
-- result, but the back end is free to simply assign the entire 8-bits in
|
1222 |
|
|
-- this case, since we don't actually care about the undefined bits.
|
1223 |
|
|
-- However, in the equality case, it is important to ensure that the
|
1224 |
|
|
-- undefined bits do not participate in an equality test.
|
1225 |
|
|
|
1226 |
|
|
-- If a modular packed array value is assigned to a register, then
|
1227 |
|
|
-- logically it could always be held right justified, to avoid any need to
|
1228 |
|
|
-- shift, e.g. when doing comparisons. But probably this is a bad choice,
|
1229 |
|
|
-- as it would mean that an assignment such as a := above would require
|
1230 |
|
|
-- shifts when one value is in a register and the other value is in memory.
|
1231 |
|
|
|
1232 |
|
|
------------------------------------------------------
|
1233 |
|
|
-- Subprograms for Handling Packed Array Type Names --
|
1234 |
|
|
------------------------------------------------------
|
1235 |
|
|
|
1236 |
|
|
function Make_Packed_Array_Type_Name
|
1237 |
|
|
(Typ : Entity_Id;
|
1238 |
|
|
Csize : Uint)
|
1239 |
|
|
return Name_Id;
|
1240 |
|
|
-- This function is used in Exp_Pakd to create the name that is encoded as
|
1241 |
|
|
-- described above. The entity Typ provides the name ttt, and the value
|
1242 |
|
|
-- Csize is the component size that provides the nnn value.
|
1243 |
|
|
|
1244 |
|
|
--------------------------------------
|
1245 |
|
|
-- Pointers to Unconstrained Arrays --
|
1246 |
|
|
--------------------------------------
|
1247 |
|
|
|
1248 |
|
|
-- There are two kinds of pointers to arrays. The debugger can tell which
|
1249 |
|
|
-- format is in use by the form of the type of the pointer.
|
1250 |
|
|
|
1251 |
|
|
-- Fat Pointers
|
1252 |
|
|
|
1253 |
|
|
-- Fat pointers are represented as a struct with two fields. This
|
1254 |
|
|
-- struct has two distinguished field names:
|
1255 |
|
|
|
1256 |
|
|
-- P_ARRAY is a pointer to the array type. The name of this type is
|
1257 |
|
|
-- the unconstrained type followed by "___XUA". This array will have
|
1258 |
|
|
-- bounds which are the discriminants, and hence are unparsable, but
|
1259 |
|
|
-- will give the number of subscripts and the component type.
|
1260 |
|
|
|
1261 |
|
|
-- P_BOUNDS is a pointer to a struct, the name of whose type is the
|
1262 |
|
|
-- unconstrained array name followed by "___XUB" and which has
|
1263 |
|
|
-- fields of the form
|
1264 |
|
|
|
1265 |
|
|
-- LBn (n a decimal integer) lower bound of n'th dimension
|
1266 |
|
|
-- UBn (n a decimal integer) upper bound of n'th dimension
|
1267 |
|
|
|
1268 |
|
|
-- The bounds may be any integral type. In the case of an enumeration
|
1269 |
|
|
-- type, Enum_Rep values are used.
|
1270 |
|
|
|
1271 |
|
|
-- For a given unconstrained array type, the compiler will generate one
|
1272 |
|
|
-- fat-pointer type whose name is "arr___XUP", where "arr" is the name
|
1273 |
|
|
-- of the array type, and use it to represent the array type itself in
|
1274 |
|
|
-- the debugging information.
|
1275 |
|
|
|
1276 |
|
|
-- For each pointer to this unconstrained array type, the compiler will
|
1277 |
|
|
-- generate a typedef that points to the above "arr___XUP" fat-pointer
|
1278 |
|
|
-- type. As a consequence, when it comes to fat-pointer types:
|
1279 |
|
|
|
1280 |
|
|
-- 1. The type name is given by the typedef
|
1281 |
|
|
|
1282 |
|
|
-- 2. If the debugger is asked to output the type, the appropriate
|
1283 |
|
|
-- form is "access arr", except if the type name is "arr___XUP"
|
1284 |
|
|
-- for which it is the array definition.
|
1285 |
|
|
|
1286 |
|
|
-- Thin Pointers
|
1287 |
|
|
|
1288 |
|
|
-- The value of a thin pointer is a pointer to the second field of a
|
1289 |
|
|
-- structure with two fields. The name of this structure's type is
|
1290 |
|
|
-- "arr___XUT", where "arr" is the name of the unconstrained array
|
1291 |
|
|
-- type. Even though it actually points into middle of this structure,
|
1292 |
|
|
-- the thin pointer's type in debugging information is
|
1293 |
|
|
-- pointer-to-arr___XUT.
|
1294 |
|
|
|
1295 |
|
|
-- The first field of arr___XUT is named BOUNDS, and has a type named
|
1296 |
|
|
-- arr___XUB, with the structure described for such types in fat
|
1297 |
|
|
-- pointers, as described above.
|
1298 |
|
|
|
1299 |
|
|
-- The second field of arr___XUT is named ARRAY, and contains the
|
1300 |
|
|
-- actual array. Because this array has a dynamic size, determined by
|
1301 |
|
|
-- the BOUNDS field that precedes it, all of the information about
|
1302 |
|
|
-- arr___XUT is encoded in a parallel type named arr___XUT___XVE, with
|
1303 |
|
|
-- fields BOUNDS and ARRAY___XVL. As for previously described ___XVE
|
1304 |
|
|
-- types, ARRAY___XVL has a pointer-to-array type. However, the array
|
1305 |
|
|
-- type in this case is named arr___XUA and only its element type is
|
1306 |
|
|
-- meaningful, just as described for fat pointers.
|
1307 |
|
|
|
1308 |
|
|
--------------------------------------
|
1309 |
|
|
-- Tagged Types and Type Extensions --
|
1310 |
|
|
--------------------------------------
|
1311 |
|
|
|
1312 |
|
|
-- A type C derived from a tagged type P has a field named "_parent" of
|
1313 |
|
|
-- type P that contains its inherited fields. The type of this field is
|
1314 |
|
|
-- usually P (encoded as usual if it has a dynamic size), but may be a more
|
1315 |
|
|
-- distant ancestor, if P is a null extension of that type.
|
1316 |
|
|
|
1317 |
|
|
-- The type tag of a tagged type is a field named _tag, of type void*. If
|
1318 |
|
|
-- the type is derived from another tagged type, its _tag field is found in
|
1319 |
|
|
-- its _parent field.
|
1320 |
|
|
|
1321 |
|
|
-----------------------------
|
1322 |
|
|
-- Variant Record Encoding --
|
1323 |
|
|
-----------------------------
|
1324 |
|
|
|
1325 |
|
|
-- The variant part of a variant record is encoded as a single field in the
|
1326 |
|
|
-- enclosing record, whose name is:
|
1327 |
|
|
|
1328 |
|
|
-- discrim___XVN
|
1329 |
|
|
|
1330 |
|
|
-- where discrim is the unqualified name of the variant. This field name is
|
1331 |
|
|
-- built by gigi (not by code in this unit). For Unchecked_Union record,
|
1332 |
|
|
-- this discriminant will not appear in the record, and the debugger must
|
1333 |
|
|
-- proceed accordingly (basically it can treat this case as it would a C
|
1334 |
|
|
-- union).
|
1335 |
|
|
|
1336 |
|
|
-- The type corresponding to this field has a name that is obtained by
|
1337 |
|
|
-- concatenating the type name with the above string and is similar to a C
|
1338 |
|
|
-- union, in which each member of the union corresponds to one variant.
|
1339 |
|
|
-- However, unlike a C union, the size of the type may be variable even if
|
1340 |
|
|
-- each of the components are fixed size, since it includes a computation
|
1341 |
|
|
-- of which variant is present. In that case, it will be encoded as above
|
1342 |
|
|
-- and a type with the suffix "___XVN___XVU" will be present.
|
1343 |
|
|
|
1344 |
|
|
-- The name of the union member is encoded to indicate the choices, and
|
1345 |
|
|
-- is a string given by the following grammar:
|
1346 |
|
|
|
1347 |
|
|
-- union_name ::= {choice} | others_choice
|
1348 |
|
|
-- choice ::= simple_choice | range_choice
|
1349 |
|
|
-- simple_choice ::= S number
|
1350 |
|
|
-- range_choice ::= R number T number
|
1351 |
|
|
-- number ::= {decimal_digit} [m]
|
1352 |
|
|
-- others_choice ::= O (upper case letter O)
|
1353 |
|
|
|
1354 |
|
|
-- The m in a number indicates a negative value. As an example of this
|
1355 |
|
|
-- encoding scheme, the choice 1 .. 4 | 7 | -10 would be represented by
|
1356 |
|
|
|
1357 |
|
|
-- R1T4S7S10m
|
1358 |
|
|
|
1359 |
|
|
-- In the case of enumeration values, the values used are the actual
|
1360 |
|
|
-- representation values in the case where an enumeration type has an
|
1361 |
|
|
-- enumeration representation spec (i.e. they are values that correspond
|
1362 |
|
|
-- to the use of the Enum_Rep attribute).
|
1363 |
|
|
|
1364 |
|
|
-- The type of the inner record is given by the name of the union type (as
|
1365 |
|
|
-- above) concatenated with the above string. Since that type may itself be
|
1366 |
|
|
-- variable-sized, it may also be encoded as above with a new type with a
|
1367 |
|
|
-- further suffix of "___XVU".
|
1368 |
|
|
|
1369 |
|
|
-- As an example, consider:
|
1370 |
|
|
|
1371 |
|
|
-- type Var (Disc : Boolean := True) is record
|
1372 |
|
|
-- M : Integer;
|
1373 |
|
|
|
1374 |
|
|
-- case Disc is
|
1375 |
|
|
-- when True =>
|
1376 |
|
|
-- R : Integer;
|
1377 |
|
|
-- S : Integer;
|
1378 |
|
|
|
1379 |
|
|
-- when False =>
|
1380 |
|
|
-- T : Integer;
|
1381 |
|
|
-- end case;
|
1382 |
|
|
-- end record;
|
1383 |
|
|
|
1384 |
|
|
-- V1 : Var;
|
1385 |
|
|
|
1386 |
|
|
-- In this case, the type var is represented as a struct with three fields,
|
1387 |
|
|
-- the first two are "disc" and "m", representing the values of these
|
1388 |
|
|
-- record components.
|
1389 |
|
|
|
1390 |
|
|
-- The third field is a union of two types, with field names S1 and O. S1
|
1391 |
|
|
-- is a struct with fields "r" and "s", and O is a struct with fields "t".
|
1392 |
|
|
|
1393 |
|
|
------------------------------------------------
|
1394 |
|
|
-- Subprograms for Handling Variant Encodings --
|
1395 |
|
|
------------------------------------------------
|
1396 |
|
|
|
1397 |
|
|
procedure Get_Variant_Encoding (V : Node_Id);
|
1398 |
|
|
-- This procedure is called by Gigi with V being the variant node. The
|
1399 |
|
|
-- corresponding encoding string is returned in Name_Buffer with the length
|
1400 |
|
|
-- of the string in Name_Len, and an ASCII.NUL character stored following
|
1401 |
|
|
-- the name.
|
1402 |
|
|
|
1403 |
|
|
---------------------------------
|
1404 |
|
|
-- Subtypes of Variant Records --
|
1405 |
|
|
---------------------------------
|
1406 |
|
|
|
1407 |
|
|
-- A subtype of a variant record is represented by a type in which the
|
1408 |
|
|
-- union field from the base type is replaced by one of the possible
|
1409 |
|
|
-- values. For example, if we have:
|
1410 |
|
|
|
1411 |
|
|
-- type Var (Disc : Boolean := True) is record
|
1412 |
|
|
-- M : Integer;
|
1413 |
|
|
|
1414 |
|
|
-- case Disc is
|
1415 |
|
|
-- when True =>
|
1416 |
|
|
-- R : Integer;
|
1417 |
|
|
-- S : Integer;
|
1418 |
|
|
|
1419 |
|
|
-- when False =>
|
1420 |
|
|
-- T : Integer;
|
1421 |
|
|
-- end case;
|
1422 |
|
|
|
1423 |
|
|
-- end record;
|
1424 |
|
|
-- V1 : Var;
|
1425 |
|
|
-- V2 : Var (True);
|
1426 |
|
|
-- V3 : Var (False);
|
1427 |
|
|
|
1428 |
|
|
-- Here V2, for example, is represented with a subtype whose name is
|
1429 |
|
|
-- something like TvarS3b, which is a struct with three fields. The first
|
1430 |
|
|
-- two fields are "disc" and "m" as for the base type, and the third field
|
1431 |
|
|
-- is S1, which contains the fields "r" and "s".
|
1432 |
|
|
|
1433 |
|
|
-- The debugger should simply ignore structs with names of the form
|
1434 |
|
|
-- corresponding to variants, and consider the fields inside as belonging
|
1435 |
|
|
-- to the containing record.
|
1436 |
|
|
|
1437 |
|
|
-------------------------------------------
|
1438 |
|
|
-- Character literals in Character Types --
|
1439 |
|
|
-------------------------------------------
|
1440 |
|
|
|
1441 |
|
|
-- Character types are enumeration types at least one of whose enumeration
|
1442 |
|
|
-- literals is a character literal. Enumeration literals are usually simply
|
1443 |
|
|
-- represented using their identifier names. If the enumeration literal is
|
1444 |
|
|
-- a character literal, the name is encoded as described in the following
|
1445 |
|
|
-- paragraph.
|
1446 |
|
|
|
1447 |
|
|
-- A name QUhh, where each 'h' is a lower-case hexadecimal digit, stands
|
1448 |
|
|
-- for a character whose Unicode encoding is hh, and QWhhhh likewise stands
|
1449 |
|
|
-- for a wide character whose encoding is hhhh. The representation values
|
1450 |
|
|
-- are encoded as for ordinary enumeration literals (and have no necessary
|
1451 |
|
|
-- relationship to the values encoded in the names).
|
1452 |
|
|
|
1453 |
|
|
-- For example, given the type declaration
|
1454 |
|
|
|
1455 |
|
|
-- type x is (A, 'C', B);
|
1456 |
|
|
|
1457 |
|
|
-- the second enumeration literal would be named QU43 and the value
|
1458 |
|
|
-- assigned to it would be 1.
|
1459 |
|
|
|
1460 |
|
|
-----------------------------------------------
|
1461 |
|
|
-- Secondary Dispatch tables of tagged types --
|
1462 |
|
|
-----------------------------------------------
|
1463 |
|
|
|
1464 |
|
|
procedure Get_Secondary_DT_External_Name
|
1465 |
|
|
(Typ : Entity_Id;
|
1466 |
|
|
Ancestor_Typ : Entity_Id;
|
1467 |
|
|
Suffix_Index : Int);
|
1468 |
|
|
-- Set Name_Buffer and Name_Len to the external name of one secondary
|
1469 |
|
|
-- dispatch table of Typ. If the interface has been inherited from some
|
1470 |
|
|
-- ancestor then Ancestor_Typ is such node (in this case the secondary DT
|
1471 |
|
|
-- is needed to handle overridden primitives); if there is no such ancestor
|
1472 |
|
|
-- then Ancestor_Typ is equal to Typ.
|
1473 |
|
|
--
|
1474 |
|
|
-- Internal rule followed for the generation of the external name:
|
1475 |
|
|
--
|
1476 |
|
|
-- Case 1. If the secondary dispatch has not been inherited from some
|
1477 |
|
|
-- ancestor of Typ then the external name is composed as
|
1478 |
|
|
-- follows:
|
1479 |
|
|
-- External_Name (Typ) + Suffix_Number + 'P'
|
1480 |
|
|
--
|
1481 |
|
|
-- Case 2. if the secondary dispatch table has been inherited from some
|
1482 |
|
|
-- ancestor then the external name is composed as follows:
|
1483 |
|
|
-- External_Name (Typ) + '_' + External_Name (Ancestor_Typ)
|
1484 |
|
|
-- + Suffix_Number + 'P'
|
1485 |
|
|
--
|
1486 |
|
|
-- Note: We have to use the external names (instead of simply their names)
|
1487 |
|
|
-- to protect the frontend against programs that give the same name to all
|
1488 |
|
|
-- the interfaces and use the expanded name to reference them. The
|
1489 |
|
|
-- Suffix_Number is used to differentiate all the secondary dispatch
|
1490 |
|
|
-- tables of a given type.
|
1491 |
|
|
--
|
1492 |
|
|
-- Examples:
|
1493 |
|
|
--
|
1494 |
|
|
-- package Pkg1 is | package Pkg2 is | package Pkg3 is
|
1495 |
|
|
-- type Typ is | type Typ is | type Typ is
|
1496 |
|
|
-- interface; | interface; | interface;
|
1497 |
|
|
-- end Pkg1; | end Pkg; | end Pkg3;
|
1498 |
|
|
--
|
1499 |
|
|
-- with Pkg1, Pkg2, Pkg3;
|
1500 |
|
|
-- package Case_1 is
|
1501 |
|
|
-- type Typ is new Pkg1.Typ and Pkg2.Typ and Pkg3.Typ with ...
|
1502 |
|
|
-- end Case_1;
|
1503 |
|
|
--
|
1504 |
|
|
-- with Case_1;
|
1505 |
|
|
-- package Case_2 is
|
1506 |
|
|
-- type Typ is new Case_1.Typ with ...
|
1507 |
|
|
-- end Case_2;
|
1508 |
|
|
--
|
1509 |
|
|
-- These are the external names generated for Case_1.Typ (note that
|
1510 |
|
|
-- Pkg1.Typ is associated with the Primary Dispatch Table, because it
|
1511 |
|
|
-- is the parent of this type, and hence no external name is
|
1512 |
|
|
-- generated for it).
|
1513 |
|
|
-- case_1__typ0P (associated with Pkg2.Typ)
|
1514 |
|
|
-- case_1__typ1P (associated with Pkg3.Typ)
|
1515 |
|
|
--
|
1516 |
|
|
-- These are the external names generated for Case_2.Typ:
|
1517 |
|
|
-- case_2__typ_case_1__typ0P
|
1518 |
|
|
-- case_2__typ_case_1__typ1P
|
1519 |
|
|
|
1520 |
|
|
----------------------------
|
1521 |
|
|
-- Effect of Optimization --
|
1522 |
|
|
----------------------------
|
1523 |
|
|
|
1524 |
|
|
-- If the program is compiled with optimization on (e.g. -O1 switch
|
1525 |
|
|
-- specified), then there may be variations in the output from the above
|
1526 |
|
|
-- specification. In particular, objects may disappear from the output.
|
1527 |
|
|
-- This includes not only constants and variables that the program declares
|
1528 |
|
|
-- at the source level, but also the x___L and x___U constants created to
|
1529 |
|
|
-- describe the lower and upper bounds of subtypes with dynamic bounds.
|
1530 |
|
|
-- This means for example, that array bounds may disappear if optimization
|
1531 |
|
|
-- is turned on. The debugger is expected to recognize that these constants
|
1532 |
|
|
-- are missing and deal as best as it can with the limited information
|
1533 |
|
|
-- available.
|
1534 |
|
|
|
1535 |
|
|
---------------------------------
|
1536 |
|
|
-- GNAT Extensions to DWARF2/3 --
|
1537 |
|
|
---------------------------------
|
1538 |
|
|
|
1539 |
|
|
-- If the compiler switch "-gdwarf+" is specified, GNAT Vendor extensions
|
1540 |
|
|
-- to DWARF2/3 are generated, with the following variations from the above
|
1541 |
|
|
-- specification.
|
1542 |
|
|
|
1543 |
|
|
-- Change in the contents of the DW_AT_name attribute
|
1544 |
|
|
|
1545 |
|
|
-- The operators are represented in their natural form. (for example,
|
1546 |
|
|
-- the addition operator is written as "+" instead of "Oadd"). The
|
1547 |
|
|
-- component separator is "." instead of "__"
|
1548 |
|
|
|
1549 |
|
|
-- Introduction of DW_AT_GNAT_encoding, encoded with value 0x2301
|
1550 |
|
|
|
1551 |
|
|
-- Any debugging information entry representing a program entity, named
|
1552 |
|
|
-- or implicit, may have a DW_AT_GNAT_encoding attribute. The value of
|
1553 |
|
|
-- this attribute is a string representing the suffix internally added
|
1554 |
|
|
-- by GNAT for various purposes, mainly for representing debug
|
1555 |
|
|
-- information compatible with other formats. In particular this is
|
1556 |
|
|
-- useful for IDEs which need to filter out information internal to
|
1557 |
|
|
-- GNAT from their graphical interfaces.
|
1558 |
|
|
|
1559 |
|
|
-- If a debugging information entry has multiple encodings, all of them
|
1560 |
|
|
-- will be listed in DW_AT_GNAT_encoding using the list separator ':'.
|
1561 |
|
|
|
1562 |
|
|
-- Introduction of DW_AT_GNAT_descriptive_type, encoded with value 0x2302
|
1563 |
|
|
|
1564 |
|
|
-- Any debugging information entry representing a type may have a
|
1565 |
|
|
-- DW_AT_GNAT_descriptive_type attribute whose value is a reference,
|
1566 |
|
|
-- pointing to a debugging information entry representing another type
|
1567 |
|
|
-- associated to the type.
|
1568 |
|
|
|
1569 |
|
|
-- Modification of the contents of the DW_AT_producer string
|
1570 |
|
|
|
1571 |
|
|
-- When emitting full GNAT Vendor extensions to DWARF2/3, "-gdwarf+"
|
1572 |
|
|
-- is appended to the DW_AT_producer string.
|
1573 |
|
|
--
|
1574 |
|
|
-- When emitting only DW_AT_GNAT_descriptive_type, "-gdwarf+-" is
|
1575 |
|
|
-- appended to the DW_AT_producer string.
|
1576 |
|
|
|
1577 |
|
|
end Exp_Dbug;
|