* dbxout.c (current_file): Also wrap inside DBX_DEBUGGING_INFO ||
[official-gcc.git] / gcc / dwarfout.c
blob5200af5aaf65ec0466b203b53dd8e552f931dbb4
1 /* Output Dwarf format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003 Free Software Foundation, Inc.
4 Contributed by Ron Guilmette (rfg@monkeys.com) of Network Computing Devices.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING. If not, write to the Free
20 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
21 02111-1307, USA. */
25 Notes on the GNU Implementation of DWARF Debugging Information
26 --------------------------------------------------------------
27 Last Major Update: Sun Jul 17 08:17:42 PDT 1994 by rfg@segfault.us.com
28 ------------------------------------------------------------
30 This file describes special and unique aspects of the GNU implementation of
31 the DWARF Version 1 debugging information language, as provided in the GNU
32 version 2.x compiler(s).
34 For general information about the DWARF debugging information language,
35 you should obtain the DWARF version 1.1 specification document (and perhaps
36 also the DWARF version 2 draft specification document) developed by the
37 (now defunct) UNIX International Programming Languages Special Interest Group.
39 To obtain a copy of the DWARF Version 1 and/or DWARF Version 2
40 specification, visit the web page for the DWARF Version 2 committee, at
42 http://www.eagercon.com/dwarf/dwarf2std.htm
44 The generation of DWARF debugging information by the GNU version 2.x C
45 compiler has now been tested rather extensively for m88k, i386, i860, and
46 SPARC targets. The DWARF output of the GNU C compiler appears to inter-
47 operate well with the standard SVR4 SDB debugger on these kinds of target
48 systems (but of course, there are no guarantees).
50 DWARF 1 generation for the GNU g++ compiler is implemented, but limited.
51 C++ users should definitely use DWARF 2 instead.
53 Future plans for the dwarfout.c module of the GNU compiler(s) includes the
54 addition of full support for GNU FORTRAN. (This should, in theory, be a
55 lot simpler to add than adding support for g++... but we'll see.)
57 Many features of the DWARF version 2 specification have been adapted to
58 (and used in) the GNU implementation of DWARF (version 1). In most of
59 these cases, a DWARF version 2 approach is used in place of (or in addition
60 to) DWARF version 1 stuff simply because it is apparent that DWARF version
61 1 is not sufficiently expressive to provide the kinds of information which
62 may be necessary to support really robust debugging. In all of these cases
63 however, the use of DWARF version 2 features should not interfere in any
64 way with the interoperability (of GNU compilers) with generally available
65 "classic" (pre version 1) DWARF consumer tools (e.g. SVR4 SDB).
67 The DWARF generation enhancement for the GNU compiler(s) was initially
68 donated to the Free Software Foundation by Network Computing Devices.
69 (Thanks NCD!) Additional development and maintenance of dwarfout.c has
70 been largely supported (i.e. funded) by Intel Corporation. (Thanks Intel!)
72 If you have questions or comments about the DWARF generation feature, please
73 send mail to me <rfg@netcom.com>. I will be happy to investigate any bugs
74 reported and I may even provide fixes (but of course, I can make no promises).
76 The DWARF debugging information produced by GCC may deviate in a few minor
77 (but perhaps significant) respects from the DWARF debugging information
78 currently produced by other C compilers. A serious attempt has been made
79 however to conform to the published specifications, to existing practice,
80 and to generally accepted norms in the GNU implementation of DWARF.
82 ** IMPORTANT NOTE ** ** IMPORTANT NOTE ** ** IMPORTANT NOTE **
84 Under normal circumstances, the DWARF information generated by the GNU
85 compilers (in an assembly language file) is essentially impossible for
86 a human being to read. This fact can make it very difficult to debug
87 certain DWARF-related problems. In order to overcome this difficulty,
88 a feature has been added to dwarfout.c (enabled by the -dA
89 option) which causes additional comments to be placed into the assembly
90 language output file, out to the right-hand side of most bits of DWARF
91 material. The comments indicate (far more clearly that the obscure
92 DWARF hex codes do) what is actually being encoded in DWARF. Thus, the
93 -dA option can be highly useful for those who must study the
94 DWARF output from the GNU compilers in detail.
96 ---------
98 (Footnote: Within this file, the term `Debugging Information Entry' will
99 be abbreviated as `DIE'.)
102 Release Notes (aka known bugs)
103 -------------------------------
105 In one very obscure case involving dynamically sized arrays, the DWARF
106 "location information" for such an array may make it appear that the
107 array has been totally optimized out of existence, when in fact it
108 *must* actually exist. (This only happens when you are using *both* -g
109 *and* -O.) This is due to aggressive dead store elimination in the
110 compiler, and to the fact that the DECL_RTL expressions associated with
111 variables are not always updated to correctly reflect the effects of
112 GCC's aggressive dead store elimination.
114 -------------------------------
116 When attempting to set a breakpoint at the "start" of a function compiled
117 with -g1, the debugger currently has no way of knowing exactly where the
118 end of the prologue code for the function is. Thus, for most targets,
119 all the debugger can do is to set the breakpoint at the AT_low_pc address
120 for the function. But if you stop there and then try to look at one or
121 more of the formal parameter values, they may not have been "homed" yet,
122 so you may get inaccurate answers (or perhaps even addressing errors).
124 Some people may consider this simply a non-feature, but I consider it a
125 bug, and I hope to provide some GNU-specific attributes (on function
126 DIEs) which will specify the address of the end of the prologue and the
127 address of the beginning of the epilogue in a future release.
129 -------------------------------
131 It is believed at this time that old bugs relating to the AT_bit_offset
132 values for bit-fields have been fixed.
134 There may still be some very obscure bugs relating to the DWARF description
135 of type `long long' bit-fields for target machines (e.g. 80x86 machines)
136 where the alignment of type `long long' data objects is different from
137 (and less than) the size of a type `long long' data object.
139 Please report any problems with the DWARF description of bit-fields as you
140 would any other GCC bug. (Procedures for bug reporting are given in the
141 GNU C compiler manual.)
143 --------------------------------
145 At this time, GCC does not know how to handle the GNU C "nested functions"
146 extension. (See the GCC manual for more info on this extension to ANSI C.)
148 --------------------------------
150 The GNU compilers now represent inline functions (and inlined instances
151 thereof) in exactly the manner described by the current DWARF version 2
152 (draft) specification. The version 1 specification for handling inline
153 functions (and inlined instances) was known to be brain-damaged (by the
154 PLSIG) when the version 1 spec was finalized, but it was simply too late
155 in the cycle to get it removed before the version 1 spec was formally
156 released to the public (by UI).
158 --------------------------------
160 At this time, GCC does not generate the kind of really precise information
161 about the exact declared types of entities with signed integral types which
162 is required by the current DWARF draft specification.
164 Specifically, the current DWARF draft specification seems to require that
165 the type of a non-unsigned integral bit-field member of a struct or union
166 type be represented as either a "signed" type or as a "plain" type,
167 depending upon the exact set of keywords that were used in the
168 type specification for the given bit-field member. It was felt (by the
169 UI/PLSIG) that this distinction between "plain" and "signed" integral types
170 could have some significance (in the case of bit-fields) because ANSI C
171 does not constrain the signedness of a plain bit-field, whereas it does
172 constrain the signedness of an explicitly "signed" bit-field. For this
173 reason, the current DWARF specification calls for compilers to produce
174 type information (for *all* integral typed entities... not just bit-fields)
175 which explicitly indicates the signedness of the relevant type to be
176 "signed" or "plain" or "unsigned".
178 Unfortunately, the GNU DWARF implementation is currently incapable of making
179 such distinctions.
181 --------------------------------
184 Known Interoperability Problems
185 -------------------------------
187 Although the GNU implementation of DWARF conforms (for the most part) with
188 the current UI/PLSIG DWARF version 1 specification (with many compatible
189 version 2 features added in as "vendor specific extensions" just for good
190 measure) there are a few known cases where GCC's DWARF output can cause
191 some confusion for "classic" (pre version 1) DWARF consumers such as the
192 System V Release 4 SDB debugger. These cases are described in this section.
194 --------------------------------
196 The DWARF version 1 specification includes the fundamental type codes
197 FT_ext_prec_float, FT_complex, FT_dbl_prec_complex, and FT_ext_prec_complex.
198 Since GNU C is only a C compiler (and since C doesn't provide any "complex"
199 data types) the only one of these fundamental type codes which GCC ever
200 generates is FT_ext_prec_float. This fundamental type code is generated
201 by GCC for the `long double' data type. Unfortunately, due to an apparent
202 bug in the SVR4 SDB debugger, SDB can become very confused wherever any
203 attempt is made to print a variable, parameter, or field whose type was
204 given in terms of FT_ext_prec_float.
206 (Actually, SVR4 SDB fails to understand *any* of the four fundamental type
207 codes mentioned here. This will fact will cause additional problems when
208 there is a GNU FORTRAN front-end.)
210 --------------------------------
212 In general, it appears that SVR4 SDB is not able to effectively ignore
213 fundamental type codes in the "implementation defined" range. This can
214 cause problems when a program being debugged uses the `long long' data
215 type (or the signed or unsigned varieties thereof) because these types
216 are not defined by ANSI C, and thus, GCC must use its own private fundamental
217 type codes (from the implementation-defined range) to represent these types.
219 --------------------------------
222 General GNU DWARF extensions
223 ----------------------------
225 In the current DWARF version 1 specification, no mechanism is specified by
226 which accurate information about executable code from include files can be
227 properly (and fully) described. (The DWARF version 2 specification *does*
228 specify such a mechanism, but it is about 10 times more complicated than
229 it needs to be so I'm not terribly anxious to try to implement it right
230 away.)
232 In the GNU implementation of DWARF version 1, a fully downward-compatible
233 extension has been implemented which permits the GNU compilers to specify
234 which executable lines come from which files. This extension places
235 additional information (about source file names) in GNU-specific sections
236 (which should be totally ignored by all non-GNU DWARF consumers) so that
237 this extended information can be provided (to GNU DWARF consumers) in a way
238 which is totally transparent (and invisible) to non-GNU DWARF consumers
239 (e.g. the SVR4 SDB debugger). The additional information is placed *only*
240 in specialized GNU-specific sections, where it should never even be seen
241 by non-GNU DWARF consumers.
243 To understand this GNU DWARF extension, imagine that the sequence of entries
244 in the .lines section is broken up into several subsections. Each contiguous
245 sequence of .line entries which relates to a sequence of lines (or statements)
246 from one particular file (either a `base' file or an `include' file) could
247 be called a `line entries chunk' (LEC).
249 For each LEC there is one entry in the .debug_srcinfo section.
251 Each normal entry in the .debug_srcinfo section consists of two 4-byte
252 words of data as follows:
254 (1) The starting address (relative to the entire .line section)
255 of the first .line entry in the relevant LEC.
257 (2) The starting address (relative to the entire .debug_sfnames
258 section) of a NUL terminated string representing the
259 relevant filename. (This filename name be either a
260 relative or an absolute filename, depending upon how the
261 given source file was located during compilation.)
263 Obviously, each .debug_srcinfo entry allows you to find the relevant filename,
264 and it also points you to the first .line entry that was generated as a result
265 of having compiled a given source line from the given source file.
267 Each subsequent .line entry should also be assumed to have been produced
268 as a result of compiling yet more lines from the same file. The end of
269 any given LEC is easily found by looking at the first 4-byte pointer in
270 the *next* .debug_srcinfo entry. That next .debug_srcinfo entry points
271 to a new and different LEC, so the preceding LEC (implicitly) must have
272 ended with the last .line section entry which occurs at the 2 1/2 words
273 just before the address given in the first pointer of the new .debug_srcinfo
274 entry.
276 The following picture may help to clarify this feature. Let's assume that
277 `LE' stands for `.line entry'. Also, assume that `* 'stands for a pointer.
280 .line section .debug_srcinfo section .debug_sfnames section
281 ----------------------------------------------------------------
283 LE <---------------------- *
284 LE * -----------------> "foobar.c" <---
285 LE |
286 LE |
287 LE <---------------------- * |
288 LE * -----------------> "foobar.h" <| |
289 LE | |
290 LE | |
291 LE <---------------------- * | |
292 LE * -----------------> "inner.h" | |
293 LE | |
294 LE <---------------------- * | |
295 LE * ------------------------------- |
296 LE |
297 LE |
298 LE |
299 LE |
300 LE <---------------------- * |
301 LE * -----------------------------------
306 In effect, each entry in the .debug_srcinfo section points to *both* a
307 filename (in the .debug_sfnames section) and to the start of a block of
308 consecutive LEs (in the .line section).
310 Note that just like in the .line section, there are specialized first and
311 last entries in the .debug_srcinfo section for each object file. These
312 special first and last entries for the .debug_srcinfo section are very
313 different from the normal .debug_srcinfo section entries. They provide
314 additional information which may be helpful to a debugger when it is
315 interpreting the data in the .debug_srcinfo, .debug_sfnames, and .line
316 sections.
318 The first entry in the .debug_srcinfo section for each compilation unit
319 consists of five 4-byte words of data. The contents of these five words
320 should be interpreted (by debuggers) as follows:
322 (1) The starting address (relative to the entire .line section)
323 of the .line section for this compilation unit.
325 (2) The starting address (relative to the entire .debug_sfnames
326 section) of the .debug_sfnames section for this compilation
327 unit.
329 (3) The starting address (in the execution virtual address space)
330 of the .text section for this compilation unit.
332 (4) The ending address plus one (in the execution virtual address
333 space) of the .text section for this compilation unit.
335 (5) The date/time (in seconds since midnight 1/1/70) at which the
336 compilation of this compilation unit occurred. This value
337 should be interpreted as an unsigned quantity because gcc
338 might be configured to generate a default value of 0xffffffff
339 in this field (in cases where it is desired to have object
340 files created at different times from identical source files
341 be byte-for-byte identical). By default, these timestamps
342 are *not* generated by dwarfout.c (so that object files
343 compiled at different times will be byte-for-byte identical).
344 If you wish to enable this "timestamp" feature however, you
345 can simply place a #define for the symbol `DWARF_TIMESTAMPS'
346 in your target configuration file and then rebuild the GNU
347 compiler(s).
349 Note that the first string placed into the .debug_sfnames section for each
350 compilation unit is the name of the directory in which compilation occurred.
351 This string ends with a `/' (to help indicate that it is the pathname of a
352 directory). Thus, the second word of each specialized initial .debug_srcinfo
353 entry for each compilation unit may be used as a pointer to the (string)
354 name of the compilation directory, and that string may in turn be used to
355 "absolutize" any relative pathnames which may appear later on in the
356 .debug_sfnames section entries for the same compilation unit.
358 The fifth and last word of each specialized starting entry for a compilation
359 unit in the .debug_srcinfo section may (depending upon your configuration)
360 indicate the date/time of compilation, and this may be used (by a debugger)
361 to determine if any of the source files which contributed code to this
362 compilation unit are newer than the object code for the compilation unit
363 itself. If so, the debugger may wish to print an "out-of-date" warning
364 about the compilation unit.
366 The .debug_srcinfo section associated with each compilation will also have
367 a specialized terminating entry. This terminating .debug_srcinfo section
368 entry will consist of the following two 4-byte words of data:
370 (1) The offset, measured from the start of the .line section to
371 the beginning of the terminating entry for the .line section.
373 (2) A word containing the value 0xffffffff.
375 --------------------------------
377 In the current DWARF version 1 specification, no mechanism is specified by
378 which information about macro definitions and un-definitions may be provided
379 to the DWARF consumer.
381 The DWARF version 2 (draft) specification does specify such a mechanism.
382 That specification was based on the GNU ("vendor specific extension")
383 which provided some support for macro definitions and un-definitions,
384 but the "official" DWARF version 2 (draft) specification mechanism for
385 handling macros and the GNU implementation have diverged somewhat. I
386 plan to update the GNU implementation to conform to the "official"
387 DWARF version 2 (draft) specification as soon as I get time to do that.
389 Note that in the GNU implementation, additional information about macro
390 definitions and un-definitions is *only* provided when the -g3 level of
391 debug-info production is selected. (The default level is -g2 and the
392 plain old -g option is considered to be identical to -g2.)
394 GCC records information about macro definitions and undefinitions primarily
395 in a section called the .debug_macinfo section. Normal entries in the
396 .debug_macinfo section consist of the following three parts:
398 (1) A special "type" byte.
400 (2) A 3-byte line-number/filename-offset field.
402 (3) A NUL terminated string.
404 The interpretation of the second and third parts is dependent upon the
405 value of the leading (type) byte.
407 The type byte may have one of four values depending upon the type of the
408 .debug_macinfo entry which follows. The 1-byte MACINFO type codes presently
409 used, and their meanings are as follows:
411 MACINFO_start A base file or an include file starts here.
412 MACINFO_resume The current base or include file ends here.
413 MACINFO_define A #define directive occurs here.
414 MACINFO_undef A #undef directive occur here.
416 (Note that the MACINFO_... codes mentioned here are simply symbolic names
417 for constants which are defined in the GNU dwarf.h file.)
419 For MACINFO_define and MACINFO_undef entries, the second (3-byte) field
420 contains the number of the source line (relative to the start of the current
421 base source file or the current include files) when the #define or #undef
422 directive appears. For a MACINFO_define entry, the following string field
423 contains the name of the macro which is defined, followed by its definition.
424 Note that the definition is always separated from the name of the macro
425 by at least one whitespace character. For a MACINFO_undef entry, the
426 string which follows the 3-byte line number field contains just the name
427 of the macro which is being undef'ed.
429 For a MACINFO_start entry, the 3-byte field following the type byte contains
430 the offset, relative to the start of the .debug_sfnames section for the
431 current compilation unit, of a string which names the new source file which
432 is beginning its inclusion at this point. Following that 3-byte field,
433 each MACINFO_start entry always contains a zero length NUL terminated
434 string.
436 For a MACINFO_resume entry, the 3-byte field following the type byte contains
437 the line number WITHIN THE INCLUDING FILE at which the inclusion of the
438 current file (whose inclusion ends here) was initiated. Following that
439 3-byte field, each MACINFO_resume entry always contains a zero length NUL
440 terminated string.
442 Each set of .debug_macinfo entries for each compilation unit is terminated
443 by a special .debug_macinfo entry consisting of a 4-byte zero value followed
444 by a single NUL byte.
446 --------------------------------
448 In the current DWARF draft specification, no provision is made for providing
449 a separate level of (limited) debugging information necessary to support
450 tracebacks (only) through fully-debugged code (e.g. code in system libraries).
452 A proposal to define such a level was submitted (by me) to the UI/PLSIG.
453 This proposal was rejected by the UI/PLSIG for inclusion into the DWARF
454 version 1 specification for two reasons. First, it was felt (by the PLSIG)
455 that the issues involved in supporting a "traceback only" subset of DWARF
456 were not well understood. Second, and perhaps more importantly, the PLSIG
457 is already having enough trouble agreeing on what it means to be "conforming"
458 to the DWARF specification, and it was felt that trying to specify multiple
459 different *levels* of conformance would only complicate our discussions of
460 this already divisive issue. Nonetheless, the GNU implementation of DWARF
461 provides an abbreviated "traceback only" level of debug-info production for
462 use with fully-debugged "system library" code. This level should only be
463 used for fully debugged system library code, and even then, it should only
464 be used where there is a very strong need to conserve disk space. This
465 abbreviated level of debug-info production can be used by specifying the
466 -g1 option on the compilation command line.
468 --------------------------------
470 As mentioned above, the GNU implementation of DWARF currently uses the DWARF
471 version 2 (draft) approach for inline functions (and inlined instances
472 thereof). This is used in preference to the version 1 approach because
473 (quite simply) the version 1 approach is highly brain-damaged and probably
474 unworkable.
476 --------------------------------
479 GNU DWARF Representation of GNU C Extensions to ANSI C
480 ------------------------------------------------------
482 The file dwarfout.c has been designed and implemented so as to provide
483 some reasonable DWARF representation for each and every declarative
484 construct which is accepted by the GNU C compiler. Since the GNU C
485 compiler accepts a superset of ANSI C, this means that there are some
486 cases in which the DWARF information produced by GCC must take some
487 liberties in improvising DWARF representations for declarations which
488 are only valid in (extended) GNU C.
490 In particular, GNU C provides at least three significant extensions to
491 ANSI C when it comes to declarations. These are (1) inline functions,
492 and (2) dynamic arrays, and (3) incomplete enum types. (See the GCC
493 manual for more information on these GNU extensions to ANSI C.) When
494 used, these GNU C extensions are represented (in the generated DWARF
495 output of GCC) in the most natural and intuitively obvious ways.
497 In the case of inline functions, the DWARF representation is exactly as
498 called for in the DWARF version 2 (draft) specification for an identical
499 function written in C++; i.e. we "reuse" the representation of inline
500 functions which has been defined for C++ to support this GNU C extension.
502 In the case of dynamic arrays, we use the most obvious representational
503 mechanism available; i.e. an array type in which the upper bound of
504 some dimension (usually the first and only dimension) is a variable
505 rather than a constant. (See the DWARF version 1 specification for more
506 details.)
508 In the case of incomplete enum types, such types are represented simply
509 as TAG_enumeration_type DIEs which DO NOT contain either AT_byte_size
510 attributes or AT_element_list attributes.
512 --------------------------------
515 Future Directions
516 -----------------
518 The codes, formats, and other paraphernalia necessary to provide proper
519 support for symbolic debugging for the C++ language are still being worked
520 on by the UI/PLSIG. The vast majority of the additions to DWARF which will
521 be needed to completely support C++ have already been hashed out and agreed
522 upon, but a few small issues (e.g. anonymous unions, access declarations)
523 are still being discussed. Also, we in the PLSIG are still discussing
524 whether or not we need to do anything special for C++ templates. (At this
525 time it is not yet clear whether we even need to do anything special for
526 these.)
528 With regard to FORTRAN, the UI/PLSIG has defined what is believed to be a
529 complete and sufficient set of codes and rules for adequately representing
530 all of FORTRAN 77, and most of Fortran 90 in DWARF. While some support for
531 this has been implemented in dwarfout.c, further implementation and testing
532 is needed.
534 GNU DWARF support for other languages (i.e. Pascal and Modula) is a moot
535 issue until there are GNU front-ends for these other languages.
537 As currently defined, DWARF only describes a (binary) language which can
538 be used to communicate symbolic debugging information from a compiler
539 through an assembler and a linker, to a debugger. There is no clear
540 specification of what processing should be (or must be) done by the
541 assembler and/or the linker. Fortunately, the role of the assembler
542 is easily inferred (by anyone knowledgeable about assemblers) just by
543 looking at examples of assembly-level DWARF code. Sadly though, the
544 allowable (or required) processing steps performed by a linker are
545 harder to infer and (perhaps) even harder to agree upon. There are
546 several forms of very useful `post-processing' steps which intelligent
547 linkers *could* (in theory) perform on object files containing DWARF,
548 but any and all such link-time transformations are currently both disallowed
549 and unspecified.
551 In particular, possible link-time transformations of DWARF code which could
552 provide significant benefits include (but are not limited to):
554 Commonization of duplicate DIEs obtained from multiple input
555 (object) files.
557 Cross-compilation type checking based upon DWARF type information
558 for objects and functions.
560 Other possible `compacting' transformations designed to save disk
561 space and to reduce linker & debugger I/O activity.
565 #include "config.h"
566 #include "system.h"
567 #include "coretypes.h"
568 #include "tm.h"
570 #ifdef DWARF_DEBUGGING_INFO
571 #include "dwarf.h"
572 #include "tree.h"
573 #include "flags.h"
574 #include "function.h"
575 #include "rtl.h"
576 #include "hard-reg-set.h"
577 #include "insn-config.h"
578 #include "reload.h"
579 #include "output.h"
580 #include "dwarf2asm.h"
581 #include "toplev.h"
582 #include "tm_p.h"
583 #include "debug.h"
584 #include "target.h"
585 #include "langhooks.h"
587 /* NOTE: In the comments in this file, many references are made to
588 so called "Debugging Information Entries". For the sake of brevity,
589 this term is abbreviated to `DIE' throughout the remainder of this
590 file. */
592 /* Note that the implementation of C++ support herein is (as yet) unfinished.
593 If you want to try to complete it, more power to you. */
595 /* How to start an assembler comment. */
596 #ifndef ASM_COMMENT_START
597 #define ASM_COMMENT_START ";#"
598 #endif
600 /* Define a macro which returns nonzero for any tagged type which is
601 used (directly or indirectly) in the specification of either some
602 function's return type or some formal parameter of some function.
603 We use this macro when we are operating in "terse" mode to help us
604 know what tagged types have to be represented in Dwarf (even in
605 terse mode) and which ones don't.
607 A flag bit with this meaning really should be a part of the normal
608 GCC ..._TYPE nodes, but at the moment, there is no such bit defined
609 for these nodes. For now, we have to just fake it. It it safe for
610 us to simply return zero for all complete tagged types (which will
611 get forced out anyway if they were used in the specification of some
612 formal or return type) and nonzero for all incomplete tagged types.
615 #define TYPE_USED_FOR_FUNCTION(tagged_type) (TYPE_SIZE (tagged_type) == 0)
617 /* Define a macro which returns nonzero for a TYPE_DECL which was
618 implicitly generated for a tagged type.
620 Note that unlike the gcc front end (which generates a NULL named
621 TYPE_DECL node for each complete tagged type, each array type, and
622 each function type node created) the g++ front end generates a
623 _named_ TYPE_DECL node for each tagged type node created.
624 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
625 generate a DW_TAG_typedef DIE for them. */
626 #define TYPE_DECL_IS_STUB(decl) \
627 (DECL_NAME (decl) == NULL \
628 || (DECL_ARTIFICIAL (decl) \
629 && is_tagged_type (TREE_TYPE (decl)) \
630 && decl == TYPE_STUB_DECL (TREE_TYPE (decl))))
632 /* Maximum size (in bytes) of an artificially generated label. */
634 #define MAX_ARTIFICIAL_LABEL_BYTES 30
636 /* Structure to keep track of source filenames. */
638 struct filename_entry {
639 unsigned number;
640 const char * name;
643 typedef struct filename_entry filename_entry;
645 /* Pointer to an array of elements, each one having the structure above. */
647 static filename_entry *filename_table;
649 /* Total number of entries in the table (i.e. array) pointed to by
650 `filename_table'. This is the *total* and includes both used and
651 unused slots. */
653 static unsigned ft_entries_allocated;
655 /* Number of entries in the filename_table which are actually in use. */
657 static unsigned ft_entries;
659 /* Size (in elements) of increments by which we may expand the filename
660 table. Actually, a single hunk of space of this size should be enough
661 for most typical programs. */
663 #define FT_ENTRIES_INCREMENT 64
665 /* Local pointer to the name of the main input file. Initialized in
666 dwarfout_init. */
668 static const char *primary_filename;
670 /* Counter to generate unique names for DIEs. */
672 static unsigned next_unused_dienum = 1;
674 /* Number of the DIE which is currently being generated. */
676 static unsigned current_dienum;
678 /* Number to use for the special "pubname" label on the next DIE which
679 represents a function or data object defined in this compilation
680 unit which has "extern" linkage. */
682 static int next_pubname_number = 0;
684 #define NEXT_DIE_NUM pending_sibling_stack[pending_siblings-1]
686 /* Pointer to a dynamically allocated list of pre-reserved and still
687 pending sibling DIE numbers. Note that this list will grow as needed. */
689 static unsigned *pending_sibling_stack;
691 /* Counter to keep track of the number of pre-reserved and still pending
692 sibling DIE numbers. */
694 static unsigned pending_siblings;
696 /* The currently allocated size of the above list (expressed in number of
697 list elements). */
699 static unsigned pending_siblings_allocated;
701 /* Size (in elements) of increments by which we may expand the pending
702 sibling stack. Actually, a single hunk of space of this size should
703 be enough for most typical programs. */
705 #define PENDING_SIBLINGS_INCREMENT 64
707 /* Nonzero if we are performing our file-scope finalization pass and if
708 we should force out Dwarf descriptions of any and all file-scope
709 tagged types which are still incomplete types. */
711 static int finalizing = 0;
713 /* A pointer to the base of a list of pending types which we haven't
714 generated DIEs for yet, but which we will have to come back to
715 later on. */
717 static tree *pending_types_list;
719 /* Number of elements currently allocated for the pending_types_list. */
721 static unsigned pending_types_allocated;
723 /* Number of elements of pending_types_list currently in use. */
725 static unsigned pending_types;
727 /* Size (in elements) of increments by which we may expand the pending
728 types list. Actually, a single hunk of space of this size should
729 be enough for most typical programs. */
731 #define PENDING_TYPES_INCREMENT 64
733 /* A pointer to the base of a list of incomplete types which might be
734 completed at some later time. */
736 static tree *incomplete_types_list;
738 /* Number of elements currently allocated for the incomplete_types_list. */
739 static unsigned incomplete_types_allocated;
741 /* Number of elements of incomplete_types_list currently in use. */
742 static unsigned incomplete_types;
744 /* Size (in elements) of increments by which we may expand the incomplete
745 types list. Actually, a single hunk of space of this size should
746 be enough for most typical programs. */
747 #define INCOMPLETE_TYPES_INCREMENT 64
749 /* Pointer to an artificial RECORD_TYPE which we create in dwarfout_init.
750 This is used in a hack to help us get the DIEs describing types of
751 formal parameters to come *after* all of the DIEs describing the formal
752 parameters themselves. That's necessary in order to be compatible
753 with what the brain-damaged svr4 SDB debugger requires. */
755 static tree fake_containing_scope;
757 /* A pointer to the ..._DECL node which we have most recently been working
758 on. We keep this around just in case something about it looks screwy
759 and we want to tell the user what the source coordinates for the actual
760 declaration are. */
762 static tree dwarf_last_decl;
764 /* A flag indicating that we are emitting the member declarations of a
765 class, so member functions and variables should not be entirely emitted.
766 This is a kludge to avoid passing a second argument to output_*_die. */
768 static int in_class;
770 /* Forward declarations for functions defined in this file. */
772 static void dwarfout_init (const char *);
773 static void dwarfout_finish (const char *);
774 static void dwarfout_define (unsigned int, const char *);
775 static void dwarfout_undef (unsigned int, const char *);
776 static void dwarfout_start_source_file (unsigned, const char *);
777 static void dwarfout_start_source_file_check (unsigned, const char *);
778 static void dwarfout_end_source_file (unsigned);
779 static void dwarfout_end_source_file_check (unsigned);
780 static void dwarfout_begin_block (unsigned, unsigned);
781 static void dwarfout_end_block (unsigned, unsigned);
782 static void dwarfout_end_epilogue (unsigned int, const char *);
783 static void dwarfout_source_line (unsigned int, const char *);
784 static void dwarfout_end_prologue (unsigned int, const char *);
785 static void dwarfout_end_function (unsigned int);
786 static void dwarfout_function_decl (tree);
787 static void dwarfout_global_decl (tree);
788 static void dwarfout_deferred_inline_function (tree);
789 static void dwarfout_file_scope_decl (tree , int);
790 static const char *dwarf_tag_name (unsigned);
791 static const char *dwarf_attr_name (unsigned);
792 static const char *dwarf_stack_op_name (unsigned);
793 static const char *dwarf_typemod_name (unsigned);
794 static const char *dwarf_fmt_byte_name (unsigned);
795 static const char *dwarf_fund_type_name (unsigned);
796 static tree decl_ultimate_origin (tree);
797 static tree block_ultimate_origin (tree);
798 static tree decl_class_context (tree);
799 #if 0
800 static void output_unsigned_leb128 (unsigned long);
801 static void output_signed_leb128 (long);
802 #endif
803 static int fundamental_type_code (tree);
804 static tree root_type_1 (tree, int);
805 static tree root_type (tree);
806 static void write_modifier_bytes_1 (tree, int, int, int);
807 static void write_modifier_bytes (tree, int, int);
808 static inline int type_is_fundamental (tree);
809 static void equate_decl_number_to_die_number (tree);
810 static inline void equate_type_number_to_die_number (tree);
811 static void output_reg_number (rtx);
812 static void output_mem_loc_descriptor (rtx);
813 static void output_loc_descriptor (rtx);
814 static void output_bound_representation (tree, unsigned, char);
815 static void output_enumeral_list (tree);
816 static inline HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
817 static inline tree field_type (tree);
818 static inline unsigned int simple_type_align_in_bits (tree);
819 static inline unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
820 static HOST_WIDE_INT field_byte_offset (tree);
821 static inline void sibling_attribute (void);
822 static void location_attribute (rtx);
823 static void data_member_location_attribute (tree);
824 static void const_value_attribute (rtx);
825 static void location_or_const_value_attribute (tree);
826 static inline void name_attribute (const char *);
827 static inline void fund_type_attribute (unsigned);
828 static void mod_fund_type_attribute (tree, int, int);
829 static inline void user_def_type_attribute (tree);
830 static void mod_u_d_type_attribute (tree, int, int);
831 #ifdef USE_ORDERING_ATTRIBUTE
832 static inline void ordering_attribute (unsigned);
833 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
834 static void subscript_data_attribute (tree);
835 static void byte_size_attribute (tree);
836 static inline void bit_offset_attribute (tree);
837 static inline void bit_size_attribute (tree);
838 static inline void element_list_attribute (tree);
839 static inline void stmt_list_attribute (const char *);
840 static inline void low_pc_attribute (const char *);
841 static inline void high_pc_attribute (const char *);
842 static inline void body_begin_attribute (const char *);
843 static inline void body_end_attribute (const char *);
844 static inline void language_attribute (unsigned);
845 static inline void member_attribute (tree);
846 #if 0
847 static inline void string_length_attribute (tree);
848 #endif
849 static inline void comp_dir_attribute (const char *);
850 static inline void sf_names_attribute (const char *);
851 static inline void src_info_attribute (const char *);
852 static inline void mac_info_attribute (const char *);
853 static inline void prototyped_attribute (tree);
854 static inline void producer_attribute (const char *);
855 static inline void inline_attribute (tree);
856 static inline void containing_type_attribute (tree);
857 static inline void abstract_origin_attribute (tree);
858 #ifdef DWARF_DECL_COORDINATES
859 static inline void src_coords_attribute (unsigned, unsigned);
860 #endif /* defined(DWARF_DECL_COORDINATES) */
861 static inline void pure_or_virtual_attribute (tree);
862 static void name_and_src_coords_attributes (tree);
863 static void type_attribute (tree, int, int);
864 static const char *type_tag (tree);
865 static inline void dienum_push (void);
866 static inline void dienum_pop (void);
867 static inline tree member_declared_type (tree);
868 static const char *function_start_label (tree);
869 static void output_array_type_die (void *);
870 static void output_set_type_die (void *);
871 #if 0
872 static void output_entry_point_die (void *);
873 #endif
874 static void output_inlined_enumeration_type_die (void *);
875 static void output_inlined_structure_type_die (void *);
876 static void output_inlined_union_type_die (void *);
877 static void output_enumeration_type_die (void *);
878 static void output_formal_parameter_die (void *);
879 static void output_global_subroutine_die (void *);
880 static void output_global_variable_die (void *);
881 static void output_label_die (void *);
882 static void output_lexical_block_die (void *);
883 static void output_inlined_subroutine_die (void *);
884 static void output_local_variable_die (void *);
885 static void output_member_die (void *);
886 #if 0
887 static void output_pointer_type_die (void *);
888 static void output_reference_type_die (void *);
889 #endif
890 static void output_ptr_to_mbr_type_die (void *);
891 static void output_compile_unit_die (void *);
892 static void output_string_type_die (void *);
893 static void output_inheritance_die (void *);
894 static void output_structure_type_die (void *);
895 static void output_local_subroutine_die (void *);
896 static void output_subroutine_type_die (void *);
897 static void output_typedef_die (void *);
898 static void output_union_type_die (void *);
899 static void output_unspecified_parameters_die (void *);
900 static void output_padded_null_die (void *);
901 static void output_die (void (*)(void *), void *);
902 static void end_sibling_chain (void);
903 static void output_formal_types (tree);
904 static void pend_type (tree);
905 static int type_ok_for_scope (tree, tree);
906 static void output_pending_types_for_scope (tree);
907 static void output_type (tree, tree);
908 static void output_tagged_type_instantiation (tree);
909 static void output_block (tree, int);
910 static void output_decls_for_scope (tree, int);
911 static void output_decl (tree, tree);
912 static void shuffle_filename_entry (filename_entry *);
913 static void generate_new_sfname_entry (void);
914 static unsigned lookup_filename (const char *);
915 static void generate_srcinfo_entry (unsigned, unsigned);
916 static void generate_macinfo_entry (unsigned int, rtx, const char *);
917 static int is_pseudo_reg (rtx);
918 static tree type_main_variant (tree);
919 static int is_tagged_type (tree);
920 static int is_redundant_typedef (tree);
921 static void add_incomplete_type (tree);
922 static void retry_incomplete_types (void);
924 /* Definitions of defaults for assembler-dependent names of various
925 pseudo-ops and section names.
927 Theses may be overridden in your tm.h file (if necessary) for your
928 particular assembler. The default values provided here correspond to
929 what is expected by "standard" AT&T System V.4 assemblers. */
931 #ifndef FILE_ASM_OP
932 #define FILE_ASM_OP "\t.file\t"
933 #endif
934 #ifndef SET_ASM_OP
935 #define SET_ASM_OP "\t.set\t"
936 #endif
938 /* Pseudo-ops for pushing the current section onto the section stack (and
939 simultaneously changing to a new section) and for popping back to the
940 section we were in immediately before this one. Note that most svr4
941 assemblers only maintain a one level stack... you can push all the
942 sections you want, but you can only pop out one level. (The sparc
943 svr4 assembler is an exception to this general rule.) That's
944 OK because we only use at most one level of the section stack herein. */
946 #ifndef PUSHSECTION_ASM_OP
947 #define PUSHSECTION_ASM_OP "\t.section\t"
948 #endif
949 #ifndef POPSECTION_ASM_OP
950 #define POPSECTION_ASM_OP "\t.previous"
951 #endif
953 /* The default format used by the ASM_OUTPUT_PUSH_SECTION macro (see below)
954 to print the PUSHSECTION_ASM_OP and the section name. The default here
955 works for almost all svr4 assemblers, except for the sparc, where the
956 section name must be enclosed in double quotes. (See sparcv4.h.) */
958 #ifndef PUSHSECTION_FORMAT
959 #define PUSHSECTION_FORMAT "%s%s\n"
960 #endif
962 #ifndef DEBUG_SECTION
963 #define DEBUG_SECTION ".debug"
964 #endif
965 #ifndef LINE_SECTION
966 #define LINE_SECTION ".line"
967 #endif
968 #ifndef DEBUG_SFNAMES_SECTION
969 #define DEBUG_SFNAMES_SECTION ".debug_sfnames"
970 #endif
971 #ifndef DEBUG_SRCINFO_SECTION
972 #define DEBUG_SRCINFO_SECTION ".debug_srcinfo"
973 #endif
974 #ifndef DEBUG_MACINFO_SECTION
975 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
976 #endif
977 #ifndef DEBUG_PUBNAMES_SECTION
978 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
979 #endif
980 #ifndef DEBUG_ARANGES_SECTION
981 #define DEBUG_ARANGES_SECTION ".debug_aranges"
982 #endif
983 #ifndef TEXT_SECTION_NAME
984 #define TEXT_SECTION_NAME ".text"
985 #endif
986 #ifndef DATA_SECTION_NAME
987 #define DATA_SECTION_NAME ".data"
988 #endif
989 #ifndef DATA1_SECTION_NAME
990 #define DATA1_SECTION_NAME ".data1"
991 #endif
992 #ifndef RODATA_SECTION_NAME
993 #define RODATA_SECTION_NAME ".rodata"
994 #endif
995 #ifndef RODATA1_SECTION_NAME
996 #define RODATA1_SECTION_NAME ".rodata1"
997 #endif
998 #ifndef BSS_SECTION_NAME
999 #define BSS_SECTION_NAME ".bss"
1000 #endif
1002 /* Definitions of defaults for formats and names of various special
1003 (artificial) labels which may be generated within this file (when
1004 the -g options is used and DWARF_DEBUGGING_INFO is in effect.
1006 If necessary, these may be overridden from within your tm.h file,
1007 but typically, you should never need to override these.
1009 These labels have been hacked (temporarily) so that they all begin with
1010 a `.L' sequence so as to appease the stock sparc/svr4 assembler and the
1011 stock m88k/svr4 assembler, both of which need to see .L at the start of
1012 a label in order to prevent that label from going into the linker symbol
1013 table). When I get time, I'll have to fix this the right way so that we
1014 will use ASM_GENERATE_INTERNAL_LABEL and (*targetm.asm_out.internal_label) herein,
1015 but that will require a rather massive set of changes. For the moment,
1016 the following definitions out to produce the right results for all svr4
1017 and svr3 assemblers. -- rfg
1020 #ifndef TEXT_BEGIN_LABEL
1021 #define TEXT_BEGIN_LABEL "*.L_text_b"
1022 #endif
1023 #ifndef TEXT_END_LABEL
1024 #define TEXT_END_LABEL "*.L_text_e"
1025 #endif
1027 #ifndef DATA_BEGIN_LABEL
1028 #define DATA_BEGIN_LABEL "*.L_data_b"
1029 #endif
1030 #ifndef DATA_END_LABEL
1031 #define DATA_END_LABEL "*.L_data_e"
1032 #endif
1034 #ifndef DATA1_BEGIN_LABEL
1035 #define DATA1_BEGIN_LABEL "*.L_data1_b"
1036 #endif
1037 #ifndef DATA1_END_LABEL
1038 #define DATA1_END_LABEL "*.L_data1_e"
1039 #endif
1041 #ifndef RODATA_BEGIN_LABEL
1042 #define RODATA_BEGIN_LABEL "*.L_rodata_b"
1043 #endif
1044 #ifndef RODATA_END_LABEL
1045 #define RODATA_END_LABEL "*.L_rodata_e"
1046 #endif
1048 #ifndef RODATA1_BEGIN_LABEL
1049 #define RODATA1_BEGIN_LABEL "*.L_rodata1_b"
1050 #endif
1051 #ifndef RODATA1_END_LABEL
1052 #define RODATA1_END_LABEL "*.L_rodata1_e"
1053 #endif
1055 #ifndef BSS_BEGIN_LABEL
1056 #define BSS_BEGIN_LABEL "*.L_bss_b"
1057 #endif
1058 #ifndef BSS_END_LABEL
1059 #define BSS_END_LABEL "*.L_bss_e"
1060 #endif
1062 #ifndef LINE_BEGIN_LABEL
1063 #define LINE_BEGIN_LABEL "*.L_line_b"
1064 #endif
1065 #ifndef LINE_LAST_ENTRY_LABEL
1066 #define LINE_LAST_ENTRY_LABEL "*.L_line_last"
1067 #endif
1068 #ifndef LINE_END_LABEL
1069 #define LINE_END_LABEL "*.L_line_e"
1070 #endif
1072 #ifndef DEBUG_BEGIN_LABEL
1073 #define DEBUG_BEGIN_LABEL "*.L_debug_b"
1074 #endif
1075 #ifndef SFNAMES_BEGIN_LABEL
1076 #define SFNAMES_BEGIN_LABEL "*.L_sfnames_b"
1077 #endif
1078 #ifndef SRCINFO_BEGIN_LABEL
1079 #define SRCINFO_BEGIN_LABEL "*.L_srcinfo_b"
1080 #endif
1081 #ifndef MACINFO_BEGIN_LABEL
1082 #define MACINFO_BEGIN_LABEL "*.L_macinfo_b"
1083 #endif
1085 #ifndef DEBUG_ARANGES_BEGIN_LABEL
1086 #define DEBUG_ARANGES_BEGIN_LABEL "*.L_debug_aranges_begin"
1087 #endif
1088 #ifndef DEBUG_ARANGES_END_LABEL
1089 #define DEBUG_ARANGES_END_LABEL "*.L_debug_aranges_end"
1090 #endif
1092 #ifndef DIE_BEGIN_LABEL_FMT
1093 #define DIE_BEGIN_LABEL_FMT "*.L_D%u"
1094 #endif
1095 #ifndef DIE_END_LABEL_FMT
1096 #define DIE_END_LABEL_FMT "*.L_D%u_e"
1097 #endif
1098 #ifndef PUB_DIE_LABEL_FMT
1099 #define PUB_DIE_LABEL_FMT "*.L_P%u"
1100 #endif
1101 #ifndef BLOCK_BEGIN_LABEL_FMT
1102 #define BLOCK_BEGIN_LABEL_FMT "*.L_B%u"
1103 #endif
1104 #ifndef BLOCK_END_LABEL_FMT
1105 #define BLOCK_END_LABEL_FMT "*.L_B%u_e"
1106 #endif
1107 #ifndef SS_BEGIN_LABEL_FMT
1108 #define SS_BEGIN_LABEL_FMT "*.L_s%u"
1109 #endif
1110 #ifndef SS_END_LABEL_FMT
1111 #define SS_END_LABEL_FMT "*.L_s%u_e"
1112 #endif
1113 #ifndef EE_BEGIN_LABEL_FMT
1114 #define EE_BEGIN_LABEL_FMT "*.L_e%u"
1115 #endif
1116 #ifndef EE_END_LABEL_FMT
1117 #define EE_END_LABEL_FMT "*.L_e%u_e"
1118 #endif
1119 #ifndef MT_BEGIN_LABEL_FMT
1120 #define MT_BEGIN_LABEL_FMT "*.L_t%u"
1121 #endif
1122 #ifndef MT_END_LABEL_FMT
1123 #define MT_END_LABEL_FMT "*.L_t%u_e"
1124 #endif
1125 #ifndef LOC_BEGIN_LABEL_FMT
1126 #define LOC_BEGIN_LABEL_FMT "*.L_l%u"
1127 #endif
1128 #ifndef LOC_END_LABEL_FMT
1129 #define LOC_END_LABEL_FMT "*.L_l%u_e"
1130 #endif
1131 #ifndef BOUND_BEGIN_LABEL_FMT
1132 #define BOUND_BEGIN_LABEL_FMT "*.L_b%u_%u_%c"
1133 #endif
1134 #ifndef BOUND_END_LABEL_FMT
1135 #define BOUND_END_LABEL_FMT "*.L_b%u_%u_%c_e"
1136 #endif
1137 #ifndef BODY_BEGIN_LABEL_FMT
1138 #define BODY_BEGIN_LABEL_FMT "*.L_b%u"
1139 #endif
1140 #ifndef BODY_END_LABEL_FMT
1141 #define BODY_END_LABEL_FMT "*.L_b%u_e"
1142 #endif
1143 #ifndef FUNC_END_LABEL_FMT
1144 #define FUNC_END_LABEL_FMT "*.L_f%u_e"
1145 #endif
1146 #ifndef TYPE_NAME_FMT
1147 #define TYPE_NAME_FMT "*.L_T%u"
1148 #endif
1149 #ifndef DECL_NAME_FMT
1150 #define DECL_NAME_FMT "*.L_E%u"
1151 #endif
1152 #ifndef LINE_CODE_LABEL_FMT
1153 #define LINE_CODE_LABEL_FMT "*.L_LC%u"
1154 #endif
1155 #ifndef SFNAMES_ENTRY_LABEL_FMT
1156 #define SFNAMES_ENTRY_LABEL_FMT "*.L_F%u"
1157 #endif
1158 #ifndef LINE_ENTRY_LABEL_FMT
1159 #define LINE_ENTRY_LABEL_FMT "*.L_LE%u"
1160 #endif
1162 /* Definitions of defaults for various types of primitive assembly language
1163 output operations.
1165 If necessary, these may be overridden from within your tm.h file,
1166 but typically, you shouldn't need to override these. */
1168 #ifndef ASM_OUTPUT_PUSH_SECTION
1169 #define ASM_OUTPUT_PUSH_SECTION(FILE, SECTION) \
1170 fprintf ((FILE), PUSHSECTION_FORMAT, PUSHSECTION_ASM_OP, SECTION)
1171 #endif
1173 #ifndef ASM_OUTPUT_POP_SECTION
1174 #define ASM_OUTPUT_POP_SECTION(FILE) \
1175 fprintf ((FILE), "%s\n", POPSECTION_ASM_OP)
1176 #endif
1178 #ifndef ASM_OUTPUT_DWARF_DELTA2
1179 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
1180 dw2_asm_output_delta (2, LABEL1, LABEL2, NULL)
1181 #endif
1183 #ifndef ASM_OUTPUT_DWARF_DELTA4
1184 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
1185 dw2_asm_output_delta (4, LABEL1, LABEL2, NULL)
1186 #endif
1188 #ifndef ASM_OUTPUT_DWARF_TAG
1189 #define ASM_OUTPUT_DWARF_TAG(FILE,TAG) \
1190 dw2_asm_output_data (2, TAG, "%s", dwarf_tag_name (TAG));
1191 #endif
1193 #ifndef ASM_OUTPUT_DWARF_ATTRIBUTE
1194 #define ASM_OUTPUT_DWARF_ATTRIBUTE(FILE,ATTR) \
1195 dw2_asm_output_data (2, ATTR, "%s", dwarf_attr_name (ATTR))
1196 #endif
1198 #ifndef ASM_OUTPUT_DWARF_STACK_OP
1199 #define ASM_OUTPUT_DWARF_STACK_OP(FILE,OP) \
1200 dw2_asm_output_data (1, OP, "%s", dwarf_stack_op_name (OP))
1201 #endif
1203 #ifndef ASM_OUTPUT_DWARF_FUND_TYPE
1204 #define ASM_OUTPUT_DWARF_FUND_TYPE(FILE,FT) \
1205 dw2_asm_output_data (2, FT, "%s", dwarf_fund_type_name (FT))
1206 #endif
1208 #ifndef ASM_OUTPUT_DWARF_FMT_BYTE
1209 #define ASM_OUTPUT_DWARF_FMT_BYTE(FILE,FMT) \
1210 dw2_asm_output_data (1, FMT, "%s", dwarf_fmt_byte_name (FMT));
1211 #endif
1213 #ifndef ASM_OUTPUT_DWARF_TYPE_MODIFIER
1214 #define ASM_OUTPUT_DWARF_TYPE_MODIFIER(FILE,MOD) \
1215 dw2_asm_output_data (1, MOD, "%s", dwarf_typemod_name (MOD));
1216 #endif
1218 #ifndef ASM_OUTPUT_DWARF_ADDR
1219 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
1220 dw2_asm_output_addr (4, LABEL, NULL)
1221 #endif
1223 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
1224 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) \
1225 dw2_asm_output_addr_rtx (4, RTX, NULL)
1226 #endif
1228 #ifndef ASM_OUTPUT_DWARF_REF
1229 #define ASM_OUTPUT_DWARF_REF(FILE,LABEL) \
1230 dw2_asm_output_addr (4, LABEL, NULL)
1231 #endif
1233 #ifndef ASM_OUTPUT_DWARF_DATA1
1234 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
1235 dw2_asm_output_data (1, VALUE, NULL)
1236 #endif
1238 #ifndef ASM_OUTPUT_DWARF_DATA2
1239 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
1240 dw2_asm_output_data (2, VALUE, NULL)
1241 #endif
1243 #ifndef ASM_OUTPUT_DWARF_DATA4
1244 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
1245 dw2_asm_output_data (4, VALUE, NULL)
1246 #endif
1248 #ifndef ASM_OUTPUT_DWARF_DATA8
1249 #define ASM_OUTPUT_DWARF_DATA8(FILE,HIGH_VALUE,LOW_VALUE) \
1250 dw2_asm_output_data (8, VALUE, NULL)
1251 #endif
1253 /* ASM_OUTPUT_DWARF_STRING is defined to output an ascii string, but to
1254 NOT issue a trailing newline. We define ASM_OUTPUT_DWARF_STRING_NEWLINE
1255 based on whether ASM_OUTPUT_DWARF_STRING is defined or not. If it is
1256 defined, we call it, then issue the line feed. If not, we supply a
1257 default definition of calling ASM_OUTPUT_ASCII */
1259 #ifndef ASM_OUTPUT_DWARF_STRING
1260 #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \
1261 ASM_OUTPUT_ASCII ((FILE), P, strlen (P)+1)
1262 #else
1263 #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \
1264 ASM_OUTPUT_DWARF_STRING (FILE,P), ASM_OUTPUT_DWARF_STRING (FILE,"\n")
1265 #endif
1268 /* The debug hooks structure. */
1269 const struct gcc_debug_hooks dwarf_debug_hooks =
1271 dwarfout_init,
1272 dwarfout_finish,
1273 dwarfout_define,
1274 dwarfout_undef,
1275 dwarfout_start_source_file_check,
1276 dwarfout_end_source_file_check,
1277 dwarfout_begin_block,
1278 dwarfout_end_block,
1279 debug_true_tree, /* ignore_block */
1280 dwarfout_source_line, /* source_line */
1281 dwarfout_source_line, /* begin_prologue */
1282 dwarfout_end_prologue,
1283 dwarfout_end_epilogue,
1284 debug_nothing_tree, /* begin_function */
1285 dwarfout_end_function,
1286 dwarfout_function_decl,
1287 dwarfout_global_decl,
1288 dwarfout_deferred_inline_function,
1289 debug_nothing_tree, /* outlining_inline_function */
1290 debug_nothing_rtx, /* label */
1291 debug_nothing_int /* handle_pch */
1294 /************************ general utility functions **************************/
1296 static inline int
1297 is_pseudo_reg (rtx rtl)
1299 return (((GET_CODE (rtl) == REG) && (REGNO (rtl) >= FIRST_PSEUDO_REGISTER))
1300 || ((GET_CODE (rtl) == SUBREG)
1301 && (REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER)));
1304 static inline tree
1305 type_main_variant (tree type)
1307 type = TYPE_MAIN_VARIANT (type);
1309 /* There really should be only one main variant among any group of variants
1310 of a given type (and all of the MAIN_VARIANT values for all members of
1311 the group should point to that one type) but sometimes the C front-end
1312 messes this up for array types, so we work around that bug here. */
1314 if (TREE_CODE (type) == ARRAY_TYPE)
1316 while (type != TYPE_MAIN_VARIANT (type))
1317 type = TYPE_MAIN_VARIANT (type);
1320 return type;
1323 /* Return nonzero if the given type node represents a tagged type. */
1325 static inline int
1326 is_tagged_type (tree type)
1328 enum tree_code code = TREE_CODE (type);
1330 return (code == RECORD_TYPE || code == UNION_TYPE
1331 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
1334 static const char *
1335 dwarf_tag_name (unsigned int tag)
1337 switch (tag)
1339 case TAG_padding: return "TAG_padding";
1340 case TAG_array_type: return "TAG_array_type";
1341 case TAG_class_type: return "TAG_class_type";
1342 case TAG_entry_point: return "TAG_entry_point";
1343 case TAG_enumeration_type: return "TAG_enumeration_type";
1344 case TAG_formal_parameter: return "TAG_formal_parameter";
1345 case TAG_global_subroutine: return "TAG_global_subroutine";
1346 case TAG_global_variable: return "TAG_global_variable";
1347 case TAG_label: return "TAG_label";
1348 case TAG_lexical_block: return "TAG_lexical_block";
1349 case TAG_local_variable: return "TAG_local_variable";
1350 case TAG_member: return "TAG_member";
1351 case TAG_pointer_type: return "TAG_pointer_type";
1352 case TAG_reference_type: return "TAG_reference_type";
1353 case TAG_compile_unit: return "TAG_compile_unit";
1354 case TAG_string_type: return "TAG_string_type";
1355 case TAG_structure_type: return "TAG_structure_type";
1356 case TAG_subroutine: return "TAG_subroutine";
1357 case TAG_subroutine_type: return "TAG_subroutine_type";
1358 case TAG_typedef: return "TAG_typedef";
1359 case TAG_union_type: return "TAG_union_type";
1360 case TAG_unspecified_parameters: return "TAG_unspecified_parameters";
1361 case TAG_variant: return "TAG_variant";
1362 case TAG_common_block: return "TAG_common_block";
1363 case TAG_common_inclusion: return "TAG_common_inclusion";
1364 case TAG_inheritance: return "TAG_inheritance";
1365 case TAG_inlined_subroutine: return "TAG_inlined_subroutine";
1366 case TAG_module: return "TAG_module";
1367 case TAG_ptr_to_member_type: return "TAG_ptr_to_member_type";
1368 case TAG_set_type: return "TAG_set_type";
1369 case TAG_subrange_type: return "TAG_subrange_type";
1370 case TAG_with_stmt: return "TAG_with_stmt";
1372 /* GNU extensions. */
1374 case TAG_format_label: return "TAG_format_label";
1375 case TAG_namelist: return "TAG_namelist";
1376 case TAG_function_template: return "TAG_function_template";
1377 case TAG_class_template: return "TAG_class_template";
1379 default: return "TAG_<unknown>";
1383 static const char *
1384 dwarf_attr_name (unsigned int attr)
1386 switch (attr)
1388 case AT_sibling: return "AT_sibling";
1389 case AT_location: return "AT_location";
1390 case AT_name: return "AT_name";
1391 case AT_fund_type: return "AT_fund_type";
1392 case AT_mod_fund_type: return "AT_mod_fund_type";
1393 case AT_user_def_type: return "AT_user_def_type";
1394 case AT_mod_u_d_type: return "AT_mod_u_d_type";
1395 case AT_ordering: return "AT_ordering";
1396 case AT_subscr_data: return "AT_subscr_data";
1397 case AT_byte_size: return "AT_byte_size";
1398 case AT_bit_offset: return "AT_bit_offset";
1399 case AT_bit_size: return "AT_bit_size";
1400 case AT_element_list: return "AT_element_list";
1401 case AT_stmt_list: return "AT_stmt_list";
1402 case AT_low_pc: return "AT_low_pc";
1403 case AT_high_pc: return "AT_high_pc";
1404 case AT_language: return "AT_language";
1405 case AT_member: return "AT_member";
1406 case AT_discr: return "AT_discr";
1407 case AT_discr_value: return "AT_discr_value";
1408 case AT_string_length: return "AT_string_length";
1409 case AT_common_reference: return "AT_common_reference";
1410 case AT_comp_dir: return "AT_comp_dir";
1411 case AT_const_value_string: return "AT_const_value_string";
1412 case AT_const_value_data2: return "AT_const_value_data2";
1413 case AT_const_value_data4: return "AT_const_value_data4";
1414 case AT_const_value_data8: return "AT_const_value_data8";
1415 case AT_const_value_block2: return "AT_const_value_block2";
1416 case AT_const_value_block4: return "AT_const_value_block4";
1417 case AT_containing_type: return "AT_containing_type";
1418 case AT_default_value_addr: return "AT_default_value_addr";
1419 case AT_default_value_data2: return "AT_default_value_data2";
1420 case AT_default_value_data4: return "AT_default_value_data4";
1421 case AT_default_value_data8: return "AT_default_value_data8";
1422 case AT_default_value_string: return "AT_default_value_string";
1423 case AT_friends: return "AT_friends";
1424 case AT_inline: return "AT_inline";
1425 case AT_is_optional: return "AT_is_optional";
1426 case AT_lower_bound_ref: return "AT_lower_bound_ref";
1427 case AT_lower_bound_data2: return "AT_lower_bound_data2";
1428 case AT_lower_bound_data4: return "AT_lower_bound_data4";
1429 case AT_lower_bound_data8: return "AT_lower_bound_data8";
1430 case AT_private: return "AT_private";
1431 case AT_producer: return "AT_producer";
1432 case AT_program: return "AT_program";
1433 case AT_protected: return "AT_protected";
1434 case AT_prototyped: return "AT_prototyped";
1435 case AT_public: return "AT_public";
1436 case AT_pure_virtual: return "AT_pure_virtual";
1437 case AT_return_addr: return "AT_return_addr";
1438 case AT_abstract_origin: return "AT_abstract_origin";
1439 case AT_start_scope: return "AT_start_scope";
1440 case AT_stride_size: return "AT_stride_size";
1441 case AT_upper_bound_ref: return "AT_upper_bound_ref";
1442 case AT_upper_bound_data2: return "AT_upper_bound_data2";
1443 case AT_upper_bound_data4: return "AT_upper_bound_data4";
1444 case AT_upper_bound_data8: return "AT_upper_bound_data8";
1445 case AT_virtual: return "AT_virtual";
1447 /* GNU extensions */
1449 case AT_sf_names: return "AT_sf_names";
1450 case AT_src_info: return "AT_src_info";
1451 case AT_mac_info: return "AT_mac_info";
1452 case AT_src_coords: return "AT_src_coords";
1453 case AT_body_begin: return "AT_body_begin";
1454 case AT_body_end: return "AT_body_end";
1456 default: return "AT_<unknown>";
1460 static const char *
1461 dwarf_stack_op_name (unsigned int op)
1463 switch (op)
1465 case OP_REG: return "OP_REG";
1466 case OP_BASEREG: return "OP_BASEREG";
1467 case OP_ADDR: return "OP_ADDR";
1468 case OP_CONST: return "OP_CONST";
1469 case OP_DEREF2: return "OP_DEREF2";
1470 case OP_DEREF4: return "OP_DEREF4";
1471 case OP_ADD: return "OP_ADD";
1472 default: return "OP_<unknown>";
1476 static const char *
1477 dwarf_typemod_name (unsigned int mod)
1479 switch (mod)
1481 case MOD_pointer_to: return "MOD_pointer_to";
1482 case MOD_reference_to: return "MOD_reference_to";
1483 case MOD_const: return "MOD_const";
1484 case MOD_volatile: return "MOD_volatile";
1485 default: return "MOD_<unknown>";
1489 static const char *
1490 dwarf_fmt_byte_name (unsigned int fmt)
1492 switch (fmt)
1494 case FMT_FT_C_C: return "FMT_FT_C_C";
1495 case FMT_FT_C_X: return "FMT_FT_C_X";
1496 case FMT_FT_X_C: return "FMT_FT_X_C";
1497 case FMT_FT_X_X: return "FMT_FT_X_X";
1498 case FMT_UT_C_C: return "FMT_UT_C_C";
1499 case FMT_UT_C_X: return "FMT_UT_C_X";
1500 case FMT_UT_X_C: return "FMT_UT_X_C";
1501 case FMT_UT_X_X: return "FMT_UT_X_X";
1502 case FMT_ET: return "FMT_ET";
1503 default: return "FMT_<unknown>";
1507 static const char *
1508 dwarf_fund_type_name (unsigned int ft)
1510 switch (ft)
1512 case FT_char: return "FT_char";
1513 case FT_signed_char: return "FT_signed_char";
1514 case FT_unsigned_char: return "FT_unsigned_char";
1515 case FT_short: return "FT_short";
1516 case FT_signed_short: return "FT_signed_short";
1517 case FT_unsigned_short: return "FT_unsigned_short";
1518 case FT_integer: return "FT_integer";
1519 case FT_signed_integer: return "FT_signed_integer";
1520 case FT_unsigned_integer: return "FT_unsigned_integer";
1521 case FT_long: return "FT_long";
1522 case FT_signed_long: return "FT_signed_long";
1523 case FT_unsigned_long: return "FT_unsigned_long";
1524 case FT_pointer: return "FT_pointer";
1525 case FT_float: return "FT_float";
1526 case FT_dbl_prec_float: return "FT_dbl_prec_float";
1527 case FT_ext_prec_float: return "FT_ext_prec_float";
1528 case FT_complex: return "FT_complex";
1529 case FT_dbl_prec_complex: return "FT_dbl_prec_complex";
1530 case FT_void: return "FT_void";
1531 case FT_boolean: return "FT_boolean";
1532 case FT_ext_prec_complex: return "FT_ext_prec_complex";
1533 case FT_label: return "FT_label";
1535 /* GNU extensions. */
1537 case FT_long_long: return "FT_long_long";
1538 case FT_signed_long_long: return "FT_signed_long_long";
1539 case FT_unsigned_long_long: return "FT_unsigned_long_long";
1541 case FT_int8: return "FT_int8";
1542 case FT_signed_int8: return "FT_signed_int8";
1543 case FT_unsigned_int8: return "FT_unsigned_int8";
1544 case FT_int16: return "FT_int16";
1545 case FT_signed_int16: return "FT_signed_int16";
1546 case FT_unsigned_int16: return "FT_unsigned_int16";
1547 case FT_int32: return "FT_int32";
1548 case FT_signed_int32: return "FT_signed_int32";
1549 case FT_unsigned_int32: return "FT_unsigned_int32";
1550 case FT_int64: return "FT_int64";
1551 case FT_signed_int64: return "FT_signed_int64";
1552 case FT_unsigned_int64: return "FT_unsigned_int64";
1553 case FT_int128: return "FT_int128";
1554 case FT_signed_int128: return "FT_signed_int128";
1555 case FT_unsigned_int128: return "FT_unsigned_int128";
1557 case FT_real32: return "FT_real32";
1558 case FT_real64: return "FT_real64";
1559 case FT_real96: return "FT_real96";
1560 case FT_real128: return "FT_real128";
1562 default: return "FT_<unknown>";
1566 /* Determine the "ultimate origin" of a decl. The decl may be an
1567 inlined instance of an inlined instance of a decl which is local
1568 to an inline function, so we have to trace all of the way back
1569 through the origin chain to find out what sort of node actually
1570 served as the original seed for the given block. */
1572 static tree
1573 decl_ultimate_origin (tree decl)
1575 #ifdef ENABLE_CHECKING
1576 if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
1577 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
1578 most distant ancestor, this should never happen. */
1579 abort ();
1580 #endif
1582 return DECL_ABSTRACT_ORIGIN (decl);
1585 /* Determine the "ultimate origin" of a block. The block may be an
1586 inlined instance of an inlined instance of a block which is local
1587 to an inline function, so we have to trace all of the way back
1588 through the origin chain to find out what sort of node actually
1589 served as the original seed for the given block. */
1591 static tree
1592 block_ultimate_origin (tree block)
1594 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
1596 if (immediate_origin == NULL)
1597 return NULL;
1598 else
1600 tree ret_val;
1601 tree lookahead = immediate_origin;
1605 ret_val = lookahead;
1606 lookahead = (TREE_CODE (ret_val) == BLOCK)
1607 ? BLOCK_ABSTRACT_ORIGIN (ret_val)
1608 : NULL;
1610 while (lookahead != NULL && lookahead != ret_val);
1611 return ret_val;
1615 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
1616 of a virtual function may refer to a base class, so we check the 'this'
1617 parameter. */
1619 static tree
1620 decl_class_context (tree decl)
1622 tree context = NULL_TREE;
1623 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
1624 context = DECL_CONTEXT (decl);
1625 else
1626 context = TYPE_MAIN_VARIANT
1627 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
1629 if (context && !TYPE_P (context))
1630 context = NULL_TREE;
1632 return context;
1635 #if 0
1636 static void
1637 output_unsigned_leb128 (unsigned long value)
1639 unsigned long orig_value = value;
1643 unsigned byte = (value & 0x7f);
1645 value >>= 7;
1646 if (value != 0) /* more bytes to follow */
1647 byte |= 0x80;
1648 dw2_asm_output_data (1, byte, "\t%s ULEB128 number - value = %lu",
1649 orig_value);
1651 while (value != 0);
1654 static void
1655 output_signed_leb128 (long value)
1657 long orig_value = value;
1658 int negative = (value < 0);
1659 int more;
1663 unsigned byte = (value & 0x7f);
1665 value >>= 7;
1666 if (negative)
1667 value |= 0xfe000000; /* manually sign extend */
1668 if (((value == 0) && ((byte & 0x40) == 0))
1669 || ((value == -1) && ((byte & 0x40) == 1)))
1670 more = 0;
1671 else
1673 byte |= 0x80;
1674 more = 1;
1676 dw2_asm_output_data (1, byte, "\t%s SLEB128 number - value = %ld",
1677 orig_value);
1679 while (more);
1681 #endif
1683 /**************** utility functions for attribute functions ******************/
1685 /* Given a pointer to a tree node for some type, return a Dwarf fundamental
1686 type code for the given type.
1688 This routine must only be called for GCC type nodes that correspond to
1689 Dwarf fundamental types.
1691 The current Dwarf draft specification calls for Dwarf fundamental types
1692 to accurately reflect the fact that a given type was either a "plain"
1693 integral type or an explicitly "signed" integral type. Unfortunately,
1694 we can't always do this, because GCC may already have thrown away the
1695 information about the precise way in which the type was originally
1696 specified, as in:
1698 typedef signed int my_type;
1700 struct s { my_type f; };
1702 Since we may be stuck here without enough information to do exactly
1703 what is called for in the Dwarf draft specification, we do the best
1704 that we can under the circumstances and always use the "plain" integral
1705 fundamental type codes for int, short, and long types. That's probably
1706 good enough. The additional accuracy called for in the current DWARF
1707 draft specification is probably never even useful in practice. */
1709 static int
1710 fundamental_type_code (tree type)
1712 if (TREE_CODE (type) == ERROR_MARK)
1713 return 0;
1715 switch (TREE_CODE (type))
1717 case ERROR_MARK:
1718 return FT_void;
1720 case VOID_TYPE:
1721 return FT_void;
1723 case INTEGER_TYPE:
1724 /* Carefully distinguish all the standard types of C,
1725 without messing up if the language is not C.
1726 Note that we check only for the names that contain spaces;
1727 other names might occur by coincidence in other languages. */
1728 if (TYPE_NAME (type) != 0
1729 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1730 && DECL_NAME (TYPE_NAME (type)) != 0
1731 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
1733 const char *const name =
1734 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
1736 if (!strcmp (name, "unsigned char"))
1737 return FT_unsigned_char;
1738 if (!strcmp (name, "signed char"))
1739 return FT_signed_char;
1740 if (!strcmp (name, "unsigned int"))
1741 return FT_unsigned_integer;
1742 if (!strcmp (name, "short int"))
1743 return FT_short;
1744 if (!strcmp (name, "short unsigned int"))
1745 return FT_unsigned_short;
1746 if (!strcmp (name, "long int"))
1747 return FT_long;
1748 if (!strcmp (name, "long unsigned int"))
1749 return FT_unsigned_long;
1750 if (!strcmp (name, "long long int"))
1751 return FT_long_long; /* Not grok'ed by svr4 SDB */
1752 if (!strcmp (name, "long long unsigned int"))
1753 return FT_unsigned_long_long; /* Not grok'ed by svr4 SDB */
1756 /* Most integer types will be sorted out above, however, for the
1757 sake of special `array index' integer types, the following code
1758 is also provided. */
1760 if (TYPE_PRECISION (type) == INT_TYPE_SIZE)
1761 return (TREE_UNSIGNED (type) ? FT_unsigned_integer : FT_integer);
1763 if (TYPE_PRECISION (type) == LONG_TYPE_SIZE)
1764 return (TREE_UNSIGNED (type) ? FT_unsigned_long : FT_long);
1766 if (TYPE_PRECISION (type) == LONG_LONG_TYPE_SIZE)
1767 return (TREE_UNSIGNED (type) ? FT_unsigned_long_long : FT_long_long);
1769 if (TYPE_PRECISION (type) == SHORT_TYPE_SIZE)
1770 return (TREE_UNSIGNED (type) ? FT_unsigned_short : FT_short);
1772 if (TYPE_PRECISION (type) == CHAR_TYPE_SIZE)
1773 return (TREE_UNSIGNED (type) ? FT_unsigned_char : FT_char);
1775 if (TYPE_MODE (type) == TImode)
1776 return (TREE_UNSIGNED (type) ? FT_unsigned_int128 : FT_int128);
1778 /* In C++, __java_boolean is an INTEGER_TYPE with precision == 1 */
1779 if (TYPE_PRECISION (type) == 1)
1780 return FT_boolean;
1782 abort ();
1784 case REAL_TYPE:
1785 /* Carefully distinguish all the standard types of C,
1786 without messing up if the language is not C. */
1787 if (TYPE_NAME (type) != 0
1788 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1789 && DECL_NAME (TYPE_NAME (type)) != 0
1790 && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
1792 const char *const name =
1793 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
1795 /* Note that here we can run afoul of a serious bug in "classic"
1796 svr4 SDB debuggers. They don't seem to understand the
1797 FT_ext_prec_float type (even though they should). */
1799 if (!strcmp (name, "long double"))
1800 return FT_ext_prec_float;
1803 if (TYPE_PRECISION (type) == DOUBLE_TYPE_SIZE)
1805 /* On the SH, when compiling with -m3e or -m4-single-only, both
1806 float and double are 32 bits. But since the debugger doesn't
1807 know about the subtarget, it always thinks double is 64 bits.
1808 So we have to tell the debugger that the type is float to
1809 make the output of the 'print' command etc. readable. */
1810 if (DOUBLE_TYPE_SIZE == FLOAT_TYPE_SIZE && FLOAT_TYPE_SIZE == 32)
1811 return FT_float;
1812 return FT_dbl_prec_float;
1814 if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
1815 return FT_float;
1817 /* Note that here we can run afoul of a serious bug in "classic"
1818 svr4 SDB debuggers. They don't seem to understand the
1819 FT_ext_prec_float type (even though they should). */
1821 if (TYPE_PRECISION (type) == LONG_DOUBLE_TYPE_SIZE)
1822 return FT_ext_prec_float;
1823 abort ();
1825 case COMPLEX_TYPE:
1826 return FT_complex; /* GNU FORTRAN COMPLEX type. */
1828 case CHAR_TYPE:
1829 return FT_char; /* GNU Pascal CHAR type. Not used in C. */
1831 case BOOLEAN_TYPE:
1832 return FT_boolean; /* GNU FORTRAN BOOLEAN type. */
1834 default:
1835 abort (); /* No other TREE_CODEs are Dwarf fundamental types. */
1837 return 0;
1840 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
1841 the Dwarf "root" type for the given input type. The Dwarf "root" type
1842 of a given type is generally the same as the given type, except that if
1843 the given type is a pointer or reference type, then the root type of
1844 the given type is the root type of the "basis" type for the pointer or
1845 reference type. (This definition of the "root" type is recursive.)
1846 Also, the root type of a `const' qualified type or a `volatile'
1847 qualified type is the root type of the given type without the
1848 qualifiers. */
1850 static tree
1851 root_type_1 (tree type, int count)
1853 /* Give up after searching 1000 levels, in case this is a recursive
1854 pointer type. Such types are possible in Ada, but it is not possible
1855 to represent them in DWARF1 debug info. */
1856 if (count > 1000)
1857 return error_mark_node;
1859 switch (TREE_CODE (type))
1861 case ERROR_MARK:
1862 return error_mark_node;
1864 case POINTER_TYPE:
1865 case REFERENCE_TYPE:
1866 return root_type_1 (TREE_TYPE (type), count+1);
1868 default:
1869 return type;
1873 static tree
1874 root_type (tree type)
1876 type = root_type_1 (type, 0);
1877 if (type != error_mark_node)
1878 type = type_main_variant (type);
1879 return type;
1882 /* Given a pointer to an arbitrary ..._TYPE tree node, write out a sequence
1883 of zero or more Dwarf "type-modifier" bytes applicable to the type. */
1885 static void
1886 write_modifier_bytes_1 (tree type, int decl_const, int decl_volatile, int count)
1888 if (TREE_CODE (type) == ERROR_MARK)
1889 return;
1891 /* Give up after searching 1000 levels, in case this is a recursive
1892 pointer type. Such types are possible in Ada, but it is not possible
1893 to represent them in DWARF1 debug info. */
1894 if (count > 1000)
1895 return;
1897 if (TYPE_READONLY (type) || decl_const)
1898 ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_const);
1899 if (TYPE_VOLATILE (type) || decl_volatile)
1900 ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_volatile);
1901 switch (TREE_CODE (type))
1903 case POINTER_TYPE:
1904 ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_pointer_to);
1905 write_modifier_bytes_1 (TREE_TYPE (type), 0, 0, count+1);
1906 return;
1908 case REFERENCE_TYPE:
1909 ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_reference_to);
1910 write_modifier_bytes_1 (TREE_TYPE (type), 0, 0, count+1);
1911 return;
1913 case ERROR_MARK:
1914 default:
1915 return;
1919 static void
1920 write_modifier_bytes (tree type, int decl_const, int decl_volatile)
1922 write_modifier_bytes_1 (type, decl_const, decl_volatile, 0);
1925 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
1926 given input type is a Dwarf "fundamental" type. Otherwise return zero. */
1928 static inline int
1929 type_is_fundamental (tree type)
1931 switch (TREE_CODE (type))
1933 case ERROR_MARK:
1934 case VOID_TYPE:
1935 case INTEGER_TYPE:
1936 case REAL_TYPE:
1937 case COMPLEX_TYPE:
1938 case BOOLEAN_TYPE:
1939 case CHAR_TYPE:
1940 return 1;
1942 case SET_TYPE:
1943 case ARRAY_TYPE:
1944 case RECORD_TYPE:
1945 case UNION_TYPE:
1946 case QUAL_UNION_TYPE:
1947 case ENUMERAL_TYPE:
1948 case FUNCTION_TYPE:
1949 case METHOD_TYPE:
1950 case POINTER_TYPE:
1951 case REFERENCE_TYPE:
1952 case FILE_TYPE:
1953 case OFFSET_TYPE:
1954 case LANG_TYPE:
1955 case VECTOR_TYPE:
1956 return 0;
1958 default:
1959 abort ();
1961 return 0;
1964 /* Given a pointer to some ..._DECL tree node, generate an assembly language
1965 equate directive which will associate a symbolic name with the current DIE.
1967 The name used is an artificial label generated from the DECL_UID number
1968 associated with the given decl node. The name it gets equated to is the
1969 symbolic label that we (previously) output at the start of the DIE that
1970 we are currently generating.
1972 Calling this function while generating some "decl related" form of DIE
1973 makes it possible to later refer to the DIE which represents the given
1974 decl simply by re-generating the symbolic name from the ..._DECL node's
1975 UID number. */
1977 static void
1978 equate_decl_number_to_die_number (tree decl)
1980 /* In the case where we are generating a DIE for some ..._DECL node
1981 which represents either some inline function declaration or some
1982 entity declared within an inline function declaration/definition,
1983 setup a symbolic name for the current DIE so that we have a name
1984 for this DIE that we can easily refer to later on within
1985 AT_abstract_origin attributes. */
1987 char decl_label[MAX_ARTIFICIAL_LABEL_BYTES];
1988 char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
1990 sprintf (decl_label, DECL_NAME_FMT, DECL_UID (decl));
1991 sprintf (die_label, DIE_BEGIN_LABEL_FMT, current_dienum);
1992 ASM_OUTPUT_DEF (asm_out_file, decl_label, die_label);
1995 /* Given a pointer to some ..._TYPE tree node, generate an assembly language
1996 equate directive which will associate a symbolic name with the current DIE.
1998 The name used is an artificial label generated from the TYPE_UID number
1999 associated with the given type node. The name it gets equated to is the
2000 symbolic label that we (previously) output at the start of the DIE that
2001 we are currently generating.
2003 Calling this function while generating some "type related" form of DIE
2004 makes it easy to later refer to the DIE which represents the given type
2005 simply by re-generating the alternative name from the ..._TYPE node's
2006 UID number. */
2008 static inline void
2009 equate_type_number_to_die_number (tree type)
2011 char type_label[MAX_ARTIFICIAL_LABEL_BYTES];
2012 char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
2014 /* We are generating a DIE to represent the main variant of this type
2015 (i.e the type without any const or volatile qualifiers) so in order
2016 to get the equate to come out right, we need to get the main variant
2017 itself here. */
2019 type = type_main_variant (type);
2021 sprintf (type_label, TYPE_NAME_FMT, TYPE_UID (type));
2022 sprintf (die_label, DIE_BEGIN_LABEL_FMT, current_dienum);
2023 ASM_OUTPUT_DEF (asm_out_file, type_label, die_label);
2026 static void
2027 output_reg_number (rtx rtl)
2029 unsigned regno = REGNO (rtl);
2031 if (regno >= DWARF_FRAME_REGISTERS)
2033 warning ("%Jinternal regno botch: '%D' has regno = %d\n",
2034 dwarf_last_decl, dwarf_last_decl, regno);
2035 regno = 0;
2037 dw2_assemble_integer (4, GEN_INT (DBX_REGISTER_NUMBER (regno)));
2038 if (flag_debug_asm)
2040 fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START);
2041 PRINT_REG (rtl, 0, asm_out_file);
2043 fputc ('\n', asm_out_file);
2046 /* The following routine is a nice and simple transducer. It converts the
2047 RTL for a variable or parameter (resident in memory) into an equivalent
2048 Dwarf representation of a mechanism for getting the address of that same
2049 variable onto the top of a hypothetical "address evaluation" stack.
2051 When creating memory location descriptors, we are effectively trans-
2052 forming the RTL for a memory-resident object into its Dwarf postfix
2053 expression equivalent. This routine just recursively descends an
2054 RTL tree, turning it into Dwarf postfix code as it goes. */
2056 static void
2057 output_mem_loc_descriptor (rtx rtl)
2059 /* Note that for a dynamically sized array, the location we will
2060 generate a description of here will be the lowest numbered location
2061 which is actually within the array. That's *not* necessarily the
2062 same as the zeroth element of the array. */
2064 rtl = (*targetm.delegitimize_address) (rtl);
2066 switch (GET_CODE (rtl))
2068 case SUBREG:
2070 /* The case of a subreg may arise when we have a local (register)
2071 variable or a formal (register) parameter which doesn't quite
2072 fill up an entire register. For now, just assume that it is
2073 legitimate to make the Dwarf info refer to the whole register
2074 which contains the given subreg. */
2076 rtl = SUBREG_REG (rtl);
2077 /* Drop thru. */
2079 case REG:
2081 /* Whenever a register number forms a part of the description of
2082 the method for calculating the (dynamic) address of a memory
2083 resident object, DWARF rules require the register number to
2084 be referred to as a "base register". This distinction is not
2085 based in any way upon what category of register the hardware
2086 believes the given register belongs to. This is strictly
2087 DWARF terminology we're dealing with here.
2089 Note that in cases where the location of a memory-resident data
2090 object could be expressed as:
2092 OP_ADD (OP_BASEREG (basereg), OP_CONST (0))
2094 the actual DWARF location descriptor that we generate may just
2095 be OP_BASEREG (basereg). This may look deceptively like the
2096 object in question was allocated to a register (rather than
2097 in memory) so DWARF consumers need to be aware of the subtle
2098 distinction between OP_REG and OP_BASEREG. */
2100 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_BASEREG);
2101 output_reg_number (rtl);
2102 break;
2104 case MEM:
2105 output_mem_loc_descriptor (XEXP (rtl, 0));
2106 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_DEREF4);
2107 break;
2109 case CONST:
2110 case SYMBOL_REF:
2111 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADDR);
2112 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, rtl);
2113 break;
2115 case PLUS:
2116 output_mem_loc_descriptor (XEXP (rtl, 0));
2117 output_mem_loc_descriptor (XEXP (rtl, 1));
2118 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADD);
2119 break;
2121 case CONST_INT:
2122 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_CONST);
2123 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, INTVAL (rtl));
2124 break;
2126 case MULT:
2127 /* If a pseudo-reg is optimized away, it is possible for it to
2128 be replaced with a MEM containing a multiply. Use a GNU extension
2129 to describe it. */
2130 output_mem_loc_descriptor (XEXP (rtl, 0));
2131 output_mem_loc_descriptor (XEXP (rtl, 1));
2132 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_MULT);
2133 break;
2135 default:
2136 abort ();
2140 /* Output a proper Dwarf location descriptor for a variable or parameter
2141 which is either allocated in a register or in a memory location. For
2142 a register, we just generate an OP_REG and the register number. For a
2143 memory location we provide a Dwarf postfix expression describing how to
2144 generate the (dynamic) address of the object onto the address stack. */
2146 static void
2147 output_loc_descriptor (rtx rtl)
2149 switch (GET_CODE (rtl))
2151 case SUBREG:
2153 /* The case of a subreg may arise when we have a local (register)
2154 variable or a formal (register) parameter which doesn't quite
2155 fill up an entire register. For now, just assume that it is
2156 legitimate to make the Dwarf info refer to the whole register
2157 which contains the given subreg. */
2159 rtl = SUBREG_REG (rtl);
2160 /* Drop thru. */
2162 case REG:
2163 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_REG);
2164 output_reg_number (rtl);
2165 break;
2167 case MEM:
2168 output_mem_loc_descriptor (XEXP (rtl, 0));
2169 break;
2171 default:
2172 abort (); /* Should never happen */
2176 /* Given a tree node describing an array bound (either lower or upper)
2177 output a representation for that bound. DIM_NUM is used for
2178 multi-dimensional arrays and U_OR_L designates upper or lower
2179 bound. */
2181 static void
2182 output_bound_representation (tree bound, unsigned int dim_num, char u_or_l)
2184 switch (TREE_CODE (bound))
2187 case ERROR_MARK:
2188 return;
2190 /* All fixed-bounds are represented by INTEGER_CST nodes. */
2192 case INTEGER_CST:
2193 if (host_integerp (bound, 0))
2194 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, tree_low_cst (bound, 0));
2195 break;
2197 default:
2199 /* Dynamic bounds may be represented by NOP_EXPR nodes containing
2200 SAVE_EXPR nodes, in which case we can do something, or as
2201 an expression, which we cannot represent. */
2203 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2204 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2206 sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
2207 current_dienum, dim_num, u_or_l);
2209 sprintf (end_label, BOUND_END_LABEL_FMT,
2210 current_dienum, dim_num, u_or_l);
2212 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2213 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2215 /* If optimization is turned on, the SAVE_EXPRs that describe
2216 how to access the upper bound values are essentially bogus.
2217 They only describe (at best) how to get at these values at
2218 the points in the generated code right after they have just
2219 been computed. Worse yet, in the typical case, the upper
2220 bound values will not even *be* computed in the optimized
2221 code, so these SAVE_EXPRs are entirely bogus.
2223 In order to compensate for this fact, we check here to see
2224 if optimization is enabled, and if so, we effectively create
2225 an empty location description for the (unknown and unknowable)
2226 upper bound.
2228 This should not cause too much trouble for existing (stupid?)
2229 debuggers because they have to deal with empty upper bounds
2230 location descriptions anyway in order to be able to deal with
2231 incomplete array types.
2233 Of course an intelligent debugger (GDB?) should be able to
2234 comprehend that a missing upper bound specification in a
2235 array type used for a storage class `auto' local array variable
2236 indicates that the upper bound is both unknown (at compile-
2237 time) and unknowable (at run-time) due to optimization. */
2239 if (! optimize)
2241 while (TREE_CODE (bound) == NOP_EXPR
2242 || TREE_CODE (bound) == CONVERT_EXPR)
2243 bound = TREE_OPERAND (bound, 0);
2245 if (TREE_CODE (bound) == SAVE_EXPR
2246 && SAVE_EXPR_RTL (bound))
2247 output_loc_descriptor
2248 (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
2251 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2253 break;
2258 /* Recursive function to output a sequence of value/name pairs for
2259 enumeration constants in reversed order. This is called from
2260 enumeration_type_die. */
2262 static void
2263 output_enumeral_list (tree link)
2265 if (link)
2267 output_enumeral_list (TREE_CHAIN (link));
2269 if (host_integerp (TREE_VALUE (link), 0))
2270 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
2271 tree_low_cst (TREE_VALUE (link), 0));
2273 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
2274 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
2278 /* Given an unsigned value, round it up to the lowest multiple of `boundary'
2279 which is not less than the value itself. */
2281 static inline HOST_WIDE_INT
2282 ceiling (HOST_WIDE_INT value, unsigned int boundary)
2284 return (((value + boundary - 1) / boundary) * boundary);
2287 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
2288 pointer to the declared type for the relevant field variable, or return
2289 `integer_type_node' if the given node turns out to be an ERROR_MARK node. */
2291 static inline tree
2292 field_type (tree decl)
2294 tree type;
2296 if (TREE_CODE (decl) == ERROR_MARK)
2297 return integer_type_node;
2299 type = DECL_BIT_FIELD_TYPE (decl);
2300 if (type == NULL)
2301 type = TREE_TYPE (decl);
2302 return type;
2305 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
2306 node, return the alignment in bits for the type, or else return
2307 BITS_PER_WORD if the node actually turns out to be an ERROR_MARK node. */
2309 static inline unsigned int
2310 simple_type_align_in_bits (tree type)
2312 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
2315 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
2316 node, return the size in bits for the type if it is a constant, or
2317 else return the alignment for the type if the type's size is not
2318 constant, or else return BITS_PER_WORD if the type actually turns out
2319 to be an ERROR_MARK node. */
2321 static inline unsigned HOST_WIDE_INT
2322 simple_type_size_in_bits (tree type)
2324 tree type_size_tree;
2326 if (TREE_CODE (type) == ERROR_MARK)
2327 return BITS_PER_WORD;
2328 type_size_tree = TYPE_SIZE (type);
2330 if (type_size_tree == NULL_TREE)
2331 return 0;
2332 if (! host_integerp (type_size_tree, 1))
2333 return TYPE_ALIGN (type);
2334 return tree_low_cst (type_size_tree, 1);
2337 /* Given a pointer to what is assumed to be a FIELD_DECL node, compute and
2338 return the byte offset of the lowest addressed byte of the "containing
2339 object" for the given FIELD_DECL, or return 0 if we are unable to deter-
2340 mine what that offset is, either because the argument turns out to be a
2341 pointer to an ERROR_MARK node, or because the offset is actually variable.
2342 (We can't handle the latter case just yet.) */
2344 static HOST_WIDE_INT
2345 field_byte_offset (tree decl)
2347 unsigned int type_align_in_bytes;
2348 unsigned int type_align_in_bits;
2349 unsigned HOST_WIDE_INT type_size_in_bits;
2350 HOST_WIDE_INT object_offset_in_align_units;
2351 HOST_WIDE_INT object_offset_in_bits;
2352 HOST_WIDE_INT object_offset_in_bytes;
2353 tree type;
2354 tree field_size_tree;
2355 HOST_WIDE_INT bitpos_int;
2356 HOST_WIDE_INT deepest_bitpos;
2357 unsigned HOST_WIDE_INT field_size_in_bits;
2359 if (TREE_CODE (decl) == ERROR_MARK)
2360 return 0;
2362 if (TREE_CODE (decl) != FIELD_DECL)
2363 abort ();
2365 type = field_type (decl);
2366 field_size_tree = DECL_SIZE (decl);
2368 /* The size could be unspecified if there was an error, or for
2369 a flexible array member. */
2370 if (! field_size_tree)
2371 field_size_tree = bitsize_zero_node;
2373 /* We cannot yet cope with fields whose positions or sizes are variable,
2374 so for now, when we see such things, we simply return 0. Someday,
2375 we may be able to handle such cases, but it will be damn difficult. */
2377 if (! host_integerp (bit_position (decl), 0)
2378 || ! host_integerp (field_size_tree, 1))
2379 return 0;
2381 bitpos_int = int_bit_position (decl);
2382 field_size_in_bits = tree_low_cst (field_size_tree, 1);
2384 type_size_in_bits = simple_type_size_in_bits (type);
2385 type_align_in_bits = simple_type_align_in_bits (type);
2386 type_align_in_bytes = type_align_in_bits / BITS_PER_UNIT;
2388 /* Note that the GCC front-end doesn't make any attempt to keep track
2389 of the starting bit offset (relative to the start of the containing
2390 structure type) of the hypothetical "containing object" for a bit-
2391 field. Thus, when computing the byte offset value for the start of
2392 the "containing object" of a bit-field, we must deduce this infor-
2393 mation on our own.
2395 This can be rather tricky to do in some cases. For example, handling
2396 the following structure type definition when compiling for an i386/i486
2397 target (which only aligns long long's to 32-bit boundaries) can be very
2398 tricky:
2400 struct S {
2401 int field1;
2402 long long field2:31;
2405 Fortunately, there is a simple rule-of-thumb which can be used in such
2406 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for
2407 the structure shown above. It decides to do this based upon one simple
2408 rule for bit-field allocation. Quite simply, GCC allocates each "con-
2409 taining object" for each bit-field at the first (i.e. lowest addressed)
2410 legitimate alignment boundary (based upon the required minimum alignment
2411 for the declared type of the field) which it can possibly use, subject
2412 to the condition that there is still enough available space remaining
2413 in the containing object (when allocated at the selected point) to
2414 fully accommodate all of the bits of the bit-field itself.
2416 This simple rule makes it obvious why GCC allocates 8 bytes for each
2417 object of the structure type shown above. When looking for a place to
2418 allocate the "containing object" for `field2', the compiler simply tries
2419 to allocate a 64-bit "containing object" at each successive 32-bit
2420 boundary (starting at zero) until it finds a place to allocate that 64-
2421 bit field such that at least 31 contiguous (and previously unallocated)
2422 bits remain within that selected 64 bit field. (As it turns out, for
2423 the example above, the compiler finds that it is OK to allocate the
2424 "containing object" 64-bit field at bit-offset zero within the
2425 structure type.)
2427 Here we attempt to work backwards from the limited set of facts we're
2428 given, and we try to deduce from those facts, where GCC must have
2429 believed that the containing object started (within the structure type).
2431 The value we deduce is then used (by the callers of this routine) to
2432 generate AT_location and AT_bit_offset attributes for fields (both
2433 bit-fields and, in the case of AT_location, regular fields as well). */
2435 /* Figure out the bit-distance from the start of the structure to the
2436 "deepest" bit of the bit-field. */
2437 deepest_bitpos = bitpos_int + field_size_in_bits;
2439 /* This is the tricky part. Use some fancy footwork to deduce where the
2440 lowest addressed bit of the containing object must be. */
2441 object_offset_in_bits
2442 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2444 /* Compute the offset of the containing object in "alignment units". */
2445 object_offset_in_align_units = object_offset_in_bits / type_align_in_bits;
2447 /* Compute the offset of the containing object in bytes. */
2448 object_offset_in_bytes = object_offset_in_align_units * type_align_in_bytes;
2450 /* The above code assumes that the field does not cross an alignment
2451 boundary. This can happen if PCC_BITFIELD_TYPE_MATTERS is not defined,
2452 or if the structure is packed. If this happens, then we get an object
2453 which starts after the bitfield, which means that the bit offset is
2454 negative. Gdb fails when given negative bit offsets. We avoid this
2455 by recomputing using the first bit of the bitfield. This will give
2456 us an object which does not completely contain the bitfield, but it
2457 will be aligned, and it will contain the first bit of the bitfield.
2459 However, only do this for a BYTES_BIG_ENDIAN target. For a
2460 ! BYTES_BIG_ENDIAN target, bitpos_int + field_size_in_bits is the first
2461 first bit of the bitfield. If we recompute using bitpos_int + 1 below,
2462 then we end up computing the object byte offset for the wrong word of the
2463 desired bitfield, which in turn causes the field offset to be negative
2464 in bit_offset_attribute. */
2465 if (BYTES_BIG_ENDIAN
2466 && object_offset_in_bits > bitpos_int)
2468 deepest_bitpos = bitpos_int + 1;
2469 object_offset_in_bits
2470 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2471 object_offset_in_align_units = (object_offset_in_bits
2472 / type_align_in_bits);
2473 object_offset_in_bytes = (object_offset_in_align_units
2474 * type_align_in_bytes);
2477 return object_offset_in_bytes;
2480 /****************************** attributes *********************************/
2482 /* The following routines are responsible for writing out the various types
2483 of Dwarf attributes (and any following data bytes associated with them).
2484 These routines are listed in order based on the numerical codes of their
2485 associated attributes. */
2487 /* Generate an AT_sibling attribute. */
2489 static inline void
2490 sibling_attribute (void)
2492 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2494 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sibling);
2495 sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
2496 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
2499 /* Output the form of location attributes suitable for whole variables and
2500 whole parameters. Note that the location attributes for struct fields
2501 are generated by the routine `data_member_location_attribute' below. */
2503 static void
2504 location_attribute (rtx rtl)
2506 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2507 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2509 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2510 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2511 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2512 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2513 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2515 /* Handle a special case. If we are about to output a location descriptor
2516 for a variable or parameter which has been optimized out of existence,
2517 don't do that. Instead we output a zero-length location descriptor
2518 value as part of the location attribute.
2520 A variable which has been optimized out of existence will have a
2521 DECL_RTL value which denotes a pseudo-reg.
2523 Currently, in some rare cases, variables can have DECL_RTL values
2524 which look like (MEM (REG pseudo-reg#)). These cases are due to
2525 bugs elsewhere in the compiler. We treat such cases
2526 as if the variable(s) in question had been optimized out of existence.
2528 Note that in all cases where we wish to express the fact that a
2529 variable has been optimized out of existence, we do not simply
2530 suppress the generation of the entire location attribute because
2531 the absence of a location attribute in certain kinds of DIEs is
2532 used to indicate something else entirely... i.e. that the DIE
2533 represents an object declaration, but not a definition. So saith
2534 the PLSIG.
2537 if (! is_pseudo_reg (rtl)
2538 && (GET_CODE (rtl) != MEM || ! is_pseudo_reg (XEXP (rtl, 0))))
2539 output_loc_descriptor (rtl);
2541 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2544 /* Output the specialized form of location attribute used for data members
2545 of struct and union types.
2547 In the special case of a FIELD_DECL node which represents a bit-field,
2548 the "offset" part of this special location descriptor must indicate the
2549 distance in bytes from the lowest-addressed byte of the containing
2550 struct or union type to the lowest-addressed byte of the "containing
2551 object" for the bit-field. (See the `field_byte_offset' function above.)
2553 For any given bit-field, the "containing object" is a hypothetical
2554 object (of some integral or enum type) within which the given bit-field
2555 lives. The type of this hypothetical "containing object" is always the
2556 same as the declared type of the individual bit-field itself (for GCC
2557 anyway... the DWARF spec doesn't actually mandate this).
2559 Note that it is the size (in bytes) of the hypothetical "containing
2560 object" which will be given in the AT_byte_size attribute for this
2561 bit-field. (See the `byte_size_attribute' function below.) It is
2562 also used when calculating the value of the AT_bit_offset attribute.
2563 (See the `bit_offset_attribute' function below.) */
2565 static void
2566 data_member_location_attribute (tree t)
2568 unsigned object_offset_in_bytes;
2569 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2570 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2572 if (TREE_CODE (t) == TREE_VEC)
2573 object_offset_in_bytes = tree_low_cst (BINFO_OFFSET (t), 0);
2574 else
2575 object_offset_in_bytes = field_byte_offset (t);
2577 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2578 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2579 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2580 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2581 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2582 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_CONST);
2583 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, object_offset_in_bytes);
2584 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADD);
2585 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2588 /* Output an AT_const_value attribute for a variable or a parameter which
2589 does not have a "location" either in memory or in a register. These
2590 things can arise in GNU C when a constant is passed as an actual
2591 parameter to an inlined function. They can also arise in C++ where
2592 declared constants do not necessarily get memory "homes". */
2594 static void
2595 const_value_attribute (rtx rtl)
2597 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2598 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2600 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_const_value_block4);
2601 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2602 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2603 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
2604 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2606 switch (GET_CODE (rtl))
2608 case CONST_INT:
2609 /* Note that a CONST_INT rtx could represent either an integer or
2610 a floating-point constant. A CONST_INT is used whenever the
2611 constant will fit into a single word. In all such cases, the
2612 original mode of the constant value is wiped out, and the
2613 CONST_INT rtx is assigned VOIDmode. Since we no longer have
2614 precise mode information for these constants, we always just
2615 output them using 4 bytes. */
2617 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, (unsigned) INTVAL (rtl));
2618 break;
2620 case CONST_DOUBLE:
2621 /* Note that a CONST_DOUBLE rtx could represent either an integer
2622 or a floating-point constant. A CONST_DOUBLE is used whenever
2623 the constant requires more than one word in order to be adequately
2624 represented. In all such cases, the original mode of the constant
2625 value is preserved as the mode of the CONST_DOUBLE rtx, but for
2626 simplicity we always just output CONST_DOUBLEs using 8 bytes. */
2628 ASM_OUTPUT_DWARF_DATA8 (asm_out_file,
2629 (unsigned int) CONST_DOUBLE_HIGH (rtl),
2630 (unsigned int) CONST_DOUBLE_LOW (rtl));
2631 break;
2633 case CONST_STRING:
2634 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, XSTR (rtl, 0));
2635 break;
2637 case SYMBOL_REF:
2638 case LABEL_REF:
2639 case CONST:
2640 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, rtl);
2641 break;
2643 case PLUS:
2644 /* In cases where an inlined instance of an inline function is passed
2645 the address of an `auto' variable (which is local to the caller)
2646 we can get a situation where the DECL_RTL of the artificial
2647 local variable (for the inlining) which acts as a stand-in for
2648 the corresponding formal parameter (of the inline function)
2649 will look like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).
2650 This is not exactly a compile-time constant expression, but it
2651 isn't the address of the (artificial) local variable either.
2652 Rather, it represents the *value* which the artificial local
2653 variable always has during its lifetime. We currently have no
2654 way to represent such quasi-constant values in Dwarf, so for now
2655 we just punt and generate an AT_const_value attribute with form
2656 FORM_BLOCK4 and a length of zero. */
2657 break;
2659 default:
2660 abort (); /* No other kinds of rtx should be possible here. */
2663 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2666 /* Generate *either* an AT_location attribute or else an AT_const_value
2667 data attribute for a variable or a parameter. We generate the
2668 AT_const_value attribute only in those cases where the given
2669 variable or parameter does not have a true "location" either in
2670 memory or in a register. This can happen (for example) when a
2671 constant is passed as an actual argument in a call to an inline
2672 function. (It's possible that these things can crop up in other
2673 ways also.) Note that one type of constant value which can be
2674 passed into an inlined function is a constant pointer. This can
2675 happen for example if an actual argument in an inlined function
2676 call evaluates to a compile-time constant address. */
2678 static void
2679 location_or_const_value_attribute (tree decl)
2681 rtx rtl;
2683 if (TREE_CODE (decl) == ERROR_MARK)
2684 return;
2686 if ((TREE_CODE (decl) != VAR_DECL) && (TREE_CODE (decl) != PARM_DECL))
2688 /* Should never happen. */
2689 abort ();
2690 return;
2693 /* Here we have to decide where we are going to say the parameter "lives"
2694 (as far as the debugger is concerned). We only have a couple of choices.
2695 GCC provides us with DECL_RTL and with DECL_INCOMING_RTL. DECL_RTL
2696 normally indicates where the parameter lives during most of the activa-
2697 tion of the function. If optimization is enabled however, this could
2698 be either NULL or else a pseudo-reg. Both of those cases indicate that
2699 the parameter doesn't really live anywhere (as far as the code generation
2700 parts of GCC are concerned) during most of the function's activation.
2701 That will happen (for example) if the parameter is never referenced
2702 within the function.
2704 We could just generate a location descriptor here for all non-NULL
2705 non-pseudo values of DECL_RTL and ignore all of the rest, but we can
2706 be a little nicer than that if we also consider DECL_INCOMING_RTL in
2707 cases where DECL_RTL is NULL or is a pseudo-reg.
2709 Note however that we can only get away with using DECL_INCOMING_RTL as
2710 a backup substitute for DECL_RTL in certain limited cases. In cases
2711 where DECL_ARG_TYPE(decl) indicates the same type as TREE_TYPE(decl)
2712 we can be sure that the parameter was passed using the same type as it
2713 is declared to have within the function, and that its DECL_INCOMING_RTL
2714 points us to a place where a value of that type is passed. In cases
2715 where DECL_ARG_TYPE(decl) and TREE_TYPE(decl) are different types
2716 however, we cannot (in general) use DECL_INCOMING_RTL as a backup
2717 substitute for DECL_RTL because in these cases, DECL_INCOMING_RTL
2718 points us to a value of some type which is *different* from the type
2719 of the parameter itself. Thus, if we tried to use DECL_INCOMING_RTL
2720 to generate a location attribute in such cases, the debugger would
2721 end up (for example) trying to fetch a `float' from a place which
2722 actually contains the first part of a `double'. That would lead to
2723 really incorrect and confusing output at debug-time, and we don't
2724 want that now do we?
2726 So in general, we DO NOT use DECL_INCOMING_RTL as a backup for DECL_RTL
2727 in cases where DECL_ARG_TYPE(decl) != TREE_TYPE(decl). There are a
2728 couple of cute exceptions however. On little-endian machines we can
2729 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE(decl) is
2730 not the same as TREE_TYPE(decl) but only when DECL_ARG_TYPE(decl) is
2731 an integral type which is smaller than TREE_TYPE(decl). These cases
2732 arise when (on a little-endian machine) a non-prototyped function has
2733 a parameter declared to be of type `short' or `char'. In such cases,
2734 TREE_TYPE(decl) will be `short' or `char', DECL_ARG_TYPE(decl) will be
2735 `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
2736 passed `int' value. If the debugger then uses that address to fetch a
2737 `short' or a `char' (on a little-endian machine) the result will be the
2738 correct data, so we allow for such exceptional cases below.
2740 Note that our goal here is to describe the place where the given formal
2741 parameter lives during most of the function's activation (i.e. between
2742 the end of the prologue and the start of the epilogue). We'll do that
2743 as best as we can. Note however that if the given formal parameter is
2744 modified sometime during the execution of the function, then a stack
2745 backtrace (at debug-time) will show the function as having been called
2746 with the *new* value rather than the value which was originally passed
2747 in. This happens rarely enough that it is not a major problem, but it
2748 *is* a problem, and I'd like to fix it. A future version of dwarfout.c
2749 may generate two additional attributes for any given TAG_formal_parameter
2750 DIE which will describe the "passed type" and the "passed location" for
2751 the given formal parameter in addition to the attributes we now generate
2752 to indicate the "declared type" and the "active location" for each
2753 parameter. This additional set of attributes could be used by debuggers
2754 for stack backtraces.
2756 Separately, note that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL
2757 can be NULL also. This happens (for example) for inlined-instances of
2758 inline function formal parameters which are never referenced. This really
2759 shouldn't be happening. All PARM_DECL nodes should get valid non-NULL
2760 DECL_INCOMING_RTL values, but integrate.c doesn't currently generate
2761 these values for inlined instances of inline function parameters, so
2762 when we see such cases, we are just out-of-luck for the time
2763 being (until integrate.c gets fixed).
2766 /* Use DECL_RTL as the "location" unless we find something better. */
2767 rtl = DECL_RTL (decl);
2769 if (TREE_CODE (decl) == PARM_DECL)
2770 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
2772 /* This decl represents a formal parameter which was optimized out. */
2773 tree declared_type = type_main_variant (TREE_TYPE (decl));
2774 tree passed_type = type_main_variant (DECL_ARG_TYPE (decl));
2776 /* Note that DECL_INCOMING_RTL may be NULL in here, but we handle
2777 *all* cases where (rtl == NULL_RTX) just below. */
2779 if (declared_type == passed_type)
2780 rtl = DECL_INCOMING_RTL (decl);
2781 else if (! BYTES_BIG_ENDIAN)
2782 if (TREE_CODE (declared_type) == INTEGER_TYPE)
2783 /* NMS WTF? */
2784 if (TYPE_SIZE (declared_type) <= TYPE_SIZE (passed_type))
2785 rtl = DECL_INCOMING_RTL (decl);
2788 if (rtl == NULL_RTX)
2789 return;
2791 rtl = eliminate_regs (rtl, 0, NULL_RTX);
2792 #ifdef LEAF_REG_REMAP
2793 if (current_function_uses_only_leaf_regs)
2794 leaf_renumber_regs_insn (rtl);
2795 #endif
2797 switch (GET_CODE (rtl))
2799 case ADDRESSOF:
2800 /* The address of a variable that was optimized away; don't emit
2801 anything. */
2802 break;
2804 case CONST_INT:
2805 case CONST_DOUBLE:
2806 case CONST_STRING:
2807 case SYMBOL_REF:
2808 case LABEL_REF:
2809 case CONST:
2810 case PLUS: /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
2811 const_value_attribute (rtl);
2812 break;
2814 case MEM:
2815 case REG:
2816 case SUBREG:
2817 location_attribute (rtl);
2818 break;
2820 case CONCAT:
2821 /* ??? CONCAT is used for complex variables, which may have the real
2822 part stored in one place and the imag part stored somewhere else.
2823 DWARF1 has no way to describe a variable that lives in two different
2824 places, so we just describe where the first part lives, and hope that
2825 the second part is stored after it. */
2826 location_attribute (XEXP (rtl, 0));
2827 break;
2829 default:
2830 abort (); /* Should never happen. */
2834 /* Generate an AT_name attribute given some string value to be included as
2835 the value of the attribute. */
2837 static inline void
2838 name_attribute (const char *name_string)
2840 if (name_string && *name_string)
2842 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_name);
2843 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, name_string);
2847 static inline void
2848 fund_type_attribute (unsigned int ft_code)
2850 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_fund_type);
2851 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, ft_code);
2854 static void
2855 mod_fund_type_attribute (tree type, int decl_const, int decl_volatile)
2857 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2858 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2860 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_fund_type);
2861 sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
2862 sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
2863 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2864 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2865 write_modifier_bytes (type, decl_const, decl_volatile);
2866 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
2867 fundamental_type_code (root_type (type)));
2868 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2871 static inline void
2872 user_def_type_attribute (tree type)
2874 char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
2876 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_user_def_type);
2877 sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (type));
2878 ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
2881 static void
2882 mod_u_d_type_attribute (tree type, int decl_const, int decl_volatile)
2884 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2885 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2886 char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
2888 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_u_d_type);
2889 sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
2890 sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
2891 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2892 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2893 write_modifier_bytes (type, decl_const, decl_volatile);
2894 sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (root_type (type)));
2895 ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
2896 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2899 #ifdef USE_ORDERING_ATTRIBUTE
2900 static inline void
2901 ordering_attribute (unsigned ordering)
2903 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_ordering);
2904 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, ordering);
2906 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
2908 /* Note that the block of subscript information for an array type also
2909 includes information about the element type of type given array type. */
2911 static void
2912 subscript_data_attribute (tree type)
2914 unsigned dimension_number;
2915 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2916 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2918 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_subscr_data);
2919 sprintf (begin_label, SS_BEGIN_LABEL_FMT, current_dienum);
2920 sprintf (end_label, SS_END_LABEL_FMT, current_dienum);
2921 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2922 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2924 /* The GNU compilers represent multidimensional array types as sequences
2925 of one dimensional array types whose element types are themselves array
2926 types. Here we squish that down, so that each multidimensional array
2927 type gets only one array_type DIE in the Dwarf debugging info. The
2928 draft Dwarf specification say that we are allowed to do this kind
2929 of compression in C (because there is no difference between an
2930 array or arrays and a multidimensional array in C) but for other
2931 source languages (e.g. Ada) we probably shouldn't do this. */
2933 for (dimension_number = 0;
2934 TREE_CODE (type) == ARRAY_TYPE;
2935 type = TREE_TYPE (type), dimension_number++)
2937 tree domain = TYPE_DOMAIN (type);
2939 /* Arrays come in three flavors. Unspecified bounds, fixed
2940 bounds, and (in GNU C only) variable bounds. Handle all
2941 three forms here. */
2943 if (domain)
2945 /* We have an array type with specified bounds. */
2947 tree lower = TYPE_MIN_VALUE (domain);
2948 tree upper = TYPE_MAX_VALUE (domain);
2950 /* Handle only fundamental types as index types for now. */
2951 if (! type_is_fundamental (domain))
2952 abort ();
2954 /* Output the representation format byte for this dimension. */
2955 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file,
2956 FMT_CODE (1, TREE_CODE (lower) == INTEGER_CST,
2957 upper && TREE_CODE (upper) == INTEGER_CST));
2959 /* Output the index type for this dimension. */
2960 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
2961 fundamental_type_code (domain));
2963 /* Output the representation for the lower bound. */
2964 output_bound_representation (lower, dimension_number, 'l');
2966 /* Output the representation for the upper bound. */
2967 if (upper)
2968 output_bound_representation (upper, dimension_number, 'u');
2969 else
2970 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
2972 else
2974 /* We have an array type with an unspecified length. For C and
2975 C++ we can assume that this really means that (a) the index
2976 type is an integral type, and (b) the lower bound is zero.
2977 Note that Dwarf defines the representation of an unspecified
2978 (upper) bound as being a zero-length location description. */
2980 /* Output the array-bounds format byte. */
2982 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_FT_C_X);
2984 /* Output the (assumed) index type. */
2986 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, FT_integer);
2988 /* Output the (assumed) lower bound (constant) value. */
2990 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
2992 /* Output the (empty) location description for the upper bound. */
2994 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
2998 /* Output the prefix byte that says that the element type is coming up. */
3000 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_ET);
3002 /* Output a representation of the type of the elements of this array type. */
3004 type_attribute (type, 0, 0);
3006 ASM_OUTPUT_LABEL (asm_out_file, end_label);
3009 static void
3010 byte_size_attribute (tree tree_node)
3012 unsigned size;
3014 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_byte_size);
3015 switch (TREE_CODE (tree_node))
3017 case ERROR_MARK:
3018 size = 0;
3019 break;
3021 case ENUMERAL_TYPE:
3022 case RECORD_TYPE:
3023 case UNION_TYPE:
3024 case QUAL_UNION_TYPE:
3025 case ARRAY_TYPE:
3026 size = int_size_in_bytes (tree_node);
3027 break;
3029 case FIELD_DECL:
3030 /* For a data member of a struct or union, the AT_byte_size is
3031 generally given as the number of bytes normally allocated for
3032 an object of the *declared* type of the member itself. This
3033 is true even for bit-fields. */
3034 size = simple_type_size_in_bits (field_type (tree_node))
3035 / BITS_PER_UNIT;
3036 break;
3038 default:
3039 abort ();
3042 /* Note that `size' might be -1 when we get to this point. If it
3043 is, that indicates that the byte size of the entity in question
3044 is variable. We have no good way of expressing this fact in Dwarf
3045 at the present time, so just let the -1 pass on through. */
3047 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, size);
3050 /* For a FIELD_DECL node which represents a bit-field, output an attribute
3051 which specifies the distance in bits from the highest order bit of the
3052 "containing object" for the bit-field to the highest order bit of the
3053 bit-field itself.
3055 For any given bit-field, the "containing object" is a hypothetical
3056 object (of some integral or enum type) within which the given bit-field
3057 lives. The type of this hypothetical "containing object" is always the
3058 same as the declared type of the individual bit-field itself.
3060 The determination of the exact location of the "containing object" for
3061 a bit-field is rather complicated. It's handled by the `field_byte_offset'
3062 function (above).
3064 Note that it is the size (in bytes) of the hypothetical "containing
3065 object" which will be given in the AT_byte_size attribute for this
3066 bit-field. (See `byte_size_attribute' above.) */
3068 static inline void
3069 bit_offset_attribute (tree decl)
3071 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
3072 tree type = DECL_BIT_FIELD_TYPE (decl);
3073 HOST_WIDE_INT bitpos_int;
3074 HOST_WIDE_INT highest_order_object_bit_offset;
3075 HOST_WIDE_INT highest_order_field_bit_offset;
3076 HOST_WIDE_INT bit_offset;
3078 /* Must be a bit field. */
3079 if (!type
3080 || TREE_CODE (decl) != FIELD_DECL)
3081 abort ();
3083 /* We can't yet handle bit-fields whose offsets or sizes are variable, so
3084 if we encounter such things, just return without generating any
3085 attribute whatsoever. */
3087 if (! host_integerp (bit_position (decl), 0)
3088 || ! host_integerp (DECL_SIZE (decl), 1))
3089 return;
3091 bitpos_int = int_bit_position (decl);
3093 /* Note that the bit offset is always the distance (in bits) from the
3094 highest-order bit of the "containing object" to the highest-order
3095 bit of the bit-field itself. Since the "high-order end" of any
3096 object or field is different on big-endian and little-endian machines,
3097 the computation below must take account of these differences. */
3099 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
3100 highest_order_field_bit_offset = bitpos_int;
3102 if (! BYTES_BIG_ENDIAN)
3104 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 1);
3105 highest_order_object_bit_offset += simple_type_size_in_bits (type);
3108 bit_offset =
3109 (! BYTES_BIG_ENDIAN
3110 ? highest_order_object_bit_offset - highest_order_field_bit_offset
3111 : highest_order_field_bit_offset - highest_order_object_bit_offset);
3113 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_offset);
3114 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, bit_offset);
3117 /* For a FIELD_DECL node which represents a bit field, output an attribute
3118 which specifies the length in bits of the given field. */
3120 static inline void
3121 bit_size_attribute (tree decl)
3123 /* Must be a field and a bit field. */
3124 if (TREE_CODE (decl) != FIELD_DECL
3125 || ! DECL_BIT_FIELD_TYPE (decl))
3126 abort ();
3128 if (host_integerp (DECL_SIZE (decl), 1))
3130 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_size);
3131 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
3132 tree_low_cst (DECL_SIZE (decl), 1));
3136 /* The following routine outputs the `element_list' attribute for enumeration
3137 type DIEs. The element_lits attribute includes the names and values of
3138 all of the enumeration constants associated with the given enumeration
3139 type. */
3141 static inline void
3142 element_list_attribute (tree element)
3144 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3145 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3147 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_element_list);
3148 sprintf (begin_label, EE_BEGIN_LABEL_FMT, current_dienum);
3149 sprintf (end_label, EE_END_LABEL_FMT, current_dienum);
3150 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
3151 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3153 /* Here we output a list of value/name pairs for each enumeration constant
3154 defined for this enumeration type (as required), but we do it in REVERSE
3155 order. The order is the one required by the draft #5 Dwarf specification
3156 published by the UI/PLSIG. */
3158 output_enumeral_list (element); /* Recursively output the whole list. */
3160 ASM_OUTPUT_LABEL (asm_out_file, end_label);
3163 /* Generate an AT_stmt_list attribute. These are normally present only in
3164 DIEs with a TAG_compile_unit tag. */
3166 static inline void
3167 stmt_list_attribute (const char *label)
3169 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_stmt_list);
3170 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
3171 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
3174 /* Generate an AT_low_pc attribute for a label DIE, a lexical_block DIE or
3175 for a subroutine DIE. */
3177 static inline void
3178 low_pc_attribute (const char *asm_low_label)
3180 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_low_pc);
3181 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_low_label);
3184 /* Generate an AT_high_pc attribute for a lexical_block DIE or for a
3185 subroutine DIE. */
3187 static inline void
3188 high_pc_attribute (const char *asm_high_label)
3190 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_high_pc);
3191 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_high_label);
3194 /* Generate an AT_body_begin attribute for a subroutine DIE. */
3196 static inline void
3197 body_begin_attribute (const char *asm_begin_label)
3199 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_begin);
3200 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_begin_label);
3203 /* Generate an AT_body_end attribute for a subroutine DIE. */
3205 static inline void
3206 body_end_attribute (const char *asm_end_label)
3208 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_end);
3209 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_end_label);
3212 /* Generate an AT_language attribute given a LANG value. These attributes
3213 are used only within TAG_compile_unit DIEs. */
3215 static inline void
3216 language_attribute (unsigned int language_code)
3218 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_language);
3219 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, language_code);
3222 static inline void
3223 member_attribute (tree context)
3225 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3227 /* Generate this attribute only for members in C++. */
3229 if (context != NULL && is_tagged_type (context))
3231 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_member);
3232 sprintf (label, TYPE_NAME_FMT, TYPE_UID (context));
3233 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3237 #if 0
3238 #ifndef SL_BEGIN_LABEL_FMT
3239 #define SL_BEGIN_LABEL_FMT "*.L_sl%u"
3240 #endif
3241 #ifndef SL_END_LABEL_FMT
3242 #define SL_END_LABEL_FMT "*.L_sl%u_e"
3243 #endif
3245 static inline void
3246 string_length_attribute (tree upper_bound)
3248 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3249 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3251 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_string_length);
3252 sprintf (begin_label, SL_BEGIN_LABEL_FMT, current_dienum);
3253 sprintf (end_label, SL_END_LABEL_FMT, current_dienum);
3254 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
3255 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3256 output_bound_representation (upper_bound, 0, 'u');
3257 ASM_OUTPUT_LABEL (asm_out_file, end_label);
3259 #endif
3261 static inline void
3262 comp_dir_attribute (const char *dirname)
3264 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_comp_dir);
3265 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
3268 static inline void
3269 sf_names_attribute (const char *sf_names_start_label)
3271 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sf_names);
3272 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
3273 ASM_OUTPUT_DWARF_ADDR (asm_out_file, sf_names_start_label);
3276 static inline void
3277 src_info_attribute (const char *src_info_start_label)
3279 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_info);
3280 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
3281 ASM_OUTPUT_DWARF_ADDR (asm_out_file, src_info_start_label);
3284 static inline void
3285 mac_info_attribute (const char *mac_info_start_label)
3287 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mac_info);
3288 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
3289 ASM_OUTPUT_DWARF_ADDR (asm_out_file, mac_info_start_label);
3292 static inline void
3293 prototyped_attribute (tree func_type)
3295 if ((strcmp (lang_hooks.name, "GNU C") == 0)
3296 && (TYPE_ARG_TYPES (func_type) != NULL))
3298 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_prototyped);
3299 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3303 static inline void
3304 producer_attribute (const char *producer)
3306 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_producer);
3307 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, producer);
3310 static inline void
3311 inline_attribute (tree decl)
3313 if (DECL_INLINE (decl))
3315 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_inline);
3316 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3320 static inline void
3321 containing_type_attribute (tree containing_type)
3323 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3325 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_containing_type);
3326 sprintf (label, TYPE_NAME_FMT, TYPE_UID (containing_type));
3327 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3330 static inline void
3331 abstract_origin_attribute (tree origin)
3333 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3335 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_abstract_origin);
3336 switch (TREE_CODE_CLASS (TREE_CODE (origin)))
3338 case 'd':
3339 sprintf (label, DECL_NAME_FMT, DECL_UID (origin));
3340 break;
3342 case 't':
3343 sprintf (label, TYPE_NAME_FMT, TYPE_UID (origin));
3344 break;
3346 default:
3347 abort (); /* Should never happen. */
3350 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3353 #ifdef DWARF_DECL_COORDINATES
3354 static inline void
3355 src_coords_attribute (unsigned src_fileno, unsigned src_lineno)
3357 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_coords);
3358 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_fileno);
3359 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_lineno);
3361 #endif /* defined(DWARF_DECL_COORDINATES) */
3363 static inline void
3364 pure_or_virtual_attribute (tree func_decl)
3366 if (DECL_VIRTUAL_P (func_decl))
3368 #if 0 /* DECL_ABSTRACT_VIRTUAL_P is C++-specific. */
3369 if (DECL_ABSTRACT_VIRTUAL_P (func_decl))
3370 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_pure_virtual);
3371 else
3372 #endif
3373 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
3374 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3378 /************************* end of attributes *****************************/
3380 /********************* utility routines for DIEs *************************/
3382 /* Output an AT_name attribute and an AT_src_coords attribute for the
3383 given decl, but only if it actually has a name. */
3385 static void
3386 name_and_src_coords_attributes (tree decl)
3388 tree decl_name = DECL_NAME (decl);
3390 if (decl_name && IDENTIFIER_POINTER (decl_name))
3392 name_attribute (IDENTIFIER_POINTER (decl_name));
3393 #ifdef DWARF_DECL_COORDINATES
3395 register unsigned file_index;
3397 /* This is annoying, but we have to pop out of the .debug section
3398 for a moment while we call `lookup_filename' because calling it
3399 may cause a temporary switch into the .debug_sfnames section and
3400 most svr4 assemblers are not smart enough to be able to nest
3401 section switches to any depth greater than one. Note that we
3402 also can't skirt this issue by delaying all output to the
3403 .debug_sfnames section unit the end of compilation because that
3404 would cause us to have inter-section forward references and
3405 Fred Fish sez that m68k/svr4 assemblers botch those. */
3407 ASM_OUTPUT_POP_SECTION (asm_out_file);
3408 file_index = lookup_filename (DECL_SOURCE_FILE (decl));
3409 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
3411 src_coords_attribute (file_index, DECL_SOURCE_LINE (decl));
3413 #endif /* defined(DWARF_DECL_COORDINATES) */
3417 /* Many forms of DIEs contain a "type description" part. The following
3418 routine writes out these "type descriptor" parts. */
3420 static void
3421 type_attribute (tree type, int decl_const, int decl_volatile)
3423 enum tree_code code = TREE_CODE (type);
3424 int root_type_modified;
3426 if (code == ERROR_MARK)
3427 return;
3429 /* Handle a special case. For functions whose return type is void,
3430 we generate *no* type attribute. (Note that no object may have
3431 type `void', so this only applies to function return types. */
3433 if (code == VOID_TYPE)
3434 return;
3436 /* If this is a subtype, find the underlying type. Eventually,
3437 this should write out the appropriate subtype info. */
3438 while ((code == INTEGER_TYPE || code == REAL_TYPE)
3439 && TREE_TYPE (type) != 0)
3440 type = TREE_TYPE (type), code = TREE_CODE (type);
3442 root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
3443 || decl_const || decl_volatile
3444 || TYPE_READONLY (type) || TYPE_VOLATILE (type));
3446 if (type_is_fundamental (root_type (type)))
3448 if (root_type_modified)
3449 mod_fund_type_attribute (type, decl_const, decl_volatile);
3450 else
3451 fund_type_attribute (fundamental_type_code (type));
3453 else
3455 if (root_type_modified)
3456 mod_u_d_type_attribute (type, decl_const, decl_volatile);
3457 else
3458 /* We have to get the type_main_variant here (and pass that to the
3459 `user_def_type_attribute' routine) because the ..._TYPE node we
3460 have might simply be a *copy* of some original type node (where
3461 the copy was created to help us keep track of typedef names)
3462 and that copy might have a different TYPE_UID from the original
3463 ..._TYPE node. (Note that when `equate_type_number_to_die_number'
3464 is labeling a given type DIE for future reference, it always and
3465 only creates labels for DIEs representing *main variants*, and it
3466 never even knows about non-main-variants.) */
3467 user_def_type_attribute (type_main_variant (type));
3471 /* Given a tree pointer to a struct, class, union, or enum type node, return
3472 a pointer to the (string) tag name for the given type, or zero if the
3473 type was declared without a tag. */
3475 static const char *
3476 type_tag (tree type)
3478 const char *name = 0;
3480 if (TYPE_NAME (type) != 0)
3482 tree t = 0;
3484 /* Find the IDENTIFIER_NODE for the type name. */
3485 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3486 t = TYPE_NAME (type);
3488 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
3489 a TYPE_DECL node, regardless of whether or not a `typedef' was
3490 involved. */
3491 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
3492 && ! DECL_IGNORED_P (TYPE_NAME (type)))
3493 t = DECL_NAME (TYPE_NAME (type));
3495 /* Now get the name as a string, or invent one. */
3496 if (t != 0)
3497 name = IDENTIFIER_POINTER (t);
3500 return (name == 0 || *name == '\0') ? 0 : name;
3503 static inline void
3504 dienum_push (void)
3506 /* Start by checking if the pending_sibling_stack needs to be expanded.
3507 If necessary, expand it. */
3509 if (pending_siblings == pending_siblings_allocated)
3511 pending_siblings_allocated += PENDING_SIBLINGS_INCREMENT;
3512 pending_sibling_stack
3513 = xrealloc (pending_sibling_stack,
3514 pending_siblings_allocated * sizeof(unsigned));
3517 pending_siblings++;
3518 NEXT_DIE_NUM = next_unused_dienum++;
3521 /* Pop the sibling stack so that the most recently pushed DIEnum becomes the
3522 NEXT_DIE_NUM. */
3524 static inline void
3525 dienum_pop (void)
3527 pending_siblings--;
3530 static inline tree
3531 member_declared_type (tree member)
3533 return (DECL_BIT_FIELD_TYPE (member))
3534 ? DECL_BIT_FIELD_TYPE (member)
3535 : TREE_TYPE (member);
3538 /* Get the function's label, as described by its RTL.
3539 This may be different from the DECL_NAME name used
3540 in the source file. */
3542 static const char *
3543 function_start_label (tree decl)
3545 rtx x;
3546 const char *fnname;
3548 x = DECL_RTL (decl);
3549 if (GET_CODE (x) != MEM)
3550 abort ();
3551 x = XEXP (x, 0);
3552 if (GET_CODE (x) != SYMBOL_REF)
3553 abort ();
3554 fnname = XSTR (x, 0);
3555 return fnname;
3559 /******************************* DIEs ************************************/
3561 /* Output routines for individual types of DIEs. */
3563 /* Note that every type of DIE (except a null DIE) gets a sibling. */
3565 static void
3566 output_array_type_die (void *arg)
3568 tree type = arg;
3570 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_array_type);
3571 sibling_attribute ();
3572 equate_type_number_to_die_number (type);
3573 member_attribute (TYPE_CONTEXT (type));
3575 /* I believe that we can default the array ordering. SDB will probably
3576 do the right things even if AT_ordering is not present. It's not
3577 even an issue until we start to get into multidimensional arrays
3578 anyway. If SDB is ever caught doing the Wrong Thing for multi-
3579 dimensional arrays, then we'll have to put the AT_ordering attribute
3580 back in. (But if and when we find out that we need to put these in,
3581 we will only do so for multidimensional arrays. After all, we don't
3582 want to waste space in the .debug section now do we?) */
3584 #ifdef USE_ORDERING_ATTRIBUTE
3585 ordering_attribute (ORD_row_major);
3586 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
3588 subscript_data_attribute (type);
3591 static void
3592 output_set_type_die (void *arg)
3594 tree type = arg;
3596 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_set_type);
3597 sibling_attribute ();
3598 equate_type_number_to_die_number (type);
3599 member_attribute (TYPE_CONTEXT (type));
3600 type_attribute (TREE_TYPE (type), 0, 0);
3603 #if 0
3604 /* Implement this when there is a GNU FORTRAN or GNU Ada front end. */
3606 static void
3607 output_entry_point_die (void *arg)
3609 tree decl = arg;
3610 tree origin = decl_ultimate_origin (decl);
3612 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_entry_point);
3613 sibling_attribute ();
3614 dienum_push ();
3615 if (origin != NULL)
3616 abstract_origin_attribute (origin);
3617 else
3619 name_and_src_coords_attributes (decl);
3620 member_attribute (DECL_CONTEXT (decl));
3621 type_attribute (TREE_TYPE (TREE_TYPE (decl)), 0, 0);
3623 if (DECL_ABSTRACT (decl))
3624 equate_decl_number_to_die_number (decl);
3625 else
3626 low_pc_attribute (function_start_label (decl));
3628 #endif
3630 /* Output a DIE to represent an inlined instance of an enumeration type. */
3632 static void
3633 output_inlined_enumeration_type_die (void *arg)
3635 tree type = arg;
3637 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3638 sibling_attribute ();
3639 if (!TREE_ASM_WRITTEN (type))
3640 abort ();
3641 abstract_origin_attribute (type);
3644 /* Output a DIE to represent an inlined instance of a structure type. */
3646 static void
3647 output_inlined_structure_type_die (void *arg)
3649 tree type = arg;
3651 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
3652 sibling_attribute ();
3653 if (!TREE_ASM_WRITTEN (type))
3654 abort ();
3655 abstract_origin_attribute (type);
3658 /* Output a DIE to represent an inlined instance of a union type. */
3660 static void
3661 output_inlined_union_type_die (void *arg)
3663 tree type = arg;
3665 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
3666 sibling_attribute ();
3667 if (!TREE_ASM_WRITTEN (type))
3668 abort ();
3669 abstract_origin_attribute (type);
3672 /* Output a DIE to represent an enumeration type. Note that these DIEs
3673 include all of the information about the enumeration values also.
3674 This information is encoded into the element_list attribute. */
3676 static void
3677 output_enumeration_type_die (void *arg)
3679 tree type = arg;
3681 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3682 sibling_attribute ();
3683 equate_type_number_to_die_number (type);
3684 name_attribute (type_tag (type));
3685 member_attribute (TYPE_CONTEXT (type));
3687 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
3688 given enum type is incomplete, do not generate the AT_byte_size
3689 attribute or the AT_element_list attribute. */
3691 if (COMPLETE_TYPE_P (type))
3693 byte_size_attribute (type);
3694 element_list_attribute (TYPE_FIELDS (type));
3698 /* Output a DIE to represent either a real live formal parameter decl or
3699 to represent just the type of some formal parameter position in some
3700 function type.
3702 Note that this routine is a bit unusual because its argument may be
3703 a ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
3704 represents an inlining of some PARM_DECL) or else some sort of a
3705 ..._TYPE node. If it's the former then this function is being called
3706 to output a DIE to represent a formal parameter object (or some inlining
3707 thereof). If it's the latter, then this function is only being called
3708 to output a TAG_formal_parameter DIE to stand as a placeholder for some
3709 formal argument type of some subprogram type. */
3711 static void
3712 output_formal_parameter_die (void *arg)
3714 tree node = arg;
3716 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_formal_parameter);
3717 sibling_attribute ();
3719 switch (TREE_CODE_CLASS (TREE_CODE (node)))
3721 case 'd': /* We were called with some kind of a ..._DECL node. */
3723 register tree origin = decl_ultimate_origin (node);
3725 if (origin != NULL)
3726 abstract_origin_attribute (origin);
3727 else
3729 name_and_src_coords_attributes (node);
3730 type_attribute (TREE_TYPE (node),
3731 TREE_READONLY (node), TREE_THIS_VOLATILE (node));
3733 if (DECL_ABSTRACT (node))
3734 equate_decl_number_to_die_number (node);
3735 else
3736 location_or_const_value_attribute (node);
3738 break;
3740 case 't': /* We were called with some kind of a ..._TYPE node. */
3741 type_attribute (node, 0, 0);
3742 break;
3744 default:
3745 abort (); /* Should never happen. */
3749 /* Output a DIE to represent a declared function (either file-scope
3750 or block-local) which has "external linkage" (according to ANSI-C). */
3752 static void
3753 output_global_subroutine_die (void *arg)
3755 tree decl = arg;
3756 tree origin = decl_ultimate_origin (decl);
3758 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_subroutine);
3759 sibling_attribute ();
3760 dienum_push ();
3761 if (origin != NULL)
3762 abstract_origin_attribute (origin);
3763 else
3765 tree type = TREE_TYPE (decl);
3767 name_and_src_coords_attributes (decl);
3768 inline_attribute (decl);
3769 prototyped_attribute (type);
3770 member_attribute (DECL_CONTEXT (decl));
3771 type_attribute (TREE_TYPE (type), 0, 0);
3772 pure_or_virtual_attribute (decl);
3774 if (DECL_ABSTRACT (decl))
3775 equate_decl_number_to_die_number (decl);
3776 else
3778 if (! DECL_EXTERNAL (decl) && ! in_class
3779 && decl == current_function_decl)
3781 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3783 low_pc_attribute (function_start_label (decl));
3784 sprintf (label, FUNC_END_LABEL_FMT, current_function_funcdef_no);
3785 high_pc_attribute (label);
3786 if (use_gnu_debug_info_extensions)
3788 sprintf (label, BODY_BEGIN_LABEL_FMT,
3789 current_function_funcdef_no);
3790 body_begin_attribute (label);
3791 sprintf (label, BODY_END_LABEL_FMT, current_function_funcdef_no);
3792 body_end_attribute (label);
3798 /* Output a DIE to represent a declared data object (either file-scope
3799 or block-local) which has "external linkage" (according to ANSI-C). */
3801 static void
3802 output_global_variable_die (void *arg)
3804 tree decl = arg;
3805 tree origin = decl_ultimate_origin (decl);
3807 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_variable);
3808 sibling_attribute ();
3809 if (origin != NULL)
3810 abstract_origin_attribute (origin);
3811 else
3813 name_and_src_coords_attributes (decl);
3814 member_attribute (DECL_CONTEXT (decl));
3815 type_attribute (TREE_TYPE (decl),
3816 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3818 if (DECL_ABSTRACT (decl))
3819 equate_decl_number_to_die_number (decl);
3820 else
3822 if (! DECL_EXTERNAL (decl) && ! in_class
3823 && current_function_decl == decl_function_context (decl))
3824 location_or_const_value_attribute (decl);
3828 static void
3829 output_label_die (void *arg)
3831 tree decl = arg;
3832 tree origin = decl_ultimate_origin (decl);
3834 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_label);
3835 sibling_attribute ();
3836 if (origin != NULL)
3837 abstract_origin_attribute (origin);
3838 else
3839 name_and_src_coords_attributes (decl);
3840 if (DECL_ABSTRACT (decl))
3841 equate_decl_number_to_die_number (decl);
3842 else
3844 rtx insn = DECL_RTL (decl);
3846 /* Deleted labels are programmer specified labels which have been
3847 eliminated because of various optimizations. We still emit them
3848 here so that it is possible to put breakpoints on them. */
3849 if (GET_CODE (insn) == CODE_LABEL
3850 || ((GET_CODE (insn) == NOTE
3851 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)))
3853 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3855 /* When optimization is enabled (via -O) some parts of the compiler
3856 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
3857 represent source-level labels which were explicitly declared by
3858 the user. This really shouldn't be happening though, so catch
3859 it if it ever does happen. */
3861 if (INSN_DELETED_P (insn))
3862 abort (); /* Should never happen. */
3864 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
3865 low_pc_attribute (label);
3870 static void
3871 output_lexical_block_die (void *arg)
3873 tree stmt = arg;
3875 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_lexical_block);
3876 sibling_attribute ();
3877 dienum_push ();
3878 if (! BLOCK_ABSTRACT (stmt))
3880 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3881 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3883 sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, BLOCK_NUMBER (stmt));
3884 low_pc_attribute (begin_label);
3885 sprintf (end_label, BLOCK_END_LABEL_FMT, BLOCK_NUMBER (stmt));
3886 high_pc_attribute (end_label);
3890 static void
3891 output_inlined_subroutine_die (void *arg)
3893 tree stmt = arg;
3895 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inlined_subroutine);
3896 sibling_attribute ();
3897 dienum_push ();
3898 abstract_origin_attribute (block_ultimate_origin (stmt));
3899 if (! BLOCK_ABSTRACT (stmt))
3901 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3902 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3904 sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, BLOCK_NUMBER (stmt));
3905 low_pc_attribute (begin_label);
3906 sprintf (end_label, BLOCK_END_LABEL_FMT, BLOCK_NUMBER (stmt));
3907 high_pc_attribute (end_label);
3911 /* Output a DIE to represent a declared data object (either file-scope
3912 or block-local) which has "internal linkage" (according to ANSI-C). */
3914 static void
3915 output_local_variable_die (void *arg)
3917 tree decl = arg;
3918 tree origin = decl_ultimate_origin (decl);
3920 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_local_variable);
3921 sibling_attribute ();
3922 if (origin != NULL)
3923 abstract_origin_attribute (origin);
3924 else
3926 name_and_src_coords_attributes (decl);
3927 member_attribute (DECL_CONTEXT (decl));
3928 type_attribute (TREE_TYPE (decl),
3929 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3931 if (DECL_ABSTRACT (decl))
3932 equate_decl_number_to_die_number (decl);
3933 else
3934 location_or_const_value_attribute (decl);
3937 static void
3938 output_member_die (void *arg)
3940 tree decl = arg;
3942 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_member);
3943 sibling_attribute ();
3944 name_and_src_coords_attributes (decl);
3945 member_attribute (DECL_CONTEXT (decl));
3946 type_attribute (member_declared_type (decl),
3947 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3948 if (DECL_BIT_FIELD_TYPE (decl)) /* If this is a bit field... */
3950 byte_size_attribute (decl);
3951 bit_size_attribute (decl);
3952 bit_offset_attribute (decl);
3954 data_member_location_attribute (decl);
3957 #if 0
3958 /* Don't generate either pointer_type DIEs or reference_type DIEs. Use
3959 modified types instead.
3961 We keep this code here just in case these types of DIEs may be
3962 needed to represent certain things in other languages (e.g. Pascal)
3963 someday. */
3965 static void
3966 output_pointer_type_die (void *arg)
3968 tree type = arg;
3970 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_pointer_type);
3971 sibling_attribute ();
3972 equate_type_number_to_die_number (type);
3973 member_attribute (TYPE_CONTEXT (type));
3974 type_attribute (TREE_TYPE (type), 0, 0);
3977 static void
3978 output_reference_type_die (void *arg)
3980 tree type = arg;
3982 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_reference_type);
3983 sibling_attribute ();
3984 equate_type_number_to_die_number (type);
3985 member_attribute (TYPE_CONTEXT (type));
3986 type_attribute (TREE_TYPE (type), 0, 0);
3988 #endif
3990 static void
3991 output_ptr_to_mbr_type_die (void *arg)
3993 tree type = arg;
3995 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_ptr_to_member_type);
3996 sibling_attribute ();
3997 equate_type_number_to_die_number (type);
3998 member_attribute (TYPE_CONTEXT (type));
3999 containing_type_attribute (TYPE_OFFSET_BASETYPE (type));
4000 type_attribute (TREE_TYPE (type), 0, 0);
4003 static void
4004 output_compile_unit_die (void *arg)
4006 const char *main_input_filename = arg;
4007 const char *language_string = lang_hooks.name;
4009 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_compile_unit);
4010 sibling_attribute ();
4011 dienum_push ();
4012 name_attribute (main_input_filename);
4015 char producer[250];
4017 sprintf (producer, "%s %s", language_string, version_string);
4018 producer_attribute (producer);
4021 if (strcmp (language_string, "GNU C++") == 0)
4022 language_attribute (LANG_C_PLUS_PLUS);
4023 else if (strcmp (language_string, "GNU Ada") == 0)
4024 language_attribute (LANG_ADA83);
4025 else if (strcmp (language_string, "GNU F77") == 0)
4026 language_attribute (LANG_FORTRAN77);
4027 else if (strcmp (language_string, "GNU Pascal") == 0)
4028 language_attribute (LANG_PASCAL83);
4029 else if (strcmp (language_string, "GNU Java") == 0)
4030 language_attribute (LANG_JAVA);
4031 else
4032 language_attribute (LANG_C89);
4033 low_pc_attribute (TEXT_BEGIN_LABEL);
4034 high_pc_attribute (TEXT_END_LABEL);
4035 if (debug_info_level >= DINFO_LEVEL_NORMAL)
4036 stmt_list_attribute (LINE_BEGIN_LABEL);
4039 const char *wd = get_src_pwd ();
4040 if (wd)
4041 comp_dir_attribute (wd);
4044 if (debug_info_level >= DINFO_LEVEL_NORMAL && use_gnu_debug_info_extensions)
4046 sf_names_attribute (SFNAMES_BEGIN_LABEL);
4047 src_info_attribute (SRCINFO_BEGIN_LABEL);
4048 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
4049 mac_info_attribute (MACINFO_BEGIN_LABEL);
4053 static void
4054 output_string_type_die (void *arg)
4056 tree type = arg;
4058 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_string_type);
4059 sibling_attribute ();
4060 equate_type_number_to_die_number (type);
4061 member_attribute (TYPE_CONTEXT (type));
4062 /* This is a fixed length string. */
4063 byte_size_attribute (type);
4066 static void
4067 output_inheritance_die (void *arg)
4069 tree binfo = ((tree *)arg)[0];
4070 tree access = ((tree *)arg)[1];
4072 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inheritance);
4073 sibling_attribute ();
4074 type_attribute (BINFO_TYPE (binfo), 0, 0);
4075 data_member_location_attribute (binfo);
4076 if (TREE_VIA_VIRTUAL (binfo))
4078 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
4079 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4081 if (access == access_public_node)
4083 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_public);
4084 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4086 else if (access == access_protected_node)
4088 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_protected);
4089 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4093 static void
4094 output_structure_type_die (void *arg)
4096 tree type = arg;
4098 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
4099 sibling_attribute ();
4100 equate_type_number_to_die_number (type);
4101 name_attribute (type_tag (type));
4102 member_attribute (TYPE_CONTEXT (type));
4104 /* If this type has been completed, then give it a byte_size attribute
4105 and prepare to give a list of members. Otherwise, don't do either of
4106 these things. In the latter case, we will not be generating a list
4107 of members (since we don't have any idea what they might be for an
4108 incomplete type). */
4110 if (COMPLETE_TYPE_P (type))
4112 dienum_push ();
4113 byte_size_attribute (type);
4117 /* Output a DIE to represent a declared function (either file-scope
4118 or block-local) which has "internal linkage" (according to ANSI-C). */
4120 static void
4121 output_local_subroutine_die (void *arg)
4123 tree decl = arg;
4124 tree origin = decl_ultimate_origin (decl);
4126 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine);
4127 sibling_attribute ();
4128 dienum_push ();
4129 if (origin != NULL)
4130 abstract_origin_attribute (origin);
4131 else
4133 tree type = TREE_TYPE (decl);
4135 name_and_src_coords_attributes (decl);
4136 inline_attribute (decl);
4137 prototyped_attribute (type);
4138 member_attribute (DECL_CONTEXT (decl));
4139 type_attribute (TREE_TYPE (type), 0, 0);
4140 pure_or_virtual_attribute (decl);
4142 if (DECL_ABSTRACT (decl))
4143 equate_decl_number_to_die_number (decl);
4144 else
4146 /* Avoid getting screwed up in cases where a function was declared
4147 static but where no definition was ever given for it. */
4149 if (TREE_ASM_WRITTEN (decl))
4151 char label[MAX_ARTIFICIAL_LABEL_BYTES];
4152 low_pc_attribute (function_start_label (decl));
4153 sprintf (label, FUNC_END_LABEL_FMT, current_function_funcdef_no);
4154 high_pc_attribute (label);
4155 if (use_gnu_debug_info_extensions)
4157 sprintf (label, BODY_BEGIN_LABEL_FMT,
4158 current_function_funcdef_no);
4159 body_begin_attribute (label);
4160 sprintf (label, BODY_END_LABEL_FMT, current_function_funcdef_no);
4161 body_end_attribute (label);
4167 static void
4168 output_subroutine_type_die (void *arg)
4170 tree type = arg;
4171 tree return_type = TREE_TYPE (type);
4173 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine_type);
4174 sibling_attribute ();
4175 dienum_push ();
4176 equate_type_number_to_die_number (type);
4177 prototyped_attribute (type);
4178 member_attribute (TYPE_CONTEXT (type));
4179 type_attribute (return_type, 0, 0);
4182 static void
4183 output_typedef_die (void *arg)
4185 tree decl = arg;
4186 tree origin = decl_ultimate_origin (decl);
4188 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_typedef);
4189 sibling_attribute ();
4190 if (origin != NULL)
4191 abstract_origin_attribute (origin);
4192 else
4194 name_and_src_coords_attributes (decl);
4195 member_attribute (DECL_CONTEXT (decl));
4196 type_attribute (TREE_TYPE (decl),
4197 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
4199 if (DECL_ABSTRACT (decl))
4200 equate_decl_number_to_die_number (decl);
4203 static void
4204 output_union_type_die (void *arg)
4206 tree type = arg;
4208 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
4209 sibling_attribute ();
4210 equate_type_number_to_die_number (type);
4211 name_attribute (type_tag (type));
4212 member_attribute (TYPE_CONTEXT (type));
4214 /* If this type has been completed, then give it a byte_size attribute
4215 and prepare to give a list of members. Otherwise, don't do either of
4216 these things. In the latter case, we will not be generating a list
4217 of members (since we don't have any idea what they might be for an
4218 incomplete type). */
4220 if (COMPLETE_TYPE_P (type))
4222 dienum_push ();
4223 byte_size_attribute (type);
4227 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
4228 at the end of an (ANSI prototyped) formal parameters list. */
4230 static void
4231 output_unspecified_parameters_die (void *arg)
4233 tree decl_or_type = arg;
4235 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_unspecified_parameters);
4236 sibling_attribute ();
4238 /* This kludge is here only for the sake of being compatible with what
4239 the USL CI5 C compiler does. The specification of Dwarf Version 1
4240 doesn't say that TAG_unspecified_parameters DIEs should contain any
4241 attributes other than the AT_sibling attribute, but they are certainly
4242 allowed to contain additional attributes, and the CI5 compiler
4243 generates AT_name, AT_fund_type, and AT_location attributes within
4244 TAG_unspecified_parameters DIEs which appear in the child lists for
4245 DIEs representing function definitions, so we do likewise here. */
4247 if (TREE_CODE (decl_or_type) == FUNCTION_DECL && DECL_INITIAL (decl_or_type))
4249 name_attribute ("...");
4250 fund_type_attribute (FT_pointer);
4251 /* location_attribute (?); */
4255 static void
4256 output_padded_null_die (void *arg ATTRIBUTE_UNUSED)
4258 ASM_OUTPUT_ALIGN (asm_out_file, 2); /* 2**2 == 4 */
4261 /*************************** end of DIEs *********************************/
4263 /* Generate some type of DIE. This routine generates the generic outer
4264 wrapper stuff which goes around all types of DIE's (regardless of their
4265 TAGs. All forms of DIEs start with a DIE-specific label, followed by a
4266 DIE-length word, followed by the guts of the DIE itself. After the guts
4267 of the DIE, there must always be a terminator label for the DIE. */
4269 static void
4270 output_die (void (*die_specific_output_function) (void *), void *param)
4272 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4273 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4275 current_dienum = NEXT_DIE_NUM;
4276 NEXT_DIE_NUM = next_unused_dienum;
4278 sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4279 sprintf (end_label, DIE_END_LABEL_FMT, current_dienum);
4281 /* Write a label which will act as the name for the start of this DIE. */
4283 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4285 /* Write the DIE-length word. */
4287 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
4289 /* Fill in the guts of the DIE. */
4291 next_unused_dienum++;
4292 die_specific_output_function (param);
4294 /* Write a label which will act as the name for the end of this DIE. */
4296 ASM_OUTPUT_LABEL (asm_out_file, end_label);
4299 static void
4300 end_sibling_chain (void)
4302 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4304 current_dienum = NEXT_DIE_NUM;
4305 NEXT_DIE_NUM = next_unused_dienum;
4307 sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4309 /* Write a label which will act as the name for the start of this DIE. */
4311 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4313 /* Write the DIE-length word. */
4315 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 4);
4317 dienum_pop ();
4320 /* Generate a list of nameless TAG_formal_parameter DIEs (and perhaps a
4321 TAG_unspecified_parameters DIE) to represent the types of the formal
4322 parameters as specified in some function type specification (except
4323 for those which appear as part of a function *definition*).
4325 Note that we must be careful here to output all of the parameter
4326 DIEs *before* we output any DIEs needed to represent the types of
4327 the formal parameters. This keeps svr4 SDB happy because it
4328 (incorrectly) thinks that the first non-parameter DIE it sees ends
4329 the formal parameter list. */
4331 static void
4332 output_formal_types (tree function_or_method_type)
4334 tree link;
4335 tree formal_type = NULL;
4336 tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
4338 /* Set TREE_ASM_WRITTEN while processing the parameters, lest we
4339 get bogus recursion when outputting tagged types local to a
4340 function declaration. */
4341 int save_asm_written = TREE_ASM_WRITTEN (function_or_method_type);
4342 TREE_ASM_WRITTEN (function_or_method_type) = 1;
4344 /* In the case where we are generating a formal types list for a C++
4345 non-static member function type, skip over the first thing on the
4346 TYPE_ARG_TYPES list because it only represents the type of the
4347 hidden `this pointer'. The debugger should be able to figure
4348 out (without being explicitly told) that this non-static member
4349 function type takes a `this pointer' and should be able to figure
4350 what the type of that hidden parameter is from the AT_member
4351 attribute of the parent TAG_subroutine_type DIE. */
4353 if (TREE_CODE (function_or_method_type) == METHOD_TYPE)
4354 first_parm_type = TREE_CHAIN (first_parm_type);
4356 /* Make our first pass over the list of formal parameter types and output
4357 a TAG_formal_parameter DIE for each one. */
4359 for (link = first_parm_type; link; link = TREE_CHAIN (link))
4361 formal_type = TREE_VALUE (link);
4362 if (formal_type == void_type_node)
4363 break;
4365 /* Output a (nameless) DIE to represent the formal parameter itself. */
4367 output_die (output_formal_parameter_die, formal_type);
4370 /* If this function type has an ellipsis, add a TAG_unspecified_parameters
4371 DIE to the end of the parameter list. */
4373 if (formal_type != void_type_node)
4374 output_die (output_unspecified_parameters_die, function_or_method_type);
4376 /* Make our second (and final) pass over the list of formal parameter types
4377 and output DIEs to represent those types (as necessary). */
4379 for (link = TYPE_ARG_TYPES (function_or_method_type);
4380 link;
4381 link = TREE_CHAIN (link))
4383 formal_type = TREE_VALUE (link);
4384 if (formal_type == void_type_node)
4385 break;
4387 output_type (formal_type, function_or_method_type);
4390 TREE_ASM_WRITTEN (function_or_method_type) = save_asm_written;
4393 /* Remember a type in the pending_types_list. */
4395 static void
4396 pend_type (tree type)
4398 if (pending_types == pending_types_allocated)
4400 pending_types_allocated += PENDING_TYPES_INCREMENT;
4401 pending_types_list
4402 = xrealloc (pending_types_list,
4403 sizeof (tree) * pending_types_allocated);
4405 pending_types_list[pending_types++] = type;
4407 /* Mark the pending type as having been output already (even though
4408 it hasn't been). This prevents the type from being added to the
4409 pending_types_list more than once. */
4411 TREE_ASM_WRITTEN (type) = 1;
4414 /* Return nonzero if it is legitimate to output DIEs to represent a
4415 given type while we are generating the list of child DIEs for some
4416 DIE (e.g. a function or lexical block DIE) associated with a given scope.
4418 See the comments within the function for a description of when it is
4419 considered legitimate to output DIEs for various kinds of types.
4421 Note that TYPE_CONTEXT(type) may be NULL (to indicate global scope)
4422 or it may point to a BLOCK node (for types local to a block), or to a
4423 FUNCTION_DECL node (for types local to the heading of some function
4424 definition), or to a FUNCTION_TYPE node (for types local to the
4425 prototyped parameter list of a function type specification), or to a
4426 RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node
4427 (in the case of C++ nested types).
4429 The `scope' parameter should likewise be NULL or should point to a
4430 BLOCK node, a FUNCTION_DECL node, a FUNCTION_TYPE node, a RECORD_TYPE
4431 node, a UNION_TYPE node, or a QUAL_UNION_TYPE node.
4433 This function is used only for deciding when to "pend" and when to
4434 "un-pend" types to/from the pending_types_list.
4436 Note that we sometimes make use of this "type pending" feature in a
4437 rather twisted way to temporarily delay the production of DIEs for the
4438 types of formal parameters. (We do this just to make svr4 SDB happy.)
4439 It order to delay the production of DIEs representing types of formal
4440 parameters, callers of this function supply `fake_containing_scope' as
4441 the `scope' parameter to this function. Given that fake_containing_scope
4442 is a tagged type which is *not* the containing scope for *any* other type,
4443 the desired effect is achieved, i.e. output of DIEs representing types
4444 is temporarily suspended, and any type DIEs which would have otherwise
4445 been output are instead placed onto the pending_types_list. Later on,
4446 we force these (temporarily pended) types to be output simply by calling
4447 `output_pending_types_for_scope' with an actual argument equal to the
4448 true scope of the types we temporarily pended. */
4450 static inline int
4451 type_ok_for_scope (tree type, tree scope)
4453 /* Tagged types (i.e. struct, union, and enum types) must always be
4454 output only in the scopes where they actually belong (or else the
4455 scoping of their own tag names and the scoping of their member
4456 names will be incorrect). Non-tagged-types on the other hand can
4457 generally be output anywhere, except that svr4 SDB really doesn't
4458 want to see them nested within struct or union types, so here we
4459 say it is always OK to immediately output any such a (non-tagged)
4460 type, so long as we are not within such a context. Note that the
4461 only kinds of non-tagged types which we will be dealing with here
4462 (for C and C++ anyway) will be array types and function types. */
4464 return is_tagged_type (type)
4465 ? (TYPE_CONTEXT (type) == scope
4466 /* Ignore namespaces for the moment. */
4467 || (scope == NULL_TREE
4468 && TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)
4469 || (scope == NULL_TREE && is_tagged_type (TYPE_CONTEXT (type))
4470 && TREE_ASM_WRITTEN (TYPE_CONTEXT (type))))
4471 : (scope == NULL_TREE || ! is_tagged_type (scope));
4474 /* Output any pending types (from the pending_types list) which we can output
4475 now (taking into account the scope that we are working on now).
4477 For each type output, remove the given type from the pending_types_list
4478 *before* we try to output it.
4480 Note that we have to process the list in beginning-to-end order,
4481 because the call made here to output_type may cause yet more types
4482 to be added to the end of the list, and we may have to output some
4483 of them too. */
4485 static void
4486 output_pending_types_for_scope (tree containing_scope)
4488 unsigned i;
4490 for (i = 0; i < pending_types; )
4492 tree type = pending_types_list[i];
4494 if (type_ok_for_scope (type, containing_scope))
4496 tree *mover;
4497 tree *limit;
4499 pending_types--;
4500 limit = &pending_types_list[pending_types];
4501 for (mover = &pending_types_list[i]; mover < limit; mover++)
4502 *mover = *(mover+1);
4504 /* Un-mark the type as having been output already (because it
4505 hasn't been, really). Then call output_type to generate a
4506 Dwarf representation of it. */
4508 TREE_ASM_WRITTEN (type) = 0;
4509 output_type (type, containing_scope);
4511 /* Don't increment the loop counter in this case because we
4512 have shifted all of the subsequent pending types down one
4513 element in the pending_types_list array. */
4515 else
4516 i++;
4520 /* Remember a type in the incomplete_types_list. */
4522 static void
4523 add_incomplete_type (tree type)
4525 if (incomplete_types == incomplete_types_allocated)
4527 incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
4528 incomplete_types_list
4529 = xrealloc (incomplete_types_list,
4530 sizeof (tree) * incomplete_types_allocated);
4533 incomplete_types_list[incomplete_types++] = type;
4536 /* Walk through the list of incomplete types again, trying once more to
4537 emit full debugging info for them. */
4539 static void
4540 retry_incomplete_types (void)
4542 tree type;
4544 finalizing = 1;
4545 while (incomplete_types)
4547 --incomplete_types;
4548 type = incomplete_types_list[incomplete_types];
4549 output_type (type, NULL_TREE);
4553 static void
4554 output_type (tree type, tree containing_scope)
4556 if (type == 0 || type == error_mark_node)
4557 return;
4559 /* We are going to output a DIE to represent the unqualified version of
4560 this type (i.e. without any const or volatile qualifiers) so get
4561 the main variant (i.e. the unqualified version) of this type now. */
4563 type = type_main_variant (type);
4565 if (TREE_ASM_WRITTEN (type))
4567 if (finalizing && AGGREGATE_TYPE_P (type))
4569 tree member;
4571 /* Some of our nested types might not have been defined when we
4572 were written out before; force them out now. */
4574 for (member = TYPE_FIELDS (type); member;
4575 member = TREE_CHAIN (member))
4576 if (TREE_CODE (member) == TYPE_DECL
4577 && ! TREE_ASM_WRITTEN (TREE_TYPE (member)))
4578 output_type (TREE_TYPE (member), containing_scope);
4580 return;
4583 /* If this is a nested type whose containing class hasn't been
4584 written out yet, writing it out will cover this one, too. */
4586 if (TYPE_CONTEXT (type)
4587 && TYPE_P (TYPE_CONTEXT (type))
4588 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
4590 output_type (TYPE_CONTEXT (type), containing_scope);
4591 return;
4594 /* Don't generate any DIEs for this type now unless it is OK to do so
4595 (based upon what `type_ok_for_scope' tells us). */
4597 if (! type_ok_for_scope (type, containing_scope))
4599 pend_type (type);
4600 return;
4603 switch (TREE_CODE (type))
4605 case ERROR_MARK:
4606 break;
4608 case VECTOR_TYPE:
4609 output_type (TYPE_DEBUG_REPRESENTATION_TYPE (type), containing_scope);
4610 break;
4612 case POINTER_TYPE:
4613 case REFERENCE_TYPE:
4614 /* Prevent infinite recursion in cases where this is a recursive
4615 type. Recursive types are possible in Ada. */
4616 TREE_ASM_WRITTEN (type) = 1;
4617 /* For these types, all that is required is that we output a DIE
4618 (or a set of DIEs) to represent the "basis" type. */
4619 output_type (TREE_TYPE (type), containing_scope);
4620 break;
4622 case OFFSET_TYPE:
4623 /* This code is used for C++ pointer-to-data-member types. */
4624 /* Output a description of the relevant class type. */
4625 output_type (TYPE_OFFSET_BASETYPE (type), containing_scope);
4626 /* Output a description of the type of the object pointed to. */
4627 output_type (TREE_TYPE (type), containing_scope);
4628 /* Now output a DIE to represent this pointer-to-data-member type
4629 itself. */
4630 output_die (output_ptr_to_mbr_type_die, type);
4631 break;
4633 case SET_TYPE:
4634 output_type (TYPE_DOMAIN (type), containing_scope);
4635 output_die (output_set_type_die, type);
4636 break;
4638 case FILE_TYPE:
4639 output_type (TREE_TYPE (type), containing_scope);
4640 abort (); /* No way to represent these in Dwarf yet! */
4641 break;
4643 case FUNCTION_TYPE:
4644 /* Force out return type (in case it wasn't forced out already). */
4645 output_type (TREE_TYPE (type), containing_scope);
4646 output_die (output_subroutine_type_die, type);
4647 output_formal_types (type);
4648 end_sibling_chain ();
4649 break;
4651 case METHOD_TYPE:
4652 /* Force out return type (in case it wasn't forced out already). */
4653 output_type (TREE_TYPE (type), containing_scope);
4654 output_die (output_subroutine_type_die, type);
4655 output_formal_types (type);
4656 end_sibling_chain ();
4657 break;
4659 case ARRAY_TYPE:
4660 if (TYPE_STRING_FLAG (type) && TREE_CODE(TREE_TYPE(type)) == CHAR_TYPE)
4662 output_type (TREE_TYPE (type), containing_scope);
4663 output_die (output_string_type_die, type);
4665 else
4667 tree element_type;
4669 element_type = TREE_TYPE (type);
4670 while (TREE_CODE (element_type) == ARRAY_TYPE)
4671 element_type = TREE_TYPE (element_type);
4673 output_type (element_type, containing_scope);
4674 output_die (output_array_type_die, type);
4676 break;
4678 case ENUMERAL_TYPE:
4679 case RECORD_TYPE:
4680 case UNION_TYPE:
4681 case QUAL_UNION_TYPE:
4683 /* For a non-file-scope tagged type, we can always go ahead and
4684 output a Dwarf description of this type right now, even if
4685 the type in question is still incomplete, because if this
4686 local type *was* ever completed anywhere within its scope,
4687 that complete definition would already have been attached to
4688 this RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
4689 node by the time we reach this point. That's true because of the
4690 way the front-end does its processing of file-scope declarations (of
4691 functions and class types) within which other types might be
4692 nested. The C and C++ front-ends always gobble up such "local
4693 scope" things en-mass before they try to output *any* debugging
4694 information for any of the stuff contained inside them and thus,
4695 we get the benefit here of what is (in effect) a pre-resolution
4696 of forward references to tagged types in local scopes.
4698 Note however that for file-scope tagged types we cannot assume
4699 that such pre-resolution of forward references has taken place.
4700 A given file-scope tagged type may appear to be incomplete when
4701 we reach this point, but it may yet be given a full definition
4702 (at file-scope) later on during compilation. In order to avoid
4703 generating a premature (and possibly incorrect) set of Dwarf
4704 DIEs for such (as yet incomplete) file-scope tagged types, we
4705 generate nothing at all for as-yet incomplete file-scope tagged
4706 types here unless we are making our special "finalization" pass
4707 for file-scope things at the very end of compilation. At that
4708 time, we will certainly know as much about each file-scope tagged
4709 type as we are ever going to know, so at that point in time, we
4710 can safely generate correct Dwarf descriptions for these file-
4711 scope tagged types. */
4713 if (!COMPLETE_TYPE_P (type)
4714 && (TYPE_CONTEXT (type) == NULL
4715 || AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
4716 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)
4717 && !finalizing)
4719 /* We don't need to do this for function-local types. */
4720 if (! decl_function_context (TYPE_STUB_DECL (type)))
4721 add_incomplete_type (type);
4722 return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */
4725 /* Prevent infinite recursion in cases where the type of some
4726 member of this type is expressed in terms of this type itself. */
4728 TREE_ASM_WRITTEN (type) = 1;
4730 /* Output a DIE to represent the tagged type itself. */
4732 switch (TREE_CODE (type))
4734 case ENUMERAL_TYPE:
4735 output_die (output_enumeration_type_die, type);
4736 return; /* a special case -- nothing left to do so just return */
4738 case RECORD_TYPE:
4739 output_die (output_structure_type_die, type);
4740 break;
4742 case UNION_TYPE:
4743 case QUAL_UNION_TYPE:
4744 output_die (output_union_type_die, type);
4745 break;
4747 default:
4748 abort (); /* Should never happen. */
4751 /* If this is not an incomplete type, output descriptions of
4752 each of its members.
4754 Note that as we output the DIEs necessary to represent the
4755 members of this record or union type, we will also be trying
4756 to output DIEs to represent the *types* of those members.
4757 However the `output_type' function (above) will specifically
4758 avoid generating type DIEs for member types *within* the list
4759 of member DIEs for this (containing) type except for those
4760 types (of members) which are explicitly marked as also being
4761 members of this (containing) type themselves. The g++ front-
4762 end can force any given type to be treated as a member of some
4763 other (containing) type by setting the TYPE_CONTEXT of the
4764 given (member) type to point to the TREE node representing the
4765 appropriate (containing) type.
4768 if (COMPLETE_TYPE_P (type))
4770 tree binfo = TYPE_BINFO (type);
4772 /* First output info about the base classes. */
4773 if (binfo)
4775 tree bases = BINFO_BASETYPES (binfo);
4776 tree accesses = BINFO_BASEACCESSES (binfo);
4777 register int n_bases = BINFO_N_BASETYPES (binfo);
4778 register int i;
4780 for (i = 0; i < n_bases; i++)
4782 tree arg[2];
4784 arg[0] = TREE_VEC_ELT (bases, i);
4785 arg[1] = (accesses ? TREE_VEC_ELT (accesses, i)
4786 : access_public_node);
4787 output_type (BINFO_TYPE (binfo), containing_scope);
4788 output_die (output_inheritance_die, arg);
4792 ++in_class;
4795 tree normal_member;
4797 /* Now output info about the data members and type members. */
4799 for (normal_member = TYPE_FIELDS (type);
4800 normal_member;
4801 normal_member = TREE_CHAIN (normal_member))
4802 output_decl (normal_member, type);
4806 tree func_member;
4808 /* Now output info about the function members (if any). */
4810 for (func_member = TYPE_METHODS (type);
4811 func_member;
4812 func_member = TREE_CHAIN (func_member))
4814 /* Don't include clones in the member list. */
4815 if (DECL_ABSTRACT_ORIGIN (func_member))
4816 continue;
4818 output_decl (func_member, type);
4822 --in_class;
4824 /* RECORD_TYPEs, UNION_TYPEs, and QUAL_UNION_TYPEs are themselves
4825 scopes (at least in C++) so we must now output any nested
4826 pending types which are local just to this type. */
4828 output_pending_types_for_scope (type);
4830 end_sibling_chain (); /* Terminate member chain. */
4833 break;
4835 case VOID_TYPE:
4836 case INTEGER_TYPE:
4837 case REAL_TYPE:
4838 case COMPLEX_TYPE:
4839 case BOOLEAN_TYPE:
4840 case CHAR_TYPE:
4841 break; /* No DIEs needed for fundamental types. */
4843 case LANG_TYPE: /* No Dwarf representation currently defined. */
4844 break;
4846 default:
4847 abort ();
4850 TREE_ASM_WRITTEN (type) = 1;
4853 static void
4854 output_tagged_type_instantiation (tree type)
4856 if (type == 0 || type == error_mark_node)
4857 return;
4859 /* We are going to output a DIE to represent the unqualified version of
4860 this type (i.e. without any const or volatile qualifiers) so make
4861 sure that we have the main variant (i.e. the unqualified version) of
4862 this type now. */
4864 if (type != type_main_variant (type))
4865 abort ();
4867 if (!TREE_ASM_WRITTEN (type))
4868 abort ();
4870 switch (TREE_CODE (type))
4872 case ERROR_MARK:
4873 break;
4875 case ENUMERAL_TYPE:
4876 output_die (output_inlined_enumeration_type_die, type);
4877 break;
4879 case RECORD_TYPE:
4880 output_die (output_inlined_structure_type_die, type);
4881 break;
4883 case UNION_TYPE:
4884 case QUAL_UNION_TYPE:
4885 output_die (output_inlined_union_type_die, type);
4886 break;
4888 default:
4889 abort (); /* Should never happen. */
4893 /* Output a TAG_lexical_block DIE followed by DIEs to represent all of
4894 the things which are local to the given block. */
4896 static void
4897 output_block (tree stmt, int depth)
4899 int must_output_die = 0;
4900 tree origin;
4901 enum tree_code origin_code;
4903 /* Ignore blocks never really used to make RTL. */
4905 if (! stmt || ! TREE_USED (stmt)
4906 || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
4907 return;
4909 /* Determine the "ultimate origin" of this block. This block may be an
4910 inlined instance of an inlined instance of inline function, so we
4911 have to trace all of the way back through the origin chain to find
4912 out what sort of node actually served as the original seed for the
4913 creation of the current block. */
4915 origin = block_ultimate_origin (stmt);
4916 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
4918 /* Determine if we need to output any Dwarf DIEs at all to represent this
4919 block. */
4921 if (origin_code == FUNCTION_DECL)
4922 /* The outer scopes for inlinings *must* always be represented. We
4923 generate TAG_inlined_subroutine DIEs for them. (See below.) */
4924 must_output_die = 1;
4925 else
4927 /* In the case where the current block represents an inlining of the
4928 "body block" of an inline function, we must *NOT* output any DIE
4929 for this block because we have already output a DIE to represent
4930 the whole inlined function scope and the "body block" of any
4931 function doesn't really represent a different scope according to
4932 ANSI C rules. So we check here to make sure that this block does
4933 not represent a "body block inlining" before trying to set the
4934 `must_output_die' flag. */
4936 if (! is_body_block (origin ? origin : stmt))
4938 /* Determine if this block directly contains any "significant"
4939 local declarations which we will need to output DIEs for. */
4941 if (debug_info_level > DINFO_LEVEL_TERSE)
4942 /* We are not in terse mode so *any* local declaration counts
4943 as being a "significant" one. */
4944 must_output_die = (BLOCK_VARS (stmt) != NULL);
4945 else
4947 tree decl;
4949 /* We are in terse mode, so only local (nested) function
4950 definitions count as "significant" local declarations. */
4952 for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
4953 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4955 must_output_die = 1;
4956 break;
4962 /* It would be a waste of space to generate a Dwarf TAG_lexical_block
4963 DIE for any block which contains no significant local declarations
4964 at all. Rather, in such cases we just call `output_decls_for_scope'
4965 so that any needed Dwarf info for any sub-blocks will get properly
4966 generated. Note that in terse mode, our definition of what constitutes
4967 a "significant" local declaration gets restricted to include only
4968 inlined function instances and local (nested) function definitions. */
4970 if (origin_code == FUNCTION_DECL && BLOCK_ABSTRACT (stmt))
4971 /* We don't care about an abstract inlined subroutine. */;
4972 else if (must_output_die)
4974 output_die ((origin_code == FUNCTION_DECL)
4975 ? output_inlined_subroutine_die
4976 : output_lexical_block_die,
4977 stmt);
4978 output_decls_for_scope (stmt, depth);
4979 end_sibling_chain ();
4981 else
4982 output_decls_for_scope (stmt, depth);
4985 /* Output all of the decls declared within a given scope (also called
4986 a `binding contour') and (recursively) all of it's sub-blocks. */
4988 static void
4989 output_decls_for_scope (tree stmt, int depth)
4991 /* Ignore blocks never really used to make RTL. */
4993 if (! stmt || ! TREE_USED (stmt))
4994 return;
4996 /* Output the DIEs to represent all of the data objects, functions,
4997 typedefs, and tagged types declared directly within this block
4998 but not within any nested sub-blocks. */
5001 tree decl;
5003 for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
5004 output_decl (decl, stmt);
5007 output_pending_types_for_scope (stmt);
5009 /* Output the DIEs to represent all sub-blocks (and the items declared
5010 therein) of this block. */
5013 tree subblocks;
5015 for (subblocks = BLOCK_SUBBLOCKS (stmt);
5016 subblocks;
5017 subblocks = BLOCK_CHAIN (subblocks))
5018 output_block (subblocks, depth + 1);
5022 /* Is this a typedef we can avoid emitting? */
5024 static inline int
5025 is_redundant_typedef (tree decl)
5027 if (TYPE_DECL_IS_STUB (decl))
5028 return 1;
5029 if (DECL_ARTIFICIAL (decl)
5030 && DECL_CONTEXT (decl)
5031 && is_tagged_type (DECL_CONTEXT (decl))
5032 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
5033 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
5034 /* Also ignore the artificial member typedef for the class name. */
5035 return 1;
5036 return 0;
5039 /* Output Dwarf .debug information for a decl described by DECL. */
5041 static void
5042 output_decl (tree decl, tree containing_scope)
5044 /* Make a note of the decl node we are going to be working on. We may
5045 need to give the user the source coordinates of where it appeared in
5046 case we notice (later on) that something about it looks screwy. */
5048 dwarf_last_decl = decl;
5050 if (TREE_CODE (decl) == ERROR_MARK)
5051 return;
5053 /* If a structure is declared within an initialization, e.g. as the
5054 operand of a sizeof, then it will not have a name. We don't want
5055 to output a DIE for it, as the tree nodes are in the temporary obstack */
5057 if ((TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5058 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
5059 && ((DECL_NAME (decl) == 0 && TYPE_NAME (TREE_TYPE (decl)) == 0)
5060 || (TYPE_FIELDS (TREE_TYPE (decl))
5061 && (TREE_CODE (TYPE_FIELDS (TREE_TYPE (decl))) == ERROR_MARK))))
5062 return;
5064 /* If this ..._DECL node is marked to be ignored, then ignore it. */
5066 if (DECL_IGNORED_P (decl))
5067 return;
5069 switch (TREE_CODE (decl))
5071 case CONST_DECL:
5072 /* The individual enumerators of an enum type get output when we
5073 output the Dwarf representation of the relevant enum type itself. */
5074 break;
5076 case FUNCTION_DECL:
5077 /* If we are in terse mode, don't output any DIEs to represent
5078 mere function declarations. Also, if we are conforming
5079 to the DWARF version 1 specification, don't output DIEs for
5080 mere function declarations. */
5082 if (DECL_INITIAL (decl) == NULL_TREE)
5083 #if (DWARF_VERSION > 1)
5084 if (debug_info_level <= DINFO_LEVEL_TERSE)
5085 #endif
5086 break;
5088 /* Before we describe the FUNCTION_DECL itself, make sure that we
5089 have described its return type. */
5091 output_type (TREE_TYPE (TREE_TYPE (decl)), containing_scope);
5094 /* And its containing type. */
5095 register tree origin = decl_class_context (decl);
5096 if (origin)
5097 output_type (origin, containing_scope);
5100 /* If we're emitting an out-of-line copy of an inline function,
5101 set up to refer to the abstract instance emitted from
5102 dwarfout_deferred_inline_function. */
5103 if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl)
5104 && ! (containing_scope && TYPE_P (containing_scope)))
5105 set_decl_origin_self (decl);
5107 /* If the following DIE will represent a function definition for a
5108 function with "extern" linkage, output a special "pubnames" DIE
5109 label just ahead of the actual DIE. A reference to this label
5110 was already generated in the .debug_pubnames section sub-entry
5111 for this function definition. */
5113 if (TREE_PUBLIC (decl))
5115 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5117 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
5118 ASM_OUTPUT_LABEL (asm_out_file, label);
5121 /* Now output a DIE to represent the function itself. */
5123 output_die (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl)
5124 ? output_global_subroutine_die
5125 : output_local_subroutine_die,
5126 decl);
5128 /* Now output descriptions of the arguments for this function.
5129 This gets (unnecessarily?) complex because of the fact that
5130 the DECL_ARGUMENT list for a FUNCTION_DECL doesn't indicate
5131 cases where there was a trailing `...' at the end of the formal
5132 parameter list. In order to find out if there was a trailing
5133 ellipsis or not, we must instead look at the type associated
5134 with the FUNCTION_DECL. This will be a node of type FUNCTION_TYPE.
5135 If the chain of type nodes hanging off of this FUNCTION_TYPE node
5136 ends with a void_type_node then there should *not* be an ellipsis
5137 at the end. */
5139 /* In the case where we are describing a mere function declaration, all
5140 we need to do here (and all we *can* do here) is to describe
5141 the *types* of its formal parameters. */
5143 if (decl != current_function_decl || in_class)
5144 output_formal_types (TREE_TYPE (decl));
5145 else
5147 /* Generate DIEs to represent all known formal parameters. */
5149 tree arg_decls = DECL_ARGUMENTS (decl);
5150 tree parm;
5152 /* WARNING! Kludge zone ahead! Here we have a special
5153 hack for svr4 SDB compatibility. Instead of passing the
5154 current FUNCTION_DECL node as the second parameter (i.e.
5155 the `containing_scope' parameter) to `output_decl' (as
5156 we ought to) we instead pass a pointer to our own private
5157 fake_containing_scope node. That node is a RECORD_TYPE
5158 node which NO OTHER TYPE may ever actually be a member of.
5160 This pointer will ultimately get passed into `output_type'
5161 as its `containing_scope' parameter. `Output_type' will
5162 then perform its part in the hack... i.e. it will pend
5163 the type of the formal parameter onto the pending_types
5164 list. Later on, when we are done generating the whole
5165 sequence of formal parameter DIEs for this function
5166 definition, we will un-pend all previously pended types
5167 of formal parameters for this function definition.
5169 This whole kludge prevents any type DIEs from being
5170 mixed in with the formal parameter DIEs. That's good
5171 because svr4 SDB believes that the list of formal
5172 parameter DIEs for a function ends wherever the first
5173 non-formal-parameter DIE appears. Thus, we have to
5174 keep the formal parameter DIEs segregated. They must
5175 all appear (consecutively) at the start of the list of
5176 children for the DIE representing the function definition.
5177 Then (and only then) may we output any additional DIEs
5178 needed to represent the types of these formal parameters.
5182 When generating DIEs, generate the unspecified_parameters
5183 DIE instead if we come across the arg "__builtin_va_alist"
5186 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
5187 if (TREE_CODE (parm) == PARM_DECL)
5189 if (DECL_NAME(parm) &&
5190 !strcmp(IDENTIFIER_POINTER(DECL_NAME(parm)),
5191 "__builtin_va_alist") )
5192 output_die (output_unspecified_parameters_die, decl);
5193 else
5194 output_decl (parm, fake_containing_scope);
5198 Now that we have finished generating all of the DIEs to
5199 represent the formal parameters themselves, force out
5200 any DIEs needed to represent their types. We do this
5201 simply by un-pending all previously pended types which
5202 can legitimately go into the chain of children DIEs for
5203 the current FUNCTION_DECL.
5206 output_pending_types_for_scope (decl);
5209 Decide whether we need an unspecified_parameters DIE at the end.
5210 There are 2 more cases to do this for:
5211 1) the ansi ... declaration - this is detectable when the end
5212 of the arg list is not a void_type_node
5213 2) an unprototyped function declaration (not a definition). This
5214 just means that we have no info about the parameters at all.
5218 tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
5220 if (fn_arg_types)
5222 /* This is the prototyped case, check for.... */
5223 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
5224 output_die (output_unspecified_parameters_die, decl);
5226 else
5228 /* This is unprototyped, check for undefined (just declaration). */
5229 if (!DECL_INITIAL (decl))
5230 output_die (output_unspecified_parameters_die, decl);
5234 /* Output Dwarf info for all of the stuff within the body of the
5235 function (if it has one - it may be just a declaration). */
5238 tree outer_scope = DECL_INITIAL (decl);
5240 if (outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
5242 /* Note that here, `outer_scope' is a pointer to the outermost
5243 BLOCK node created to represent a function.
5244 This outermost BLOCK actually represents the outermost
5245 binding contour for the function, i.e. the contour in which
5246 the function's formal parameters and labels get declared.
5248 Curiously, it appears that the front end doesn't actually
5249 put the PARM_DECL nodes for the current function onto the
5250 BLOCK_VARS list for this outer scope. (They are strung
5251 off of the DECL_ARGUMENTS list for the function instead.)
5252 The BLOCK_VARS list for the `outer_scope' does provide us
5253 with a list of the LABEL_DECL nodes for the function however,
5254 and we output DWARF info for those here.
5256 Just within the `outer_scope' there will be a BLOCK node
5257 representing the function's outermost pair of curly braces,
5258 and any blocks used for the base and member initializers of
5259 a C++ constructor function. */
5261 output_decls_for_scope (outer_scope, 0);
5263 /* Finally, force out any pending types which are local to the
5264 outermost block of this function definition. These will
5265 all have a TYPE_CONTEXT which points to the FUNCTION_DECL
5266 node itself. */
5268 output_pending_types_for_scope (decl);
5273 /* Generate a terminator for the list of stuff `owned' by this
5274 function. */
5276 end_sibling_chain ();
5278 break;
5280 case TYPE_DECL:
5281 /* If we are in terse mode, don't generate any DIEs to represent
5282 any actual typedefs. Note that even when we are in terse mode,
5283 we must still output DIEs to represent those tagged types which
5284 are used (directly or indirectly) in the specification of either
5285 a return type or a formal parameter type of some function. */
5287 if (debug_info_level <= DINFO_LEVEL_TERSE)
5288 if (! TYPE_DECL_IS_STUB (decl)
5289 || (! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)) && ! in_class))
5290 return;
5292 /* In the special case of a TYPE_DECL node representing
5293 the declaration of some type tag, if the given TYPE_DECL is
5294 marked as having been instantiated from some other (original)
5295 TYPE_DECL node (e.g. one which was generated within the original
5296 definition of an inline function) we have to generate a special
5297 (abbreviated) TAG_structure_type, TAG_union_type, or
5298 TAG_enumeration-type DIE here. */
5300 if (TYPE_DECL_IS_STUB (decl) && DECL_ABSTRACT_ORIGIN (decl))
5302 output_tagged_type_instantiation (TREE_TYPE (decl));
5303 return;
5306 output_type (TREE_TYPE (decl), containing_scope);
5308 if (! is_redundant_typedef (decl))
5309 /* Output a DIE to represent the typedef itself. */
5310 output_die (output_typedef_die, decl);
5311 break;
5313 case LABEL_DECL:
5314 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5315 output_die (output_label_die, decl);
5316 break;
5318 case VAR_DECL:
5319 /* If we are conforming to the DWARF version 1 specification, don't
5320 generated any DIEs to represent mere external object declarations. */
5322 #if (DWARF_VERSION <= 1)
5323 if (DECL_EXTERNAL (decl) && ! TREE_PUBLIC (decl))
5324 break;
5325 #endif
5327 /* If we are in terse mode, don't generate any DIEs to represent
5328 any variable declarations or definitions. */
5330 if (debug_info_level <= DINFO_LEVEL_TERSE)
5331 break;
5333 /* Output any DIEs that are needed to specify the type of this data
5334 object. */
5336 output_type (TREE_TYPE (decl), containing_scope);
5339 /* And its containing type. */
5340 register tree origin = decl_class_context (decl);
5341 if (origin)
5342 output_type (origin, containing_scope);
5345 /* If the following DIE will represent a data object definition for a
5346 data object with "extern" linkage, output a special "pubnames" DIE
5347 label just ahead of the actual DIE. A reference to this label
5348 was already generated in the .debug_pubnames section sub-entry
5349 for this data object definition. */
5351 if (TREE_PUBLIC (decl) && ! DECL_ABSTRACT (decl))
5353 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5355 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
5356 ASM_OUTPUT_LABEL (asm_out_file, label);
5359 /* Now output the DIE to represent the data object itself. This gets
5360 complicated because of the possibility that the VAR_DECL really
5361 represents an inlined instance of a formal parameter for an inline
5362 function. */
5365 void (*func) (void *);
5366 register tree origin = decl_ultimate_origin (decl);
5368 if (origin != NULL && TREE_CODE (origin) == PARM_DECL)
5369 func = output_formal_parameter_die;
5370 else
5372 if (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
5373 func = output_global_variable_die;
5374 else
5375 func = output_local_variable_die;
5377 output_die (func, decl);
5379 break;
5381 case FIELD_DECL:
5382 /* Ignore the nameless fields that are used to skip bits. */
5383 if (DECL_NAME (decl) != 0)
5385 output_type (member_declared_type (decl), containing_scope);
5386 output_die (output_member_die, decl);
5388 break;
5390 case PARM_DECL:
5391 /* Force out the type of this formal, if it was not forced out yet.
5392 Note that here we can run afoul of a bug in "classic" svr4 SDB.
5393 It should be able to grok the presence of type DIEs within a list
5394 of TAG_formal_parameter DIEs, but it doesn't. */
5396 output_type (TREE_TYPE (decl), containing_scope);
5397 output_die (output_formal_parameter_die, decl);
5398 break;
5400 case NAMESPACE_DECL:
5401 /* Ignore for now. */
5402 break;
5404 default:
5405 abort ();
5409 /* Output debug information for a function. */
5410 static void
5411 dwarfout_function_decl (tree decl)
5413 dwarfout_file_scope_decl (decl, 0);
5416 /* Debug information for a global DECL. Called from toplev.c after
5417 compilation proper has finished. */
5418 static void
5419 dwarfout_global_decl (tree decl)
5421 /* Output DWARF information for file-scope tentative data object
5422 declarations, file-scope (extern) function declarations (which
5423 had no corresponding body) and file-scope tagged type
5424 declarations and definitions which have not yet been forced out. */
5426 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
5427 dwarfout_file_scope_decl (decl, 1);
5430 /* DECL is an inline function, whose body is present, but which is not
5431 being output at this point. (We're putting that off until we need
5432 to do it.) */
5433 static void
5434 dwarfout_deferred_inline_function (tree decl)
5436 /* Generate the DWARF info for the "abstract" instance of a function
5437 which we may later generate inlined and/or out-of-line instances
5438 of. */
5439 if ((DECL_INLINE (decl) || DECL_ABSTRACT (decl))
5440 && ! DECL_ABSTRACT_ORIGIN (decl))
5442 /* The front-end may not have set CURRENT_FUNCTION_DECL, but the
5443 DWARF code expects it to be set in this case. Intuitively,
5444 DECL is the function we just finished defining, so setting
5445 CURRENT_FUNCTION_DECL is sensible. */
5446 tree saved_cfd = current_function_decl;
5447 int was_abstract = DECL_ABSTRACT (decl);
5448 current_function_decl = decl;
5450 /* Let the DWARF code do its work. */
5451 set_decl_abstract_flags (decl, 1);
5452 dwarfout_file_scope_decl (decl, 0);
5453 if (! was_abstract)
5454 set_decl_abstract_flags (decl, 0);
5456 /* Reset CURRENT_FUNCTION_DECL. */
5457 current_function_decl = saved_cfd;
5461 static void
5462 dwarfout_file_scope_decl (tree decl, int set_finalizing)
5464 if (TREE_CODE (decl) == ERROR_MARK)
5465 return;
5467 /* If this ..._DECL node is marked to be ignored, then ignore it. */
5469 if (DECL_IGNORED_P (decl))
5470 return;
5472 switch (TREE_CODE (decl))
5474 case FUNCTION_DECL:
5476 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of
5477 a builtin function. Explicit programmer-supplied declarations of
5478 these same functions should NOT be ignored however. */
5480 if (DECL_EXTERNAL (decl) && DECL_FUNCTION_CODE (decl))
5481 return;
5483 /* What we would really like to do here is to filter out all mere
5484 file-scope declarations of file-scope functions which are never
5485 referenced later within this translation unit (and keep all of
5486 ones that *are* referenced later on) but we aren't clairvoyant,
5487 so we have no idea which functions will be referenced in the
5488 future (i.e. later on within the current translation unit).
5489 So here we just ignore all file-scope function declarations
5490 which are not also definitions. If and when the debugger needs
5491 to know something about these functions, it will have to hunt
5492 around and find the DWARF information associated with the
5493 *definition* of the function.
5495 Note that we can't just check `DECL_EXTERNAL' to find out which
5496 FUNCTION_DECL nodes represent definitions and which ones represent
5497 mere declarations. We have to check `DECL_INITIAL' instead. That's
5498 because the C front-end supports some weird semantics for "extern
5499 inline" function definitions. These can get inlined within the
5500 current translation unit (an thus, we need to generate DWARF info
5501 for their abstract instances so that the DWARF info for the
5502 concrete inlined instances can have something to refer to) but
5503 the compiler never generates any out-of-lines instances of such
5504 things (despite the fact that they *are* definitions). The
5505 important point is that the C front-end marks these "extern inline"
5506 functions as DECL_EXTERNAL, but we need to generate DWARF for them
5507 anyway.
5509 Note that the C++ front-end also plays some similar games for inline
5510 function definitions appearing within include files which also
5511 contain `#pragma interface' pragmas. */
5513 if (DECL_INITIAL (decl) == NULL_TREE)
5514 return;
5516 if (TREE_PUBLIC (decl)
5517 && ! DECL_EXTERNAL (decl)
5518 && ! DECL_ABSTRACT (decl))
5520 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5522 /* Output a .debug_pubnames entry for a public function
5523 defined in this compilation unit. */
5525 fputc ('\n', asm_out_file);
5526 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
5527 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5528 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5529 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5530 IDENTIFIER_POINTER (DECL_NAME (decl)));
5531 ASM_OUTPUT_POP_SECTION (asm_out_file);
5534 break;
5536 case VAR_DECL:
5538 /* Ignore this VAR_DECL if it refers to a file-scope extern data
5539 object declaration and if the declaration was never even
5540 referenced from within this entire compilation unit. We
5541 suppress these DIEs in order to save space in the .debug section
5542 (by eliminating entries which are probably useless). Note that
5543 we must not suppress block-local extern declarations (whether
5544 used or not) because that would screw-up the debugger's name
5545 lookup mechanism and cause it to miss things which really ought
5546 to be in scope at a given point. */
5548 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
5549 return;
5551 if (TREE_PUBLIC (decl)
5552 && ! DECL_EXTERNAL (decl)
5553 && GET_CODE (DECL_RTL (decl)) == MEM
5554 && ! DECL_ABSTRACT (decl))
5556 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5558 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5560 /* Output a .debug_pubnames entry for a public variable
5561 defined in this compilation unit. */
5563 fputc ('\n', asm_out_file);
5564 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
5565 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5566 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5567 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5568 IDENTIFIER_POINTER (DECL_NAME (decl)));
5569 ASM_OUTPUT_POP_SECTION (asm_out_file);
5572 if (DECL_INITIAL (decl) == NULL)
5574 /* Output a .debug_aranges entry for a public variable
5575 which is tentatively defined in this compilation unit. */
5577 fputc ('\n', asm_out_file);
5578 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
5579 ASM_OUTPUT_DWARF_ADDR (asm_out_file,
5580 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
5581 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
5582 (unsigned) int_size_in_bytes (TREE_TYPE (decl)));
5583 ASM_OUTPUT_POP_SECTION (asm_out_file);
5587 /* If we are in terse mode, don't generate any DIEs to represent
5588 any variable declarations or definitions. */
5590 if (debug_info_level <= DINFO_LEVEL_TERSE)
5591 return;
5593 break;
5595 case TYPE_DECL:
5596 /* Don't bother trying to generate any DIEs to represent any of the
5597 normal built-in types for the language we are compiling, except
5598 in cases where the types in question are *not* DWARF fundamental
5599 types. We make an exception in the case of non-fundamental types
5600 for the sake of Objective-C (and perhaps C++) because the GNU
5601 front-ends for these languages may in fact create certain "built-in"
5602 types which are (for example) RECORD_TYPEs. In such cases, we
5603 really need to output these (non-fundamental) types because other
5604 DIEs may contain references to them. */
5606 /* Also ignore language dependent types here, because they are probably
5607 also built-in types. If we didn't ignore them, then we would get
5608 references to undefined labels because output_type doesn't support
5609 them. So, for now, we need to ignore them to avoid assembler
5610 errors. */
5612 /* ??? This code is different than the equivalent code in dwarf2out.c.
5613 The dwarf2out.c code is probably more correct. */
5615 if (DECL_SOURCE_LINE (decl) == 0
5616 && (type_is_fundamental (TREE_TYPE (decl))
5617 || TREE_CODE (TREE_TYPE (decl)) == LANG_TYPE))
5618 return;
5620 /* If we are in terse mode, don't generate any DIEs to represent
5621 any actual typedefs. Note that even when we are in terse mode,
5622 we must still output DIEs to represent those tagged types which
5623 are used (directly or indirectly) in the specification of either
5624 a return type or a formal parameter type of some function. */
5626 if (debug_info_level <= DINFO_LEVEL_TERSE)
5627 if (! TYPE_DECL_IS_STUB (decl)
5628 || ! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)))
5629 return;
5631 break;
5633 default:
5634 return;
5637 fputc ('\n', asm_out_file);
5638 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
5639 finalizing = set_finalizing;
5640 output_decl (decl, NULL_TREE);
5642 /* NOTE: The call above to `output_decl' may have caused one or more
5643 file-scope named types (i.e. tagged types) to be placed onto the
5644 pending_types_list. We have to get those types off of that list
5645 at some point, and this is the perfect time to do it. If we didn't
5646 take them off now, they might still be on the list when cc1 finally
5647 exits. That might be OK if it weren't for the fact that when we put
5648 types onto the pending_types_list, we set the TREE_ASM_WRITTEN flag
5649 for these types, and that causes them never to be output unless
5650 `output_pending_types_for_scope' takes them off of the list and un-sets
5651 their TREE_ASM_WRITTEN flags. */
5653 output_pending_types_for_scope (NULL_TREE);
5655 /* The above call should have totally emptied the pending_types_list
5656 if this is not a nested function or class. If this is a nested type,
5657 then the remaining pending_types will be emitted when the containing type
5658 is handled. */
5660 if (! DECL_CONTEXT (decl))
5662 if (pending_types != 0)
5663 abort ();
5666 ASM_OUTPUT_POP_SECTION (asm_out_file);
5669 /* Output a marker (i.e. a label) for the beginning of the generated code
5670 for a lexical block. */
5672 static void
5673 dwarfout_begin_block (unsigned int line ATTRIBUTE_UNUSED,
5674 unsigned int blocknum)
5676 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5678 function_section (current_function_decl);
5679 sprintf (label, BLOCK_BEGIN_LABEL_FMT, blocknum);
5680 ASM_OUTPUT_LABEL (asm_out_file, label);
5683 /* Output a marker (i.e. a label) for the end of the generated code
5684 for a lexical block. */
5686 static void
5687 dwarfout_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
5689 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5691 function_section (current_function_decl);
5692 sprintf (label, BLOCK_END_LABEL_FMT, blocknum);
5693 ASM_OUTPUT_LABEL (asm_out_file, label);
5696 /* Output a marker (i.e. a label) for the point in the generated code where
5697 the real body of the function begins (after parameters have been moved
5698 to their home locations). */
5700 static void
5701 dwarfout_end_prologue (unsigned int line ATTRIBUTE_UNUSED,
5702 const char *file ATTRIBUTE_UNUSED)
5704 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5706 if (! use_gnu_debug_info_extensions)
5707 return;
5709 function_section (current_function_decl);
5710 sprintf (label, BODY_BEGIN_LABEL_FMT, current_function_funcdef_no);
5711 ASM_OUTPUT_LABEL (asm_out_file, label);
5714 /* Output a marker (i.e. a label) for the point in the generated code where
5715 the real body of the function ends (just before the epilogue code). */
5717 static void
5718 dwarfout_end_function (unsigned int line ATTRIBUTE_UNUSED)
5720 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5722 if (! use_gnu_debug_info_extensions)
5723 return;
5724 function_section (current_function_decl);
5725 sprintf (label, BODY_END_LABEL_FMT, current_function_funcdef_no);
5726 ASM_OUTPUT_LABEL (asm_out_file, label);
5729 /* Output a marker (i.e. a label) for the absolute end of the generated code
5730 for a function definition. This gets called *after* the epilogue code
5731 has been generated. */
5733 static void
5734 dwarfout_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
5735 const char *file ATTRIBUTE_UNUSED)
5737 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5739 /* Output a label to mark the endpoint of the code generated for this
5740 function. */
5742 sprintf (label, FUNC_END_LABEL_FMT, current_function_funcdef_no);
5743 ASM_OUTPUT_LABEL (asm_out_file, label);
5746 static void
5747 shuffle_filename_entry (filename_entry *new_zeroth)
5749 filename_entry temp_entry;
5750 filename_entry *limit_p;
5751 filename_entry *move_p;
5753 if (new_zeroth == &filename_table[0])
5754 return;
5756 temp_entry = *new_zeroth;
5758 /* Shift entries up in the table to make room at [0]. */
5760 limit_p = &filename_table[0];
5761 for (move_p = new_zeroth; move_p > limit_p; move_p--)
5762 *move_p = *(move_p-1);
5764 /* Install the found entry at [0]. */
5766 filename_table[0] = temp_entry;
5769 /* Create a new (string) entry for the .debug_sfnames section. */
5771 static void
5772 generate_new_sfname_entry (void)
5774 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5776 fputc ('\n', asm_out_file);
5777 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION);
5778 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, filename_table[0].number);
5779 ASM_OUTPUT_LABEL (asm_out_file, label);
5780 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5781 filename_table[0].name
5782 ? filename_table[0].name
5783 : "");
5784 ASM_OUTPUT_POP_SECTION (asm_out_file);
5787 /* Lookup a filename (in the list of filenames that we know about here in
5788 dwarfout.c) and return its "index". The index of each (known) filename
5789 is just a unique number which is associated with only that one filename.
5790 We need such numbers for the sake of generating labels (in the
5791 .debug_sfnames section) and references to those unique labels (in the
5792 .debug_srcinfo and .debug_macinfo sections).
5794 If the filename given as an argument is not found in our current list,
5795 add it to the list and assign it the next available unique index number.
5797 Whatever we do (i.e. whether we find a pre-existing filename or add a new
5798 one), we shuffle the filename found (or added) up to the zeroth entry of
5799 our list of filenames (which is always searched linearly). We do this so
5800 as to optimize the most common case for these filename lookups within
5801 dwarfout.c. The most common case by far is the case where we call
5802 lookup_filename to lookup the very same filename that we did a lookup
5803 on the last time we called lookup_filename. We make sure that this
5804 common case is fast because such cases will constitute 99.9% of the
5805 lookups we ever do (in practice).
5807 If we add a new filename entry to our table, we go ahead and generate
5808 the corresponding entry in the .debug_sfnames section right away.
5809 Doing so allows us to avoid tickling an assembler bug (present in some
5810 m68k assemblers) which yields assembly-time errors in cases where the
5811 difference of two label addresses is taken and where the two labels
5812 are in a section *other* than the one where the difference is being
5813 calculated, and where at least one of the two symbol references is a
5814 forward reference. (This bug could be tickled by our .debug_srcinfo
5815 entries if we don't output their corresponding .debug_sfnames entries
5816 before them.) */
5818 static unsigned
5819 lookup_filename (const char *file_name)
5821 filename_entry *search_p;
5822 filename_entry *limit_p = &filename_table[ft_entries];
5824 for (search_p = filename_table; search_p < limit_p; search_p++)
5825 if (!strcmp (file_name, search_p->name))
5827 /* When we get here, we have found the filename that we were
5828 looking for in the filename_table. Now we want to make sure
5829 that it gets moved to the zero'th entry in the table (if it
5830 is not already there) so that subsequent attempts to find the
5831 same filename will find it as quickly as possible. */
5833 shuffle_filename_entry (search_p);
5834 return filename_table[0].number;
5837 /* We come here whenever we have a new filename which is not registered
5838 in the current table. Here we add it to the table. */
5840 /* Prepare to add a new table entry by making sure there is enough space
5841 in the table to do so. If not, expand the current table. */
5843 if (ft_entries == ft_entries_allocated)
5845 ft_entries_allocated += FT_ENTRIES_INCREMENT;
5846 filename_table
5847 = xrealloc (filename_table,
5848 ft_entries_allocated * sizeof (filename_entry));
5851 /* Initially, add the new entry at the end of the filename table. */
5853 filename_table[ft_entries].number = ft_entries;
5854 filename_table[ft_entries].name = xstrdup (file_name);
5856 /* Shuffle the new entry into filename_table[0]. */
5858 shuffle_filename_entry (&filename_table[ft_entries]);
5860 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5861 generate_new_sfname_entry ();
5863 ft_entries++;
5864 return filename_table[0].number;
5867 static void
5868 generate_srcinfo_entry (unsigned int line_entry_num, unsigned int files_entry_num)
5870 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5872 fputc ('\n', asm_out_file);
5873 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
5874 sprintf (label, LINE_ENTRY_LABEL_FMT, line_entry_num);
5875 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, LINE_BEGIN_LABEL);
5876 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, files_entry_num);
5877 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, SFNAMES_BEGIN_LABEL);
5878 ASM_OUTPUT_POP_SECTION (asm_out_file);
5881 static void
5882 dwarfout_source_line (unsigned int line, const char *filename)
5884 if (debug_info_level >= DINFO_LEVEL_NORMAL
5885 /* We can't emit line number info for functions in separate sections,
5886 because the assembler can't subtract labels in different sections. */
5887 && DECL_SECTION_NAME (current_function_decl) == NULL_TREE)
5889 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5890 static unsigned last_line_entry_num = 0;
5891 static unsigned prev_file_entry_num = (unsigned) -1;
5892 unsigned this_file_entry_num;
5894 function_section (current_function_decl);
5895 sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num);
5896 ASM_OUTPUT_LABEL (asm_out_file, label);
5898 fputc ('\n', asm_out_file);
5900 if (use_gnu_debug_info_extensions)
5901 this_file_entry_num = lookup_filename (filename);
5902 else
5903 this_file_entry_num = (unsigned) -1;
5905 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
5906 if (this_file_entry_num != prev_file_entry_num)
5908 char line_entry_label[MAX_ARTIFICIAL_LABEL_BYTES];
5910 sprintf (line_entry_label, LINE_ENTRY_LABEL_FMT, last_line_entry_num);
5911 ASM_OUTPUT_LABEL (asm_out_file, line_entry_label);
5915 const char *tail = strrchr (filename, '/');
5917 if (tail != NULL)
5918 filename = tail;
5921 dw2_asm_output_data (4, line, "%s:%u", filename, line);
5922 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
5923 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, TEXT_BEGIN_LABEL);
5924 ASM_OUTPUT_POP_SECTION (asm_out_file);
5926 if (this_file_entry_num != prev_file_entry_num)
5927 generate_srcinfo_entry (last_line_entry_num, this_file_entry_num);
5928 prev_file_entry_num = this_file_entry_num;
5932 /* Generate an entry in the .debug_macinfo section. */
5934 static void
5935 generate_macinfo_entry (unsigned int type, rtx offset, const char *string)
5937 if (! use_gnu_debug_info_extensions)
5938 return;
5940 fputc ('\n', asm_out_file);
5941 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
5942 assemble_integer (gen_rtx_PLUS (SImode, GEN_INT (type << 24), offset),
5943 4, BITS_PER_UNIT, 1);
5944 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, string);
5945 ASM_OUTPUT_POP_SECTION (asm_out_file);
5948 /* Wrapper for toplev.c callback to check debug info level. */
5949 static void
5950 dwarfout_start_source_file_check (unsigned int line, const char *filename)
5952 if (debug_info_level == DINFO_LEVEL_VERBOSE)
5953 dwarfout_start_source_file (line, filename);
5956 static void
5957 dwarfout_start_source_file (unsigned int line ATTRIBUTE_UNUSED,
5958 const char *filename)
5960 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5961 const char *label1, *label2;
5963 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename));
5964 label1 = (*label == '*') + label;
5965 label2 = (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL;
5966 generate_macinfo_entry (MACINFO_start,
5967 gen_rtx_MINUS (Pmode,
5968 gen_rtx_SYMBOL_REF (Pmode, label1),
5969 gen_rtx_SYMBOL_REF (Pmode, label2)),
5970 "");
5973 /* Wrapper for toplev.c callback to check debug info level. */
5974 static void
5975 dwarfout_end_source_file_check (unsigned int lineno)
5977 if (debug_info_level == DINFO_LEVEL_VERBOSE)
5978 dwarfout_end_source_file (lineno);
5981 static void
5982 dwarfout_end_source_file (unsigned int lineno)
5984 generate_macinfo_entry (MACINFO_resume, GEN_INT (lineno), "");
5987 /* Called from check_newline in c-parse.y. The `buffer' parameter
5988 contains the tail part of the directive line, i.e. the part which
5989 is past the initial whitespace, #, whitespace, directive-name,
5990 whitespace part. */
5992 static void
5993 dwarfout_define (unsigned int lineno, const char *buffer)
5995 static int initialized = 0;
5997 if (!initialized)
5999 dwarfout_start_source_file (0, primary_filename);
6000 initialized = 1;
6002 generate_macinfo_entry (MACINFO_define, GEN_INT (lineno), buffer);
6005 /* Called from check_newline in c-parse.y. The `buffer' parameter
6006 contains the tail part of the directive line, i.e. the part which
6007 is past the initial whitespace, #, whitespace, directive-name,
6008 whitespace part. */
6010 static void
6011 dwarfout_undef (unsigned int lineno, const char *buffer)
6013 generate_macinfo_entry (MACINFO_undef, GEN_INT (lineno), buffer);
6016 /* Set up for Dwarf output at the start of compilation. */
6018 static void
6019 dwarfout_init (const char *main_input_filename)
6021 warning ("support for the DWARF1 debugging format is deprecated");
6023 /* Remember the name of the primary input file. */
6025 primary_filename = main_input_filename;
6027 /* Allocate the initial hunk of the pending_sibling_stack. */
6029 pending_sibling_stack
6030 = xmalloc (PENDING_SIBLINGS_INCREMENT * sizeof (unsigned));
6031 pending_siblings_allocated = PENDING_SIBLINGS_INCREMENT;
6032 pending_siblings = 1;
6034 /* Allocate the initial hunk of the filename_table. */
6036 filename_table = xmalloc (FT_ENTRIES_INCREMENT * sizeof (filename_entry));
6037 ft_entries_allocated = FT_ENTRIES_INCREMENT;
6038 ft_entries = 0;
6040 /* Allocate the initial hunk of the pending_types_list. */
6042 pending_types_list = xmalloc (PENDING_TYPES_INCREMENT * sizeof (tree));
6043 pending_types_allocated = PENDING_TYPES_INCREMENT;
6044 pending_types = 0;
6046 /* Create an artificial RECORD_TYPE node which we can use in our hack
6047 to get the DIEs representing types of formal parameters to come out
6048 only *after* the DIEs for the formal parameters themselves. */
6050 fake_containing_scope = make_node (RECORD_TYPE);
6052 /* Output a starting label for the .text section. */
6054 fputc ('\n', asm_out_file);
6055 ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION_NAME);
6056 ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL);
6057 ASM_OUTPUT_POP_SECTION (asm_out_file);
6059 /* Output a starting label for the .data section. */
6061 fputc ('\n', asm_out_file);
6062 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION_NAME);
6063 ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL);
6064 ASM_OUTPUT_POP_SECTION (asm_out_file);
6066 #if 0 /* GNU C doesn't currently use .data1. */
6067 /* Output a starting label for the .data1 section. */
6069 fputc ('\n', asm_out_file);
6070 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION_NAME);
6071 ASM_OUTPUT_LABEL (asm_out_file, DATA1_BEGIN_LABEL);
6072 ASM_OUTPUT_POP_SECTION (asm_out_file);
6073 #endif
6075 /* Output a starting label for the .rodata section. */
6077 fputc ('\n', asm_out_file);
6078 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION_NAME);
6079 ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL);
6080 ASM_OUTPUT_POP_SECTION (asm_out_file);
6082 #if 0 /* GNU C doesn't currently use .rodata1. */
6083 /* Output a starting label for the .rodata1 section. */
6085 fputc ('\n', asm_out_file);
6086 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION_NAME);
6087 ASM_OUTPUT_LABEL (asm_out_file, RODATA1_BEGIN_LABEL);
6088 ASM_OUTPUT_POP_SECTION (asm_out_file);
6089 #endif
6091 /* Output a starting label for the .bss section. */
6093 fputc ('\n', asm_out_file);
6094 ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION_NAME);
6095 ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL);
6096 ASM_OUTPUT_POP_SECTION (asm_out_file);
6098 if (debug_info_level >= DINFO_LEVEL_NORMAL)
6100 if (use_gnu_debug_info_extensions)
6102 /* Output a starting label and an initial (compilation directory)
6103 entry for the .debug_sfnames section. The starting label will be
6104 referenced by the initial entry in the .debug_srcinfo section. */
6106 fputc ('\n', asm_out_file);
6107 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION);
6108 ASM_OUTPUT_LABEL (asm_out_file, SFNAMES_BEGIN_LABEL);
6110 const char *pwd = get_src_pwd ();
6111 char *dirname;
6113 if (!pwd)
6114 fatal_error ("can't get current directory: %m");
6116 dirname = concat (pwd, "/", NULL);
6117 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
6118 free (dirname);
6120 ASM_OUTPUT_POP_SECTION (asm_out_file);
6123 if (debug_info_level >= DINFO_LEVEL_VERBOSE
6124 && use_gnu_debug_info_extensions)
6126 /* Output a starting label for the .debug_macinfo section. This
6127 label will be referenced by the AT_mac_info attribute in the
6128 TAG_compile_unit DIE. */
6130 fputc ('\n', asm_out_file);
6131 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
6132 ASM_OUTPUT_LABEL (asm_out_file, MACINFO_BEGIN_LABEL);
6133 ASM_OUTPUT_POP_SECTION (asm_out_file);
6136 /* Generate the initial entry for the .line section. */
6138 fputc ('\n', asm_out_file);
6139 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6140 ASM_OUTPUT_LABEL (asm_out_file, LINE_BEGIN_LABEL);
6141 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, LINE_END_LABEL, LINE_BEGIN_LABEL);
6142 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6143 ASM_OUTPUT_POP_SECTION (asm_out_file);
6145 if (use_gnu_debug_info_extensions)
6147 /* Generate the initial entry for the .debug_srcinfo section. */
6149 fputc ('\n', asm_out_file);
6150 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
6151 ASM_OUTPUT_LABEL (asm_out_file, SRCINFO_BEGIN_LABEL);
6152 ASM_OUTPUT_DWARF_ADDR (asm_out_file, LINE_BEGIN_LABEL);
6153 ASM_OUTPUT_DWARF_ADDR (asm_out_file, SFNAMES_BEGIN_LABEL);
6154 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6155 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_END_LABEL);
6156 #ifdef DWARF_TIMESTAMPS
6157 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, time (NULL));
6158 #else
6159 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
6160 #endif
6161 ASM_OUTPUT_POP_SECTION (asm_out_file);
6164 /* Generate the initial entry for the .debug_pubnames section. */
6166 fputc ('\n', asm_out_file);
6167 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
6168 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
6169 ASM_OUTPUT_POP_SECTION (asm_out_file);
6171 /* Generate the initial entry for the .debug_aranges section. */
6173 fputc ('\n', asm_out_file);
6174 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
6175 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
6176 DEBUG_ARANGES_END_LABEL,
6177 DEBUG_ARANGES_BEGIN_LABEL);
6178 ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_BEGIN_LABEL);
6179 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 1);
6180 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
6181 ASM_OUTPUT_POP_SECTION (asm_out_file);
6184 /* Setup first DIE number == 1. */
6185 NEXT_DIE_NUM = next_unused_dienum++;
6187 /* Generate the initial DIE for the .debug section. Note that the
6188 (string) value given in the AT_name attribute of the TAG_compile_unit
6189 DIE will (typically) be a relative pathname and that this pathname
6190 should be taken as being relative to the directory from which the
6191 compiler was invoked when the given (base) source file was compiled. */
6193 fputc ('\n', asm_out_file);
6194 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
6195 ASM_OUTPUT_LABEL (asm_out_file, DEBUG_BEGIN_LABEL);
6196 output_die (output_compile_unit_die, (void *) main_input_filename);
6197 ASM_OUTPUT_POP_SECTION (asm_out_file);
6199 fputc ('\n', asm_out_file);
6202 /* Output stuff that dwarf requires at the end of every file. */
6204 static void
6205 dwarfout_finish (const char *main_input_filename ATTRIBUTE_UNUSED)
6207 char label[MAX_ARTIFICIAL_LABEL_BYTES];
6209 fputc ('\n', asm_out_file);
6210 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
6211 retry_incomplete_types ();
6212 fputc ('\n', asm_out_file);
6214 /* Mark the end of the chain of siblings which represent all file-scope
6215 declarations in this compilation unit. */
6217 /* The (null) DIE which represents the terminator for the (sibling linked)
6218 list of file-scope items is *special*. Normally, we would just call
6219 end_sibling_chain at this point in order to output a word with the
6220 value `4' and that word would act as the terminator for the list of
6221 DIEs describing file-scope items. Unfortunately, if we were to simply
6222 do that, the label that would follow this DIE in the .debug section
6223 (i.e. `..D2') would *not* be properly aligned (as it must be on some
6224 machines) to a 4 byte boundary.
6226 In order to force the label `..D2' to get aligned to a 4 byte boundary,
6227 the trick used is to insert extra (otherwise useless) padding bytes
6228 into the (null) DIE that we know must precede the ..D2 label in the
6229 .debug section. The amount of padding required can be anywhere between
6230 0 and 3 bytes. The length word at the start of this DIE (i.e. the one
6231 with the padding) would normally contain the value 4, but now it will
6232 also have to include the padding bytes, so it will instead have some
6233 value in the range 4..7.
6235 Fortunately, the rules of Dwarf say that any DIE whose length word
6236 contains *any* value less than 8 should be treated as a null DIE, so
6237 this trick works out nicely. Clever, eh? Don't give me any credit
6238 (or blame). I didn't think of this scheme. I just conformed to it.
6241 output_die (output_padded_null_die, (void *) 0);
6242 dienum_pop ();
6244 sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
6245 ASM_OUTPUT_LABEL (asm_out_file, label); /* should be ..D2 */
6246 ASM_OUTPUT_POP_SECTION (asm_out_file);
6248 /* Output a terminator label for the .text section. */
6250 fputc ('\n', asm_out_file);
6251 ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION_NAME);
6252 ASM_OUTPUT_LABEL (asm_out_file, TEXT_END_LABEL);
6253 ASM_OUTPUT_POP_SECTION (asm_out_file);
6255 /* Output a terminator label for the .data section. */
6257 fputc ('\n', asm_out_file);
6258 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION_NAME);
6259 ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL);
6260 ASM_OUTPUT_POP_SECTION (asm_out_file);
6262 #if 0 /* GNU C doesn't currently use .data1. */
6263 /* Output a terminator label for the .data1 section. */
6265 fputc ('\n', asm_out_file);
6266 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION_NAME);
6267 ASM_OUTPUT_LABEL (asm_out_file, DATA1_END_LABEL);
6268 ASM_OUTPUT_POP_SECTION (asm_out_file);
6269 #endif
6271 /* Output a terminator label for the .rodata section. */
6273 fputc ('\n', asm_out_file);
6274 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION_NAME);
6275 ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL);
6276 ASM_OUTPUT_POP_SECTION (asm_out_file);
6278 #if 0 /* GNU C doesn't currently use .rodata1. */
6279 /* Output a terminator label for the .rodata1 section. */
6281 fputc ('\n', asm_out_file);
6282 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION_NAME);
6283 ASM_OUTPUT_LABEL (asm_out_file, RODATA1_END_LABEL);
6284 ASM_OUTPUT_POP_SECTION (asm_out_file);
6285 #endif
6287 /* Output a terminator label for the .bss section. */
6289 fputc ('\n', asm_out_file);
6290 ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION_NAME);
6291 ASM_OUTPUT_LABEL (asm_out_file, BSS_END_LABEL);
6292 ASM_OUTPUT_POP_SECTION (asm_out_file);
6294 if (debug_info_level >= DINFO_LEVEL_NORMAL)
6296 /* Output a terminating entry for the .line section. */
6298 fputc ('\n', asm_out_file);
6299 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6300 ASM_OUTPUT_LABEL (asm_out_file, LINE_LAST_ENTRY_LABEL);
6301 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6302 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
6303 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6304 ASM_OUTPUT_LABEL (asm_out_file, LINE_END_LABEL);
6305 ASM_OUTPUT_POP_SECTION (asm_out_file);
6307 if (use_gnu_debug_info_extensions)
6309 /* Output a terminating entry for the .debug_srcinfo section. */
6311 fputc ('\n', asm_out_file);
6312 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
6313 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
6314 LINE_LAST_ENTRY_LABEL, LINE_BEGIN_LABEL);
6315 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
6316 ASM_OUTPUT_POP_SECTION (asm_out_file);
6319 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
6321 /* Output terminating entries for the .debug_macinfo section. */
6323 dwarfout_end_source_file (0);
6325 fputc ('\n', asm_out_file);
6326 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
6327 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6328 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
6329 ASM_OUTPUT_POP_SECTION (asm_out_file);
6332 /* Generate the terminating entry for the .debug_pubnames section. */
6334 fputc ('\n', asm_out_file);
6335 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
6336 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6337 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
6338 ASM_OUTPUT_POP_SECTION (asm_out_file);
6340 /* Generate the terminating entries for the .debug_aranges section.
6342 Note that we want to do this only *after* we have output the end
6343 labels (for the various program sections) which we are going to
6344 refer to here. This allows us to work around a bug in the m68k
6345 svr4 assembler. That assembler gives bogus assembly-time errors
6346 if (within any given section) you try to take the difference of
6347 two relocatable symbols, both of which are located within some
6348 other section, and if one (or both?) of the symbols involved is
6349 being forward-referenced. By generating the .debug_aranges
6350 entries at this late point in the assembly output, we skirt the
6351 issue simply by avoiding forward-references.
6354 fputc ('\n', asm_out_file);
6355 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
6357 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6358 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6360 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA_BEGIN_LABEL);
6361 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA_END_LABEL, DATA_BEGIN_LABEL);
6363 #if 0 /* GNU C doesn't currently use .data1. */
6364 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA1_BEGIN_LABEL);
6365 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA1_END_LABEL,
6366 DATA1_BEGIN_LABEL);
6367 #endif
6369 ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA_BEGIN_LABEL);
6370 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA_END_LABEL,
6371 RODATA_BEGIN_LABEL);
6373 #if 0 /* GNU C doesn't currently use .rodata1. */
6374 ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA1_BEGIN_LABEL);
6375 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA1_END_LABEL,
6376 RODATA1_BEGIN_LABEL);
6377 #endif
6379 ASM_OUTPUT_DWARF_ADDR (asm_out_file, BSS_BEGIN_LABEL);
6380 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, BSS_END_LABEL, BSS_BEGIN_LABEL);
6382 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6383 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6385 ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_END_LABEL);
6386 ASM_OUTPUT_POP_SECTION (asm_out_file);
6389 /* There should not be any pending types left at the end. We need
6390 this now because it may not have been checked on the last call to
6391 dwarfout_file_scope_decl. */
6392 if (pending_types != 0)
6393 abort ();
6396 #endif /* DWARF_DEBUGGING_INFO */