OSDN Git Service

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