OSDN Git Service

* dbxout.c (dbxout_source_line): Make static, update prototype.
[pf3gnuchains/gcc-fork.git] / gcc / dwarfout.c
1 /* Output Dwarf format symbol table information from the GNU C compiler.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001 Free Software Foundation, Inc.
4    Contributed by Ron Guilmette (rfg@monkeys.com) of Network Computing Devices.
5
6 This file is part of GNU CC.
7
8 GNU CC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2, or (at your option)
11 any later version.
12
13 GNU CC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU CC; see the file COPYING.  If not, write to
20 the Free Software Foundation, 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA.  */
22
23 /*
24
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  ------------------------------------------------------------
29
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).
33
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.
38
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
41
42    http://www.eagercon.com/dwarf/dwarf2std.htm
43
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).
49
50  DWARF 1 generation for the GNU g++ compiler is implemented, but limited.
51  C++ users should definitely use DWARF 2 instead.
52
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.)
56
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).
66
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!)
71
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).
75
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.
81
82      ** IMPORTANT NOTE **    ** IMPORTANT NOTE **    ** IMPORTANT NOTE **
83
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.
95
96  ---------
97
98  (Footnote: Within this file, the term `Debugging Information Entry' will
99  be abbreviated as `DIE'.)
100
101
102  Release Notes  (aka known bugs)
103  -------------------------------
104
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.
113
114  -------------------------------
115
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).
123
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.
128
129  -------------------------------
130
131  It is believed at this time that old bugs relating to the AT_bit_offset
132  values for bit-fields have been fixed.
133
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.
138
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.)
142
143  --------------------------------
144
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.)
147
148  --------------------------------
149
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).
157
158  --------------------------------
159
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.
163
164  Specifically, the current DWARF draft specification seems to require that
165  the type of an 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".
177
178  Unfortunately, the GNU DWARF implementation is currently incapable of making
179  such distinctions.
180
181  --------------------------------
182
183
184  Known Interoperability Problems
185  -------------------------------
186
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.
193
194  --------------------------------
195
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.
205
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.)
209
210  --------------------------------
211
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.
218
219  --------------------------------
220
221
222  General GNU DWARF extensions
223  ----------------------------
224
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.)
231
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.
242
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).
248
249  For each LEC there is one entry in the .debug_srcinfo section.
250
251  Each normal entry in the .debug_srcinfo section consists of two 4-byte
252  words of data as follows:
253
254          (1)    The starting address (relative to the entire .line section)
255                  of the first .line entry in the relevant LEC.
256
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.)
262
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.
266
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.
275
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.
278
279
280          .line section     .debug_srcinfo section     .debug_sfnames section
281          ----------------------------------------------------------------
282
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                         * -----------------------------------
302          LE
303          LE
304          LE
305
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).
309
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.
317
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:
321
322          (1)    The starting address (relative to the entire .line section)
323                  of the .line section for this compilation unit.
324
325          (2)    The starting address (relative to the entire .debug_sfnames
326                  section) of the .debug_sfnames section for this compilation
327                  unit.
328
329          (3)    The starting address (in the execution virtual address space)
330                  of the .text section for this compilation unit.
331
332          (4)    The ending address plus one (in the execution virtual address
333                  space) of the .text section for this compilation unit.
334
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).
348
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.
357
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.
365
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:
369
370          (1)    The offset, measured from the start of the .line section to
371                  the beginning of the terminating entry for the .line section.
372
373          (2)    A word containing the value 0xffffffff.
374
375  --------------------------------
376
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.
380
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.
388
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.)
393
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:
397
398          (1)    A special "type" byte.
399
400          (2)    A 3-byte line-number/filename-offset field.
401
402          (3)    A NUL terminated string.
403
404  The interpretation of the second and third parts is dependent upon the
405  value of the leading (type) byte.
406
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:
410
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.
415
416  (Note that the MACINFO_... codes mentioned here are simply symbolic names
417  for constants which are defined in the GNU dwarf.h file.)
418
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.
428
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.
435
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.
441
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.
445
446  --------------------------------
447
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).
451
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.
467
468  --------------------------------
469
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.
475
476  --------------------------------
477
478
479  GNU DWARF Representation of GNU C Extensions to ANSI C
480  ------------------------------------------------------
481
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.
489
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.
496
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.
501
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.)
507
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.
511
512  --------------------------------
513
514
515  Future Directions
516  -----------------
517
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.) 
527
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.
533
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.
536
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.
550
551  In particular, possible link-time transformations of DWARF code which could
552  provide significant benefits include (but are not limited to):
553
554          Commonization of duplicate DIEs obtained from multiple input
555          (object) files.
556
557          Cross-compilation type checking based upon DWARF type information
558          for objects and functions.
559
560          Other possible `compacting' transformations designed to save disk
561          space and to reduce linker & debugger I/O activity.
562
563 */  
564
565 #include "config.h"
566
567 #ifdef DWARF_DEBUGGING_INFO
568 #include "system.h"
569 #include "dwarf.h"
570 #include "tree.h"
571 #include "flags.h"
572 #include "rtl.h"
573 #include "hard-reg-set.h"
574 #include "insn-config.h"
575 #include "reload.h"
576 #include "output.h"
577 #include "dwarfout.h"
578 #include "toplev.h"
579 #include "tm_p.h"
580 #include "debug.h"
581
582 /* IMPORTANT NOTE: Please see the file README.DWARF for important details
583    regarding the GNU implementation of Dwarf.  */
584
585 /* NOTE: In the comments in this file, many references are made to
586    so called "Debugging Information Entries".  For the sake of brevity,
587    this term is abbreviated to `DIE' throughout the remainder of this
588    file.  */
589
590 /* Note that the implementation of C++ support herein is (as yet) unfinished.
591    If you want to try to complete it, more power to you.  */
592
593 /* How to start an assembler comment.  */
594 #ifndef ASM_COMMENT_START
595 #define ASM_COMMENT_START ";#"
596 #endif
597
598 /* How to print out a register name.  */
599 #ifndef PRINT_REG
600 #define PRINT_REG(RTX, CODE, FILE) \
601   fprintf ((FILE), "%s", reg_names[REGNO (RTX)])
602 #endif
603
604 /* Define a macro which returns non-zero for any tagged type which is
605    used (directly or indirectly) in the specification of either some
606    function's return type or some formal parameter of some function.
607    We use this macro when we are operating in "terse" mode to help us
608    know what tagged types have to be represented in Dwarf (even in
609    terse mode) and which ones don't.
610
611    A flag bit with this meaning really should be a part of the normal
612    GCC ..._TYPE nodes, but at the moment, there is no such bit defined
613    for these nodes.  For now, we have to just fake it.  It it safe for
614    us to simply return zero for all complete tagged types (which will
615    get forced out anyway if they were used in the specification of some
616    formal or return type) and non-zero for all incomplete tagged types.
617 */
618
619 #define TYPE_USED_FOR_FUNCTION(tagged_type) (TYPE_SIZE (tagged_type) == 0)
620
621 /* Define a macro which returns non-zero for a TYPE_DECL which was
622    implicitly generated for a tagged type.
623
624    Note that unlike the gcc front end (which generates a NULL named
625    TYPE_DECL node for each complete tagged type, each array type, and
626    each function type node created) the g++ front end generates a
627    _named_ TYPE_DECL node for each tagged type node created.
628    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
629    generate a DW_TAG_typedef DIE for them.  */
630 #define TYPE_DECL_IS_STUB(decl)                         \
631   (DECL_NAME (decl) == NULL                             \
632    || (DECL_ARTIFICIAL (decl)                           \
633        && is_tagged_type (TREE_TYPE (decl))             \
634        && decl == TYPE_STUB_DECL (TREE_TYPE (decl))))
635
636 extern int flag_traditional;
637
638 /* Maximum size (in bytes) of an artificially generated label.  */
639
640 #define MAX_ARTIFICIAL_LABEL_BYTES      30
641 \f
642 /* Structure to keep track of source filenames.  */
643
644 struct filename_entry {
645   unsigned      number;
646   const char *  name;
647 };
648
649 typedef struct filename_entry filename_entry;
650
651 /* Pointer to an array of elements, each one having the structure above.  */
652
653 static filename_entry *filename_table;
654
655 /* Total number of entries in the table (i.e. array) pointed to by
656    `filename_table'.  This is the *total* and includes both used and
657    unused slots.  */
658
659 static unsigned ft_entries_allocated;
660
661 /* Number of entries in the filename_table which are actually in use.  */
662
663 static unsigned ft_entries;
664
665 /* Size (in elements) of increments by which we may expand the filename
666    table.  Actually, a single hunk of space of this size should be enough
667    for most typical programs.    */
668
669 #define FT_ENTRIES_INCREMENT 64
670
671 /* Local pointer to the name of the main input file.  Initialized in
672    dwarfout_init.  */
673
674 static const char *primary_filename;
675
676 /* Pointer to the most recent filename for which we produced some line info.  */
677
678 static const char *last_filename;
679
680 /* Counter to generate unique names for DIEs.  */
681
682 static unsigned next_unused_dienum = 1;
683
684 /* Number of the DIE which is currently being generated.  */
685
686 static unsigned current_dienum;
687
688 /* Number to use for the special "pubname" label on the next DIE which
689    represents a function or data object defined in this compilation
690    unit which has "extern" linkage.  */
691
692 static int next_pubname_number = 0;
693
694 #define NEXT_DIE_NUM pending_sibling_stack[pending_siblings-1]
695
696 /* Pointer to a dynamically allocated list of pre-reserved and still
697    pending sibling DIE numbers.  Note that this list will grow as needed.  */
698
699 static unsigned *pending_sibling_stack;
700
701 /* Counter to keep track of the number of pre-reserved and still pending
702    sibling DIE numbers.  */
703
704 static unsigned pending_siblings;
705
706 /* The currently allocated size of the above list (expressed in number of
707    list elements).  */
708
709 static unsigned pending_siblings_allocated;
710
711 /* Size (in elements) of increments by which we may expand the pending
712    sibling stack.  Actually, a single hunk of space of this size should
713    be enough for most typical programs.  */
714
715 #define PENDING_SIBLINGS_INCREMENT 64
716
717 /* Non-zero if we are performing our file-scope finalization pass and if
718    we should force out Dwarf descriptions of any and all file-scope
719    tagged types which are still incomplete types.  */
720
721 static int finalizing = 0;
722
723 /* A pointer to the base of a list of pending types which we haven't
724    generated DIEs for yet, but which we will have to come back to
725    later on.  */
726
727 static tree *pending_types_list;
728
729 /* Number of elements currently allocated for the pending_types_list.  */
730
731 static unsigned pending_types_allocated;
732
733 /* Number of elements of pending_types_list currently in use.  */
734
735 static unsigned pending_types;
736
737 /* Size (in elements) of increments by which we may expand the pending
738    types list.  Actually, a single hunk of space of this size should
739    be enough for most typical programs.  */
740
741 #define PENDING_TYPES_INCREMENT 64
742
743 /* A pointer to the base of a list of incomplete types which might be
744    completed at some later time.  */
745
746 static tree *incomplete_types_list;
747
748 /* Number of elements currently allocated for the incomplete_types_list.  */
749 static unsigned incomplete_types_allocated;
750
751 /* Number of elements of incomplete_types_list currently in use.  */
752 static unsigned incomplete_types;
753
754 /* Size (in elements) of increments by which we may expand the incomplete
755    types list.  Actually, a single hunk of space of this size should
756    be enough for most typical programs.  */
757 #define INCOMPLETE_TYPES_INCREMENT 64
758
759 /* Pointer to an artificial RECORD_TYPE which we create in dwarfout_init.
760    This is used in a hack to help us get the DIEs describing types of
761    formal parameters to come *after* all of the DIEs describing the formal
762    parameters themselves.  That's necessary in order to be compatible
763    with what the brain-damaged svr4 SDB debugger requires.  */
764
765 static tree fake_containing_scope;
766
767 /* The number of the current function definition that we are generating
768    debugging information for.  These numbers range from 1 up to the maximum
769    number of function definitions contained within the current compilation
770    unit.  These numbers are used to create unique labels for various things
771    contained within various function definitions.  */
772
773 static unsigned current_funcdef_number = 1;
774
775 /* A pointer to the ..._DECL node which we have most recently been working
776    on.  We keep this around just in case something about it looks screwy
777    and we want to tell the user what the source coordinates for the actual
778    declaration are.  */
779
780 static tree dwarf_last_decl;
781
782 /* A flag indicating that we are emitting the member declarations of a
783    class, so member functions and variables should not be entirely emitted.
784    This is a kludge to avoid passing a second argument to output_*_die.  */
785
786 static int in_class;
787
788 /* Forward declarations for functions defined in this file.  */
789
790 static void dwarfout_init               PARAMS ((const char *));
791 static void dwarfout_finish             PARAMS ((const char *));
792 static void dwarfout_define             PARAMS ((unsigned int, const char *));
793 static void dwarfout_undef              PARAMS ((unsigned int, const char *));
794 static void dwarfout_start_source_file  PARAMS ((unsigned, const char *));
795 static void dwarfout_start_source_file_check PARAMS ((unsigned, const char *));
796 static void dwarfout_end_source_file    PARAMS ((unsigned));
797 static void dwarfout_end_source_file_check PARAMS ((unsigned));
798 static void dwarfout_begin_block        PARAMS ((unsigned, unsigned));
799 static void dwarfout_end_block          PARAMS ((unsigned, unsigned));
800 static void dwarfout_end_epilogue       PARAMS ((void));
801 static void dwarfout_source_line        PARAMS (( const char *, rtx));
802 static void dwarfout_end_function       PARAMS ((unsigned int));
803 static const char *dwarf_tag_name       PARAMS ((unsigned));
804 static const char *dwarf_attr_name      PARAMS ((unsigned));
805 static const char *dwarf_stack_op_name  PARAMS ((unsigned));
806 static const char *dwarf_typemod_name   PARAMS ((unsigned));
807 static const char *dwarf_fmt_byte_name  PARAMS ((unsigned));
808 static const char *dwarf_fund_type_name PARAMS ((unsigned));
809 static tree decl_ultimate_origin        PARAMS ((tree));
810 static tree block_ultimate_origin       PARAMS ((tree));
811 static tree decl_class_context          PARAMS ((tree));
812 #if 0
813 static void output_unsigned_leb128      PARAMS ((unsigned long));
814 static void output_signed_leb128        PARAMS ((long));
815 #endif
816 static int fundamental_type_code        PARAMS ((tree));
817 static tree root_type_1                 PARAMS ((tree, int));
818 static tree root_type                   PARAMS ((tree));
819 static void write_modifier_bytes_1      PARAMS ((tree, int, int, int));
820 static void write_modifier_bytes        PARAMS ((tree, int, int));
821 static inline int type_is_fundamental   PARAMS ((tree));
822 static void equate_decl_number_to_die_number PARAMS ((tree));
823 static inline void equate_type_number_to_die_number PARAMS ((tree));
824 static void output_reg_number           PARAMS ((rtx));
825 static void output_mem_loc_descriptor   PARAMS ((rtx));
826 static void output_loc_descriptor       PARAMS ((rtx));
827 static void output_bound_representation PARAMS ((tree, unsigned, int));
828 static void output_enumeral_list        PARAMS ((tree));
829 static inline HOST_WIDE_INT ceiling     PARAMS ((HOST_WIDE_INT, unsigned int));
830 static inline tree field_type           PARAMS ((tree));
831 static inline unsigned int simple_type_align_in_bits PARAMS ((tree));
832 static inline unsigned HOST_WIDE_INT simple_type_size_in_bits  PARAMS ((tree));
833 static HOST_WIDE_INT field_byte_offset  PARAMS ((tree));
834 static inline void sibling_attribute    PARAMS ((void));
835 static void location_attribute          PARAMS ((rtx));
836 static void data_member_location_attribute PARAMS ((tree));
837 static void const_value_attribute       PARAMS ((rtx));
838 static void location_or_const_value_attribute PARAMS ((tree));
839 static inline void name_attribute       PARAMS ((const char *));
840 static inline void fund_type_attribute  PARAMS ((unsigned));
841 static void mod_fund_type_attribute     PARAMS ((tree, int, int));
842 static inline void user_def_type_attribute PARAMS ((tree));
843 static void mod_u_d_type_attribute      PARAMS ((tree, int, int));
844 #ifdef USE_ORDERING_ATTRIBUTE
845 static inline void ordering_attribute   PARAMS ((unsigned));
846 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
847 static void subscript_data_attribute    PARAMS ((tree));
848 static void byte_size_attribute         PARAMS ((tree));
849 static inline void bit_offset_attribute PARAMS ((tree));
850 static inline void bit_size_attribute   PARAMS ((tree));
851 static inline void element_list_attribute PARAMS ((tree));
852 static inline void stmt_list_attribute  PARAMS ((const char *));
853 static inline void low_pc_attribute     PARAMS ((const char *));
854 static inline void high_pc_attribute    PARAMS ((const char *));
855 static inline void body_begin_attribute PARAMS ((const char *));
856 static inline void body_end_attribute   PARAMS ((const char *));
857 static inline void language_attribute   PARAMS ((unsigned));
858 static inline void member_attribute     PARAMS ((tree));
859 #if 0
860 static inline void string_length_attribute PARAMS ((tree));
861 #endif
862 static inline void comp_dir_attribute   PARAMS ((const char *));
863 static inline void sf_names_attribute   PARAMS ((const char *));
864 static inline void src_info_attribute   PARAMS ((const char *));
865 static inline void mac_info_attribute   PARAMS ((const char *));
866 static inline void prototyped_attribute PARAMS ((tree));
867 static inline void producer_attribute   PARAMS ((const char *));
868 static inline void inline_attribute     PARAMS ((tree));
869 static inline void containing_type_attribute PARAMS ((tree));
870 static inline void abstract_origin_attribute PARAMS ((tree));
871 #ifdef DWARF_DECL_COORDINATES
872 static inline void src_coords_attribute PARAMS ((unsigned, unsigned));
873 #endif /* defined(DWARF_DECL_COORDINATES) */
874 static inline void pure_or_virtual_attribute PARAMS ((tree));
875 static void name_and_src_coords_attributes PARAMS ((tree));
876 static void type_attribute              PARAMS ((tree, int, int));
877 static const char *type_tag             PARAMS ((tree));
878 static inline void dienum_push          PARAMS ((void));
879 static inline void dienum_pop           PARAMS ((void));
880 static inline tree member_declared_type PARAMS ((tree));
881 static const char *function_start_label PARAMS ((tree));
882 static void output_array_type_die       PARAMS ((void *));
883 static void output_set_type_die         PARAMS ((void *));
884 #if 0
885 static void output_entry_point_die      PARAMS ((void *));
886 #endif
887 static void output_inlined_enumeration_type_die PARAMS ((void *));
888 static void output_inlined_structure_type_die PARAMS ((void *));
889 static void output_inlined_union_type_die PARAMS ((void *));
890 static void output_enumeration_type_die PARAMS ((void *));
891 static void output_formal_parameter_die PARAMS ((void *));
892 static void output_global_subroutine_die PARAMS ((void *));
893 static void output_global_variable_die  PARAMS ((void *));
894 static void output_label_die            PARAMS ((void *));
895 static void output_lexical_block_die    PARAMS ((void *));
896 static void output_inlined_subroutine_die PARAMS ((void *));
897 static void output_local_variable_die   PARAMS ((void *));
898 static void output_member_die           PARAMS ((void *));
899 #if 0
900 static void output_pointer_type_die     PARAMS ((void *));
901 static void output_reference_type_die   PARAMS ((void *));
902 #endif
903 static void output_ptr_to_mbr_type_die  PARAMS ((void *));
904 static void output_compile_unit_die     PARAMS ((void *));
905 static void output_string_type_die      PARAMS ((void *));
906 static void output_inheritance_die      PARAMS ((void *));
907 static void output_structure_type_die   PARAMS ((void *));
908 static void output_local_subroutine_die PARAMS ((void *));
909 static void output_subroutine_type_die  PARAMS ((void *));
910 static void output_typedef_die          PARAMS ((void *));
911 static void output_union_type_die       PARAMS ((void *));
912 static void output_unspecified_parameters_die PARAMS ((void *));
913 static void output_padded_null_die      PARAMS ((void *));
914 static void output_die                  PARAMS ((void (*)(void *), void *));
915 static void end_sibling_chain           PARAMS ((void));
916 static void output_formal_types         PARAMS ((tree));
917 static void pend_type                   PARAMS ((tree));
918 static int type_ok_for_scope            PARAMS ((tree, tree));
919 static void output_pending_types_for_scope PARAMS ((tree));
920 static void output_type                 PARAMS ((tree, tree));
921 static void output_tagged_type_instantiation PARAMS ((tree));
922 static void output_block                PARAMS ((tree, int));
923 static void output_decls_for_scope      PARAMS ((tree, int));
924 static void output_decl                 PARAMS ((tree, tree));
925 static void shuffle_filename_entry      PARAMS ((filename_entry *));
926 static void generate_new_sfname_entry   PARAMS ((void));
927 static unsigned lookup_filename         PARAMS ((const char *));
928 static void generate_srcinfo_entry      PARAMS ((unsigned, unsigned));
929 static void generate_macinfo_entry      PARAMS ((const char *, const char *));
930 static int is_pseudo_reg                PARAMS ((rtx));
931 static tree type_main_variant           PARAMS ((tree));
932 static int is_tagged_type               PARAMS ((tree));
933 static int is_redundant_typedef         PARAMS ((tree));
934 static void add_incomplete_type         PARAMS ((tree));
935 static void retry_incomplete_types      PARAMS ((void));
936 \f
937 /* Definitions of defaults for assembler-dependent names of various
938    pseudo-ops and section names.
939
940    Theses may be overridden in your tm.h file (if necessary) for your
941    particular assembler.  The default values provided here correspond to
942    what is expected by "standard" AT&T System V.4 assemblers.  */
943
944 #ifndef FILE_ASM_OP
945 #define FILE_ASM_OP             "\t.file\t"
946 #endif
947 #ifndef VERSION_ASM_OP
948 #define VERSION_ASM_OP          "\t.version\t"
949 #endif
950 #ifndef UNALIGNED_SHORT_ASM_OP
951 #define UNALIGNED_SHORT_ASM_OP  "\t.2byte\t"
952 #endif
953 #ifndef UNALIGNED_INT_ASM_OP
954 #define UNALIGNED_INT_ASM_OP    "\t.4byte\t"
955 #endif
956 #ifndef ASM_BYTE_OP
957 #define ASM_BYTE_OP             "\t.byte\t"
958 #endif
959 #ifndef SET_ASM_OP
960 #define SET_ASM_OP              "\t.set\t"
961 #endif
962
963 /* Pseudo-ops for pushing the current section onto the section stack (and
964    simultaneously changing to a new section) and for poping back to the
965    section we were in immediately before this one.  Note that most svr4
966    assemblers only maintain a one level stack... you can push all the
967    sections you want, but you can only pop out one level.  (The sparc
968    svr4 assembler is an exception to this general rule.)  That's
969    OK because we only use at most one level of the section stack herein.  */
970
971 #ifndef PUSHSECTION_ASM_OP
972 #define PUSHSECTION_ASM_OP      "\t.section\t"
973 #endif
974 #ifndef POPSECTION_ASM_OP
975 #define POPSECTION_ASM_OP       "\t.previous"
976 #endif
977
978 /* The default format used by the ASM_OUTPUT_PUSH_SECTION macro (see below)
979    to print the PUSHSECTION_ASM_OP and the section name.  The default here
980    works for almost all svr4 assemblers, except for the sparc, where the
981    section name must be enclosed in double quotes.  (See sparcv4.h.)  */
982
983 #ifndef PUSHSECTION_FORMAT
984 #define PUSHSECTION_FORMAT      "%s%s\n"
985 #endif
986
987 #ifndef DEBUG_SECTION
988 #define DEBUG_SECTION           ".debug"
989 #endif
990 #ifndef LINE_SECTION
991 #define LINE_SECTION            ".line"
992 #endif
993 #ifndef DEBUG_SFNAMES_SECTION
994 #define DEBUG_SFNAMES_SECTION   ".debug_sfnames"
995 #endif
996 #ifndef DEBUG_SRCINFO_SECTION
997 #define DEBUG_SRCINFO_SECTION   ".debug_srcinfo"
998 #endif
999 #ifndef DEBUG_MACINFO_SECTION
1000 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
1001 #endif
1002 #ifndef DEBUG_PUBNAMES_SECTION
1003 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
1004 #endif
1005 #ifndef DEBUG_ARANGES_SECTION
1006 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
1007 #endif
1008 #ifndef TEXT_SECTION
1009 #define TEXT_SECTION            ".text"
1010 #endif
1011 #ifndef DATA_SECTION
1012 #define DATA_SECTION            ".data"
1013 #endif
1014 #ifndef DATA1_SECTION
1015 #define DATA1_SECTION           ".data1"
1016 #endif
1017 #ifndef RODATA_SECTION
1018 #define RODATA_SECTION          ".rodata"
1019 #endif
1020 #ifndef RODATA1_SECTION
1021 #define RODATA1_SECTION         ".rodata1"
1022 #endif
1023 #ifndef BSS_SECTION
1024 #define BSS_SECTION             ".bss"
1025 #endif
1026 \f
1027 /* Definitions of defaults for formats and names of various special
1028    (artificial) labels which may be generated within this file (when
1029    the -g options is used and DWARF_DEBUGGING_INFO is in effect.
1030
1031    If necessary, these may be overridden from within your tm.h file,
1032    but typically, you should never need to override these.
1033
1034    These labels have been hacked (temporarily) so that they all begin with
1035    a `.L' sequence so as to appease the stock sparc/svr4 assembler and the
1036    stock m88k/svr4 assembler, both of which need to see .L at the start of
1037    a label in order to prevent that label from going into the linker symbol
1038    table).  When I get time, I'll have to fix this the right way so that we
1039    will use ASM_GENERATE_INTERNAL_LABEL and ASM_OUTPUT_INTERNAL_LABEL herein,
1040    but that will require a rather massive set of changes.  For the moment,
1041    the following definitions out to produce the right results for all svr4
1042    and svr3 assemblers. -- rfg
1043 */
1044
1045 #ifndef TEXT_BEGIN_LABEL
1046 #define TEXT_BEGIN_LABEL        "*.L_text_b"
1047 #endif
1048 #ifndef TEXT_END_LABEL
1049 #define TEXT_END_LABEL          "*.L_text_e"
1050 #endif
1051
1052 #ifndef DATA_BEGIN_LABEL
1053 #define DATA_BEGIN_LABEL        "*.L_data_b"
1054 #endif
1055 #ifndef DATA_END_LABEL
1056 #define DATA_END_LABEL          "*.L_data_e"
1057 #endif
1058
1059 #ifndef DATA1_BEGIN_LABEL
1060 #define DATA1_BEGIN_LABEL       "*.L_data1_b"
1061 #endif
1062 #ifndef DATA1_END_LABEL
1063 #define DATA1_END_LABEL         "*.L_data1_e"
1064 #endif
1065
1066 #ifndef RODATA_BEGIN_LABEL
1067 #define RODATA_BEGIN_LABEL      "*.L_rodata_b"
1068 #endif
1069 #ifndef RODATA_END_LABEL
1070 #define RODATA_END_LABEL        "*.L_rodata_e"
1071 #endif
1072
1073 #ifndef RODATA1_BEGIN_LABEL
1074 #define RODATA1_BEGIN_LABEL     "*.L_rodata1_b"
1075 #endif
1076 #ifndef RODATA1_END_LABEL
1077 #define RODATA1_END_LABEL       "*.L_rodata1_e"
1078 #endif
1079
1080 #ifndef BSS_BEGIN_LABEL
1081 #define BSS_BEGIN_LABEL         "*.L_bss_b"
1082 #endif
1083 #ifndef BSS_END_LABEL
1084 #define BSS_END_LABEL           "*.L_bss_e"
1085 #endif
1086
1087 #ifndef LINE_BEGIN_LABEL
1088 #define LINE_BEGIN_LABEL        "*.L_line_b"
1089 #endif
1090 #ifndef LINE_LAST_ENTRY_LABEL
1091 #define LINE_LAST_ENTRY_LABEL   "*.L_line_last"
1092 #endif
1093 #ifndef LINE_END_LABEL
1094 #define LINE_END_LABEL          "*.L_line_e"
1095 #endif
1096
1097 #ifndef DEBUG_BEGIN_LABEL
1098 #define DEBUG_BEGIN_LABEL       "*.L_debug_b"
1099 #endif
1100 #ifndef SFNAMES_BEGIN_LABEL
1101 #define SFNAMES_BEGIN_LABEL     "*.L_sfnames_b"
1102 #endif
1103 #ifndef SRCINFO_BEGIN_LABEL
1104 #define SRCINFO_BEGIN_LABEL     "*.L_srcinfo_b"
1105 #endif
1106 #ifndef MACINFO_BEGIN_LABEL
1107 #define MACINFO_BEGIN_LABEL     "*.L_macinfo_b"
1108 #endif
1109
1110 #ifndef DEBUG_ARANGES_BEGIN_LABEL
1111 #define DEBUG_ARANGES_BEGIN_LABEL "*.L_debug_aranges_begin"
1112 #endif
1113 #ifndef DEBUG_ARANGES_END_LABEL
1114 #define DEBUG_ARANGES_END_LABEL "*.L_debug_aranges_end"
1115 #endif
1116
1117 #ifndef DIE_BEGIN_LABEL_FMT
1118 #define DIE_BEGIN_LABEL_FMT     "*.L_D%u"
1119 #endif
1120 #ifndef DIE_END_LABEL_FMT
1121 #define DIE_END_LABEL_FMT       "*.L_D%u_e"
1122 #endif
1123 #ifndef PUB_DIE_LABEL_FMT
1124 #define PUB_DIE_LABEL_FMT       "*.L_P%u"
1125 #endif
1126 #ifndef BLOCK_BEGIN_LABEL_FMT
1127 #define BLOCK_BEGIN_LABEL_FMT   "*.L_B%u"
1128 #endif
1129 #ifndef BLOCK_END_LABEL_FMT
1130 #define BLOCK_END_LABEL_FMT     "*.L_B%u_e"
1131 #endif
1132 #ifndef SS_BEGIN_LABEL_FMT
1133 #define SS_BEGIN_LABEL_FMT      "*.L_s%u"
1134 #endif
1135 #ifndef SS_END_LABEL_FMT
1136 #define SS_END_LABEL_FMT        "*.L_s%u_e"
1137 #endif
1138 #ifndef EE_BEGIN_LABEL_FMT
1139 #define EE_BEGIN_LABEL_FMT      "*.L_e%u"
1140 #endif
1141 #ifndef EE_END_LABEL_FMT
1142 #define EE_END_LABEL_FMT        "*.L_e%u_e"
1143 #endif
1144 #ifndef MT_BEGIN_LABEL_FMT
1145 #define MT_BEGIN_LABEL_FMT      "*.L_t%u"
1146 #endif
1147 #ifndef MT_END_LABEL_FMT
1148 #define MT_END_LABEL_FMT        "*.L_t%u_e"
1149 #endif
1150 #ifndef LOC_BEGIN_LABEL_FMT
1151 #define LOC_BEGIN_LABEL_FMT     "*.L_l%u"
1152 #endif
1153 #ifndef LOC_END_LABEL_FMT
1154 #define LOC_END_LABEL_FMT       "*.L_l%u_e"
1155 #endif
1156 #ifndef BOUND_BEGIN_LABEL_FMT
1157 #define BOUND_BEGIN_LABEL_FMT   "*.L_b%u_%u_%c"
1158 #endif
1159 #ifndef BOUND_END_LABEL_FMT
1160 #define BOUND_END_LABEL_FMT     "*.L_b%u_%u_%c_e"
1161 #endif
1162 #ifndef DERIV_BEGIN_LABEL_FMT
1163 #define DERIV_BEGIN_LABEL_FMT   "*.L_d%u"
1164 #endif
1165 #ifndef DERIV_END_LABEL_FMT
1166 #define DERIV_END_LABEL_FMT     "*.L_d%u_e"
1167 #endif
1168 #ifndef SL_BEGIN_LABEL_FMT
1169 #define SL_BEGIN_LABEL_FMT      "*.L_sl%u"
1170 #endif
1171 #ifndef SL_END_LABEL_FMT
1172 #define SL_END_LABEL_FMT        "*.L_sl%u_e"
1173 #endif
1174 #ifndef BODY_BEGIN_LABEL_FMT
1175 #define BODY_BEGIN_LABEL_FMT    "*.L_b%u"
1176 #endif
1177 #ifndef BODY_END_LABEL_FMT
1178 #define BODY_END_LABEL_FMT      "*.L_b%u_e"
1179 #endif
1180 #ifndef FUNC_END_LABEL_FMT
1181 #define FUNC_END_LABEL_FMT      "*.L_f%u_e"
1182 #endif
1183 #ifndef TYPE_NAME_FMT
1184 #define TYPE_NAME_FMT           "*.L_T%u"
1185 #endif
1186 #ifndef DECL_NAME_FMT
1187 #define DECL_NAME_FMT           "*.L_E%u"
1188 #endif
1189 #ifndef LINE_CODE_LABEL_FMT
1190 #define LINE_CODE_LABEL_FMT     "*.L_LC%u"
1191 #endif
1192 #ifndef SFNAMES_ENTRY_LABEL_FMT
1193 #define SFNAMES_ENTRY_LABEL_FMT "*.L_F%u"
1194 #endif
1195 #ifndef LINE_ENTRY_LABEL_FMT
1196 #define LINE_ENTRY_LABEL_FMT    "*.L_LE%u"
1197 #endif
1198 \f
1199 /* Definitions of defaults for various types of primitive assembly language
1200    output operations.
1201
1202    If necessary, these may be overridden from within your tm.h file,
1203    but typically, you shouldn't need to override these.  */
1204
1205 #ifndef ASM_OUTPUT_PUSH_SECTION
1206 #define ASM_OUTPUT_PUSH_SECTION(FILE, SECTION) \
1207   fprintf ((FILE), PUSHSECTION_FORMAT, PUSHSECTION_ASM_OP, SECTION)
1208 #endif
1209
1210 #ifndef ASM_OUTPUT_POP_SECTION
1211 #define ASM_OUTPUT_POP_SECTION(FILE) \
1212   fprintf ((FILE), "%s\n", POPSECTION_ASM_OP)
1213 #endif
1214
1215 #ifndef ASM_OUTPUT_DWARF_DELTA2
1216 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2)                     \
1217  do {   fprintf ((FILE), "%s", UNALIGNED_SHORT_ASM_OP);                 \
1218         assemble_name (FILE, LABEL1);                                   \
1219         fprintf (FILE, "-");                                            \
1220         assemble_name (FILE, LABEL2);                                   \
1221         fprintf (FILE, "\n");                                           \
1222   } while (0)
1223 #endif
1224
1225 #ifndef ASM_OUTPUT_DWARF_DELTA4
1226 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2)                     \
1227  do {   fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP);                   \
1228         assemble_name (FILE, LABEL1);                                   \
1229         fprintf (FILE, "-");                                            \
1230         assemble_name (FILE, LABEL2);                                   \
1231         fprintf (FILE, "\n");                                           \
1232   } while (0)
1233 #endif
1234
1235 #ifndef ASM_OUTPUT_DWARF_TAG
1236 #define ASM_OUTPUT_DWARF_TAG(FILE,TAG)                                  \
1237   do {                                                                  \
1238     fprintf ((FILE), "%s0x%x",                                          \
1239                      UNALIGNED_SHORT_ASM_OP, (unsigned) TAG);           \
1240     if (flag_debug_asm)                                                 \
1241       fprintf ((FILE), "\t%s %s",                                       \
1242                        ASM_COMMENT_START, dwarf_tag_name (TAG));        \
1243     fputc ('\n', (FILE));                                               \
1244   } while (0)
1245 #endif
1246
1247 #ifndef ASM_OUTPUT_DWARF_ATTRIBUTE
1248 #define ASM_OUTPUT_DWARF_ATTRIBUTE(FILE,ATTR)                           \
1249   do {                                                                  \
1250     fprintf ((FILE), "%s0x%x",                                          \
1251                      UNALIGNED_SHORT_ASM_OP, (unsigned) ATTR);          \
1252     if (flag_debug_asm)                                                 \
1253       fprintf ((FILE), "\t%s %s",                                       \
1254                        ASM_COMMENT_START, dwarf_attr_name (ATTR));      \
1255     fputc ('\n', (FILE));                                               \
1256   } while (0)
1257 #endif
1258
1259 #ifndef ASM_OUTPUT_DWARF_STACK_OP
1260 #define ASM_OUTPUT_DWARF_STACK_OP(FILE,OP)                              \
1261   do {                                                                  \
1262     fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) OP);             \
1263     if (flag_debug_asm)                                                 \
1264       fprintf ((FILE), "\t%s %s",                                       \
1265                        ASM_COMMENT_START, dwarf_stack_op_name (OP));    \
1266     fputc ('\n', (FILE));                                               \
1267   } while (0)
1268 #endif
1269
1270 #ifndef ASM_OUTPUT_DWARF_FUND_TYPE
1271 #define ASM_OUTPUT_DWARF_FUND_TYPE(FILE,FT)                             \
1272   do {                                                                  \
1273     fprintf ((FILE), "%s0x%x",                                          \
1274                      UNALIGNED_SHORT_ASM_OP, (unsigned) FT);            \
1275     if (flag_debug_asm)                                                 \
1276       fprintf ((FILE), "\t%s %s",                                       \
1277                        ASM_COMMENT_START, dwarf_fund_type_name (FT));   \
1278     fputc ('\n', (FILE));                                               \
1279   } while (0)
1280 #endif
1281
1282 #ifndef ASM_OUTPUT_DWARF_FMT_BYTE
1283 #define ASM_OUTPUT_DWARF_FMT_BYTE(FILE,FMT)                             \
1284   do {                                                                  \
1285     fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) FMT);            \
1286     if (flag_debug_asm)                                                 \
1287       fprintf ((FILE), "\t%s %s",                                       \
1288                        ASM_COMMENT_START, dwarf_fmt_byte_name (FMT));   \
1289     fputc ('\n', (FILE));                                               \
1290   } while (0)
1291 #endif
1292
1293 #ifndef ASM_OUTPUT_DWARF_TYPE_MODIFIER
1294 #define ASM_OUTPUT_DWARF_TYPE_MODIFIER(FILE,MOD)                        \
1295   do {                                                                  \
1296     fprintf ((FILE), "%s0x%x", ASM_BYTE_OP, (unsigned) MOD);            \
1297     if (flag_debug_asm)                                                 \
1298       fprintf ((FILE), "\t%s %s",                                       \
1299                        ASM_COMMENT_START, dwarf_typemod_name (MOD));    \
1300     fputc ('\n', (FILE));                                               \
1301   } while (0)
1302 #endif
1303 \f
1304 #ifndef ASM_OUTPUT_DWARF_ADDR
1305 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL)                               \
1306  do {   fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP);                   \
1307         assemble_name (FILE, LABEL);                                    \
1308         fprintf (FILE, "\n");                                           \
1309   } while (0)
1310 #endif
1311
1312 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
1313 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX)                           \
1314   do {                                                                  \
1315     fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP);                       \
1316     output_addr_const ((FILE), (RTX));                                  \
1317     fputc ('\n', (FILE));                                               \
1318   } while (0)
1319 #endif
1320
1321 #ifndef ASM_OUTPUT_DWARF_REF
1322 #define ASM_OUTPUT_DWARF_REF(FILE,LABEL)                                \
1323  do {   fprintf ((FILE), "%s", UNALIGNED_INT_ASM_OP);                   \
1324         assemble_name (FILE, LABEL);                                    \
1325         fprintf (FILE, "\n");                                           \
1326   } while (0)
1327 #endif
1328
1329 #ifndef ASM_OUTPUT_DWARF_DATA1
1330 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
1331   fprintf ((FILE), "%s0x%x\n", ASM_BYTE_OP, VALUE)
1332 #endif
1333
1334 #ifndef ASM_OUTPUT_DWARF_DATA2
1335 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
1336   fprintf ((FILE), "%s0x%x\n", UNALIGNED_SHORT_ASM_OP, (unsigned) VALUE)
1337 #endif
1338
1339 #ifndef ASM_OUTPUT_DWARF_DATA4
1340 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
1341   fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, (unsigned) VALUE)
1342 #endif
1343
1344 #ifndef ASM_OUTPUT_DWARF_DATA8
1345 #define ASM_OUTPUT_DWARF_DATA8(FILE,HIGH_VALUE,LOW_VALUE)               \
1346   do {                                                                  \
1347     if (WORDS_BIG_ENDIAN)                                               \
1348       {                                                                 \
1349         fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, HIGH_VALUE); \
1350         fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, LOW_VALUE);  \
1351       }                                                                 \
1352     else                                                                \
1353       {                                                                 \
1354         fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, LOW_VALUE);  \
1355         fprintf ((FILE), "%s0x%x\n", UNALIGNED_INT_ASM_OP, HIGH_VALUE); \
1356       }                                                                 \
1357   } while (0)
1358 #endif
1359
1360 /* ASM_OUTPUT_DWARF_STRING is defined to output an ascii string, but to
1361    NOT issue a trailing newline. We define ASM_OUTPUT_DWARF_STRING_NEWLINE
1362    based on whether ASM_OUTPUT_DWARF_STRING is defined or not. If it is
1363    defined, we call it, then issue the line feed. If not, we supply a
1364    default defintion of calling ASM_OUTPUT_ASCII */
1365
1366 #ifndef ASM_OUTPUT_DWARF_STRING
1367 #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \
1368   ASM_OUTPUT_ASCII ((FILE), P, strlen (P)+1)
1369 #else
1370 #define ASM_OUTPUT_DWARF_STRING_NEWLINE(FILE,P) \
1371   ASM_OUTPUT_DWARF_STRING (FILE,P), ASM_OUTPUT_DWARF_STRING (FILE,"\n") 
1372 #endif
1373
1374 \f
1375 /* The debug hooks structure.  */
1376 struct gcc_debug_hooks dwarf_debug_hooks =
1377 {
1378   dwarfout_init,
1379   dwarfout_finish,
1380   dwarfout_define,
1381   dwarfout_undef,
1382   dwarfout_start_source_file_check,
1383   dwarfout_end_source_file_check,
1384   dwarfout_begin_block,
1385   dwarfout_end_block,
1386   dwarfout_source_line,
1387   dwarfout_end_epilogue,
1388   dwarfout_end_function
1389 };
1390 \f
1391 /************************ general utility functions **************************/
1392
1393 static inline int
1394 is_pseudo_reg (rtl)
1395      register rtx rtl;
1396 {
1397   return (((GET_CODE (rtl) == REG) && (REGNO (rtl) >= FIRST_PSEUDO_REGISTER))
1398           || ((GET_CODE (rtl) == SUBREG)
1399               && (REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER)));
1400 }
1401
1402 static inline tree
1403 type_main_variant (type)
1404      register tree type;
1405 {
1406   type = TYPE_MAIN_VARIANT (type);
1407
1408   /* There really should be only one main variant among any group of variants
1409      of a given type (and all of the MAIN_VARIANT values for all members of
1410      the group should point to that one type) but sometimes the C front-end
1411      messes this up for array types, so we work around that bug here.  */
1412
1413   if (TREE_CODE (type) == ARRAY_TYPE)
1414     {
1415       while (type != TYPE_MAIN_VARIANT (type))
1416         type = TYPE_MAIN_VARIANT (type);
1417     }
1418
1419   return type;
1420 }
1421
1422 /* Return non-zero if the given type node represents a tagged type.  */
1423
1424 static inline int
1425 is_tagged_type (type)
1426      register tree type;
1427 {
1428   register enum tree_code code = TREE_CODE (type);
1429
1430   return (code == RECORD_TYPE || code == UNION_TYPE
1431           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
1432 }
1433
1434 static const char *
1435 dwarf_tag_name (tag)
1436      register unsigned tag;
1437 {
1438   switch (tag)
1439     {
1440     case TAG_padding:                   return "TAG_padding";
1441     case TAG_array_type:                return "TAG_array_type";
1442     case TAG_class_type:                return "TAG_class_type";
1443     case TAG_entry_point:               return "TAG_entry_point";
1444     case TAG_enumeration_type:          return "TAG_enumeration_type";
1445     case TAG_formal_parameter:          return "TAG_formal_parameter";
1446     case TAG_global_subroutine:         return "TAG_global_subroutine";
1447     case TAG_global_variable:           return "TAG_global_variable";
1448     case TAG_label:                     return "TAG_label";
1449     case TAG_lexical_block:             return "TAG_lexical_block";
1450     case TAG_local_variable:            return "TAG_local_variable";
1451     case TAG_member:                    return "TAG_member";
1452     case TAG_pointer_type:              return "TAG_pointer_type";
1453     case TAG_reference_type:            return "TAG_reference_type";
1454     case TAG_compile_unit:              return "TAG_compile_unit";
1455     case TAG_string_type:               return "TAG_string_type";
1456     case TAG_structure_type:            return "TAG_structure_type";
1457     case TAG_subroutine:                return "TAG_subroutine";
1458     case TAG_subroutine_type:           return "TAG_subroutine_type";
1459     case TAG_typedef:                   return "TAG_typedef";
1460     case TAG_union_type:                return "TAG_union_type";
1461     case TAG_unspecified_parameters:    return "TAG_unspecified_parameters";
1462     case TAG_variant:                   return "TAG_variant";
1463     case TAG_common_block:              return "TAG_common_block";
1464     case TAG_common_inclusion:          return "TAG_common_inclusion";
1465     case TAG_inheritance:               return "TAG_inheritance";
1466     case TAG_inlined_subroutine:        return "TAG_inlined_subroutine";
1467     case TAG_module:                    return "TAG_module";
1468     case TAG_ptr_to_member_type:        return "TAG_ptr_to_member_type";
1469     case TAG_set_type:                  return "TAG_set_type";
1470     case TAG_subrange_type:             return "TAG_subrange_type";
1471     case TAG_with_stmt:                 return "TAG_with_stmt";
1472
1473     /* GNU extensions.  */
1474
1475     case TAG_format_label:              return "TAG_format_label";
1476     case TAG_namelist:                  return "TAG_namelist";
1477     case TAG_function_template:         return "TAG_function_template";
1478     case TAG_class_template:            return "TAG_class_template";
1479
1480     default:                            return "TAG_<unknown>";
1481     }
1482 }
1483
1484 static const char *
1485 dwarf_attr_name (attr)
1486      register unsigned attr;
1487 {
1488   switch (attr)
1489     {
1490     case AT_sibling:                    return "AT_sibling";
1491     case AT_location:                   return "AT_location";
1492     case AT_name:                       return "AT_name";
1493     case AT_fund_type:                  return "AT_fund_type";
1494     case AT_mod_fund_type:              return "AT_mod_fund_type";
1495     case AT_user_def_type:              return "AT_user_def_type";
1496     case AT_mod_u_d_type:               return "AT_mod_u_d_type";
1497     case AT_ordering:                   return "AT_ordering";
1498     case AT_subscr_data:                return "AT_subscr_data";
1499     case AT_byte_size:                  return "AT_byte_size";
1500     case AT_bit_offset:                 return "AT_bit_offset";
1501     case AT_bit_size:                   return "AT_bit_size";
1502     case AT_element_list:               return "AT_element_list";
1503     case AT_stmt_list:                  return "AT_stmt_list";
1504     case AT_low_pc:                     return "AT_low_pc";
1505     case AT_high_pc:                    return "AT_high_pc";
1506     case AT_language:                   return "AT_language";
1507     case AT_member:                     return "AT_member";
1508     case AT_discr:                      return "AT_discr";
1509     case AT_discr_value:                return "AT_discr_value";
1510     case AT_string_length:              return "AT_string_length";
1511     case AT_common_reference:           return "AT_common_reference";
1512     case AT_comp_dir:                   return "AT_comp_dir";
1513     case AT_const_value_string:         return "AT_const_value_string";
1514     case AT_const_value_data2:          return "AT_const_value_data2";
1515     case AT_const_value_data4:          return "AT_const_value_data4";
1516     case AT_const_value_data8:          return "AT_const_value_data8";
1517     case AT_const_value_block2:         return "AT_const_value_block2";
1518     case AT_const_value_block4:         return "AT_const_value_block4";
1519     case AT_containing_type:            return "AT_containing_type";
1520     case AT_default_value_addr:         return "AT_default_value_addr";
1521     case AT_default_value_data2:        return "AT_default_value_data2";
1522     case AT_default_value_data4:        return "AT_default_value_data4";
1523     case AT_default_value_data8:        return "AT_default_value_data8";
1524     case AT_default_value_string:       return "AT_default_value_string";
1525     case AT_friends:                    return "AT_friends";
1526     case AT_inline:                     return "AT_inline";
1527     case AT_is_optional:                return "AT_is_optional";
1528     case AT_lower_bound_ref:            return "AT_lower_bound_ref";
1529     case AT_lower_bound_data2:          return "AT_lower_bound_data2";
1530     case AT_lower_bound_data4:          return "AT_lower_bound_data4";
1531     case AT_lower_bound_data8:          return "AT_lower_bound_data8";
1532     case AT_private:                    return "AT_private";
1533     case AT_producer:                   return "AT_producer";
1534     case AT_program:                    return "AT_program";
1535     case AT_protected:                  return "AT_protected";
1536     case AT_prototyped:                 return "AT_prototyped";
1537     case AT_public:                     return "AT_public";
1538     case AT_pure_virtual:               return "AT_pure_virtual";
1539     case AT_return_addr:                return "AT_return_addr";
1540     case AT_abstract_origin:            return "AT_abstract_origin";
1541     case AT_start_scope:                return "AT_start_scope";
1542     case AT_stride_size:                return "AT_stride_size";
1543     case AT_upper_bound_ref:            return "AT_upper_bound_ref";
1544     case AT_upper_bound_data2:          return "AT_upper_bound_data2";
1545     case AT_upper_bound_data4:          return "AT_upper_bound_data4";
1546     case AT_upper_bound_data8:          return "AT_upper_bound_data8";
1547     case AT_virtual:                    return "AT_virtual";
1548
1549     /* GNU extensions */
1550
1551     case AT_sf_names:                   return "AT_sf_names";
1552     case AT_src_info:                   return "AT_src_info";
1553     case AT_mac_info:                   return "AT_mac_info";
1554     case AT_src_coords:                 return "AT_src_coords";
1555     case AT_body_begin:                 return "AT_body_begin";
1556     case AT_body_end:                   return "AT_body_end";
1557
1558     default:                            return "AT_<unknown>";
1559     }
1560 }
1561
1562 static const char *
1563 dwarf_stack_op_name (op)
1564      register unsigned op;
1565 {
1566   switch (op)
1567     {
1568     case OP_REG:                return "OP_REG";
1569     case OP_BASEREG:            return "OP_BASEREG";
1570     case OP_ADDR:               return "OP_ADDR";
1571     case OP_CONST:              return "OP_CONST";
1572     case OP_DEREF2:             return "OP_DEREF2";
1573     case OP_DEREF4:             return "OP_DEREF4";
1574     case OP_ADD:                return "OP_ADD";
1575     default:                    return "OP_<unknown>";
1576     }
1577 }
1578
1579 static const char *
1580 dwarf_typemod_name (mod)
1581      register unsigned mod;
1582 {
1583   switch (mod)
1584     {
1585     case MOD_pointer_to:        return "MOD_pointer_to";
1586     case MOD_reference_to:      return "MOD_reference_to";
1587     case MOD_const:             return "MOD_const";
1588     case MOD_volatile:          return "MOD_volatile";
1589     default:                    return "MOD_<unknown>";
1590     }
1591 }
1592
1593 static const char *
1594 dwarf_fmt_byte_name (fmt)
1595      register unsigned fmt;
1596 {
1597   switch (fmt)
1598     {
1599     case FMT_FT_C_C:    return "FMT_FT_C_C";
1600     case FMT_FT_C_X:    return "FMT_FT_C_X";
1601     case FMT_FT_X_C:    return "FMT_FT_X_C";
1602     case FMT_FT_X_X:    return "FMT_FT_X_X";
1603     case FMT_UT_C_C:    return "FMT_UT_C_C";
1604     case FMT_UT_C_X:    return "FMT_UT_C_X";
1605     case FMT_UT_X_C:    return "FMT_UT_X_C";
1606     case FMT_UT_X_X:    return "FMT_UT_X_X";
1607     case FMT_ET:        return "FMT_ET";
1608     default:            return "FMT_<unknown>";
1609     }
1610 }
1611
1612 static const char *
1613 dwarf_fund_type_name (ft)
1614      register unsigned ft;
1615 {
1616   switch (ft)
1617     {
1618     case FT_char:               return "FT_char";
1619     case FT_signed_char:        return "FT_signed_char";
1620     case FT_unsigned_char:      return "FT_unsigned_char";
1621     case FT_short:              return "FT_short";
1622     case FT_signed_short:       return "FT_signed_short";
1623     case FT_unsigned_short:     return "FT_unsigned_short";
1624     case FT_integer:            return "FT_integer";
1625     case FT_signed_integer:     return "FT_signed_integer";
1626     case FT_unsigned_integer:   return "FT_unsigned_integer";
1627     case FT_long:               return "FT_long";
1628     case FT_signed_long:        return "FT_signed_long";
1629     case FT_unsigned_long:      return "FT_unsigned_long";
1630     case FT_pointer:            return "FT_pointer";
1631     case FT_float:              return "FT_float";
1632     case FT_dbl_prec_float:     return "FT_dbl_prec_float";
1633     case FT_ext_prec_float:     return "FT_ext_prec_float";
1634     case FT_complex:            return "FT_complex";
1635     case FT_dbl_prec_complex:   return "FT_dbl_prec_complex";
1636     case FT_void:               return "FT_void";
1637     case FT_boolean:            return "FT_boolean";
1638     case FT_ext_prec_complex:   return "FT_ext_prec_complex";
1639     case FT_label:              return "FT_label";
1640
1641     /* GNU extensions.  */
1642
1643     case FT_long_long:          return "FT_long_long";
1644     case FT_signed_long_long:   return "FT_signed_long_long";
1645     case FT_unsigned_long_long: return "FT_unsigned_long_long";
1646
1647     case FT_int8:               return "FT_int8";
1648     case FT_signed_int8:        return "FT_signed_int8";
1649     case FT_unsigned_int8:      return "FT_unsigned_int8";
1650     case FT_int16:              return "FT_int16";
1651     case FT_signed_int16:       return "FT_signed_int16";
1652     case FT_unsigned_int16:     return "FT_unsigned_int16";
1653     case FT_int32:              return "FT_int32";
1654     case FT_signed_int32:       return "FT_signed_int32";
1655     case FT_unsigned_int32:     return "FT_unsigned_int32";
1656     case FT_int64:              return "FT_int64";
1657     case FT_signed_int64:       return "FT_signed_int64";
1658     case FT_unsigned_int64:     return "FT_unsigned_int64";
1659     case FT_int128:             return "FT_int128";
1660     case FT_signed_int128:      return "FT_signed_int128";
1661     case FT_unsigned_int128:    return "FT_unsigned_int128";
1662
1663     case FT_real32:             return "FT_real32";
1664     case FT_real64:             return "FT_real64";
1665     case FT_real96:             return "FT_real96";
1666     case FT_real128:            return "FT_real128";
1667
1668     default:                    return "FT_<unknown>";
1669     }
1670 }
1671
1672 /* Determine the "ultimate origin" of a decl.  The decl may be an
1673    inlined instance of an inlined instance of a decl which is local
1674    to an inline function, so we have to trace all of the way back
1675    through the origin chain to find out what sort of node actually
1676    served as the original seed for the given block.  */
1677
1678 static tree
1679 decl_ultimate_origin (decl)
1680      register tree decl;
1681 {
1682 #ifdef ENABLE_CHECKING 
1683   if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
1684     /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
1685        most distant ancestor, this should never happen.  */
1686     abort ();
1687 #endif
1688
1689   return DECL_ABSTRACT_ORIGIN (decl);
1690 }
1691
1692 /* Determine the "ultimate origin" of a block.  The block may be an
1693    inlined instance of an inlined instance of a block which is local
1694    to an inline function, so we have to trace all of the way back
1695    through the origin chain to find out what sort of node actually
1696    served as the original seed for the given block.  */
1697
1698 static tree
1699 block_ultimate_origin (block)
1700      register tree block;
1701 {
1702   register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
1703
1704   if (immediate_origin == NULL)
1705     return NULL;
1706   else
1707     {
1708       register tree ret_val;
1709       register tree lookahead = immediate_origin;
1710
1711       do
1712         {
1713           ret_val = lookahead;
1714           lookahead = (TREE_CODE (ret_val) == BLOCK)
1715                        ? BLOCK_ABSTRACT_ORIGIN (ret_val)
1716                        : NULL;
1717         }
1718       while (lookahead != NULL && lookahead != ret_val);
1719       return ret_val;
1720     }
1721 }
1722
1723 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
1724    of a virtual function may refer to a base class, so we check the 'this'
1725    parameter.  */
1726
1727 static tree
1728 decl_class_context (decl)
1729      tree decl;
1730 {
1731   tree context = NULL_TREE;
1732   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
1733     context = DECL_CONTEXT (decl);
1734   else
1735     context = TYPE_MAIN_VARIANT
1736       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
1737
1738   if (context && !TYPE_P (context))
1739     context = NULL_TREE;
1740
1741   return context;
1742 }
1743
1744 #if 0
1745 static void
1746 output_unsigned_leb128 (value)
1747      register unsigned long value;
1748 {
1749   register unsigned long orig_value = value;
1750
1751   do
1752     {
1753       register unsigned byte = (value & 0x7f);
1754
1755       value >>= 7;
1756       if (value != 0)   /* more bytes to follow */
1757         byte |= 0x80;
1758       fprintf (asm_out_file, "%s0x%x", ASM_BYTE_OP, (unsigned) byte);
1759       if (flag_debug_asm && value == 0)
1760         fprintf (asm_out_file, "\t%s ULEB128 number - value = %lu",
1761                  ASM_COMMENT_START, orig_value);
1762       fputc ('\n', asm_out_file);
1763     }
1764   while (value != 0);
1765 }
1766
1767 static void
1768 output_signed_leb128 (value)
1769      register long value;
1770 {
1771   register long orig_value = value;
1772   register int negative = (value < 0);
1773   register int more;
1774
1775   do
1776     {
1777       register unsigned byte = (value & 0x7f);
1778
1779       value >>= 7;
1780       if (negative)
1781         value |= 0xfe000000;  /* manually sign extend */
1782       if (((value == 0) && ((byte & 0x40) == 0))
1783           || ((value == -1) && ((byte & 0x40) == 1)))
1784         more = 0;
1785       else
1786         {
1787           byte |= 0x80;
1788           more = 1;
1789         }
1790       fprintf (asm_out_file, "%s0x%x", ASM_BYTE_OP, (unsigned) byte);
1791       if (flag_debug_asm && more == 0)
1792         fprintf (asm_out_file, "\t%s SLEB128 number - value = %ld",
1793                  ASM_COMMENT_START, orig_value);
1794       fputc ('\n', asm_out_file);
1795     }
1796   while (more);
1797 }
1798 #endif
1799 \f
1800 /**************** utility functions for attribute functions ******************/
1801
1802 /* Given a pointer to a tree node for some type, return a Dwarf fundamental
1803    type code for the given type.
1804
1805    This routine must only be called for GCC type nodes that correspond to
1806    Dwarf fundamental types.
1807
1808    The current Dwarf draft specification calls for Dwarf fundamental types
1809    to accurately reflect the fact that a given type was either a "plain"
1810    integral type or an explicitly "signed" integral type.  Unfortunately,
1811    we can't always do this, because GCC may already have thrown away the
1812    information about the precise way in which the type was originally
1813    specified, as in:
1814
1815         typedef signed int my_type;
1816
1817         struct s { my_type f; };
1818
1819    Since we may be stuck here without enought information to do exactly
1820    what is called for in the Dwarf draft specification, we do the best
1821    that we can under the circumstances and always use the "plain" integral
1822    fundamental type codes for int, short, and long types.  That's probably
1823    good enough.  The additional accuracy called for in the current DWARF
1824    draft specification is probably never even useful in practice.  */
1825
1826 static int
1827 fundamental_type_code (type)
1828      register tree type;
1829 {
1830   if (TREE_CODE (type) == ERROR_MARK)
1831     return 0;
1832
1833   switch (TREE_CODE (type))
1834     {
1835       case ERROR_MARK:
1836         return FT_void;
1837
1838       case VOID_TYPE:
1839         return FT_void;
1840
1841       case INTEGER_TYPE:
1842         /* Carefully distinguish all the standard types of C,
1843            without messing up if the language is not C.
1844            Note that we check only for the names that contain spaces;
1845            other names might occur by coincidence in other languages.  */
1846         if (TYPE_NAME (type) != 0
1847             && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1848             && DECL_NAME (TYPE_NAME (type)) != 0
1849             && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
1850           {
1851             const char *name =
1852               IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
1853
1854             if (!strcmp (name, "unsigned char"))
1855               return FT_unsigned_char;
1856             if (!strcmp (name, "signed char"))
1857               return FT_signed_char;
1858             if (!strcmp (name, "unsigned int"))
1859               return FT_unsigned_integer;
1860             if (!strcmp (name, "short int"))
1861               return FT_short;
1862             if (!strcmp (name, "short unsigned int"))
1863               return FT_unsigned_short;
1864             if (!strcmp (name, "long int"))
1865               return FT_long;
1866             if (!strcmp (name, "long unsigned int"))
1867               return FT_unsigned_long;
1868             if (!strcmp (name, "long long int"))
1869               return FT_long_long;              /* Not grok'ed by svr4 SDB */
1870             if (!strcmp (name, "long long unsigned int"))
1871               return FT_unsigned_long_long;     /* Not grok'ed by svr4 SDB */
1872           }
1873
1874         /* Most integer types will be sorted out above, however, for the
1875            sake of special `array index' integer types, the following code
1876            is also provided.  */
1877
1878         if (TYPE_PRECISION (type) == INT_TYPE_SIZE)
1879           return (TREE_UNSIGNED (type) ? FT_unsigned_integer : FT_integer);
1880
1881         if (TYPE_PRECISION (type) == LONG_TYPE_SIZE)
1882           return (TREE_UNSIGNED (type) ? FT_unsigned_long : FT_long);
1883
1884         if (TYPE_PRECISION (type) == LONG_LONG_TYPE_SIZE)
1885           return (TREE_UNSIGNED (type) ? FT_unsigned_long_long : FT_long_long);
1886
1887         if (TYPE_PRECISION (type) == SHORT_TYPE_SIZE)
1888           return (TREE_UNSIGNED (type) ? FT_unsigned_short : FT_short);
1889
1890         if (TYPE_PRECISION (type) == CHAR_TYPE_SIZE)
1891           return (TREE_UNSIGNED (type) ? FT_unsigned_char : FT_char);
1892
1893         if (TYPE_MODE (type) == TImode)
1894           return (TREE_UNSIGNED (type) ? FT_unsigned_int128 : FT_int128);
1895
1896         /* In C++, __java_boolean is an INTEGER_TYPE with precision == 1 */
1897         if (TYPE_PRECISION (type) == 1)
1898           return FT_boolean;
1899
1900         abort ();
1901
1902       case REAL_TYPE:
1903         /* Carefully distinguish all the standard types of C,
1904            without messing up if the language is not C.  */
1905         if (TYPE_NAME (type) != 0
1906             && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
1907             && DECL_NAME (TYPE_NAME (type)) != 0
1908             && TREE_CODE (DECL_NAME (TYPE_NAME (type))) == IDENTIFIER_NODE)
1909           {
1910             const char *name =
1911               IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
1912
1913             /* Note that here we can run afowl of a serious bug in "classic"
1914                svr4 SDB debuggers.  They don't seem to understand the
1915                FT_ext_prec_float type (even though they should).  */
1916
1917             if (!strcmp (name, "long double"))
1918               return FT_ext_prec_float;
1919           }
1920
1921         if (TYPE_PRECISION (type) == DOUBLE_TYPE_SIZE)
1922           {
1923             /* On the SH, when compiling with -m3e or -m4-single-only, both
1924                float and double are 32 bits.  But since the debugger doesn't
1925                know about the subtarget, it always thinks double is 64 bits.
1926                So we have to tell the debugger that the type is float to
1927                make the output of the 'print' command etc. readable.  */
1928             if (DOUBLE_TYPE_SIZE == FLOAT_TYPE_SIZE && FLOAT_TYPE_SIZE == 32)
1929               return FT_float;
1930             return FT_dbl_prec_float;
1931           }
1932         if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
1933           return FT_float;
1934
1935         /* Note that here we can run afowl of a serious bug in "classic"
1936            svr4 SDB debuggers.  They don't seem to understand the
1937            FT_ext_prec_float type (even though they should).  */
1938
1939         if (TYPE_PRECISION (type) == LONG_DOUBLE_TYPE_SIZE)
1940           return FT_ext_prec_float;
1941         abort ();
1942
1943       case COMPLEX_TYPE:
1944         return FT_complex;      /* GNU FORTRAN COMPLEX type.  */
1945
1946       case CHAR_TYPE:
1947         return FT_char;         /* GNU Pascal CHAR type.  Not used in C.  */
1948
1949       case BOOLEAN_TYPE:
1950         return FT_boolean;      /* GNU FORTRAN BOOLEAN type.  */
1951
1952       default:
1953         abort ();       /* No other TREE_CODEs are Dwarf fundamental types.  */
1954     }
1955   return 0;
1956 }
1957 \f
1958 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
1959    the Dwarf "root" type for the given input type.  The Dwarf "root" type
1960    of a given type is generally the same as the given type, except that if
1961    the  given type is a pointer or reference type, then the root type of
1962    the given type is the root type of the "basis" type for the pointer or
1963    reference type.  (This definition of the "root" type is recursive.)
1964    Also, the root type of a `const' qualified type or a `volatile'
1965    qualified type is the root type of the given type without the
1966    qualifiers.  */
1967
1968 static tree
1969 root_type_1 (type, count)
1970      register tree type;
1971      register int count;
1972 {
1973   /* Give up after searching 1000 levels, in case this is a recursive
1974      pointer type.  Such types are possible in Ada, but it is not possible
1975      to represent them in DWARF1 debug info.  */
1976   if (count > 1000)
1977     return error_mark_node;
1978
1979   switch (TREE_CODE (type))
1980     {
1981       case ERROR_MARK:
1982         return error_mark_node;
1983
1984       case POINTER_TYPE:
1985       case REFERENCE_TYPE:
1986         return root_type_1 (TREE_TYPE (type), count+1);
1987
1988       default:
1989         return type;
1990     }
1991 }
1992
1993 static tree
1994 root_type (type)
1995      register tree type;
1996 {
1997   type = root_type_1 (type, 0);
1998   if (type != error_mark_node)
1999     type = type_main_variant (type);
2000   return type;
2001 }
2002
2003 /* Given a pointer to an arbitrary ..._TYPE tree node, write out a sequence
2004    of zero or more Dwarf "type-modifier" bytes applicable to the type.  */
2005
2006 static void
2007 write_modifier_bytes_1 (type, decl_const, decl_volatile, count)
2008      register tree type;
2009      register int decl_const;
2010      register int decl_volatile;
2011      register int count;
2012 {
2013   if (TREE_CODE (type) == ERROR_MARK)
2014     return;
2015
2016   /* Give up after searching 1000 levels, in case this is a recursive
2017      pointer type.  Such types are possible in Ada, but it is not possible
2018      to represent them in DWARF1 debug info.  */
2019   if (count > 1000)
2020     return;
2021
2022   if (TYPE_READONLY (type) || decl_const)
2023     ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_const);
2024   if (TYPE_VOLATILE (type) || decl_volatile)
2025     ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_volatile);
2026   switch (TREE_CODE (type))
2027     {
2028       case POINTER_TYPE:
2029         ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_pointer_to);
2030         write_modifier_bytes_1 (TREE_TYPE (type), 0, 0, count+1);
2031         return;
2032
2033       case REFERENCE_TYPE:
2034         ASM_OUTPUT_DWARF_TYPE_MODIFIER (asm_out_file, MOD_reference_to);
2035         write_modifier_bytes_1 (TREE_TYPE (type), 0, 0, count+1);
2036         return;
2037
2038       case ERROR_MARK:
2039       default:
2040         return;
2041     }
2042 }
2043
2044 static void
2045 write_modifier_bytes (type, decl_const, decl_volatile)
2046      register tree type;
2047      register int decl_const;
2048      register int decl_volatile;
2049 {
2050   write_modifier_bytes_1 (type, decl_const, decl_volatile, 0);
2051 }
2052 \f
2053 /* Given a pointer to an arbitrary ..._TYPE tree node, return non-zero if the
2054    given input type is a Dwarf "fundamental" type.  Otherwise return zero.  */
2055
2056 static inline int
2057 type_is_fundamental (type)
2058      register tree type;
2059 {
2060   switch (TREE_CODE (type))
2061     {
2062       case ERROR_MARK:
2063       case VOID_TYPE:
2064       case INTEGER_TYPE:
2065       case REAL_TYPE:
2066       case COMPLEX_TYPE:
2067       case BOOLEAN_TYPE:
2068       case CHAR_TYPE:
2069         return 1;
2070
2071       case SET_TYPE:
2072       case ARRAY_TYPE:
2073       case RECORD_TYPE:
2074       case UNION_TYPE:
2075       case QUAL_UNION_TYPE:
2076       case ENUMERAL_TYPE:
2077       case FUNCTION_TYPE:
2078       case METHOD_TYPE:
2079       case POINTER_TYPE:
2080       case REFERENCE_TYPE:
2081       case FILE_TYPE:
2082       case OFFSET_TYPE:
2083       case LANG_TYPE:
2084       case VECTOR_TYPE:
2085         return 0;
2086
2087       default:
2088         abort ();
2089     }
2090   return 0;
2091 }
2092
2093 /* Given a pointer to some ..._DECL tree node, generate an assembly language
2094    equate directive which will associate a symbolic name with the current DIE.
2095
2096    The name used is an artificial label generated from the DECL_UID number
2097    associated with the given decl node.  The name it gets equated to is the
2098    symbolic label that we (previously) output at the start of the DIE that
2099    we are currently generating.
2100
2101    Calling this function while generating some "decl related" form of DIE
2102    makes it possible to later refer to the DIE which represents the given
2103    decl simply by re-generating the symbolic name from the ..._DECL node's
2104    UID number.  */
2105
2106 static void
2107 equate_decl_number_to_die_number (decl)
2108      register tree decl;
2109 {
2110   /* In the case where we are generating a DIE for some ..._DECL node
2111      which represents either some inline function declaration or some
2112      entity declared within an inline function declaration/definition,
2113      setup a symbolic name for the current DIE so that we have a name
2114      for this DIE that we can easily refer to later on within
2115      AT_abstract_origin attributes.  */
2116
2117   char decl_label[MAX_ARTIFICIAL_LABEL_BYTES];
2118   char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
2119
2120   sprintf (decl_label, DECL_NAME_FMT, DECL_UID (decl));
2121   sprintf (die_label, DIE_BEGIN_LABEL_FMT, current_dienum);
2122   ASM_OUTPUT_DEF (asm_out_file, decl_label, die_label);
2123 }
2124
2125 /* Given a pointer to some ..._TYPE tree node, generate an assembly language
2126    equate directive which will associate a symbolic name with the current DIE.
2127
2128    The name used is an artificial label generated from the TYPE_UID number
2129    associated with the given type node.  The name it gets equated to is the
2130    symbolic label that we (previously) output at the start of the DIE that
2131    we are currently generating.
2132
2133    Calling this function while generating some "type related" form of DIE
2134    makes it easy to later refer to the DIE which represents the given type
2135    simply by re-generating the alternative name from the ..._TYPE node's
2136    UID number.  */
2137
2138 static inline void
2139 equate_type_number_to_die_number (type)
2140      register tree type;
2141 {
2142   char type_label[MAX_ARTIFICIAL_LABEL_BYTES];
2143   char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
2144
2145   /* We are generating a DIE to represent the main variant of this type
2146      (i.e the type without any const or volatile qualifiers) so in order
2147      to get the equate to come out right, we need to get the main variant
2148      itself here.  */
2149
2150   type = type_main_variant (type);
2151
2152   sprintf (type_label, TYPE_NAME_FMT, TYPE_UID (type));
2153   sprintf (die_label, DIE_BEGIN_LABEL_FMT, current_dienum);
2154   ASM_OUTPUT_DEF (asm_out_file, type_label, die_label);
2155 }
2156
2157 static void
2158 output_reg_number (rtl)
2159      register rtx rtl;
2160 {
2161   register unsigned regno = REGNO (rtl);
2162
2163   if (regno >= DWARF_FRAME_REGISTERS)
2164     {
2165       warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n",
2166                          regno);
2167       regno = 0;
2168     }
2169   fprintf (asm_out_file, "%s0x%x",
2170            UNALIGNED_INT_ASM_OP, DBX_REGISTER_NUMBER (regno));
2171   if (flag_debug_asm)
2172     {
2173       fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START);
2174       PRINT_REG (rtl, 0, asm_out_file);
2175     }
2176   fputc ('\n', asm_out_file);
2177 }
2178
2179 /* The following routine is a nice and simple transducer.  It converts the
2180    RTL for a variable or parameter (resident in memory) into an equivalent
2181    Dwarf representation of a mechanism for getting the address of that same
2182    variable onto the top of a hypothetical "address evaluation" stack.
2183
2184    When creating memory location descriptors, we are effectively trans-
2185    forming the RTL for a memory-resident object into its Dwarf postfix
2186    expression equivalent.  This routine just recursively descends an
2187    RTL tree, turning it into Dwarf postfix code as it goes.  */
2188
2189 static void
2190 output_mem_loc_descriptor (rtl)
2191       register rtx rtl;
2192 {
2193   /* Note that for a dynamically sized array, the location we will
2194      generate a description of here will be the lowest numbered location
2195      which is actually within the array.  That's *not* necessarily the
2196      same as the zeroth element of the array.  */
2197
2198 #ifdef ASM_SIMPLIFY_DWARF_ADDR
2199   rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl);
2200 #endif
2201
2202   switch (GET_CODE (rtl))
2203     {
2204       case SUBREG:
2205
2206         /* The case of a subreg may arise when we have a local (register)
2207            variable or a formal (register) parameter which doesn't quite
2208            fill up an entire register.  For now, just assume that it is
2209            legitimate to make the Dwarf info refer to the whole register
2210            which contains the given subreg.  */
2211
2212         rtl = SUBREG_REG (rtl);
2213         /* Drop thru.  */
2214
2215       case REG:
2216
2217         /* Whenever a register number forms a part of the description of
2218            the method for calculating the (dynamic) address of a memory
2219            resident object, DWARF rules require the register number to
2220            be referred to as a "base register".  This distinction is not
2221            based in any way upon what category of register the hardware
2222            believes the given register belongs to.  This is strictly
2223            DWARF terminology we're dealing with here.
2224
2225            Note that in cases where the location of a memory-resident data
2226            object could be expressed as:
2227
2228                     OP_ADD (OP_BASEREG (basereg), OP_CONST (0))
2229
2230            the actual DWARF location descriptor that we generate may just
2231            be OP_BASEREG (basereg).  This may look deceptively like the
2232            object in question was allocated to a register (rather than
2233            in memory) so DWARF consumers need to be aware of the subtle
2234            distinction between OP_REG and OP_BASEREG.  */
2235
2236         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_BASEREG);
2237         output_reg_number (rtl);
2238         break;
2239
2240       case MEM:
2241         output_mem_loc_descriptor (XEXP (rtl, 0));
2242         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_DEREF4);
2243         break;
2244
2245       case CONST:
2246       case SYMBOL_REF:
2247         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADDR);
2248         ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, rtl);
2249         break;
2250
2251       case PLUS:
2252         output_mem_loc_descriptor (XEXP (rtl, 0));
2253         output_mem_loc_descriptor (XEXP (rtl, 1));
2254         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADD);
2255         break;
2256
2257       case CONST_INT:
2258         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_CONST);
2259         ASM_OUTPUT_DWARF_DATA4 (asm_out_file, INTVAL (rtl));
2260         break;
2261
2262       case MULT:
2263         /* If a pseudo-reg is optimized away, it is possible for it to
2264            be replaced with a MEM containing a multiply.  Use a GNU extension
2265            to describe it.  */
2266         output_mem_loc_descriptor (XEXP (rtl, 0));
2267         output_mem_loc_descriptor (XEXP (rtl, 1));
2268         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_MULT);
2269         break;
2270
2271       default:
2272         abort ();
2273     }
2274 }
2275
2276 /* Output a proper Dwarf location descriptor for a variable or parameter
2277    which is either allocated in a register or in a memory location.  For
2278    a register, we just generate an OP_REG and the register number.  For a
2279    memory location we provide a Dwarf postfix expression describing how to
2280    generate the (dynamic) address of the object onto the address stack.  */
2281
2282 static void
2283 output_loc_descriptor (rtl)
2284      register rtx rtl;
2285 {
2286   switch (GET_CODE (rtl))
2287     {
2288     case SUBREG:
2289
2290         /* The case of a subreg may arise when we have a local (register)
2291            variable or a formal (register) parameter which doesn't quite
2292            fill up an entire register.  For now, just assume that it is
2293            legitimate to make the Dwarf info refer to the whole register
2294            which contains the given subreg.  */
2295
2296         rtl = SUBREG_REG (rtl);
2297         /* Drop thru.  */
2298
2299     case REG:
2300         ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_REG);
2301         output_reg_number (rtl);
2302         break;
2303
2304     case MEM:
2305       output_mem_loc_descriptor (XEXP (rtl, 0));
2306       break;
2307
2308     default:
2309       abort ();         /* Should never happen */
2310     }
2311 }
2312
2313 /* Given a tree node describing an array bound (either lower or upper)
2314    output a representation for that bound.  */
2315
2316 static void
2317 output_bound_representation (bound, dim_num, u_or_l)
2318      register tree bound;
2319      register unsigned dim_num; /* For multi-dimensional arrays.  */
2320      register char u_or_l;      /* Designates upper or lower bound.  */
2321 {
2322   switch (TREE_CODE (bound))
2323     {
2324
2325     case ERROR_MARK:
2326       return;
2327
2328       /* All fixed-bounds are represented by INTEGER_CST nodes.  */
2329
2330     case INTEGER_CST:
2331       if (host_integerp (bound, 0))
2332         ASM_OUTPUT_DWARF_DATA4 (asm_out_file, tree_low_cst (bound, 0));
2333       break;
2334
2335     default:
2336
2337       /* Dynamic bounds may be represented by NOP_EXPR nodes containing
2338          SAVE_EXPR nodes, in which case we can do something, or as
2339          an expression, which we cannot represent.  */
2340       {
2341         char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2342         char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2343
2344         sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
2345                  current_dienum, dim_num, u_or_l);
2346
2347         sprintf (end_label, BOUND_END_LABEL_FMT,
2348                  current_dienum, dim_num, u_or_l);
2349
2350         ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2351         ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2352
2353         /* If optimization is turned on, the SAVE_EXPRs that describe
2354            how to access the upper bound values are essentially bogus.
2355            They only describe (at best) how to get at these values at
2356            the points in the generated code right after they have just
2357            been computed.  Worse yet, in the typical case, the upper
2358            bound values will not even *be* computed in the optimized
2359            code, so these SAVE_EXPRs are entirely bogus.
2360
2361            In order to compensate for this fact, we check here to see
2362            if optimization is enabled, and if so, we effectively create
2363            an empty location description for the (unknown and unknowable)
2364            upper bound.
2365
2366            This should not cause too much trouble for existing (stupid?)
2367            debuggers because they have to deal with empty upper bounds
2368            location descriptions anyway in order to be able to deal with
2369            incomplete array types.
2370
2371            Of course an intelligent debugger (GDB?) should be able to
2372            comprehend that a missing upper bound specification in a
2373            array type used for a storage class `auto' local array variable
2374            indicates that the upper bound is both unknown (at compile-
2375            time) and unknowable (at run-time) due to optimization. */
2376
2377         if (! optimize)
2378           {
2379             while (TREE_CODE (bound) == NOP_EXPR
2380                    || TREE_CODE (bound) == CONVERT_EXPR)
2381               bound = TREE_OPERAND (bound, 0);
2382
2383             if (TREE_CODE (bound) == SAVE_EXPR)
2384               output_loc_descriptor
2385                 (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
2386           }
2387
2388         ASM_OUTPUT_LABEL (asm_out_file, end_label);
2389       }
2390       break;
2391
2392     }
2393 }
2394
2395 /* Recursive function to output a sequence of value/name pairs for
2396    enumeration constants in reversed order.  This is called from
2397    enumeration_type_die.  */
2398
2399 static void
2400 output_enumeral_list (link)
2401      register tree link;
2402 {
2403   if (link)
2404     {
2405       output_enumeral_list (TREE_CHAIN (link));
2406
2407       if (host_integerp (TREE_VALUE (link), 0))
2408         ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
2409                                 tree_low_cst (TREE_VALUE (link), 0));
2410
2411       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
2412                                IDENTIFIER_POINTER (TREE_PURPOSE (link)));
2413     }
2414 }
2415
2416 /* Given an unsigned value, round it up to the lowest multiple of `boundary'
2417    which is not less than the value itself.  */
2418
2419 static inline HOST_WIDE_INT
2420 ceiling (value, boundary)
2421      register HOST_WIDE_INT value;
2422      register unsigned int boundary;
2423 {
2424   return (((value + boundary - 1) / boundary) * boundary);
2425 }
2426
2427 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
2428    pointer to the declared type for the relevant field variable, or return
2429    `integer_type_node' if the given node turns out to be an ERROR_MARK node.  */
2430
2431 static inline tree
2432 field_type (decl)
2433      register tree decl;
2434 {
2435   register tree type;
2436
2437   if (TREE_CODE (decl) == ERROR_MARK)
2438     return integer_type_node;
2439
2440   type = DECL_BIT_FIELD_TYPE (decl);
2441   if (type == NULL)
2442     type = TREE_TYPE (decl);
2443   return type;
2444 }
2445
2446 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
2447    node, return the alignment in bits for the type, or else return
2448    BITS_PER_WORD if the node actually turns out to be an ERROR_MARK node.  */
2449
2450 static inline unsigned int
2451 simple_type_align_in_bits (type)
2452      register tree type;
2453 {
2454   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
2455 }
2456
2457 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
2458    node, return the size in bits for the type if it is a constant, or
2459    else return the alignment for the type if the type's size is not
2460    constant, or else return BITS_PER_WORD if the type actually turns out
2461    to be an ERROR_MARK node.  */
2462
2463 static inline unsigned HOST_WIDE_INT
2464 simple_type_size_in_bits (type)
2465      register tree type;
2466 {
2467   tree type_size_tree;
2468
2469   if (TREE_CODE (type) == ERROR_MARK)
2470     return BITS_PER_WORD;
2471   type_size_tree = TYPE_SIZE (type);
2472
2473   if (type_size_tree == NULL_TREE)
2474     return 0;
2475   if (! host_integerp (type_size_tree, 1))
2476     return TYPE_ALIGN (type);
2477   return tree_low_cst (type_size_tree, 1);
2478 }
2479
2480 /* Given a pointer to what is assumed to be a FIELD_DECL node, compute and
2481    return the byte offset of the lowest addressed byte of the "containing
2482    object" for the given FIELD_DECL, or return 0 if we are unable to deter-
2483    mine what that offset is, either because the argument turns out to be a
2484    pointer to an ERROR_MARK node, or because the offset is actually variable.
2485    (We can't handle the latter case just yet.)  */
2486
2487 static HOST_WIDE_INT
2488 field_byte_offset (decl)
2489      register tree decl;
2490 {
2491   unsigned int type_align_in_bytes;
2492   unsigned int type_align_in_bits;
2493   unsigned HOST_WIDE_INT type_size_in_bits;
2494   HOST_WIDE_INT object_offset_in_align_units;
2495   HOST_WIDE_INT object_offset_in_bits;
2496   HOST_WIDE_INT object_offset_in_bytes;
2497   tree type;
2498   tree field_size_tree;
2499   HOST_WIDE_INT bitpos_int;
2500   HOST_WIDE_INT deepest_bitpos;
2501   unsigned HOST_WIDE_INT field_size_in_bits;
2502
2503   if (TREE_CODE (decl) == ERROR_MARK)
2504     return 0;
2505
2506   if (TREE_CODE (decl) != FIELD_DECL)
2507     abort ();
2508
2509   type = field_type (decl);
2510   field_size_tree = DECL_SIZE (decl);
2511
2512   /* The size could be unspecified if there was an error, or for
2513      a flexible array member.  */
2514   if (! field_size_tree)
2515     field_size_tree = bitsize_zero_node;
2516
2517   /* We cannot yet cope with fields whose positions or sizes are variable,
2518      so for now, when we see such things, we simply return 0.  Someday,
2519      we may be able to handle such cases, but it will be damn difficult.  */
2520
2521   if (! host_integerp (bit_position (decl), 0)
2522       || ! host_integerp (field_size_tree, 1))
2523     return 0;
2524
2525   bitpos_int = int_bit_position (decl);
2526   field_size_in_bits = tree_low_cst (field_size_tree, 1);
2527
2528   type_size_in_bits = simple_type_size_in_bits (type);
2529   type_align_in_bits = simple_type_align_in_bits (type);
2530   type_align_in_bytes = type_align_in_bits / BITS_PER_UNIT;
2531
2532   /* Note that the GCC front-end doesn't make any attempt to keep track
2533      of the starting bit offset (relative to the start of the containing
2534      structure type) of the hypothetical "containing object" for a bit-
2535      field.  Thus, when computing the byte offset value for the start of
2536      the "containing object" of a bit-field, we must deduce this infor-
2537      mation on our own.
2538
2539      This can be rather tricky to do in some cases.  For example, handling
2540      the following structure type definition when compiling for an i386/i486
2541      target (which only aligns long long's to 32-bit boundaries) can be very
2542      tricky:
2543
2544                 struct S {
2545                         int             field1;
2546                         long long       field2:31;
2547                 };
2548
2549      Fortunately, there is a simple rule-of-thumb which can be used in such
2550      cases.  When compiling for an i386/i486, GCC will allocate 8 bytes for
2551      the structure shown above.  It decides to do this based upon one simple
2552      rule for bit-field allocation.  Quite simply, GCC allocates each "con-
2553      taining object" for each bit-field at the first (i.e. lowest addressed)
2554      legitimate alignment boundary (based upon the required minimum alignment
2555      for the declared type of the field) which it can possibly use, subject
2556      to the condition that there is still enough available space remaining
2557      in the containing object (when allocated at the selected point) to
2558      fully accommodate all of the bits of the bit-field itself.
2559
2560      This simple rule makes it obvious why GCC allocates 8 bytes for each
2561      object of the structure type shown above.  When looking for a place to
2562      allocate the "containing object" for `field2', the compiler simply tries
2563      to allocate a 64-bit "containing object" at each successive 32-bit
2564      boundary (starting at zero) until it finds a place to allocate that 64-
2565      bit field such that at least 31 contiguous (and previously unallocated)
2566      bits remain within that selected 64 bit field.  (As it turns out, for
2567      the example above, the compiler finds that it is OK to allocate the
2568      "containing object" 64-bit field at bit-offset zero within the
2569      structure type.)
2570
2571      Here we attempt to work backwards from the limited set of facts we're
2572      given, and we try to deduce from those facts, where GCC must have
2573      believed that the containing object started (within the structure type).
2574
2575      The value we deduce is then used (by the callers of this routine) to
2576      generate AT_location and AT_bit_offset attributes for fields (both
2577      bit-fields and, in the case of AT_location, regular fields as well). */
2578
2579   /* Figure out the bit-distance from the start of the structure to the
2580      "deepest" bit of the bit-field.  */
2581   deepest_bitpos = bitpos_int + field_size_in_bits;
2582
2583   /* This is the tricky part.  Use some fancy footwork to deduce where the
2584      lowest addressed bit of the containing object must be.  */
2585   object_offset_in_bits
2586     = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2587
2588   /* Compute the offset of the containing object in "alignment units".  */
2589   object_offset_in_align_units = object_offset_in_bits / type_align_in_bits;
2590
2591   /* Compute the offset of the containing object in bytes.  */
2592   object_offset_in_bytes = object_offset_in_align_units * type_align_in_bytes;
2593
2594   /* The above code assumes that the field does not cross an alignment
2595      boundary.  This can happen if PCC_BITFIELD_TYPE_MATTERS is not defined,
2596      or if the structure is packed.  If this happens, then we get an object
2597      which starts after the bitfield, which means that the bit offset is
2598      negative.  Gdb fails when given negative bit offsets.  We avoid this
2599      by recomputing using the first bit of the bitfield.  This will give
2600      us an object which does not completely contain the bitfield, but it
2601      will be aligned, and it will contain the first bit of the bitfield.
2602
2603      However, only do this for a BYTES_BIG_ENDIAN target.  For a
2604      ! BYTES_BIG_ENDIAN target, bitpos_int + field_size_in_bits is the first
2605      first bit of the bitfield.  If we recompute using bitpos_int + 1 below,
2606      then we end up computing the object byte offset for the wrong word of the
2607      desired bitfield, which in turn causes the field offset to be negative
2608      in bit_offset_attribute.  */
2609   if (BYTES_BIG_ENDIAN
2610       && object_offset_in_bits > bitpos_int)
2611     {
2612       deepest_bitpos = bitpos_int + 1;
2613       object_offset_in_bits
2614         = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2615       object_offset_in_align_units = (object_offset_in_bits
2616                                       / type_align_in_bits);
2617       object_offset_in_bytes = (object_offset_in_align_units
2618                                 * type_align_in_bytes);
2619     }
2620
2621   return object_offset_in_bytes;
2622 }
2623
2624 /****************************** attributes *********************************/
2625
2626 /* The following routines are responsible for writing out the various types
2627    of Dwarf attributes (and any following data bytes associated with them).
2628    These routines are listed in order based on the numerical codes of their
2629    associated attributes.  */
2630
2631 /* Generate an AT_sibling attribute.  */
2632
2633 static inline void
2634 sibling_attribute ()
2635 {
2636   char label[MAX_ARTIFICIAL_LABEL_BYTES];
2637
2638   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sibling);
2639   sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
2640   ASM_OUTPUT_DWARF_REF (asm_out_file, label);
2641 }
2642
2643 /* Output the form of location attributes suitable for whole variables and
2644    whole parameters.  Note that the location attributes for struct fields
2645    are generated by the routine `data_member_location_attribute' below.  */
2646
2647 static void
2648 location_attribute (rtl)
2649      register rtx rtl;
2650 {
2651   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2652   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2653
2654   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2655   sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2656   sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2657   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2658   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2659
2660   /* Handle a special case.  If we are about to output a location descriptor
2661      for a variable or parameter which has been optimized out of existence,
2662      don't do that.  Instead we output a zero-length location descriptor
2663      value as part of the location attribute.
2664
2665      A variable which has been optimized out of existence will have a
2666      DECL_RTL value which denotes a pseudo-reg.
2667
2668      Currently, in some rare cases, variables can have DECL_RTL values
2669      which look like (MEM (REG pseudo-reg#)).  These cases are due to
2670      bugs elsewhere in the compiler.  We treat such cases
2671      as if the variable(s) in question had been optimized out of existence.
2672
2673      Note that in all cases where we wish to express the fact that a
2674      variable has been optimized out of existence, we do not simply
2675      suppress the generation of the entire location attribute because
2676      the absence of a location attribute in certain kinds of DIEs is
2677      used to indicate something else entirely... i.e. that the DIE
2678      represents an object declaration, but not a definition.  So saith
2679      the PLSIG.
2680   */
2681
2682   if (! is_pseudo_reg (rtl)
2683       && (GET_CODE (rtl) != MEM || ! is_pseudo_reg (XEXP (rtl, 0))))
2684     output_loc_descriptor (rtl);
2685
2686   ASM_OUTPUT_LABEL (asm_out_file, end_label);
2687 }
2688
2689 /* Output the specialized form of location attribute used for data members
2690    of struct and union types.
2691
2692    In the special case of a FIELD_DECL node which represents a bit-field,
2693    the "offset" part of this special location descriptor must indicate the
2694    distance in bytes from the lowest-addressed byte of the containing
2695    struct or union type to the lowest-addressed byte of the "containing
2696    object" for the bit-field.  (See the `field_byte_offset' function above.)
2697
2698    For any given bit-field, the "containing object" is a hypothetical
2699    object (of some integral or enum type) within which the given bit-field
2700    lives.  The type of this hypothetical "containing object" is always the
2701    same as the declared type of the individual bit-field itself (for GCC
2702    anyway... the DWARF spec doesn't actually mandate this).
2703
2704    Note that it is the size (in bytes) of the hypothetical "containing
2705    object" which will be given in the AT_byte_size attribute for this
2706    bit-field.  (See the `byte_size_attribute' function below.)  It is
2707    also used when calculating the value of the AT_bit_offset attribute.
2708    (See the `bit_offset_attribute' function below.)  */
2709
2710 static void
2711 data_member_location_attribute (t)
2712      register tree t;
2713 {
2714   register unsigned object_offset_in_bytes;
2715   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2716   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2717
2718   if (TREE_CODE (t) == TREE_VEC)
2719     object_offset_in_bytes = tree_low_cst (BINFO_OFFSET (t), 0);
2720   else
2721     object_offset_in_bytes = field_byte_offset (t);
2722
2723   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2724   sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2725   sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2726   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2727   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2728   ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_CONST);
2729   ASM_OUTPUT_DWARF_DATA4 (asm_out_file, object_offset_in_bytes);
2730   ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADD);
2731   ASM_OUTPUT_LABEL (asm_out_file, end_label);
2732 }
2733
2734 /* Output an AT_const_value attribute for a variable or a parameter which
2735    does not have a "location" either in memory or in a register.  These
2736    things can arise in GNU C when a constant is passed as an actual
2737    parameter to an inlined function.  They can also arise in C++ where
2738    declared constants do not necessarily get memory "homes".  */
2739
2740 static void
2741 const_value_attribute (rtl)
2742      register rtx rtl;
2743 {
2744   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2745   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2746
2747   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_const_value_block4);
2748   sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2749   sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2750   ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
2751   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2752
2753   switch (GET_CODE (rtl))
2754     {
2755       case CONST_INT:
2756         /* Note that a CONST_INT rtx could represent either an integer or
2757            a floating-point constant.  A CONST_INT is used whenever the
2758            constant will fit into a single word.  In all such cases, the
2759            original mode of the constant value is wiped out, and the
2760            CONST_INT rtx is assigned VOIDmode.  Since we no longer have
2761            precise mode information for these constants, we always just
2762            output them using 4 bytes.  */
2763
2764         ASM_OUTPUT_DWARF_DATA4 (asm_out_file, (unsigned) INTVAL (rtl));
2765         break;
2766
2767       case CONST_DOUBLE:
2768         /* Note that a CONST_DOUBLE rtx could represent either an integer
2769            or a floating-point constant.  A CONST_DOUBLE is used whenever
2770            the constant requires more than one word in order to be adequately
2771            represented.  In all such cases, the original mode of the constant
2772            value is preserved as the mode of the CONST_DOUBLE rtx, but for
2773            simplicity we always just output CONST_DOUBLEs using 8 bytes.  */
2774
2775         ASM_OUTPUT_DWARF_DATA8 (asm_out_file,
2776                                 (unsigned int) CONST_DOUBLE_HIGH (rtl),
2777                                 (unsigned int) CONST_DOUBLE_LOW (rtl));
2778         break;
2779
2780       case CONST_STRING:
2781         ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, XSTR (rtl, 0));
2782         break;
2783
2784       case SYMBOL_REF:
2785       case LABEL_REF:
2786       case CONST:
2787         ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, rtl);
2788         break;
2789
2790       case PLUS:
2791         /* In cases where an inlined instance of an inline function is passed
2792            the address of an `auto' variable (which is local to the caller)
2793            we can get a situation where the DECL_RTL of the artificial
2794            local variable (for the inlining) which acts as a stand-in for
2795            the corresponding formal parameter (of the inline function)
2796            will look like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).
2797            This is not exactly a compile-time constant expression, but it
2798            isn't the address of the (artificial) local variable either.
2799            Rather, it represents the *value* which the artificial local
2800            variable always has during its lifetime.  We currently have no
2801            way to represent such quasi-constant values in Dwarf, so for now
2802            we just punt and generate an AT_const_value attribute with form
2803            FORM_BLOCK4 and a length of zero.  */
2804         break;
2805
2806       default:
2807         abort ();  /* No other kinds of rtx should be possible here.  */
2808     }
2809
2810   ASM_OUTPUT_LABEL (asm_out_file, end_label);
2811 }
2812
2813 /* Generate *either* an AT_location attribute or else an AT_const_value
2814    data attribute for a variable or a parameter.  We generate the
2815    AT_const_value attribute only in those cases where the given
2816    variable or parameter does not have a true "location" either in
2817    memory or in a register.  This can happen (for example) when a
2818    constant is passed as an actual argument in a call to an inline
2819    function.  (It's possible that these things can crop up in other
2820    ways also.)  Note that one type of constant value which can be
2821    passed into an inlined function is a constant pointer.  This can
2822    happen for example if an actual argument in an inlined function
2823    call evaluates to a compile-time constant address.  */
2824
2825 static void
2826 location_or_const_value_attribute (decl)
2827      register tree decl;
2828 {
2829   register rtx rtl;
2830
2831   if (TREE_CODE (decl) == ERROR_MARK)
2832     return;
2833
2834   if ((TREE_CODE (decl) != VAR_DECL) && (TREE_CODE (decl) != PARM_DECL))
2835     {
2836       /* Should never happen.  */
2837       abort ();
2838       return;
2839     }
2840
2841   /* Here we have to decide where we are going to say the parameter "lives"
2842      (as far as the debugger is concerned).  We only have a couple of choices.
2843      GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.  DECL_RTL
2844      normally indicates where the parameter lives during most of the activa-
2845      tion of the function.  If optimization is enabled however, this could
2846      be either NULL or else a pseudo-reg.  Both of those cases indicate that
2847      the parameter doesn't really live anywhere (as far as the code generation
2848      parts of GCC are concerned) during most of the function's activation.
2849      That will happen (for example) if the parameter is never referenced
2850      within the function.
2851
2852      We could just generate a location descriptor here for all non-NULL
2853      non-pseudo values of DECL_RTL and ignore all of the rest, but we can
2854      be a little nicer than that if we also consider DECL_INCOMING_RTL in
2855      cases where DECL_RTL is NULL or is a pseudo-reg.
2856
2857      Note however that we can only get away with using DECL_INCOMING_RTL as
2858      a backup substitute for DECL_RTL in certain limited cases.  In cases
2859      where DECL_ARG_TYPE(decl) indicates the same type as TREE_TYPE(decl)
2860      we can be sure that the parameter was passed using the same type as it
2861      is declared to have within the function, and that its DECL_INCOMING_RTL
2862      points us to a place where a value of that type is passed.  In cases
2863      where DECL_ARG_TYPE(decl) and TREE_TYPE(decl) are different types
2864      however, we cannot (in general) use DECL_INCOMING_RTL as a backup
2865      substitute for DECL_RTL because in these cases, DECL_INCOMING_RTL
2866      points us to a value of some type which is *different* from the type
2867      of the parameter itself.  Thus, if we tried to use DECL_INCOMING_RTL
2868      to generate a location attribute in such cases, the debugger would
2869      end up (for example) trying to fetch a `float' from a place which
2870      actually contains the first part of a `double'.  That would lead to
2871      really incorrect and confusing output at debug-time, and we don't
2872      want that now do we?
2873
2874      So in general, we DO NOT use DECL_INCOMING_RTL as a backup for DECL_RTL
2875      in cases where DECL_ARG_TYPE(decl) != TREE_TYPE(decl).  There are a
2876      couple of cute exceptions however.  On little-endian machines we can
2877      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE(decl) is
2878      not the same as TREE_TYPE(decl) but only when DECL_ARG_TYPE(decl) is
2879      an integral type which is smaller than TREE_TYPE(decl).  These cases
2880      arise when (on a little-endian machine) a non-prototyped function has
2881      a parameter declared to be of type `short' or `char'.  In such cases,
2882      TREE_TYPE(decl) will be `short' or `char', DECL_ARG_TYPE(decl) will be
2883      `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
2884      passed `int' value.  If the debugger then uses that address to fetch a
2885      `short' or a `char' (on a little-endian machine) the result will be the
2886      correct data, so we allow for such exceptional cases below.
2887
2888      Note that our goal here is to describe the place where the given formal
2889      parameter lives during most of the function's activation (i.e. between
2890      the end of the prologue and the start of the epilogue).  We'll do that
2891      as best as we can.  Note however that if the given formal parameter is
2892      modified sometime during the execution of the function, then a stack
2893      backtrace (at debug-time) will show the function as having been called
2894      with the *new* value rather than the value which was originally passed
2895      in.  This happens rarely enough that it is not a major problem, but it
2896      *is* a problem, and I'd like to fix it.  A future version of dwarfout.c
2897      may generate two additional attributes for any given TAG_formal_parameter
2898      DIE which will describe the "passed type" and the "passed location" for
2899      the given formal parameter in addition to the attributes we now generate
2900      to indicate the "declared type" and the "active location" for each
2901      parameter.  This additional set of attributes could be used by debuggers
2902      for stack backtraces.
2903
2904      Separately, note that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL
2905      can be NULL also.  This happens (for example) for inlined-instances of
2906      inline function formal parameters which are never referenced.  This really
2907      shouldn't be happening.  All PARM_DECL nodes should get valid non-NULL
2908      DECL_INCOMING_RTL values, but integrate.c doesn't currently generate
2909      these values for inlined instances of inline function parameters, so
2910      when we see such cases, we are just out-of-luck for the time
2911      being (until integrate.c gets fixed).
2912   */
2913
2914   /* Use DECL_RTL as the "location" unless we find something better.  */
2915   rtl = DECL_RTL (decl);
2916
2917   if (TREE_CODE (decl) == PARM_DECL)
2918     if (rtl == NULL_RTX || is_pseudo_reg (rtl))
2919       {
2920         /* This decl represents a formal parameter which was optimized out.  */
2921         register tree declared_type = type_main_variant (TREE_TYPE (decl));
2922         register tree passed_type = type_main_variant (DECL_ARG_TYPE (decl));
2923
2924         /* Note that DECL_INCOMING_RTL may be NULL in here, but we handle
2925            *all* cases where (rtl == NULL_RTX) just below.  */
2926
2927         if (declared_type == passed_type)
2928           rtl = DECL_INCOMING_RTL (decl);
2929         else if (! BYTES_BIG_ENDIAN)
2930           if (TREE_CODE (declared_type) == INTEGER_TYPE)
2931             /* NMS WTF? */
2932             if (TYPE_SIZE (declared_type) <= TYPE_SIZE (passed_type))
2933               rtl = DECL_INCOMING_RTL (decl);
2934       }
2935
2936   if (rtl == NULL_RTX)
2937     return;
2938
2939   rtl = eliminate_regs (rtl, 0, NULL_RTX);
2940 #ifdef LEAF_REG_REMAP
2941   if (current_function_uses_only_leaf_regs)
2942     leaf_renumber_regs_insn (rtl);
2943 #endif
2944
2945   switch (GET_CODE (rtl))
2946     {
2947     case ADDRESSOF:
2948       /* The address of a variable that was optimized away; don't emit
2949          anything.  */
2950       break;
2951
2952     case CONST_INT:
2953     case CONST_DOUBLE:
2954     case CONST_STRING:
2955     case SYMBOL_REF:
2956     case LABEL_REF:
2957     case CONST:
2958     case PLUS:  /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
2959       const_value_attribute (rtl);
2960       break;
2961
2962     case MEM:
2963     case REG:
2964     case SUBREG:
2965       location_attribute (rtl);
2966       break;
2967
2968     case CONCAT:
2969       /* ??? CONCAT is used for complex variables, which may have the real
2970          part stored in one place and the imag part stored somewhere else.
2971          DWARF1 has no way to describe a variable that lives in two different
2972          places, so we just describe where the first part lives, and hope that
2973          the second part is stored after it.  */
2974       location_attribute (XEXP (rtl, 0));
2975       break;
2976
2977     default:
2978       abort ();         /* Should never happen.  */
2979     }
2980 }
2981
2982 /* Generate an AT_name attribute given some string value to be included as
2983    the value of the attribute.  */
2984
2985 static inline void
2986 name_attribute (name_string)
2987      register const char *name_string;
2988 {
2989   if (name_string && *name_string)
2990     {
2991       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_name);
2992       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, name_string);
2993     }
2994 }
2995
2996 static inline void
2997 fund_type_attribute (ft_code)
2998      register unsigned ft_code;
2999 {
3000   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_fund_type);
3001   ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, ft_code);
3002 }
3003
3004 static void
3005 mod_fund_type_attribute (type, decl_const, decl_volatile)
3006      register tree type;
3007      register int decl_const;
3008      register int decl_volatile;
3009 {
3010   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3011   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3012
3013   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_fund_type);
3014   sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
3015   sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
3016   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
3017   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3018   write_modifier_bytes (type, decl_const, decl_volatile);
3019   ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
3020                               fundamental_type_code (root_type (type)));
3021   ASM_OUTPUT_LABEL (asm_out_file, end_label);
3022 }
3023
3024 static inline void
3025 user_def_type_attribute (type)
3026      register tree type;
3027 {
3028   char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
3029
3030   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_user_def_type);
3031   sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (type));
3032   ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
3033 }
3034
3035 static void
3036 mod_u_d_type_attribute (type, decl_const, decl_volatile)
3037      register tree type;
3038      register int decl_const;
3039      register int decl_volatile;
3040 {
3041   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3042   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3043   char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
3044
3045   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_u_d_type);
3046   sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
3047   sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
3048   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
3049   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3050   write_modifier_bytes (type, decl_const, decl_volatile);
3051   sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (root_type (type)));
3052   ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
3053   ASM_OUTPUT_LABEL (asm_out_file, end_label);
3054 }
3055
3056 #ifdef USE_ORDERING_ATTRIBUTE
3057 static inline void
3058 ordering_attribute (ordering)
3059      register unsigned ordering;
3060 {
3061   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_ordering);
3062   ASM_OUTPUT_DWARF_DATA2 (asm_out_file, ordering);
3063 }
3064 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
3065
3066 /* Note that the block of subscript information for an array type also
3067    includes information about the element type of type given array type.  */
3068
3069 static void
3070 subscript_data_attribute (type)
3071      register tree type;
3072 {
3073   register unsigned dimension_number;
3074   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3075   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3076
3077   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_subscr_data);
3078   sprintf (begin_label, SS_BEGIN_LABEL_FMT, current_dienum);
3079   sprintf (end_label, SS_END_LABEL_FMT, current_dienum);
3080   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
3081   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3082
3083   /* The GNU compilers represent multidimensional array types as sequences
3084      of one dimensional array types whose element types are themselves array
3085      types.  Here we squish that down, so that each multidimensional array
3086      type gets only one array_type DIE in the Dwarf debugging info.  The
3087      draft Dwarf specification say that we are allowed to do this kind
3088      of compression in C (because there is no difference between an
3089      array or arrays and a multidimensional array in C) but for other
3090      source languages (e.g. Ada) we probably shouldn't do this.  */
3091
3092   for (dimension_number = 0;
3093         TREE_CODE (type) == ARRAY_TYPE;
3094         type = TREE_TYPE (type), dimension_number++)
3095     {
3096       register tree domain = TYPE_DOMAIN (type);
3097
3098       /* Arrays come in three flavors.  Unspecified bounds, fixed
3099          bounds, and (in GNU C only) variable bounds.  Handle all
3100          three forms here.  */
3101
3102       if (domain)
3103         {
3104           /* We have an array type with specified bounds.  */
3105
3106           register tree lower = TYPE_MIN_VALUE (domain);
3107           register tree upper = TYPE_MAX_VALUE (domain);
3108
3109           /* Handle only fundamental types as index types for now.  */
3110           if (! type_is_fundamental (domain))
3111             abort ();
3112
3113           /* Output the representation format byte for this dimension.  */
3114           ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file,
3115                   FMT_CODE (1, TREE_CODE (lower) == INTEGER_CST,
3116                             upper && TREE_CODE (upper) == INTEGER_CST));
3117
3118           /* Output the index type for this dimension.  */
3119           ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
3120                                       fundamental_type_code (domain));
3121
3122           /* Output the representation for the lower bound.  */
3123           output_bound_representation (lower, dimension_number, 'l');
3124
3125           /* Output the representation for the upper bound.  */
3126           if (upper)
3127             output_bound_representation (upper, dimension_number, 'u');
3128           else
3129             ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
3130         }
3131       else
3132         {
3133           /* We have an array type with an unspecified length.  For C and
3134              C++ we can assume that this really means that (a) the index
3135              type is an integral type, and (b) the lower bound is zero.
3136              Note that Dwarf defines the representation of an unspecified
3137              (upper) bound as being a zero-length location description.  */
3138
3139           /* Output the array-bounds format byte.  */
3140
3141           ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_FT_C_X);
3142
3143           /* Output the (assumed) index type.  */
3144
3145           ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, FT_integer);
3146
3147           /* Output the (assumed) lower bound (constant) value.  */
3148
3149           ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
3150
3151           /* Output the (empty) location description for the upper bound.  */
3152
3153           ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
3154         }
3155     }
3156
3157   /* Output the prefix byte that says that the element type is coming up.  */
3158
3159   ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_ET);
3160
3161   /* Output a representation of the type of the elements of this array type.  */
3162
3163   type_attribute (type, 0, 0);
3164
3165   ASM_OUTPUT_LABEL (asm_out_file, end_label);
3166 }
3167
3168 static void
3169 byte_size_attribute (tree_node)
3170      register tree tree_node;
3171 {
3172   register unsigned size;
3173
3174   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_byte_size);
3175   switch (TREE_CODE (tree_node))
3176     {
3177       case ERROR_MARK:
3178         size = 0;
3179         break;
3180
3181       case ENUMERAL_TYPE:
3182       case RECORD_TYPE:
3183       case UNION_TYPE:
3184       case QUAL_UNION_TYPE:
3185       case ARRAY_TYPE:
3186         size = int_size_in_bytes (tree_node);
3187         break;
3188
3189       case FIELD_DECL:
3190         /* For a data member of a struct or union, the AT_byte_size is
3191            generally given as the number of bytes normally allocated for
3192            an object of the *declared* type of the member itself.  This
3193            is true even for bit-fields.  */
3194         size = simple_type_size_in_bits (field_type (tree_node))
3195                / BITS_PER_UNIT;
3196         break;
3197
3198       default:
3199         abort ();
3200     }
3201
3202   /* Note that `size' might be -1 when we get to this point.  If it
3203      is, that indicates that the byte size of the entity in question
3204      is variable.  We have no good way of expressing this fact in Dwarf
3205      at the present time, so just let the -1 pass on through.  */
3206
3207   ASM_OUTPUT_DWARF_DATA4 (asm_out_file, size);
3208 }
3209
3210 /* For a FIELD_DECL node which represents a bit-field, output an attribute
3211    which specifies the distance in bits from the highest order bit of the
3212    "containing object" for the bit-field to the highest order bit of the
3213    bit-field itself.
3214
3215    For any given bit-field, the "containing object" is a hypothetical
3216    object (of some integral or enum type) within which the given bit-field
3217    lives.  The type of this hypothetical "containing object" is always the
3218    same as the declared type of the individual bit-field itself.
3219
3220    The determination of the exact location of the "containing object" for
3221    a bit-field is rather complicated.  It's handled by the `field_byte_offset'
3222    function (above).
3223
3224    Note that it is the size (in bytes) of the hypothetical "containing
3225    object" which will be given in the AT_byte_size attribute for this
3226    bit-field.  (See `byte_size_attribute' above.) */
3227
3228 static inline void
3229 bit_offset_attribute (decl)
3230     register tree decl;
3231 {
3232   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
3233   tree type = DECL_BIT_FIELD_TYPE (decl);
3234   HOST_WIDE_INT bitpos_int;
3235   HOST_WIDE_INT highest_order_object_bit_offset;
3236   HOST_WIDE_INT highest_order_field_bit_offset;
3237   HOST_WIDE_INT bit_offset;
3238
3239   /* Must be a bit field.  */
3240   if (!type
3241       || TREE_CODE (decl) != FIELD_DECL)
3242     abort ();
3243
3244   /* We can't yet handle bit-fields whose offsets or sizes are variable, so
3245      if we encounter such things, just return without generating any
3246      attribute whatsoever.  */
3247
3248   if (! host_integerp (bit_position (decl), 0)
3249       || ! host_integerp (DECL_SIZE (decl), 1))
3250     return;
3251
3252   bitpos_int = int_bit_position (decl);
3253
3254   /* Note that the bit offset is always the distance (in bits) from the
3255      highest-order bit of the "containing object" to the highest-order
3256      bit of the bit-field itself.  Since the "high-order end" of any
3257      object or field is different on big-endian and little-endian machines,
3258      the computation below must take account of these differences.  */
3259
3260   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
3261   highest_order_field_bit_offset = bitpos_int;
3262
3263   if (! BYTES_BIG_ENDIAN)
3264     {
3265       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 1);
3266       highest_order_object_bit_offset += simple_type_size_in_bits (type);
3267     }
3268
3269   bit_offset =
3270     (! BYTES_BIG_ENDIAN
3271      ? highest_order_object_bit_offset - highest_order_field_bit_offset
3272      : highest_order_field_bit_offset - highest_order_object_bit_offset);
3273
3274   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_offset);
3275   ASM_OUTPUT_DWARF_DATA2 (asm_out_file, bit_offset);
3276 }
3277
3278 /* For a FIELD_DECL node which represents a bit field, output an attribute
3279    which specifies the length in bits of the given field.  */
3280
3281 static inline void
3282 bit_size_attribute (decl)
3283     register tree decl;
3284 {
3285   /* Must be a field and a bit field.  */
3286   if (TREE_CODE (decl) != FIELD_DECL
3287       || ! DECL_BIT_FIELD_TYPE (decl))
3288     abort ();
3289
3290   if (host_integerp (DECL_SIZE (decl), 1))
3291     {
3292       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_size);
3293       ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
3294                               tree_low_cst (DECL_SIZE (decl), 1));
3295     }
3296 }
3297
3298 /* The following routine outputs the `element_list' attribute for enumeration
3299    type DIEs.  The element_lits attribute includes the names and values of
3300    all of the enumeration constants associated with the given enumeration
3301    type.  */
3302
3303 static inline void
3304 element_list_attribute (element)
3305      register tree element;
3306 {
3307   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3308   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3309
3310   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_element_list);
3311   sprintf (begin_label, EE_BEGIN_LABEL_FMT, current_dienum);
3312   sprintf (end_label, EE_END_LABEL_FMT, current_dienum);
3313   ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
3314   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3315
3316   /* Here we output a list of value/name pairs for each enumeration constant
3317      defined for this enumeration type (as required), but we do it in REVERSE
3318      order.  The order is the one required by the draft #5 Dwarf specification
3319      published by the UI/PLSIG.  */
3320
3321   output_enumeral_list (element);   /* Recursively output the whole list.  */
3322
3323   ASM_OUTPUT_LABEL (asm_out_file, end_label);
3324 }
3325
3326 /* Generate an AT_stmt_list attribute.  These are normally present only in
3327    DIEs with a TAG_compile_unit tag.  */
3328
3329 static inline void
3330 stmt_list_attribute (label)
3331     register const char *label;
3332 {
3333   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_stmt_list);
3334   /* Don't use ASM_OUTPUT_DWARF_DATA4 here.  */
3335   ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
3336 }
3337
3338 /* Generate an AT_low_pc attribute for a label DIE, a lexical_block DIE or
3339    for a subroutine DIE.  */
3340
3341 static inline void
3342 low_pc_attribute (asm_low_label)
3343      register const char *asm_low_label;
3344 {
3345   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_low_pc);
3346   ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_low_label);
3347 }
3348
3349 /* Generate an AT_high_pc attribute for a lexical_block DIE or for a
3350    subroutine DIE.  */
3351
3352 static inline void
3353 high_pc_attribute (asm_high_label)
3354     register const char *asm_high_label;
3355 {
3356   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_high_pc);
3357   ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_high_label);
3358 }
3359
3360 /* Generate an AT_body_begin attribute for a subroutine DIE.  */
3361
3362 static inline void
3363 body_begin_attribute (asm_begin_label)
3364      register const char *asm_begin_label;
3365 {
3366   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_begin);
3367   ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_begin_label);
3368 }
3369
3370 /* Generate an AT_body_end attribute for a subroutine DIE.  */
3371
3372 static inline void
3373 body_end_attribute (asm_end_label)
3374      register const char *asm_end_label;
3375 {
3376   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_end);
3377   ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_end_label);
3378 }
3379
3380 /* Generate an AT_language attribute given a LANG value.  These attributes
3381    are used only within TAG_compile_unit DIEs.  */
3382
3383 static inline void
3384 language_attribute (language_code)
3385      register unsigned language_code;
3386 {
3387   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_language);
3388   ASM_OUTPUT_DWARF_DATA4 (asm_out_file, language_code);
3389 }
3390
3391 static inline void
3392 member_attribute (context)
3393     register tree context;
3394 {
3395   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3396
3397   /* Generate this attribute only for members in C++.  */
3398
3399   if (context != NULL && is_tagged_type (context))
3400     {
3401       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_member);
3402       sprintf (label, TYPE_NAME_FMT, TYPE_UID (context));
3403       ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3404     }
3405 }
3406
3407 #if 0
3408 static inline void
3409 string_length_attribute (upper_bound)
3410      register tree upper_bound;
3411 {
3412   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3413   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3414
3415   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_string_length);
3416   sprintf (begin_label, SL_BEGIN_LABEL_FMT, current_dienum);
3417   sprintf (end_label, SL_END_LABEL_FMT, current_dienum);
3418   ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
3419   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
3420   output_bound_representation (upper_bound, 0, 'u');
3421   ASM_OUTPUT_LABEL (asm_out_file, end_label);
3422 }
3423 #endif
3424
3425 static inline void
3426 comp_dir_attribute (dirname)
3427      register const char *dirname;
3428 {
3429   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_comp_dir);
3430   ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
3431 }
3432
3433 static inline void
3434 sf_names_attribute (sf_names_start_label)
3435      register const char *sf_names_start_label;
3436 {
3437   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sf_names);
3438   /* Don't use ASM_OUTPUT_DWARF_DATA4 here.  */
3439   ASM_OUTPUT_DWARF_ADDR (asm_out_file, sf_names_start_label);
3440 }
3441
3442 static inline void
3443 src_info_attribute (src_info_start_label)
3444      register const char *src_info_start_label;
3445 {
3446   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_info);
3447   /* Don't use ASM_OUTPUT_DWARF_DATA4 here.  */
3448   ASM_OUTPUT_DWARF_ADDR (asm_out_file, src_info_start_label);
3449 }
3450
3451 static inline void
3452 mac_info_attribute (mac_info_start_label)
3453      register const char *mac_info_start_label;
3454 {
3455   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mac_info);
3456   /* Don't use ASM_OUTPUT_DWARF_DATA4 here.  */
3457   ASM_OUTPUT_DWARF_ADDR (asm_out_file, mac_info_start_label);
3458 }
3459
3460 static inline void
3461 prototyped_attribute (func_type)
3462      register tree func_type;
3463 {
3464   if ((strcmp (language_string, "GNU C") == 0)
3465       && (TYPE_ARG_TYPES (func_type) != NULL))
3466     {
3467       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_prototyped);
3468       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3469     }
3470 }
3471
3472 static inline void
3473 producer_attribute (producer)
3474      register const char *producer;
3475 {
3476   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_producer);
3477   ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, producer);
3478 }
3479
3480 static inline void
3481 inline_attribute (decl)
3482      register tree decl;
3483 {
3484   if (DECL_INLINE (decl))
3485     {
3486       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_inline);
3487       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3488     }
3489 }
3490
3491 static inline void
3492 containing_type_attribute (containing_type)
3493      register tree containing_type;
3494 {
3495   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3496
3497   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_containing_type);
3498   sprintf (label, TYPE_NAME_FMT, TYPE_UID (containing_type));
3499   ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3500 }
3501
3502 static inline void
3503 abstract_origin_attribute (origin)
3504      register tree origin;
3505 {
3506   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3507
3508   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_abstract_origin);
3509   switch (TREE_CODE_CLASS (TREE_CODE (origin)))
3510     {
3511     case 'd':
3512       sprintf (label, DECL_NAME_FMT, DECL_UID (origin));
3513       break;
3514
3515     case 't':
3516       sprintf (label, TYPE_NAME_FMT, TYPE_UID (origin));
3517       break;
3518
3519     default:
3520       abort ();         /* Should never happen.  */
3521
3522     }
3523   ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3524 }
3525
3526 #ifdef DWARF_DECL_COORDINATES
3527 static inline void
3528 src_coords_attribute (src_fileno, src_lineno)
3529      register unsigned src_fileno;
3530      register unsigned src_lineno;
3531 {
3532   ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_coords);
3533   ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_fileno);
3534   ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_lineno);
3535 }
3536 #endif /* defined(DWARF_DECL_COORDINATES) */
3537
3538 static inline void
3539 pure_or_virtual_attribute (func_decl)
3540      register tree func_decl;
3541 {
3542   if (DECL_VIRTUAL_P (func_decl))
3543     {
3544 #if 0 /* DECL_ABSTRACT_VIRTUAL_P is C++-specific.  */
3545       if (DECL_ABSTRACT_VIRTUAL_P (func_decl))
3546         ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_pure_virtual);
3547       else
3548 #endif
3549         ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
3550       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3551     }
3552 }
3553
3554 /************************* end of attributes *****************************/
3555
3556 /********************* utility routines for DIEs *************************/
3557
3558 /* Output an AT_name attribute and an AT_src_coords attribute for the
3559    given decl, but only if it actually has a name.  */
3560
3561 static void
3562 name_and_src_coords_attributes (decl)
3563     register tree decl;
3564 {
3565   register tree decl_name = DECL_NAME (decl);
3566
3567   if (decl_name && IDENTIFIER_POINTER (decl_name))
3568     {
3569       name_attribute (IDENTIFIER_POINTER (decl_name));
3570 #ifdef DWARF_DECL_COORDINATES
3571       {
3572         register unsigned file_index;
3573
3574         /* This is annoying, but we have to pop out of the .debug section
3575            for a moment while we call `lookup_filename' because calling it
3576            may cause a temporary switch into the .debug_sfnames section and
3577            most svr4 assemblers are not smart enough to be able to nest
3578            section switches to any depth greater than one.  Note that we
3579            also can't skirt this issue by delaying all output to the
3580            .debug_sfnames section unit the end of compilation because that
3581            would cause us to have inter-section forward references and
3582            Fred Fish sez that m68k/svr4 assemblers botch those.  */
3583
3584         ASM_OUTPUT_POP_SECTION (asm_out_file);
3585         file_index = lookup_filename (DECL_SOURCE_FILE (decl));
3586         ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
3587
3588         src_coords_attribute (file_index, DECL_SOURCE_LINE (decl));
3589       }
3590 #endif /* defined(DWARF_DECL_COORDINATES) */
3591     }
3592 }
3593
3594 /* Many forms of DIEs contain a "type description" part.  The following
3595    routine writes out these "type descriptor" parts.  */
3596
3597 static void
3598 type_attribute (type, decl_const, decl_volatile)
3599      register tree type;
3600      register int decl_const;
3601      register int decl_volatile;
3602 {
3603   register enum tree_code code = TREE_CODE (type);
3604   register int root_type_modified;
3605
3606   if (code == ERROR_MARK)
3607     return;
3608
3609   /* Handle a special case.  For functions whose return type is void,
3610      we generate *no* type attribute.  (Note that no object may have
3611      type `void', so this only applies to function return types.  */
3612
3613   if (code == VOID_TYPE)
3614     return;
3615
3616   /* If this is a subtype, find the underlying type.  Eventually,
3617      this should write out the appropriate subtype info.  */
3618   while ((code == INTEGER_TYPE || code == REAL_TYPE)
3619          && TREE_TYPE (type) != 0)
3620     type = TREE_TYPE (type), code = TREE_CODE (type);
3621
3622   root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
3623                         || decl_const || decl_volatile
3624                         || TYPE_READONLY (type) || TYPE_VOLATILE (type));
3625
3626   if (type_is_fundamental (root_type (type)))
3627     {
3628       if (root_type_modified)
3629         mod_fund_type_attribute (type, decl_const, decl_volatile);
3630       else
3631         fund_type_attribute (fundamental_type_code (type));
3632     }
3633   else
3634     {
3635       if (root_type_modified)
3636         mod_u_d_type_attribute (type, decl_const, decl_volatile);
3637       else
3638         /* We have to get the type_main_variant here (and pass that to the
3639            `user_def_type_attribute' routine) because the ..._TYPE node we
3640            have might simply be a *copy* of some original type node (where
3641            the copy was created to help us keep track of typedef names)
3642            and that copy might have a different TYPE_UID from the original
3643            ..._TYPE node.  (Note that when `equate_type_number_to_die_number'
3644            is labeling a given type DIE for future reference, it always and
3645            only creates labels for DIEs representing *main variants*, and it
3646            never even knows about non-main-variants.)  */
3647         user_def_type_attribute (type_main_variant (type));
3648     }
3649 }
3650
3651 /* Given a tree pointer to a struct, class, union, or enum type node, return
3652    a pointer to the (string) tag name for the given type, or zero if the
3653    type was declared without a tag.  */
3654
3655 static const char *
3656 type_tag (type)
3657      register tree type;
3658 {
3659   register const char *name = 0;
3660
3661   if (TYPE_NAME (type) != 0)
3662     {
3663       register tree t = 0;
3664
3665       /* Find the IDENTIFIER_NODE for the type name.  */
3666       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3667         t = TYPE_NAME (type);
3668
3669       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to 
3670          a TYPE_DECL node, regardless of whether or not a `typedef' was
3671          involved.  */
3672       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
3673                && ! DECL_IGNORED_P (TYPE_NAME (type)))
3674           t = DECL_NAME (TYPE_NAME (type));
3675
3676       /* Now get the name as a string, or invent one.  */
3677       if (t != 0)
3678         name = IDENTIFIER_POINTER (t);
3679     }
3680
3681   return (name == 0 || *name == '\0') ? 0 : name;
3682 }
3683
3684 static inline void
3685 dienum_push ()
3686 {
3687   /* Start by checking if the pending_sibling_stack needs to be expanded.
3688      If necessary, expand it.  */
3689
3690   if (pending_siblings == pending_siblings_allocated)
3691     {
3692       pending_siblings_allocated += PENDING_SIBLINGS_INCREMENT;
3693       pending_sibling_stack
3694         = (unsigned *) xrealloc (pending_sibling_stack,
3695                                  pending_siblings_allocated * sizeof(unsigned));
3696     }
3697
3698   pending_siblings++;
3699   NEXT_DIE_NUM = next_unused_dienum++;
3700 }
3701
3702 /* Pop the sibling stack so that the most recently pushed DIEnum becomes the
3703    NEXT_DIE_NUM.  */
3704
3705 static inline void
3706 dienum_pop ()
3707 {
3708   pending_siblings--;
3709 }
3710
3711 static inline tree
3712 member_declared_type (member)
3713      register tree member;
3714 {
3715   return (DECL_BIT_FIELD_TYPE (member))
3716            ? DECL_BIT_FIELD_TYPE (member)
3717            : TREE_TYPE (member);
3718 }
3719
3720 /* Get the function's label, as described by its RTL.
3721    This may be different from the DECL_NAME name used
3722    in the source file.  */
3723
3724 static const char *
3725 function_start_label (decl)
3726     register tree decl;
3727 {
3728   rtx x;
3729   const char *fnname;
3730
3731   x = DECL_RTL (decl);
3732   if (GET_CODE (x) != MEM)
3733     abort ();
3734   x = XEXP (x, 0);
3735   if (GET_CODE (x) != SYMBOL_REF)
3736                abort ();
3737   fnname = XSTR (x, 0);
3738   return fnname;
3739 }
3740
3741
3742 /******************************* DIEs ************************************/
3743
3744 /* Output routines for individual types of DIEs.  */
3745
3746 /* Note that every type of DIE (except a null DIE) gets a sibling.  */
3747
3748 static void
3749 output_array_type_die (arg)
3750      register void *arg;
3751 {
3752   register tree type = arg;
3753
3754   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_array_type);
3755   sibling_attribute ();
3756   equate_type_number_to_die_number (type);
3757   member_attribute (TYPE_CONTEXT (type));
3758
3759   /* I believe that we can default the array ordering.  SDB will probably
3760      do the right things even if AT_ordering is not present.  It's not
3761      even an issue until we start to get into multidimensional arrays
3762      anyway.  If SDB is ever caught doing the Wrong Thing for multi-
3763      dimensional arrays, then we'll have to put the AT_ordering attribute
3764      back in.  (But if and when we find out that we need to put these in,
3765      we will only do so for multidimensional arrays.  After all, we don't
3766      want to waste space in the .debug section now do we?)  */
3767
3768 #ifdef USE_ORDERING_ATTRIBUTE
3769   ordering_attribute (ORD_row_major);
3770 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
3771
3772   subscript_data_attribute (type);
3773 }
3774
3775 static void
3776 output_set_type_die (arg)
3777      register void *arg;
3778 {
3779   register tree type = arg;
3780
3781   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_set_type);
3782   sibling_attribute ();
3783   equate_type_number_to_die_number (type);
3784   member_attribute (TYPE_CONTEXT (type));
3785   type_attribute (TREE_TYPE (type), 0, 0);
3786 }
3787
3788 #if 0
3789 /* Implement this when there is a GNU FORTRAN or GNU Ada front end.  */
3790
3791 static void
3792 output_entry_point_die (arg)
3793      register void *arg;
3794 {
3795   register tree decl = arg;
3796   register tree origin = decl_ultimate_origin (decl);
3797
3798   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_entry_point);
3799   sibling_attribute ();
3800   dienum_push ();
3801   if (origin != NULL)
3802     abstract_origin_attribute (origin);
3803   else
3804     {
3805       name_and_src_coords_attributes (decl);
3806       member_attribute (DECL_CONTEXT (decl));
3807       type_attribute (TREE_TYPE (TREE_TYPE (decl)), 0, 0);
3808     }
3809   if (DECL_ABSTRACT (decl))
3810     equate_decl_number_to_die_number (decl);
3811   else
3812     low_pc_attribute (function_start_label (decl));
3813 }
3814 #endif
3815
3816 /* Output a DIE to represent an inlined instance of an enumeration type.  */
3817
3818 static void
3819 output_inlined_enumeration_type_die (arg)
3820      register void *arg;
3821 {
3822   register tree type = arg;
3823
3824   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3825   sibling_attribute ();
3826   if (!TREE_ASM_WRITTEN (type))
3827     abort ();
3828   abstract_origin_attribute (type);
3829 }
3830
3831 /* Output a DIE to represent an inlined instance of a structure type.  */
3832
3833 static void
3834 output_inlined_structure_type_die (arg)
3835      register void *arg;
3836 {
3837   register tree type = arg;
3838
3839   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
3840   sibling_attribute ();
3841   if (!TREE_ASM_WRITTEN (type))
3842     abort ();
3843   abstract_origin_attribute (type);
3844 }
3845
3846 /* Output a DIE to represent an inlined instance of a union type.  */
3847
3848 static void
3849 output_inlined_union_type_die (arg)
3850      register void *arg;
3851 {
3852   register tree type = arg;
3853
3854   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
3855   sibling_attribute ();
3856   if (!TREE_ASM_WRITTEN (type))
3857     abort ();
3858   abstract_origin_attribute (type);
3859 }
3860
3861 /* Output a DIE to represent an enumeration type.  Note that these DIEs
3862    include all of the information about the enumeration values also.
3863    This information is encoded into the element_list attribute.  */
3864
3865 static void
3866 output_enumeration_type_die (arg)
3867      register void *arg;
3868 {
3869   register tree type = arg;
3870
3871   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3872   sibling_attribute ();
3873   equate_type_number_to_die_number (type);
3874   name_attribute (type_tag (type));
3875   member_attribute (TYPE_CONTEXT (type));
3876
3877   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
3878      given enum type is incomplete, do not generate the AT_byte_size
3879      attribute or the AT_element_list attribute.  */
3880
3881   if (COMPLETE_TYPE_P (type))
3882     {
3883       byte_size_attribute (type);
3884       element_list_attribute (TYPE_FIELDS (type));
3885     }
3886 }
3887
3888 /* Output a DIE to represent either a real live formal parameter decl or
3889    to represent just the type of some formal parameter position in some
3890    function type.
3891
3892    Note that this routine is a bit unusual because its argument may be
3893    a ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
3894    represents an inlining of some PARM_DECL) or else some sort of a
3895    ..._TYPE node.  If it's the former then this function is being called
3896    to output a DIE to represent a formal parameter object (or some inlining
3897    thereof).  If it's the latter, then this function is only being called
3898    to output a TAG_formal_parameter DIE to stand as a placeholder for some
3899    formal argument type of some subprogram type.  */
3900
3901 static void
3902 output_formal_parameter_die (arg)
3903      register void *arg;
3904 {
3905   register tree node = arg;
3906
3907   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_formal_parameter);
3908   sibling_attribute ();
3909
3910   switch (TREE_CODE_CLASS (TREE_CODE (node)))
3911     {
3912     case 'd':   /* We were called with some kind of a ..._DECL node.  */
3913       {
3914         register tree origin = decl_ultimate_origin (node);
3915
3916         if (origin != NULL)
3917           abstract_origin_attribute (origin);
3918         else
3919           {
3920             name_and_src_coords_attributes (node);
3921             type_attribute (TREE_TYPE (node),
3922                             TREE_READONLY (node), TREE_THIS_VOLATILE (node));
3923           }
3924         if (DECL_ABSTRACT (node))
3925           equate_decl_number_to_die_number (node);
3926         else
3927           location_or_const_value_attribute (node);
3928       }
3929       break;
3930
3931     case 't':   /* We were called with some kind of a ..._TYPE node.  */
3932       type_attribute (node, 0, 0);
3933       break;
3934
3935     default:
3936       abort (); /* Should never happen.  */
3937     }
3938 }
3939
3940 /* Output a DIE to represent a declared function (either file-scope
3941    or block-local) which has "external linkage" (according to ANSI-C).  */
3942
3943 static void
3944 output_global_subroutine_die (arg)
3945      register void *arg;
3946 {
3947   register tree decl = arg;
3948   register tree origin = decl_ultimate_origin (decl);
3949
3950   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_subroutine);
3951   sibling_attribute ();
3952   dienum_push ();
3953   if (origin != NULL)
3954     abstract_origin_attribute (origin);
3955   else
3956     {
3957       register tree type = TREE_TYPE (decl);
3958
3959       name_and_src_coords_attributes (decl);
3960       inline_attribute (decl);
3961       prototyped_attribute (type);
3962       member_attribute (DECL_CONTEXT (decl));
3963       type_attribute (TREE_TYPE (type), 0, 0);
3964       pure_or_virtual_attribute (decl);
3965     }
3966   if (DECL_ABSTRACT (decl))
3967     equate_decl_number_to_die_number (decl);
3968   else
3969     {
3970       if (! DECL_EXTERNAL (decl) && ! in_class
3971           && decl == current_function_decl)
3972         {
3973           char label[MAX_ARTIFICIAL_LABEL_BYTES];
3974
3975           low_pc_attribute (function_start_label (decl));
3976           sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
3977           high_pc_attribute (label);
3978           if (use_gnu_debug_info_extensions)
3979             {
3980               sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
3981               body_begin_attribute (label);
3982               sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
3983               body_end_attribute (label);
3984             }
3985         }
3986     }
3987 }
3988
3989 /* Output a DIE to represent a declared data object (either file-scope
3990    or block-local) which has "external linkage" (according to ANSI-C).  */
3991
3992 static void
3993 output_global_variable_die (arg)
3994      register void *arg;
3995 {
3996   register tree decl = arg;
3997   register tree origin = decl_ultimate_origin (decl);
3998
3999   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_variable);
4000   sibling_attribute ();
4001   if (origin != NULL)
4002     abstract_origin_attribute (origin);
4003   else
4004     {
4005       name_and_src_coords_attributes (decl);
4006       member_attribute (DECL_CONTEXT (decl));
4007       type_attribute (TREE_TYPE (decl),
4008                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
4009     }
4010   if (DECL_ABSTRACT (decl))
4011     equate_decl_number_to_die_number (decl);
4012   else
4013     {
4014       if (! DECL_EXTERNAL (decl) && ! in_class
4015           && current_function_decl == decl_function_context (decl))
4016         location_or_const_value_attribute (decl);
4017     }
4018 }
4019
4020 static void
4021 output_label_die (arg)
4022      register void *arg;
4023 {
4024   register tree decl = arg;
4025   register tree origin = decl_ultimate_origin (decl);
4026
4027   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_label);
4028   sibling_attribute ();
4029   if (origin != NULL)
4030     abstract_origin_attribute (origin);
4031   else
4032     name_and_src_coords_attributes (decl);
4033   if (DECL_ABSTRACT (decl))
4034     equate_decl_number_to_die_number (decl);
4035   else
4036     {
4037       register rtx insn = DECL_RTL (decl);
4038
4039       /* Deleted labels are programmer specified labels which have been
4040          eliminated because of various optimisations.  We still emit them
4041          here so that it is possible to put breakpoints on them.  */
4042       if (GET_CODE (insn) == CODE_LABEL
4043           || ((GET_CODE (insn) == NOTE
4044                && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)))
4045         {
4046           char label[MAX_ARTIFICIAL_LABEL_BYTES];
4047
4048           /* When optimization is enabled (via -O) some parts of the compiler
4049              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
4050              represent source-level labels which were explicitly declared by
4051              the user.  This really shouldn't be happening though, so catch
4052              it if it ever does happen.  */
4053
4054           if (INSN_DELETED_P (insn))
4055             abort ();   /* Should never happen.  */
4056
4057           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
4058           low_pc_attribute (label);
4059         }
4060     }
4061 }
4062
4063 static void
4064 output_lexical_block_die (arg)
4065      register void *arg;
4066 {
4067   register tree stmt = arg;
4068
4069   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_lexical_block);
4070   sibling_attribute ();
4071   dienum_push ();
4072   if (! BLOCK_ABSTRACT (stmt))
4073     {
4074       char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4075       char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4076
4077       sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, BLOCK_NUMBER (stmt));
4078       low_pc_attribute (begin_label);
4079       sprintf (end_label, BLOCK_END_LABEL_FMT, BLOCK_NUMBER (stmt));
4080       high_pc_attribute (end_label);
4081     }
4082 }
4083
4084 static void
4085 output_inlined_subroutine_die (arg)
4086      register void *arg;
4087 {
4088   register tree stmt = arg;
4089
4090   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inlined_subroutine);
4091   sibling_attribute ();
4092   dienum_push ();
4093   abstract_origin_attribute (block_ultimate_origin (stmt));
4094   if (! BLOCK_ABSTRACT (stmt))
4095     {
4096       char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4097       char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4098
4099       sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, BLOCK_NUMBER (stmt));
4100       low_pc_attribute (begin_label);
4101       sprintf (end_label, BLOCK_END_LABEL_FMT, BLOCK_NUMBER (stmt));
4102       high_pc_attribute (end_label);
4103     }
4104 }
4105
4106 /* Output a DIE to represent a declared data object (either file-scope
4107    or block-local) which has "internal linkage" (according to ANSI-C).  */
4108
4109 static void
4110 output_local_variable_die (arg)
4111      register void *arg;
4112 {
4113   register tree decl = arg;
4114   register tree origin = decl_ultimate_origin (decl);
4115
4116   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_local_variable);
4117   sibling_attribute ();
4118   if (origin != NULL)
4119     abstract_origin_attribute (origin);
4120   else
4121     {
4122       name_and_src_coords_attributes (decl);
4123       member_attribute (DECL_CONTEXT (decl));
4124       type_attribute (TREE_TYPE (decl),
4125                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
4126     }
4127   if (DECL_ABSTRACT (decl))
4128     equate_decl_number_to_die_number (decl);
4129   else
4130     location_or_const_value_attribute (decl);
4131 }
4132
4133 static void
4134 output_member_die (arg)
4135      register void *arg;
4136 {
4137   register tree decl = arg;
4138
4139   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_member);
4140   sibling_attribute ();
4141   name_and_src_coords_attributes (decl);
4142   member_attribute (DECL_CONTEXT (decl));
4143   type_attribute (member_declared_type (decl),
4144                   TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
4145   if (DECL_BIT_FIELD_TYPE (decl))       /* If this is a bit field...  */
4146     {
4147       byte_size_attribute (decl);
4148       bit_size_attribute (decl);
4149       bit_offset_attribute (decl);
4150     }
4151   data_member_location_attribute (decl);
4152 }
4153
4154 #if 0
4155 /* Don't generate either pointer_type DIEs or reference_type DIEs.  Use
4156    modified types instead.
4157
4158    We keep this code here just in case these types of DIEs may be
4159    needed to represent certain things in other languages (e.g. Pascal)
4160    someday.  */
4161
4162 static void
4163 output_pointer_type_die (arg)
4164      register void *arg;
4165 {
4166   register tree type = arg;
4167
4168   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_pointer_type);
4169   sibling_attribute ();
4170   equate_type_number_to_die_number (type);
4171   member_attribute (TYPE_CONTEXT (type));
4172   type_attribute (TREE_TYPE (type), 0, 0);
4173 }
4174
4175 static void
4176 output_reference_type_die (arg)
4177      register void *arg;
4178 {
4179   register tree type = arg;
4180
4181   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_reference_type);
4182   sibling_attribute ();
4183   equate_type_number_to_die_number (type);
4184   member_attribute (TYPE_CONTEXT (type));
4185   type_attribute (TREE_TYPE (type), 0, 0);
4186 }
4187 #endif
4188
4189 static void
4190 output_ptr_to_mbr_type_die (arg)
4191      register void *arg;
4192 {
4193   register tree type = arg;
4194
4195   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_ptr_to_member_type);
4196   sibling_attribute ();
4197   equate_type_number_to_die_number (type);
4198   member_attribute (TYPE_CONTEXT (type));
4199   containing_type_attribute (TYPE_OFFSET_BASETYPE (type));
4200   type_attribute (TREE_TYPE (type), 0, 0);
4201 }
4202
4203 static void
4204 output_compile_unit_die (arg)
4205      register void *arg;
4206 {
4207   register const char *main_input_filename = arg;
4208
4209   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_compile_unit);
4210   sibling_attribute ();
4211   dienum_push ();
4212   name_attribute (main_input_filename);
4213
4214   {
4215     char producer[250];
4216
4217     sprintf (producer, "%s %s", language_string, version_string);
4218     producer_attribute (producer);
4219   }
4220
4221   if (strcmp (language_string, "GNU C++") == 0)
4222     language_attribute (LANG_C_PLUS_PLUS);
4223   else if (strcmp (language_string, "GNU Ada") == 0)
4224     language_attribute (LANG_ADA83);
4225   else if (strcmp (language_string, "GNU F77") == 0)
4226     language_attribute (LANG_FORTRAN77);
4227   else if (strcmp (language_string, "GNU Pascal") == 0)
4228     language_attribute (LANG_PASCAL83);
4229   else if (strcmp (language_string, "GNU Java") == 0)
4230     language_attribute (LANG_JAVA);
4231   else if (flag_traditional)
4232     language_attribute (LANG_C);
4233   else
4234     language_attribute (LANG_C89);
4235   low_pc_attribute (TEXT_BEGIN_LABEL);
4236   high_pc_attribute (TEXT_END_LABEL);
4237   if (debug_info_level >= DINFO_LEVEL_NORMAL)
4238     stmt_list_attribute (LINE_BEGIN_LABEL);
4239   last_filename = xstrdup (main_input_filename);
4240
4241   {
4242     const char *wd = getpwd ();
4243     if (wd)
4244       comp_dir_attribute (wd);
4245   }
4246
4247   if (debug_info_level >= DINFO_LEVEL_NORMAL && use_gnu_debug_info_extensions)
4248     {
4249       sf_names_attribute (SFNAMES_BEGIN_LABEL);
4250       src_info_attribute (SRCINFO_BEGIN_LABEL);
4251       if (debug_info_level >= DINFO_LEVEL_VERBOSE)
4252         mac_info_attribute (MACINFO_BEGIN_LABEL);
4253     }
4254 }
4255
4256 static void
4257 output_string_type_die (arg)
4258      register void *arg;
4259 {
4260   register tree type = arg;
4261
4262   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_string_type);
4263   sibling_attribute ();
4264   equate_type_number_to_die_number (type);
4265   member_attribute (TYPE_CONTEXT (type));
4266   /* this is a fixed length string */
4267   byte_size_attribute (type);
4268 }
4269
4270 static void
4271 output_inheritance_die (arg)
4272      register void *arg;
4273 {
4274   register tree binfo = arg;
4275
4276   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inheritance);
4277   sibling_attribute ();
4278   type_attribute (BINFO_TYPE (binfo), 0, 0);
4279   data_member_location_attribute (binfo);
4280   if (TREE_VIA_VIRTUAL (binfo))
4281     {
4282       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
4283       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4284     }
4285   if (TREE_VIA_PUBLIC (binfo))
4286     {
4287       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_public);
4288       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4289     }
4290   else if (TREE_VIA_PROTECTED (binfo))
4291     {
4292       ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_protected);
4293       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
4294     }
4295 }  
4296
4297 static void
4298 output_structure_type_die (arg)
4299      register void *arg;
4300 {
4301   register tree type = arg;
4302
4303   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
4304   sibling_attribute ();
4305   equate_type_number_to_die_number (type);
4306   name_attribute (type_tag (type));
4307   member_attribute (TYPE_CONTEXT (type));
4308
4309   /* If this type has been completed, then give it a byte_size attribute
4310      and prepare to give a list of members.  Otherwise, don't do either of
4311      these things.  In the latter case, we will not be generating a list
4312      of members (since we don't have any idea what they might be for an
4313      incomplete type).  */
4314
4315   if (COMPLETE_TYPE_P (type))
4316     {
4317       dienum_push ();
4318       byte_size_attribute (type);
4319     }
4320 }
4321
4322 /* Output a DIE to represent a declared function (either file-scope
4323    or block-local) which has "internal linkage" (according to ANSI-C).  */
4324
4325 static void
4326 output_local_subroutine_die (arg)
4327      register void *arg;
4328 {
4329   register tree decl = arg;
4330   register tree origin = decl_ultimate_origin (decl);
4331
4332   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine);
4333   sibling_attribute ();
4334   dienum_push ();
4335   if (origin != NULL)
4336     abstract_origin_attribute (origin);
4337   else
4338     {
4339       register tree type = TREE_TYPE (decl);
4340
4341       name_and_src_coords_attributes (decl);
4342       inline_attribute (decl);
4343       prototyped_attribute (type);
4344       member_attribute (DECL_CONTEXT (decl));
4345       type_attribute (TREE_TYPE (type), 0, 0);
4346       pure_or_virtual_attribute (decl);
4347     }
4348   if (DECL_ABSTRACT (decl))
4349     equate_decl_number_to_die_number (decl);
4350   else
4351     {
4352       /* Avoid getting screwed up in cases where a function was declared
4353          static but where no definition was ever given for it.  */
4354
4355       if (TREE_ASM_WRITTEN (decl))
4356         {
4357           char label[MAX_ARTIFICIAL_LABEL_BYTES];
4358           low_pc_attribute (function_start_label (decl));
4359           sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
4360           high_pc_attribute (label);
4361           if (use_gnu_debug_info_extensions)
4362             {
4363               sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
4364               body_begin_attribute (label);
4365               sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
4366               body_end_attribute (label);
4367             }
4368         }
4369     }
4370 }
4371
4372 static void
4373 output_subroutine_type_die (arg)
4374      register void *arg;
4375 {
4376   register tree type = arg;
4377   register tree return_type = TREE_TYPE (type);
4378
4379   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine_type);
4380   sibling_attribute ();
4381   dienum_push ();
4382   equate_type_number_to_die_number (type);
4383   prototyped_attribute (type);
4384   member_attribute (TYPE_CONTEXT (type));
4385   type_attribute (return_type, 0, 0);
4386 }
4387
4388 static void
4389 output_typedef_die (arg)
4390      register void *arg;
4391 {
4392   register tree decl = arg;
4393   register tree origin = decl_ultimate_origin (decl);
4394
4395   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_typedef);
4396   sibling_attribute ();
4397   if (origin != NULL)
4398     abstract_origin_attribute (origin);
4399   else
4400     {
4401       name_and_src_coords_attributes (decl);
4402       member_attribute (DECL_CONTEXT (decl));
4403       type_attribute (TREE_TYPE (decl),
4404                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
4405     }
4406   if (DECL_ABSTRACT (decl))
4407     equate_decl_number_to_die_number (decl);
4408 }
4409
4410 static void
4411 output_union_type_die (arg)
4412      register void *arg;
4413 {
4414   register tree type = arg;
4415
4416   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
4417   sibling_attribute ();
4418   equate_type_number_to_die_number (type);
4419   name_attribute (type_tag (type));
4420   member_attribute (TYPE_CONTEXT (type));
4421
4422   /* If this type has been completed, then give it a byte_size attribute
4423      and prepare to give a list of members.  Otherwise, don't do either of
4424      these things.  In the latter case, we will not be generating a list
4425      of members (since we don't have any idea what they might be for an
4426      incomplete type).  */
4427
4428   if (COMPLETE_TYPE_P (type))
4429     {
4430       dienum_push ();
4431       byte_size_attribute (type);
4432     }
4433 }
4434
4435 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
4436    at the end of an (ANSI prototyped) formal parameters list.  */
4437
4438 static void
4439 output_unspecified_parameters_die (arg)
4440      register void *arg;
4441 {
4442   register tree decl_or_type = arg;
4443
4444   ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_unspecified_parameters);
4445   sibling_attribute ();
4446
4447   /* This kludge is here only for the sake of being compatible with what
4448      the USL CI5 C compiler does.  The specification of Dwarf Version 1
4449      doesn't say that TAG_unspecified_parameters DIEs should contain any
4450      attributes other than the AT_sibling attribute, but they are certainly
4451      allowed to contain additional attributes, and the CI5 compiler
4452      generates AT_name, AT_fund_type, and AT_location attributes within
4453      TAG_unspecified_parameters DIEs which appear in the child lists for
4454      DIEs representing function definitions, so we do likewise here.  */
4455
4456   if (TREE_CODE (decl_or_type) == FUNCTION_DECL && DECL_INITIAL (decl_or_type))
4457     {
4458       name_attribute ("...");
4459       fund_type_attribute (FT_pointer);
4460       /* location_attribute (?); */
4461     }
4462 }
4463
4464 static void
4465 output_padded_null_die (arg)
4466      register void *arg ATTRIBUTE_UNUSED;
4467 {
4468   ASM_OUTPUT_ALIGN (asm_out_file, 2);   /* 2**2 == 4 */
4469 }
4470
4471 /*************************** end of DIEs *********************************/
4472
4473 /* Generate some type of DIE.  This routine generates the generic outer
4474    wrapper stuff which goes around all types of DIE's (regardless of their
4475    TAGs.  All forms of DIEs start with a DIE-specific label, followed by a
4476    DIE-length word, followed by the guts of the DIE itself.  After the guts
4477    of the DIE, there must always be a terminator label for the DIE.  */
4478
4479 static void
4480 output_die (die_specific_output_function, param)
4481      register void (*die_specific_output_function) PARAMS ((void *));
4482      register void *param;
4483 {
4484   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4485   char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4486
4487   current_dienum = NEXT_DIE_NUM;
4488   NEXT_DIE_NUM = next_unused_dienum;
4489
4490   sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4491   sprintf (end_label, DIE_END_LABEL_FMT, current_dienum);
4492
4493   /* Write a label which will act as the name for the start of this DIE.  */
4494
4495   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4496
4497   /* Write the DIE-length word.  */
4498
4499   ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
4500
4501   /* Fill in the guts of the DIE.  */
4502
4503   next_unused_dienum++;
4504   die_specific_output_function (param);
4505
4506   /* Write a label which will act as the name for the end of this DIE.  */
4507
4508   ASM_OUTPUT_LABEL (asm_out_file, end_label);
4509 }
4510
4511 static void
4512 end_sibling_chain ()
4513 {
4514   char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4515
4516   current_dienum = NEXT_DIE_NUM;
4517   NEXT_DIE_NUM = next_unused_dienum;
4518
4519   sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4520
4521   /* Write a label which will act as the name for the start of this DIE.  */
4522
4523   ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4524
4525   /* Write the DIE-length word.  */
4526
4527   ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 4);
4528
4529   dienum_pop ();
4530 }
4531 \f
4532 /* Generate a list of nameless TAG_formal_parameter DIEs (and perhaps a
4533    TAG_unspecified_parameters DIE) to represent the types of the formal
4534    parameters as specified in some function type specification (except
4535    for those which appear as part of a function *definition*).
4536
4537    Note that we must be careful here to output all of the parameter
4538    DIEs *before* we output any DIEs needed to represent the types of
4539    the formal parameters.  This keeps svr4 SDB happy because it
4540    (incorrectly) thinks that the first non-parameter DIE it sees ends
4541    the formal parameter list.  */
4542
4543 static void
4544 output_formal_types (function_or_method_type)
4545      register tree function_or_method_type;
4546 {
4547   register tree link;
4548   register tree formal_type = NULL;
4549   register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
4550
4551   /* Set TREE_ASM_WRITTEN while processing the parameters, lest we
4552      get bogus recursion when outputting tagged types local to a
4553      function declaration.  */
4554   int save_asm_written = TREE_ASM_WRITTEN (function_or_method_type);
4555   TREE_ASM_WRITTEN (function_or_method_type) = 1;
4556
4557   /* In the case where we are generating a formal types list for a C++
4558      non-static member function type, skip over the first thing on the
4559      TYPE_ARG_TYPES list because it only represents the type of the
4560      hidden `this pointer'.  The debugger should be able to figure
4561      out (without being explicitly told) that this non-static member
4562      function type takes a `this pointer' and should be able to figure
4563      what the type of that hidden parameter is from the AT_member
4564      attribute of the parent TAG_subroutine_type DIE.  */
4565
4566   if (TREE_CODE (function_or_method_type) == METHOD_TYPE)
4567     first_parm_type = TREE_CHAIN (first_parm_type);
4568
4569   /* Make our first pass over the list of formal parameter types and output
4570      a TAG_formal_parameter DIE for each one.  */
4571
4572   for (link = first_parm_type; link; link = TREE_CHAIN (link))
4573     {
4574       formal_type = TREE_VALUE (link);
4575       if (formal_type == void_type_node)
4576         break;
4577
4578       /* Output a (nameless) DIE to represent the formal parameter itself.  */
4579
4580       output_die (output_formal_parameter_die, formal_type);
4581     }
4582
4583   /* If this function type has an ellipsis, add a TAG_unspecified_parameters
4584      DIE to the end of the parameter list.  */
4585
4586   if (formal_type != void_type_node)
4587     output_die (output_unspecified_parameters_die, function_or_method_type);
4588
4589   /* Make our second (and final) pass over the list of formal parameter types
4590      and output DIEs to represent those types (as necessary).  */
4591
4592   for (link = TYPE_ARG_TYPES (function_or_method_type);
4593        link;
4594        link = TREE_CHAIN (link))
4595     {
4596       formal_type = TREE_VALUE (link);
4597       if (formal_type == void_type_node)
4598         break;
4599
4600       output_type (formal_type, function_or_method_type);
4601     }
4602
4603   TREE_ASM_WRITTEN (function_or_method_type) = save_asm_written;
4604 }
4605 \f
4606 /* Remember a type in the pending_types_list.  */
4607
4608 static void
4609 pend_type (type)
4610      register tree type;
4611 {
4612   if (pending_types == pending_types_allocated)
4613     {
4614       pending_types_allocated += PENDING_TYPES_INCREMENT;
4615       pending_types_list
4616         = (tree *) xrealloc (pending_types_list,
4617                              sizeof (tree) * pending_types_allocated);
4618     }
4619   pending_types_list[pending_types++] = type;
4620
4621   /* Mark the pending type as having been output already (even though
4622      it hasn't been).  This prevents the type from being added to the
4623      pending_types_list more than once.  */
4624
4625   TREE_ASM_WRITTEN (type) = 1;
4626 }
4627
4628 /* Return non-zero if it is legitimate to output DIEs to represent a
4629    given type while we are generating the list of child DIEs for some
4630    DIE (e.g. a function or lexical block DIE) associated with a given scope.
4631
4632    See the comments within the function for a description of when it is
4633    considered legitimate to output DIEs for various kinds of types.
4634
4635    Note that TYPE_CONTEXT(type) may be NULL (to indicate global scope)
4636    or it may point to a BLOCK node (for types local to a block), or to a
4637    FUNCTION_DECL node (for types local to the heading of some function
4638    definition), or to a FUNCTION_TYPE node (for types local to the
4639    prototyped parameter list of a function type specification), or to a
4640    RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node
4641    (in the case of C++ nested types).
4642
4643    The `scope' parameter should likewise be NULL or should point to a
4644    BLOCK node, a FUNCTION_DECL node, a FUNCTION_TYPE node, a RECORD_TYPE
4645    node, a UNION_TYPE node, or a QUAL_UNION_TYPE node.
4646
4647    This function is used only for deciding when to "pend" and when to
4648    "un-pend" types to/from the pending_types_list.
4649
4650    Note that we sometimes make use of this "type pending" feature in a
4651    rather twisted way to temporarily delay the production of DIEs for the
4652    types of formal parameters.  (We do this just to make svr4 SDB happy.)
4653    It order to delay the production of DIEs representing types of formal
4654    parameters, callers of this function supply `fake_containing_scope' as
4655    the `scope' parameter to this function.  Given that fake_containing_scope
4656    is a tagged type which is *not* the containing scope for *any* other type,
4657    the desired effect is achieved, i.e. output of DIEs representing types
4658    is temporarily suspended, and any type DIEs which would have otherwise
4659    been output are instead placed onto the pending_types_list.  Later on,
4660    we force these (temporarily pended) types to be output simply by calling
4661    `output_pending_types_for_scope' with an actual argument equal to the
4662    true scope of the types we temporarily pended.  */
4663
4664 static inline int
4665 type_ok_for_scope (type, scope)
4666     register tree type;
4667     register tree scope;
4668 {
4669   /* Tagged types (i.e. struct, union, and enum types) must always be
4670      output only in the scopes where they actually belong (or else the
4671      scoping of their own tag names and the scoping of their member
4672      names will be incorrect).  Non-tagged-types on the other hand can
4673      generally be output anywhere, except that svr4 SDB really doesn't
4674      want to see them nested within struct or union types, so here we
4675      say it is always OK to immediately output any such a (non-tagged)
4676      type, so long as we are not within such a context.  Note that the
4677      only kinds of non-tagged types which we will be dealing with here
4678      (for C and C++ anyway) will be array types and function types.  */
4679
4680   return is_tagged_type (type)
4681          ? (TYPE_CONTEXT (type) == scope
4682             /* Ignore namespaces for the moment.  */
4683             || (scope == NULL_TREE
4684                 && TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)
4685             || (scope == NULL_TREE && is_tagged_type (TYPE_CONTEXT (type))
4686                 && TREE_ASM_WRITTEN (TYPE_CONTEXT (type))))
4687          : (scope == NULL_TREE || ! is_tagged_type (scope));
4688 }
4689
4690 /* Output any pending types (from the pending_types list) which we can output
4691    now (taking into account the scope that we are working on now).
4692
4693    For each type output, remove the given type from the pending_types_list
4694    *before* we try to output it.
4695
4696    Note that we have to process the list in beginning-to-end order,
4697    because the call made here to output_type may cause yet more types
4698    to be added to the end of the list, and we may have to output some
4699    of them too.  */
4700
4701 static void
4702 output_pending_types_for_scope (containing_scope)
4703      register tree containing_scope;
4704 {
4705   register unsigned i;
4706
4707   for (i = 0; i < pending_types; )
4708     {
4709       register tree type = pending_types_list[i];
4710
4711       if (type_ok_for_scope (type, containing_scope))
4712         {
4713           register tree *mover;
4714           register tree *limit;
4715
4716           pending_types--;
4717           limit = &pending_types_list[pending_types];
4718           for (mover = &pending_types_list[i]; mover < limit; mover++)
4719             *mover = *(mover+1);
4720
4721           /* Un-mark the type as having been output already (because it
4722              hasn't been, really).  Then call output_type to generate a
4723              Dwarf representation of it.  */
4724
4725           TREE_ASM_WRITTEN (type) = 0;
4726           output_type (type, containing_scope);
4727
4728           /* Don't increment the loop counter in this case because we
4729              have shifted all of the subsequent pending types down one
4730              element in the pending_types_list array.  */
4731         }
4732       else
4733         i++;
4734     }
4735 }
4736
4737 /* Remember a type in the incomplete_types_list.  */
4738
4739 static void
4740 add_incomplete_type (type)
4741      tree type;
4742 {
4743   if (incomplete_types == incomplete_types_allocated)
4744     {
4745       incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
4746       incomplete_types_list
4747         = (tree *) xrealloc (incomplete_types_list,
4748                              sizeof (tree) * incomplete_types_allocated);
4749     }
4750
4751   incomplete_types_list[incomplete_types++] = type;
4752 }
4753
4754 /* Walk through the list of incomplete types again, trying once more to
4755    emit full debugging info for them.  */
4756
4757 static void
4758 retry_incomplete_types ()
4759 {
4760   register tree type;
4761
4762   finalizing = 1;
4763   while (incomplete_types)
4764     {
4765       --incomplete_types;
4766       type = incomplete_types_list[incomplete_types];
4767       output_type (type, NULL_TREE);
4768     }
4769 }
4770
4771 static void
4772 output_type (type, containing_scope)
4773      register tree type;
4774      register tree containing_scope;
4775 {
4776   if (type == 0 || type == error_mark_node)
4777     return;
4778
4779   /* We are going to output a DIE to represent the unqualified version of
4780      this type (i.e. without any const or volatile qualifiers) so get
4781      the main variant (i.e. the unqualified version) of this type now.  */
4782
4783   type = type_main_variant (type);
4784
4785   if (TREE_ASM_WRITTEN (type))
4786     {
4787       if (finalizing && AGGREGATE_TYPE_P (type))
4788         {
4789           register tree member;
4790
4791           /* Some of our nested types might not have been defined when we
4792              were written out before; force them out now.  */
4793
4794           for (member = TYPE_FIELDS (type); member;
4795                member = TREE_CHAIN (member))
4796             if (TREE_CODE (member) == TYPE_DECL
4797                 && ! TREE_ASM_WRITTEN (TREE_TYPE (member)))
4798               output_type (TREE_TYPE (member), containing_scope);
4799         }
4800       return;
4801     }
4802
4803   /* If this is a nested type whose containing class hasn't been
4804      written out yet, writing it out will cover this one, too.  */
4805
4806   if (TYPE_CONTEXT (type)
4807       && TYPE_P (TYPE_CONTEXT (type))
4808       && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
4809     {
4810       output_type (TYPE_CONTEXT (type), containing_scope);
4811       return;
4812     }
4813
4814   /* Don't generate any DIEs for this type now unless it is OK to do so
4815      (based upon what `type_ok_for_scope' tells us).  */
4816
4817   if (! type_ok_for_scope (type, containing_scope))
4818     {
4819       pend_type (type);
4820       return;
4821     }
4822
4823   switch (TREE_CODE (type))
4824     {
4825       case ERROR_MARK:
4826         break;
4827
4828       case VECTOR_TYPE:
4829         output_type (TYPE_DEBUG_REPRESENTATION_TYPE (type), containing_scope);
4830         break;
4831
4832       case POINTER_TYPE:
4833       case REFERENCE_TYPE:
4834         /* Prevent infinite recursion in cases where this is a recursive
4835            type.  Recursive types are possible in Ada.  */
4836         TREE_ASM_WRITTEN (type) = 1;
4837         /* For these types, all that is required is that we output a DIE
4838            (or a set of DIEs) to represent the "basis" type.  */
4839         output_type (TREE_TYPE (type), containing_scope);
4840         break;
4841
4842       case OFFSET_TYPE:
4843         /* This code is used for C++ pointer-to-data-member types.  */
4844         /* Output a description of the relevant class type.  */
4845         output_type (TYPE_OFFSET_BASETYPE (type), containing_scope);
4846         /* Output a description of the type of the object pointed to.  */
4847         output_type (TREE_TYPE (type), containing_scope);
4848         /* Now output a DIE to represent this pointer-to-data-member type
4849            itself.  */
4850         output_die (output_ptr_to_mbr_type_die, type);
4851         break;
4852
4853       case SET_TYPE:
4854         output_type (TYPE_DOMAIN (type), containing_scope);
4855         output_die (output_set_type_die, type);
4856         break;
4857
4858       case FILE_TYPE:
4859         output_type (TREE_TYPE (type), containing_scope);
4860         abort ();       /* No way to represent these in Dwarf yet!  */
4861         break;
4862
4863       case FUNCTION_TYPE:
4864         /* Force out return type (in case it wasn't forced out already).  */
4865         output_type (TREE_TYPE (type), containing_scope);
4866         output_die (output_subroutine_type_die, type);
4867         output_formal_types (type);
4868         end_sibling_chain ();
4869         break;
4870
4871       case METHOD_TYPE:
4872         /* Force out return type (in case it wasn't forced out already).  */
4873         output_type (TREE_TYPE (type), containing_scope);
4874         output_die (output_subroutine_type_die, type);
4875         output_formal_types (type);
4876         end_sibling_chain ();
4877         break;
4878
4879       case ARRAY_TYPE:  
4880         if (TYPE_STRING_FLAG (type) && TREE_CODE(TREE_TYPE(type)) == CHAR_TYPE)
4881           {
4882             output_type (TREE_TYPE (type), containing_scope);
4883             output_die (output_string_type_die, type);
4884           }
4885         else
4886           {
4887             register tree element_type;
4888
4889             element_type = TREE_TYPE (type);
4890             while (TREE_CODE (element_type) == ARRAY_TYPE)
4891               element_type = TREE_TYPE (element_type);
4892
4893             output_type (element_type, containing_scope);
4894             output_die (output_array_type_die, type);
4895           }
4896         break;
4897
4898       case ENUMERAL_TYPE:
4899       case RECORD_TYPE:
4900       case UNION_TYPE:
4901       case QUAL_UNION_TYPE:
4902
4903         /* For a non-file-scope tagged type, we can always go ahead and
4904            output a Dwarf description of this type right now, even if
4905            the type in question is still incomplete, because if this
4906            local type *was* ever completed anywhere within its scope,
4907            that complete definition would already have been attached to
4908            this RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
4909            node by the time we reach this point.  That's true because of the
4910            way the front-end does its processing of file-scope declarations (of
4911            functions and class types) within which other types might be
4912            nested.  The C and C++ front-ends always gobble up such "local
4913            scope" things en-mass before they try to output *any* debugging
4914            information for any of the stuff contained inside them and thus,
4915            we get the benefit here of what is (in effect) a pre-resolution
4916            of forward references to tagged types in local scopes.
4917
4918            Note however that for file-scope tagged types we cannot assume
4919            that such pre-resolution of forward references has taken place.
4920            A given file-scope tagged type may appear to be incomplete when
4921            we reach this point, but it may yet be given a full definition
4922            (at file-scope) later on during compilation.  In order to avoid
4923            generating a premature (and possibly incorrect) set of Dwarf
4924            DIEs for such (as yet incomplete) file-scope tagged types, we
4925            generate nothing at all for as-yet incomplete file-scope tagged
4926            types here unless we are making our special "finalization" pass
4927            for file-scope things at the very end of compilation.  At that
4928            time, we will certainly know as much about each file-scope tagged
4929            type as we are ever going to know, so at that point in time, we
4930            can safely generate correct Dwarf descriptions for these file-
4931            scope tagged types.  */
4932
4933         if (!COMPLETE_TYPE_P (type)
4934             && (TYPE_CONTEXT (type) == NULL
4935                 || AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
4936                 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)
4937             && !finalizing)
4938           {
4939             /* We don't need to do this for function-local types.  */
4940             if (! decl_function_context (TYPE_STUB_DECL (type)))
4941               add_incomplete_type (type);
4942             return;     /* EARLY EXIT!  Avoid setting TREE_ASM_WRITTEN.  */
4943           }
4944
4945         /* Prevent infinite recursion in cases where the type of some
4946            member of this type is expressed in terms of this type itself.  */
4947
4948         TREE_ASM_WRITTEN (type) = 1;
4949
4950         /* Output a DIE to represent the tagged type itself.  */
4951
4952         switch (TREE_CODE (type))
4953           {
4954           case ENUMERAL_TYPE:
4955             output_die (output_enumeration_type_die, type);
4956             return;  /* a special case -- nothing left to do so just return */
4957
4958           case RECORD_TYPE:
4959             output_die (output_structure_type_die, type);
4960             break;
4961
4962           case UNION_TYPE:
4963           case QUAL_UNION_TYPE:
4964             output_die (output_union_type_die, type);
4965             break;
4966
4967           default:
4968             abort ();   /* Should never happen.  */
4969           }
4970
4971         /* If this is not an incomplete type, output descriptions of
4972            each of its members.
4973
4974            Note that as we output the DIEs necessary to represent the
4975            members of this record or union type, we will also be trying
4976            to output DIEs to represent the *types* of those members.
4977            However the `output_type' function (above) will specifically
4978            avoid generating type DIEs for member types *within* the list
4979            of member DIEs for this (containing) type execpt for those
4980            types (of members) which are explicitly marked as also being
4981            members of this (containing) type themselves.  The g++ front-
4982            end can force any given type to be treated as a member of some
4983            other (containing) type by setting the TYPE_CONTEXT of the
4984            given (member) type to point to the TREE node representing the
4985            appropriate (containing) type.
4986         */
4987
4988         if (COMPLETE_TYPE_P (type))
4989           {
4990             /* First output info about the base classes.  */
4991             if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type))
4992               {
4993                 register tree bases = TYPE_BINFO_BASETYPES (type);
4994                 register int n_bases = TREE_VEC_LENGTH (bases);
4995                 register int i;
4996
4997                 for (i = 0; i < n_bases; i++)
4998                   {
4999                     tree binfo = TREE_VEC_ELT (bases, i);
5000                     output_type (BINFO_TYPE (binfo), containing_scope);
5001                     output_die (output_inheritance_die, binfo);
5002                   }
5003               }
5004
5005             ++in_class;
5006
5007             {
5008               register tree normal_member;
5009
5010               /* Now output info about the data members and type members.  */
5011
5012               for (normal_member = TYPE_FIELDS (type);
5013                    normal_member;
5014                    normal_member = TREE_CHAIN (normal_member))
5015                 output_decl (normal_member, type);
5016             }
5017
5018             {
5019               register tree func_member;
5020
5021               /* Now output info about the function members (if any).  */
5022
5023               for (func_member = TYPE_METHODS (type);
5024                    func_member;
5025                    func_member = TREE_CHAIN (func_member))
5026                 {
5027                   /* Don't include clones in the member list.  */
5028                   if (DECL_ABSTRACT_ORIGIN (func_member))
5029                     continue;
5030
5031                   output_decl (func_member, type);
5032                 }
5033             }
5034
5035             --in_class;
5036
5037             /* RECORD_TYPEs, UNION_TYPEs, and QUAL_UNION_TYPEs are themselves
5038                scopes (at least in C++) so we must now output any nested
5039                pending types which are local just to this type.  */
5040
5041             output_pending_types_for_scope (type);
5042
5043             end_sibling_chain ();       /* Terminate member chain.  */
5044           }
5045
5046         break;
5047
5048       case VOID_TYPE:
5049       case INTEGER_TYPE:
5050       case REAL_TYPE:
5051       case COMPLEX_TYPE:
5052       case BOOLEAN_TYPE:
5053       case CHAR_TYPE:
5054         break;          /* No DIEs needed for fundamental types.  */
5055
5056       case LANG_TYPE:   /* No Dwarf representation currently defined.  */
5057         break;
5058
5059       default:
5060         abort ();
5061     }
5062
5063   TREE_ASM_WRITTEN (type) = 1;
5064 }
5065
5066 static void
5067 output_tagged_type_instantiation (type)
5068      register tree type;
5069 {
5070   if (type == 0 || type == error_mark_node)
5071     return;
5072
5073   /* We are going to output a DIE to represent the unqualified version of
5074      this type (i.e. without any const or volatile qualifiers) so make
5075      sure that we have the main variant (i.e. the unqualified version) of
5076      this type now.  */
5077
5078   if (type != type_main_variant (type))
5079     abort ();
5080
5081   if (!TREE_ASM_WRITTEN (type))
5082     abort ();
5083
5084   switch (TREE_CODE (type))
5085     {
5086       case ERROR_MARK:
5087         break;
5088
5089       case ENUMERAL_TYPE:
5090         output_die (output_inlined_enumeration_type_die, type);
5091         break;
5092
5093       case RECORD_TYPE:
5094         output_die (output_inlined_structure_type_die, type);
5095         break;
5096
5097       case UNION_TYPE:
5098       case QUAL_UNION_TYPE:
5099         output_die (output_inlined_union_type_die, type);
5100         break;
5101
5102       default:
5103         abort ();       /* Should never happen.  */
5104     }
5105 }
5106 \f
5107 /* Output a TAG_lexical_block DIE followed by DIEs to represent all of
5108    the things which are local to the given block.  */
5109
5110 static void
5111 output_block (stmt, depth)
5112     register tree stmt;
5113     int depth;
5114 {
5115   register int must_output_die = 0;
5116   register tree origin;
5117   register enum tree_code origin_code;
5118
5119   /* Ignore blocks never really used to make RTL.  */
5120
5121   if (! stmt || ! TREE_USED (stmt)
5122       || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
5123     return;
5124
5125   /* Determine the "ultimate origin" of this block.  This block may be an
5126      inlined instance of an inlined instance of inline function, so we
5127      have to trace all of the way back through the origin chain to find
5128      out what sort of node actually served as the original seed for the
5129      creation of the current block.  */
5130
5131   origin = block_ultimate_origin (stmt);
5132   origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
5133
5134   /* Determine if we need to output any Dwarf DIEs at all to represent this
5135      block.  */
5136
5137   if (origin_code == FUNCTION_DECL)
5138     /* The outer scopes for inlinings *must* always be represented.  We
5139        generate TAG_inlined_subroutine DIEs for them.  (See below.)  */
5140     must_output_die = 1;
5141   else
5142     {
5143       /* In the case where the current block represents an inlining of the
5144          "body block" of an inline function, we must *NOT* output any DIE
5145          for this block because we have already output a DIE to represent
5146          the whole inlined function scope and the "body block" of any
5147          function doesn't really represent a different scope according to
5148          ANSI C rules.  So we check here to make sure that this block does
5149          not represent a "body block inlining" before trying to set the
5150          `must_output_die' flag.  */
5151
5152       if (! is_body_block (origin ? origin : stmt))
5153         {
5154           /* Determine if this block directly contains any "significant"
5155              local declarations which we will need to output DIEs for.  */
5156
5157           if (debug_info_level > DINFO_LEVEL_TERSE)
5158             /* We are not in terse mode so *any* local declaration counts
5159                as being a "significant" one.  */
5160             must_output_die = (BLOCK_VARS (stmt) != NULL);
5161           else
5162             {
5163               register tree decl;
5164
5165               /* We are in terse mode, so only local (nested) function
5166                  definitions count as "significant" local declarations.  */
5167
5168               for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
5169                 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
5170                   {
5171                     must_output_die = 1;
5172                     break;
5173                   }
5174             }
5175         }
5176     }
5177
5178   /* It would be a waste of space to generate a Dwarf TAG_lexical_block
5179      DIE for any block which contains no significant local declarations
5180      at all.  Rather, in such cases we just call `output_decls_for_scope'
5181      so that any needed Dwarf info for any sub-blocks will get properly
5182      generated.  Note that in terse mode, our definition of what constitutes
5183      a "significant" local declaration gets restricted to include only
5184      inlined function instances and local (nested) function definitions.  */
5185
5186   if (origin_code == FUNCTION_DECL && BLOCK_ABSTRACT (stmt))
5187     /* We don't care about an abstract inlined subroutine.  */;
5188   else if (must_output_die)
5189     {
5190       output_die ((origin_code == FUNCTION_DECL)
5191                     ? output_inlined_subroutine_die
5192                     : output_lexical_block_die,
5193                   stmt);
5194       output_decls_for_scope (stmt, depth);
5195       end_sibling_chain ();
5196     }
5197   else
5198     output_decls_for_scope (stmt, depth);
5199 }
5200
5201 /* Output all of the decls declared within a given scope (also called
5202    a `binding contour') and (recursively) all of it's sub-blocks.  */
5203
5204 static void
5205 output_decls_for_scope (stmt, depth)
5206      register tree stmt;
5207      int depth;
5208 {
5209   /* Ignore blocks never really used to make RTL.  */
5210
5211   if (! stmt || ! TREE_USED (stmt))
5212     return;
5213
5214   /* Output the DIEs to represent all of the data objects, functions,
5215      typedefs, and tagged types declared directly within this block
5216      but not within any nested sub-blocks.  */
5217
5218   {
5219     register tree decl;
5220
5221     for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
5222       output_decl (decl, stmt);
5223   }
5224
5225   output_pending_types_for_scope (stmt);
5226
5227   /* Output the DIEs to represent all sub-blocks (and the items declared
5228      therein) of this block.     */
5229
5230   {
5231     register tree subblocks;
5232
5233     for (subblocks = BLOCK_SUBBLOCKS (stmt);
5234          subblocks;
5235          subblocks = BLOCK_CHAIN (subblocks))
5236       output_block (subblocks, depth + 1);
5237   }
5238 }
5239
5240 /* Is this a typedef we can avoid emitting?  */
5241
5242 static inline int
5243 is_redundant_typedef (decl)
5244      register tree decl;
5245 {
5246   if (TYPE_DECL_IS_STUB (decl))
5247     return 1;
5248   if (DECL_ARTIFICIAL (decl)
5249       && DECL_CONTEXT (decl)
5250       && is_tagged_type (DECL_CONTEXT (decl))
5251       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
5252       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
5253     /* Also ignore the artificial member typedef for the class name.  */
5254     return 1;
5255   return 0;
5256 }
5257
5258 /* Output Dwarf .debug information for a decl described by DECL.  */
5259
5260 static void
5261 output_decl (decl, containing_scope)
5262      register tree decl;
5263      register tree containing_scope;
5264 {
5265   /* Make a note of the decl node we are going to be working on.  We may
5266      need to give the user the source coordinates of where it appeared in
5267      case we notice (later on) that something about it looks screwy.  */
5268
5269   dwarf_last_decl = decl;
5270
5271   if (TREE_CODE (decl) == ERROR_MARK)
5272     return;
5273
5274   /* If a structure is declared within an initialization, e.g. as the
5275      operand of a sizeof, then it will not have a name.  We don't want
5276      to output a DIE for it, as the tree nodes are in the temporary obstack */
5277
5278   if ((TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
5279        || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
5280       && ((DECL_NAME (decl) == 0 && TYPE_NAME (TREE_TYPE (decl)) == 0)
5281           || (TYPE_FIELDS (TREE_TYPE (decl)) 
5282               && (TREE_CODE (TYPE_FIELDS (TREE_TYPE (decl))) == ERROR_MARK))))
5283     return;
5284   
5285   /* If this ..._DECL node is marked to be ignored, then ignore it.  */
5286
5287   if (DECL_IGNORED_P (decl))
5288     return;
5289
5290   switch (TREE_CODE (decl))
5291     {
5292     case CONST_DECL:
5293       /* The individual enumerators of an enum type get output when we
5294          output the Dwarf representation of the relevant enum type itself.  */
5295       break;
5296
5297     case FUNCTION_DECL:
5298       /* If we are in terse mode, don't output any DIEs to represent
5299          mere function declarations.  Also, if we are conforming
5300          to the DWARF version 1 specification, don't output DIEs for
5301          mere function declarations.  */
5302
5303       if (DECL_INITIAL (decl) == NULL_TREE)
5304 #if (DWARF_VERSION > 1)
5305         if (debug_info_level <= DINFO_LEVEL_TERSE)
5306 #endif
5307           break;
5308
5309       /* Before we describe the FUNCTION_DECL itself, make sure that we
5310          have described its return type.  */
5311
5312       output_type (TREE_TYPE (TREE_TYPE (decl)), containing_scope);
5313
5314       {
5315         /* And its containing type.  */
5316         register tree origin = decl_class_context (decl);
5317         if (origin)
5318           output_type (origin, containing_scope);
5319       }
5320
5321       /* If we're emitting an out-of-line copy of an inline function,
5322          set up to refer to the abstract instance emitted from
5323          note_deferral_of_defined_inline_function.  */
5324       if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl)
5325           && ! (containing_scope && TYPE_P (containing_scope)))
5326         set_decl_origin_self (decl);
5327
5328       /* If the following DIE will represent a function definition for a
5329          function with "extern" linkage, output a special "pubnames" DIE
5330          label just ahead of the actual DIE.  A reference to this label
5331          was already generated in the .debug_pubnames section sub-entry
5332          for this function definition.  */
5333
5334       if (TREE_PUBLIC (decl))
5335         {
5336           char label[MAX_ARTIFICIAL_LABEL_BYTES];
5337
5338           sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
5339           ASM_OUTPUT_LABEL (asm_out_file, label);
5340         }
5341
5342       /* Now output a DIE to represent the function itself.  */
5343
5344       output_die (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl)
5345                                 ? output_global_subroutine_die
5346                                 : output_local_subroutine_die,
5347                   decl);
5348
5349       /* Now output descriptions of the arguments for this function.
5350          This gets (unnecessarily?) complex because of the fact that
5351          the DECL_ARGUMENT list for a FUNCTION_DECL doesn't indicate
5352          cases where there was a trailing `...' at the end of the formal
5353          parameter list.  In order to find out if there was a trailing
5354          ellipsis or not, we must instead look at the type associated
5355          with the FUNCTION_DECL.  This will be a node of type FUNCTION_TYPE.
5356          If the chain of type nodes hanging off of this FUNCTION_TYPE node
5357          ends with a void_type_node then there should *not* be an ellipsis
5358          at the end.  */
5359
5360       /* In the case where we are describing a mere function declaration, all
5361          we need to do here (and all we *can* do here) is to describe
5362          the *types* of its formal parameters.  */
5363
5364       if (decl != current_function_decl || in_class)
5365         output_formal_types (TREE_TYPE (decl));
5366       else
5367         {
5368           /* Generate DIEs to represent all known formal parameters */
5369
5370           register tree arg_decls = DECL_ARGUMENTS (decl);
5371           register tree parm;
5372
5373           /* WARNING!  Kludge zone ahead!  Here we have a special
5374              hack for svr4 SDB compatibility.  Instead of passing the
5375              current FUNCTION_DECL node as the second parameter (i.e.
5376              the `containing_scope' parameter) to `output_decl' (as
5377              we ought to) we instead pass a pointer to our own private
5378              fake_containing_scope node.  That node is a RECORD_TYPE
5379              node which NO OTHER TYPE may ever actually be a member of.
5380
5381              This pointer will ultimately get passed into `output_type'
5382              as its `containing_scope' parameter.  `Output_type' will
5383              then perform its part in the hack... i.e. it will pend
5384              the type of the formal parameter onto the pending_types
5385              list.  Later on, when we are done generating the whole
5386              sequence of formal parameter DIEs for this function
5387              definition, we will un-pend all previously pended types
5388              of formal parameters for this function definition.
5389
5390              This whole kludge prevents any type DIEs from being
5391              mixed in with the formal parameter DIEs.  That's good
5392              because svr4 SDB believes that the list of formal
5393              parameter DIEs for a function ends wherever the first
5394              non-formal-parameter DIE appears.  Thus, we have to
5395              keep the formal parameter DIEs segregated.  They must
5396              all appear (consecutively) at the start of the list of
5397              children for the DIE representing the function definition.
5398              Then (and only then) may we output any additional DIEs
5399              needed to represent the types of these formal parameters.
5400           */
5401
5402           /*
5403              When generating DIEs, generate the unspecified_parameters
5404              DIE instead if we come across the arg "__builtin_va_alist"
5405           */
5406
5407           for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
5408             if (TREE_CODE (parm) == PARM_DECL)
5409               {
5410                 if (DECL_NAME(parm) &&
5411                     !strcmp(IDENTIFIER_POINTER(DECL_NAME(parm)),
5412                             "__builtin_va_alist") )
5413                   output_die (output_unspecified_parameters_die, decl);
5414                 else
5415                   output_decl (parm, fake_containing_scope);
5416               }
5417
5418           /*
5419              Now that we have finished generating all of the DIEs to
5420              represent the formal parameters themselves, force out
5421              any DIEs needed to represent their types.  We do this
5422              simply by un-pending all previously pended types which
5423              can legitimately go into the chain of children DIEs for
5424              the current FUNCTION_DECL.
5425           */
5426
5427           output_pending_types_for_scope (decl);
5428
5429           /*
5430             Decide whether we need a unspecified_parameters DIE at the end.
5431             There are 2 more cases to do this for:
5432             1) the ansi ... declaration - this is detectable when the end
5433                 of the arg list is not a void_type_node
5434             2) an unprototyped function declaration (not a definition).  This
5435                 just means that we have no info about the parameters at all.
5436           */
5437
5438           {
5439             register tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
5440
5441             if (fn_arg_types)
5442               {
5443               /* this is the prototyped case, check for ...  */
5444               if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
5445                 output_die (output_unspecified_parameters_die, decl);
5446               }
5447             else
5448               {
5449               /* this is unprototyped, check for undefined (just declaration) */
5450               if (!DECL_INITIAL (decl))
5451                 output_die (output_unspecified_parameters_die, decl);
5452               }
5453           }
5454
5455           /* Output Dwarf info for all of the stuff within the body of the
5456              function (if it has one - it may be just a declaration).  */
5457
5458           {
5459             register tree outer_scope = DECL_INITIAL (decl);
5460
5461             if (outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
5462               {
5463                 /* Note that here, `outer_scope' is a pointer to the outermost
5464                    BLOCK node created to represent a function.
5465                    This outermost BLOCK actually represents the outermost
5466                    binding contour for the function, i.e. the contour in which
5467                    the function's formal parameters and labels get declared.
5468
5469                    Curiously, it appears that the front end doesn't actually
5470                    put the PARM_DECL nodes for the current function onto the
5471                    BLOCK_VARS list for this outer scope.  (They are strung
5472                    off of the DECL_ARGUMENTS list for the function instead.)
5473                    The BLOCK_VARS list for the `outer_scope' does provide us
5474                    with a list of the LABEL_DECL nodes for the function however,
5475                    and we output DWARF info for those here.
5476
5477                    Just within the `outer_scope' there will be a BLOCK node
5478                    representing the function's outermost pair of curly braces,
5479                    and any blocks used for the base and member initializers of
5480                    a C++ constructor function.  */
5481
5482                 output_decls_for_scope (outer_scope, 0);
5483
5484                 /* Finally, force out any pending types which are local to the
5485                    outermost block of this function definition.  These will
5486                    all have a TYPE_CONTEXT which points to the FUNCTION_DECL
5487                    node itself.  */
5488
5489                 output_pending_types_for_scope (decl);
5490               }
5491           }
5492         }
5493
5494       /* Generate a terminator for the list of stuff `owned' by this
5495          function.  */
5496
5497       end_sibling_chain ();
5498
5499       break;
5500
5501     case TYPE_DECL:
5502       /* If we are in terse mode, don't generate any DIEs to represent
5503          any actual typedefs.  Note that even when we are in terse mode,
5504          we must still output DIEs to represent those tagged types which
5505          are used (directly or indirectly) in the specification of either
5506          a return type or a formal parameter type of some function.  */
5507
5508       if (debug_info_level <= DINFO_LEVEL_TERSE)
5509         if (! TYPE_DECL_IS_STUB (decl)
5510             || (! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)) && ! in_class))
5511           return;
5512
5513       /* In the special case of a TYPE_DECL node representing
5514          the declaration of some type tag, if the given TYPE_DECL is
5515          marked as having been instantiated from some other (original)
5516          TYPE_DECL node (e.g. one which was generated within the original
5517          definition of an inline function) we have to generate a special
5518          (abbreviated) TAG_structure_type, TAG_union_type, or
5519          TAG_enumeration-type DIE here.  */
5520
5521       if (TYPE_DECL_IS_STUB (decl) && DECL_ABSTRACT_ORIGIN (decl))
5522         {
5523           output_tagged_type_instantiation (TREE_TYPE (decl));
5524           return;
5525         }
5526
5527       output_type (TREE_TYPE (decl), containing_scope);
5528
5529       if (! is_redundant_typedef (decl))
5530         /* Output a DIE to represent the typedef itself.  */
5531         output_die (output_typedef_die, decl);
5532       break;
5533
5534     case LABEL_DECL:
5535       if (debug_info_level >= DINFO_LEVEL_NORMAL)
5536         output_die (output_label_die, decl);
5537       break;
5538
5539     case VAR_DECL:
5540       /* If we are conforming to the DWARF version 1 specification, don't
5541          generated any DIEs to represent mere external object declarations.  */
5542
5543 #if (DWARF_VERSION <= 1)
5544       if (DECL_EXTERNAL (decl) && ! TREE_PUBLIC (decl))
5545         break;
5546 #endif
5547
5548       /* If we are in terse mode, don't generate any DIEs to represent
5549          any variable declarations or definitions.  */
5550
5551       if (debug_info_level <= DINFO_LEVEL_TERSE)
5552         break;
5553
5554       /* Output any DIEs that are needed to specify the type of this data
5555          object.  */
5556
5557       output_type (TREE_TYPE (decl), containing_scope);
5558
5559       {
5560         /* And its containing type.  */
5561         register tree origin = decl_class_context (decl);
5562         if (origin)
5563           output_type (origin, containing_scope);
5564       }
5565
5566       /* If the following DIE will represent a data object definition for a
5567          data object with "extern" linkage, output a special "pubnames" DIE
5568          label just ahead of the actual DIE.  A reference to this label
5569          was already generated in the .debug_pubnames section sub-entry
5570          for this data object definition.  */
5571
5572       if (TREE_PUBLIC (decl) && ! DECL_ABSTRACT (decl))
5573         {
5574           char label[MAX_ARTIFICIAL_LABEL_BYTES];
5575
5576           sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
5577           ASM_OUTPUT_LABEL (asm_out_file, label);
5578         }
5579
5580       /* Now output the DIE to represent the data object itself.  This gets
5581          complicated because of the possibility that the VAR_DECL really
5582          represents an inlined instance of a formal parameter for an inline
5583          function.  */
5584
5585       {
5586         register void (*func) PARAMS ((void *));
5587         register tree origin = decl_ultimate_origin (decl);
5588
5589         if (origin != NULL && TREE_CODE (origin) == PARM_DECL)
5590           func = output_formal_parameter_die;
5591         else
5592           {
5593             if (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
5594               func = output_global_variable_die;
5595             else
5596               func = output_local_variable_die;
5597           }
5598         output_die (func, decl);
5599       }
5600       break;
5601
5602     case FIELD_DECL:
5603       /* Ignore the nameless fields that are used to skip bits.  */
5604       if (DECL_NAME (decl) != 0)
5605         {
5606           output_type (member_declared_type (decl), containing_scope);
5607           output_die (output_member_die, decl);
5608         }
5609       break;
5610
5611     case PARM_DECL:
5612      /* Force out the type of this formal, if it was not forced out yet.
5613         Note that here we can run afowl of a bug in "classic" svr4 SDB.
5614         It should be able to grok the presence of type DIEs within a list
5615         of TAG_formal_parameter DIEs, but it doesn't.  */
5616
5617       output_type (TREE_TYPE (decl), containing_scope);
5618       output_die (output_formal_parameter_die, decl);
5619       break;
5620
5621     case NAMESPACE_DECL:
5622       /* Ignore for now.  */
5623       break;
5624
5625     default:
5626       abort ();
5627     }
5628 }
5629 \f
5630 void
5631 dwarfout_file_scope_decl (decl, set_finalizing)
5632      register tree decl;
5633      register int set_finalizing;
5634 {
5635   if (TREE_CODE (decl) == ERROR_MARK)
5636     return;
5637
5638   /* If this ..._DECL node is marked to be ignored, then ignore it.  */
5639
5640   if (DECL_IGNORED_P (decl))
5641     return;
5642
5643   switch (TREE_CODE (decl))
5644     {
5645     case FUNCTION_DECL:
5646
5647       /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of
5648          a builtin function.  Explicit programmer-supplied declarations of
5649          these same functions should NOT be ignored however.  */
5650
5651       if (DECL_EXTERNAL (decl) && DECL_FUNCTION_CODE (decl))
5652         return;
5653
5654       /* What we would really like to do here is to filter out all mere
5655          file-scope declarations of file-scope functions which are never
5656          referenced later within this translation unit (and keep all of
5657          ones that *are* referenced later on) but we aren't clairvoyant,
5658          so we have no idea which functions will be referenced in the
5659          future (i.e. later on within the current translation unit).
5660          So here we just ignore all file-scope function declarations
5661          which are not also definitions.  If and when the debugger needs
5662          to know something about these functions, it wil have to hunt
5663          around and find the DWARF information associated with the
5664          *definition* of the function.
5665
5666          Note that we can't just check `DECL_EXTERNAL' to find out which
5667          FUNCTION_DECL nodes represent definitions and which ones represent
5668          mere declarations.  We have to check `DECL_INITIAL' instead.  That's
5669          because the C front-end supports some weird semantics for "extern
5670          inline" function definitions.  These can get inlined within the
5671          current translation unit (an thus, we need to generate DWARF info
5672          for their abstract instances so that the DWARF info for the
5673          concrete inlined instances can have something to refer to) but
5674          the compiler never generates any out-of-lines instances of such
5675          things (despite the fact that they *are* definitions).  The
5676          important point is that the C front-end marks these "extern inline"
5677          functions as DECL_EXTERNAL, but we need to generate DWARF for them
5678          anyway.
5679
5680          Note that the C++ front-end also plays some similar games for inline
5681          function definitions appearing within include files which also
5682          contain `#pragma interface' pragmas.  */
5683
5684       if (DECL_INITIAL (decl) == NULL_TREE)
5685         return;
5686
5687       if (TREE_PUBLIC (decl)
5688           && ! DECL_EXTERNAL (decl)
5689           && ! DECL_ABSTRACT (decl))
5690         {
5691           char label[MAX_ARTIFICIAL_LABEL_BYTES];
5692
5693           /* Output a .debug_pubnames entry for a public function
5694              defined in this compilation unit.  */
5695
5696           fputc ('\n', asm_out_file);
5697           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
5698           sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5699           ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5700           ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5701                                    IDENTIFIER_POINTER (DECL_NAME (decl)));
5702           ASM_OUTPUT_POP_SECTION (asm_out_file);
5703         }
5704
5705       break;
5706
5707     case VAR_DECL:
5708
5709       /* Ignore this VAR_DECL if it refers to a file-scope extern data
5710          object declaration and if the declaration was never even
5711          referenced from within this entire compilation unit.  We
5712          suppress these DIEs in order to save space in the .debug section
5713          (by eliminating entries which are probably useless).  Note that
5714          we must not suppress block-local extern declarations (whether
5715          used or not) because that would screw-up the debugger's name
5716          lookup mechanism and cause it to miss things which really ought
5717          to be in scope at a given point.  */
5718
5719       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
5720         return;
5721
5722       if (TREE_PUBLIC (decl)
5723           && ! DECL_EXTERNAL (decl)
5724           && GET_CODE (DECL_RTL (decl)) == MEM
5725           && ! DECL_ABSTRACT (decl))
5726         {
5727           char label[MAX_ARTIFICIAL_LABEL_BYTES];
5728
5729           if (debug_info_level >= DINFO_LEVEL_NORMAL)
5730             {
5731               /* Output a .debug_pubnames entry for a public variable
5732                  defined in this compilation unit.  */
5733
5734               fputc ('\n', asm_out_file);
5735               ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
5736               sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5737               ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5738               ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5739                                        IDENTIFIER_POINTER (DECL_NAME (decl)));
5740               ASM_OUTPUT_POP_SECTION (asm_out_file);
5741             }
5742
5743           if (DECL_INITIAL (decl) == NULL)
5744             {
5745               /* Output a .debug_aranges entry for a public variable
5746                  which is tentatively defined in this compilation unit.  */
5747
5748               fputc ('\n', asm_out_file);
5749               ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
5750               ASM_OUTPUT_DWARF_ADDR (asm_out_file,
5751                               IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
5752               ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 
5753                         (unsigned) int_size_in_bytes (TREE_TYPE (decl)));
5754               ASM_OUTPUT_POP_SECTION (asm_out_file);
5755             }
5756         }
5757
5758       /* If we are in terse mode, don't generate any DIEs to represent
5759          any variable declarations or definitions.  */
5760
5761       if (debug_info_level <= DINFO_LEVEL_TERSE)
5762         return;
5763
5764       break;
5765
5766     case TYPE_DECL:
5767       /* Don't bother trying to generate any DIEs to represent any of the
5768          normal built-in types for the language we are compiling, except
5769          in cases where the types in question are *not* DWARF fundamental
5770          types.  We make an exception in the case of non-fundamental types
5771          for the sake of objective C (and perhaps C++) because the GNU
5772          front-ends for these languages may in fact create certain "built-in"
5773          types which are (for example) RECORD_TYPEs.  In such cases, we
5774          really need to output these (non-fundamental) types because other
5775          DIEs may contain references to them.  */
5776
5777       /* Also ignore language dependent types here, because they are probably
5778          also built-in types.  If we didn't ignore them, then we would get
5779          references to undefined labels because output_type doesn't support
5780          them.   So, for now, we need to ignore them to avoid assembler
5781          errors.  */
5782
5783       /* ??? This code is different than the equivalent code in dwarf2out.c.
5784          The dwarf2out.c code is probably more correct.  */
5785
5786       if (DECL_SOURCE_LINE (decl) == 0
5787           && (type_is_fundamental (TREE_TYPE (decl))
5788               || TREE_CODE (TREE_TYPE (decl)) == LANG_TYPE))
5789         return;
5790
5791       /* If we are in terse mode, don't generate any DIEs to represent
5792          any actual typedefs.  Note that even when we are in terse mode,
5793          we must still output DIEs to represent those tagged types which
5794          are used (directly or indirectly) in the specification of either
5795          a return type or a formal parameter type of some function.  */
5796
5797       if (debug_info_level <= DINFO_LEVEL_TERSE)
5798         if (! TYPE_DECL_IS_STUB (decl)
5799             || ! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)))
5800           return;
5801
5802       break;
5803
5804     default:
5805       return;
5806     }
5807
5808   fputc ('\n', asm_out_file);
5809   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
5810   finalizing = set_finalizing;
5811   output_decl (decl, NULL_TREE);
5812
5813   /* NOTE:  The call above to `output_decl' may have caused one or more
5814      file-scope named types (i.e. tagged types) to be placed onto the
5815      pending_types_list.  We have to get those types off of that list
5816      at some point, and this is the perfect time to do it.  If we didn't
5817      take them off now, they might still be on the list when cc1 finally
5818      exits.  That might be OK if it weren't for the fact that when we put
5819      types onto the pending_types_list, we set the TREE_ASM_WRITTEN flag
5820      for these types, and that causes them never to be output unless
5821      `output_pending_types_for_scope' takes them off of the list and un-sets
5822      their TREE_ASM_WRITTEN flags.  */
5823
5824   output_pending_types_for_scope (NULL_TREE);
5825
5826   /* The above call should have totally emptied the pending_types_list
5827      if this is not a nested function or class.  If this is a nested type,
5828      then the remaining pending_types will be emitted when the containing type
5829      is handled.  */
5830   
5831   if (! DECL_CONTEXT (decl))
5832     {
5833       if (pending_types != 0)
5834         abort ();
5835     }
5836
5837   ASM_OUTPUT_POP_SECTION (asm_out_file);
5838
5839   if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl) != NULL)
5840     current_funcdef_number++;
5841 }
5842 \f
5843 /* Output a marker (i.e. a label) for the beginning of the generated code
5844    for a lexical block.  */
5845
5846 static void
5847 dwarfout_begin_block (line, blocknum)
5848      unsigned int line ATTRIBUTE_UNUSED;
5849      unsigned int blocknum;
5850 {
5851   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5852
5853   function_section (current_function_decl);
5854   sprintf (label, BLOCK_BEGIN_LABEL_FMT, blocknum);
5855   ASM_OUTPUT_LABEL (asm_out_file, label);
5856 }
5857
5858 /* Output a marker (i.e. a label) for the end of the generated code
5859    for a lexical block.  */
5860
5861 static void
5862 dwarfout_end_block (line, blocknum)
5863      unsigned int line ATTRIBUTE_UNUSED;
5864      unsigned int blocknum;
5865 {
5866   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5867
5868   function_section (current_function_decl);
5869   sprintf (label, BLOCK_END_LABEL_FMT, blocknum);
5870   ASM_OUTPUT_LABEL (asm_out_file, label);
5871 }
5872
5873 /* Output a marker (i.e. a label) for the point in the generated code where
5874    the real body of the function begins (after parameters have been moved
5875    to their home locations).  */
5876
5877 void
5878 dwarfout_begin_function ()
5879 {
5880   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5881
5882   if (! use_gnu_debug_info_extensions)
5883     return;
5884   function_section (current_function_decl);
5885   sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
5886   ASM_OUTPUT_LABEL (asm_out_file, label);
5887 }
5888
5889 /* Output a marker (i.e. a label) for the point in the generated code where
5890    the real body of the function ends (just before the epilogue code).  */
5891
5892 static void
5893 dwarfout_end_function (line)
5894      unsigned int line ATTRIBUTE_UNUSED;
5895 {
5896   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5897
5898   if (! use_gnu_debug_info_extensions)
5899     return;
5900   function_section (current_function_decl);
5901   sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
5902   ASM_OUTPUT_LABEL (asm_out_file, label);
5903 }
5904
5905 /* Output a marker (i.e. a label) for the absolute end of the generated code
5906    for a function definition.  This gets called *after* the epilogue code
5907    has been generated.  */
5908
5909 static void
5910 dwarfout_end_epilogue ()
5911 {
5912   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5913
5914   /* Output a label to mark the endpoint of the code generated for this
5915      function.  */
5916
5917   sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
5918   ASM_OUTPUT_LABEL (asm_out_file, label);
5919 }
5920
5921 static void
5922 shuffle_filename_entry (new_zeroth)
5923      register filename_entry *new_zeroth;
5924 {
5925   filename_entry temp_entry;
5926   register filename_entry *limit_p;
5927   register filename_entry *move_p;
5928
5929   if (new_zeroth == &filename_table[0])
5930     return;
5931
5932   temp_entry = *new_zeroth;
5933
5934   /* Shift entries up in the table to make room at [0].  */
5935
5936   limit_p = &filename_table[0];
5937   for (move_p = new_zeroth; move_p > limit_p; move_p--)
5938     *move_p = *(move_p-1);
5939
5940   /* Install the found entry at [0].  */
5941
5942   filename_table[0] = temp_entry;
5943 }
5944
5945 /* Create a new (string) entry for the .debug_sfnames section.  */
5946
5947 static void
5948 generate_new_sfname_entry ()
5949 {
5950   char label[MAX_ARTIFICIAL_LABEL_BYTES];
5951
5952   fputc ('\n', asm_out_file);
5953   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION);
5954   sprintf (label, SFNAMES_ENTRY_LABEL_FMT, filename_table[0].number);
5955   ASM_OUTPUT_LABEL (asm_out_file, label);
5956   ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5957                            filename_table[0].name
5958                              ? filename_table[0].name
5959                              : "");
5960   ASM_OUTPUT_POP_SECTION (asm_out_file);
5961 }
5962
5963 /* Lookup a filename (in the list of filenames that we know about here in
5964    dwarfout.c) and return its "index".  The index of each (known) filename
5965    is just a unique number which is associated with only that one filename.
5966    We need such numbers for the sake of generating labels (in the
5967    .debug_sfnames section) and references to those unique labels (in the
5968    .debug_srcinfo and .debug_macinfo sections).
5969
5970    If the filename given as an argument is not found in our current list,
5971    add it to the list and assign it the next available unique index number.
5972
5973    Whatever we do (i.e. whether we find a pre-existing filename or add a new
5974    one), we shuffle the filename found (or added) up to the zeroth entry of
5975    our list of filenames (which is always searched linearly).  We do this so
5976    as to optimize the most common case for these filename lookups within
5977    dwarfout.c.  The most common case by far is the case where we call
5978    lookup_filename to lookup the very same filename that we did a lookup
5979    on the last time we called lookup_filename.  We make sure that this
5980    common case is fast because such cases will constitute 99.9% of the
5981    lookups we ever do (in practice).
5982
5983    If we add a new filename entry to our table, we go ahead and generate
5984    the corresponding entry in the .debug_sfnames section right away.
5985    Doing so allows us to avoid tickling an assembler bug (present in some
5986    m68k assemblers) which yields assembly-time errors in cases where the
5987    difference of two label addresses is taken and where the two labels
5988    are in a section *other* than the one where the difference is being
5989    calculated, and where at least one of the two symbol references is a
5990    forward reference.  (This bug could be tickled by our .debug_srcinfo
5991    entries if we don't output their corresponding .debug_sfnames entries
5992    before them.) */
5993
5994 static unsigned
5995 lookup_filename (file_name)
5996      const char *file_name;
5997 {
5998   register filename_entry *search_p;
5999   register filename_entry *limit_p = &filename_table[ft_entries];
6000
6001   for (search_p = filename_table; search_p < limit_p; search_p++)
6002     if (!strcmp (file_name, search_p->name))
6003       {
6004         /* When we get here, we have found the filename that we were
6005            looking for in the filename_table.  Now we want to make sure
6006            that it gets moved to the zero'th entry in the table (if it
6007            is not already there) so that subsequent attempts to find the
6008            same filename will find it as quickly as possible.  */
6009
6010         shuffle_filename_entry (search_p);
6011         return filename_table[0].number;
6012       }
6013
6014   /* We come here whenever we have a new filename which is not registered
6015      in the current table.  Here we add it to the table.  */
6016
6017   /* Prepare to add a new table entry by making sure there is enough space
6018      in the table to do so.  If not, expand the current table.  */
6019
6020   if (ft_entries == ft_entries_allocated)
6021     {
6022       ft_entries_allocated += FT_ENTRIES_INCREMENT;
6023       filename_table
6024         = (filename_entry *)
6025           xrealloc (filename_table,
6026                     ft_entries_allocated * sizeof (filename_entry));
6027     }
6028
6029   /* Initially, add the new entry at the end of the filename table.  */
6030
6031   filename_table[ft_entries].number = ft_entries;
6032   filename_table[ft_entries].name = xstrdup (file_name);
6033
6034   /* Shuffle the new entry into filename_table[0].  */
6035
6036   shuffle_filename_entry (&filename_table[ft_entries]);
6037
6038   if (debug_info_level >= DINFO_LEVEL_NORMAL)
6039     generate_new_sfname_entry ();
6040
6041   ft_entries++;
6042   return filename_table[0].number;
6043 }
6044
6045 static void
6046 generate_srcinfo_entry (line_entry_num, files_entry_num)
6047      unsigned line_entry_num;
6048      unsigned files_entry_num;
6049 {
6050   char label[MAX_ARTIFICIAL_LABEL_BYTES];
6051
6052   fputc ('\n', asm_out_file);
6053   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
6054   sprintf (label, LINE_ENTRY_LABEL_FMT, line_entry_num);
6055   ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, LINE_BEGIN_LABEL);
6056   sprintf (label, SFNAMES_ENTRY_LABEL_FMT, files_entry_num);
6057   ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, SFNAMES_BEGIN_LABEL);
6058   ASM_OUTPUT_POP_SECTION (asm_out_file);
6059 }
6060
6061 static void
6062 dwarfout_source_line (filename, note)
6063      const char *filename;
6064      rtx note;
6065 {
6066   unsigned int line = NOTE_LINE_NUMBER (note);
6067
6068   if (debug_info_level >= DINFO_LEVEL_NORMAL
6069       /* We can't emit line number info for functions in separate sections,
6070          because the assembler can't subtract labels in different sections.  */
6071       && DECL_SECTION_NAME (current_function_decl) == NULL_TREE)
6072     {
6073       char label[MAX_ARTIFICIAL_LABEL_BYTES];
6074       static unsigned last_line_entry_num = 0;
6075       static unsigned prev_file_entry_num = (unsigned) -1;
6076       register unsigned this_file_entry_num;
6077
6078       function_section (current_function_decl);
6079       sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num);
6080       ASM_OUTPUT_LABEL (asm_out_file, label);
6081
6082       fputc ('\n', asm_out_file);
6083
6084       if (use_gnu_debug_info_extensions)
6085         this_file_entry_num = lookup_filename (filename);
6086       else
6087         this_file_entry_num = (unsigned) -1;
6088
6089       ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6090       if (this_file_entry_num != prev_file_entry_num)
6091         {
6092           char line_entry_label[MAX_ARTIFICIAL_LABEL_BYTES];
6093
6094           sprintf (line_entry_label, LINE_ENTRY_LABEL_FMT, last_line_entry_num);
6095           ASM_OUTPUT_LABEL (asm_out_file, line_entry_label);
6096         }
6097
6098       {
6099         register const char *tail = strrchr (filename, '/');
6100
6101         if (tail != NULL)
6102           filename = tail;
6103       }
6104
6105       fprintf (asm_out_file, "%s%u\t%s %s:%u\n",
6106                UNALIGNED_INT_ASM_OP, line, ASM_COMMENT_START,
6107                filename, line);
6108       ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
6109       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, TEXT_BEGIN_LABEL);
6110       ASM_OUTPUT_POP_SECTION (asm_out_file);
6111
6112       if (this_file_entry_num != prev_file_entry_num)
6113         generate_srcinfo_entry (last_line_entry_num, this_file_entry_num);
6114       prev_file_entry_num = this_file_entry_num;
6115     }
6116 }
6117
6118 /* Generate an entry in the .debug_macinfo section.  */
6119
6120 static void
6121 generate_macinfo_entry (type_and_offset, string)
6122      register const char *type_and_offset;
6123      register const char *string;
6124 {
6125   if (! use_gnu_debug_info_extensions)
6126     return;
6127
6128   fputc ('\n', asm_out_file);
6129   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
6130   fprintf (asm_out_file, "%s%s\n", UNALIGNED_INT_ASM_OP, type_and_offset);
6131   ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, string);
6132   ASM_OUTPUT_POP_SECTION (asm_out_file);
6133 }
6134
6135 /* Wrapper for toplev.c callback to check debug info level.  */
6136 static void
6137 dwarfout_start_source_file_check (line, filename)
6138      unsigned int line;
6139      register const char *filename;
6140 {
6141   if (debug_info_level == DINFO_LEVEL_VERBOSE)
6142     dwarfout_start_source_file (line, filename);
6143 }
6144
6145 static void
6146 dwarfout_start_source_file (line, filename)
6147      unsigned int line ATTRIBUTE_UNUSED;
6148      register const char *filename;
6149 {
6150   char label[MAX_ARTIFICIAL_LABEL_BYTES];
6151   char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*3];
6152
6153   sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename));
6154   sprintf (type_and_offset, "0x%08x+%s-%s",
6155            ((unsigned) MACINFO_start << 24),
6156            /* Hack: skip leading '*' .  */
6157            (*label == '*') + label,
6158            (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL);
6159   generate_macinfo_entry (type_and_offset, "");
6160 }
6161
6162 /* Wrapper for toplev.c callback to check debug info level.  */
6163 static void
6164 dwarfout_end_source_file_check (lineno)
6165      register unsigned lineno;
6166 {
6167   if (debug_info_level == DINFO_LEVEL_VERBOSE)
6168     dwarfout_end_source_file (lineno);
6169 }
6170
6171 static void
6172 dwarfout_end_source_file (lineno)
6173      register unsigned lineno;
6174 {
6175   char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
6176
6177   sprintf (type_and_offset, "0x%08x+%u",
6178            ((unsigned) MACINFO_resume << 24), lineno);
6179   generate_macinfo_entry (type_and_offset, "");
6180 }
6181
6182 /* Called from check_newline in c-parse.y.  The `buffer' parameter
6183    contains the tail part of the directive line, i.e. the part which
6184    is past the initial whitespace, #, whitespace, directive-name,
6185    whitespace part.  */
6186
6187 static void
6188 dwarfout_define (lineno, buffer)
6189      register unsigned lineno;
6190      register const char *buffer;
6191 {
6192   static int initialized = 0;
6193   char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
6194
6195   if (!initialized)
6196     {
6197       dwarfout_start_source_file (0, primary_filename);
6198       initialized = 1;
6199     }
6200   sprintf (type_and_offset, "0x%08x+%u",
6201            ((unsigned) MACINFO_define << 24), lineno);
6202   generate_macinfo_entry (type_and_offset, buffer);
6203 }
6204
6205 /* Called from check_newline in c-parse.y.  The `buffer' parameter
6206    contains the tail part of the directive line, i.e. the part which
6207    is past the initial whitespace, #, whitespace, directive-name,
6208    whitespace part.  */
6209
6210 static void
6211 dwarfout_undef (lineno, buffer)
6212      register unsigned lineno;
6213      register const char *buffer;
6214 {
6215   char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
6216
6217   sprintf (type_and_offset, "0x%08x+%u",
6218            ((unsigned) MACINFO_undef << 24), lineno);
6219   generate_macinfo_entry (type_and_offset, buffer);
6220 }
6221
6222 /* Set up for Dwarf output at the start of compilation.  */
6223
6224 static void
6225 dwarfout_init (main_input_filename)
6226      register const char *main_input_filename;
6227 {
6228   /* Remember the name of the primary input file.  */
6229
6230   primary_filename = main_input_filename;
6231
6232   /* Allocate the initial hunk of the pending_sibling_stack.  */
6233
6234   pending_sibling_stack
6235     = (unsigned *)
6236         xmalloc (PENDING_SIBLINGS_INCREMENT * sizeof (unsigned));
6237   pending_siblings_allocated = PENDING_SIBLINGS_INCREMENT;
6238   pending_siblings = 1;
6239
6240   /* Allocate the initial hunk of the filename_table.  */
6241
6242   filename_table
6243     = (filename_entry *)
6244         xmalloc (FT_ENTRIES_INCREMENT * sizeof (filename_entry));
6245   ft_entries_allocated = FT_ENTRIES_INCREMENT;
6246   ft_entries = 0;
6247
6248   /* Allocate the initial hunk of the pending_types_list.  */
6249
6250   pending_types_list
6251     = (tree *) xmalloc (PENDING_TYPES_INCREMENT * sizeof (tree));
6252   pending_types_allocated = PENDING_TYPES_INCREMENT;
6253   pending_types = 0;
6254
6255   /* Create an artificial RECORD_TYPE node which we can use in our hack
6256      to get the DIEs representing types of formal parameters to come out
6257      only *after* the DIEs for the formal parameters themselves.  */
6258
6259   fake_containing_scope = make_node (RECORD_TYPE);
6260
6261   /* Output a starting label for the .text section.  */
6262
6263   fputc ('\n', asm_out_file);
6264   ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION);
6265   ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL);
6266   ASM_OUTPUT_POP_SECTION (asm_out_file);
6267
6268   /* Output a starting label for the .data section.  */
6269
6270   fputc ('\n', asm_out_file);
6271   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION);
6272   ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL);
6273   ASM_OUTPUT_POP_SECTION (asm_out_file);
6274
6275 #if 0 /* GNU C doesn't currently use .data1.  */
6276   /* Output a starting label for the .data1 section.  */
6277
6278   fputc ('\n', asm_out_file);
6279   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION);
6280   ASM_OUTPUT_LABEL (asm_out_file, DATA1_BEGIN_LABEL);
6281   ASM_OUTPUT_POP_SECTION (asm_out_file);
6282 #endif
6283
6284   /* Output a starting label for the .rodata section.  */
6285
6286   fputc ('\n', asm_out_file);
6287   ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION);
6288   ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL);
6289   ASM_OUTPUT_POP_SECTION (asm_out_file);
6290
6291 #if 0 /* GNU C doesn't currently use .rodata1.  */
6292   /* Output a starting label for the .rodata1 section.  */
6293
6294   fputc ('\n', asm_out_file);
6295   ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION);
6296   ASM_OUTPUT_LABEL (asm_out_file, RODATA1_BEGIN_LABEL);
6297   ASM_OUTPUT_POP_SECTION (asm_out_file);
6298 #endif
6299
6300   /* Output a starting label for the .bss section.  */
6301
6302   fputc ('\n', asm_out_file);
6303   ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION);
6304   ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL);
6305   ASM_OUTPUT_POP_SECTION (asm_out_file);
6306
6307   if (debug_info_level >= DINFO_LEVEL_NORMAL)
6308     {
6309       if (use_gnu_debug_info_extensions)
6310         {
6311           /* Output a starting label and an initial (compilation directory)
6312              entry for the .debug_sfnames section.  The starting label will be
6313              referenced by the initial entry in the .debug_srcinfo section.  */
6314     
6315           fputc ('\n', asm_out_file);
6316           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SFNAMES_SECTION);
6317           ASM_OUTPUT_LABEL (asm_out_file, SFNAMES_BEGIN_LABEL);
6318           {
6319             register const char *pwd = getpwd ();
6320             register char *dirname;
6321
6322             if (!pwd)
6323               fatal_io_error ("can't get current directory");
6324
6325             dirname = concat (pwd, "/", NULL);
6326             ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
6327             free (dirname);
6328           }
6329           ASM_OUTPUT_POP_SECTION (asm_out_file);
6330         }
6331     
6332       if (debug_info_level >= DINFO_LEVEL_VERBOSE
6333           && use_gnu_debug_info_extensions)
6334         {
6335           /* Output a starting label for the .debug_macinfo section.  This
6336              label will be referenced by the AT_mac_info attribute in the
6337              TAG_compile_unit DIE.  */
6338         
6339           fputc ('\n', asm_out_file);
6340           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
6341           ASM_OUTPUT_LABEL (asm_out_file, MACINFO_BEGIN_LABEL);
6342           ASM_OUTPUT_POP_SECTION (asm_out_file);
6343         }
6344
6345       /* Generate the initial entry for the .line section.  */
6346     
6347       fputc ('\n', asm_out_file);
6348       ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6349       ASM_OUTPUT_LABEL (asm_out_file, LINE_BEGIN_LABEL);
6350       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, LINE_END_LABEL, LINE_BEGIN_LABEL);
6351       ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6352       ASM_OUTPUT_POP_SECTION (asm_out_file);
6353     
6354       if (use_gnu_debug_info_extensions)
6355         {
6356           /* Generate the initial entry for the .debug_srcinfo section.  */
6357
6358           fputc ('\n', asm_out_file);
6359           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
6360           ASM_OUTPUT_LABEL (asm_out_file, SRCINFO_BEGIN_LABEL);
6361           ASM_OUTPUT_DWARF_ADDR (asm_out_file, LINE_BEGIN_LABEL);
6362           ASM_OUTPUT_DWARF_ADDR (asm_out_file, SFNAMES_BEGIN_LABEL);
6363           ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6364           ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_END_LABEL);
6365 #ifdef DWARF_TIMESTAMPS
6366           ASM_OUTPUT_DWARF_DATA4 (asm_out_file, time (NULL));
6367 #else
6368           ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
6369 #endif
6370           ASM_OUTPUT_POP_SECTION (asm_out_file);
6371         }
6372     
6373       /* Generate the initial entry for the .debug_pubnames section.  */
6374     
6375       fputc ('\n', asm_out_file);
6376       ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
6377       ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
6378       ASM_OUTPUT_POP_SECTION (asm_out_file);
6379     
6380       /* Generate the initial entry for the .debug_aranges section.  */
6381     
6382       fputc ('\n', asm_out_file);
6383       ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
6384       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
6385                                DEBUG_ARANGES_END_LABEL,
6386                                DEBUG_ARANGES_BEGIN_LABEL);
6387       ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_BEGIN_LABEL);
6388       ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 1);
6389       ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
6390       ASM_OUTPUT_POP_SECTION (asm_out_file);
6391     }
6392
6393   /* Setup first DIE number == 1.  */
6394   NEXT_DIE_NUM = next_unused_dienum++;
6395
6396   /* Generate the initial DIE for the .debug section.  Note that the
6397      (string) value given in the AT_name attribute of the TAG_compile_unit
6398      DIE will (typically) be a relative pathname and that this pathname
6399      should be taken as being relative to the directory from which the
6400      compiler was invoked when the given (base) source file was compiled.  */
6401
6402   fputc ('\n', asm_out_file);
6403   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
6404   ASM_OUTPUT_LABEL (asm_out_file, DEBUG_BEGIN_LABEL);
6405   output_die (output_compile_unit_die, (PTR) main_input_filename);
6406   ASM_OUTPUT_POP_SECTION (asm_out_file);
6407
6408   fputc ('\n', asm_out_file);
6409 }
6410
6411 /* Output stuff that dwarf requires at the end of every file.  */
6412
6413 static void
6414 dwarfout_finish (main_input_filename)
6415      register const char *main_input_filename ATTRIBUTE_UNUSED;
6416 {
6417   char label[MAX_ARTIFICIAL_LABEL_BYTES];
6418
6419   fputc ('\n', asm_out_file);
6420   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
6421   retry_incomplete_types ();
6422   fputc ('\n', asm_out_file);
6423
6424   /* Mark the end of the chain of siblings which represent all file-scope
6425      declarations in this compilation unit.  */
6426
6427   /* The (null) DIE which represents the terminator for the (sibling linked)
6428      list of file-scope items is *special*.  Normally, we would just call
6429      end_sibling_chain at this point in order to output a word with the
6430      value `4' and that word would act as the terminator for the list of
6431      DIEs describing file-scope items.  Unfortunately, if we were to simply
6432      do that, the label that would follow this DIE in the .debug section
6433      (i.e. `..D2') would *not* be properly aligned (as it must be on some
6434      machines) to a 4 byte boundary.
6435
6436      In order to force the label `..D2' to get aligned to a 4 byte boundary,
6437      the trick used is to insert extra (otherwise useless) padding bytes
6438      into the (null) DIE that we know must precede the ..D2 label in the
6439      .debug section.  The amount of padding required can be anywhere between
6440      0 and 3 bytes.  The length word at the start of this DIE (i.e. the one
6441      with the padding) would normally contain the value 4, but now it will
6442      also have to include the padding bytes, so it will instead have some
6443      value in the range 4..7.
6444
6445      Fortunately, the rules of Dwarf say that any DIE whose length word
6446      contains *any* value less than 8 should be treated as a null DIE, so
6447      this trick works out nicely.  Clever, eh?  Don't give me any credit
6448      (or blame).  I didn't think of this scheme.  I just conformed to it.
6449   */
6450
6451   output_die (output_padded_null_die, (void *) 0);
6452   dienum_pop ();
6453
6454   sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
6455   ASM_OUTPUT_LABEL (asm_out_file, label);       /* should be ..D2 */
6456   ASM_OUTPUT_POP_SECTION (asm_out_file);
6457
6458   /* Output a terminator label for the .text section.  */
6459
6460   fputc ('\n', asm_out_file);
6461   ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION);
6462   ASM_OUTPUT_LABEL (asm_out_file, TEXT_END_LABEL);
6463   ASM_OUTPUT_POP_SECTION (asm_out_file);
6464
6465   /* Output a terminator label for the .data section.  */
6466
6467   fputc ('\n', asm_out_file);
6468   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION);
6469   ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL);
6470   ASM_OUTPUT_POP_SECTION (asm_out_file);
6471
6472 #if 0 /* GNU C doesn't currently use .data1.  */
6473   /* Output a terminator label for the .data1 section.  */
6474
6475   fputc ('\n', asm_out_file);
6476   ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION);
6477   ASM_OUTPUT_LABEL (asm_out_file, DATA1_END_LABEL);
6478   ASM_OUTPUT_POP_SECTION (asm_out_file);
6479 #endif
6480
6481   /* Output a terminator label for the .rodata section.  */
6482
6483   fputc ('\n', asm_out_file);
6484   ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION);
6485   ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL);
6486   ASM_OUTPUT_POP_SECTION (asm_out_file);
6487
6488 #if 0 /* GNU C doesn't currently use .rodata1.  */
6489   /* Output a terminator label for the .rodata1 section.  */
6490
6491   fputc ('\n', asm_out_file);
6492   ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION);
6493   ASM_OUTPUT_LABEL (asm_out_file, RODATA1_END_LABEL);
6494   ASM_OUTPUT_POP_SECTION (asm_out_file);
6495 #endif
6496
6497   /* Output a terminator label for the .bss section.  */
6498
6499   fputc ('\n', asm_out_file);
6500   ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION);
6501   ASM_OUTPUT_LABEL (asm_out_file, BSS_END_LABEL);
6502   ASM_OUTPUT_POP_SECTION (asm_out_file);
6503
6504   if (debug_info_level >= DINFO_LEVEL_NORMAL)
6505     {
6506       /* Output a terminating entry for the .line section.  */
6507     
6508       fputc ('\n', asm_out_file);
6509       ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6510       ASM_OUTPUT_LABEL (asm_out_file, LINE_LAST_ENTRY_LABEL);
6511       ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6512       ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
6513       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6514       ASM_OUTPUT_LABEL (asm_out_file, LINE_END_LABEL);
6515       ASM_OUTPUT_POP_SECTION (asm_out_file);
6516     
6517       if (use_gnu_debug_info_extensions)
6518         {
6519           /* Output a terminating entry for the .debug_srcinfo section.  */
6520
6521           fputc ('\n', asm_out_file);
6522           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SRCINFO_SECTION);
6523           ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
6524                                    LINE_LAST_ENTRY_LABEL, LINE_BEGIN_LABEL);
6525           ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
6526           ASM_OUTPUT_POP_SECTION (asm_out_file);
6527         }
6528
6529       if (debug_info_level >= DINFO_LEVEL_VERBOSE)
6530         {
6531           /* Output terminating entries for the .debug_macinfo section.  */
6532         
6533           dwarfout_end_source_file (0);
6534
6535           fputc ('\n', asm_out_file);
6536           ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_MACINFO_SECTION);
6537           ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6538           ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
6539           ASM_OUTPUT_POP_SECTION (asm_out_file);
6540         }
6541     
6542       /* Generate the terminating entry for the .debug_pubnames section.  */
6543     
6544       fputc ('\n', asm_out_file);
6545       ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_PUBNAMES_SECTION);
6546       ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6547       ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
6548       ASM_OUTPUT_POP_SECTION (asm_out_file);
6549     
6550       /* Generate the terminating entries for the .debug_aranges section.
6551
6552          Note that we want to do this only *after* we have output the end
6553          labels (for the various program sections) which we are going to
6554          refer to here.  This allows us to work around a bug in the m68k
6555          svr4 assembler.  That assembler gives bogus assembly-time errors
6556          if (within any given section) you try to take the difference of
6557          two relocatable symbols, both of which are located within some
6558          other section, and if one (or both?) of the symbols involved is
6559          being forward-referenced.  By generating the .debug_aranges
6560          entries at this late point in the assembly output, we skirt the
6561          issue simply by avoiding forward-references.
6562       */
6563     
6564       fputc ('\n', asm_out_file);
6565       ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_ARANGES_SECTION);
6566
6567       ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6568       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6569
6570       ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA_BEGIN_LABEL);
6571       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA_END_LABEL, DATA_BEGIN_LABEL);
6572
6573 #if 0 /* GNU C doesn't currently use .data1.  */
6574       ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA1_BEGIN_LABEL);
6575       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA1_END_LABEL,
6576                                              DATA1_BEGIN_LABEL);
6577 #endif
6578
6579       ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA_BEGIN_LABEL);
6580       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA_END_LABEL,
6581                                              RODATA_BEGIN_LABEL);
6582
6583 #if 0 /* GNU C doesn't currently use .rodata1.  */
6584       ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA1_BEGIN_LABEL);
6585       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA1_END_LABEL,
6586                                              RODATA1_BEGIN_LABEL);
6587 #endif
6588
6589       ASM_OUTPUT_DWARF_ADDR (asm_out_file, BSS_BEGIN_LABEL);
6590       ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, BSS_END_LABEL, BSS_BEGIN_LABEL);
6591
6592       ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6593       ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6594
6595       ASM_OUTPUT_LABEL (asm_out_file, DEBUG_ARANGES_END_LABEL);
6596       ASM_OUTPUT_POP_SECTION (asm_out_file);
6597     }
6598
6599   /* There should not be any pending types left at the end.  We need
6600      this now because it may not have been checked on the last call to
6601      dwarfout_file_scope_decl.  */
6602   if (pending_types != 0)
6603     abort ();
6604 }
6605
6606 #endif /* DWARF_DEBUGGING_INFO */