allow all arm targets to use -mstructure-size-boundary=XX
[official-gcc.git] / gcc / dwarfout.c
blobd8ddfb09939c6fca71d58c6f29f1b69e68b92c52
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.
5 This file is part of GNU CC.
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.
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.
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. */
22 #include "config.h"
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"
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) */
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
53 /* IMPORTANT NOTE: Please see the file README.DWARF for important details
54 regarding the GNU implementation of Dwarf. */
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. */
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. */
64 /* How to start an assembler comment. */
65 #ifndef ASM_COMMENT_START
66 #define ASM_COMMENT_START ";#"
67 #endif
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
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.
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.
90 #define TYPE_USED_FOR_FUNCTION(tagged_type) (TYPE_SIZE (tagged_type) == 0)
92 /* Define a macro which returns non-zero for a TYPE_DECL which was
93 implicitly generated for a tagged type.
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))))
107 extern int flag_traditional;
108 extern char *version_string;
110 /* Maximum size (in bytes) of an artificially generated label. */
112 #define MAX_ARTIFICIAL_LABEL_BYTES 30
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. */
119 #ifndef CHAR_TYPE_SIZE
120 #define CHAR_TYPE_SIZE BITS_PER_UNIT
121 #endif
123 #ifndef SHORT_TYPE_SIZE
124 #define SHORT_TYPE_SIZE (BITS_PER_UNIT * 2)
125 #endif
127 #ifndef INT_TYPE_SIZE
128 #define INT_TYPE_SIZE BITS_PER_WORD
129 #endif
131 #ifndef LONG_TYPE_SIZE
132 #define LONG_TYPE_SIZE BITS_PER_WORD
133 #endif
135 #ifndef LONG_LONG_TYPE_SIZE
136 #define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
137 #endif
139 #ifndef WCHAR_TYPE_SIZE
140 #define WCHAR_TYPE_SIZE INT_TYPE_SIZE
141 #endif
143 #ifndef WCHAR_UNSIGNED
144 #define WCHAR_UNSIGNED 0
145 #endif
147 #ifndef FLOAT_TYPE_SIZE
148 #define FLOAT_TYPE_SIZE BITS_PER_WORD
149 #endif
151 #ifndef DOUBLE_TYPE_SIZE
152 #define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
153 #endif
155 #ifndef LONG_DOUBLE_TYPE_SIZE
156 #define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
157 #endif
159 /* Structure to keep track of source filenames. */
161 struct filename_entry {
162 unsigned number;
163 char * name;
166 typedef struct filename_entry filename_entry;
168 /* Pointer to an array of elements, each one having the structure above. */
170 static filename_entry *filename_table;
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. */
176 static unsigned ft_entries_allocated;
178 /* Number of entries in the filename_table which are actually in use. */
180 static unsigned ft_entries;
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. */
186 #define FT_ENTRIES_INCREMENT 64
188 /* Local pointer to the name of the main input file. Initialized in
189 dwarfout_init. */
191 static char *primary_filename;
193 /* Pointer to the most recent filename for which we produced some line info. */
195 static char *last_filename;
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. */
205 static unsigned next_block_number = 2;
207 /* Counter to generate unique names for DIEs. */
209 static unsigned next_unused_dienum = 1;
211 /* Number of the DIE which is currently being generated. */
213 static unsigned current_dienum;
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. */
219 static int next_pubname_number = 0;
221 #define NEXT_DIE_NUM pending_sibling_stack[pending_siblings-1]
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. */
226 static unsigned *pending_sibling_stack;
228 /* Counter to keep track of the number of pre-reserved and still pending
229 sibling DIE numbers. */
231 static unsigned pending_siblings;
233 /* The currently allocated size of the above list (expressed in number of
234 list elements). */
236 static unsigned pending_siblings_allocated;
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. */
242 #define PENDING_SIBLINGS_INCREMENT 64
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. */
248 static int finalizing = 0;
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. */
254 static tree *pending_types_list;
256 /* Number of elements currently allocated for the pending_types_list. */
258 static unsigned pending_types_allocated;
260 /* Number of elements of pending_types_list currently in use. */
262 static unsigned pending_types;
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. */
268 #define PENDING_TYPES_INCREMENT 64
270 /* A pointer to the base of a list of incomplete types which might be
271 completed at some later time. */
273 static tree *incomplete_types_list;
275 /* Number of elements currently allocated for the incomplete_types_list. */
276 static unsigned incomplete_types_allocated;
278 /* Number of elements of incomplete_types_list currently in use. */
279 static unsigned incomplete_types;
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
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. */
292 static tree fake_containing_scope;
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. */
300 static unsigned current_funcdef_number = 1;
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. */
307 static tree dwarf_last_decl;
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. */
313 static int in_class;
315 /* Forward declarations for functions defined in this file. */
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));
452 /* Definitions of defaults for assembler-dependent names of various
453 pseudo-ops and section names.
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. */
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
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. */
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
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.) */
498 #ifndef PUSHSECTION_FORMAT
499 #define PUSHSECTION_FORMAT "\t%s\t%s\n"
500 #endif
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
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.
546 If necessary, these may be overridden from within your tm.h file,
547 but typically, you should never need to override these.
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
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
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
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
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
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
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
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
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
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
710 /* Definitions of defaults for various types of primitive assembly language
711 output operations.
713 If necessary, these may be overridden from within your tm.h file,
714 but typically, you shouldn't need to override these. */
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
721 #ifndef ASM_OUTPUT_POP_SECTION
722 #define ASM_OUTPUT_POP_SECTION(FILE) \
723 fprintf ((FILE), "\t%s\n", POPSECTION_ASM_OP)
724 #endif
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
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
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
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
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
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
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
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
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
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
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
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
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
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
855 #ifndef ASM_OUTPUT_DWARF_DATA8
856 #define ASM_OUTPUT_DWARF_DATA8(FILE,HIGH_VALUE,LOW_VALUE) \
857 do { \
858 if (WORDS_BIG_ENDIAN) \
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);\
863 else \
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); \
868 } while (0)
869 #endif
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 */
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
886 /************************ general utility functions **************************/
888 inline static int
889 is_pseudo_reg (rtl)
890 register rtx rtl;
892 return (((GET_CODE (rtl) == REG) && (REGNO (rtl) >= FIRST_PSEUDO_REGISTER))
893 || ((GET_CODE (rtl) == SUBREG)
894 && (REGNO (XEXP (rtl, 0)) >= FIRST_PSEUDO_REGISTER)));
897 inline static tree
898 type_main_variant (type)
899 register tree type;
901 type = TYPE_MAIN_VARIANT (type);
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. */
908 if (TREE_CODE (type) == ARRAY_TYPE)
910 while (type != TYPE_MAIN_VARIANT (type))
911 type = TYPE_MAIN_VARIANT (type);
914 return type;
917 /* Return non-zero if the given type node represents a tagged type. */
919 inline static int
920 is_tagged_type (type)
921 register tree type;
923 register enum tree_code code = TREE_CODE (type);
925 return (code == RECORD_TYPE || code == UNION_TYPE
926 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
929 static const char *
930 dwarf_tag_name (tag)
931 register unsigned tag;
933 switch (tag)
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";
968 /* GNU extensions. */
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";
975 default: return "TAG_<unknown>";
979 static const char *
980 dwarf_attr_name (attr)
981 register unsigned attr;
983 switch (attr)
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";
1044 /* GNU extensions */
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";
1053 default: return "AT_<unknown>";
1057 static const char *
1058 dwarf_stack_op_name (op)
1059 register unsigned op;
1061 switch (op)
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>";
1074 static const char *
1075 dwarf_typemod_name (mod)
1076 register unsigned mod;
1078 switch (mod)
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>";
1088 static const char *
1089 dwarf_fmt_byte_name (fmt)
1090 register unsigned fmt;
1092 switch (fmt)
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>";
1107 static const char *
1108 dwarf_fund_type_name (ft)
1109 register unsigned ft;
1111 switch (ft)
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";
1136 /* GNU extensions. */
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";
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";
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";
1160 default: return "FT_<unknown>";
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. */
1170 static tree
1171 decl_ultimate_origin (decl)
1172 register tree decl;
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
1181 return DECL_ABSTRACT_ORIGIN (decl);
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. */
1190 static tree
1191 block_ultimate_origin (block)
1192 register tree block;
1194 register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
1196 if (immediate_origin == NULL)
1197 return NULL;
1198 else
1200 register tree ret_val;
1201 register tree lookahead = immediate_origin;
1205 ret_val = lookahead;
1206 lookahead = (TREE_CODE (ret_val) == BLOCK)
1207 ? BLOCK_ABSTRACT_ORIGIN (ret_val)
1208 : NULL;
1210 while (lookahead != NULL && lookahead != ret_val);
1211 return ret_val;
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. */
1219 static tree
1220 decl_class_context (decl)
1221 tree decl;
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)))));
1230 if (context && TREE_CODE_CLASS (TREE_CODE (context)) != 't')
1231 context = NULL_TREE;
1233 return context;
1236 #if 0
1237 static void
1238 output_unsigned_leb128 (value)
1239 register unsigned long value;
1241 register unsigned long orig_value = value;
1245 register unsigned byte = (value & 0x7f);
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);
1256 while (value != 0);
1259 static void
1260 output_signed_leb128 (value)
1261 register long value;
1263 register long orig_value = value;
1264 register int negative = (value < 0);
1265 register int more;
1269 register unsigned byte = (value & 0x7f);
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
1279 byte |= 0x80;
1280 more = 1;
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);
1288 while (more);
1290 #endif
1292 /**************** utility functions for attribute functions ******************/
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.
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.
1306 static inline int
1307 is_body_block (stmt)
1308 register tree stmt;
1310 if (TREE_CODE (stmt) == BLOCK)
1312 register tree parent = BLOCK_SUPERCONTEXT (stmt);
1314 if (TREE_CODE (parent) == BLOCK)
1316 register tree grandparent = BLOCK_SUPERCONTEXT (parent);
1318 if (TREE_CODE (grandparent) == FUNCTION_DECL)
1319 return 1;
1322 return 0;
1325 /* Given a pointer to a tree node for some type, return a Dwarf fundamental
1326 type code for the given type.
1328 This routine must only be called for GCC type nodes that correspond to
1329 Dwarf fundamental types.
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:
1338 typedef signed int my_type;
1340 struct s { my_type f; };
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. */
1349 static int
1350 fundamental_type_code (type)
1351 register tree type;
1353 if (TREE_CODE (type) == ERROR_MARK)
1354 return 0;
1356 switch (TREE_CODE (type))
1358 case ERROR_MARK:
1359 return FT_void;
1361 case VOID_TYPE:
1362 return FT_void;
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)
1374 const char *name =
1375 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
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 */
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. */
1401 if (TYPE_PRECISION (type) == INT_TYPE_SIZE)
1402 return (TREE_UNSIGNED (type) ? FT_unsigned_integer : FT_integer);
1404 if (TYPE_PRECISION (type) == LONG_TYPE_SIZE)
1405 return (TREE_UNSIGNED (type) ? FT_unsigned_long : FT_long);
1407 if (TYPE_PRECISION (type) == LONG_LONG_TYPE_SIZE)
1408 return (TREE_UNSIGNED (type) ? FT_unsigned_long_long : FT_long_long);
1410 if (TYPE_PRECISION (type) == SHORT_TYPE_SIZE)
1411 return (TREE_UNSIGNED (type) ? FT_unsigned_short : FT_short);
1413 if (TYPE_PRECISION (type) == CHAR_TYPE_SIZE)
1414 return (TREE_UNSIGNED (type) ? FT_unsigned_char : FT_char);
1416 /* In C++, __java_boolean is an INTEGER_TYPE with precision == 1 */
1417 if (TYPE_PRECISION (type) == 1)
1418 return FT_boolean;
1420 abort ();
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)
1430 const char *name =
1431 IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
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). */
1437 if (!strcmp (name, "long double"))
1438 return FT_ext_prec_float;
1441 if (TYPE_PRECISION (type) == DOUBLE_TYPE_SIZE)
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;
1452 if (TYPE_PRECISION (type) == FLOAT_TYPE_SIZE)
1453 return FT_float;
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). */
1459 if (TYPE_PRECISION (type) == LONG_DOUBLE_TYPE_SIZE)
1460 return FT_ext_prec_float;
1461 abort ();
1463 case COMPLEX_TYPE:
1464 return FT_complex; /* GNU FORTRAN COMPLEX type. */
1466 case CHAR_TYPE:
1467 return FT_char; /* GNU Pascal CHAR type. Not used in C. */
1469 case BOOLEAN_TYPE:
1470 return FT_boolean; /* GNU FORTRAN BOOLEAN type. */
1472 default:
1473 abort (); /* No other TREE_CODEs are Dwarf fundamental types. */
1475 return 0;
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. */
1488 static tree
1489 root_type_1 (type, count)
1490 register tree type;
1491 register int count;
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;
1499 switch (TREE_CODE (type))
1501 case ERROR_MARK:
1502 return error_mark_node;
1504 case POINTER_TYPE:
1505 case REFERENCE_TYPE:
1506 return root_type_1 (TREE_TYPE (type), count+1);
1508 default:
1509 return type;
1513 static tree
1514 root_type (type)
1515 register tree type;
1517 type = root_type_1 (type, 0);
1518 if (type != error_mark_node)
1519 type = type_main_variant (type);
1520 return type;
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. */
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;
1533 if (TREE_CODE (type) == ERROR_MARK)
1534 return;
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;
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))
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;
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;
1558 case ERROR_MARK:
1559 default:
1560 return;
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;
1570 write_modifier_bytes_1 (type, decl_const, decl_volatile, 0);
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. */
1576 static inline int
1577 type_is_fundamental (type)
1578 register tree type;
1580 switch (TREE_CODE (type))
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;
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;
1606 default:
1607 abort ();
1609 return 0;
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.
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.
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. */
1625 static void
1626 equate_decl_number_to_die_number (decl)
1627 register tree decl;
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. */
1636 char decl_label[MAX_ARTIFICIAL_LABEL_BYTES];
1637 char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
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);
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.
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.
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. */
1657 static inline void
1658 equate_type_number_to_die_number (type)
1659 register tree type;
1661 char type_label[MAX_ARTIFICIAL_LABEL_BYTES];
1662 char die_label[MAX_ARTIFICIAL_LABEL_BYTES];
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. */
1669 type = type_main_variant (type);
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);
1676 static void
1677 output_reg_number (rtl)
1678 register rtx rtl;
1680 register unsigned regno = REGNO (rtl);
1682 if (regno >= FIRST_PSEUDO_REGISTER)
1684 warning_with_decl (dwarf_last_decl, "internal regno botch: regno = %d\n",
1685 regno);
1686 regno = 0;
1688 fprintf (asm_out_file, "\t%s\t0x%x",
1689 UNALIGNED_INT_ASM_OP, DBX_REGISTER_NUMBER (regno));
1690 if (flag_debug_asm)
1692 fprintf (asm_out_file, "\t%s ", ASM_COMMENT_START);
1693 PRINT_REG (rtl, 0, asm_out_file);
1695 fputc ('\n', asm_out_file);
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.
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. */
1708 static void
1709 output_mem_loc_descriptor (rtl)
1710 register rtx rtl;
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. */
1717 switch (GET_CODE (rtl))
1719 case SUBREG:
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. */
1727 rtl = XEXP (rtl, 0);
1728 /* Drop thru. */
1730 case REG:
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.
1740 Note that in cases where the location of a memory-resident data
1741 object could be expressed as:
1743 OP_ADD (OP_BASEREG (basereg), OP_CONST (0))
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. */
1751 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_BASEREG);
1752 output_reg_number (rtl);
1753 break;
1755 case MEM:
1756 output_mem_loc_descriptor (XEXP (rtl, 0));
1757 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_DEREF4);
1758 break;
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;
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;
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;
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;
1786 default:
1787 abort ();
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. */
1797 static void
1798 output_loc_descriptor (rtl)
1799 register rtx rtl;
1801 switch (GET_CODE (rtl))
1803 case SUBREG:
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. */
1811 rtl = XEXP (rtl, 0);
1812 /* Drop thru. */
1814 case REG:
1815 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_REG);
1816 output_reg_number (rtl);
1817 break;
1819 case MEM:
1820 output_mem_loc_descriptor (XEXP (rtl, 0));
1821 break;
1823 default:
1824 abort (); /* Should never happen */
1828 /* Given a tree node describing an array bound (either lower or upper)
1829 output a representation for that bound. */
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. */
1837 switch (TREE_CODE (bound))
1840 case ERROR_MARK:
1841 return;
1843 /* All fixed-bounds are represented by INTEGER_CST nodes. */
1845 case INTEGER_CST:
1846 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
1847 (unsigned) TREE_INT_CST_LOW (bound));
1848 break;
1850 default:
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. */
1856 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
1857 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
1859 sprintf (begin_label, BOUND_BEGIN_LABEL_FMT,
1860 current_dienum, dim_num, u_or_l);
1862 sprintf (end_label, BOUND_END_LABEL_FMT,
1863 current_dienum, dim_num, u_or_l);
1865 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
1866 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
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.
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.
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.
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. */
1892 if (! optimize)
1894 while (TREE_CODE (bound) == NOP_EXPR
1895 || TREE_CODE (bound) == CONVERT_EXPR)
1896 bound = TREE_OPERAND (bound, 0);
1898 if (TREE_CODE (bound) == SAVE_EXPR)
1899 output_loc_descriptor
1900 (eliminate_regs (SAVE_EXPR_RTL (bound), 0, NULL_RTX));
1903 ASM_OUTPUT_LABEL (asm_out_file, end_label);
1905 break;
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. */
1914 static void
1915 output_enumeral_list (link)
1916 register tree link;
1918 if (link)
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)));
1928 /* Given an unsigned value, round it up to the lowest multiple of `boundary'
1929 which is not less than the value itself. */
1931 static inline unsigned
1932 ceiling (value, boundary)
1933 register unsigned value;
1934 register unsigned boundary;
1936 return (((value + boundary - 1) / boundary) * boundary);
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. */
1943 static inline tree
1944 field_type (decl)
1945 register tree decl;
1947 register tree type;
1949 if (TREE_CODE (decl) == ERROR_MARK)
1950 return integer_type_node;
1952 type = DECL_BIT_FIELD_TYPE (decl);
1953 if (type == NULL)
1954 type = TREE_TYPE (decl);
1955 return type;
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. */
1962 static inline unsigned
1963 simple_type_align_in_bits (type)
1964 register tree type;
1966 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
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. */
1975 static inline unsigned
1976 simple_type_size_in_bits (type)
1977 register tree type;
1979 if (TREE_CODE (type) == ERROR_MARK)
1980 return BITS_PER_WORD;
1981 else
1983 register tree type_size_tree = TYPE_SIZE (type);
1985 if (TREE_CODE (type_size_tree) != INTEGER_CST)
1986 return TYPE_ALIGN (type);
1988 return (unsigned) TREE_INT_CST_LOW (type_size_tree);
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.) */
1999 static unsigned
2000 field_byte_offset (decl)
2001 register tree decl;
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;
2016 if (TREE_CODE (decl) == ERROR_MARK)
2017 return 0;
2019 if (TREE_CODE (decl) != FIELD_DECL)
2020 abort ();
2022 type = field_type (decl);
2024 bitpos_tree = DECL_FIELD_BITPOS (decl);
2025 field_size_tree = DECL_SIZE (decl);
2027 /* We cannot yet cope with fields whose positions or sizes are variable,
2028 so for now, when we see such things, we simply return 0. Someday,
2029 we may be able to handle such cases, but it will be damn difficult. */
2031 if (TREE_CODE (bitpos_tree) != INTEGER_CST)
2032 return 0;
2033 bitpos_int = (unsigned) TREE_INT_CST_LOW (bitpos_tree);
2035 if (TREE_CODE (field_size_tree) != INTEGER_CST)
2036 return 0;
2037 field_size_in_bits = (unsigned) TREE_INT_CST_LOW (field_size_tree);
2039 type_size_in_bits = simple_type_size_in_bits (type);
2041 type_align_in_bits = simple_type_align_in_bits (type);
2042 type_align_in_bytes = type_align_in_bits / BITS_PER_UNIT;
2044 /* Note that the GCC front-end doesn't make any attempt to keep track
2045 of the starting bit offset (relative to the start of the containing
2046 structure type) of the hypothetical "containing object" for a bit-
2047 field. Thus, when computing the byte offset value for the start of
2048 the "containing object" of a bit-field, we must deduce this infor-
2049 mation on our own.
2051 This can be rather tricky to do in some cases. For example, handling
2052 the following structure type definition when compiling for an i386/i486
2053 target (which only aligns long long's to 32-bit boundaries) can be very
2054 tricky:
2056 struct S {
2057 int field1;
2058 long long field2:31;
2061 Fortunately, there is a simple rule-of-thumb which can be used in such
2062 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for
2063 the structure shown above. It decides to do this based upon one simple
2064 rule for bit-field allocation. Quite simply, GCC allocates each "con-
2065 taining object" for each bit-field at the first (i.e. lowest addressed)
2066 legitimate alignment boundary (based upon the required minimum alignment
2067 for the declared type of the field) which it can possibly use, subject
2068 to the condition that there is still enough available space remaining
2069 in the containing object (when allocated at the selected point) to
2070 fully accommodate all of the bits of the bit-field itself.
2072 This simple rule makes it obvious why GCC allocates 8 bytes for each
2073 object of the structure type shown above. When looking for a place to
2074 allocate the "containing object" for `field2', the compiler simply tries
2075 to allocate a 64-bit "containing object" at each successive 32-bit
2076 boundary (starting at zero) until it finds a place to allocate that 64-
2077 bit field such that at least 31 contiguous (and previously unallocated)
2078 bits remain within that selected 64 bit field. (As it turns out, for
2079 the example above, the compiler finds that it is OK to allocate the
2080 "containing object" 64-bit field at bit-offset zero within the
2081 structure type.)
2083 Here we attempt to work backwards from the limited set of facts we're
2084 given, and we try to deduce from those facts, where GCC must have
2085 believed that the containing object started (within the structure type).
2087 The value we deduce is then used (by the callers of this routine) to
2088 generate AT_location and AT_bit_offset attributes for fields (both
2089 bit-fields and, in the case of AT_location, regular fields as well).
2092 /* Figure out the bit-distance from the start of the structure to the
2093 "deepest" bit of the bit-field. */
2094 deepest_bitpos = bitpos_int + field_size_in_bits;
2096 /* This is the tricky part. Use some fancy footwork to deduce where the
2097 lowest addressed bit of the containing object must be. */
2098 object_offset_in_bits
2099 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2101 /* Compute the offset of the containing object in "alignment units". */
2102 object_offset_in_align_units = object_offset_in_bits / type_align_in_bits;
2104 /* Compute the offset of the containing object in bytes. */
2105 object_offset_in_bytes = object_offset_in_align_units * type_align_in_bytes;
2107 /* The above code assumes that the field does not cross an alignment
2108 boundary. This can happen if PCC_BITFIELD_TYPE_MATTERS is not defined,
2109 or if the structure is packed. If this happens, then we get an object
2110 which starts after the bitfield, which means that the bit offset is
2111 negative. Gdb fails when given negative bit offsets. We avoid this
2112 by recomputing using the first bit of the bitfield. This will give
2113 us an object which does not completely contain the bitfield, but it
2114 will be aligned, and it will contain the first bit of the bitfield.
2116 However, only do this for a BYTES_BIG_ENDIAN target. For a
2117 ! BYTES_BIG_ENDIAN target, bitpos_int + field_size_in_bits is the first
2118 first bit of the bitfield. If we recompute using bitpos_int + 1 below,
2119 then we end up computing the object byte offset for the wrong word of the
2120 desired bitfield, which in turn causes the field offset to be negative
2121 in bit_offset_attribute. */
2122 if (BYTES_BIG_ENDIAN
2123 && object_offset_in_bits > bitpos_int)
2125 deepest_bitpos = bitpos_int + 1;
2126 object_offset_in_bits
2127 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
2128 object_offset_in_align_units = (object_offset_in_bits
2129 / type_align_in_bits);
2130 object_offset_in_bytes = (object_offset_in_align_units
2131 * type_align_in_bytes);
2134 return object_offset_in_bytes;
2137 /****************************** attributes *********************************/
2139 /* The following routines are responsible for writing out the various types
2140 of Dwarf attributes (and any following data bytes associated with them).
2141 These routines are listed in order based on the numerical codes of their
2142 associated attributes. */
2144 /* Generate an AT_sibling attribute. */
2146 static inline void
2147 sibling_attribute ()
2149 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2151 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sibling);
2152 sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
2153 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
2156 /* Output the form of location attributes suitable for whole variables and
2157 whole parameters. Note that the location attributes for struct fields
2158 are generated by the routine `data_member_location_attribute' below. */
2160 static void
2161 location_attribute (rtl)
2162 register rtx rtl;
2164 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2165 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2167 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2168 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2169 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2170 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2171 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2173 /* Handle a special case. If we are about to output a location descriptor
2174 for a variable or parameter which has been optimized out of existence,
2175 don't do that. Instead we output a zero-length location descriptor
2176 value as part of the location attribute.
2178 A variable which has been optimized out of existence will have a
2179 DECL_RTL value which denotes a pseudo-reg.
2181 Currently, in some rare cases, variables can have DECL_RTL values
2182 which look like (MEM (REG pseudo-reg#)). These cases are due to
2183 bugs elsewhere in the compiler. We treat such cases
2184 as if the variable(s) in question had been optimized out of existence.
2186 Note that in all cases where we wish to express the fact that a
2187 variable has been optimized out of existence, we do not simply
2188 suppress the generation of the entire location attribute because
2189 the absence of a location attribute in certain kinds of DIEs is
2190 used to indicate something else entirely... i.e. that the DIE
2191 represents an object declaration, but not a definition. So saith
2192 the PLSIG.
2195 if (! is_pseudo_reg (rtl)
2196 && (GET_CODE (rtl) != MEM || ! is_pseudo_reg (XEXP (rtl, 0))))
2197 output_loc_descriptor (rtl);
2199 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2202 /* Output the specialized form of location attribute used for data members
2203 of struct and union types.
2205 In the special case of a FIELD_DECL node which represents a bit-field,
2206 the "offset" part of this special location descriptor must indicate the
2207 distance in bytes from the lowest-addressed byte of the containing
2208 struct or union type to the lowest-addressed byte of the "containing
2209 object" for the bit-field. (See the `field_byte_offset' function above.)
2211 For any given bit-field, the "containing object" is a hypothetical
2212 object (of some integral or enum type) within which the given bit-field
2213 lives. The type of this hypothetical "containing object" is always the
2214 same as the declared type of the individual bit-field itself (for GCC
2215 anyway... the DWARF spec doesn't actually mandate this).
2217 Note that it is the size (in bytes) of the hypothetical "containing
2218 object" which will be given in the AT_byte_size attribute for this
2219 bit-field. (See the `byte_size_attribute' function below.) It is
2220 also used when calculating the value of the AT_bit_offset attribute.
2221 (See the `bit_offset_attribute' function below.) */
2223 static void
2224 data_member_location_attribute (t)
2225 register tree t;
2227 register unsigned object_offset_in_bytes;
2228 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2229 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2231 if (TREE_CODE (t) == TREE_VEC)
2232 object_offset_in_bytes = TREE_INT_CST_LOW (BINFO_OFFSET (t));
2233 else
2234 object_offset_in_bytes = field_byte_offset (t);
2236 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_location);
2237 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2238 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2239 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2240 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2241 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_CONST);
2242 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, object_offset_in_bytes);
2243 ASM_OUTPUT_DWARF_STACK_OP (asm_out_file, OP_ADD);
2244 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2247 /* Output an AT_const_value attribute for a variable or a parameter which
2248 does not have a "location" either in memory or in a register. These
2249 things can arise in GNU C when a constant is passed as an actual
2250 parameter to an inlined function. They can also arise in C++ where
2251 declared constants do not necessarily get memory "homes". */
2253 static void
2254 const_value_attribute (rtl)
2255 register rtx rtl;
2257 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2258 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2260 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_const_value_block4);
2261 sprintf (begin_label, LOC_BEGIN_LABEL_FMT, current_dienum);
2262 sprintf (end_label, LOC_END_LABEL_FMT, current_dienum);
2263 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
2264 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2266 switch (GET_CODE (rtl))
2268 case CONST_INT:
2269 /* Note that a CONST_INT rtx could represent either an integer or
2270 a floating-point constant. A CONST_INT is used whenever the
2271 constant will fit into a single word. In all such cases, the
2272 original mode of the constant value is wiped out, and the
2273 CONST_INT rtx is assigned VOIDmode. Since we no longer have
2274 precise mode information for these constants, we always just
2275 output them using 4 bytes. */
2277 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, (unsigned) INTVAL (rtl));
2278 break;
2280 case CONST_DOUBLE:
2281 /* Note that a CONST_DOUBLE rtx could represent either an integer
2282 or a floating-point constant. A CONST_DOUBLE is used whenever
2283 the constant requires more than one word in order to be adequately
2284 represented. In all such cases, the original mode of the constant
2285 value is preserved as the mode of the CONST_DOUBLE rtx, but for
2286 simplicity we always just output CONST_DOUBLEs using 8 bytes. */
2288 ASM_OUTPUT_DWARF_DATA8 (asm_out_file,
2289 (unsigned HOST_WIDE_INT) CONST_DOUBLE_HIGH (rtl),
2290 (unsigned HOST_WIDE_INT) CONST_DOUBLE_LOW (rtl));
2291 break;
2293 case CONST_STRING:
2294 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, XSTR (rtl, 0));
2295 break;
2297 case SYMBOL_REF:
2298 case LABEL_REF:
2299 case CONST:
2300 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, rtl);
2301 break;
2303 case PLUS:
2304 /* In cases where an inlined instance of an inline function is passed
2305 the address of an `auto' variable (which is local to the caller)
2306 we can get a situation where the DECL_RTL of the artificial
2307 local variable (for the inlining) which acts as a stand-in for
2308 the corresponding formal parameter (of the inline function)
2309 will look like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).
2310 This is not exactly a compile-time constant expression, but it
2311 isn't the address of the (artificial) local variable either.
2312 Rather, it represents the *value* which the artificial local
2313 variable always has during its lifetime. We currently have no
2314 way to represent such quasi-constant values in Dwarf, so for now
2315 we just punt and generate an AT_const_value attribute with form
2316 FORM_BLOCK4 and a length of zero. */
2317 break;
2319 default:
2320 abort (); /* No other kinds of rtx should be possible here. */
2323 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2326 /* Generate *either* an AT_location attribute or else an AT_const_value
2327 data attribute for a variable or a parameter. We generate the
2328 AT_const_value attribute only in those cases where the given
2329 variable or parameter does not have a true "location" either in
2330 memory or in a register. This can happen (for example) when a
2331 constant is passed as an actual argument in a call to an inline
2332 function. (It's possible that these things can crop up in other
2333 ways also.) Note that one type of constant value which can be
2334 passed into an inlined function is a constant pointer. This can
2335 happen for example if an actual argument in an inlined function
2336 call evaluates to a compile-time constant address. */
2338 static void
2339 location_or_const_value_attribute (decl)
2340 register tree decl;
2342 register rtx rtl;
2344 if (TREE_CODE (decl) == ERROR_MARK)
2345 return;
2347 if ((TREE_CODE (decl) != VAR_DECL) && (TREE_CODE (decl) != PARM_DECL))
2349 /* Should never happen. */
2350 abort ();
2351 return;
2354 /* Here we have to decide where we are going to say the parameter "lives"
2355 (as far as the debugger is concerned). We only have a couple of choices.
2356 GCC provides us with DECL_RTL and with DECL_INCOMING_RTL. DECL_RTL
2357 normally indicates where the parameter lives during most of the activa-
2358 tion of the function. If optimization is enabled however, this could
2359 be either NULL or else a pseudo-reg. Both of those cases indicate that
2360 the parameter doesn't really live anywhere (as far as the code generation
2361 parts of GCC are concerned) during most of the function's activation.
2362 That will happen (for example) if the parameter is never referenced
2363 within the function.
2365 We could just generate a location descriptor here for all non-NULL
2366 non-pseudo values of DECL_RTL and ignore all of the rest, but we can
2367 be a little nicer than that if we also consider DECL_INCOMING_RTL in
2368 cases where DECL_RTL is NULL or is a pseudo-reg.
2370 Note however that we can only get away with using DECL_INCOMING_RTL as
2371 a backup substitute for DECL_RTL in certain limited cases. In cases
2372 where DECL_ARG_TYPE(decl) indicates the same type as TREE_TYPE(decl)
2373 we can be sure that the parameter was passed using the same type as it
2374 is declared to have within the function, and that its DECL_INCOMING_RTL
2375 points us to a place where a value of that type is passed. In cases
2376 where DECL_ARG_TYPE(decl) and TREE_TYPE(decl) are different types
2377 however, we cannot (in general) use DECL_INCOMING_RTL as a backup
2378 substitute for DECL_RTL because in these cases, DECL_INCOMING_RTL
2379 points us to a value of some type which is *different* from the type
2380 of the parameter itself. Thus, if we tried to use DECL_INCOMING_RTL
2381 to generate a location attribute in such cases, the debugger would
2382 end up (for example) trying to fetch a `float' from a place which
2383 actually contains the first part of a `double'. That would lead to
2384 really incorrect and confusing output at debug-time, and we don't
2385 want that now do we?
2387 So in general, we DO NOT use DECL_INCOMING_RTL as a backup for DECL_RTL
2388 in cases where DECL_ARG_TYPE(decl) != TREE_TYPE(decl). There are a
2389 couple of cute exceptions however. On little-endian machines we can
2390 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE(decl) is
2391 not the same as TREE_TYPE(decl) but only when DECL_ARG_TYPE(decl) is
2392 an integral type which is smaller than TREE_TYPE(decl). These cases
2393 arise when (on a little-endian machine) a non-prototyped function has
2394 a parameter declared to be of type `short' or `char'. In such cases,
2395 TREE_TYPE(decl) will be `short' or `char', DECL_ARG_TYPE(decl) will be
2396 `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
2397 passed `int' value. If the debugger then uses that address to fetch a
2398 `short' or a `char' (on a little-endian machine) the result will be the
2399 correct data, so we allow for such exceptional cases below.
2401 Note that our goal here is to describe the place where the given formal
2402 parameter lives during most of the function's activation (i.e. between
2403 the end of the prologue and the start of the epilogue). We'll do that
2404 as best as we can. Note however that if the given formal parameter is
2405 modified sometime during the execution of the function, then a stack
2406 backtrace (at debug-time) will show the function as having been called
2407 with the *new* value rather than the value which was originally passed
2408 in. This happens rarely enough that it is not a major problem, but it
2409 *is* a problem, and I'd like to fix it. A future version of dwarfout.c
2410 may generate two additional attributes for any given TAG_formal_parameter
2411 DIE which will describe the "passed type" and the "passed location" for
2412 the given formal parameter in addition to the attributes we now generate
2413 to indicate the "declared type" and the "active location" for each
2414 parameter. This additional set of attributes could be used by debuggers
2415 for stack backtraces.
2417 Separately, note that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL
2418 can be NULL also. This happens (for example) for inlined-instances of
2419 inline function formal parameters which are never referenced. This really
2420 shouldn't be happening. All PARM_DECL nodes should get valid non-NULL
2421 DECL_INCOMING_RTL values, but integrate.c doesn't currently generate
2422 these values for inlined instances of inline function parameters, so
2423 when we see such cases, we are just out-of-luck for the time
2424 being (until integrate.c gets fixed).
2427 /* Use DECL_RTL as the "location" unless we find something better. */
2428 rtl = DECL_RTL (decl);
2430 if (TREE_CODE (decl) == PARM_DECL)
2431 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
2433 /* This decl represents a formal parameter which was optimized out. */
2434 register tree declared_type = type_main_variant (TREE_TYPE (decl));
2435 register tree passed_type = type_main_variant (DECL_ARG_TYPE (decl));
2437 /* Note that DECL_INCOMING_RTL may be NULL in here, but we handle
2438 *all* cases where (rtl == NULL_RTX) just below. */
2440 if (declared_type == passed_type)
2441 rtl = DECL_INCOMING_RTL (decl);
2442 else if (! BYTES_BIG_ENDIAN)
2443 if (TREE_CODE (declared_type) == INTEGER_TYPE)
2444 if (TYPE_SIZE (declared_type) <= TYPE_SIZE (passed_type))
2445 rtl = DECL_INCOMING_RTL (decl);
2448 if (rtl == NULL_RTX)
2449 return;
2451 rtl = eliminate_regs (rtl, 0, NULL_RTX);
2452 #ifdef LEAF_REG_REMAP
2453 if (current_function_uses_only_leaf_regs)
2454 leaf_renumber_regs_insn (rtl);
2455 #endif
2457 switch (GET_CODE (rtl))
2459 case ADDRESSOF:
2460 /* The address of a variable that was optimized away; don't emit
2461 anything. */
2462 break;
2464 case CONST_INT:
2465 case CONST_DOUBLE:
2466 case CONST_STRING:
2467 case SYMBOL_REF:
2468 case LABEL_REF:
2469 case CONST:
2470 case PLUS: /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
2471 const_value_attribute (rtl);
2472 break;
2474 case MEM:
2475 case REG:
2476 case SUBREG:
2477 location_attribute (rtl);
2478 break;
2480 case CONCAT:
2481 /* ??? CONCAT is used for complex variables, which may have the real
2482 part stored in one place and the imag part stored somewhere else.
2483 DWARF1 has no way to describe a variable that lives in two different
2484 places, so we just describe where the first part lives, and hope that
2485 the second part is stored after it. */
2486 location_attribute (XEXP (rtl, 0));
2487 break;
2489 default:
2490 abort (); /* Should never happen. */
2494 /* Generate an AT_name attribute given some string value to be included as
2495 the value of the attribute. */
2497 static inline void
2498 name_attribute (name_string)
2499 register const char *name_string;
2501 if (name_string && *name_string)
2503 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_name);
2504 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, name_string);
2508 static inline void
2509 fund_type_attribute (ft_code)
2510 register unsigned ft_code;
2512 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_fund_type);
2513 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, ft_code);
2516 static void
2517 mod_fund_type_attribute (type, decl_const, decl_volatile)
2518 register tree type;
2519 register int decl_const;
2520 register int decl_volatile;
2522 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2523 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2525 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_fund_type);
2526 sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
2527 sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
2528 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2529 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2530 write_modifier_bytes (type, decl_const, decl_volatile);
2531 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
2532 fundamental_type_code (root_type (type)));
2533 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2536 static inline void
2537 user_def_type_attribute (type)
2538 register tree type;
2540 char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
2542 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_user_def_type);
2543 sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (type));
2544 ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
2547 static void
2548 mod_u_d_type_attribute (type, decl_const, decl_volatile)
2549 register tree type;
2550 register int decl_const;
2551 register int decl_volatile;
2553 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2554 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2555 char ud_type_name[MAX_ARTIFICIAL_LABEL_BYTES];
2557 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mod_u_d_type);
2558 sprintf (begin_label, MT_BEGIN_LABEL_FMT, current_dienum);
2559 sprintf (end_label, MT_END_LABEL_FMT, current_dienum);
2560 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2561 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2562 write_modifier_bytes (type, decl_const, decl_volatile);
2563 sprintf (ud_type_name, TYPE_NAME_FMT, TYPE_UID (root_type (type)));
2564 ASM_OUTPUT_DWARF_REF (asm_out_file, ud_type_name);
2565 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2568 #ifdef USE_ORDERING_ATTRIBUTE
2569 static inline void
2570 ordering_attribute (ordering)
2571 register unsigned ordering;
2573 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_ordering);
2574 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, ordering);
2576 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
2578 /* Note that the block of subscript information for an array type also
2579 includes information about the element type of type given array type. */
2581 static void
2582 subscript_data_attribute (type)
2583 register tree type;
2585 register unsigned dimension_number;
2586 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2587 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2589 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_subscr_data);
2590 sprintf (begin_label, SS_BEGIN_LABEL_FMT, current_dienum);
2591 sprintf (end_label, SS_END_LABEL_FMT, current_dienum);
2592 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2593 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2595 /* The GNU compilers represent multidimensional array types as sequences
2596 of one dimensional array types whose element types are themselves array
2597 types. Here we squish that down, so that each multidimensional array
2598 type gets only one array_type DIE in the Dwarf debugging info. The
2599 draft Dwarf specification say that we are allowed to do this kind
2600 of compression in C (because there is no difference between an
2601 array or arrays and a multidimensional array in C) but for other
2602 source languages (e.g. Ada) we probably shouldn't do this. */
2604 for (dimension_number = 0;
2605 TREE_CODE (type) == ARRAY_TYPE;
2606 type = TREE_TYPE (type), dimension_number++)
2608 register tree domain = TYPE_DOMAIN (type);
2610 /* Arrays come in three flavors. Unspecified bounds, fixed
2611 bounds, and (in GNU C only) variable bounds. Handle all
2612 three forms here. */
2614 if (domain)
2616 /* We have an array type with specified bounds. */
2618 register tree lower = TYPE_MIN_VALUE (domain);
2619 register tree upper = TYPE_MAX_VALUE (domain);
2621 /* Handle only fundamental types as index types for now. */
2623 if (! type_is_fundamental (domain))
2624 abort ();
2626 /* Output the representation format byte for this dimension. */
2628 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file,
2629 FMT_CODE (1, TREE_CODE (lower) == INTEGER_CST,
2630 (upper && TREE_CODE (upper) == INTEGER_CST)));
2632 /* Output the index type for this dimension. */
2634 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file,
2635 fundamental_type_code (domain));
2637 /* Output the representation for the lower bound. */
2639 output_bound_representation (lower, dimension_number, 'l');
2641 /* Output the representation for the upper bound. */
2643 output_bound_representation (upper, dimension_number, 'u');
2645 else
2647 /* We have an array type with an unspecified length. For C and
2648 C++ we can assume that this really means that (a) the index
2649 type is an integral type, and (b) the lower bound is zero.
2650 Note that Dwarf defines the representation of an unspecified
2651 (upper) bound as being a zero-length location description. */
2653 /* Output the array-bounds format byte. */
2655 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_FT_C_X);
2657 /* Output the (assumed) index type. */
2659 ASM_OUTPUT_DWARF_FUND_TYPE (asm_out_file, FT_integer);
2661 /* Output the (assumed) lower bound (constant) value. */
2663 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
2665 /* Output the (empty) location description for the upper bound. */
2667 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
2671 /* Output the prefix byte that says that the element type is coming up. */
2673 ASM_OUTPUT_DWARF_FMT_BYTE (asm_out_file, FMT_ET);
2675 /* Output a representation of the type of the elements of this array type. */
2677 type_attribute (type, 0, 0);
2679 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2682 static void
2683 byte_size_attribute (tree_node)
2684 register tree tree_node;
2686 register unsigned size;
2688 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_byte_size);
2689 switch (TREE_CODE (tree_node))
2691 case ERROR_MARK:
2692 size = 0;
2693 break;
2695 case ENUMERAL_TYPE:
2696 case RECORD_TYPE:
2697 case UNION_TYPE:
2698 case QUAL_UNION_TYPE:
2699 case ARRAY_TYPE:
2700 size = int_size_in_bytes (tree_node);
2701 break;
2703 case FIELD_DECL:
2704 /* For a data member of a struct or union, the AT_byte_size is
2705 generally given as the number of bytes normally allocated for
2706 an object of the *declared* type of the member itself. This
2707 is true even for bit-fields. */
2708 size = simple_type_size_in_bits (field_type (tree_node))
2709 / BITS_PER_UNIT;
2710 break;
2712 default:
2713 abort ();
2716 /* Note that `size' might be -1 when we get to this point. If it
2717 is, that indicates that the byte size of the entity in question
2718 is variable. We have no good way of expressing this fact in Dwarf
2719 at the present time, so just let the -1 pass on through. */
2721 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, size);
2724 /* For a FIELD_DECL node which represents a bit-field, output an attribute
2725 which specifies the distance in bits from the highest order bit of the
2726 "containing object" for the bit-field to the highest order bit of the
2727 bit-field itself.
2729 For any given bit-field, the "containing object" is a hypothetical
2730 object (of some integral or enum type) within which the given bit-field
2731 lives. The type of this hypothetical "containing object" is always the
2732 same as the declared type of the individual bit-field itself.
2734 The determination of the exact location of the "containing object" for
2735 a bit-field is rather complicated. It's handled by the `field_byte_offset'
2736 function (above).
2738 Note that it is the size (in bytes) of the hypothetical "containing
2739 object" which will be given in the AT_byte_size attribute for this
2740 bit-field. (See `byte_size_attribute' above.) */
2742 static inline void
2743 bit_offset_attribute (decl)
2744 register tree decl;
2746 register unsigned object_offset_in_bytes = field_byte_offset (decl);
2747 register tree type = DECL_BIT_FIELD_TYPE (decl);
2748 register tree bitpos_tree = DECL_FIELD_BITPOS (decl);
2749 register unsigned bitpos_int;
2750 register unsigned highest_order_object_bit_offset;
2751 register unsigned highest_order_field_bit_offset;
2752 register unsigned bit_offset;
2754 /* Must be a bit field. */
2755 if (!type
2756 || TREE_CODE (decl) != FIELD_DECL)
2757 abort ();
2759 /* We can't yet handle bit-fields whose offsets are variable, so if we
2760 encounter such things, just return without generating any attribute
2761 whatsoever. */
2763 if (TREE_CODE (bitpos_tree) != INTEGER_CST)
2764 return;
2765 bitpos_int = (unsigned) TREE_INT_CST_LOW (bitpos_tree);
2767 /* Note that the bit offset is always the distance (in bits) from the
2768 highest-order bit of the "containing object" to the highest-order
2769 bit of the bit-field itself. Since the "high-order end" of any
2770 object or field is different on big-endian and little-endian machines,
2771 the computation below must take account of these differences. */
2773 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
2774 highest_order_field_bit_offset = bitpos_int;
2776 if (! BYTES_BIG_ENDIAN)
2778 highest_order_field_bit_offset
2779 += (unsigned) TREE_INT_CST_LOW (DECL_SIZE (decl));
2781 highest_order_object_bit_offset += simple_type_size_in_bits (type);
2784 bit_offset =
2785 (! BYTES_BIG_ENDIAN
2786 ? highest_order_object_bit_offset - highest_order_field_bit_offset
2787 : highest_order_field_bit_offset - highest_order_object_bit_offset);
2789 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_offset);
2790 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, bit_offset);
2793 /* For a FIELD_DECL node which represents a bit field, output an attribute
2794 which specifies the length in bits of the given field. */
2796 static inline void
2797 bit_size_attribute (decl)
2798 register tree decl;
2800 /* Must be a field and a bit field. */
2801 if (TREE_CODE (decl) != FIELD_DECL
2802 || ! DECL_BIT_FIELD_TYPE (decl))
2803 abort ();
2805 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_bit_size);
2806 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
2807 (unsigned) TREE_INT_CST_LOW (DECL_SIZE (decl)));
2810 /* The following routine outputs the `element_list' attribute for enumeration
2811 type DIEs. The element_lits attribute includes the names and values of
2812 all of the enumeration constants associated with the given enumeration
2813 type. */
2815 static inline void
2816 element_list_attribute (element)
2817 register tree element;
2819 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2820 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2822 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_element_list);
2823 sprintf (begin_label, EE_BEGIN_LABEL_FMT, current_dienum);
2824 sprintf (end_label, EE_END_LABEL_FMT, current_dienum);
2825 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
2826 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2828 /* Here we output a list of value/name pairs for each enumeration constant
2829 defined for this enumeration type (as required), but we do it in REVERSE
2830 order. The order is the one required by the draft #5 Dwarf specification
2831 published by the UI/PLSIG. */
2833 output_enumeral_list (element); /* Recursively output the whole list. */
2835 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2838 /* Generate an AT_stmt_list attribute. These are normally present only in
2839 DIEs with a TAG_compile_unit tag. */
2841 static inline void
2842 stmt_list_attribute (label)
2843 register const char *label;
2845 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_stmt_list);
2846 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
2847 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
2850 /* Generate an AT_low_pc attribute for a label DIE, a lexical_block DIE or
2851 for a subroutine DIE. */
2853 static inline void
2854 low_pc_attribute (asm_low_label)
2855 register const char *asm_low_label;
2857 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_low_pc);
2858 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_low_label);
2861 /* Generate an AT_high_pc attribute for a lexical_block DIE or for a
2862 subroutine DIE. */
2864 static inline void
2865 high_pc_attribute (asm_high_label)
2866 register const char *asm_high_label;
2868 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_high_pc);
2869 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_high_label);
2872 /* Generate an AT_body_begin attribute for a subroutine DIE. */
2874 static inline void
2875 body_begin_attribute (asm_begin_label)
2876 register const char *asm_begin_label;
2878 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_begin);
2879 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_begin_label);
2882 /* Generate an AT_body_end attribute for a subroutine DIE. */
2884 static inline void
2885 body_end_attribute (asm_end_label)
2886 register const char *asm_end_label;
2888 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_body_end);
2889 ASM_OUTPUT_DWARF_ADDR (asm_out_file, asm_end_label);
2892 /* Generate an AT_language attribute given a LANG value. These attributes
2893 are used only within TAG_compile_unit DIEs. */
2895 static inline void
2896 language_attribute (language_code)
2897 register unsigned language_code;
2899 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_language);
2900 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, language_code);
2903 static inline void
2904 member_attribute (context)
2905 register tree context;
2907 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2909 /* Generate this attribute only for members in C++. */
2911 if (context != NULL && is_tagged_type (context))
2913 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_member);
2914 sprintf (label, TYPE_NAME_FMT, TYPE_UID (context));
2915 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
2919 #if 0
2920 static inline void
2921 string_length_attribute (upper_bound)
2922 register tree upper_bound;
2924 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
2925 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
2927 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_string_length);
2928 sprintf (begin_label, SL_BEGIN_LABEL_FMT, current_dienum);
2929 sprintf (end_label, SL_END_LABEL_FMT, current_dienum);
2930 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, end_label, begin_label);
2931 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
2932 output_bound_representation (upper_bound, 0, 'u');
2933 ASM_OUTPUT_LABEL (asm_out_file, end_label);
2935 #endif
2937 static inline void
2938 comp_dir_attribute (dirname)
2939 register const char *dirname;
2941 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_comp_dir);
2942 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
2945 static inline void
2946 sf_names_attribute (sf_names_start_label)
2947 register const char *sf_names_start_label;
2949 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_sf_names);
2950 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
2951 ASM_OUTPUT_DWARF_ADDR (asm_out_file, sf_names_start_label);
2954 static inline void
2955 src_info_attribute (src_info_start_label)
2956 register const char *src_info_start_label;
2958 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_info);
2959 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
2960 ASM_OUTPUT_DWARF_ADDR (asm_out_file, src_info_start_label);
2963 static inline void
2964 mac_info_attribute (mac_info_start_label)
2965 register const char *mac_info_start_label;
2967 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_mac_info);
2968 /* Don't use ASM_OUTPUT_DWARF_DATA4 here. */
2969 ASM_OUTPUT_DWARF_ADDR (asm_out_file, mac_info_start_label);
2972 static inline void
2973 prototyped_attribute (func_type)
2974 register tree func_type;
2976 if ((strcmp (language_string, "GNU C") == 0)
2977 && (TYPE_ARG_TYPES (func_type) != NULL))
2979 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_prototyped);
2980 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
2984 static inline void
2985 producer_attribute (producer)
2986 register const char *producer;
2988 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_producer);
2989 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, producer);
2992 static inline void
2993 inline_attribute (decl)
2994 register tree decl;
2996 if (DECL_INLINE (decl))
2998 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_inline);
2999 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3003 static inline void
3004 containing_type_attribute (containing_type)
3005 register tree containing_type;
3007 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3009 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_containing_type);
3010 sprintf (label, TYPE_NAME_FMT, TYPE_UID (containing_type));
3011 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3014 static inline void
3015 abstract_origin_attribute (origin)
3016 register tree origin;
3018 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3020 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_abstract_origin);
3021 switch (TREE_CODE_CLASS (TREE_CODE (origin)))
3023 case 'd':
3024 sprintf (label, DECL_NAME_FMT, DECL_UID (origin));
3025 break;
3027 case 't':
3028 sprintf (label, TYPE_NAME_FMT, TYPE_UID (origin));
3029 break;
3031 default:
3032 abort (); /* Should never happen. */
3035 ASM_OUTPUT_DWARF_REF (asm_out_file, label);
3038 #ifdef DWARF_DECL_COORDINATES
3039 static inline void
3040 src_coords_attribute (src_fileno, src_lineno)
3041 register unsigned src_fileno;
3042 register unsigned src_lineno;
3044 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_src_coords);
3045 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_fileno);
3046 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, src_lineno);
3048 #endif /* defined(DWARF_DECL_COORDINATES) */
3050 static inline void
3051 pure_or_virtual_attribute (func_decl)
3052 register tree func_decl;
3054 if (DECL_VIRTUAL_P (func_decl))
3056 #if 0 /* DECL_ABSTRACT_VIRTUAL_P is C++-specific. */
3057 if (DECL_ABSTRACT_VIRTUAL_P (func_decl))
3058 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_pure_virtual);
3059 else
3060 #endif
3061 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
3062 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3066 /************************* end of attributes *****************************/
3068 /********************* utility routines for DIEs *************************/
3070 /* Output an AT_name attribute and an AT_src_coords attribute for the
3071 given decl, but only if it actually has a name. */
3073 static void
3074 name_and_src_coords_attributes (decl)
3075 register tree decl;
3077 register tree decl_name = DECL_NAME (decl);
3079 if (decl_name && IDENTIFIER_POINTER (decl_name))
3081 name_attribute (IDENTIFIER_POINTER (decl_name));
3082 #ifdef DWARF_DECL_COORDINATES
3084 register unsigned file_index;
3086 /* This is annoying, but we have to pop out of the .debug section
3087 for a moment while we call `lookup_filename' because calling it
3088 may cause a temporary switch into the .debug_sfnames section and
3089 most svr4 assemblers are not smart enough to be able to nest
3090 section switches to any depth greater than one. Note that we
3091 also can't skirt this issue by delaying all output to the
3092 .debug_sfnames section unit the end of compilation because that
3093 would cause us to have inter-section forward references and
3094 Fred Fish sez that m68k/svr4 assemblers botch those. */
3096 ASM_OUTPUT_POP_SECTION (asm_out_file);
3097 file_index = lookup_filename (DECL_SOURCE_FILE (decl));
3098 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
3100 src_coords_attribute (file_index, DECL_SOURCE_LINE (decl));
3102 #endif /* defined(DWARF_DECL_COORDINATES) */
3106 /* Many forms of DIEs contain a "type description" part. The following
3107 routine writes out these "type descriptor" parts. */
3109 static void
3110 type_attribute (type, decl_const, decl_volatile)
3111 register tree type;
3112 register int decl_const;
3113 register int decl_volatile;
3115 register enum tree_code code = TREE_CODE (type);
3116 register int root_type_modified;
3118 if (code == ERROR_MARK)
3119 return;
3121 /* Handle a special case. For functions whose return type is void,
3122 we generate *no* type attribute. (Note that no object may have
3123 type `void', so this only applies to function return types. */
3125 if (code == VOID_TYPE)
3126 return;
3128 /* If this is a subtype, find the underlying type. Eventually,
3129 this should write out the appropriate subtype info. */
3130 while ((code == INTEGER_TYPE || code == REAL_TYPE)
3131 && TREE_TYPE (type) != 0)
3132 type = TREE_TYPE (type), code = TREE_CODE (type);
3134 root_type_modified = (code == POINTER_TYPE || code == REFERENCE_TYPE
3135 || decl_const || decl_volatile
3136 || TYPE_READONLY (type) || TYPE_VOLATILE (type));
3138 if (type_is_fundamental (root_type (type)))
3140 if (root_type_modified)
3141 mod_fund_type_attribute (type, decl_const, decl_volatile);
3142 else
3143 fund_type_attribute (fundamental_type_code (type));
3145 else
3147 if (root_type_modified)
3148 mod_u_d_type_attribute (type, decl_const, decl_volatile);
3149 else
3150 /* We have to get the type_main_variant here (and pass that to the
3151 `user_def_type_attribute' routine) because the ..._TYPE node we
3152 have might simply be a *copy* of some original type node (where
3153 the copy was created to help us keep track of typedef names)
3154 and that copy might have a different TYPE_UID from the original
3155 ..._TYPE node. (Note that when `equate_type_number_to_die_number'
3156 is labeling a given type DIE for future reference, it always and
3157 only creates labels for DIEs representing *main variants*, and it
3158 never even knows about non-main-variants.) */
3159 user_def_type_attribute (type_main_variant (type));
3163 /* Given a tree pointer to a struct, class, union, or enum type node, return
3164 a pointer to the (string) tag name for the given type, or zero if the
3165 type was declared without a tag. */
3167 static char *
3168 type_tag (type)
3169 register tree type;
3171 register char *name = 0;
3173 if (TYPE_NAME (type) != 0)
3175 register tree t = 0;
3177 /* Find the IDENTIFIER_NODE for the type name. */
3178 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
3179 t = TYPE_NAME (type);
3181 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
3182 a TYPE_DECL node, regardless of whether or not a `typedef' was
3183 involved. */
3184 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
3185 && ! DECL_IGNORED_P (TYPE_NAME (type)))
3186 t = DECL_NAME (TYPE_NAME (type));
3188 /* Now get the name as a string, or invent one. */
3189 if (t != 0)
3190 name = IDENTIFIER_POINTER (t);
3193 return (name == 0 || *name == '\0') ? 0 : name;
3196 static inline void
3197 dienum_push ()
3199 /* Start by checking if the pending_sibling_stack needs to be expanded.
3200 If necessary, expand it. */
3202 if (pending_siblings == pending_siblings_allocated)
3204 pending_siblings_allocated += PENDING_SIBLINGS_INCREMENT;
3205 pending_sibling_stack
3206 = (unsigned *) xrealloc (pending_sibling_stack,
3207 pending_siblings_allocated * sizeof(unsigned));
3210 pending_siblings++;
3211 NEXT_DIE_NUM = next_unused_dienum++;
3214 /* Pop the sibling stack so that the most recently pushed DIEnum becomes the
3215 NEXT_DIE_NUM. */
3217 static inline void
3218 dienum_pop ()
3220 pending_siblings--;
3223 static inline tree
3224 member_declared_type (member)
3225 register tree member;
3227 return (DECL_BIT_FIELD_TYPE (member))
3228 ? DECL_BIT_FIELD_TYPE (member)
3229 : TREE_TYPE (member);
3232 /* Get the function's label, as described by its RTL.
3233 This may be different from the DECL_NAME name used
3234 in the source file. */
3236 static char *
3237 function_start_label (decl)
3238 register tree decl;
3240 rtx x;
3241 char *fnname;
3243 x = DECL_RTL (decl);
3244 if (GET_CODE (x) != MEM)
3245 abort ();
3246 x = XEXP (x, 0);
3247 if (GET_CODE (x) != SYMBOL_REF)
3248 abort ();
3249 fnname = XSTR (x, 0);
3250 return fnname;
3254 /******************************* DIEs ************************************/
3256 /* Output routines for individual types of DIEs. */
3258 /* Note that every type of DIE (except a null DIE) gets a sibling. */
3260 static void
3261 output_array_type_die (arg)
3262 register void *arg;
3264 register tree type = arg;
3266 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_array_type);
3267 sibling_attribute ();
3268 equate_type_number_to_die_number (type);
3269 member_attribute (TYPE_CONTEXT (type));
3271 /* I believe that we can default the array ordering. SDB will probably
3272 do the right things even if AT_ordering is not present. It's not
3273 even an issue until we start to get into multidimensional arrays
3274 anyway. If SDB is ever caught doing the Wrong Thing for multi-
3275 dimensional arrays, then we'll have to put the AT_ordering attribute
3276 back in. (But if and when we find out that we need to put these in,
3277 we will only do so for multidimensional arrays. After all, we don't
3278 want to waste space in the .debug section now do we?) */
3280 #ifdef USE_ORDERING_ATTRIBUTE
3281 ordering_attribute (ORD_row_major);
3282 #endif /* defined(USE_ORDERING_ATTRIBUTE) */
3284 subscript_data_attribute (type);
3287 static void
3288 output_set_type_die (arg)
3289 register void *arg;
3291 register tree type = arg;
3293 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_set_type);
3294 sibling_attribute ();
3295 equate_type_number_to_die_number (type);
3296 member_attribute (TYPE_CONTEXT (type));
3297 type_attribute (TREE_TYPE (type), 0, 0);
3300 #if 0
3301 /* Implement this when there is a GNU FORTRAN or GNU Ada front end. */
3303 static void
3304 output_entry_point_die (arg)
3305 register void *arg;
3307 register tree decl = arg;
3308 register tree origin = decl_ultimate_origin (decl);
3310 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_entry_point);
3311 sibling_attribute ();
3312 dienum_push ();
3313 if (origin != NULL)
3314 abstract_origin_attribute (origin);
3315 else
3317 name_and_src_coords_attributes (decl);
3318 member_attribute (DECL_CONTEXT (decl));
3319 type_attribute (TREE_TYPE (TREE_TYPE (decl)), 0, 0);
3321 if (DECL_ABSTRACT (decl))
3322 equate_decl_number_to_die_number (decl);
3323 else
3324 low_pc_attribute (function_start_label (decl));
3326 #endif
3328 /* Output a DIE to represent an inlined instance of an enumeration type. */
3330 static void
3331 output_inlined_enumeration_type_die (arg)
3332 register void *arg;
3334 register tree type = arg;
3336 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3337 sibling_attribute ();
3338 if (!TREE_ASM_WRITTEN (type))
3339 abort ();
3340 abstract_origin_attribute (type);
3343 /* Output a DIE to represent an inlined instance of a structure type. */
3345 static void
3346 output_inlined_structure_type_die (arg)
3347 register void *arg;
3349 register tree type = arg;
3351 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
3352 sibling_attribute ();
3353 if (!TREE_ASM_WRITTEN (type))
3354 abort ();
3355 abstract_origin_attribute (type);
3358 /* Output a DIE to represent an inlined instance of a union type. */
3360 static void
3361 output_inlined_union_type_die (arg)
3362 register void *arg;
3364 register tree type = arg;
3366 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
3367 sibling_attribute ();
3368 if (!TREE_ASM_WRITTEN (type))
3369 abort ();
3370 abstract_origin_attribute (type);
3373 /* Output a DIE to represent an enumeration type. Note that these DIEs
3374 include all of the information about the enumeration values also.
3375 This information is encoded into the element_list attribute. */
3377 static void
3378 output_enumeration_type_die (arg)
3379 register void *arg;
3381 register tree type = arg;
3383 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_enumeration_type);
3384 sibling_attribute ();
3385 equate_type_number_to_die_number (type);
3386 name_attribute (type_tag (type));
3387 member_attribute (TYPE_CONTEXT (type));
3389 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
3390 given enum type is incomplete, do not generate the AT_byte_size
3391 attribute or the AT_element_list attribute. */
3393 if (TYPE_SIZE (type))
3395 byte_size_attribute (type);
3396 element_list_attribute (TYPE_FIELDS (type));
3400 /* Output a DIE to represent either a real live formal parameter decl or
3401 to represent just the type of some formal parameter position in some
3402 function type.
3404 Note that this routine is a bit unusual because its argument may be
3405 a ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
3406 represents an inlining of some PARM_DECL) or else some sort of a
3407 ..._TYPE node. If it's the former then this function is being called
3408 to output a DIE to represent a formal parameter object (or some inlining
3409 thereof). If it's the latter, then this function is only being called
3410 to output a TAG_formal_parameter DIE to stand as a placeholder for some
3411 formal argument type of some subprogram type. */
3413 static void
3414 output_formal_parameter_die (arg)
3415 register void *arg;
3417 register tree node = arg;
3419 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_formal_parameter);
3420 sibling_attribute ();
3422 switch (TREE_CODE_CLASS (TREE_CODE (node)))
3424 case 'd': /* We were called with some kind of a ..._DECL node. */
3426 register tree origin = decl_ultimate_origin (node);
3428 if (origin != NULL)
3429 abstract_origin_attribute (origin);
3430 else
3432 name_and_src_coords_attributes (node);
3433 type_attribute (TREE_TYPE (node),
3434 TREE_READONLY (node), TREE_THIS_VOLATILE (node));
3436 if (DECL_ABSTRACT (node))
3437 equate_decl_number_to_die_number (node);
3438 else
3439 location_or_const_value_attribute (node);
3441 break;
3443 case 't': /* We were called with some kind of a ..._TYPE node. */
3444 type_attribute (node, 0, 0);
3445 break;
3447 default:
3448 abort (); /* Should never happen. */
3452 /* Output a DIE to represent a declared function (either file-scope
3453 or block-local) which has "external linkage" (according to ANSI-C). */
3455 static void
3456 output_global_subroutine_die (arg)
3457 register void *arg;
3459 register tree decl = arg;
3460 register tree origin = decl_ultimate_origin (decl);
3462 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_subroutine);
3463 sibling_attribute ();
3464 dienum_push ();
3465 if (origin != NULL)
3466 abstract_origin_attribute (origin);
3467 else
3469 register tree type = TREE_TYPE (decl);
3471 name_and_src_coords_attributes (decl);
3472 inline_attribute (decl);
3473 prototyped_attribute (type);
3474 member_attribute (DECL_CONTEXT (decl));
3475 type_attribute (TREE_TYPE (type), 0, 0);
3476 pure_or_virtual_attribute (decl);
3478 if (DECL_ABSTRACT (decl))
3479 equate_decl_number_to_die_number (decl);
3480 else
3482 if (! DECL_EXTERNAL (decl) && ! in_class
3483 && decl == current_function_decl)
3485 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3487 low_pc_attribute (function_start_label (decl));
3488 sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
3489 high_pc_attribute (label);
3490 if (use_gnu_debug_info_extensions)
3492 sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
3493 body_begin_attribute (label);
3494 sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
3495 body_end_attribute (label);
3501 /* Output a DIE to represent a declared data object (either file-scope
3502 or block-local) which has "external linkage" (according to ANSI-C). */
3504 static void
3505 output_global_variable_die (arg)
3506 register void *arg;
3508 register tree decl = arg;
3509 register tree origin = decl_ultimate_origin (decl);
3511 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_global_variable);
3512 sibling_attribute ();
3513 if (origin != NULL)
3514 abstract_origin_attribute (origin);
3515 else
3517 name_and_src_coords_attributes (decl);
3518 member_attribute (DECL_CONTEXT (decl));
3519 type_attribute (TREE_TYPE (decl),
3520 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3522 if (DECL_ABSTRACT (decl))
3523 equate_decl_number_to_die_number (decl);
3524 else
3526 if (! DECL_EXTERNAL (decl) && ! in_class
3527 && current_function_decl == decl_function_context (decl))
3528 location_or_const_value_attribute (decl);
3532 static void
3533 output_label_die (arg)
3534 register void *arg;
3536 register tree decl = arg;
3537 register tree origin = decl_ultimate_origin (decl);
3539 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_label);
3540 sibling_attribute ();
3541 if (origin != NULL)
3542 abstract_origin_attribute (origin);
3543 else
3544 name_and_src_coords_attributes (decl);
3545 if (DECL_ABSTRACT (decl))
3546 equate_decl_number_to_die_number (decl);
3547 else
3549 register rtx insn = DECL_RTL (decl);
3551 /* Deleted labels are programmer specified labels which have been
3552 eliminated because of various optimisations. We still emit them
3553 here so that it is possible to put breakpoints on them. */
3554 if (GET_CODE (insn) == CODE_LABEL
3555 || ((GET_CODE (insn) == NOTE
3556 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)))
3558 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3560 /* When optimization is enabled (via -O) some parts of the compiler
3561 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
3562 represent source-level labels which were explicitly declared by
3563 the user. This really shouldn't be happening though, so catch
3564 it if it ever does happen. */
3566 if (INSN_DELETED_P (insn))
3567 abort (); /* Should never happen. */
3569 sprintf (label, INSN_LABEL_FMT, current_funcdef_number,
3570 (unsigned) INSN_UID (insn));
3571 low_pc_attribute (label);
3576 static void
3577 output_lexical_block_die (arg)
3578 register void *arg;
3580 register tree stmt = arg;
3582 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_lexical_block);
3583 sibling_attribute ();
3584 dienum_push ();
3585 if (! BLOCK_ABSTRACT (stmt))
3587 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3588 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3590 sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, next_block_number);
3591 low_pc_attribute (begin_label);
3592 sprintf (end_label, BLOCK_END_LABEL_FMT, next_block_number);
3593 high_pc_attribute (end_label);
3597 static void
3598 output_inlined_subroutine_die (arg)
3599 register void *arg;
3601 register tree stmt = arg;
3603 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inlined_subroutine);
3604 sibling_attribute ();
3605 dienum_push ();
3606 abstract_origin_attribute (block_ultimate_origin (stmt));
3607 if (! BLOCK_ABSTRACT (stmt))
3609 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3610 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3612 sprintf (begin_label, BLOCK_BEGIN_LABEL_FMT, next_block_number);
3613 low_pc_attribute (begin_label);
3614 sprintf (end_label, BLOCK_END_LABEL_FMT, next_block_number);
3615 high_pc_attribute (end_label);
3619 /* Output a DIE to represent a declared data object (either file-scope
3620 or block-local) which has "internal linkage" (according to ANSI-C). */
3622 static void
3623 output_local_variable_die (arg)
3624 register void *arg;
3626 register tree decl = arg;
3627 register tree origin = decl_ultimate_origin (decl);
3629 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_local_variable);
3630 sibling_attribute ();
3631 if (origin != NULL)
3632 abstract_origin_attribute (origin);
3633 else
3635 name_and_src_coords_attributes (decl);
3636 member_attribute (DECL_CONTEXT (decl));
3637 type_attribute (TREE_TYPE (decl),
3638 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3640 if (DECL_ABSTRACT (decl))
3641 equate_decl_number_to_die_number (decl);
3642 else
3643 location_or_const_value_attribute (decl);
3646 static void
3647 output_member_die (arg)
3648 register void *arg;
3650 register tree decl = arg;
3652 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_member);
3653 sibling_attribute ();
3654 name_and_src_coords_attributes (decl);
3655 member_attribute (DECL_CONTEXT (decl));
3656 type_attribute (member_declared_type (decl),
3657 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3658 if (DECL_BIT_FIELD_TYPE (decl)) /* If this is a bit field... */
3660 byte_size_attribute (decl);
3661 bit_size_attribute (decl);
3662 bit_offset_attribute (decl);
3664 data_member_location_attribute (decl);
3667 #if 0
3668 /* Don't generate either pointer_type DIEs or reference_type DIEs. Use
3669 modified types instead.
3671 We keep this code here just in case these types of DIEs may be
3672 needed to represent certain things in other languages (e.g. Pascal)
3673 someday. */
3675 static void
3676 output_pointer_type_die (arg)
3677 register void *arg;
3679 register tree type = arg;
3681 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_pointer_type);
3682 sibling_attribute ();
3683 equate_type_number_to_die_number (type);
3684 member_attribute (TYPE_CONTEXT (type));
3685 type_attribute (TREE_TYPE (type), 0, 0);
3688 static void
3689 output_reference_type_die (arg)
3690 register void *arg;
3692 register tree type = arg;
3694 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_reference_type);
3695 sibling_attribute ();
3696 equate_type_number_to_die_number (type);
3697 member_attribute (TYPE_CONTEXT (type));
3698 type_attribute (TREE_TYPE (type), 0, 0);
3700 #endif
3702 static void
3703 output_ptr_to_mbr_type_die (arg)
3704 register void *arg;
3706 register tree type = arg;
3708 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_ptr_to_member_type);
3709 sibling_attribute ();
3710 equate_type_number_to_die_number (type);
3711 member_attribute (TYPE_CONTEXT (type));
3712 containing_type_attribute (TYPE_OFFSET_BASETYPE (type));
3713 type_attribute (TREE_TYPE (type), 0, 0);
3716 static void
3717 output_compile_unit_die (arg)
3718 register void *arg;
3720 register char *main_input_filename = arg;
3722 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_compile_unit);
3723 sibling_attribute ();
3724 dienum_push ();
3725 name_attribute (main_input_filename);
3728 char producer[250];
3730 sprintf (producer, "%s %s", language_string, version_string);
3731 producer_attribute (producer);
3734 if (strcmp (language_string, "GNU C++") == 0)
3735 language_attribute (LANG_C_PLUS_PLUS);
3736 else if (strcmp (language_string, "GNU Ada") == 0)
3737 language_attribute (LANG_ADA83);
3738 else if (strcmp (language_string, "GNU F77") == 0)
3739 language_attribute (LANG_FORTRAN77);
3740 else if (strcmp (language_string, "GNU Pascal") == 0)
3741 language_attribute (LANG_PASCAL83);
3742 else if (flag_traditional)
3743 language_attribute (LANG_C);
3744 else
3745 language_attribute (LANG_C89);
3746 low_pc_attribute (TEXT_BEGIN_LABEL);
3747 high_pc_attribute (TEXT_END_LABEL);
3748 if (debug_info_level >= DINFO_LEVEL_NORMAL)
3749 stmt_list_attribute (LINE_BEGIN_LABEL);
3750 last_filename = xstrdup (main_input_filename);
3753 char *wd = getpwd ();
3754 if (wd)
3755 comp_dir_attribute (wd);
3758 if (debug_info_level >= DINFO_LEVEL_NORMAL && use_gnu_debug_info_extensions)
3760 sf_names_attribute (SFNAMES_BEGIN_LABEL);
3761 src_info_attribute (SRCINFO_BEGIN_LABEL);
3762 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
3763 mac_info_attribute (MACINFO_BEGIN_LABEL);
3767 static void
3768 output_string_type_die (arg)
3769 register void *arg;
3771 register tree type = arg;
3773 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_string_type);
3774 sibling_attribute ();
3775 equate_type_number_to_die_number (type);
3776 member_attribute (TYPE_CONTEXT (type));
3777 /* this is a fixed length string */
3778 byte_size_attribute (type);
3781 static void
3782 output_inheritance_die (arg)
3783 register void *arg;
3785 register tree binfo = arg;
3787 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_inheritance);
3788 sibling_attribute ();
3789 type_attribute (BINFO_TYPE (binfo), 0, 0);
3790 data_member_location_attribute (binfo);
3791 if (TREE_VIA_VIRTUAL (binfo))
3793 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_virtual);
3794 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3796 if (TREE_VIA_PUBLIC (binfo))
3798 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_public);
3799 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3801 else if (TREE_VIA_PROTECTED (binfo))
3803 ASM_OUTPUT_DWARF_ATTRIBUTE (asm_out_file, AT_protected);
3804 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
3808 static void
3809 output_structure_type_die (arg)
3810 register void *arg;
3812 register tree type = arg;
3814 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_structure_type);
3815 sibling_attribute ();
3816 equate_type_number_to_die_number (type);
3817 name_attribute (type_tag (type));
3818 member_attribute (TYPE_CONTEXT (type));
3820 /* If this type has been completed, then give it a byte_size attribute
3821 and prepare to give a list of members. Otherwise, don't do either of
3822 these things. In the latter case, we will not be generating a list
3823 of members (since we don't have any idea what they might be for an
3824 incomplete type). */
3826 if (TYPE_SIZE (type))
3828 dienum_push ();
3829 byte_size_attribute (type);
3833 /* Output a DIE to represent a declared function (either file-scope
3834 or block-local) which has "internal linkage" (according to ANSI-C). */
3836 static void
3837 output_local_subroutine_die (arg)
3838 register void *arg;
3840 register tree decl = arg;
3841 register tree origin = decl_ultimate_origin (decl);
3843 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine);
3844 sibling_attribute ();
3845 dienum_push ();
3846 if (origin != NULL)
3847 abstract_origin_attribute (origin);
3848 else
3850 register tree type = TREE_TYPE (decl);
3852 name_and_src_coords_attributes (decl);
3853 inline_attribute (decl);
3854 prototyped_attribute (type);
3855 member_attribute (DECL_CONTEXT (decl));
3856 type_attribute (TREE_TYPE (type), 0, 0);
3857 pure_or_virtual_attribute (decl);
3859 if (DECL_ABSTRACT (decl))
3860 equate_decl_number_to_die_number (decl);
3861 else
3863 /* Avoid getting screwed up in cases where a function was declared
3864 static but where no definition was ever given for it. */
3866 if (TREE_ASM_WRITTEN (decl))
3868 char label[MAX_ARTIFICIAL_LABEL_BYTES];
3869 low_pc_attribute (function_start_label (decl));
3870 sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
3871 high_pc_attribute (label);
3872 if (use_gnu_debug_info_extensions)
3874 sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
3875 body_begin_attribute (label);
3876 sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
3877 body_end_attribute (label);
3883 static void
3884 output_subroutine_type_die (arg)
3885 register void *arg;
3887 register tree type = arg;
3888 register tree return_type = TREE_TYPE (type);
3890 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_subroutine_type);
3891 sibling_attribute ();
3892 dienum_push ();
3893 equate_type_number_to_die_number (type);
3894 prototyped_attribute (type);
3895 member_attribute (TYPE_CONTEXT (type));
3896 type_attribute (return_type, 0, 0);
3899 static void
3900 output_typedef_die (arg)
3901 register void *arg;
3903 register tree decl = arg;
3904 register tree origin = decl_ultimate_origin (decl);
3906 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_typedef);
3907 sibling_attribute ();
3908 if (origin != NULL)
3909 abstract_origin_attribute (origin);
3910 else
3912 name_and_src_coords_attributes (decl);
3913 member_attribute (DECL_CONTEXT (decl));
3914 type_attribute (TREE_TYPE (decl),
3915 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl));
3917 if (DECL_ABSTRACT (decl))
3918 equate_decl_number_to_die_number (decl);
3921 static void
3922 output_union_type_die (arg)
3923 register void *arg;
3925 register tree type = arg;
3927 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_union_type);
3928 sibling_attribute ();
3929 equate_type_number_to_die_number (type);
3930 name_attribute (type_tag (type));
3931 member_attribute (TYPE_CONTEXT (type));
3933 /* If this type has been completed, then give it a byte_size attribute
3934 and prepare to give a list of members. Otherwise, don't do either of
3935 these things. In the latter case, we will not be generating a list
3936 of members (since we don't have any idea what they might be for an
3937 incomplete type). */
3939 if (TYPE_SIZE (type))
3941 dienum_push ();
3942 byte_size_attribute (type);
3946 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
3947 at the end of an (ANSI prototyped) formal parameters list. */
3949 static void
3950 output_unspecified_parameters_die (arg)
3951 register void *arg;
3953 register tree decl_or_type = arg;
3955 ASM_OUTPUT_DWARF_TAG (asm_out_file, TAG_unspecified_parameters);
3956 sibling_attribute ();
3958 /* This kludge is here only for the sake of being compatible with what
3959 the USL CI5 C compiler does. The specification of Dwarf Version 1
3960 doesn't say that TAG_unspecified_parameters DIEs should contain any
3961 attributes other than the AT_sibling attribute, but they are certainly
3962 allowed to contain additional attributes, and the CI5 compiler
3963 generates AT_name, AT_fund_type, and AT_location attributes within
3964 TAG_unspecified_parameters DIEs which appear in the child lists for
3965 DIEs representing function definitions, so we do likewise here. */
3967 if (TREE_CODE (decl_or_type) == FUNCTION_DECL && DECL_INITIAL (decl_or_type))
3969 name_attribute ("...");
3970 fund_type_attribute (FT_pointer);
3971 /* location_attribute (?); */
3975 static void
3976 output_padded_null_die (arg)
3977 register void *arg ATTRIBUTE_UNUSED;
3979 ASM_OUTPUT_ALIGN (asm_out_file, 2); /* 2**2 == 4 */
3982 /*************************** end of DIEs *********************************/
3984 /* Generate some type of DIE. This routine generates the generic outer
3985 wrapper stuff which goes around all types of DIE's (regardless of their
3986 TAGs. All forms of DIEs start with a DIE-specific label, followed by a
3987 DIE-length word, followed by the guts of the DIE itself. After the guts
3988 of the DIE, there must always be a terminator label for the DIE. */
3990 static void
3991 output_die (die_specific_output_function, param)
3992 register void (*die_specific_output_function) PROTO ((void *));
3993 register void *param;
3995 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
3996 char end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3998 current_dienum = NEXT_DIE_NUM;
3999 NEXT_DIE_NUM = next_unused_dienum;
4001 sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4002 sprintf (end_label, DIE_END_LABEL_FMT, current_dienum);
4004 /* Write a label which will act as the name for the start of this DIE. */
4006 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4008 /* Write the DIE-length word. */
4010 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, end_label, begin_label);
4012 /* Fill in the guts of the DIE. */
4014 next_unused_dienum++;
4015 die_specific_output_function (param);
4017 /* Write a label which will act as the name for the end of this DIE. */
4019 ASM_OUTPUT_LABEL (asm_out_file, end_label);
4022 static void
4023 end_sibling_chain ()
4025 char begin_label[MAX_ARTIFICIAL_LABEL_BYTES];
4027 current_dienum = NEXT_DIE_NUM;
4028 NEXT_DIE_NUM = next_unused_dienum;
4030 sprintf (begin_label, DIE_BEGIN_LABEL_FMT, current_dienum);
4032 /* Write a label which will act as the name for the start of this DIE. */
4034 ASM_OUTPUT_LABEL (asm_out_file, begin_label);
4036 /* Write the DIE-length word. */
4038 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 4);
4040 dienum_pop ();
4043 /* Generate a list of nameless TAG_formal_parameter DIEs (and perhaps a
4044 TAG_unspecified_parameters DIE) to represent the types of the formal
4045 parameters as specified in some function type specification (except
4046 for those which appear as part of a function *definition*).
4048 Note that we must be careful here to output all of the parameter
4049 DIEs *before* we output any DIEs needed to represent the types of
4050 the formal parameters. This keeps svr4 SDB happy because it
4051 (incorrectly) thinks that the first non-parameter DIE it sees ends
4052 the formal parameter list. */
4054 static void
4055 output_formal_types (function_or_method_type)
4056 register tree function_or_method_type;
4058 register tree link;
4059 register tree formal_type = NULL;
4060 register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
4062 /* Set TREE_ASM_WRITTEN while processing the parameters, lest we
4063 get bogus recursion when outputting tagged types local to a
4064 function declaration. */
4065 int save_asm_written = TREE_ASM_WRITTEN (function_or_method_type);
4066 TREE_ASM_WRITTEN (function_or_method_type) = 1;
4068 /* In the case where we are generating a formal types list for a C++
4069 non-static member function type, skip over the first thing on the
4070 TYPE_ARG_TYPES list because it only represents the type of the
4071 hidden `this pointer'. The debugger should be able to figure
4072 out (without being explicitly told) that this non-static member
4073 function type takes a `this pointer' and should be able to figure
4074 what the type of that hidden parameter is from the AT_member
4075 attribute of the parent TAG_subroutine_type DIE. */
4077 if (TREE_CODE (function_or_method_type) == METHOD_TYPE)
4078 first_parm_type = TREE_CHAIN (first_parm_type);
4080 /* Make our first pass over the list of formal parameter types and output
4081 a TAG_formal_parameter DIE for each one. */
4083 for (link = first_parm_type; link; link = TREE_CHAIN (link))
4085 formal_type = TREE_VALUE (link);
4086 if (formal_type == void_type_node)
4087 break;
4089 /* Output a (nameless) DIE to represent the formal parameter itself. */
4091 output_die (output_formal_parameter_die, formal_type);
4094 /* If this function type has an ellipsis, add a TAG_unspecified_parameters
4095 DIE to the end of the parameter list. */
4097 if (formal_type != void_type_node)
4098 output_die (output_unspecified_parameters_die, function_or_method_type);
4100 /* Make our second (and final) pass over the list of formal parameter types
4101 and output DIEs to represent those types (as necessary). */
4103 for (link = TYPE_ARG_TYPES (function_or_method_type);
4104 link;
4105 link = TREE_CHAIN (link))
4107 formal_type = TREE_VALUE (link);
4108 if (formal_type == void_type_node)
4109 break;
4111 output_type (formal_type, function_or_method_type);
4114 TREE_ASM_WRITTEN (function_or_method_type) = save_asm_written;
4117 /* Remember a type in the pending_types_list. */
4119 static void
4120 pend_type (type)
4121 register tree type;
4123 if (pending_types == pending_types_allocated)
4125 pending_types_allocated += PENDING_TYPES_INCREMENT;
4126 pending_types_list
4127 = (tree *) xrealloc (pending_types_list,
4128 sizeof (tree) * pending_types_allocated);
4130 pending_types_list[pending_types++] = type;
4132 /* Mark the pending type as having been output already (even though
4133 it hasn't been). This prevents the type from being added to the
4134 pending_types_list more than once. */
4136 TREE_ASM_WRITTEN (type) = 1;
4139 /* Return non-zero if it is legitimate to output DIEs to represent a
4140 given type while we are generating the list of child DIEs for some
4141 DIE (e.g. a function or lexical block DIE) associated with a given scope.
4143 See the comments within the function for a description of when it is
4144 considered legitimate to output DIEs for various kinds of types.
4146 Note that TYPE_CONTEXT(type) may be NULL (to indicate global scope)
4147 or it may point to a BLOCK node (for types local to a block), or to a
4148 FUNCTION_DECL node (for types local to the heading of some function
4149 definition), or to a FUNCTION_TYPE node (for types local to the
4150 prototyped parameter list of a function type specification), or to a
4151 RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node
4152 (in the case of C++ nested types).
4154 The `scope' parameter should likewise be NULL or should point to a
4155 BLOCK node, a FUNCTION_DECL node, a FUNCTION_TYPE node, a RECORD_TYPE
4156 node, a UNION_TYPE node, or a QUAL_UNION_TYPE node.
4158 This function is used only for deciding when to "pend" and when to
4159 "un-pend" types to/from the pending_types_list.
4161 Note that we sometimes make use of this "type pending" feature in a
4162 rather twisted way to temporarily delay the production of DIEs for the
4163 types of formal parameters. (We do this just to make svr4 SDB happy.)
4164 It order to delay the production of DIEs representing types of formal
4165 parameters, callers of this function supply `fake_containing_scope' as
4166 the `scope' parameter to this function. Given that fake_containing_scope
4167 is a tagged type which is *not* the containing scope for *any* other type,
4168 the desired effect is achieved, i.e. output of DIEs representing types
4169 is temporarily suspended, and any type DIEs which would have otherwise
4170 been output are instead placed onto the pending_types_list. Later on,
4171 we force these (temporarily pended) types to be output simply by calling
4172 `output_pending_types_for_scope' with an actual argument equal to the
4173 true scope of the types we temporarily pended. */
4175 static inline int
4176 type_ok_for_scope (type, scope)
4177 register tree type;
4178 register tree scope;
4180 /* Tagged types (i.e. struct, union, and enum types) must always be
4181 output only in the scopes where they actually belong (or else the
4182 scoping of their own tag names and the scoping of their member
4183 names will be incorrect). Non-tagged-types on the other hand can
4184 generally be output anywhere, except that svr4 SDB really doesn't
4185 want to see them nested within struct or union types, so here we
4186 say it is always OK to immediately output any such a (non-tagged)
4187 type, so long as we are not within such a context. Note that the
4188 only kinds of non-tagged types which we will be dealing with here
4189 (for C and C++ anyway) will be array types and function types. */
4191 return is_tagged_type (type)
4192 ? (TYPE_CONTEXT (type) == scope
4193 /* Ignore namespaces for the moment. */
4194 || (scope == NULL_TREE
4195 && TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL)
4196 || (scope == NULL_TREE && is_tagged_type (TYPE_CONTEXT (type))
4197 && TREE_ASM_WRITTEN (TYPE_CONTEXT (type))))
4198 : (scope == NULL_TREE || ! is_tagged_type (scope));
4201 /* Output any pending types (from the pending_types list) which we can output
4202 now (taking into account the scope that we are working on now).
4204 For each type output, remove the given type from the pending_types_list
4205 *before* we try to output it.
4207 Note that we have to process the list in beginning-to-end order,
4208 because the call made here to output_type may cause yet more types
4209 to be added to the end of the list, and we may have to output some
4210 of them too. */
4212 static void
4213 output_pending_types_for_scope (containing_scope)
4214 register tree containing_scope;
4216 register unsigned i;
4218 for (i = 0; i < pending_types; )
4220 register tree type = pending_types_list[i];
4222 if (type_ok_for_scope (type, containing_scope))
4224 register tree *mover;
4225 register tree *limit;
4227 pending_types--;
4228 limit = &pending_types_list[pending_types];
4229 for (mover = &pending_types_list[i]; mover < limit; mover++)
4230 *mover = *(mover+1);
4232 /* Un-mark the type as having been output already (because it
4233 hasn't been, really). Then call output_type to generate a
4234 Dwarf representation of it. */
4236 TREE_ASM_WRITTEN (type) = 0;
4237 output_type (type, containing_scope);
4239 /* Don't increment the loop counter in this case because we
4240 have shifted all of the subsequent pending types down one
4241 element in the pending_types_list array. */
4243 else
4244 i++;
4248 /* Remember a type in the incomplete_types_list. */
4250 static void
4251 add_incomplete_type (type)
4252 tree type;
4254 if (incomplete_types == incomplete_types_allocated)
4256 incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
4257 incomplete_types_list
4258 = (tree *) xrealloc (incomplete_types_list,
4259 sizeof (tree) * incomplete_types_allocated);
4262 incomplete_types_list[incomplete_types++] = type;
4265 /* Walk through the list of incomplete types again, trying once more to
4266 emit full debugging info for them. */
4268 static void
4269 retry_incomplete_types ()
4271 register tree type;
4273 finalizing = 1;
4274 while (incomplete_types)
4276 --incomplete_types;
4277 type = incomplete_types_list[incomplete_types];
4278 output_type (type, NULL_TREE);
4282 static void
4283 output_type (type, containing_scope)
4284 register tree type;
4285 register tree containing_scope;
4287 if (type == 0 || type == error_mark_node)
4288 return;
4290 /* We are going to output a DIE to represent the unqualified version of
4291 this type (i.e. without any const or volatile qualifiers) so get
4292 the main variant (i.e. the unqualified version) of this type now. */
4294 type = type_main_variant (type);
4296 if (TREE_ASM_WRITTEN (type))
4298 if (finalizing && AGGREGATE_TYPE_P (type))
4300 register tree member;
4302 /* Some of our nested types might not have been defined when we
4303 were written out before; force them out now. */
4305 for (member = TYPE_FIELDS (type); member;
4306 member = TREE_CHAIN (member))
4307 if (TREE_CODE (member) == TYPE_DECL
4308 && ! TREE_ASM_WRITTEN (TREE_TYPE (member)))
4309 output_type (TREE_TYPE (member), containing_scope);
4311 return;
4314 /* If this is a nested type whose containing class hasn't been
4315 written out yet, writing it out will cover this one, too. */
4317 if (TYPE_CONTEXT (type)
4318 && TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't'
4319 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
4321 output_type (TYPE_CONTEXT (type), containing_scope);
4322 return;
4325 /* Don't generate any DIEs for this type now unless it is OK to do so
4326 (based upon what `type_ok_for_scope' tells us). */
4328 if (! type_ok_for_scope (type, containing_scope))
4330 pend_type (type);
4331 return;
4334 switch (TREE_CODE (type))
4336 case ERROR_MARK:
4337 break;
4339 case POINTER_TYPE:
4340 case REFERENCE_TYPE:
4341 /* Prevent infinite recursion in cases where this is a recursive
4342 type. Recursive types are possible in Ada. */
4343 TREE_ASM_WRITTEN (type) = 1;
4344 /* For these types, all that is required is that we output a DIE
4345 (or a set of DIEs) to represent the "basis" type. */
4346 output_type (TREE_TYPE (type), containing_scope);
4347 break;
4349 case OFFSET_TYPE:
4350 /* This code is used for C++ pointer-to-data-member types. */
4351 /* Output a description of the relevant class type. */
4352 output_type (TYPE_OFFSET_BASETYPE (type), containing_scope);
4353 /* Output a description of the type of the object pointed to. */
4354 output_type (TREE_TYPE (type), containing_scope);
4355 /* Now output a DIE to represent this pointer-to-data-member type
4356 itself. */
4357 output_die (output_ptr_to_mbr_type_die, type);
4358 break;
4360 case SET_TYPE:
4361 output_type (TYPE_DOMAIN (type), containing_scope);
4362 output_die (output_set_type_die, type);
4363 break;
4365 case FILE_TYPE:
4366 output_type (TREE_TYPE (type), containing_scope);
4367 abort (); /* No way to represent these in Dwarf yet! */
4368 break;
4370 case FUNCTION_TYPE:
4371 /* Force out return type (in case it wasn't forced out already). */
4372 output_type (TREE_TYPE (type), containing_scope);
4373 output_die (output_subroutine_type_die, type);
4374 output_formal_types (type);
4375 end_sibling_chain ();
4376 break;
4378 case METHOD_TYPE:
4379 /* Force out return type (in case it wasn't forced out already). */
4380 output_type (TREE_TYPE (type), containing_scope);
4381 output_die (output_subroutine_type_die, type);
4382 output_formal_types (type);
4383 end_sibling_chain ();
4384 break;
4386 case ARRAY_TYPE:
4387 if (TYPE_STRING_FLAG (type) && TREE_CODE(TREE_TYPE(type)) == CHAR_TYPE)
4389 output_type (TREE_TYPE (type), containing_scope);
4390 output_die (output_string_type_die, type);
4392 else
4394 register tree element_type;
4396 element_type = TREE_TYPE (type);
4397 while (TREE_CODE (element_type) == ARRAY_TYPE)
4398 element_type = TREE_TYPE (element_type);
4400 output_type (element_type, containing_scope);
4401 output_die (output_array_type_die, type);
4403 break;
4405 case ENUMERAL_TYPE:
4406 case RECORD_TYPE:
4407 case UNION_TYPE:
4408 case QUAL_UNION_TYPE:
4410 /* For a non-file-scope tagged type, we can always go ahead and
4411 output a Dwarf description of this type right now, even if
4412 the type in question is still incomplete, because if this
4413 local type *was* ever completed anywhere within its scope,
4414 that complete definition would already have been attached to
4415 this RECORD_TYPE, UNION_TYPE, QUAL_UNION_TYPE or ENUMERAL_TYPE
4416 node by the time we reach this point. That's true because of the
4417 way the front-end does its processing of file-scope declarations (of
4418 functions and class types) within which other types might be
4419 nested. The C and C++ front-ends always gobble up such "local
4420 scope" things en-mass before they try to output *any* debugging
4421 information for any of the stuff contained inside them and thus,
4422 we get the benefit here of what is (in effect) a pre-resolution
4423 of forward references to tagged types in local scopes.
4425 Note however that for file-scope tagged types we cannot assume
4426 that such pre-resolution of forward references has taken place.
4427 A given file-scope tagged type may appear to be incomplete when
4428 we reach this point, but it may yet be given a full definition
4429 (at file-scope) later on during compilation. In order to avoid
4430 generating a premature (and possibly incorrect) set of Dwarf
4431 DIEs for such (as yet incomplete) file-scope tagged types, we
4432 generate nothing at all for as-yet incomplete file-scope tagged
4433 types here unless we are making our special "finalization" pass
4434 for file-scope things at the very end of compilation. At that
4435 time, we will certainly know as much about each file-scope tagged
4436 type as we are ever going to know, so at that point in time, we
4437 can safely generate correct Dwarf descriptions for these file-
4438 scope tagged types. */
4440 if (TYPE_SIZE (type) == 0
4441 && (TYPE_CONTEXT (type) == NULL
4442 || (TREE_CODE_CLASS (TREE_CODE (TYPE_CONTEXT (type))) == 't'
4443 && TREE_CODE (TYPE_CONTEXT (type)) != FUNCTION_TYPE
4444 && TREE_CODE (TYPE_CONTEXT (type)) != METHOD_TYPE))
4445 && !finalizing)
4447 /* We can't do this for function-local types, and we don't need
4448 to. */
4449 if (TREE_PERMANENT (type))
4450 add_incomplete_type (type);
4451 return; /* EARLY EXIT! Avoid setting TREE_ASM_WRITTEN. */
4454 /* Prevent infinite recursion in cases where the type of some
4455 member of this type is expressed in terms of this type itself. */
4457 TREE_ASM_WRITTEN (type) = 1;
4459 /* Output a DIE to represent the tagged type itself. */
4461 switch (TREE_CODE (type))
4463 case ENUMERAL_TYPE:
4464 output_die (output_enumeration_type_die, type);
4465 return; /* a special case -- nothing left to do so just return */
4467 case RECORD_TYPE:
4468 output_die (output_structure_type_die, type);
4469 break;
4471 case UNION_TYPE:
4472 case QUAL_UNION_TYPE:
4473 output_die (output_union_type_die, type);
4474 break;
4476 default:
4477 abort (); /* Should never happen. */
4480 /* If this is not an incomplete type, output descriptions of
4481 each of its members.
4483 Note that as we output the DIEs necessary to represent the
4484 members of this record or union type, we will also be trying
4485 to output DIEs to represent the *types* of those members.
4486 However the `output_type' function (above) will specifically
4487 avoid generating type DIEs for member types *within* the list
4488 of member DIEs for this (containing) type execpt for those
4489 types (of members) which are explicitly marked as also being
4490 members of this (containing) type themselves. The g++ front-
4491 end can force any given type to be treated as a member of some
4492 other (containing) type by setting the TYPE_CONTEXT of the
4493 given (member) type to point to the TREE node representing the
4494 appropriate (containing) type.
4497 if (TYPE_SIZE (type))
4499 /* First output info about the base classes. */
4500 if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type))
4502 register tree bases = TYPE_BINFO_BASETYPES (type);
4503 register int n_bases = TREE_VEC_LENGTH (bases);
4504 register int i;
4506 for (i = 0; i < n_bases; i++)
4508 tree binfo = TREE_VEC_ELT (bases, i);
4509 output_type (BINFO_TYPE (binfo), containing_scope);
4510 output_die (output_inheritance_die, binfo);
4514 ++in_class;
4517 register tree normal_member;
4519 /* Now output info about the data members and type members. */
4521 for (normal_member = TYPE_FIELDS (type);
4522 normal_member;
4523 normal_member = TREE_CHAIN (normal_member))
4524 output_decl (normal_member, type);
4528 register tree func_member;
4530 /* Now output info about the function members (if any). */
4532 for (func_member = TYPE_METHODS (type);
4533 func_member;
4534 func_member = TREE_CHAIN (func_member))
4535 output_decl (func_member, type);
4538 --in_class;
4540 /* RECORD_TYPEs, UNION_TYPEs, and QUAL_UNION_TYPEs are themselves
4541 scopes (at least in C++) so we must now output any nested
4542 pending types which are local just to this type. */
4544 output_pending_types_for_scope (type);
4546 end_sibling_chain (); /* Terminate member chain. */
4549 break;
4551 case VOID_TYPE:
4552 case INTEGER_TYPE:
4553 case REAL_TYPE:
4554 case COMPLEX_TYPE:
4555 case BOOLEAN_TYPE:
4556 case CHAR_TYPE:
4557 break; /* No DIEs needed for fundamental types. */
4559 case LANG_TYPE: /* No Dwarf representation currently defined. */
4560 break;
4562 default:
4563 abort ();
4566 TREE_ASM_WRITTEN (type) = 1;
4569 static void
4570 output_tagged_type_instantiation (type)
4571 register tree type;
4573 if (type == 0 || type == error_mark_node)
4574 return;
4576 /* We are going to output a DIE to represent the unqualified version of
4577 this type (i.e. without any const or volatile qualifiers) so make
4578 sure that we have the main variant (i.e. the unqualified version) of
4579 this type now. */
4581 if (type != type_main_variant (type))
4582 abort ();
4584 if (!TREE_ASM_WRITTEN (type))
4585 abort ();
4587 switch (TREE_CODE (type))
4589 case ERROR_MARK:
4590 break;
4592 case ENUMERAL_TYPE:
4593 output_die (output_inlined_enumeration_type_die, type);
4594 break;
4596 case RECORD_TYPE:
4597 output_die (output_inlined_structure_type_die, type);
4598 break;
4600 case UNION_TYPE:
4601 case QUAL_UNION_TYPE:
4602 output_die (output_inlined_union_type_die, type);
4603 break;
4605 default:
4606 abort (); /* Should never happen. */
4610 /* Output a TAG_lexical_block DIE followed by DIEs to represent all of
4611 the things which are local to the given block. */
4613 static void
4614 output_block (stmt, depth)
4615 register tree stmt;
4616 int depth;
4618 register int must_output_die = 0;
4619 register tree origin;
4620 register enum tree_code origin_code;
4622 /* Ignore blocks never really used to make RTL. */
4624 if (! stmt || ! TREE_USED (stmt))
4625 return;
4627 /* Determine the "ultimate origin" of this block. This block may be an
4628 inlined instance of an inlined instance of inline function, so we
4629 have to trace all of the way back through the origin chain to find
4630 out what sort of node actually served as the original seed for the
4631 creation of the current block. */
4633 origin = block_ultimate_origin (stmt);
4634 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
4636 /* Determine if we need to output any Dwarf DIEs at all to represent this
4637 block. */
4639 if (origin_code == FUNCTION_DECL)
4640 /* The outer scopes for inlinings *must* always be represented. We
4641 generate TAG_inlined_subroutine DIEs for them. (See below.) */
4642 must_output_die = 1;
4643 else
4645 /* In the case where the current block represents an inlining of the
4646 "body block" of an inline function, we must *NOT* output any DIE
4647 for this block because we have already output a DIE to represent
4648 the whole inlined function scope and the "body block" of any
4649 function doesn't really represent a different scope according to
4650 ANSI C rules. So we check here to make sure that this block does
4651 not represent a "body block inlining" before trying to set the
4652 `must_output_die' flag. */
4654 if (! is_body_block (origin ? origin : stmt))
4656 /* Determine if this block directly contains any "significant"
4657 local declarations which we will need to output DIEs for. */
4659 if (debug_info_level > DINFO_LEVEL_TERSE)
4660 /* We are not in terse mode so *any* local declaration counts
4661 as being a "significant" one. */
4662 must_output_die = (BLOCK_VARS (stmt) != NULL);
4663 else
4665 register tree decl;
4667 /* We are in terse mode, so only local (nested) function
4668 definitions count as "significant" local declarations. */
4670 for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
4671 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl))
4673 must_output_die = 1;
4674 break;
4680 /* It would be a waste of space to generate a Dwarf TAG_lexical_block
4681 DIE for any block which contains no significant local declarations
4682 at all. Rather, in such cases we just call `output_decls_for_scope'
4683 so that any needed Dwarf info for any sub-blocks will get properly
4684 generated. Note that in terse mode, our definition of what constitutes
4685 a "significant" local declaration gets restricted to include only
4686 inlined function instances and local (nested) function definitions. */
4688 if (origin_code == FUNCTION_DECL && BLOCK_ABSTRACT (stmt))
4689 /* We don't care about an abstract inlined subroutine. */;
4690 else if (must_output_die)
4692 output_die ((origin_code == FUNCTION_DECL)
4693 ? output_inlined_subroutine_die
4694 : output_lexical_block_die,
4695 stmt);
4696 output_decls_for_scope (stmt, depth);
4697 end_sibling_chain ();
4699 else
4700 output_decls_for_scope (stmt, depth);
4703 /* Output all of the decls declared within a given scope (also called
4704 a `binding contour') and (recursively) all of it's sub-blocks. */
4706 static void
4707 output_decls_for_scope (stmt, depth)
4708 register tree stmt;
4709 int depth;
4711 /* Ignore blocks never really used to make RTL. */
4713 if (! stmt || ! TREE_USED (stmt))
4714 return;
4716 if (! BLOCK_ABSTRACT (stmt) && depth > 0)
4717 next_block_number++;
4719 /* Output the DIEs to represent all of the data objects, functions,
4720 typedefs, and tagged types declared directly within this block
4721 but not within any nested sub-blocks. */
4724 register tree decl;
4726 for (decl = BLOCK_VARS (stmt); decl; decl = TREE_CHAIN (decl))
4727 output_decl (decl, stmt);
4730 output_pending_types_for_scope (stmt);
4732 /* Output the DIEs to represent all sub-blocks (and the items declared
4733 therein) of this block. */
4736 register tree subblocks;
4738 for (subblocks = BLOCK_SUBBLOCKS (stmt);
4739 subblocks;
4740 subblocks = BLOCK_CHAIN (subblocks))
4741 output_block (subblocks, depth + 1);
4745 /* Is this a typedef we can avoid emitting? */
4747 inline static int
4748 is_redundant_typedef (decl)
4749 register tree decl;
4751 if (TYPE_DECL_IS_STUB (decl))
4752 return 1;
4753 if (DECL_ARTIFICIAL (decl)
4754 && DECL_CONTEXT (decl)
4755 && is_tagged_type (DECL_CONTEXT (decl))
4756 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
4757 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
4758 /* Also ignore the artificial member typedef for the class name. */
4759 return 1;
4760 return 0;
4763 /* Output Dwarf .debug information for a decl described by DECL. */
4765 static void
4766 output_decl (decl, containing_scope)
4767 register tree decl;
4768 register tree containing_scope;
4770 /* Make a note of the decl node we are going to be working on. We may
4771 need to give the user the source coordinates of where it appeared in
4772 case we notice (later on) that something about it looks screwy. */
4774 dwarf_last_decl = decl;
4776 if (TREE_CODE (decl) == ERROR_MARK)
4777 return;
4779 /* If a structure is declared within an initialization, e.g. as the
4780 operand of a sizeof, then it will not have a name. We don't want
4781 to output a DIE for it, as the tree nodes are in the temporary obstack */
4783 if ((TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE
4784 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
4785 && ((DECL_NAME (decl) == 0 && TYPE_NAME (TREE_TYPE (decl)) == 0)
4786 || (TYPE_FIELDS (TREE_TYPE (decl))
4787 && (TREE_CODE (TYPE_FIELDS (TREE_TYPE (decl))) == ERROR_MARK))))
4788 return;
4790 /* If this ..._DECL node is marked to be ignored, then ignore it.
4791 But don't ignore a function definition, since that would screw
4792 up our count of blocks, and that it turn will completely screw up the
4793 labels we will reference in subsequent AT_low_pc and AT_high_pc
4794 attributes (for subsequent blocks). */
4796 if (DECL_IGNORED_P (decl) && TREE_CODE (decl) != FUNCTION_DECL)
4797 return;
4799 switch (TREE_CODE (decl))
4801 case CONST_DECL:
4802 /* The individual enumerators of an enum type get output when we
4803 output the Dwarf representation of the relevant enum type itself. */
4804 break;
4806 case FUNCTION_DECL:
4807 /* If we are in terse mode, don't output any DIEs to represent
4808 mere function declarations. Also, if we are conforming
4809 to the DWARF version 1 specification, don't output DIEs for
4810 mere function declarations. */
4812 if (DECL_INITIAL (decl) == NULL_TREE)
4813 #if (DWARF_VERSION > 1)
4814 if (debug_info_level <= DINFO_LEVEL_TERSE)
4815 #endif
4816 break;
4818 /* Before we describe the FUNCTION_DECL itself, make sure that we
4819 have described its return type. */
4821 output_type (TREE_TYPE (TREE_TYPE (decl)), containing_scope);
4824 /* And its containing type. */
4825 register tree origin = decl_class_context (decl);
4826 if (origin)
4827 output_type (origin, containing_scope);
4830 /* If the following DIE will represent a function definition for a
4831 function with "extern" linkage, output a special "pubnames" DIE
4832 label just ahead of the actual DIE. A reference to this label
4833 was already generated in the .debug_pubnames section sub-entry
4834 for this function definition. */
4836 if (TREE_PUBLIC (decl))
4838 char label[MAX_ARTIFICIAL_LABEL_BYTES];
4840 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
4841 ASM_OUTPUT_LABEL (asm_out_file, label);
4844 /* Now output a DIE to represent the function itself. */
4846 output_die (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl)
4847 ? output_global_subroutine_die
4848 : output_local_subroutine_die,
4849 decl);
4851 /* Now output descriptions of the arguments for this function.
4852 This gets (unnecessarily?) complex because of the fact that
4853 the DECL_ARGUMENT list for a FUNCTION_DECL doesn't indicate
4854 cases where there was a trailing `...' at the end of the formal
4855 parameter list. In order to find out if there was a trailing
4856 ellipsis or not, we must instead look at the type associated
4857 with the FUNCTION_DECL. This will be a node of type FUNCTION_TYPE.
4858 If the chain of type nodes hanging off of this FUNCTION_TYPE node
4859 ends with a void_type_node then there should *not* be an ellipsis
4860 at the end. */
4862 /* In the case where we are describing a mere function declaration, all
4863 we need to do here (and all we *can* do here) is to describe
4864 the *types* of its formal parameters. */
4866 if (decl != current_function_decl || in_class)
4867 output_formal_types (TREE_TYPE (decl));
4868 else
4870 /* Generate DIEs to represent all known formal parameters */
4872 register tree arg_decls = DECL_ARGUMENTS (decl);
4873 register tree parm;
4875 /* WARNING! Kludge zone ahead! Here we have a special
4876 hack for svr4 SDB compatibility. Instead of passing the
4877 current FUNCTION_DECL node as the second parameter (i.e.
4878 the `containing_scope' parameter) to `output_decl' (as
4879 we ought to) we instead pass a pointer to our own private
4880 fake_containing_scope node. That node is a RECORD_TYPE
4881 node which NO OTHER TYPE may ever actually be a member of.
4883 This pointer will ultimately get passed into `output_type'
4884 as its `containing_scope' parameter. `Output_type' will
4885 then perform its part in the hack... i.e. it will pend
4886 the type of the formal parameter onto the pending_types
4887 list. Later on, when we are done generating the whole
4888 sequence of formal parameter DIEs for this function
4889 definition, we will un-pend all previously pended types
4890 of formal parameters for this function definition.
4892 This whole kludge prevents any type DIEs from being
4893 mixed in with the formal parameter DIEs. That's good
4894 because svr4 SDB believes that the list of formal
4895 parameter DIEs for a function ends wherever the first
4896 non-formal-parameter DIE appears. Thus, we have to
4897 keep the formal parameter DIEs segregated. They must
4898 all appear (consecutively) at the start of the list of
4899 children for the DIE representing the function definition.
4900 Then (and only then) may we output any additional DIEs
4901 needed to represent the types of these formal parameters.
4905 When generating DIEs, generate the unspecified_parameters
4906 DIE instead if we come across the arg "__builtin_va_alist"
4909 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
4910 if (TREE_CODE (parm) == PARM_DECL)
4912 if (DECL_NAME(parm) &&
4913 !strcmp(IDENTIFIER_POINTER(DECL_NAME(parm)),
4914 "__builtin_va_alist") )
4915 output_die (output_unspecified_parameters_die, decl);
4916 else
4917 output_decl (parm, fake_containing_scope);
4921 Now that we have finished generating all of the DIEs to
4922 represent the formal parameters themselves, force out
4923 any DIEs needed to represent their types. We do this
4924 simply by un-pending all previously pended types which
4925 can legitimately go into the chain of children DIEs for
4926 the current FUNCTION_DECL.
4929 output_pending_types_for_scope (decl);
4932 Decide whether we need a unspecified_parameters DIE at the end.
4933 There are 2 more cases to do this for:
4934 1) the ansi ... declaration - this is detectable when the end
4935 of the arg list is not a void_type_node
4936 2) an unprototyped function declaration (not a definition). This
4937 just means that we have no info about the parameters at all.
4941 register tree fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
4943 if (fn_arg_types)
4945 /* this is the prototyped case, check for ... */
4946 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
4947 output_die (output_unspecified_parameters_die, decl);
4949 else
4951 /* this is unprototyped, check for undefined (just declaration) */
4952 if (!DECL_INITIAL (decl))
4953 output_die (output_unspecified_parameters_die, decl);
4957 /* Output Dwarf info for all of the stuff within the body of the
4958 function (if it has one - it may be just a declaration). */
4961 register tree outer_scope = DECL_INITIAL (decl);
4963 if (outer_scope && TREE_CODE (outer_scope) != ERROR_MARK)
4965 /* Note that here, `outer_scope' is a pointer to the outermost
4966 BLOCK node created to represent a function.
4967 This outermost BLOCK actually represents the outermost
4968 binding contour for the function, i.e. the contour in which
4969 the function's formal parameters and labels get declared.
4971 Curiously, it appears that the front end doesn't actually
4972 put the PARM_DECL nodes for the current function onto the
4973 BLOCK_VARS list for this outer scope. (They are strung
4974 off of the DECL_ARGUMENTS list for the function instead.)
4975 The BLOCK_VARS list for the `outer_scope' does provide us
4976 with a list of the LABEL_DECL nodes for the function however,
4977 and we output DWARF info for those here.
4979 Just within the `outer_scope' there will be a BLOCK node
4980 representing the function's outermost pair of curly braces,
4981 and any blocks used for the base and member initializers of
4982 a C++ constructor function. */
4984 output_decls_for_scope (outer_scope, 0);
4986 /* Finally, force out any pending types which are local to the
4987 outermost block of this function definition. These will
4988 all have a TYPE_CONTEXT which points to the FUNCTION_DECL
4989 node itself. */
4991 output_pending_types_for_scope (decl);
4996 /* Generate a terminator for the list of stuff `owned' by this
4997 function. */
4999 end_sibling_chain ();
5001 break;
5003 case TYPE_DECL:
5004 /* If we are in terse mode, don't generate any DIEs to represent
5005 any actual typedefs. Note that even when we are in terse mode,
5006 we must still output DIEs to represent those tagged types which
5007 are used (directly or indirectly) in the specification of either
5008 a return type or a formal parameter type of some function. */
5010 if (debug_info_level <= DINFO_LEVEL_TERSE)
5011 if (! TYPE_DECL_IS_STUB (decl)
5012 || (! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)) && ! in_class))
5013 return;
5015 /* In the special case of a TYPE_DECL node representing
5016 the declaration of some type tag, if the given TYPE_DECL is
5017 marked as having been instantiated from some other (original)
5018 TYPE_DECL node (e.g. one which was generated within the original
5019 definition of an inline function) we have to generate a special
5020 (abbreviated) TAG_structure_type, TAG_union_type, or
5021 TAG_enumeration-type DIE here. */
5023 if (TYPE_DECL_IS_STUB (decl) && DECL_ABSTRACT_ORIGIN (decl))
5025 output_tagged_type_instantiation (TREE_TYPE (decl));
5026 return;
5029 output_type (TREE_TYPE (decl), containing_scope);
5031 if (! is_redundant_typedef (decl))
5032 /* Output a DIE to represent the typedef itself. */
5033 output_die (output_typedef_die, decl);
5034 break;
5036 case LABEL_DECL:
5037 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5038 output_die (output_label_die, decl);
5039 break;
5041 case VAR_DECL:
5042 /* If we are conforming to the DWARF version 1 specification, don't
5043 generated any DIEs to represent mere external object declarations. */
5045 #if (DWARF_VERSION <= 1)
5046 if (DECL_EXTERNAL (decl) && ! TREE_PUBLIC (decl))
5047 break;
5048 #endif
5050 /* If we are in terse mode, don't generate any DIEs to represent
5051 any variable declarations or definitions. */
5053 if (debug_info_level <= DINFO_LEVEL_TERSE)
5054 break;
5056 /* Output any DIEs that are needed to specify the type of this data
5057 object. */
5059 output_type (TREE_TYPE (decl), containing_scope);
5062 /* And its containing type. */
5063 register tree origin = decl_class_context (decl);
5064 if (origin)
5065 output_type (origin, containing_scope);
5068 /* If the following DIE will represent a data object definition for a
5069 data object with "extern" linkage, output a special "pubnames" DIE
5070 label just ahead of the actual DIE. A reference to this label
5071 was already generated in the .debug_pubnames section sub-entry
5072 for this data object definition. */
5074 if (TREE_PUBLIC (decl) && ! DECL_ABSTRACT (decl))
5076 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5078 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number++);
5079 ASM_OUTPUT_LABEL (asm_out_file, label);
5082 /* Now output the DIE to represent the data object itself. This gets
5083 complicated because of the possibility that the VAR_DECL really
5084 represents an inlined instance of a formal parameter for an inline
5085 function. */
5088 register void (*func) PROTO((void *));
5089 register tree origin = decl_ultimate_origin (decl);
5091 if (origin != NULL && TREE_CODE (origin) == PARM_DECL)
5092 func = output_formal_parameter_die;
5093 else
5095 if (TREE_PUBLIC (decl) || DECL_EXTERNAL (decl))
5096 func = output_global_variable_die;
5097 else
5098 func = output_local_variable_die;
5100 output_die (func, decl);
5102 break;
5104 case FIELD_DECL:
5105 /* Ignore the nameless fields that are used to skip bits. */
5106 if (DECL_NAME (decl) != 0)
5108 output_type (member_declared_type (decl), containing_scope);
5109 output_die (output_member_die, decl);
5111 break;
5113 case PARM_DECL:
5114 /* Force out the type of this formal, if it was not forced out yet.
5115 Note that here we can run afowl of a bug in "classic" svr4 SDB.
5116 It should be able to grok the presence of type DIEs within a list
5117 of TAG_formal_parameter DIEs, but it doesn't. */
5119 output_type (TREE_TYPE (decl), containing_scope);
5120 output_die (output_formal_parameter_die, decl);
5121 break;
5123 default:
5124 abort ();
5128 void
5129 dwarfout_file_scope_decl (decl, set_finalizing)
5130 register tree decl;
5131 register int set_finalizing;
5133 if (TREE_CODE (decl) == ERROR_MARK)
5134 return;
5136 /* If this ..._DECL node is marked to be ignored, then ignore it. We
5137 gotta hope that the node in question doesn't represent a function
5138 definition. If it does, then totally ignoring it is bound to screw
5139 up our count of blocks, and that it turn will completely screw up the
5140 labels we will reference in subsequent AT_low_pc and AT_high_pc
5141 attributes (for subsequent blocks). (It's too bad that BLOCK nodes
5142 don't carry their own sequence numbers with them!) */
5144 if (DECL_IGNORED_P (decl))
5146 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl) != NULL)
5147 abort ();
5148 return;
5151 switch (TREE_CODE (decl))
5153 case FUNCTION_DECL:
5155 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of
5156 a builtin function. Explicit programmer-supplied declarations of
5157 these same functions should NOT be ignored however. */
5159 if (DECL_EXTERNAL (decl) && DECL_FUNCTION_CODE (decl))
5160 return;
5162 /* What we would really like to do here is to filter out all mere
5163 file-scope declarations of file-scope functions which are never
5164 referenced later within this translation unit (and keep all of
5165 ones that *are* referenced later on) but we aren't clairvoyant,
5166 so we have no idea which functions will be referenced in the
5167 future (i.e. later on within the current translation unit).
5168 So here we just ignore all file-scope function declarations
5169 which are not also definitions. If and when the debugger needs
5170 to know something about these functions, it wil have to hunt
5171 around and find the DWARF information associated with the
5172 *definition* of the function.
5174 Note that we can't just check `DECL_EXTERNAL' to find out which
5175 FUNCTION_DECL nodes represent definitions and which ones represent
5176 mere declarations. We have to check `DECL_INITIAL' instead. That's
5177 because the C front-end supports some weird semantics for "extern
5178 inline" function definitions. These can get inlined within the
5179 current translation unit (an thus, we need to generate DWARF info
5180 for their abstract instances so that the DWARF info for the
5181 concrete inlined instances can have something to refer to) but
5182 the compiler never generates any out-of-lines instances of such
5183 things (despite the fact that they *are* definitions). The
5184 important point is that the C front-end marks these "extern inline"
5185 functions as DECL_EXTERNAL, but we need to generate DWARF for them
5186 anyway.
5188 Note that the C++ front-end also plays some similar games for inline
5189 function definitions appearing within include files which also
5190 contain `#pragma interface' pragmas. */
5192 if (DECL_INITIAL (decl) == NULL_TREE)
5193 return;
5195 if (TREE_PUBLIC (decl)
5196 && ! DECL_EXTERNAL (decl)
5197 && ! DECL_ABSTRACT (decl))
5199 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5201 /* Output a .debug_pubnames entry for a public function
5202 defined in this compilation unit. */
5204 fputc ('\n', asm_out_file);
5205 ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION);
5206 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5207 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5208 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5209 IDENTIFIER_POINTER (DECL_NAME (decl)));
5210 ASM_OUTPUT_POP_SECTION (asm_out_file);
5213 break;
5215 case VAR_DECL:
5217 /* Ignore this VAR_DECL if it refers to a file-scope extern data
5218 object declaration and if the declaration was never even
5219 referenced from within this entire compilation unit. We
5220 suppress these DIEs in order to save space in the .debug section
5221 (by eliminating entries which are probably useless). Note that
5222 we must not suppress block-local extern declarations (whether
5223 used or not) because that would screw-up the debugger's name
5224 lookup mechanism and cause it to miss things which really ought
5225 to be in scope at a given point. */
5227 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
5228 return;
5230 if (TREE_PUBLIC (decl)
5231 && ! DECL_EXTERNAL (decl)
5232 && GET_CODE (DECL_RTL (decl)) == MEM
5233 && ! DECL_ABSTRACT (decl))
5235 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5237 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5239 /* Output a .debug_pubnames entry for a public variable
5240 defined in this compilation unit. */
5242 fputc ('\n', asm_out_file);
5243 ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION);
5244 sprintf (label, PUB_DIE_LABEL_FMT, next_pubname_number);
5245 ASM_OUTPUT_DWARF_ADDR (asm_out_file, label);
5246 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5247 IDENTIFIER_POINTER (DECL_NAME (decl)));
5248 ASM_OUTPUT_POP_SECTION (asm_out_file);
5251 if (DECL_INITIAL (decl) == NULL)
5253 /* Output a .debug_aranges entry for a public variable
5254 which is tentatively defined in this compilation unit. */
5256 fputc ('\n', asm_out_file);
5257 ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION);
5258 ASM_OUTPUT_DWARF_ADDR (asm_out_file,
5259 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
5260 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
5261 (unsigned) int_size_in_bytes (TREE_TYPE (decl)));
5262 ASM_OUTPUT_POP_SECTION (asm_out_file);
5266 /* If we are in terse mode, don't generate any DIEs to represent
5267 any variable declarations or definitions. */
5269 if (debug_info_level <= DINFO_LEVEL_TERSE)
5270 return;
5272 break;
5274 case TYPE_DECL:
5275 /* Don't bother trying to generate any DIEs to represent any of the
5276 normal built-in types for the language we are compiling, except
5277 in cases where the types in question are *not* DWARF fundamental
5278 types. We make an exception in the case of non-fundamental types
5279 for the sake of objective C (and perhaps C++) because the GNU
5280 front-ends for these languages may in fact create certain "built-in"
5281 types which are (for example) RECORD_TYPEs. In such cases, we
5282 really need to output these (non-fundamental) types because other
5283 DIEs may contain references to them. */
5285 /* Also ignore language dependent types here, because they are probably
5286 also built-in types. If we didn't ignore them, then we would get
5287 references to undefined labels because output_type doesn't support
5288 them. So, for now, we need to ignore them to avoid assembler
5289 errors. */
5291 /* ??? This code is different than the equivalent code in dwarf2out.c.
5292 The dwarf2out.c code is probably more correct. */
5294 if (DECL_SOURCE_LINE (decl) == 0
5295 && (type_is_fundamental (TREE_TYPE (decl))
5296 || TREE_CODE (TREE_TYPE (decl)) == LANG_TYPE))
5297 return;
5299 /* If we are in terse mode, don't generate any DIEs to represent
5300 any actual typedefs. Note that even when we are in terse mode,
5301 we must still output DIEs to represent those tagged types which
5302 are used (directly or indirectly) in the specification of either
5303 a return type or a formal parameter type of some function. */
5305 if (debug_info_level <= DINFO_LEVEL_TERSE)
5306 if (! TYPE_DECL_IS_STUB (decl)
5307 || ! TYPE_USED_FOR_FUNCTION (TREE_TYPE (decl)))
5308 return;
5310 break;
5312 default:
5313 return;
5316 fputc ('\n', asm_out_file);
5317 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
5318 finalizing = set_finalizing;
5319 output_decl (decl, NULL_TREE);
5321 /* NOTE: The call above to `output_decl' may have caused one or more
5322 file-scope named types (i.e. tagged types) to be placed onto the
5323 pending_types_list. We have to get those types off of that list
5324 at some point, and this is the perfect time to do it. If we didn't
5325 take them off now, they might still be on the list when cc1 finally
5326 exits. That might be OK if it weren't for the fact that when we put
5327 types onto the pending_types_list, we set the TREE_ASM_WRITTEN flag
5328 for these types, and that causes them never to be output unless
5329 `output_pending_types_for_scope' takes them off of the list and un-sets
5330 their TREE_ASM_WRITTEN flags. */
5332 output_pending_types_for_scope (NULL_TREE);
5334 /* The above call should have totally emptied the pending_types_list
5335 if this is not a nested function or class. If this is a nested type,
5336 then the remaining pending_types will be emitted when the containing type
5337 is handled. */
5339 if (! DECL_CONTEXT (decl))
5341 if (pending_types != 0)
5342 abort ();
5345 ASM_OUTPUT_POP_SECTION (asm_out_file);
5347 if (TREE_CODE (decl) == FUNCTION_DECL && DECL_INITIAL (decl) != NULL)
5348 current_funcdef_number++;
5351 /* Output a marker (i.e. a label) for the beginning of the generated code
5352 for a lexical block. */
5354 void
5355 dwarfout_begin_block (blocknum)
5356 register unsigned blocknum;
5358 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5360 function_section (current_function_decl);
5361 sprintf (label, BLOCK_BEGIN_LABEL_FMT, blocknum);
5362 ASM_OUTPUT_LABEL (asm_out_file, label);
5365 /* Output a marker (i.e. a label) for the end of the generated code
5366 for a lexical block. */
5368 void
5369 dwarfout_end_block (blocknum)
5370 register unsigned blocknum;
5372 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5374 function_section (current_function_decl);
5375 sprintf (label, BLOCK_END_LABEL_FMT, blocknum);
5376 ASM_OUTPUT_LABEL (asm_out_file, label);
5379 /* Output a marker (i.e. a label) at a point in the assembly code which
5380 corresponds to a given source level label. */
5382 void
5383 dwarfout_label (insn)
5384 register rtx insn;
5386 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5388 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5390 function_section (current_function_decl);
5391 sprintf (label, INSN_LABEL_FMT, current_funcdef_number,
5392 (unsigned) INSN_UID (insn));
5393 ASM_OUTPUT_LABEL (asm_out_file, label);
5397 /* Output a marker (i.e. a label) for the point in the generated code where
5398 the real body of the function begins (after parameters have been moved
5399 to their home locations). */
5401 void
5402 dwarfout_begin_function ()
5404 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5406 if (! use_gnu_debug_info_extensions)
5407 return;
5408 function_section (current_function_decl);
5409 sprintf (label, BODY_BEGIN_LABEL_FMT, current_funcdef_number);
5410 ASM_OUTPUT_LABEL (asm_out_file, label);
5413 /* Output a marker (i.e. a label) for the point in the generated code where
5414 the real body of the function ends (just before the epilogue code). */
5416 void
5417 dwarfout_end_function ()
5419 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5421 if (! use_gnu_debug_info_extensions)
5422 return;
5423 function_section (current_function_decl);
5424 sprintf (label, BODY_END_LABEL_FMT, current_funcdef_number);
5425 ASM_OUTPUT_LABEL (asm_out_file, label);
5428 /* Output a marker (i.e. a label) for the absolute end of the generated code
5429 for a function definition. This gets called *after* the epilogue code
5430 has been generated. */
5432 void
5433 dwarfout_end_epilogue ()
5435 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5437 /* Output a label to mark the endpoint of the code generated for this
5438 function. */
5440 sprintf (label, FUNC_END_LABEL_FMT, current_funcdef_number);
5441 ASM_OUTPUT_LABEL (asm_out_file, label);
5444 static void
5445 shuffle_filename_entry (new_zeroth)
5446 register filename_entry *new_zeroth;
5448 filename_entry temp_entry;
5449 register filename_entry *limit_p;
5450 register filename_entry *move_p;
5452 if (new_zeroth == &filename_table[0])
5453 return;
5455 temp_entry = *new_zeroth;
5457 /* Shift entries up in the table to make room at [0]. */
5459 limit_p = &filename_table[0];
5460 for (move_p = new_zeroth; move_p > limit_p; move_p--)
5461 *move_p = *(move_p-1);
5463 /* Install the found entry at [0]. */
5465 filename_table[0] = temp_entry;
5468 /* Create a new (string) entry for the .debug_sfnames section. */
5470 static void
5471 generate_new_sfname_entry ()
5473 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5475 fputc ('\n', asm_out_file);
5476 ASM_OUTPUT_PUSH_SECTION (asm_out_file, SFNAMES_SECTION);
5477 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, filename_table[0].number);
5478 ASM_OUTPUT_LABEL (asm_out_file, label);
5479 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file,
5480 filename_table[0].name
5481 ? filename_table[0].name
5482 : "");
5483 ASM_OUTPUT_POP_SECTION (asm_out_file);
5486 /* Lookup a filename (in the list of filenames that we know about here in
5487 dwarfout.c) and return its "index". The index of each (known) filename
5488 is just a unique number which is associated with only that one filename.
5489 We need such numbers for the sake of generating labels (in the
5490 .debug_sfnames section) and references to those unique labels (in the
5491 .debug_srcinfo and .debug_macinfo sections).
5493 If the filename given as an argument is not found in our current list,
5494 add it to the list and assign it the next available unique index number.
5496 Whatever we do (i.e. whether we find a pre-existing filename or add a new
5497 one), we shuffle the filename found (or added) up to the zeroth entry of
5498 our list of filenames (which is always searched linearly). We do this so
5499 as to optimize the most common case for these filename lookups within
5500 dwarfout.c. The most common case by far is the case where we call
5501 lookup_filename to lookup the very same filename that we did a lookup
5502 on the last time we called lookup_filename. We make sure that this
5503 common case is fast because such cases will constitute 99.9% of the
5504 lookups we ever do (in practice).
5506 If we add a new filename entry to our table, we go ahead and generate
5507 the corresponding entry in the .debug_sfnames section right away.
5508 Doing so allows us to avoid tickling an assembler bug (present in some
5509 m68k assemblers) which yields assembly-time errors in cases where the
5510 difference of two label addresses is taken and where the two labels
5511 are in a section *other* than the one where the difference is being
5512 calculated, and where at least one of the two symbol references is a
5513 forward reference. (This bug could be tickled by our .debug_srcinfo
5514 entries if we don't output their corresponding .debug_sfnames entries
5515 before them.) */
5517 static unsigned
5518 lookup_filename (file_name)
5519 const char *file_name;
5521 register filename_entry *search_p;
5522 register filename_entry *limit_p = &filename_table[ft_entries];
5524 for (search_p = filename_table; search_p < limit_p; search_p++)
5525 if (!strcmp (file_name, search_p->name))
5527 /* When we get here, we have found the filename that we were
5528 looking for in the filename_table. Now we want to make sure
5529 that it gets moved to the zero'th entry in the table (if it
5530 is not already there) so that subsequent attempts to find the
5531 same filename will find it as quickly as possible. */
5533 shuffle_filename_entry (search_p);
5534 return filename_table[0].number;
5537 /* We come here whenever we have a new filename which is not registered
5538 in the current table. Here we add it to the table. */
5540 /* Prepare to add a new table entry by making sure there is enough space
5541 in the table to do so. If not, expand the current table. */
5543 if (ft_entries == ft_entries_allocated)
5545 ft_entries_allocated += FT_ENTRIES_INCREMENT;
5546 filename_table
5547 = (filename_entry *)
5548 xrealloc (filename_table,
5549 ft_entries_allocated * sizeof (filename_entry));
5552 /* Initially, add the new entry at the end of the filename table. */
5554 filename_table[ft_entries].number = ft_entries;
5555 filename_table[ft_entries].name = xstrdup (file_name);
5557 /* Shuffle the new entry into filename_table[0]. */
5559 shuffle_filename_entry (&filename_table[ft_entries]);
5561 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5562 generate_new_sfname_entry ();
5564 ft_entries++;
5565 return filename_table[0].number;
5568 static void
5569 generate_srcinfo_entry (line_entry_num, files_entry_num)
5570 unsigned line_entry_num;
5571 unsigned files_entry_num;
5573 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5575 fputc ('\n', asm_out_file);
5576 ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION);
5577 sprintf (label, LINE_ENTRY_LABEL_FMT, line_entry_num);
5578 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, LINE_BEGIN_LABEL);
5579 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, files_entry_num);
5580 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, SFNAMES_BEGIN_LABEL);
5581 ASM_OUTPUT_POP_SECTION (asm_out_file);
5584 void
5585 dwarfout_line (filename, line)
5586 register const char *filename;
5587 register unsigned line;
5589 if (debug_info_level >= DINFO_LEVEL_NORMAL
5590 /* We can't emit line number info for functions in separate sections,
5591 because the assembler can't subtract labels in different sections. */
5592 && DECL_SECTION_NAME (current_function_decl) == NULL_TREE)
5594 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5595 static unsigned last_line_entry_num = 0;
5596 static unsigned prev_file_entry_num = (unsigned) -1;
5597 register unsigned this_file_entry_num;
5599 function_section (current_function_decl);
5600 sprintf (label, LINE_CODE_LABEL_FMT, ++last_line_entry_num);
5601 ASM_OUTPUT_LABEL (asm_out_file, label);
5603 fputc ('\n', asm_out_file);
5605 if (use_gnu_debug_info_extensions)
5606 this_file_entry_num = lookup_filename (filename);
5607 else
5608 this_file_entry_num = (unsigned) -1;
5610 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
5611 if (this_file_entry_num != prev_file_entry_num)
5613 char line_entry_label[MAX_ARTIFICIAL_LABEL_BYTES];
5615 sprintf (line_entry_label, LINE_ENTRY_LABEL_FMT, last_line_entry_num);
5616 ASM_OUTPUT_LABEL (asm_out_file, line_entry_label);
5620 register const char *tail = rindex (filename, '/');
5622 if (tail != NULL)
5623 filename = tail;
5626 fprintf (asm_out_file, "\t%s\t%u\t%s %s:%u\n",
5627 UNALIGNED_INT_ASM_OP, line, ASM_COMMENT_START,
5628 filename, line);
5629 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
5630 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, label, TEXT_BEGIN_LABEL);
5631 ASM_OUTPUT_POP_SECTION (asm_out_file);
5633 if (this_file_entry_num != prev_file_entry_num)
5634 generate_srcinfo_entry (last_line_entry_num, this_file_entry_num);
5635 prev_file_entry_num = this_file_entry_num;
5639 /* Generate an entry in the .debug_macinfo section. */
5641 static void
5642 generate_macinfo_entry (type_and_offset, string)
5643 register const char *type_and_offset;
5644 register const char *string;
5646 if (! use_gnu_debug_info_extensions)
5647 return;
5649 fputc ('\n', asm_out_file);
5650 ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION);
5651 fprintf (asm_out_file, "\t%s\t%s\n", UNALIGNED_INT_ASM_OP, type_and_offset);
5652 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, string);
5653 ASM_OUTPUT_POP_SECTION (asm_out_file);
5656 void
5657 dwarfout_start_new_source_file (filename)
5658 register const char *filename;
5660 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5661 char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*3];
5663 sprintf (label, SFNAMES_ENTRY_LABEL_FMT, lookup_filename (filename));
5664 sprintf (type_and_offset, "0x%08x+%s-%s",
5665 ((unsigned) MACINFO_start << 24),
5666 /* Hack: skip leading '*' . */
5667 (*label == '*') + label,
5668 (*SFNAMES_BEGIN_LABEL == '*') + SFNAMES_BEGIN_LABEL);
5669 generate_macinfo_entry (type_and_offset, "");
5672 void
5673 dwarfout_resume_previous_source_file (lineno)
5674 register unsigned lineno;
5676 char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
5678 sprintf (type_and_offset, "0x%08x+%u",
5679 ((unsigned) MACINFO_resume << 24), lineno);
5680 generate_macinfo_entry (type_and_offset, "");
5683 /* Called from check_newline in c-parse.y. The `buffer' parameter
5684 contains the tail part of the directive line, i.e. the part which
5685 is past the initial whitespace, #, whitespace, directive-name,
5686 whitespace part. */
5688 void
5689 dwarfout_define (lineno, buffer)
5690 register unsigned lineno;
5691 register const char *buffer;
5693 static int initialized = 0;
5694 char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
5696 if (!initialized)
5698 dwarfout_start_new_source_file (primary_filename);
5699 initialized = 1;
5701 sprintf (type_and_offset, "0x%08x+%u",
5702 ((unsigned) MACINFO_define << 24), lineno);
5703 generate_macinfo_entry (type_and_offset, buffer);
5706 /* Called from check_newline in c-parse.y. The `buffer' parameter
5707 contains the tail part of the directive line, i.e. the part which
5708 is past the initial whitespace, #, whitespace, directive-name,
5709 whitespace part. */
5711 void
5712 dwarfout_undef (lineno, buffer)
5713 register unsigned lineno;
5714 register const char *buffer;
5716 char type_and_offset[MAX_ARTIFICIAL_LABEL_BYTES*2];
5718 sprintf (type_and_offset, "0x%08x+%u",
5719 ((unsigned) MACINFO_undef << 24), lineno);
5720 generate_macinfo_entry (type_and_offset, buffer);
5723 /* Set up for Dwarf output at the start of compilation. */
5725 void
5726 dwarfout_init (asm_out_file, main_input_filename)
5727 register FILE *asm_out_file;
5728 register char *main_input_filename;
5730 /* Remember the name of the primary input file. */
5732 primary_filename = main_input_filename;
5734 /* Allocate the initial hunk of the pending_sibling_stack. */
5736 pending_sibling_stack
5737 = (unsigned *)
5738 xmalloc (PENDING_SIBLINGS_INCREMENT * sizeof (unsigned));
5739 pending_siblings_allocated = PENDING_SIBLINGS_INCREMENT;
5740 pending_siblings = 1;
5742 /* Allocate the initial hunk of the filename_table. */
5744 filename_table
5745 = (filename_entry *)
5746 xmalloc (FT_ENTRIES_INCREMENT * sizeof (filename_entry));
5747 ft_entries_allocated = FT_ENTRIES_INCREMENT;
5748 ft_entries = 0;
5750 /* Allocate the initial hunk of the pending_types_list. */
5752 pending_types_list
5753 = (tree *) xmalloc (PENDING_TYPES_INCREMENT * sizeof (tree));
5754 pending_types_allocated = PENDING_TYPES_INCREMENT;
5755 pending_types = 0;
5757 /* Create an artificial RECORD_TYPE node which we can use in our hack
5758 to get the DIEs representing types of formal parameters to come out
5759 only *after* the DIEs for the formal parameters themselves. */
5761 fake_containing_scope = make_node (RECORD_TYPE);
5763 /* Output a starting label for the .text section. */
5765 fputc ('\n', asm_out_file);
5766 ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION);
5767 ASM_OUTPUT_LABEL (asm_out_file, TEXT_BEGIN_LABEL);
5768 ASM_OUTPUT_POP_SECTION (asm_out_file);
5770 /* Output a starting label for the .data section. */
5772 fputc ('\n', asm_out_file);
5773 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION);
5774 ASM_OUTPUT_LABEL (asm_out_file, DATA_BEGIN_LABEL);
5775 ASM_OUTPUT_POP_SECTION (asm_out_file);
5777 #if 0 /* GNU C doesn't currently use .data1. */
5778 /* Output a starting label for the .data1 section. */
5780 fputc ('\n', asm_out_file);
5781 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION);
5782 ASM_OUTPUT_LABEL (asm_out_file, DATA1_BEGIN_LABEL);
5783 ASM_OUTPUT_POP_SECTION (asm_out_file);
5784 #endif
5786 /* Output a starting label for the .rodata section. */
5788 fputc ('\n', asm_out_file);
5789 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION);
5790 ASM_OUTPUT_LABEL (asm_out_file, RODATA_BEGIN_LABEL);
5791 ASM_OUTPUT_POP_SECTION (asm_out_file);
5793 #if 0 /* GNU C doesn't currently use .rodata1. */
5794 /* Output a starting label for the .rodata1 section. */
5796 fputc ('\n', asm_out_file);
5797 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION);
5798 ASM_OUTPUT_LABEL (asm_out_file, RODATA1_BEGIN_LABEL);
5799 ASM_OUTPUT_POP_SECTION (asm_out_file);
5800 #endif
5802 /* Output a starting label for the .bss section. */
5804 fputc ('\n', asm_out_file);
5805 ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION);
5806 ASM_OUTPUT_LABEL (asm_out_file, BSS_BEGIN_LABEL);
5807 ASM_OUTPUT_POP_SECTION (asm_out_file);
5809 if (debug_info_level >= DINFO_LEVEL_NORMAL)
5811 if (use_gnu_debug_info_extensions)
5813 /* Output a starting label and an initial (compilation directory)
5814 entry for the .debug_sfnames section. The starting label will be
5815 referenced by the initial entry in the .debug_srcinfo section. */
5817 fputc ('\n', asm_out_file);
5818 ASM_OUTPUT_PUSH_SECTION (asm_out_file, SFNAMES_SECTION);
5819 ASM_OUTPUT_LABEL (asm_out_file, SFNAMES_BEGIN_LABEL);
5821 register char *pwd = getpwd ();
5822 register char *dirname;
5824 if (!pwd)
5825 pfatal_with_name ("getpwd");
5826 dirname = concat (pwd, "/", NULL);
5827 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, dirname);
5828 free (dirname);
5830 ASM_OUTPUT_POP_SECTION (asm_out_file);
5833 if (debug_info_level >= DINFO_LEVEL_VERBOSE
5834 && use_gnu_debug_info_extensions)
5836 /* Output a starting label for the .debug_macinfo section. This
5837 label will be referenced by the AT_mac_info attribute in the
5838 TAG_compile_unit DIE. */
5840 fputc ('\n', asm_out_file);
5841 ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION);
5842 ASM_OUTPUT_LABEL (asm_out_file, MACINFO_BEGIN_LABEL);
5843 ASM_OUTPUT_POP_SECTION (asm_out_file);
5846 /* Generate the initial entry for the .line section. */
5848 fputc ('\n', asm_out_file);
5849 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
5850 ASM_OUTPUT_LABEL (asm_out_file, LINE_BEGIN_LABEL);
5851 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, LINE_END_LABEL, LINE_BEGIN_LABEL);
5852 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
5853 ASM_OUTPUT_POP_SECTION (asm_out_file);
5855 if (use_gnu_debug_info_extensions)
5857 /* Generate the initial entry for the .debug_srcinfo section. */
5859 fputc ('\n', asm_out_file);
5860 ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION);
5861 ASM_OUTPUT_LABEL (asm_out_file, SRCINFO_BEGIN_LABEL);
5862 ASM_OUTPUT_DWARF_ADDR (asm_out_file, LINE_BEGIN_LABEL);
5863 ASM_OUTPUT_DWARF_ADDR (asm_out_file, SFNAMES_BEGIN_LABEL);
5864 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
5865 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_END_LABEL);
5866 #ifdef DWARF_TIMESTAMPS
5867 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, time (NULL));
5868 #else
5869 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
5870 #endif
5871 ASM_OUTPUT_POP_SECTION (asm_out_file);
5874 /* Generate the initial entry for the .debug_pubnames section. */
5876 fputc ('\n', asm_out_file);
5877 ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_SECTION);
5878 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
5879 ASM_OUTPUT_POP_SECTION (asm_out_file);
5881 /* Generate the initial entry for the .debug_aranges section. */
5883 fputc ('\n', asm_out_file);
5884 ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION);
5885 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DEBUG_BEGIN_LABEL);
5886 ASM_OUTPUT_POP_SECTION (asm_out_file);
5889 /* Setup first DIE number == 1. */
5890 NEXT_DIE_NUM = next_unused_dienum++;
5892 /* Generate the initial DIE for the .debug section. Note that the
5893 (string) value given in the AT_name attribute of the TAG_compile_unit
5894 DIE will (typically) be a relative pathname and that this pathname
5895 should be taken as being relative to the directory from which the
5896 compiler was invoked when the given (base) source file was compiled. */
5898 fputc ('\n', asm_out_file);
5899 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
5900 ASM_OUTPUT_LABEL (asm_out_file, DEBUG_BEGIN_LABEL);
5901 output_die (output_compile_unit_die, main_input_filename);
5902 ASM_OUTPUT_POP_SECTION (asm_out_file);
5904 fputc ('\n', asm_out_file);
5907 /* Output stuff that dwarf requires at the end of every file. */
5909 void
5910 dwarfout_finish ()
5912 char label[MAX_ARTIFICIAL_LABEL_BYTES];
5914 retry_incomplete_types ();
5916 fputc ('\n', asm_out_file);
5917 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DEBUG_SECTION);
5919 /* Mark the end of the chain of siblings which represent all file-scope
5920 declarations in this compilation unit. */
5922 /* The (null) DIE which represents the terminator for the (sibling linked)
5923 list of file-scope items is *special*. Normally, we would just call
5924 end_sibling_chain at this point in order to output a word with the
5925 value `4' and that word would act as the terminator for the list of
5926 DIEs describing file-scope items. Unfortunately, if we were to simply
5927 do that, the label that would follow this DIE in the .debug section
5928 (i.e. `..D2') would *not* be properly aligned (as it must be on some
5929 machines) to a 4 byte boundary.
5931 In order to force the label `..D2' to get aligned to a 4 byte boundary,
5932 the trick used is to insert extra (otherwise useless) padding bytes
5933 into the (null) DIE that we know must precede the ..D2 label in the
5934 .debug section. The amount of padding required can be anywhere between
5935 0 and 3 bytes. The length word at the start of this DIE (i.e. the one
5936 with the padding) would normally contain the value 4, but now it will
5937 also have to include the padding bytes, so it will instead have some
5938 value in the range 4..7.
5940 Fortunately, the rules of Dwarf say that any DIE whose length word
5941 contains *any* value less than 8 should be treated as a null DIE, so
5942 this trick works out nicely. Clever, eh? Don't give me any credit
5943 (or blame). I didn't think of this scheme. I just conformed to it.
5946 output_die (output_padded_null_die, (void *) 0);
5947 dienum_pop ();
5949 sprintf (label, DIE_BEGIN_LABEL_FMT, NEXT_DIE_NUM);
5950 ASM_OUTPUT_LABEL (asm_out_file, label); /* should be ..D2 */
5951 ASM_OUTPUT_POP_SECTION (asm_out_file);
5953 /* Output a terminator label for the .text section. */
5955 fputc ('\n', asm_out_file);
5956 ASM_OUTPUT_PUSH_SECTION (asm_out_file, TEXT_SECTION);
5957 ASM_OUTPUT_LABEL (asm_out_file, TEXT_END_LABEL);
5958 ASM_OUTPUT_POP_SECTION (asm_out_file);
5960 /* Output a terminator label for the .data section. */
5962 fputc ('\n', asm_out_file);
5963 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA_SECTION);
5964 ASM_OUTPUT_LABEL (asm_out_file, DATA_END_LABEL);
5965 ASM_OUTPUT_POP_SECTION (asm_out_file);
5967 #if 0 /* GNU C doesn't currently use .data1. */
5968 /* Output a terminator label for the .data1 section. */
5970 fputc ('\n', asm_out_file);
5971 ASM_OUTPUT_PUSH_SECTION (asm_out_file, DATA1_SECTION);
5972 ASM_OUTPUT_LABEL (asm_out_file, DATA1_END_LABEL);
5973 ASM_OUTPUT_POP_SECTION (asm_out_file);
5974 #endif
5976 /* Output a terminator label for the .rodata section. */
5978 fputc ('\n', asm_out_file);
5979 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA_SECTION);
5980 ASM_OUTPUT_LABEL (asm_out_file, RODATA_END_LABEL);
5981 ASM_OUTPUT_POP_SECTION (asm_out_file);
5983 #if 0 /* GNU C doesn't currently use .rodata1. */
5984 /* Output a terminator label for the .rodata1 section. */
5986 fputc ('\n', asm_out_file);
5987 ASM_OUTPUT_PUSH_SECTION (asm_out_file, RODATA1_SECTION);
5988 ASM_OUTPUT_LABEL (asm_out_file, RODATA1_END_LABEL);
5989 ASM_OUTPUT_POP_SECTION (asm_out_file);
5990 #endif
5992 /* Output a terminator label for the .bss section. */
5994 fputc ('\n', asm_out_file);
5995 ASM_OUTPUT_PUSH_SECTION (asm_out_file, BSS_SECTION);
5996 ASM_OUTPUT_LABEL (asm_out_file, BSS_END_LABEL);
5997 ASM_OUTPUT_POP_SECTION (asm_out_file);
5999 if (debug_info_level >= DINFO_LEVEL_NORMAL)
6001 /* Output a terminating entry for the .line section. */
6003 fputc ('\n', asm_out_file);
6004 ASM_OUTPUT_PUSH_SECTION (asm_out_file, LINE_SECTION);
6005 ASM_OUTPUT_LABEL (asm_out_file, LINE_LAST_ENTRY_LABEL);
6006 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6007 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0xffff);
6008 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6009 ASM_OUTPUT_LABEL (asm_out_file, LINE_END_LABEL);
6010 ASM_OUTPUT_POP_SECTION (asm_out_file);
6012 if (use_gnu_debug_info_extensions)
6014 /* Output a terminating entry for the .debug_srcinfo section. */
6016 fputc ('\n', asm_out_file);
6017 ASM_OUTPUT_PUSH_SECTION (asm_out_file, SRCINFO_SECTION);
6018 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
6019 LINE_LAST_ENTRY_LABEL, LINE_BEGIN_LABEL);
6020 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, -1);
6021 ASM_OUTPUT_POP_SECTION (asm_out_file);
6024 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
6026 /* Output terminating entries for the .debug_macinfo section. */
6028 dwarfout_resume_previous_source_file (0);
6030 fputc ('\n', asm_out_file);
6031 ASM_OUTPUT_PUSH_SECTION (asm_out_file, MACINFO_SECTION);
6032 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6033 ASM_OUTPUT_DWARF_STRING_NEWLINE (asm_out_file, "");
6034 ASM_OUTPUT_POP_SECTION (asm_out_file);
6037 /* Generate the terminating entry for the .debug_pubnames section. */
6039 fputc ('\n', asm_out_file);
6040 ASM_OUTPUT_PUSH_SECTION (asm_out_file, PUBNAMES_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);
6045 /* Generate the terminating entries for the .debug_aranges section.
6047 Note that we want to do this only *after* we have output the end
6048 labels (for the various program sections) which we are going to
6049 refer to here. This allows us to work around a bug in the m68k
6050 svr4 assembler. That assembler gives bogus assembly-time errors
6051 if (within any given section) you try to take the difference of
6052 two relocatable symbols, both of which are located within some
6053 other section, and if one (or both?) of the symbols involved is
6054 being forward-referenced. By generating the .debug_aranges
6055 entries at this late point in the assembly output, we skirt the
6056 issue simply by avoiding forward-references.
6059 fputc ('\n', asm_out_file);
6060 ASM_OUTPUT_PUSH_SECTION (asm_out_file, ARANGES_SECTION);
6062 ASM_OUTPUT_DWARF_ADDR (asm_out_file, TEXT_BEGIN_LABEL);
6063 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, TEXT_END_LABEL, TEXT_BEGIN_LABEL);
6065 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA_BEGIN_LABEL);
6066 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA_END_LABEL, DATA_BEGIN_LABEL);
6068 #if 0 /* GNU C doesn't currently use .data1. */
6069 ASM_OUTPUT_DWARF_ADDR (asm_out_file, DATA1_BEGIN_LABEL);
6070 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, DATA1_END_LABEL,
6071 DATA1_BEGIN_LABEL);
6072 #endif
6074 ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA_BEGIN_LABEL);
6075 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA_END_LABEL,
6076 RODATA_BEGIN_LABEL);
6078 #if 0 /* GNU C doesn't currently use .rodata1. */
6079 ASM_OUTPUT_DWARF_ADDR (asm_out_file, RODATA1_BEGIN_LABEL);
6080 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, RODATA1_END_LABEL,
6081 RODATA1_BEGIN_LABEL);
6082 #endif
6084 ASM_OUTPUT_DWARF_ADDR (asm_out_file, BSS_BEGIN_LABEL);
6085 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, BSS_END_LABEL, BSS_BEGIN_LABEL);
6087 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6088 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
6090 ASM_OUTPUT_POP_SECTION (asm_out_file);
6093 /* There should not be any pending types left at the end. We need
6094 this now because it may not have been checked on the last call to
6095 dwarfout_file_scope_decl. */
6096 if (pending_types != 0)
6097 abort ();
6100 #endif /* DWARF_DEBUGGING_INFO */