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