1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Gary Funck (gary@intrepid.com).
5 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6 Extensively modified by Jason Merrill (jason@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 2, or (at your option) any later
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING. If not, write to the Free
22 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
25 /* TODO: Emit .debug_line header even when there are no functions, since
26 the file numbers are used by .debug_info. Alternately, leave
27 out locations for types and decls.
28 Avoid talking about ctors and op= for PODs.
29 Factor out common prologue sequences into multiple CIEs. */
31 /* The first part of this file deals with the DWARF 2 frame unwind
32 information, which is also used by the GCC efficient exception handling
33 mechanism. The second part, controlled only by an #ifdef
34 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
39 #include "coretypes.h"
46 #include "hard-reg-set.h"
48 #include "insn-config.h"
56 #include "dwarf2out.h"
57 #include "dwarf2asm.h"
63 #include "diagnostic.h"
66 #include "langhooks.h"
71 #ifdef DWARF2_DEBUGGING_INFO
72 static void dwarf2out_source_line (unsigned int, const char *);
75 /* DWARF2 Abbreviation Glossary:
76 CFA = Canonical Frame Address
77 a fixed address on the stack which identifies a call frame.
78 We define it to be the value of SP just before the call insn.
79 The CFA register and offset, which may change during the course
80 of the function, are used to calculate its value at runtime.
81 CFI = Call Frame Instruction
82 an instruction for the DWARF2 abstract machine
83 CIE = Common Information Entry
84 information describing information common to one or more FDEs
85 DIE = Debugging Information Entry
86 FDE = Frame Description Entry
87 information describing the stack call frame, in particular,
88 how to restore registers
90 DW_CFA_... = DWARF2 CFA call frame instruction
91 DW_TAG_... = DWARF2 DIE tag */
93 /* Decide whether we want to emit frame unwind information for the current
97 dwarf2out_do_frame (void)
99 return (write_symbols == DWARF2_DEBUG
100 || write_symbols == VMS_AND_DWARF2_DEBUG
101 #ifdef DWARF2_FRAME_INFO
104 #ifdef DWARF2_UNWIND_INFO
105 || flag_unwind_tables
106 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
111 /* The size of the target's pointer type. */
113 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
116 /* Return the default value of eh_frame_section. Note that this function
117 must appear outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO
121 default_eh_frame_section (void)
123 #ifdef EH_FRAME_SECTION_NAME
126 if (EH_TABLES_CAN_BE_READ_ONLY)
132 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
133 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
134 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
136 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
137 && (fde_encoding & 0x70) != DW_EH_PE_aligned
138 && (per_encoding & 0x70) != DW_EH_PE_absptr
139 && (per_encoding & 0x70) != DW_EH_PE_aligned
140 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
141 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
145 flags = SECTION_WRITE;
146 return get_section (EH_FRAME_SECTION_NAME, flags, NULL);
153 DEF_VEC_ALLOC_P(rtx,gc);
155 /* Array of RTXes referenced by the debugging information, which therefore
156 must be kept around forever. */
157 static GTY(()) VEC(rtx,gc) *used_rtx_array;
159 /* A pointer to the base of a list of incomplete types which might be
160 completed at some later time. incomplete_types_list needs to be a
161 VEC(tree,gc) because we want to tell the garbage collector about
163 static GTY(()) VEC(tree,gc) *incomplete_types;
165 /* A pointer to the base of a table of references to declaration
166 scopes. This table is a display which tracks the nesting
167 of declaration scopes at the current scope and containing
168 scopes. This table is used to find the proper place to
169 define type declaration DIE's. */
170 static GTY(()) VEC(tree,gc) *decl_scope_table;
172 /* Pointers to various DWARF2 sections. */
173 static GTY(()) section *debug_info_section;
174 static GTY(()) section *debug_abbrev_section;
175 static GTY(()) section *debug_aranges_section;
176 static GTY(()) section *debug_macinfo_section;
177 static GTY(()) section *debug_line_section;
178 static GTY(()) section *debug_loc_section;
179 static GTY(()) section *debug_pubnames_section;
180 static GTY(()) section *debug_str_section;
181 static GTY(()) section *debug_ranges_section;
183 /* How to start an assembler comment. */
184 #ifndef ASM_COMMENT_START
185 #define ASM_COMMENT_START ";#"
188 typedef struct dw_cfi_struct *dw_cfi_ref;
189 typedef struct dw_fde_struct *dw_fde_ref;
190 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
192 /* Call frames are described using a sequence of Call Frame
193 Information instructions. The register number, offset
194 and address fields are provided as possible operands;
195 their use is selected by the opcode field. */
197 enum dw_cfi_oprnd_type {
199 dw_cfi_oprnd_reg_num,
205 typedef union dw_cfi_oprnd_struct GTY(())
207 unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
208 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
209 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
210 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
214 typedef struct dw_cfi_struct GTY(())
216 dw_cfi_ref dw_cfi_next;
217 enum dwarf_call_frame_info dw_cfi_opc;
218 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
220 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
225 /* This is how we define the location of the CFA. We use to handle it
226 as REG + OFFSET all the time, but now it can be more complex.
227 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
228 Instead of passing around REG and OFFSET, we pass a copy
229 of this structure. */
230 typedef struct cfa_loc GTY(())
232 HOST_WIDE_INT offset;
233 HOST_WIDE_INT base_offset;
235 int indirect; /* 1 if CFA is accessed via a dereference. */
238 /* All call frame descriptions (FDE's) in the GCC generated DWARF
239 refer to a single Common Information Entry (CIE), defined at
240 the beginning of the .debug_frame section. This use of a single
241 CIE obviates the need to keep track of multiple CIE's
242 in the DWARF generation routines below. */
244 typedef struct dw_fde_struct GTY(())
247 const char *dw_fde_begin;
248 const char *dw_fde_current_label;
249 const char *dw_fde_end;
250 const char *dw_fde_hot_section_label;
251 const char *dw_fde_hot_section_end_label;
252 const char *dw_fde_unlikely_section_label;
253 const char *dw_fde_unlikely_section_end_label;
254 bool dw_fde_switched_sections;
255 dw_cfi_ref dw_fde_cfi;
256 unsigned funcdef_number;
257 unsigned all_throwers_are_sibcalls : 1;
258 unsigned nothrow : 1;
259 unsigned uses_eh_lsda : 1;
263 /* Maximum size (in bytes) of an artificially generated label. */
264 #define MAX_ARTIFICIAL_LABEL_BYTES 30
266 /* The size of addresses as they appear in the Dwarf 2 data.
267 Some architectures use word addresses to refer to code locations,
268 but Dwarf 2 info always uses byte addresses. On such machines,
269 Dwarf 2 addresses need to be larger than the architecture's
271 #ifndef DWARF2_ADDR_SIZE
272 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
275 /* The size in bytes of a DWARF field indicating an offset or length
276 relative to a debug info section, specified to be 4 bytes in the
277 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
280 #ifndef DWARF_OFFSET_SIZE
281 #define DWARF_OFFSET_SIZE 4
284 /* According to the (draft) DWARF 3 specification, the initial length
285 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
286 bytes are 0xffffffff, followed by the length stored in the next 8
289 However, the SGI/MIPS ABI uses an initial length which is equal to
290 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
292 #ifndef DWARF_INITIAL_LENGTH_SIZE
293 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
296 #define DWARF_VERSION 2
298 /* Round SIZE up to the nearest BOUNDARY. */
299 #define DWARF_ROUND(SIZE,BOUNDARY) \
300 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
302 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
303 #ifndef DWARF_CIE_DATA_ALIGNMENT
304 #ifdef STACK_GROWS_DOWNWARD
305 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
307 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
311 /* A pointer to the base of a table that contains frame description
312 information for each routine. */
313 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
315 /* Number of elements currently allocated for fde_table. */
316 static GTY(()) unsigned fde_table_allocated;
318 /* Number of elements in fde_table currently in use. */
319 static GTY(()) unsigned fde_table_in_use;
321 /* Size (in elements) of increments by which we may expand the
323 #define FDE_TABLE_INCREMENT 256
325 /* A list of call frame insns for the CIE. */
326 static GTY(()) dw_cfi_ref cie_cfi_head;
328 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
329 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
330 attribute that accelerates the lookup of the FDE associated
331 with the subprogram. This variable holds the table index of the FDE
332 associated with the current function (body) definition. */
333 static unsigned current_funcdef_fde;
336 struct indirect_string_node GTY(())
339 unsigned int refcount;
344 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
346 static GTY(()) int dw2_string_counter;
347 static GTY(()) unsigned long dwarf2out_cfi_label_num;
349 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
351 /* Forward declarations for functions defined in this file. */
353 static char *stripattributes (const char *);
354 static const char *dwarf_cfi_name (unsigned);
355 static dw_cfi_ref new_cfi (void);
356 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
357 static void add_fde_cfi (const char *, dw_cfi_ref);
358 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
359 static void lookup_cfa (dw_cfa_location *);
360 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
361 static void initial_return_save (rtx);
362 static HOST_WIDE_INT stack_adjust_offset (rtx);
363 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
364 static void output_call_frame_info (int);
365 static void dwarf2out_stack_adjust (rtx, bool);
366 static void flush_queued_reg_saves (void);
367 static bool clobbers_queued_reg_save (rtx);
368 static void dwarf2out_frame_debug_expr (rtx, const char *);
370 /* Support for complex CFA locations. */
371 static void output_cfa_loc (dw_cfi_ref);
372 static void get_cfa_from_loc_descr (dw_cfa_location *,
373 struct dw_loc_descr_struct *);
374 static struct dw_loc_descr_struct *build_cfa_loc
376 static void def_cfa_1 (const char *, dw_cfa_location *);
378 /* How to start an assembler comment. */
379 #ifndef ASM_COMMENT_START
380 #define ASM_COMMENT_START ";#"
383 /* Data and reference forms for relocatable data. */
384 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
385 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
387 #ifndef DEBUG_FRAME_SECTION
388 #define DEBUG_FRAME_SECTION ".debug_frame"
391 #ifndef FUNC_BEGIN_LABEL
392 #define FUNC_BEGIN_LABEL "LFB"
395 #ifndef FUNC_END_LABEL
396 #define FUNC_END_LABEL "LFE"
399 #ifndef FRAME_BEGIN_LABEL
400 #define FRAME_BEGIN_LABEL "Lframe"
402 #define CIE_AFTER_SIZE_LABEL "LSCIE"
403 #define CIE_END_LABEL "LECIE"
404 #define FDE_LABEL "LSFDE"
405 #define FDE_AFTER_SIZE_LABEL "LASFDE"
406 #define FDE_END_LABEL "LEFDE"
407 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
408 #define LINE_NUMBER_END_LABEL "LELT"
409 #define LN_PROLOG_AS_LABEL "LASLTP"
410 #define LN_PROLOG_END_LABEL "LELTP"
411 #define DIE_LABEL_PREFIX "DW"
413 /* The DWARF 2 CFA column which tracks the return address. Normally this
414 is the column for PC, or the first column after all of the hard
416 #ifndef DWARF_FRAME_RETURN_COLUMN
418 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
420 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
424 /* The mapping from gcc register number to DWARF 2 CFA column number. By
425 default, we just provide columns for all registers. */
426 #ifndef DWARF_FRAME_REGNUM
427 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
430 /* Hook used by __throw. */
433 expand_builtin_dwarf_sp_column (void)
435 return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
438 /* Return a pointer to a copy of the section string name S with all
439 attributes stripped off, and an asterisk prepended (for assemble_name). */
442 stripattributes (const char *s)
444 char *stripped = xmalloc (strlen (s) + 2);
449 while (*s && *s != ',')
456 /* Generate code to initialize the register size table. */
459 expand_builtin_init_dwarf_reg_sizes (tree address)
462 enum machine_mode mode = TYPE_MODE (char_type_node);
463 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
464 rtx mem = gen_rtx_MEM (BLKmode, addr);
465 bool wrote_return_column = false;
467 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
468 if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
470 HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
471 enum machine_mode save_mode = reg_raw_mode[i];
474 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
475 save_mode = choose_hard_reg_mode (i, 1, true);
476 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
478 if (save_mode == VOIDmode)
480 wrote_return_column = true;
482 size = GET_MODE_SIZE (save_mode);
486 emit_move_insn (adjust_address (mem, mode, offset),
487 gen_int_mode (size, mode));
490 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
491 gcc_assert (wrote_return_column);
492 i = DWARF_ALT_FRAME_RETURN_COLUMN;
493 wrote_return_column = false;
495 i = DWARF_FRAME_RETURN_COLUMN;
498 if (! wrote_return_column)
500 enum machine_mode save_mode = Pmode;
501 HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
502 HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
503 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
507 /* Convert a DWARF call frame info. operation to its string name */
510 dwarf_cfi_name (unsigned int cfi_opc)
514 case DW_CFA_advance_loc:
515 return "DW_CFA_advance_loc";
517 return "DW_CFA_offset";
519 return "DW_CFA_restore";
523 return "DW_CFA_set_loc";
524 case DW_CFA_advance_loc1:
525 return "DW_CFA_advance_loc1";
526 case DW_CFA_advance_loc2:
527 return "DW_CFA_advance_loc2";
528 case DW_CFA_advance_loc4:
529 return "DW_CFA_advance_loc4";
530 case DW_CFA_offset_extended:
531 return "DW_CFA_offset_extended";
532 case DW_CFA_restore_extended:
533 return "DW_CFA_restore_extended";
534 case DW_CFA_undefined:
535 return "DW_CFA_undefined";
536 case DW_CFA_same_value:
537 return "DW_CFA_same_value";
538 case DW_CFA_register:
539 return "DW_CFA_register";
540 case DW_CFA_remember_state:
541 return "DW_CFA_remember_state";
542 case DW_CFA_restore_state:
543 return "DW_CFA_restore_state";
545 return "DW_CFA_def_cfa";
546 case DW_CFA_def_cfa_register:
547 return "DW_CFA_def_cfa_register";
548 case DW_CFA_def_cfa_offset:
549 return "DW_CFA_def_cfa_offset";
552 case DW_CFA_def_cfa_expression:
553 return "DW_CFA_def_cfa_expression";
554 case DW_CFA_expression:
555 return "DW_CFA_expression";
556 case DW_CFA_offset_extended_sf:
557 return "DW_CFA_offset_extended_sf";
558 case DW_CFA_def_cfa_sf:
559 return "DW_CFA_def_cfa_sf";
560 case DW_CFA_def_cfa_offset_sf:
561 return "DW_CFA_def_cfa_offset_sf";
563 /* SGI/MIPS specific */
564 case DW_CFA_MIPS_advance_loc8:
565 return "DW_CFA_MIPS_advance_loc8";
568 case DW_CFA_GNU_window_save:
569 return "DW_CFA_GNU_window_save";
570 case DW_CFA_GNU_args_size:
571 return "DW_CFA_GNU_args_size";
572 case DW_CFA_GNU_negative_offset_extended:
573 return "DW_CFA_GNU_negative_offset_extended";
576 return "DW_CFA_<unknown>";
580 /* Return a pointer to a newly allocated Call Frame Instruction. */
582 static inline dw_cfi_ref
585 dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
587 cfi->dw_cfi_next = NULL;
588 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
589 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
594 /* Add a Call Frame Instruction to list of instructions. */
597 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
601 /* Find the end of the chain. */
602 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
608 /* Generate a new label for the CFI info to refer to. */
611 dwarf2out_cfi_label (void)
613 static char label[20];
615 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
616 ASM_OUTPUT_LABEL (asm_out_file, label);
620 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
621 or to the CIE if LABEL is NULL. */
624 add_fde_cfi (const char *label, dw_cfi_ref cfi)
628 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
631 label = dwarf2out_cfi_label ();
633 if (fde->dw_fde_current_label == NULL
634 || strcmp (label, fde->dw_fde_current_label) != 0)
638 fde->dw_fde_current_label = label = xstrdup (label);
640 /* Set the location counter to the new label. */
642 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
643 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
644 add_cfi (&fde->dw_fde_cfi, xcfi);
647 add_cfi (&fde->dw_fde_cfi, cfi);
651 add_cfi (&cie_cfi_head, cfi);
654 /* Subroutine of lookup_cfa. */
657 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
659 switch (cfi->dw_cfi_opc)
661 case DW_CFA_def_cfa_offset:
662 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
664 case DW_CFA_def_cfa_offset_sf:
666 = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
668 case DW_CFA_def_cfa_register:
669 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
672 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
673 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
675 case DW_CFA_def_cfa_sf:
676 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
678 = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
680 case DW_CFA_def_cfa_expression:
681 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
688 /* Find the previous value for the CFA. */
691 lookup_cfa (dw_cfa_location *loc)
695 loc->reg = INVALID_REGNUM;
698 loc->base_offset = 0;
700 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
701 lookup_cfa_1 (cfi, loc);
703 if (fde_table_in_use)
705 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
706 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
707 lookup_cfa_1 (cfi, loc);
711 /* The current rule for calculating the DWARF2 canonical frame address. */
712 static dw_cfa_location cfa;
714 /* The register used for saving registers to the stack, and its offset
716 static dw_cfa_location cfa_store;
718 /* The running total of the size of arguments pushed onto the stack. */
719 static HOST_WIDE_INT args_size;
721 /* The last args_size we actually output. */
722 static HOST_WIDE_INT old_args_size;
724 /* Entry point to update the canonical frame address (CFA).
725 LABEL is passed to add_fde_cfi. The value of CFA is now to be
726 calculated from REG+OFFSET. */
729 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
736 def_cfa_1 (label, &loc);
739 /* Determine if two dw_cfa_location structures define the same data. */
742 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
744 return (loc1->reg == loc2->reg
745 && loc1->offset == loc2->offset
746 && loc1->indirect == loc2->indirect
747 && (loc1->indirect == 0
748 || loc1->base_offset == loc2->base_offset));
751 /* This routine does the actual work. The CFA is now calculated from
752 the dw_cfa_location structure. */
755 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
758 dw_cfa_location old_cfa, loc;
763 if (cfa_store.reg == loc.reg && loc.indirect == 0)
764 cfa_store.offset = loc.offset;
766 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
767 lookup_cfa (&old_cfa);
769 /* If nothing changed, no need to issue any call frame instructions. */
770 if (cfa_equal_p (&loc, &old_cfa))
775 if (loc.reg == old_cfa.reg && !loc.indirect)
777 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
778 the CFA register did not change but the offset did. */
781 HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
782 gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
784 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
785 cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset;
789 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
790 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
794 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
795 else if (loc.offset == old_cfa.offset
796 && old_cfa.reg != INVALID_REGNUM
799 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
800 indicating the CFA register has changed to <register> but the
801 offset has not changed. */
802 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
803 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
807 else if (loc.indirect == 0)
809 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
810 indicating the CFA register has changed to <register> with
811 the specified offset. */
814 HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
815 gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
817 cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
818 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
819 cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset;
823 cfi->dw_cfi_opc = DW_CFA_def_cfa;
824 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
825 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
830 /* Construct a DW_CFA_def_cfa_expression instruction to
831 calculate the CFA using a full location expression since no
832 register-offset pair is available. */
833 struct dw_loc_descr_struct *loc_list;
835 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
836 loc_list = build_cfa_loc (&loc);
837 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
840 add_fde_cfi (label, cfi);
843 /* Add the CFI for saving a register. REG is the CFA column number.
844 LABEL is passed to add_fde_cfi.
845 If SREG is -1, the register is saved at OFFSET from the CFA;
846 otherwise it is saved in SREG. */
849 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
851 dw_cfi_ref cfi = new_cfi ();
853 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
855 if (sreg == INVALID_REGNUM)
858 /* The register number won't fit in 6 bits, so we have to use
860 cfi->dw_cfi_opc = DW_CFA_offset_extended;
862 cfi->dw_cfi_opc = DW_CFA_offset;
864 #ifdef ENABLE_CHECKING
866 /* If we get an offset that is not a multiple of
867 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
868 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
870 HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
872 gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
875 offset /= DWARF_CIE_DATA_ALIGNMENT;
877 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
879 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
881 else if (sreg == reg)
882 cfi->dw_cfi_opc = DW_CFA_same_value;
885 cfi->dw_cfi_opc = DW_CFA_register;
886 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
889 add_fde_cfi (label, cfi);
892 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
893 This CFI tells the unwinder that it needs to restore the window registers
894 from the previous frame's window save area.
896 ??? Perhaps we should note in the CIE where windows are saved (instead of
897 assuming 0(cfa)) and what registers are in the window. */
900 dwarf2out_window_save (const char *label)
902 dw_cfi_ref cfi = new_cfi ();
904 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
905 add_fde_cfi (label, cfi);
908 /* Add a CFI to update the running total of the size of arguments
909 pushed onto the stack. */
912 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
916 if (size == old_args_size)
919 old_args_size = size;
922 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
923 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
924 add_fde_cfi (label, cfi);
927 /* Entry point for saving a register to the stack. REG is the GCC register
928 number. LABEL and OFFSET are passed to reg_save. */
931 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
933 reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
936 /* Entry point for saving the return address in the stack.
937 LABEL and OFFSET are passed to reg_save. */
940 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
942 reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
945 /* Entry point for saving the return address in a register.
946 LABEL and SREG are passed to reg_save. */
949 dwarf2out_return_reg (const char *label, unsigned int sreg)
951 reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
954 /* Record the initial position of the return address. RTL is
955 INCOMING_RETURN_ADDR_RTX. */
958 initial_return_save (rtx rtl)
960 unsigned int reg = INVALID_REGNUM;
961 HOST_WIDE_INT offset = 0;
963 switch (GET_CODE (rtl))
966 /* RA is in a register. */
967 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
971 /* RA is on the stack. */
973 switch (GET_CODE (rtl))
976 gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
981 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
982 offset = INTVAL (XEXP (rtl, 1));
986 gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
987 offset = -INTVAL (XEXP (rtl, 1));
997 /* The return address is at some offset from any value we can
998 actually load. For instance, on the SPARC it is in %i7+8. Just
999 ignore the offset for now; it doesn't matter for unwinding frames. */
1000 gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
1001 initial_return_save (XEXP (rtl, 0));
1008 if (reg != DWARF_FRAME_RETURN_COLUMN)
1009 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1012 /* Given a SET, calculate the amount of stack adjustment it
1015 static HOST_WIDE_INT
1016 stack_adjust_offset (rtx pattern)
1018 rtx src = SET_SRC (pattern);
1019 rtx dest = SET_DEST (pattern);
1020 HOST_WIDE_INT offset = 0;
1023 if (dest == stack_pointer_rtx)
1025 /* (set (reg sp) (plus (reg sp) (const_int))) */
1026 code = GET_CODE (src);
1027 if (! (code == PLUS || code == MINUS)
1028 || XEXP (src, 0) != stack_pointer_rtx
1029 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1032 offset = INTVAL (XEXP (src, 1));
1036 else if (MEM_P (dest))
1038 /* (set (mem (pre_dec (reg sp))) (foo)) */
1039 src = XEXP (dest, 0);
1040 code = GET_CODE (src);
1046 if (XEXP (src, 0) == stack_pointer_rtx)
1048 rtx val = XEXP (XEXP (src, 1), 1);
1049 /* We handle only adjustments by constant amount. */
1050 gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1051 && GET_CODE (val) == CONST_INT);
1052 offset = -INTVAL (val);
1059 if (XEXP (src, 0) == stack_pointer_rtx)
1061 offset = GET_MODE_SIZE (GET_MODE (dest));
1068 if (XEXP (src, 0) == stack_pointer_rtx)
1070 offset = -GET_MODE_SIZE (GET_MODE (dest));
1085 /* Check INSN to see if it looks like a push or a stack adjustment, and
1086 make a note of it if it does. EH uses this information to find out how
1087 much extra space it needs to pop off the stack. */
1090 dwarf2out_stack_adjust (rtx insn, bool after_p)
1092 HOST_WIDE_INT offset;
1096 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1097 with this function. Proper support would require all frame-related
1098 insns to be marked, and to be able to handle saving state around
1099 epilogues textually in the middle of the function. */
1100 if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1103 /* If only calls can throw, and we have a frame pointer,
1104 save up adjustments until we see the CALL_INSN. */
1105 if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1107 if (CALL_P (insn) && !after_p)
1109 /* Extract the size of the args from the CALL rtx itself. */
1110 insn = PATTERN (insn);
1111 if (GET_CODE (insn) == PARALLEL)
1112 insn = XVECEXP (insn, 0, 0);
1113 if (GET_CODE (insn) == SET)
1114 insn = SET_SRC (insn);
1115 gcc_assert (GET_CODE (insn) == CALL);
1116 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1121 if (CALL_P (insn) && !after_p)
1123 if (!flag_asynchronous_unwind_tables)
1124 dwarf2out_args_size ("", args_size);
1127 else if (BARRIER_P (insn))
1129 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1130 the compiler will have already emitted a stack adjustment, but
1131 doesn't bother for calls to noreturn functions. */
1132 #ifdef STACK_GROWS_DOWNWARD
1133 offset = -args_size;
1138 else if (GET_CODE (PATTERN (insn)) == SET)
1139 offset = stack_adjust_offset (PATTERN (insn));
1140 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1141 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1143 /* There may be stack adjustments inside compound insns. Search
1145 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1146 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1147 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1155 if (cfa.reg == STACK_POINTER_REGNUM)
1156 cfa.offset += offset;
1158 #ifndef STACK_GROWS_DOWNWARD
1162 args_size += offset;
1166 label = dwarf2out_cfi_label ();
1167 def_cfa_1 (label, &cfa);
1168 if (flag_asynchronous_unwind_tables)
1169 dwarf2out_args_size (label, args_size);
1174 /* We delay emitting a register save until either (a) we reach the end
1175 of the prologue or (b) the register is clobbered. This clusters
1176 register saves so that there are fewer pc advances. */
1178 struct queued_reg_save GTY(())
1180 struct queued_reg_save *next;
1182 HOST_WIDE_INT cfa_offset;
1186 static GTY(()) struct queued_reg_save *queued_reg_saves;
1188 /* The caller's ORIG_REG is saved in SAVED_IN_REG. */
1189 struct reg_saved_in_data GTY(()) {
1194 /* A list of registers saved in other registers.
1195 The list intentionally has a small maximum capacity of 4; if your
1196 port needs more than that, you might consider implementing a
1197 more efficient data structure. */
1198 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1199 static GTY(()) size_t num_regs_saved_in_regs;
1201 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1202 static const char *last_reg_save_label;
1204 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1205 SREG, or if SREG is NULL then it is saved at OFFSET to the CFA. */
1208 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1210 struct queued_reg_save *q;
1212 /* Duplicates waste space, but it's also necessary to remove them
1213 for correctness, since the queue gets output in reverse
1215 for (q = queued_reg_saves; q != NULL; q = q->next)
1216 if (REGNO (q->reg) == REGNO (reg))
1221 q = ggc_alloc (sizeof (*q));
1222 q->next = queued_reg_saves;
1223 queued_reg_saves = q;
1227 q->cfa_offset = offset;
1228 q->saved_reg = sreg;
1230 last_reg_save_label = label;
1233 /* Output all the entries in QUEUED_REG_SAVES. */
1236 flush_queued_reg_saves (void)
1238 struct queued_reg_save *q;
1240 for (q = queued_reg_saves; q; q = q->next)
1243 unsigned int reg, sreg;
1245 for (i = 0; i < num_regs_saved_in_regs; i++)
1246 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1248 if (q->saved_reg && i == num_regs_saved_in_regs)
1250 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1251 num_regs_saved_in_regs++;
1253 if (i != num_regs_saved_in_regs)
1255 regs_saved_in_regs[i].orig_reg = q->reg;
1256 regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1259 reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1261 sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1263 sreg = INVALID_REGNUM;
1264 reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1267 queued_reg_saves = NULL;
1268 last_reg_save_label = NULL;
1271 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1272 location for? Or, does it clobber a register which we've previously
1273 said that some other register is saved in, and for which we now
1274 have a new location for? */
1277 clobbers_queued_reg_save (rtx insn)
1279 struct queued_reg_save *q;
1281 for (q = queued_reg_saves; q; q = q->next)
1284 if (modified_in_p (q->reg, insn))
1286 for (i = 0; i < num_regs_saved_in_regs; i++)
1287 if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1288 && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1295 /* Entry point for saving the first register into the second. */
1298 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1301 unsigned int regno, sregno;
1303 for (i = 0; i < num_regs_saved_in_regs; i++)
1304 if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1306 if (i == num_regs_saved_in_regs)
1308 gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1309 num_regs_saved_in_regs++;
1311 regs_saved_in_regs[i].orig_reg = reg;
1312 regs_saved_in_regs[i].saved_in_reg = sreg;
1314 regno = DWARF_FRAME_REGNUM (REGNO (reg));
1315 sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1316 reg_save (label, regno, sregno, 0);
1319 /* What register, if any, is currently saved in REG? */
1322 reg_saved_in (rtx reg)
1324 unsigned int regn = REGNO (reg);
1326 struct queued_reg_save *q;
1328 for (q = queued_reg_saves; q; q = q->next)
1329 if (q->saved_reg && regn == REGNO (q->saved_reg))
1332 for (i = 0; i < num_regs_saved_in_regs; i++)
1333 if (regs_saved_in_regs[i].saved_in_reg
1334 && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1335 return regs_saved_in_regs[i].orig_reg;
1341 /* A temporary register holding an integral value used in adjusting SP
1342 or setting up the store_reg. The "offset" field holds the integer
1343 value, not an offset. */
1344 static dw_cfa_location cfa_temp;
1346 /* Record call frame debugging information for an expression EXPR,
1347 which either sets SP or FP (adjusting how we calculate the frame
1348 address) or saves a register to the stack or another register.
1349 LABEL indicates the address of EXPR.
1351 This function encodes a state machine mapping rtxes to actions on
1352 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1353 users need not read the source code.
1355 The High-Level Picture
1357 Changes in the register we use to calculate the CFA: Currently we
1358 assume that if you copy the CFA register into another register, we
1359 should take the other one as the new CFA register; this seems to
1360 work pretty well. If it's wrong for some target, it's simple
1361 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1363 Changes in the register we use for saving registers to the stack:
1364 This is usually SP, but not always. Again, we deduce that if you
1365 copy SP into another register (and SP is not the CFA register),
1366 then the new register is the one we will be using for register
1367 saves. This also seems to work.
1369 Register saves: There's not much guesswork about this one; if
1370 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1371 register save, and the register used to calculate the destination
1372 had better be the one we think we're using for this purpose.
1373 It's also assumed that a copy from a call-saved register to another
1374 register is saving that register if RTX_FRAME_RELATED_P is set on
1375 that instruction. If the copy is from a call-saved register to
1376 the *same* register, that means that the register is now the same
1377 value as in the caller.
1379 Except: If the register being saved is the CFA register, and the
1380 offset is nonzero, we are saving the CFA, so we assume we have to
1381 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1382 the intent is to save the value of SP from the previous frame.
1384 In addition, if a register has previously been saved to a different
1387 Invariants / Summaries of Rules
1389 cfa current rule for calculating the CFA. It usually
1390 consists of a register and an offset.
1391 cfa_store register used by prologue code to save things to the stack
1392 cfa_store.offset is the offset from the value of
1393 cfa_store.reg to the actual CFA
1394 cfa_temp register holding an integral value. cfa_temp.offset
1395 stores the value, which will be used to adjust the
1396 stack pointer. cfa_temp is also used like cfa_store,
1397 to track stores to the stack via fp or a temp reg.
1399 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1400 with cfa.reg as the first operand changes the cfa.reg and its
1401 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1404 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1405 expression yielding a constant. This sets cfa_temp.reg
1406 and cfa_temp.offset.
1408 Rule 5: Create a new register cfa_store used to save items to the
1411 Rules 10-14: Save a register to the stack. Define offset as the
1412 difference of the original location and cfa_store's
1413 location (or cfa_temp's location if cfa_temp is used).
1417 "{a,b}" indicates a choice of a xor b.
1418 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1421 (set <reg1> <reg2>:cfa.reg)
1422 effects: cfa.reg = <reg1>
1423 cfa.offset unchanged
1424 cfa_temp.reg = <reg1>
1425 cfa_temp.offset = cfa.offset
1428 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1429 {<const_int>,<reg>:cfa_temp.reg}))
1430 effects: cfa.reg = sp if fp used
1431 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1432 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1433 if cfa_store.reg==sp
1436 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1437 effects: cfa.reg = fp
1438 cfa_offset += +/- <const_int>
1441 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1442 constraints: <reg1> != fp
1444 effects: cfa.reg = <reg1>
1445 cfa_temp.reg = <reg1>
1446 cfa_temp.offset = cfa.offset
1449 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1450 constraints: <reg1> != fp
1452 effects: cfa_store.reg = <reg1>
1453 cfa_store.offset = cfa.offset - cfa_temp.offset
1456 (set <reg> <const_int>)
1457 effects: cfa_temp.reg = <reg>
1458 cfa_temp.offset = <const_int>
1461 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1462 effects: cfa_temp.reg = <reg1>
1463 cfa_temp.offset |= <const_int>
1466 (set <reg> (high <exp>))
1470 (set <reg> (lo_sum <exp> <const_int>))
1471 effects: cfa_temp.reg = <reg>
1472 cfa_temp.offset = <const_int>
1475 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1476 effects: cfa_store.offset -= <const_int>
1477 cfa.offset = cfa_store.offset if cfa.reg == sp
1479 cfa.base_offset = -cfa_store.offset
1482 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1483 effects: cfa_store.offset += -/+ mode_size(mem)
1484 cfa.offset = cfa_store.offset if cfa.reg == sp
1486 cfa.base_offset = -cfa_store.offset
1489 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1492 effects: cfa.reg = <reg1>
1493 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1496 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1497 effects: cfa.reg = <reg1>
1498 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1501 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1502 effects: cfa.reg = <reg1>
1503 cfa.base_offset = -cfa_temp.offset
1504 cfa_temp.offset -= mode_size(mem)
1507 Â (set <reg> {unspec, unspec_volatile})
1508 Â effects: target-dependent */
1511 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1514 HOST_WIDE_INT offset;
1516 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1517 the PARALLEL independently. The first element is always processed if
1518 it is a SET. This is for backward compatibility. Other elements
1519 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1520 flag is set in them. */
1521 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1524 int limit = XVECLEN (expr, 0);
1526 for (par_index = 0; par_index < limit; par_index++)
1527 if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1528 && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1530 dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1535 gcc_assert (GET_CODE (expr) == SET);
1537 src = SET_SRC (expr);
1538 dest = SET_DEST (expr);
1542 rtx rsi = reg_saved_in (src);
1547 switch (GET_CODE (dest))
1550 switch (GET_CODE (src))
1552 /* Setting FP from SP. */
1554 if (cfa.reg == (unsigned) REGNO (src))
1557 /* Update the CFA rule wrt SP or FP. Make sure src is
1558 relative to the current CFA register.
1560 We used to require that dest be either SP or FP, but the
1561 ARM copies SP to a temporary register, and from there to
1562 FP. So we just rely on the backends to only set
1563 RTX_FRAME_RELATED_P on appropriate insns. */
1564 cfa.reg = REGNO (dest);
1565 cfa_temp.reg = cfa.reg;
1566 cfa_temp.offset = cfa.offset;
1570 /* Saving a register in a register. */
1571 gcc_assert (!fixed_regs [REGNO (dest)]
1572 /* For the SPARC and its register window. */
1573 || (DWARF_FRAME_REGNUM (REGNO (src))
1574 == DWARF_FRAME_RETURN_COLUMN));
1575 queue_reg_save (label, src, dest, 0);
1582 if (dest == stack_pointer_rtx)
1586 switch (GET_CODE (XEXP (src, 1)))
1589 offset = INTVAL (XEXP (src, 1));
1592 gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1594 offset = cfa_temp.offset;
1600 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1602 /* Restoring SP from FP in the epilogue. */
1603 gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1604 cfa.reg = STACK_POINTER_REGNUM;
1606 else if (GET_CODE (src) == LO_SUM)
1607 /* Assume we've set the source reg of the LO_SUM from sp. */
1610 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1612 if (GET_CODE (src) != MINUS)
1614 if (cfa.reg == STACK_POINTER_REGNUM)
1615 cfa.offset += offset;
1616 if (cfa_store.reg == STACK_POINTER_REGNUM)
1617 cfa_store.offset += offset;
1619 else if (dest == hard_frame_pointer_rtx)
1622 /* Either setting the FP from an offset of the SP,
1623 or adjusting the FP */
1624 gcc_assert (frame_pointer_needed);
1626 gcc_assert (REG_P (XEXP (src, 0))
1627 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1628 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1629 offset = INTVAL (XEXP (src, 1));
1630 if (GET_CODE (src) != MINUS)
1632 cfa.offset += offset;
1633 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1637 gcc_assert (GET_CODE (src) != MINUS);
1640 if (REG_P (XEXP (src, 0))
1641 && REGNO (XEXP (src, 0)) == cfa.reg
1642 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1644 /* Setting a temporary CFA register that will be copied
1645 into the FP later on. */
1646 offset = - INTVAL (XEXP (src, 1));
1647 cfa.offset += offset;
1648 cfa.reg = REGNO (dest);
1649 /* Or used to save regs to the stack. */
1650 cfa_temp.reg = cfa.reg;
1651 cfa_temp.offset = cfa.offset;
1655 else if (REG_P (XEXP (src, 0))
1656 && REGNO (XEXP (src, 0)) == cfa_temp.reg
1657 && XEXP (src, 1) == stack_pointer_rtx)
1659 /* Setting a scratch register that we will use instead
1660 of SP for saving registers to the stack. */
1661 gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1662 cfa_store.reg = REGNO (dest);
1663 cfa_store.offset = cfa.offset - cfa_temp.offset;
1667 else if (GET_CODE (src) == LO_SUM
1668 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1670 cfa_temp.reg = REGNO (dest);
1671 cfa_temp.offset = INTVAL (XEXP (src, 1));
1680 cfa_temp.reg = REGNO (dest);
1681 cfa_temp.offset = INTVAL (src);
1686 gcc_assert (REG_P (XEXP (src, 0))
1687 && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1688 && GET_CODE (XEXP (src, 1)) == CONST_INT);
1690 if ((unsigned) REGNO (dest) != cfa_temp.reg)
1691 cfa_temp.reg = REGNO (dest);
1692 cfa_temp.offset |= INTVAL (XEXP (src, 1));
1695 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1696 which will fill in all of the bits. */
1703 case UNSPEC_VOLATILE:
1704 gcc_assert (targetm.dwarf_handle_frame_unspec);
1705 targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1712 def_cfa_1 (label, &cfa);
1716 gcc_assert (REG_P (src));
1718 /* Saving a register to the stack. Make sure dest is relative to the
1720 switch (GET_CODE (XEXP (dest, 0)))
1725 /* We can't handle variable size modifications. */
1726 gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1728 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1730 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1731 && cfa_store.reg == STACK_POINTER_REGNUM);
1733 cfa_store.offset += offset;
1734 if (cfa.reg == STACK_POINTER_REGNUM)
1735 cfa.offset = cfa_store.offset;
1737 offset = -cfa_store.offset;
1743 offset = GET_MODE_SIZE (GET_MODE (dest));
1744 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1747 gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1748 && cfa_store.reg == STACK_POINTER_REGNUM);
1750 cfa_store.offset += offset;
1751 if (cfa.reg == STACK_POINTER_REGNUM)
1752 cfa.offset = cfa_store.offset;
1754 offset = -cfa_store.offset;
1758 /* With an offset. */
1765 gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT
1766 && REG_P (XEXP (XEXP (dest, 0), 0)));
1767 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1768 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1771 regno = REGNO (XEXP (XEXP (dest, 0), 0));
1773 if (cfa_store.reg == (unsigned) regno)
1774 offset -= cfa_store.offset;
1777 gcc_assert (cfa_temp.reg == (unsigned) regno);
1778 offset -= cfa_temp.offset;
1784 /* Without an offset. */
1787 int regno = REGNO (XEXP (dest, 0));
1789 if (cfa_store.reg == (unsigned) regno)
1790 offset = -cfa_store.offset;
1793 gcc_assert (cfa_temp.reg == (unsigned) regno);
1794 offset = -cfa_temp.offset;
1801 gcc_assert (cfa_temp.reg
1802 == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1803 offset = -cfa_temp.offset;
1804 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1811 if (REGNO (src) != STACK_POINTER_REGNUM
1812 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1813 && (unsigned) REGNO (src) == cfa.reg)
1815 /* We're storing the current CFA reg into the stack. */
1817 if (cfa.offset == 0)
1819 /* If the source register is exactly the CFA, assume
1820 we're saving SP like any other register; this happens
1822 def_cfa_1 (label, &cfa);
1823 queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1828 /* Otherwise, we'll need to look in the stack to
1829 calculate the CFA. */
1830 rtx x = XEXP (dest, 0);
1834 gcc_assert (REG_P (x));
1836 cfa.reg = REGNO (x);
1837 cfa.base_offset = offset;
1839 def_cfa_1 (label, &cfa);
1844 def_cfa_1 (label, &cfa);
1845 queue_reg_save (label, src, NULL_RTX, offset);
1853 /* Record call frame debugging information for INSN, which either
1854 sets SP or FP (adjusting how we calculate the frame address) or saves a
1855 register to the stack. If INSN is NULL_RTX, initialize our state.
1857 If AFTER_P is false, we're being called before the insn is emitted,
1858 otherwise after. Call instructions get invoked twice. */
1861 dwarf2out_frame_debug (rtx insn, bool after_p)
1866 if (insn == NULL_RTX)
1870 /* Flush any queued register saves. */
1871 flush_queued_reg_saves ();
1873 /* Set up state for generating call frame debug info. */
1876 == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1878 cfa.reg = STACK_POINTER_REGNUM;
1881 cfa_temp.offset = 0;
1883 for (i = 0; i < num_regs_saved_in_regs; i++)
1885 regs_saved_in_regs[i].orig_reg = NULL_RTX;
1886 regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1888 num_regs_saved_in_regs = 0;
1892 if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1893 flush_queued_reg_saves ();
1895 if (! RTX_FRAME_RELATED_P (insn))
1897 if (!ACCUMULATE_OUTGOING_ARGS)
1898 dwarf2out_stack_adjust (insn, after_p);
1902 label = dwarf2out_cfi_label ();
1903 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1905 insn = XEXP (src, 0);
1907 insn = PATTERN (insn);
1909 dwarf2out_frame_debug_expr (insn, label);
1914 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1915 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1916 (enum dwarf_call_frame_info cfi);
1918 static enum dw_cfi_oprnd_type
1919 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1924 case DW_CFA_GNU_window_save:
1925 return dw_cfi_oprnd_unused;
1927 case DW_CFA_set_loc:
1928 case DW_CFA_advance_loc1:
1929 case DW_CFA_advance_loc2:
1930 case DW_CFA_advance_loc4:
1931 case DW_CFA_MIPS_advance_loc8:
1932 return dw_cfi_oprnd_addr;
1935 case DW_CFA_offset_extended:
1936 case DW_CFA_def_cfa:
1937 case DW_CFA_offset_extended_sf:
1938 case DW_CFA_def_cfa_sf:
1939 case DW_CFA_restore_extended:
1940 case DW_CFA_undefined:
1941 case DW_CFA_same_value:
1942 case DW_CFA_def_cfa_register:
1943 case DW_CFA_register:
1944 return dw_cfi_oprnd_reg_num;
1946 case DW_CFA_def_cfa_offset:
1947 case DW_CFA_GNU_args_size:
1948 case DW_CFA_def_cfa_offset_sf:
1949 return dw_cfi_oprnd_offset;
1951 case DW_CFA_def_cfa_expression:
1952 case DW_CFA_expression:
1953 return dw_cfi_oprnd_loc;
1960 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1961 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1962 (enum dwarf_call_frame_info cfi);
1964 static enum dw_cfi_oprnd_type
1965 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1969 case DW_CFA_def_cfa:
1970 case DW_CFA_def_cfa_sf:
1972 case DW_CFA_offset_extended_sf:
1973 case DW_CFA_offset_extended:
1974 return dw_cfi_oprnd_offset;
1976 case DW_CFA_register:
1977 return dw_cfi_oprnd_reg_num;
1980 return dw_cfi_oprnd_unused;
1984 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1986 /* Switch to eh_frame_section. If we don't have an eh_frame_section,
1987 switch to the data section instead, and write out a synthetic label
1991 switch_to_eh_frame_section (void)
1995 if (eh_frame_section)
1996 switch_to_section (eh_frame_section);
1999 switch_to_section (data_section);
2000 label = get_file_function_name ('F');
2001 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2002 targetm.asm_out.globalize_label (asm_out_file,
2003 IDENTIFIER_POINTER (label));
2004 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2008 /* Map register numbers held in the call frame info that gcc has
2009 collected using DWARF_FRAME_REGNUM to those that should be output in
2010 .debug_frame and .eh_frame. */
2011 #ifndef DWARF2_FRAME_REG_OUT
2012 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
2015 /* Output a Call Frame Information opcode and its operand(s). */
2018 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2021 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2022 dw2_asm_output_data (1, (cfi->dw_cfi_opc
2023 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2024 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2025 cfi->dw_cfi_oprnd1.dw_cfi_offset);
2026 else if (cfi->dw_cfi_opc == DW_CFA_offset)
2028 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2029 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2030 "DW_CFA_offset, column 0x%lx", r);
2031 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2033 else if (cfi->dw_cfi_opc == DW_CFA_restore)
2035 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2036 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2037 "DW_CFA_restore, column 0x%lx", r);
2041 dw2_asm_output_data (1, cfi->dw_cfi_opc,
2042 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2044 switch (cfi->dw_cfi_opc)
2046 case DW_CFA_set_loc:
2048 dw2_asm_output_encoded_addr_rtx (
2049 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2050 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2053 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2054 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2057 case DW_CFA_advance_loc1:
2058 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2059 fde->dw_fde_current_label, NULL);
2060 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2063 case DW_CFA_advance_loc2:
2064 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2065 fde->dw_fde_current_label, NULL);
2066 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2069 case DW_CFA_advance_loc4:
2070 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2071 fde->dw_fde_current_label, NULL);
2072 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2075 case DW_CFA_MIPS_advance_loc8:
2076 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2077 fde->dw_fde_current_label, NULL);
2078 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2081 case DW_CFA_offset_extended:
2082 case DW_CFA_def_cfa:
2083 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2084 dw2_asm_output_data_uleb128 (r, NULL);
2085 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2088 case DW_CFA_offset_extended_sf:
2089 case DW_CFA_def_cfa_sf:
2090 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2091 dw2_asm_output_data_uleb128 (r, NULL);
2092 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2095 case DW_CFA_restore_extended:
2096 case DW_CFA_undefined:
2097 case DW_CFA_same_value:
2098 case DW_CFA_def_cfa_register:
2099 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2100 dw2_asm_output_data_uleb128 (r, NULL);
2103 case DW_CFA_register:
2104 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2105 dw2_asm_output_data_uleb128 (r, NULL);
2106 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2107 dw2_asm_output_data_uleb128 (r, NULL);
2110 case DW_CFA_def_cfa_offset:
2111 case DW_CFA_GNU_args_size:
2112 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2115 case DW_CFA_def_cfa_offset_sf:
2116 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2119 case DW_CFA_GNU_window_save:
2122 case DW_CFA_def_cfa_expression:
2123 case DW_CFA_expression:
2124 output_cfa_loc (cfi);
2127 case DW_CFA_GNU_negative_offset_extended:
2128 /* Obsoleted by DW_CFA_offset_extended_sf. */
2137 /* Output the call frame information used to record information
2138 that relates to calculating the frame pointer, and records the
2139 location of saved registers. */
2142 output_call_frame_info (int for_eh)
2147 char l1[20], l2[20], section_start_label[20];
2148 bool any_lsda_needed = false;
2149 char augmentation[6];
2150 int augmentation_size;
2151 int fde_encoding = DW_EH_PE_absptr;
2152 int per_encoding = DW_EH_PE_absptr;
2153 int lsda_encoding = DW_EH_PE_absptr;
2156 /* Don't emit a CIE if there won't be any FDEs. */
2157 if (fde_table_in_use == 0)
2160 /* If we make FDEs linkonce, we may have to emit an empty label for
2161 an FDE that wouldn't otherwise be emitted. We want to avoid
2162 having an FDE kept around when the function it refers to is
2163 discarded. Example where this matters: a primary function
2164 template in C++ requires EH information, but an explicit
2165 specialization doesn't. */
2166 if (TARGET_USES_WEAK_UNWIND_INFO
2167 && ! flag_asynchronous_unwind_tables
2169 for (i = 0; i < fde_table_in_use; i++)
2170 if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2171 && !fde_table[i].uses_eh_lsda
2172 && ! DECL_WEAK (fde_table[i].decl))
2173 targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2174 for_eh, /* empty */ 1);
2176 /* If we don't have any functions we'll want to unwind out of, don't
2177 emit any EH unwind information. Note that if exceptions aren't
2178 enabled, we won't have collected nothrow information, and if we
2179 asked for asynchronous tables, we always want this info. */
2182 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2184 for (i = 0; i < fde_table_in_use; i++)
2185 if (fde_table[i].uses_eh_lsda)
2186 any_eh_needed = any_lsda_needed = true;
2187 else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2188 any_eh_needed = true;
2189 else if (! fde_table[i].nothrow
2190 && ! fde_table[i].all_throwers_are_sibcalls)
2191 any_eh_needed = true;
2193 if (! any_eh_needed)
2197 /* We're going to be generating comments, so turn on app. */
2202 switch_to_eh_frame_section ();
2204 switch_to_section (get_section (DEBUG_FRAME_SECTION, SECTION_DEBUG, NULL));
2206 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2207 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2209 /* Output the CIE. */
2210 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2211 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2212 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2213 "Length of Common Information Entry");
2214 ASM_OUTPUT_LABEL (asm_out_file, l1);
2216 /* Now that the CIE pointer is PC-relative for EH,
2217 use 0 to identify the CIE. */
2218 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2219 (for_eh ? 0 : DW_CIE_ID),
2220 "CIE Identifier Tag");
2222 dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2224 augmentation[0] = 0;
2225 augmentation_size = 0;
2231 z Indicates that a uleb128 is present to size the
2232 augmentation section.
2233 L Indicates the encoding (and thus presence) of
2234 an LSDA pointer in the FDE augmentation.
2235 R Indicates a non-default pointer encoding for
2237 P Indicates the presence of an encoding + language
2238 personality routine in the CIE augmentation. */
2240 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2241 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2242 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2244 p = augmentation + 1;
2245 if (eh_personality_libfunc)
2248 augmentation_size += 1 + size_of_encoded_value (per_encoding);
2250 if (any_lsda_needed)
2253 augmentation_size += 1;
2255 if (fde_encoding != DW_EH_PE_absptr)
2258 augmentation_size += 1;
2260 if (p > augmentation + 1)
2262 augmentation[0] = 'z';
2266 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2267 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2269 int offset = ( 4 /* Length */
2271 + 1 /* CIE version */
2272 + strlen (augmentation) + 1 /* Augmentation */
2273 + size_of_uleb128 (1) /* Code alignment */
2274 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2276 + 1 /* Augmentation size */
2277 + 1 /* Personality encoding */ );
2278 int pad = -offset & (PTR_SIZE - 1);
2280 augmentation_size += pad;
2282 /* Augmentations should be small, so there's scarce need to
2283 iterate for a solution. Die if we exceed one uleb128 byte. */
2284 gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2288 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2289 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2290 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2291 "CIE Data Alignment Factor");
2293 return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2294 if (DW_CIE_VERSION == 1)
2295 dw2_asm_output_data (1, return_reg, "CIE RA Column");
2297 dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2299 if (augmentation[0])
2301 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2302 if (eh_personality_libfunc)
2304 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2305 eh_data_format_name (per_encoding));
2306 dw2_asm_output_encoded_addr_rtx (per_encoding,
2307 eh_personality_libfunc,
2311 if (any_lsda_needed)
2312 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2313 eh_data_format_name (lsda_encoding));
2315 if (fde_encoding != DW_EH_PE_absptr)
2316 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2317 eh_data_format_name (fde_encoding));
2320 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2321 output_cfi (cfi, NULL, for_eh);
2323 /* Pad the CIE out to an address sized boundary. */
2324 ASM_OUTPUT_ALIGN (asm_out_file,
2325 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2326 ASM_OUTPUT_LABEL (asm_out_file, l2);
2328 /* Loop through all of the FDE's. */
2329 for (i = 0; i < fde_table_in_use; i++)
2331 fde = &fde_table[i];
2333 /* Don't emit EH unwind info for leaf functions that don't need it. */
2334 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2335 && (fde->nothrow || fde->all_throwers_are_sibcalls)
2336 && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2337 && !fde->uses_eh_lsda)
2340 targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2341 targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2342 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2343 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2344 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2346 ASM_OUTPUT_LABEL (asm_out_file, l1);
2349 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2351 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2356 rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2357 SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2358 dw2_asm_output_encoded_addr_rtx (fde_encoding,
2361 "FDE initial location");
2362 if (fde->dw_fde_switched_sections)
2364 rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode,
2365 fde->dw_fde_unlikely_section_label);
2366 rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode,
2367 fde->dw_fde_hot_section_label);
2368 SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2369 SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2370 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
2371 "FDE initial location");
2372 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2373 fde->dw_fde_hot_section_end_label,
2374 fde->dw_fde_hot_section_label,
2375 "FDE address range");
2376 dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
2377 "FDE initial location");
2378 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2379 fde->dw_fde_unlikely_section_end_label,
2380 fde->dw_fde_unlikely_section_label,
2381 "FDE address range");
2384 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2385 fde->dw_fde_end, fde->dw_fde_begin,
2386 "FDE address range");
2390 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2391 "FDE initial location");
2392 if (fde->dw_fde_switched_sections)
2394 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2395 fde->dw_fde_hot_section_label,
2396 "FDE initial location");
2397 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2398 fde->dw_fde_hot_section_end_label,
2399 fde->dw_fde_hot_section_label,
2400 "FDE address range");
2401 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2402 fde->dw_fde_unlikely_section_label,
2403 "FDE initial location");
2404 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2405 fde->dw_fde_unlikely_section_end_label,
2406 fde->dw_fde_unlikely_section_label,
2407 "FDE address range");
2410 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2411 fde->dw_fde_end, fde->dw_fde_begin,
2412 "FDE address range");
2415 if (augmentation[0])
2417 if (any_lsda_needed)
2419 int size = size_of_encoded_value (lsda_encoding);
2421 if (lsda_encoding == DW_EH_PE_aligned)
2423 int offset = ( 4 /* Length */
2424 + 4 /* CIE offset */
2425 + 2 * size_of_encoded_value (fde_encoding)
2426 + 1 /* Augmentation size */ );
2427 int pad = -offset & (PTR_SIZE - 1);
2430 gcc_assert (size_of_uleb128 (size) == 1);
2433 dw2_asm_output_data_uleb128 (size, "Augmentation size");
2435 if (fde->uses_eh_lsda)
2437 ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2438 fde->funcdef_number);
2439 dw2_asm_output_encoded_addr_rtx (
2440 lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2441 false, "Language Specific Data Area");
2445 if (lsda_encoding == DW_EH_PE_aligned)
2446 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2448 (size_of_encoded_value (lsda_encoding), 0,
2449 "Language Specific Data Area (none)");
2453 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2456 /* Loop through the Call Frame Instructions associated with
2458 fde->dw_fde_current_label = fde->dw_fde_begin;
2459 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2460 output_cfi (cfi, fde, for_eh);
2462 /* Pad the FDE out to an address sized boundary. */
2463 ASM_OUTPUT_ALIGN (asm_out_file,
2464 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2465 ASM_OUTPUT_LABEL (asm_out_file, l2);
2468 if (for_eh && targetm.terminate_dw2_eh_frame_info)
2469 dw2_asm_output_data (4, 0, "End of Table");
2470 #ifdef MIPS_DEBUGGING_INFO
2471 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2472 get a value of 0. Putting .align 0 after the label fixes it. */
2473 ASM_OUTPUT_ALIGN (asm_out_file, 0);
2476 /* Turn off app to make assembly quicker. */
2481 /* Output a marker (i.e. a label) for the beginning of a function, before
2485 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2486 const char *file ATTRIBUTE_UNUSED)
2488 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2492 current_function_func_begin_label = NULL;
2494 #ifdef TARGET_UNWIND_INFO
2495 /* ??? current_function_func_begin_label is also used by except.c
2496 for call-site information. We must emit this label if it might
2498 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2499 && ! dwarf2out_do_frame ())
2502 if (! dwarf2out_do_frame ())
2506 switch_to_section (function_section (current_function_decl));
2507 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2508 current_function_funcdef_no);
2509 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2510 current_function_funcdef_no);
2511 dup_label = xstrdup (label);
2512 current_function_func_begin_label = dup_label;
2514 #ifdef TARGET_UNWIND_INFO
2515 /* We can elide the fde allocation if we're not emitting debug info. */
2516 if (! dwarf2out_do_frame ())
2520 /* Expand the fde table if necessary. */
2521 if (fde_table_in_use == fde_table_allocated)
2523 fde_table_allocated += FDE_TABLE_INCREMENT;
2524 fde_table = ggc_realloc (fde_table,
2525 fde_table_allocated * sizeof (dw_fde_node));
2526 memset (fde_table + fde_table_in_use, 0,
2527 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2530 /* Record the FDE associated with this function. */
2531 current_funcdef_fde = fde_table_in_use;
2533 /* Add the new FDE at the end of the fde_table. */
2534 fde = &fde_table[fde_table_in_use++];
2535 fde->decl = current_function_decl;
2536 fde->dw_fde_begin = dup_label;
2537 fde->dw_fde_current_label = NULL;
2538 fde->dw_fde_hot_section_label = NULL;
2539 fde->dw_fde_hot_section_end_label = NULL;
2540 fde->dw_fde_unlikely_section_label = NULL;
2541 fde->dw_fde_unlikely_section_end_label = NULL;
2542 fde->dw_fde_switched_sections = false;
2543 fde->dw_fde_end = NULL;
2544 fde->dw_fde_cfi = NULL;
2545 fde->funcdef_number = current_function_funcdef_no;
2546 fde->nothrow = TREE_NOTHROW (current_function_decl);
2547 fde->uses_eh_lsda = cfun->uses_eh_lsda;
2548 fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2550 args_size = old_args_size = 0;
2552 /* We only want to output line number information for the genuine dwarf2
2553 prologue case, not the eh frame case. */
2554 #ifdef DWARF2_DEBUGGING_INFO
2556 dwarf2out_source_line (line, file);
2560 /* Output a marker (i.e. a label) for the absolute end of the generated code
2561 for a function definition. This gets called *after* the epilogue code has
2565 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2566 const char *file ATTRIBUTE_UNUSED)
2569 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2571 /* Output a label to mark the endpoint of the code generated for this
2573 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2574 current_function_funcdef_no);
2575 ASM_OUTPUT_LABEL (asm_out_file, label);
2576 fde = &fde_table[fde_table_in_use - 1];
2577 fde->dw_fde_end = xstrdup (label);
2581 dwarf2out_frame_init (void)
2583 /* Allocate the initial hunk of the fde_table. */
2584 fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2585 fde_table_allocated = FDE_TABLE_INCREMENT;
2586 fde_table_in_use = 0;
2588 /* Generate the CFA instructions common to all FDE's. Do it now for the
2589 sake of lookup_cfa. */
2591 #ifdef DWARF2_UNWIND_INFO
2592 /* On entry, the Canonical Frame Address is at SP. */
2593 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2594 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2599 dwarf2out_frame_finish (void)
2601 /* Output call frame information. */
2602 if (write_symbols == DWARF2_DEBUG
2603 || write_symbols == VMS_AND_DWARF2_DEBUG
2604 #ifdef DWARF2_FRAME_INFO
2605 || DWARF2_FRAME_INFO
2608 output_call_frame_info (0);
2610 #ifndef TARGET_UNWIND_INFO
2611 /* Output another copy for the unwinder. */
2612 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2613 output_call_frame_info (1);
2618 /* And now, the subset of the debugging information support code necessary
2619 for emitting location expressions. */
2621 /* We need some way to distinguish DW_OP_addr with a direct symbol
2622 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2623 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2626 typedef struct dw_val_struct *dw_val_ref;
2627 typedef struct die_struct *dw_die_ref;
2628 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2629 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2631 /* Each DIE may have a series of attribute/value pairs. Values
2632 can take on several forms. The forms that are used in this
2633 implementation are listed below. */
2638 dw_val_class_offset,
2640 dw_val_class_loc_list,
2641 dw_val_class_range_list,
2643 dw_val_class_unsigned_const,
2644 dw_val_class_long_long,
2647 dw_val_class_die_ref,
2648 dw_val_class_fde_ref,
2649 dw_val_class_lbl_id,
2650 dw_val_class_lbl_offset,
2654 /* Describe a double word constant value. */
2655 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2657 typedef struct dw_long_long_struct GTY(())
2664 /* Describe a floating point constant value, or a vector constant value. */
2666 typedef struct dw_vec_struct GTY(())
2668 unsigned char * GTY((length ("%h.length"))) array;
2674 /* The dw_val_node describes an attribute's value, as it is
2675 represented internally. */
2677 typedef struct dw_val_struct GTY(())
2679 enum dw_val_class val_class;
2680 union dw_val_struct_union
2682 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2683 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2684 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2685 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2686 HOST_WIDE_INT GTY ((default)) val_int;
2687 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2688 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2689 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2690 struct dw_val_die_union
2694 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2695 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2696 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2697 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2698 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2700 GTY ((desc ("%1.val_class"))) v;
2704 /* Locations in memory are described using a sequence of stack machine
2707 typedef struct dw_loc_descr_struct GTY(())
2709 dw_loc_descr_ref dw_loc_next;
2710 enum dwarf_location_atom dw_loc_opc;
2711 dw_val_node dw_loc_oprnd1;
2712 dw_val_node dw_loc_oprnd2;
2717 /* Location lists are ranges + location descriptions for that range,
2718 so you can track variables that are in different places over
2719 their entire life. */
2720 typedef struct dw_loc_list_struct GTY(())
2722 dw_loc_list_ref dw_loc_next;
2723 const char *begin; /* Label for begin address of range */
2724 const char *end; /* Label for end address of range */
2725 char *ll_symbol; /* Label for beginning of location list.
2726 Only on head of list */
2727 const char *section; /* Section this loclist is relative to */
2728 dw_loc_descr_ref expr;
2731 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2733 static const char *dwarf_stack_op_name (unsigned);
2734 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2735 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2736 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2737 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2738 static unsigned long size_of_locs (dw_loc_descr_ref);
2739 static void output_loc_operands (dw_loc_descr_ref);
2740 static void output_loc_sequence (dw_loc_descr_ref);
2742 /* Convert a DWARF stack opcode into its string name. */
2745 dwarf_stack_op_name (unsigned int op)
2750 case INTERNAL_DW_OP_tls_addr:
2751 return "DW_OP_addr";
2753 return "DW_OP_deref";
2755 return "DW_OP_const1u";
2757 return "DW_OP_const1s";
2759 return "DW_OP_const2u";
2761 return "DW_OP_const2s";
2763 return "DW_OP_const4u";
2765 return "DW_OP_const4s";
2767 return "DW_OP_const8u";
2769 return "DW_OP_const8s";
2771 return "DW_OP_constu";
2773 return "DW_OP_consts";
2777 return "DW_OP_drop";
2779 return "DW_OP_over";
2781 return "DW_OP_pick";
2783 return "DW_OP_swap";
2787 return "DW_OP_xderef";
2795 return "DW_OP_minus";
2807 return "DW_OP_plus";
2808 case DW_OP_plus_uconst:
2809 return "DW_OP_plus_uconst";
2815 return "DW_OP_shra";
2833 return "DW_OP_skip";
2835 return "DW_OP_lit0";
2837 return "DW_OP_lit1";
2839 return "DW_OP_lit2";
2841 return "DW_OP_lit3";
2843 return "DW_OP_lit4";
2845 return "DW_OP_lit5";
2847 return "DW_OP_lit6";
2849 return "DW_OP_lit7";
2851 return "DW_OP_lit8";
2853 return "DW_OP_lit9";
2855 return "DW_OP_lit10";
2857 return "DW_OP_lit11";
2859 return "DW_OP_lit12";
2861 return "DW_OP_lit13";
2863 return "DW_OP_lit14";
2865 return "DW_OP_lit15";
2867 return "DW_OP_lit16";
2869 return "DW_OP_lit17";
2871 return "DW_OP_lit18";
2873 return "DW_OP_lit19";
2875 return "DW_OP_lit20";
2877 return "DW_OP_lit21";
2879 return "DW_OP_lit22";
2881 return "DW_OP_lit23";
2883 return "DW_OP_lit24";
2885 return "DW_OP_lit25";
2887 return "DW_OP_lit26";
2889 return "DW_OP_lit27";
2891 return "DW_OP_lit28";
2893 return "DW_OP_lit29";
2895 return "DW_OP_lit30";
2897 return "DW_OP_lit31";
2899 return "DW_OP_reg0";
2901 return "DW_OP_reg1";
2903 return "DW_OP_reg2";
2905 return "DW_OP_reg3";
2907 return "DW_OP_reg4";
2909 return "DW_OP_reg5";
2911 return "DW_OP_reg6";
2913 return "DW_OP_reg7";
2915 return "DW_OP_reg8";
2917 return "DW_OP_reg9";
2919 return "DW_OP_reg10";
2921 return "DW_OP_reg11";
2923 return "DW_OP_reg12";
2925 return "DW_OP_reg13";
2927 return "DW_OP_reg14";
2929 return "DW_OP_reg15";
2931 return "DW_OP_reg16";
2933 return "DW_OP_reg17";
2935 return "DW_OP_reg18";
2937 return "DW_OP_reg19";
2939 return "DW_OP_reg20";
2941 return "DW_OP_reg21";
2943 return "DW_OP_reg22";
2945 return "DW_OP_reg23";
2947 return "DW_OP_reg24";
2949 return "DW_OP_reg25";
2951 return "DW_OP_reg26";
2953 return "DW_OP_reg27";
2955 return "DW_OP_reg28";
2957 return "DW_OP_reg29";
2959 return "DW_OP_reg30";
2961 return "DW_OP_reg31";
2963 return "DW_OP_breg0";
2965 return "DW_OP_breg1";
2967 return "DW_OP_breg2";
2969 return "DW_OP_breg3";
2971 return "DW_OP_breg4";
2973 return "DW_OP_breg5";
2975 return "DW_OP_breg6";
2977 return "DW_OP_breg7";
2979 return "DW_OP_breg8";
2981 return "DW_OP_breg9";
2983 return "DW_OP_breg10";
2985 return "DW_OP_breg11";
2987 return "DW_OP_breg12";
2989 return "DW_OP_breg13";
2991 return "DW_OP_breg14";
2993 return "DW_OP_breg15";
2995 return "DW_OP_breg16";
2997 return "DW_OP_breg17";
2999 return "DW_OP_breg18";
3001 return "DW_OP_breg19";
3003 return "DW_OP_breg20";
3005 return "DW_OP_breg21";
3007 return "DW_OP_breg22";
3009 return "DW_OP_breg23";
3011 return "DW_OP_breg24";
3013 return "DW_OP_breg25";
3015 return "DW_OP_breg26";
3017 return "DW_OP_breg27";
3019 return "DW_OP_breg28";
3021 return "DW_OP_breg29";
3023 return "DW_OP_breg30";
3025 return "DW_OP_breg31";
3027 return "DW_OP_regx";
3029 return "DW_OP_fbreg";
3031 return "DW_OP_bregx";
3033 return "DW_OP_piece";
3034 case DW_OP_deref_size:
3035 return "DW_OP_deref_size";
3036 case DW_OP_xderef_size:
3037 return "DW_OP_xderef_size";
3040 case DW_OP_push_object_address:
3041 return "DW_OP_push_object_address";
3043 return "DW_OP_call2";
3045 return "DW_OP_call4";
3046 case DW_OP_call_ref:
3047 return "DW_OP_call_ref";
3048 case DW_OP_GNU_push_tls_address:
3049 return "DW_OP_GNU_push_tls_address";
3051 return "OP_<unknown>";
3055 /* Return a pointer to a newly allocated location description. Location
3056 descriptions are simple expression terms that can be strung
3057 together to form more complicated location (address) descriptions. */
3059 static inline dw_loc_descr_ref
3060 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3061 unsigned HOST_WIDE_INT oprnd2)
3063 dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
3065 descr->dw_loc_opc = op;
3066 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3067 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3068 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3069 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3074 /* Add a location description term to a location description expression. */
3077 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3079 dw_loc_descr_ref *d;
3081 /* Find the end of the chain. */
3082 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3088 /* Return the size of a location descriptor. */
3090 static unsigned long
3091 size_of_loc_descr (dw_loc_descr_ref loc)
3093 unsigned long size = 1;
3095 switch (loc->dw_loc_opc)
3098 case INTERNAL_DW_OP_tls_addr:
3099 size += DWARF2_ADDR_SIZE;
3118 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3121 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3126 case DW_OP_plus_uconst:
3127 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3165 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3168 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3171 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3174 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3175 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3178 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3180 case DW_OP_deref_size:
3181 case DW_OP_xderef_size:
3190 case DW_OP_call_ref:
3191 size += DWARF2_ADDR_SIZE;
3200 /* Return the size of a series of location descriptors. */
3202 static unsigned long
3203 size_of_locs (dw_loc_descr_ref loc)
3207 for (size = 0; loc != NULL; loc = loc->dw_loc_next)
3209 loc->dw_loc_addr = size;
3210 size += size_of_loc_descr (loc);
3216 /* Output location description stack opcode's operands (if any). */
3219 output_loc_operands (dw_loc_descr_ref loc)
3221 dw_val_ref val1 = &loc->dw_loc_oprnd1;
3222 dw_val_ref val2 = &loc->dw_loc_oprnd2;
3224 switch (loc->dw_loc_opc)
3226 #ifdef DWARF2_DEBUGGING_INFO
3228 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3232 dw2_asm_output_data (2, val1->v.val_int, NULL);
3236 dw2_asm_output_data (4, val1->v.val_int, NULL);
3240 gcc_assert (HOST_BITS_PER_LONG >= 64);
3241 dw2_asm_output_data (8, val1->v.val_int, NULL);
3248 gcc_assert (val1->val_class == dw_val_class_loc);
3249 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3251 dw2_asm_output_data (2, offset, NULL);
3264 /* We currently don't make any attempt to make sure these are
3265 aligned properly like we do for the main unwind info, so
3266 don't support emitting things larger than a byte if we're
3267 only doing unwinding. */
3272 dw2_asm_output_data (1, val1->v.val_int, NULL);
3275 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3278 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3281 dw2_asm_output_data (1, val1->v.val_int, NULL);
3283 case DW_OP_plus_uconst:
3284 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3318 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3321 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3324 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3327 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3328 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3331 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3333 case DW_OP_deref_size:
3334 case DW_OP_xderef_size:
3335 dw2_asm_output_data (1, val1->v.val_int, NULL);
3338 case INTERNAL_DW_OP_tls_addr:
3339 if (targetm.asm_out.output_dwarf_dtprel)
3341 targetm.asm_out.output_dwarf_dtprel (asm_out_file,
3344 fputc ('\n', asm_out_file);
3351 /* Other codes have no operands. */
3356 /* Output a sequence of location operations. */
3359 output_loc_sequence (dw_loc_descr_ref loc)
3361 for (; loc != NULL; loc = loc->dw_loc_next)
3363 /* Output the opcode. */
3364 dw2_asm_output_data (1, loc->dw_loc_opc,
3365 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3367 /* Output the operand(s) (if any). */
3368 output_loc_operands (loc);
3372 /* This routine will generate the correct assembly data for a location
3373 description based on a cfi entry with a complex address. */
3376 output_cfa_loc (dw_cfi_ref cfi)
3378 dw_loc_descr_ref loc;
3381 /* Output the size of the block. */
3382 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3383 size = size_of_locs (loc);
3384 dw2_asm_output_data_uleb128 (size, NULL);
3386 /* Now output the operations themselves. */
3387 output_loc_sequence (loc);
3390 /* This function builds a dwarf location descriptor sequence from
3391 a dw_cfa_location. */
3393 static struct dw_loc_descr_struct *
3394 build_cfa_loc (dw_cfa_location *cfa)
3396 struct dw_loc_descr_struct *head, *tmp;
3400 if (cfa->base_offset)
3403 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3405 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3407 else if (cfa->reg <= 31)
3408 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3410 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3412 head->dw_loc_oprnd1.val_class = dw_val_class_const;
3413 tmp = new_loc_descr (DW_OP_deref, 0, 0);
3414 add_loc_descr (&head, tmp);
3415 if (cfa->offset != 0)
3417 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3418 add_loc_descr (&head, tmp);
3423 if (cfa->offset == 0)
3425 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3427 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3428 else if (cfa->reg <= 31)
3429 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->offset, 0);
3431 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->offset);
3437 /* This function fills in aa dw_cfa_location structure from a dwarf location
3438 descriptor sequence. */
3441 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3443 struct dw_loc_descr_struct *ptr;
3445 cfa->base_offset = 0;
3449 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3451 enum dwarf_location_atom op = ptr->dw_loc_opc;
3487 cfa->reg = op - DW_OP_reg0;
3490 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3524 cfa->reg = op - DW_OP_breg0;
3525 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3528 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3529 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3534 case DW_OP_plus_uconst:
3535 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3538 internal_error ("DW_LOC_OP %s not implemented",
3539 dwarf_stack_op_name (ptr->dw_loc_opc));
3543 #endif /* .debug_frame support */
3545 /* And now, the support for symbolic debugging information. */
3546 #ifdef DWARF2_DEBUGGING_INFO
3548 /* .debug_str support. */
3549 static int output_indirect_string (void **, void *);
3551 static void dwarf2out_init (const char *);
3552 static void dwarf2out_finish (const char *);
3553 static void dwarf2out_define (unsigned int, const char *);
3554 static void dwarf2out_undef (unsigned int, const char *);
3555 static void dwarf2out_start_source_file (unsigned, const char *);
3556 static void dwarf2out_end_source_file (unsigned);
3557 static void dwarf2out_begin_block (unsigned, unsigned);
3558 static void dwarf2out_end_block (unsigned, unsigned);
3559 static bool dwarf2out_ignore_block (tree);
3560 static void dwarf2out_global_decl (tree);
3561 static void dwarf2out_type_decl (tree, int);
3562 static void dwarf2out_imported_module_or_decl (tree, tree);
3563 static void dwarf2out_abstract_function (tree);
3564 static void dwarf2out_var_location (rtx);
3565 static void dwarf2out_begin_function (tree);
3566 static void dwarf2out_switch_text_section (void);
3568 /* The debug hooks structure. */
3570 const struct gcc_debug_hooks dwarf2_debug_hooks =
3576 dwarf2out_start_source_file,
3577 dwarf2out_end_source_file,
3578 dwarf2out_begin_block,
3579 dwarf2out_end_block,
3580 dwarf2out_ignore_block,
3581 dwarf2out_source_line,
3582 dwarf2out_begin_prologue,
3583 debug_nothing_int_charstar, /* end_prologue */
3584 dwarf2out_end_epilogue,
3585 dwarf2out_begin_function,
3586 debug_nothing_int, /* end_function */
3587 dwarf2out_decl, /* function_decl */
3588 dwarf2out_global_decl,
3589 dwarf2out_type_decl, /* type_decl */
3590 dwarf2out_imported_module_or_decl,
3591 debug_nothing_tree, /* deferred_inline_function */
3592 /* The DWARF 2 backend tries to reduce debugging bloat by not
3593 emitting the abstract description of inline functions until
3594 something tries to reference them. */
3595 dwarf2out_abstract_function, /* outlining_inline_function */
3596 debug_nothing_rtx, /* label */
3597 debug_nothing_int, /* handle_pch */
3598 dwarf2out_var_location,
3599 dwarf2out_switch_text_section,
3600 1 /* start_end_main_source_file */
3604 /* NOTE: In the comments in this file, many references are made to
3605 "Debugging Information Entries". This term is abbreviated as `DIE'
3606 throughout the remainder of this file. */
3608 /* An internal representation of the DWARF output is built, and then
3609 walked to generate the DWARF debugging info. The walk of the internal
3610 representation is done after the entire program has been compiled.
3611 The types below are used to describe the internal representation. */
3613 /* Various DIE's use offsets relative to the beginning of the
3614 .debug_info section to refer to each other. */
3616 typedef long int dw_offset;
3618 /* Define typedefs here to avoid circular dependencies. */
3620 typedef struct dw_attr_struct *dw_attr_ref;
3621 typedef struct dw_line_info_struct *dw_line_info_ref;
3622 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3623 typedef struct pubname_struct *pubname_ref;
3624 typedef struct dw_ranges_struct *dw_ranges_ref;
3626 /* Each entry in the line_info_table maintains the file and
3627 line number associated with the label generated for that
3628 entry. The label gives the PC value associated with
3629 the line number entry. */
3631 typedef struct dw_line_info_struct GTY(())
3633 unsigned long dw_file_num;
3634 unsigned long dw_line_num;
3638 /* Line information for functions in separate sections; each one gets its
3640 typedef struct dw_separate_line_info_struct GTY(())
3642 unsigned long dw_file_num;
3643 unsigned long dw_line_num;
3644 unsigned long function;
3646 dw_separate_line_info_entry;
3648 /* Each DIE attribute has a field specifying the attribute kind,
3649 a link to the next attribute in the chain, and an attribute value.
3650 Attributes are typically linked below the DIE they modify. */
3652 typedef struct dw_attr_struct GTY(())
3654 enum dwarf_attribute dw_attr;
3655 dw_attr_ref dw_attr_next;
3656 dw_val_node dw_attr_val;
3660 /* The Debugging Information Entry (DIE) structure */
3662 typedef struct die_struct GTY(())
3664 enum dwarf_tag die_tag;
3666 dw_attr_ref die_attr;
3667 dw_die_ref die_parent;
3668 dw_die_ref die_child;
3670 dw_die_ref die_definition; /* ref from a specification to its definition */
3671 dw_offset die_offset;
3672 unsigned long die_abbrev;
3674 unsigned int decl_id;
3678 /* The pubname structure */
3680 typedef struct pubname_struct GTY(())
3687 struct dw_ranges_struct GTY(())
3692 /* The limbo die list structure. */
3693 typedef struct limbo_die_struct GTY(())
3697 struct limbo_die_struct *next;
3701 /* How to start an assembler comment. */
3702 #ifndef ASM_COMMENT_START
3703 #define ASM_COMMENT_START ";#"
3706 /* Define a macro which returns nonzero for a TYPE_DECL which was
3707 implicitly generated for a tagged type.
3709 Note that unlike the gcc front end (which generates a NULL named
3710 TYPE_DECL node for each complete tagged type, each array type, and
3711 each function type node created) the g++ front end generates a
3712 _named_ TYPE_DECL node for each tagged type node created.
3713 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3714 generate a DW_TAG_typedef DIE for them. */
3716 #define TYPE_DECL_IS_STUB(decl) \
3717 (DECL_NAME (decl) == NULL_TREE \
3718 || (DECL_ARTIFICIAL (decl) \
3719 && is_tagged_type (TREE_TYPE (decl)) \
3720 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3721 /* This is necessary for stub decls that \
3722 appear in nested inline functions. */ \
3723 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3724 && (decl_ultimate_origin (decl) \
3725 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3727 /* Information concerning the compilation unit's programming
3728 language, and compiler version. */
3730 /* Fixed size portion of the DWARF compilation unit header. */
3731 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3732 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3734 /* Fixed size portion of public names info. */
3735 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3737 /* Fixed size portion of the address range info. */
3738 #define DWARF_ARANGES_HEADER_SIZE \
3739 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3740 DWARF2_ADDR_SIZE * 2) \
3741 - DWARF_INITIAL_LENGTH_SIZE)
3743 /* Size of padding portion in the address range info. It must be
3744 aligned to twice the pointer size. */
3745 #define DWARF_ARANGES_PAD_SIZE \
3746 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3747 DWARF2_ADDR_SIZE * 2) \
3748 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3750 /* Use assembler line directives if available. */
3751 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3752 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3753 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3755 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3759 /* Minimum line offset in a special line info. opcode.
3760 This value was chosen to give a reasonable range of values. */
3761 #define DWARF_LINE_BASE -10
3763 /* First special line opcode - leave room for the standard opcodes. */
3764 #define DWARF_LINE_OPCODE_BASE 10
3766 /* Range of line offsets in a special line info. opcode. */
3767 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3769 /* Flag that indicates the initial value of the is_stmt_start flag.
3770 In the present implementation, we do not mark any lines as
3771 the beginning of a source statement, because that information
3772 is not made available by the GCC front-end. */
3773 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3775 #ifdef DWARF2_DEBUGGING_INFO
3776 /* This location is used by calc_die_sizes() to keep track
3777 the offset of each DIE within the .debug_info section. */
3778 static unsigned long next_die_offset;
3781 /* Record the root of the DIE's built for the current compilation unit. */
3782 static GTY(()) dw_die_ref comp_unit_die;
3784 /* A list of DIEs with a NULL parent waiting to be relocated. */
3785 static GTY(()) limbo_die_node *limbo_die_list;
3787 /* Filenames referenced by this compilation unit. */
3788 static GTY(()) varray_type file_table;
3789 static GTY(()) varray_type file_table_emitted;
3790 static GTY(()) size_t file_table_last_lookup_index;
3792 /* A hash table of references to DIE's that describe declarations.
3793 The key is a DECL_UID() which is a unique number identifying each decl. */
3794 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3796 /* Node of the variable location list. */
3797 struct var_loc_node GTY ((chain_next ("%h.next")))
3799 rtx GTY (()) var_loc_note;
3800 const char * GTY (()) label;
3801 const char * GTY (()) section_label;
3802 struct var_loc_node * GTY (()) next;
3805 /* Variable location list. */
3806 struct var_loc_list_def GTY (())
3808 struct var_loc_node * GTY (()) first;
3810 /* Do not mark the last element of the chained list because
3811 it is marked through the chain. */
3812 struct var_loc_node * GTY ((skip ("%h"))) last;
3814 /* DECL_UID of the variable decl. */
3815 unsigned int decl_id;
3817 typedef struct var_loc_list_def var_loc_list;
3820 /* Table of decl location linked lists. */
3821 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3823 /* A pointer to the base of a list of references to DIE's that
3824 are uniquely identified by their tag, presence/absence of
3825 children DIE's, and list of attribute/value pairs. */
3826 static GTY((length ("abbrev_die_table_allocated")))
3827 dw_die_ref *abbrev_die_table;
3829 /* Number of elements currently allocated for abbrev_die_table. */
3830 static GTY(()) unsigned abbrev_die_table_allocated;
3832 /* Number of elements in type_die_table currently in use. */
3833 static GTY(()) unsigned abbrev_die_table_in_use;
3835 /* Size (in elements) of increments by which we may expand the
3836 abbrev_die_table. */
3837 #define ABBREV_DIE_TABLE_INCREMENT 256
3839 /* A pointer to the base of a table that contains line information
3840 for each source code line in .text in the compilation unit. */
3841 static GTY((length ("line_info_table_allocated")))
3842 dw_line_info_ref line_info_table;
3844 /* Number of elements currently allocated for line_info_table. */
3845 static GTY(()) unsigned line_info_table_allocated;
3847 /* Number of elements in line_info_table currently in use. */
3848 static GTY(()) unsigned line_info_table_in_use;
3850 /* True if the compilation unit contains more than one .text section. */
3851 static GTY(()) bool have_switched_text_section = false;
3853 /* A pointer to the base of a table that contains line information
3854 for each source code line outside of .text in the compilation unit. */
3855 static GTY ((length ("separate_line_info_table_allocated")))
3856 dw_separate_line_info_ref separate_line_info_table;
3858 /* Number of elements currently allocated for separate_line_info_table. */
3859 static GTY(()) unsigned separate_line_info_table_allocated;
3861 /* Number of elements in separate_line_info_table currently in use. */
3862 static GTY(()) unsigned separate_line_info_table_in_use;
3864 /* Size (in elements) of increments by which we may expand the
3866 #define LINE_INFO_TABLE_INCREMENT 1024
3868 /* A pointer to the base of a table that contains a list of publicly
3869 accessible names. */
3870 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3872 /* Number of elements currently allocated for pubname_table. */
3873 static GTY(()) unsigned pubname_table_allocated;
3875 /* Number of elements in pubname_table currently in use. */
3876 static GTY(()) unsigned pubname_table_in_use;
3878 /* Size (in elements) of increments by which we may expand the
3880 #define PUBNAME_TABLE_INCREMENT 64
3882 /* Array of dies for which we should generate .debug_arange info. */
3883 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3885 /* Number of elements currently allocated for arange_table. */
3886 static GTY(()) unsigned arange_table_allocated;
3888 /* Number of elements in arange_table currently in use. */
3889 static GTY(()) unsigned arange_table_in_use;
3891 /* Size (in elements) of increments by which we may expand the
3893 #define ARANGE_TABLE_INCREMENT 64
3895 /* Array of dies for which we should generate .debug_ranges info. */
3896 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3898 /* Number of elements currently allocated for ranges_table. */
3899 static GTY(()) unsigned ranges_table_allocated;
3901 /* Number of elements in ranges_table currently in use. */
3902 static GTY(()) unsigned ranges_table_in_use;
3904 /* Size (in elements) of increments by which we may expand the
3906 #define RANGES_TABLE_INCREMENT 64
3908 /* Whether we have location lists that need outputting */
3909 static GTY(()) unsigned have_location_lists;
3911 /* Unique label counter. */
3912 static GTY(()) unsigned int loclabel_num;
3914 #ifdef DWARF2_DEBUGGING_INFO
3915 /* Record whether the function being analyzed contains inlined functions. */
3916 static int current_function_has_inlines;
3918 #if 0 && defined (MIPS_DEBUGGING_INFO)
3919 static int comp_unit_has_inlines;
3922 /* Number of file tables emitted in maybe_emit_file(). */
3923 static GTY(()) int emitcount = 0;
3925 /* Number of internal labels generated by gen_internal_sym(). */
3926 static GTY(()) int label_num;
3928 #ifdef DWARF2_DEBUGGING_INFO
3930 /* Offset from the "steady-state frame pointer" to the CFA,
3931 within the current function. */
3932 static HOST_WIDE_INT frame_pointer_cfa_offset;
3934 /* Forward declarations for functions defined in this file. */
3936 static int is_pseudo_reg (rtx);
3937 static tree type_main_variant (tree);
3938 static int is_tagged_type (tree);
3939 static const char *dwarf_tag_name (unsigned);
3940 static const char *dwarf_attr_name (unsigned);
3941 static const char *dwarf_form_name (unsigned);
3942 static tree decl_ultimate_origin (tree);
3943 static tree block_ultimate_origin (tree);
3944 static tree decl_class_context (tree);
3945 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3946 static inline enum dw_val_class AT_class (dw_attr_ref);
3947 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3948 static inline unsigned AT_flag (dw_attr_ref);
3949 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3950 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3951 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3952 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3953 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
3955 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3956 unsigned int, unsigned char *);
3957 static hashval_t debug_str_do_hash (const void *);
3958 static int debug_str_eq (const void *, const void *);
3959 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3960 static inline const char *AT_string (dw_attr_ref);
3961 static int AT_string_form (dw_attr_ref);
3962 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3963 static void add_AT_specification (dw_die_ref, dw_die_ref);
3964 static inline dw_die_ref AT_ref (dw_attr_ref);
3965 static inline int AT_ref_external (dw_attr_ref);
3966 static inline void set_AT_ref_external (dw_attr_ref, int);
3967 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3968 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3969 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3970 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3972 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3973 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3974 static inline rtx AT_addr (dw_attr_ref);
3975 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3976 static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
3977 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3978 unsigned HOST_WIDE_INT);
3979 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3981 static inline const char *AT_lbl (dw_attr_ref);
3982 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3983 static const char *get_AT_low_pc (dw_die_ref);
3984 static const char *get_AT_hi_pc (dw_die_ref);
3985 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3986 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3987 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3988 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3989 static bool is_c_family (void);
3990 static bool is_cxx (void);
3991 static bool is_java (void);
3992 static bool is_fortran (void);
3993 static bool is_ada (void);
3994 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3995 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3996 static inline void free_die (dw_die_ref);
3997 static void remove_children (dw_die_ref);
3998 static void add_child_die (dw_die_ref, dw_die_ref);
3999 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
4000 static dw_die_ref lookup_type_die (tree);
4001 static void equate_type_number_to_die (tree, dw_die_ref);
4002 static hashval_t decl_die_table_hash (const void *);
4003 static int decl_die_table_eq (const void *, const void *);
4004 static dw_die_ref lookup_decl_die (tree);
4005 static hashval_t decl_loc_table_hash (const void *);
4006 static int decl_loc_table_eq (const void *, const void *);
4007 static var_loc_list *lookup_decl_loc (tree);
4008 static void equate_decl_number_to_die (tree, dw_die_ref);
4009 static void add_var_loc_to_decl (tree, struct var_loc_node *);
4010 static void print_spaces (FILE *);
4011 static void print_die (dw_die_ref, FILE *);
4012 static void print_dwarf_line_table (FILE *);
4013 static void reverse_die_lists (dw_die_ref);
4014 static void reverse_all_dies (dw_die_ref);
4015 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
4016 static dw_die_ref pop_compile_unit (dw_die_ref);
4017 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
4018 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
4019 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
4020 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
4021 static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
4022 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
4023 static int same_die_p (dw_die_ref, dw_die_ref, int *);
4024 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
4025 static void compute_section_prefix (dw_die_ref);
4026 static int is_type_die (dw_die_ref);
4027 static int is_comdat_die (dw_die_ref);
4028 static int is_symbol_die (dw_die_ref);
4029 static void assign_symbol_names (dw_die_ref);
4030 static void break_out_includes (dw_die_ref);
4031 static hashval_t htab_cu_hash (const void *);
4032 static int htab_cu_eq (const void *, const void *);
4033 static void htab_cu_del (void *);
4034 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
4035 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
4036 static void add_sibling_attributes (dw_die_ref);
4037 static void build_abbrev_table (dw_die_ref);
4038 static void output_location_lists (dw_die_ref);
4039 static int constant_size (long unsigned);
4040 static unsigned long size_of_die (dw_die_ref);
4041 static void calc_die_sizes (dw_die_ref);
4042 static void mark_dies (dw_die_ref);
4043 static void unmark_dies (dw_die_ref);
4044 static void unmark_all_dies (dw_die_ref);
4045 static unsigned long size_of_pubnames (void);
4046 static unsigned long size_of_aranges (void);
4047 static enum dwarf_form value_format (dw_attr_ref);
4048 static void output_value_format (dw_attr_ref);
4049 static void output_abbrev_section (void);
4050 static void output_die_symbol (dw_die_ref);
4051 static void output_die (dw_die_ref);
4052 static void output_compilation_unit_header (void);
4053 static void output_comp_unit (dw_die_ref, int);
4054 static const char *dwarf2_name (tree, int);
4055 static void add_pubname (tree, dw_die_ref);
4056 static void output_pubnames (void);
4057 static void add_arange (tree, dw_die_ref);
4058 static void output_aranges (void);
4059 static unsigned int add_ranges (tree);
4060 static void output_ranges (void);
4061 static void output_line_info (void);
4062 static void output_file_names (void);
4063 static dw_die_ref base_type_die (tree);
4064 static tree root_type (tree);
4065 static int is_base_type (tree);
4066 static bool is_subrange_type (tree);
4067 static dw_die_ref subrange_type_die (tree, dw_die_ref);
4068 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
4069 static int type_is_enum (tree);
4070 static unsigned int dbx_reg_number (rtx);
4071 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
4072 static dw_loc_descr_ref reg_loc_descriptor (rtx);
4073 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
4074 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
4075 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4076 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT);
4077 static int is_based_loc (rtx);
4078 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode);
4079 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
4080 static dw_loc_descr_ref loc_descriptor (rtx);
4081 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
4082 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
4083 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
4084 static tree field_type (tree);
4085 static unsigned int simple_type_align_in_bits (tree);
4086 static unsigned int simple_decl_align_in_bits (tree);
4087 static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
4088 static HOST_WIDE_INT field_byte_offset (tree);
4089 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
4091 static void add_data_member_location_attribute (dw_die_ref, tree);
4092 static void add_const_value_attribute (dw_die_ref, rtx);
4093 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
4094 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4095 static void insert_float (rtx, unsigned char *);
4096 static rtx rtl_for_decl_location (tree);
4097 static void add_location_or_const_value_attribute (dw_die_ref, tree,
4098 enum dwarf_attribute);
4099 static void tree_add_const_value_attribute (dw_die_ref, tree);
4100 static void add_name_attribute (dw_die_ref, const char *);
4101 static void add_comp_dir_attribute (dw_die_ref);
4102 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
4103 static void add_subscript_info (dw_die_ref, tree);
4104 static void add_byte_size_attribute (dw_die_ref, tree);
4105 static void add_bit_offset_attribute (dw_die_ref, tree);
4106 static void add_bit_size_attribute (dw_die_ref, tree);
4107 static void add_prototyped_attribute (dw_die_ref, tree);
4108 static void add_abstract_origin_attribute (dw_die_ref, tree);
4109 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
4110 static void add_src_coords_attributes (dw_die_ref, tree);
4111 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
4112 static void push_decl_scope (tree);
4113 static void pop_decl_scope (void);
4114 static dw_die_ref scope_die_for (tree, dw_die_ref);
4115 static inline int local_scope_p (dw_die_ref);
4116 static inline int class_or_namespace_scope_p (dw_die_ref);
4117 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
4118 static void add_calling_convention_attribute (dw_die_ref, tree);
4119 static const char *type_tag (tree);
4120 static tree member_declared_type (tree);
4122 static const char *decl_start_label (tree);
4124 static void gen_array_type_die (tree, dw_die_ref);
4126 static void gen_entry_point_die (tree, dw_die_ref);
4128 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
4129 static void gen_inlined_structure_type_die (tree, dw_die_ref);
4130 static void gen_inlined_union_type_die (tree, dw_die_ref);
4131 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
4132 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
4133 static void gen_unspecified_parameters_die (tree, dw_die_ref);
4134 static void gen_formal_types_die (tree, dw_die_ref);
4135 static void gen_subprogram_die (tree, dw_die_ref);
4136 static void gen_variable_die (tree, dw_die_ref);
4137 static void gen_label_die (tree, dw_die_ref);
4138 static void gen_lexical_block_die (tree, dw_die_ref, int);
4139 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
4140 static void gen_field_die (tree, dw_die_ref);
4141 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
4142 static dw_die_ref gen_compile_unit_die (const char *);
4143 static void gen_string_type_die (tree, dw_die_ref);
4144 static void gen_inheritance_die (tree, tree, dw_die_ref);
4145 static void gen_member_die (tree, dw_die_ref);
4146 static void gen_struct_or_union_type_die (tree, dw_die_ref);
4147 static void gen_subroutine_type_die (tree, dw_die_ref);
4148 static void gen_typedef_die (tree, dw_die_ref);
4149 static void gen_type_die (tree, dw_die_ref);
4150 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
4151 static void gen_block_die (tree, dw_die_ref, int);
4152 static void decls_for_scope (tree, dw_die_ref, int);
4153 static int is_redundant_typedef (tree);
4154 static void gen_namespace_die (tree);
4155 static void gen_decl_die (tree, dw_die_ref);
4156 static dw_die_ref force_decl_die (tree);
4157 static dw_die_ref force_type_die (tree);
4158 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
4159 static void declare_in_namespace (tree, dw_die_ref);
4160 static unsigned lookup_filename (const char *);
4161 static void init_file_table (void);
4162 static void retry_incomplete_types (void);
4163 static void gen_type_die_for_member (tree, tree, dw_die_ref);
4164 static void splice_child_die (dw_die_ref, dw_die_ref);
4165 static int file_info_cmp (const void *, const void *);
4166 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
4167 const char *, const char *, unsigned);
4168 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
4169 const char *, const char *,
4171 static void output_loc_list (dw_loc_list_ref);
4172 static char *gen_internal_sym (const char *);
4174 static void prune_unmark_dies (dw_die_ref);
4175 static void prune_unused_types_mark (dw_die_ref, int);
4176 static void prune_unused_types_walk (dw_die_ref);
4177 static void prune_unused_types_walk_attribs (dw_die_ref);
4178 static void prune_unused_types_prune (dw_die_ref);
4179 static void prune_unused_types (void);
4180 static int maybe_emit_file (int);
4182 /* Section names used to hold DWARF debugging information. */
4183 #ifndef DEBUG_INFO_SECTION
4184 #define DEBUG_INFO_SECTION ".debug_info"
4186 #ifndef DEBUG_ABBREV_SECTION
4187 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
4189 #ifndef DEBUG_ARANGES_SECTION
4190 #define DEBUG_ARANGES_SECTION ".debug_aranges"
4192 #ifndef DEBUG_MACINFO_SECTION
4193 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
4195 #ifndef DEBUG_LINE_SECTION
4196 #define DEBUG_LINE_SECTION ".debug_line"
4198 #ifndef DEBUG_LOC_SECTION
4199 #define DEBUG_LOC_SECTION ".debug_loc"
4201 #ifndef DEBUG_PUBNAMES_SECTION
4202 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
4204 #ifndef DEBUG_STR_SECTION
4205 #define DEBUG_STR_SECTION ".debug_str"
4207 #ifndef DEBUG_RANGES_SECTION
4208 #define DEBUG_RANGES_SECTION ".debug_ranges"
4211 /* Standard ELF section names for compiled code and data. */
4212 #ifndef TEXT_SECTION_NAME
4213 #define TEXT_SECTION_NAME ".text"
4216 /* Section flags for .debug_str section. */
4217 #define DEBUG_STR_SECTION_FLAGS \
4218 (HAVE_GAS_SHF_MERGE && flag_merge_constants \
4219 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
4222 /* Labels we insert at beginning sections we can reference instead of
4223 the section names themselves. */
4225 #ifndef TEXT_SECTION_LABEL
4226 #define TEXT_SECTION_LABEL "Ltext"
4228 #ifndef COLD_TEXT_SECTION_LABEL
4229 #define COLD_TEXT_SECTION_LABEL "Ltext_cold"
4231 #ifndef DEBUG_LINE_SECTION_LABEL
4232 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
4234 #ifndef DEBUG_INFO_SECTION_LABEL
4235 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
4237 #ifndef DEBUG_ABBREV_SECTION_LABEL
4238 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
4240 #ifndef DEBUG_LOC_SECTION_LABEL
4241 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
4243 #ifndef DEBUG_RANGES_SECTION_LABEL
4244 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
4246 #ifndef DEBUG_MACINFO_SECTION_LABEL
4247 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
4250 /* Definitions of defaults for formats and names of various special
4251 (artificial) labels which may be generated within this file (when the -g
4252 options is used and DWARF2_DEBUGGING_INFO is in effect.
4253 If necessary, these may be overridden from within the tm.h file, but
4254 typically, overriding these defaults is unnecessary. */
4256 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4257 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4258 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4259 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4260 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4261 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4262 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4263 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4264 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4265 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
4267 #ifndef TEXT_END_LABEL
4268 #define TEXT_END_LABEL "Letext"
4270 #ifndef COLD_END_LABEL
4271 #define COLD_END_LABEL "Letext_cold"
4273 #ifndef BLOCK_BEGIN_LABEL
4274 #define BLOCK_BEGIN_LABEL "LBB"
4276 #ifndef BLOCK_END_LABEL
4277 #define BLOCK_END_LABEL "LBE"
4279 #ifndef LINE_CODE_LABEL
4280 #define LINE_CODE_LABEL "LM"
4282 #ifndef SEPARATE_LINE_CODE_LABEL
4283 #define SEPARATE_LINE_CODE_LABEL "LSM"
4286 /* We allow a language front-end to designate a function that is to be
4287 called to "demangle" any name before it is put into a DIE. */
4289 static const char *(*demangle_name_func) (const char *);
4292 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
4294 demangle_name_func = func;
4297 /* Test if rtl node points to a pseudo register. */
4300 is_pseudo_reg (rtx rtl)
4302 return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
4303 || (GET_CODE (rtl) == SUBREG
4304 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
4307 /* Return a reference to a type, with its const and volatile qualifiers
4311 type_main_variant (tree type)
4313 type = TYPE_MAIN_VARIANT (type);
4315 /* ??? There really should be only one main variant among any group of
4316 variants of a given type (and all of the MAIN_VARIANT values for all
4317 members of the group should point to that one type) but sometimes the C
4318 front-end messes this up for array types, so we work around that bug
4320 if (TREE_CODE (type) == ARRAY_TYPE)
4321 while (type != TYPE_MAIN_VARIANT (type))
4322 type = TYPE_MAIN_VARIANT (type);
4327 /* Return nonzero if the given type node represents a tagged type. */
4330 is_tagged_type (tree type)
4332 enum tree_code code = TREE_CODE (type);
4334 return (code == RECORD_TYPE || code == UNION_TYPE
4335 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4338 /* Convert a DIE tag into its string name. */
4341 dwarf_tag_name (unsigned int tag)
4345 case DW_TAG_padding:
4346 return "DW_TAG_padding";
4347 case DW_TAG_array_type:
4348 return "DW_TAG_array_type";
4349 case DW_TAG_class_type:
4350 return "DW_TAG_class_type";
4351 case DW_TAG_entry_point:
4352 return "DW_TAG_entry_point";
4353 case DW_TAG_enumeration_type:
4354 return "DW_TAG_enumeration_type";
4355 case DW_TAG_formal_parameter:
4356 return "DW_TAG_formal_parameter";
4357 case DW_TAG_imported_declaration:
4358 return "DW_TAG_imported_declaration";
4360 return "DW_TAG_label";
4361 case DW_TAG_lexical_block:
4362 return "DW_TAG_lexical_block";
4364 return "DW_TAG_member";
4365 case DW_TAG_pointer_type:
4366 return "DW_TAG_pointer_type";
4367 case DW_TAG_reference_type:
4368 return "DW_TAG_reference_type";
4369 case DW_TAG_compile_unit:
4370 return "DW_TAG_compile_unit";
4371 case DW_TAG_string_type:
4372 return "DW_TAG_string_type";
4373 case DW_TAG_structure_type:
4374 return "DW_TAG_structure_type";
4375 case DW_TAG_subroutine_type:
4376 return "DW_TAG_subroutine_type";
4377 case DW_TAG_typedef:
4378 return "DW_TAG_typedef";
4379 case DW_TAG_union_type:
4380 return "DW_TAG_union_type";
4381 case DW_TAG_unspecified_parameters:
4382 return "DW_TAG_unspecified_parameters";
4383 case DW_TAG_variant:
4384 return "DW_TAG_variant";
4385 case DW_TAG_common_block:
4386 return "DW_TAG_common_block";
4387 case DW_TAG_common_inclusion:
4388 return "DW_TAG_common_inclusion";
4389 case DW_TAG_inheritance:
4390 return "DW_TAG_inheritance";
4391 case DW_TAG_inlined_subroutine:
4392 return "DW_TAG_inlined_subroutine";
4394 return "DW_TAG_module";
4395 case DW_TAG_ptr_to_member_type:
4396 return "DW_TAG_ptr_to_member_type";
4397 case DW_TAG_set_type:
4398 return "DW_TAG_set_type";
4399 case DW_TAG_subrange_type:
4400 return "DW_TAG_subrange_type";
4401 case DW_TAG_with_stmt:
4402 return "DW_TAG_with_stmt";
4403 case DW_TAG_access_declaration:
4404 return "DW_TAG_access_declaration";
4405 case DW_TAG_base_type:
4406 return "DW_TAG_base_type";
4407 case DW_TAG_catch_block:
4408 return "DW_TAG_catch_block";
4409 case DW_TAG_const_type:
4410 return "DW_TAG_const_type";
4411 case DW_TAG_constant:
4412 return "DW_TAG_constant";
4413 case DW_TAG_enumerator:
4414 return "DW_TAG_enumerator";
4415 case DW_TAG_file_type:
4416 return "DW_TAG_file_type";
4418 return "DW_TAG_friend";
4419 case DW_TAG_namelist:
4420 return "DW_TAG_namelist";
4421 case DW_TAG_namelist_item:
4422 return "DW_TAG_namelist_item";
4423 case DW_TAG_namespace:
4424 return "DW_TAG_namespace";
4425 case DW_TAG_packed_type:
4426 return "DW_TAG_packed_type";
4427 case DW_TAG_subprogram:
4428 return "DW_TAG_subprogram";
4429 case DW_TAG_template_type_param:
4430 return "DW_TAG_template_type_param";
4431 case DW_TAG_template_value_param:
4432 return "DW_TAG_template_value_param";
4433 case DW_TAG_thrown_type:
4434 return "DW_TAG_thrown_type";
4435 case DW_TAG_try_block:
4436 return "DW_TAG_try_block";
4437 case DW_TAG_variant_part:
4438 return "DW_TAG_variant_part";
4439 case DW_TAG_variable:
4440 return "DW_TAG_variable";
4441 case DW_TAG_volatile_type:
4442 return "DW_TAG_volatile_type";
4443 case DW_TAG_imported_module:
4444 return "DW_TAG_imported_module";
4445 case DW_TAG_MIPS_loop:
4446 return "DW_TAG_MIPS_loop";
4447 case DW_TAG_format_label:
4448 return "DW_TAG_format_label";
4449 case DW_TAG_function_template:
4450 return "DW_TAG_function_template";
4451 case DW_TAG_class_template:
4452 return "DW_TAG_class_template";
4453 case DW_TAG_GNU_BINCL:
4454 return "DW_TAG_GNU_BINCL";
4455 case DW_TAG_GNU_EINCL:
4456 return "DW_TAG_GNU_EINCL";
4458 return "DW_TAG_<unknown>";
4462 /* Convert a DWARF attribute code into its string name. */
4465 dwarf_attr_name (unsigned int attr)
4470 return "DW_AT_sibling";
4471 case DW_AT_location:
4472 return "DW_AT_location";
4474 return "DW_AT_name";
4475 case DW_AT_ordering:
4476 return "DW_AT_ordering";
4477 case DW_AT_subscr_data:
4478 return "DW_AT_subscr_data";
4479 case DW_AT_byte_size:
4480 return "DW_AT_byte_size";
4481 case DW_AT_bit_offset:
4482 return "DW_AT_bit_offset";
4483 case DW_AT_bit_size:
4484 return "DW_AT_bit_size";
4485 case DW_AT_element_list:
4486 return "DW_AT_element_list";
4487 case DW_AT_stmt_list:
4488 return "DW_AT_stmt_list";
4490 return "DW_AT_low_pc";
4492 return "DW_AT_high_pc";
4493 case DW_AT_language:
4494 return "DW_AT_language";
4496 return "DW_AT_member";
4498 return "DW_AT_discr";
4499 case DW_AT_discr_value:
4500 return "DW_AT_discr_value";
4501 case DW_AT_visibility:
4502 return "DW_AT_visibility";
4504 return "DW_AT_import";
4505 case DW_AT_string_length:
4506 return "DW_AT_string_length";
4507 case DW_AT_common_reference:
4508 return "DW_AT_common_reference";
4509 case DW_AT_comp_dir:
4510 return "DW_AT_comp_dir";
4511 case DW_AT_const_value:
4512 return "DW_AT_const_value";
4513 case DW_AT_containing_type:
4514 return "DW_AT_containing_type";
4515 case DW_AT_default_value:
4516 return "DW_AT_default_value";
4518 return "DW_AT_inline";
4519 case DW_AT_is_optional:
4520 return "DW_AT_is_optional";
4521 case DW_AT_lower_bound:
4522 return "DW_AT_lower_bound";
4523 case DW_AT_producer:
4524 return "DW_AT_producer";
4525 case DW_AT_prototyped:
4526 return "DW_AT_prototyped";
4527 case DW_AT_return_addr:
4528 return "DW_AT_return_addr";
4529 case DW_AT_start_scope:
4530 return "DW_AT_start_scope";
4531 case DW_AT_stride_size:
4532 return "DW_AT_stride_size";
4533 case DW_AT_upper_bound:
4534 return "DW_AT_upper_bound";
4535 case DW_AT_abstract_origin:
4536 return "DW_AT_abstract_origin";
4537 case DW_AT_accessibility:
4538 return "DW_AT_accessibility";
4539 case DW_AT_address_class:
4540 return "DW_AT_address_class";
4541 case DW_AT_artificial:
4542 return "DW_AT_artificial";
4543 case DW_AT_base_types:
4544 return "DW_AT_base_types";
4545 case DW_AT_calling_convention:
4546 return "DW_AT_calling_convention";
4548 return "DW_AT_count";
4549 case DW_AT_data_member_location:
4550 return "DW_AT_data_member_location";
4551 case DW_AT_decl_column:
4552 return "DW_AT_decl_column";
4553 case DW_AT_decl_file:
4554 return "DW_AT_decl_file";
4555 case DW_AT_decl_line:
4556 return "DW_AT_decl_line";
4557 case DW_AT_declaration:
4558 return "DW_AT_declaration";
4559 case DW_AT_discr_list:
4560 return "DW_AT_discr_list";
4561 case DW_AT_encoding:
4562 return "DW_AT_encoding";
4563 case DW_AT_external:
4564 return "DW_AT_external";
4565 case DW_AT_frame_base:
4566 return "DW_AT_frame_base";
4568 return "DW_AT_friend";
4569 case DW_AT_identifier_case:
4570 return "DW_AT_identifier_case";
4571 case DW_AT_macro_info:
4572 return "DW_AT_macro_info";
4573 case DW_AT_namelist_items:
4574 return "DW_AT_namelist_items";
4575 case DW_AT_priority:
4576 return "DW_AT_priority";
4578 return "DW_AT_segment";
4579 case DW_AT_specification:
4580 return "DW_AT_specification";
4581 case DW_AT_static_link:
4582 return "DW_AT_static_link";
4584 return "DW_AT_type";
4585 case DW_AT_use_location:
4586 return "DW_AT_use_location";
4587 case DW_AT_variable_parameter:
4588 return "DW_AT_variable_parameter";
4589 case DW_AT_virtuality:
4590 return "DW_AT_virtuality";
4591 case DW_AT_vtable_elem_location:
4592 return "DW_AT_vtable_elem_location";
4594 case DW_AT_allocated:
4595 return "DW_AT_allocated";
4596 case DW_AT_associated:
4597 return "DW_AT_associated";
4598 case DW_AT_data_location:
4599 return "DW_AT_data_location";
4601 return "DW_AT_stride";
4602 case DW_AT_entry_pc:
4603 return "DW_AT_entry_pc";
4604 case DW_AT_use_UTF8:
4605 return "DW_AT_use_UTF8";
4606 case DW_AT_extension:
4607 return "DW_AT_extension";
4609 return "DW_AT_ranges";
4610 case DW_AT_trampoline:
4611 return "DW_AT_trampoline";
4612 case DW_AT_call_column:
4613 return "DW_AT_call_column";
4614 case DW_AT_call_file:
4615 return "DW_AT_call_file";
4616 case DW_AT_call_line:
4617 return "DW_AT_call_line";
4619 case DW_AT_MIPS_fde:
4620 return "DW_AT_MIPS_fde";
4621 case DW_AT_MIPS_loop_begin:
4622 return "DW_AT_MIPS_loop_begin";
4623 case DW_AT_MIPS_tail_loop_begin:
4624 return "DW_AT_MIPS_tail_loop_begin";
4625 case DW_AT_MIPS_epilog_begin:
4626 return "DW_AT_MIPS_epilog_begin";
4627 case DW_AT_MIPS_loop_unroll_factor:
4628 return "DW_AT_MIPS_loop_unroll_factor";
4629 case DW_AT_MIPS_software_pipeline_depth:
4630 return "DW_AT_MIPS_software_pipeline_depth";
4631 case DW_AT_MIPS_linkage_name:
4632 return "DW_AT_MIPS_linkage_name";
4633 case DW_AT_MIPS_stride:
4634 return "DW_AT_MIPS_stride";
4635 case DW_AT_MIPS_abstract_name:
4636 return "DW_AT_MIPS_abstract_name";
4637 case DW_AT_MIPS_clone_origin:
4638 return "DW_AT_MIPS_clone_origin";
4639 case DW_AT_MIPS_has_inlines:
4640 return "DW_AT_MIPS_has_inlines";
4642 case DW_AT_sf_names:
4643 return "DW_AT_sf_names";
4644 case DW_AT_src_info:
4645 return "DW_AT_src_info";
4646 case DW_AT_mac_info:
4647 return "DW_AT_mac_info";
4648 case DW_AT_src_coords:
4649 return "DW_AT_src_coords";
4650 case DW_AT_body_begin:
4651 return "DW_AT_body_begin";
4652 case DW_AT_body_end:
4653 return "DW_AT_body_end";
4654 case DW_AT_GNU_vector:
4655 return "DW_AT_GNU_vector";
4657 case DW_AT_VMS_rtnbeg_pd_address:
4658 return "DW_AT_VMS_rtnbeg_pd_address";
4661 return "DW_AT_<unknown>";
4665 /* Convert a DWARF value form code into its string name. */
4668 dwarf_form_name (unsigned int form)
4673 return "DW_FORM_addr";
4674 case DW_FORM_block2:
4675 return "DW_FORM_block2";
4676 case DW_FORM_block4:
4677 return "DW_FORM_block4";
4679 return "DW_FORM_data2";
4681 return "DW_FORM_data4";
4683 return "DW_FORM_data8";
4684 case DW_FORM_string:
4685 return "DW_FORM_string";
4687 return "DW_FORM_block";
4688 case DW_FORM_block1:
4689 return "DW_FORM_block1";
4691 return "DW_FORM_data1";
4693 return "DW_FORM_flag";
4695 return "DW_FORM_sdata";
4697 return "DW_FORM_strp";
4699 return "DW_FORM_udata";
4700 case DW_FORM_ref_addr:
4701 return "DW_FORM_ref_addr";
4703 return "DW_FORM_ref1";
4705 return "DW_FORM_ref2";
4707 return "DW_FORM_ref4";
4709 return "DW_FORM_ref8";
4710 case DW_FORM_ref_udata:
4711 return "DW_FORM_ref_udata";
4712 case DW_FORM_indirect:
4713 return "DW_FORM_indirect";
4715 return "DW_FORM_<unknown>";
4719 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4720 instance of an inlined instance of a decl which is local to an inline
4721 function, so we have to trace all of the way back through the origin chain
4722 to find out what sort of node actually served as the original seed for the
4726 decl_ultimate_origin (tree decl)
4728 if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4731 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4732 nodes in the function to point to themselves; ignore that if
4733 we're trying to output the abstract instance of this function. */
4734 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4737 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4738 most distant ancestor, this should never happen. */
4739 gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4741 return DECL_ABSTRACT_ORIGIN (decl);
4744 /* Determine the "ultimate origin" of a block. The block may be an inlined
4745 instance of an inlined instance of a block which is local to an inline
4746 function, so we have to trace all of the way back through the origin chain
4747 to find out what sort of node actually served as the original seed for the
4751 block_ultimate_origin (tree block)
4753 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4755 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4756 nodes in the function to point to themselves; ignore that if
4757 we're trying to output the abstract instance of this function. */
4758 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4761 if (immediate_origin == NULL_TREE)
4766 tree lookahead = immediate_origin;
4770 ret_val = lookahead;
4771 lookahead = (TREE_CODE (ret_val) == BLOCK
4772 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4774 while (lookahead != NULL && lookahead != ret_val);
4776 /* The block's abstract origin chain may not be the *ultimate* origin of
4777 the block. It could lead to a DECL that has an abstract origin set.
4778 If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
4779 will give us if it has one). Note that DECL's abstract origins are
4780 supposed to be the most distant ancestor (or so decl_ultimate_origin
4781 claims), so we don't need to loop following the DECL origins. */
4782 if (DECL_P (ret_val))
4783 return DECL_ORIGIN (ret_val);
4789 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4790 of a virtual function may refer to a base class, so we check the 'this'
4794 decl_class_context (tree decl)
4796 tree context = NULL_TREE;
4798 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4799 context = DECL_CONTEXT (decl);
4801 context = TYPE_MAIN_VARIANT
4802 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4804 if (context && !TYPE_P (context))
4805 context = NULL_TREE;
4810 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4811 addition order, and correct that in reverse_all_dies. */
4814 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4816 if (die != NULL && attr != NULL)
4818 attr->dw_attr_next = die->die_attr;
4819 die->die_attr = attr;
4823 static inline enum dw_val_class
4824 AT_class (dw_attr_ref a)
4826 return a->dw_attr_val.val_class;
4829 /* Add a flag value attribute to a DIE. */
4832 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4834 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4836 attr->dw_attr_next = NULL;
4837 attr->dw_attr = attr_kind;
4838 attr->dw_attr_val.val_class = dw_val_class_flag;
4839 attr->dw_attr_val.v.val_flag = flag;
4840 add_dwarf_attr (die, attr);
4843 static inline unsigned
4844 AT_flag (dw_attr_ref a)
4846 gcc_assert (a && AT_class (a) == dw_val_class_flag);
4847 return a->dw_attr_val.v.val_flag;
4850 /* Add a signed integer attribute value to a DIE. */
4853 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4855 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4857 attr->dw_attr_next = NULL;
4858 attr->dw_attr = attr_kind;
4859 attr->dw_attr_val.val_class = dw_val_class_const;
4860 attr->dw_attr_val.v.val_int = int_val;
4861 add_dwarf_attr (die, attr);
4864 static inline HOST_WIDE_INT
4865 AT_int (dw_attr_ref a)
4867 gcc_assert (a && AT_class (a) == dw_val_class_const);
4868 return a->dw_attr_val.v.val_int;
4871 /* Add an unsigned integer attribute value to a DIE. */
4874 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4875 unsigned HOST_WIDE_INT unsigned_val)
4877 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4879 attr->dw_attr_next = NULL;
4880 attr->dw_attr = attr_kind;
4881 attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4882 attr->dw_attr_val.v.val_unsigned = unsigned_val;
4883 add_dwarf_attr (die, attr);
4886 static inline unsigned HOST_WIDE_INT
4887 AT_unsigned (dw_attr_ref a)
4889 gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4890 return a->dw_attr_val.v.val_unsigned;
4893 /* Add an unsigned double integer attribute value to a DIE. */
4896 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4897 long unsigned int val_hi, long unsigned int val_low)
4899 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4901 attr->dw_attr_next = NULL;
4902 attr->dw_attr = attr_kind;
4903 attr->dw_attr_val.val_class = dw_val_class_long_long;
4904 attr->dw_attr_val.v.val_long_long.hi = val_hi;
4905 attr->dw_attr_val.v.val_long_long.low = val_low;
4906 add_dwarf_attr (die, attr);
4909 /* Add a floating point attribute value to a DIE and return it. */
4912 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4913 unsigned int length, unsigned int elt_size, unsigned char *array)
4915 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4917 attr->dw_attr_next = NULL;
4918 attr->dw_attr = attr_kind;
4919 attr->dw_attr_val.val_class = dw_val_class_vec;
4920 attr->dw_attr_val.v.val_vec.length = length;
4921 attr->dw_attr_val.v.val_vec.elt_size = elt_size;
4922 attr->dw_attr_val.v.val_vec.array = array;
4923 add_dwarf_attr (die, attr);
4926 /* Hash and equality functions for debug_str_hash. */
4929 debug_str_do_hash (const void *x)
4931 return htab_hash_string (((const struct indirect_string_node *)x)->str);
4935 debug_str_eq (const void *x1, const void *x2)
4937 return strcmp ((((const struct indirect_string_node *)x1)->str),
4938 (const char *)x2) == 0;
4941 /* Add a string attribute value to a DIE. */
4944 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4946 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4947 struct indirect_string_node *node;
4950 if (! debug_str_hash)
4951 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4952 debug_str_eq, NULL);
4954 slot = htab_find_slot_with_hash (debug_str_hash, str,
4955 htab_hash_string (str), INSERT);
4957 *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
4958 node = (struct indirect_string_node *) *slot;
4959 node->str = ggc_strdup (str);
4962 attr->dw_attr_next = NULL;
4963 attr->dw_attr = attr_kind;
4964 attr->dw_attr_val.val_class = dw_val_class_str;
4965 attr->dw_attr_val.v.val_str = node;
4966 add_dwarf_attr (die, attr);
4969 static inline const char *
4970 AT_string (dw_attr_ref a)
4972 gcc_assert (a && AT_class (a) == dw_val_class_str);
4973 return a->dw_attr_val.v.val_str->str;
4976 /* Find out whether a string should be output inline in DIE
4977 or out-of-line in .debug_str section. */
4980 AT_string_form (dw_attr_ref a)
4982 struct indirect_string_node *node;
4986 gcc_assert (a && AT_class (a) == dw_val_class_str);
4988 node = a->dw_attr_val.v.val_str;
4992 len = strlen (node->str) + 1;
4994 /* If the string is shorter or equal to the size of the reference, it is
4995 always better to put it inline. */
4996 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4997 return node->form = DW_FORM_string;
4999 /* If we cannot expect the linker to merge strings in .debug_str
5000 section, only put it into .debug_str if it is worth even in this
5002 if ((debug_str_section->common.flags & SECTION_MERGE) == 0
5003 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5004 return node->form = DW_FORM_string;
5006 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
5007 ++dw2_string_counter;
5008 node->label = xstrdup (label);
5010 return node->form = DW_FORM_strp;
5013 /* Add a DIE reference attribute value to a DIE. */
5016 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
5018 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5020 attr->dw_attr_next = NULL;
5021 attr->dw_attr = attr_kind;
5022 attr->dw_attr_val.val_class = dw_val_class_die_ref;
5023 attr->dw_attr_val.v.val_die_ref.die = targ_die;
5024 attr->dw_attr_val.v.val_die_ref.external = 0;
5025 add_dwarf_attr (die, attr);
5028 /* Add an AT_specification attribute to a DIE, and also make the back
5029 pointer from the specification to the definition. */
5032 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
5034 add_AT_die_ref (die, DW_AT_specification, targ_die);
5035 gcc_assert (!targ_die->die_definition);
5036 targ_die->die_definition = die;
5039 static inline dw_die_ref
5040 AT_ref (dw_attr_ref a)
5042 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5043 return a->dw_attr_val.v.val_die_ref.die;
5047 AT_ref_external (dw_attr_ref a)
5049 if (a && AT_class (a) == dw_val_class_die_ref)
5050 return a->dw_attr_val.v.val_die_ref.external;
5056 set_AT_ref_external (dw_attr_ref a, int i)
5058 gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5059 a->dw_attr_val.v.val_die_ref.external = i;
5062 /* Add an FDE reference attribute value to a DIE. */
5065 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
5067 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5069 attr->dw_attr_next = NULL;
5070 attr->dw_attr = attr_kind;
5071 attr->dw_attr_val.val_class = dw_val_class_fde_ref;
5072 attr->dw_attr_val.v.val_fde_index = targ_fde;
5073 add_dwarf_attr (die, attr);
5076 /* Add a location description attribute value to a DIE. */
5079 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
5081 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5083 attr->dw_attr_next = NULL;
5084 attr->dw_attr = attr_kind;
5085 attr->dw_attr_val.val_class = dw_val_class_loc;
5086 attr->dw_attr_val.v.val_loc = loc;
5087 add_dwarf_attr (die, attr);
5090 static inline dw_loc_descr_ref
5091 AT_loc (dw_attr_ref a)
5093 gcc_assert (a && AT_class (a) == dw_val_class_loc);
5094 return a->dw_attr_val.v.val_loc;
5098 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
5100 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5102 attr->dw_attr_next = NULL;
5103 attr->dw_attr = attr_kind;
5104 attr->dw_attr_val.val_class = dw_val_class_loc_list;
5105 attr->dw_attr_val.v.val_loc_list = loc_list;
5106 add_dwarf_attr (die, attr);
5107 have_location_lists = 1;
5110 static inline dw_loc_list_ref
5111 AT_loc_list (dw_attr_ref a)
5113 gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
5114 return a->dw_attr_val.v.val_loc_list;
5117 /* Add an address constant attribute value to a DIE. */
5120 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
5122 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5124 attr->dw_attr_next = NULL;
5125 attr->dw_attr = attr_kind;
5126 attr->dw_attr_val.val_class = dw_val_class_addr;
5127 attr->dw_attr_val.v.val_addr = addr;
5128 add_dwarf_attr (die, attr);
5132 AT_addr (dw_attr_ref a)
5134 gcc_assert (a && AT_class (a) == dw_val_class_addr);
5135 return a->dw_attr_val.v.val_addr;
5138 /* Add a label identifier attribute value to a DIE. */
5141 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
5143 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5145 attr->dw_attr_next = NULL;
5146 attr->dw_attr = attr_kind;
5147 attr->dw_attr_val.val_class = dw_val_class_lbl_id;
5148 attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
5149 add_dwarf_attr (die, attr);
5152 /* Add a section offset attribute value to a DIE. */
5155 add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
5157 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5159 attr->dw_attr_next = NULL;
5160 attr->dw_attr = attr_kind;
5161 attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
5162 attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
5163 add_dwarf_attr (die, attr);
5166 /* Add an offset attribute value to a DIE. */
5169 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
5170 unsigned HOST_WIDE_INT offset)
5172 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5174 attr->dw_attr_next = NULL;
5175 attr->dw_attr = attr_kind;
5176 attr->dw_attr_val.val_class = dw_val_class_offset;
5177 attr->dw_attr_val.v.val_offset = offset;
5178 add_dwarf_attr (die, attr);
5181 /* Add an range_list attribute value to a DIE. */
5184 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
5185 long unsigned int offset)
5187 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5189 attr->dw_attr_next = NULL;
5190 attr->dw_attr = attr_kind;
5191 attr->dw_attr_val.val_class = dw_val_class_range_list;
5192 attr->dw_attr_val.v.val_offset = offset;
5193 add_dwarf_attr (die, attr);
5196 static inline const char *
5197 AT_lbl (dw_attr_ref a)
5199 gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5200 || AT_class (a) == dw_val_class_lbl_offset));
5201 return a->dw_attr_val.v.val_lbl_id;
5204 /* Get the attribute of type attr_kind. */
5207 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5210 dw_die_ref spec = NULL;
5214 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5215 if (a->dw_attr == attr_kind)
5217 else if (a->dw_attr == DW_AT_specification
5218 || a->dw_attr == DW_AT_abstract_origin)
5222 return get_AT (spec, attr_kind);
5228 /* Return the "low pc" attribute value, typically associated with a subprogram
5229 DIE. Return null if the "low pc" attribute is either not present, or if it
5230 cannot be represented as an assembler label identifier. */
5232 static inline const char *
5233 get_AT_low_pc (dw_die_ref die)
5235 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
5237 return a ? AT_lbl (a) : NULL;
5240 /* Return the "high pc" attribute value, typically associated with a subprogram
5241 DIE. Return null if the "high pc" attribute is either not present, or if it
5242 cannot be represented as an assembler label identifier. */
5244 static inline const char *
5245 get_AT_hi_pc (dw_die_ref die)
5247 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
5249 return a ? AT_lbl (a) : NULL;
5252 /* Return the value of the string attribute designated by ATTR_KIND, or
5253 NULL if it is not present. */
5255 static inline const char *
5256 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5258 dw_attr_ref a = get_AT (die, attr_kind);
5260 return a ? AT_string (a) : NULL;
5263 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5264 if it is not present. */
5267 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5269 dw_attr_ref a = get_AT (die, attr_kind);
5271 return a ? AT_flag (a) : 0;
5274 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5275 if it is not present. */
5277 static inline unsigned
5278 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5280 dw_attr_ref a = get_AT (die, attr_kind);
5282 return a ? AT_unsigned (a) : 0;
5285 static inline dw_die_ref
5286 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5288 dw_attr_ref a = get_AT (die, attr_kind);
5290 return a ? AT_ref (a) : NULL;
5293 /* Return TRUE if the language is C or C++. */
5298 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5300 return (lang == DW_LANG_C || lang == DW_LANG_C89
5301 || lang == DW_LANG_C_plus_plus);
5304 /* Return TRUE if the language is C++. */
5309 return (get_AT_unsigned (comp_unit_die, DW_AT_language)
5310 == DW_LANG_C_plus_plus);
5313 /* Return TRUE if the language is Fortran. */
5318 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5320 return (lang == DW_LANG_Fortran77
5321 || lang == DW_LANG_Fortran90
5322 || lang == DW_LANG_Fortran95);
5325 /* Return TRUE if the language is Java. */
5330 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5332 return lang == DW_LANG_Java;
5335 /* Return TRUE if the language is Ada. */
5340 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5342 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5345 /* Free up the memory used by A. */
5347 static inline void free_AT (dw_attr_ref);
5349 free_AT (dw_attr_ref a)
5351 if (AT_class (a) == dw_val_class_str)
5352 if (a->dw_attr_val.v.val_str->refcount)
5353 a->dw_attr_val.v.val_str->refcount--;
5356 /* Remove the specified attribute if present. */
5359 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5362 dw_attr_ref removed = NULL;
5366 for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
5367 if ((*p)->dw_attr == attr_kind)
5370 *p = (*p)->dw_attr_next;
5379 /* Remove child die whose die_tag is specified tag. */
5382 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5384 dw_die_ref current, prev, next;
5385 current = die->die_child;
5387 while (current != NULL)
5389 if (current->die_tag == tag)
5391 next = current->die_sib;
5393 die->die_child = next;
5395 prev->die_sib = next;
5402 current = current->die_sib;
5407 /* Free up the memory used by DIE. */
5410 free_die (dw_die_ref die)
5412 remove_children (die);
5415 /* Discard the children of this DIE. */
5418 remove_children (dw_die_ref die)
5420 dw_die_ref child_die = die->die_child;
5422 die->die_child = NULL;
5424 while (child_die != NULL)
5426 dw_die_ref tmp_die = child_die;
5429 child_die = child_die->die_sib;
5431 for (a = tmp_die->die_attr; a != NULL;)
5433 dw_attr_ref tmp_a = a;
5435 a = a->dw_attr_next;
5443 /* Add a child DIE below its parent. We build the lists up in reverse
5444 addition order, and correct that in reverse_all_dies. */
5447 add_child_die (dw_die_ref die, dw_die_ref child_die)
5449 if (die != NULL && child_die != NULL)
5451 gcc_assert (die != child_die);
5453 child_die->die_parent = die;
5454 child_die->die_sib = die->die_child;
5455 die->die_child = child_die;
5459 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5460 is the specification, to the front of PARENT's list of children. */
5463 splice_child_die (dw_die_ref parent, dw_die_ref child)
5467 /* We want the declaration DIE from inside the class, not the
5468 specification DIE at toplevel. */
5469 if (child->die_parent != parent)
5471 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5477 gcc_assert (child->die_parent == parent
5478 || (child->die_parent
5479 == get_AT_ref (parent, DW_AT_specification)));
5481 for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
5484 *p = child->die_sib;
5488 child->die_parent = parent;
5489 child->die_sib = parent->die_child;
5490 parent->die_child = child;
5493 /* Return a pointer to a newly created DIE node. */
5495 static inline dw_die_ref
5496 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5498 dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5500 die->die_tag = tag_value;
5502 if (parent_die != NULL)
5503 add_child_die (parent_die, die);
5506 limbo_die_node *limbo_node;
5508 limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5509 limbo_node->die = die;
5510 limbo_node->created_for = t;
5511 limbo_node->next = limbo_die_list;
5512 limbo_die_list = limbo_node;
5518 /* Return the DIE associated with the given type specifier. */
5520 static inline dw_die_ref
5521 lookup_type_die (tree type)
5523 return TYPE_SYMTAB_DIE (type);
5526 /* Equate a DIE to a given type specifier. */
5529 equate_type_number_to_die (tree type, dw_die_ref type_die)
5531 TYPE_SYMTAB_DIE (type) = type_die;
5534 /* Returns a hash value for X (which really is a die_struct). */
5537 decl_die_table_hash (const void *x)
5539 return (hashval_t) ((const dw_die_ref) x)->decl_id;
5542 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5545 decl_die_table_eq (const void *x, const void *y)
5547 return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5550 /* Return the DIE associated with a given declaration. */
5552 static inline dw_die_ref
5553 lookup_decl_die (tree decl)
5555 return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5558 /* Returns a hash value for X (which really is a var_loc_list). */
5561 decl_loc_table_hash (const void *x)
5563 return (hashval_t) ((const var_loc_list *) x)->decl_id;
5566 /* Return nonzero if decl_id of var_loc_list X is the same as
5570 decl_loc_table_eq (const void *x, const void *y)
5572 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5575 /* Return the var_loc list associated with a given declaration. */
5577 static inline var_loc_list *
5578 lookup_decl_loc (tree decl)
5580 return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5583 /* Equate a DIE to a particular declaration. */
5586 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5588 unsigned int decl_id = DECL_UID (decl);
5591 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5593 decl_die->decl_id = decl_id;
5596 /* Add a variable location node to the linked list for DECL. */
5599 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5601 unsigned int decl_id = DECL_UID (decl);
5605 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5608 temp = ggc_alloc_cleared (sizeof (var_loc_list));
5609 temp->decl_id = decl_id;
5617 /* If the current location is the same as the end of the list,
5618 we have nothing to do. */
5619 if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5620 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5622 /* Add LOC to the end of list and update LAST. */
5623 temp->last->next = loc;
5627 /* Do not add empty location to the beginning of the list. */
5628 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5635 /* Keep track of the number of spaces used to indent the
5636 output of the debugging routines that print the structure of
5637 the DIE internal representation. */
5638 static int print_indent;
5640 /* Indent the line the number of spaces given by print_indent. */
5643 print_spaces (FILE *outfile)
5645 fprintf (outfile, "%*s", print_indent, "");
5648 /* Print the information associated with a given DIE, and its children.
5649 This routine is a debugging aid only. */
5652 print_die (dw_die_ref die, FILE *outfile)
5657 print_spaces (outfile);
5658 fprintf (outfile, "DIE %4lu: %s\n",
5659 die->die_offset, dwarf_tag_name (die->die_tag));
5660 print_spaces (outfile);
5661 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5662 fprintf (outfile, " offset: %lu\n", die->die_offset);
5664 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5666 print_spaces (outfile);
5667 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5669 switch (AT_class (a))
5671 case dw_val_class_addr:
5672 fprintf (outfile, "address");
5674 case dw_val_class_offset:
5675 fprintf (outfile, "offset");
5677 case dw_val_class_loc:
5678 fprintf (outfile, "location descriptor");
5680 case dw_val_class_loc_list:
5681 fprintf (outfile, "location list -> label:%s",
5682 AT_loc_list (a)->ll_symbol);
5684 case dw_val_class_range_list:
5685 fprintf (outfile, "range list");
5687 case dw_val_class_const:
5688 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5690 case dw_val_class_unsigned_const:
5691 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5693 case dw_val_class_long_long:
5694 fprintf (outfile, "constant (%lu,%lu)",
5695 a->dw_attr_val.v.val_long_long.hi,
5696 a->dw_attr_val.v.val_long_long.low);
5698 case dw_val_class_vec:
5699 fprintf (outfile, "floating-point or vector constant");
5701 case dw_val_class_flag:
5702 fprintf (outfile, "%u", AT_flag (a));
5704 case dw_val_class_die_ref:
5705 if (AT_ref (a) != NULL)
5707 if (AT_ref (a)->die_symbol)
5708 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5710 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5713 fprintf (outfile, "die -> <null>");
5715 case dw_val_class_lbl_id:
5716 case dw_val_class_lbl_offset:
5717 fprintf (outfile, "label: %s", AT_lbl (a));
5719 case dw_val_class_str:
5720 if (AT_string (a) != NULL)
5721 fprintf (outfile, "\"%s\"", AT_string (a));
5723 fprintf (outfile, "<null>");
5729 fprintf (outfile, "\n");
5732 if (die->die_child != NULL)
5735 for (c = die->die_child; c != NULL; c = c->die_sib)
5736 print_die (c, outfile);
5740 if (print_indent == 0)
5741 fprintf (outfile, "\n");
5744 /* Print the contents of the source code line number correspondence table.
5745 This routine is a debugging aid only. */
5748 print_dwarf_line_table (FILE *outfile)
5751 dw_line_info_ref line_info;
5753 fprintf (outfile, "\n\nDWARF source line information\n");
5754 for (i = 1; i < line_info_table_in_use; i++)
5756 line_info = &line_info_table[i];
5757 fprintf (outfile, "%5d: ", i);
5758 fprintf (outfile, "%-20s",
5759 VARRAY_CHAR_PTR (file_table, line_info->dw_file_num));
5760 fprintf (outfile, "%6ld", line_info->dw_line_num);
5761 fprintf (outfile, "\n");
5764 fprintf (outfile, "\n\n");
5767 /* Print the information collected for a given DIE. */
5770 debug_dwarf_die (dw_die_ref die)
5772 print_die (die, stderr);
5775 /* Print all DWARF information collected for the compilation unit.
5776 This routine is a debugging aid only. */
5782 print_die (comp_unit_die, stderr);
5783 if (! DWARF2_ASM_LINE_DEBUG_INFO)
5784 print_dwarf_line_table (stderr);
5787 /* We build up the lists of children and attributes by pushing new ones
5788 onto the beginning of the list. Reverse the lists for DIE so that
5789 they are in order of addition. */
5792 reverse_die_lists (dw_die_ref die)
5794 dw_die_ref c, cp, cn;
5795 dw_attr_ref a, ap, an;
5797 for (a = die->die_attr, ap = 0; a; a = an)
5799 an = a->dw_attr_next;
5800 a->dw_attr_next = ap;
5806 for (c = die->die_child, cp = 0; c; c = cn)
5813 die->die_child = cp;
5816 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5817 reverse all dies in add_sibling_attributes, which runs through all the dies,
5818 it would reverse all the dies. Now, however, since we don't call
5819 reverse_die_lists in add_sibling_attributes, we need a routine to
5820 recursively reverse all the dies. This is that routine. */
5823 reverse_all_dies (dw_die_ref die)
5827 reverse_die_lists (die);
5829 for (c = die->die_child; c; c = c->die_sib)
5830 reverse_all_dies (c);
5833 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5834 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5835 DIE that marks the start of the DIEs for this include file. */
5838 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5840 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5841 dw_die_ref new_unit = gen_compile_unit_die (filename);
5843 new_unit->die_sib = old_unit;
5847 /* Close an include-file CU and reopen the enclosing one. */
5850 pop_compile_unit (dw_die_ref old_unit)
5852 dw_die_ref new_unit = old_unit->die_sib;
5854 old_unit->die_sib = NULL;
5858 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5859 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5861 /* Calculate the checksum of a location expression. */
5864 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5866 CHECKSUM (loc->dw_loc_opc);
5867 CHECKSUM (loc->dw_loc_oprnd1);
5868 CHECKSUM (loc->dw_loc_oprnd2);
5871 /* Calculate the checksum of an attribute. */
5874 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5876 dw_loc_descr_ref loc;
5879 CHECKSUM (at->dw_attr);
5881 /* We don't care about differences in file numbering. */
5882 if (at->dw_attr == DW_AT_decl_file
5883 /* Or that this was compiled with a different compiler snapshot; if
5884 the output is the same, that's what matters. */
5885 || at->dw_attr == DW_AT_producer)
5888 switch (AT_class (at))
5890 case dw_val_class_const:
5891 CHECKSUM (at->dw_attr_val.v.val_int);
5893 case dw_val_class_unsigned_const:
5894 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5896 case dw_val_class_long_long:
5897 CHECKSUM (at->dw_attr_val.v.val_long_long);
5899 case dw_val_class_vec:
5900 CHECKSUM (at->dw_attr_val.v.val_vec);
5902 case dw_val_class_flag:
5903 CHECKSUM (at->dw_attr_val.v.val_flag);
5905 case dw_val_class_str:
5906 CHECKSUM_STRING (AT_string (at));
5909 case dw_val_class_addr:
5911 gcc_assert (GET_CODE (r) == SYMBOL_REF);
5912 CHECKSUM_STRING (XSTR (r, 0));
5915 case dw_val_class_offset:
5916 CHECKSUM (at->dw_attr_val.v.val_offset);
5919 case dw_val_class_loc:
5920 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5921 loc_checksum (loc, ctx);
5924 case dw_val_class_die_ref:
5925 die_checksum (AT_ref (at), ctx, mark);
5928 case dw_val_class_fde_ref:
5929 case dw_val_class_lbl_id:
5930 case dw_val_class_lbl_offset:
5938 /* Calculate the checksum of a DIE. */
5941 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5946 /* To avoid infinite recursion. */
5949 CHECKSUM (die->die_mark);
5952 die->die_mark = ++(*mark);
5954 CHECKSUM (die->die_tag);
5956 for (a = die->die_attr; a; a = a->dw_attr_next)
5957 attr_checksum (a, ctx, mark);
5959 for (c = die->die_child; c; c = c->die_sib)
5960 die_checksum (c, ctx, mark);
5964 #undef CHECKSUM_STRING
5966 /* Do the location expressions look same? */
5968 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
5970 return loc1->dw_loc_opc == loc2->dw_loc_opc
5971 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
5972 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
5975 /* Do the values look the same? */
5977 same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
5979 dw_loc_descr_ref loc1, loc2;
5982 if (v1->val_class != v2->val_class)
5985 switch (v1->val_class)
5987 case dw_val_class_const:
5988 return v1->v.val_int == v2->v.val_int;
5989 case dw_val_class_unsigned_const:
5990 return v1->v.val_unsigned == v2->v.val_unsigned;
5991 case dw_val_class_long_long:
5992 return v1->v.val_long_long.hi == v2->v.val_long_long.hi
5993 && v1->v.val_long_long.low == v2->v.val_long_long.low;
5994 case dw_val_class_vec:
5995 if (v1->v.val_vec.length != v2->v.val_vec.length
5996 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
5998 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
5999 v1->v.val_vec.length * v1->v.val_vec.elt_size))
6002 case dw_val_class_flag:
6003 return v1->v.val_flag == v2->v.val_flag;
6004 case dw_val_class_str:
6005 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6007 case dw_val_class_addr:
6008 r1 = v1->v.val_addr;
6009 r2 = v2->v.val_addr;
6010 if (GET_CODE (r1) != GET_CODE (r2))
6012 gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6013 return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6015 case dw_val_class_offset:
6016 return v1->v.val_offset == v2->v.val_offset;
6018 case dw_val_class_loc:
6019 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6021 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6022 if (!same_loc_p (loc1, loc2, mark))
6024 return !loc1 && !loc2;
6026 case dw_val_class_die_ref:
6027 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6029 case dw_val_class_fde_ref:
6030 case dw_val_class_lbl_id:
6031 case dw_val_class_lbl_offset:
6039 /* Do the attributes look the same? */
6042 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6044 if (at1->dw_attr != at2->dw_attr)
6047 /* We don't care about differences in file numbering. */
6048 if (at1->dw_attr == DW_AT_decl_file
6049 /* Or that this was compiled with a different compiler snapshot; if
6050 the output is the same, that's what matters. */
6051 || at1->dw_attr == DW_AT_producer)
6054 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6057 /* Do the dies look the same? */
6060 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6065 /* To avoid infinite recursion. */
6067 return die1->die_mark == die2->die_mark;
6068 die1->die_mark = die2->die_mark = ++(*mark);
6070 if (die1->die_tag != die2->die_tag)
6073 for (a1 = die1->die_attr, a2 = die2->die_attr;
6075 a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
6076 if (!same_attr_p (a1, a2, mark))
6081 for (c1 = die1->die_child, c2 = die2->die_child;
6083 c1 = c1->die_sib, c2 = c2->die_sib)
6084 if (!same_die_p (c1, c2, mark))
6092 /* Do the dies look the same? Wrapper around same_die_p. */
6095 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6098 int ret = same_die_p (die1, die2, &mark);
6100 unmark_all_dies (die1);
6101 unmark_all_dies (die2);
6106 /* The prefix to attach to symbols on DIEs in the current comdat debug
6108 static char *comdat_symbol_id;
6110 /* The index of the current symbol within the current comdat CU. */
6111 static unsigned int comdat_symbol_number;
6113 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6114 children, and set comdat_symbol_id accordingly. */
6117 compute_section_prefix (dw_die_ref unit_die)
6119 const char *die_name = get_AT_string (unit_die, DW_AT_name);
6120 const char *base = die_name ? lbasename (die_name) : "anonymous";
6121 char *name = alloca (strlen (base) + 64);
6124 unsigned char checksum[16];
6127 /* Compute the checksum of the DIE, then append part of it as hex digits to
6128 the name filename of the unit. */
6130 md5_init_ctx (&ctx);
6132 die_checksum (unit_die, &ctx, &mark);
6133 unmark_all_dies (unit_die);
6134 md5_finish_ctx (&ctx, checksum);
6136 sprintf (name, "%s.", base);
6137 clean_symbol_name (name);
6139 p = name + strlen (name);
6140 for (i = 0; i < 4; i++)
6142 sprintf (p, "%.2x", checksum[i]);
6146 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
6147 comdat_symbol_number = 0;
6150 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
6153 is_type_die (dw_die_ref die)
6155 switch (die->die_tag)
6157 case DW_TAG_array_type:
6158 case DW_TAG_class_type:
6159 case DW_TAG_enumeration_type:
6160 case DW_TAG_pointer_type:
6161 case DW_TAG_reference_type:
6162 case DW_TAG_string_type:
6163 case DW_TAG_structure_type:
6164 case DW_TAG_subroutine_type:
6165 case DW_TAG_union_type:
6166 case DW_TAG_ptr_to_member_type:
6167 case DW_TAG_set_type:
6168 case DW_TAG_subrange_type:
6169 case DW_TAG_base_type:
6170 case DW_TAG_const_type:
6171 case DW_TAG_file_type:
6172 case DW_TAG_packed_type:
6173 case DW_TAG_volatile_type:
6174 case DW_TAG_typedef:
6181 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6182 Basically, we want to choose the bits that are likely to be shared between
6183 compilations (types) and leave out the bits that are specific to individual
6184 compilations (functions). */
6187 is_comdat_die (dw_die_ref c)
6189 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6190 we do for stabs. The advantage is a greater likelihood of sharing between
6191 objects that don't include headers in the same order (and therefore would
6192 put the base types in a different comdat). jason 8/28/00 */
6194 if (c->die_tag == DW_TAG_base_type)
6197 if (c->die_tag == DW_TAG_pointer_type
6198 || c->die_tag == DW_TAG_reference_type
6199 || c->die_tag == DW_TAG_const_type
6200 || c->die_tag == DW_TAG_volatile_type)
6202 dw_die_ref t = get_AT_ref (c, DW_AT_type);
6204 return t ? is_comdat_die (t) : 0;
6207 return is_type_die (c);
6210 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6211 compilation unit. */
6214 is_symbol_die (dw_die_ref c)
6216 return (is_type_die (c)
6217 || (get_AT (c, DW_AT_declaration)
6218 && !get_AT (c, DW_AT_specification)));
6222 gen_internal_sym (const char *prefix)
6226 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6227 return xstrdup (buf);
6230 /* Assign symbols to all worthy DIEs under DIE. */
6233 assign_symbol_names (dw_die_ref die)
6237 if (is_symbol_die (die))
6239 if (comdat_symbol_id)
6241 char *p = alloca (strlen (comdat_symbol_id) + 64);
6243 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6244 comdat_symbol_id, comdat_symbol_number++);
6245 die->die_symbol = xstrdup (p);
6248 die->die_symbol = gen_internal_sym ("LDIE");
6251 for (c = die->die_child; c != NULL; c = c->die_sib)
6252 assign_symbol_names (c);
6255 struct cu_hash_table_entry
6258 unsigned min_comdat_num, max_comdat_num;
6259 struct cu_hash_table_entry *next;
6262 /* Routines to manipulate hash table of CUs. */
6264 htab_cu_hash (const void *of)
6266 const struct cu_hash_table_entry *entry = of;
6268 return htab_hash_string (entry->cu->die_symbol);
6272 htab_cu_eq (const void *of1, const void *of2)
6274 const struct cu_hash_table_entry *entry1 = of1;
6275 const struct die_struct *entry2 = of2;
6277 return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6281 htab_cu_del (void *what)
6283 struct cu_hash_table_entry *next, *entry = what;
6293 /* Check whether we have already seen this CU and set up SYM_NUM
6296 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6298 struct cu_hash_table_entry dummy;
6299 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6301 dummy.max_comdat_num = 0;
6303 slot = (struct cu_hash_table_entry **)
6304 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6308 for (; entry; last = entry, entry = entry->next)
6310 if (same_die_p_wrap (cu, entry->cu))
6316 *sym_num = entry->min_comdat_num;
6320 entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
6322 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6323 entry->next = *slot;
6329 /* Record SYM_NUM to record of CU in HTABLE. */
6331 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6333 struct cu_hash_table_entry **slot, *entry;
6335 slot = (struct cu_hash_table_entry **)
6336 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6340 entry->max_comdat_num = sym_num;
6343 /* Traverse the DIE (which is always comp_unit_die), and set up
6344 additional compilation units for each of the include files we see
6345 bracketed by BINCL/EINCL. */
6348 break_out_includes (dw_die_ref die)
6351 dw_die_ref unit = NULL;
6352 limbo_die_node *node, **pnode;
6353 htab_t cu_hash_table;
6355 for (ptr = &(die->die_child); *ptr;)
6357 dw_die_ref c = *ptr;
6359 if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6360 || (unit && is_comdat_die (c)))
6362 /* This DIE is for a secondary CU; remove it from the main one. */
6365 if (c->die_tag == DW_TAG_GNU_BINCL)
6367 unit = push_new_compile_unit (unit, c);
6370 else if (c->die_tag == DW_TAG_GNU_EINCL)
6372 unit = pop_compile_unit (unit);
6376 add_child_die (unit, c);
6380 /* Leave this DIE in the main CU. */
6381 ptr = &(c->die_sib);
6387 /* We can only use this in debugging, since the frontend doesn't check
6388 to make sure that we leave every include file we enter. */
6392 assign_symbol_names (die);
6393 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6394 for (node = limbo_die_list, pnode = &limbo_die_list;
6400 compute_section_prefix (node->die);
6401 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6402 &comdat_symbol_number);
6403 assign_symbol_names (node->die);
6405 *pnode = node->next;
6408 pnode = &node->next;
6409 record_comdat_symbol_number (node->die, cu_hash_table,
6410 comdat_symbol_number);
6413 htab_delete (cu_hash_table);
6416 /* Traverse the DIE and add a sibling attribute if it may have the
6417 effect of speeding up access to siblings. To save some space,
6418 avoid generating sibling attributes for DIE's without children. */
6421 add_sibling_attributes (dw_die_ref die)
6425 if (die->die_tag != DW_TAG_compile_unit
6426 && die->die_sib && die->die_child != NULL)
6427 /* Add the sibling link to the front of the attribute list. */
6428 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6430 for (c = die->die_child; c != NULL; c = c->die_sib)
6431 add_sibling_attributes (c);
6434 /* Output all location lists for the DIE and its children. */
6437 output_location_lists (dw_die_ref die)
6442 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6443 if (AT_class (d_attr) == dw_val_class_loc_list)
6444 output_loc_list (AT_loc_list (d_attr));
6446 for (c = die->die_child; c != NULL; c = c->die_sib)
6447 output_location_lists (c);
6451 /* The format of each DIE (and its attribute value pairs) is encoded in an
6452 abbreviation table. This routine builds the abbreviation table and assigns
6453 a unique abbreviation id for each abbreviation entry. The children of each
6454 die are visited recursively. */
6457 build_abbrev_table (dw_die_ref die)
6459 unsigned long abbrev_id;
6460 unsigned int n_alloc;
6462 dw_attr_ref d_attr, a_attr;
6464 /* Scan the DIE references, and mark as external any that refer to
6465 DIEs from other CUs (i.e. those which are not marked). */
6466 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6467 if (AT_class (d_attr) == dw_val_class_die_ref
6468 && AT_ref (d_attr)->die_mark == 0)
6470 gcc_assert (AT_ref (d_attr)->die_symbol);
6472 set_AT_ref_external (d_attr, 1);
6475 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6477 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6479 if (abbrev->die_tag == die->die_tag)
6481 if ((abbrev->die_child != NULL) == (die->die_child != NULL))
6483 a_attr = abbrev->die_attr;
6484 d_attr = die->die_attr;
6486 while (a_attr != NULL && d_attr != NULL)
6488 if ((a_attr->dw_attr != d_attr->dw_attr)
6489 || (value_format (a_attr) != value_format (d_attr)))
6492 a_attr = a_attr->dw_attr_next;
6493 d_attr = d_attr->dw_attr_next;
6496 if (a_attr == NULL && d_attr == NULL)
6502 if (abbrev_id >= abbrev_die_table_in_use)
6504 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6506 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6507 abbrev_die_table = ggc_realloc (abbrev_die_table,
6508 sizeof (dw_die_ref) * n_alloc);
6510 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6511 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6512 abbrev_die_table_allocated = n_alloc;
6515 ++abbrev_die_table_in_use;
6516 abbrev_die_table[abbrev_id] = die;
6519 die->die_abbrev = abbrev_id;
6520 for (c = die->die_child; c != NULL; c = c->die_sib)
6521 build_abbrev_table (c);
6524 /* Return the power-of-two number of bytes necessary to represent VALUE. */
6527 constant_size (long unsigned int value)
6534 log = floor_log2 (value);
6537 log = 1 << (floor_log2 (log) + 1);
6542 /* Return the size of a DIE as it is represented in the
6543 .debug_info section. */
6545 static unsigned long
6546 size_of_die (dw_die_ref die)
6548 unsigned long size = 0;
6551 size += size_of_uleb128 (die->die_abbrev);
6552 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6554 switch (AT_class (a))
6556 case dw_val_class_addr:
6557 size += DWARF2_ADDR_SIZE;
6559 case dw_val_class_offset:
6560 size += DWARF_OFFSET_SIZE;
6562 case dw_val_class_loc:
6564 unsigned long lsize = size_of_locs (AT_loc (a));
6567 size += constant_size (lsize);
6571 case dw_val_class_loc_list:
6572 size += DWARF_OFFSET_SIZE;
6574 case dw_val_class_range_list:
6575 size += DWARF_OFFSET_SIZE;
6577 case dw_val_class_const:
6578 size += size_of_sleb128 (AT_int (a));
6580 case dw_val_class_unsigned_const:
6581 size += constant_size (AT_unsigned (a));
6583 case dw_val_class_long_long:
6584 size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6586 case dw_val_class_vec:
6587 size += 1 + (a->dw_attr_val.v.val_vec.length
6588 * a->dw_attr_val.v.val_vec.elt_size); /* block */
6590 case dw_val_class_flag:
6593 case dw_val_class_die_ref:
6594 if (AT_ref_external (a))
6595 size += DWARF2_ADDR_SIZE;
6597 size += DWARF_OFFSET_SIZE;
6599 case dw_val_class_fde_ref:
6600 size += DWARF_OFFSET_SIZE;
6602 case dw_val_class_lbl_id:
6603 size += DWARF2_ADDR_SIZE;
6605 case dw_val_class_lbl_offset:
6606 size += DWARF_OFFSET_SIZE;
6608 case dw_val_class_str:
6609 if (AT_string_form (a) == DW_FORM_strp)
6610 size += DWARF_OFFSET_SIZE;
6612 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6622 /* Size the debugging information associated with a given DIE. Visits the
6623 DIE's children recursively. Updates the global variable next_die_offset, on
6624 each time through. Uses the current value of next_die_offset to update the
6625 die_offset field in each DIE. */
6628 calc_die_sizes (dw_die_ref die)
6632 die->die_offset = next_die_offset;
6633 next_die_offset += size_of_die (die);
6635 for (c = die->die_child; c != NULL; c = c->die_sib)
6638 if (die->die_child != NULL)
6639 /* Count the null byte used to terminate sibling lists. */
6640 next_die_offset += 1;
6643 /* Set the marks for a die and its children. We do this so
6644 that we know whether or not a reference needs to use FORM_ref_addr; only
6645 DIEs in the same CU will be marked. We used to clear out the offset
6646 and use that as the flag, but ran into ordering problems. */
6649 mark_dies (dw_die_ref die)
6653 gcc_assert (!die->die_mark);
6656 for (c = die->die_child; c; c = c->die_sib)
6660 /* Clear the marks for a die and its children. */
6663 unmark_dies (dw_die_ref die)
6667 gcc_assert (die->die_mark);
6670 for (c = die->die_child; c; c = c->die_sib)
6674 /* Clear the marks for a die, its children and referred dies. */
6677 unmark_all_dies (dw_die_ref die)
6686 for (c = die->die_child; c; c = c->die_sib)
6687 unmark_all_dies (c);
6689 for (a = die->die_attr; a; a = a->dw_attr_next)
6690 if (AT_class (a) == dw_val_class_die_ref)
6691 unmark_all_dies (AT_ref (a));
6694 /* Return the size of the .debug_pubnames table generated for the
6695 compilation unit. */
6697 static unsigned long
6698 size_of_pubnames (void)
6703 size = DWARF_PUBNAMES_HEADER_SIZE;
6704 for (i = 0; i < pubname_table_in_use; i++)
6706 pubname_ref p = &pubname_table[i];
6707 size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6710 size += DWARF_OFFSET_SIZE;
6714 /* Return the size of the information in the .debug_aranges section. */
6716 static unsigned long
6717 size_of_aranges (void)
6721 size = DWARF_ARANGES_HEADER_SIZE;
6723 /* Count the address/length pair for this compilation unit. */
6724 size += 2 * DWARF2_ADDR_SIZE;
6725 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6727 /* Count the two zero words used to terminated the address range table. */
6728 size += 2 * DWARF2_ADDR_SIZE;
6732 /* Select the encoding of an attribute value. */
6734 static enum dwarf_form
6735 value_format (dw_attr_ref a)
6737 switch (a->dw_attr_val.val_class)
6739 case dw_val_class_addr:
6740 return DW_FORM_addr;
6741 case dw_val_class_range_list:
6742 case dw_val_class_offset:
6743 switch (DWARF_OFFSET_SIZE)
6746 return DW_FORM_data4;
6748 return DW_FORM_data8;
6752 case dw_val_class_loc_list:
6753 /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6754 .debug_loc section */
6755 return DW_FORM_data4;
6756 case dw_val_class_loc:
6757 switch (constant_size (size_of_locs (AT_loc (a))))
6760 return DW_FORM_block1;
6762 return DW_FORM_block2;
6766 case dw_val_class_const:
6767 return DW_FORM_sdata;
6768 case dw_val_class_unsigned_const:
6769 switch (constant_size (AT_unsigned (a)))
6772 return DW_FORM_data1;
6774 return DW_FORM_data2;
6776 return DW_FORM_data4;
6778 return DW_FORM_data8;
6782 case dw_val_class_long_long:
6783 return DW_FORM_block1;
6784 case dw_val_class_vec:
6785 return DW_FORM_block1;
6786 case dw_val_class_flag:
6787 return DW_FORM_flag;
6788 case dw_val_class_die_ref:
6789 if (AT_ref_external (a))
6790 return DW_FORM_ref_addr;
6793 case dw_val_class_fde_ref:
6794 return DW_FORM_data;
6795 case dw_val_class_lbl_id:
6796 return DW_FORM_addr;
6797 case dw_val_class_lbl_offset:
6798 return DW_FORM_data;
6799 case dw_val_class_str:
6800 return AT_string_form (a);
6807 /* Output the encoding of an attribute value. */
6810 output_value_format (dw_attr_ref a)
6812 enum dwarf_form form = value_format (a);
6814 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6817 /* Output the .debug_abbrev section which defines the DIE abbreviation
6821 output_abbrev_section (void)
6823 unsigned long abbrev_id;
6827 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6829 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6831 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6832 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6833 dwarf_tag_name (abbrev->die_tag));
6835 if (abbrev->die_child != NULL)
6836 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6838 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6840 for (a_attr = abbrev->die_attr; a_attr != NULL;
6841 a_attr = a_attr->dw_attr_next)
6843 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6844 dwarf_attr_name (a_attr->dw_attr));
6845 output_value_format (a_attr);
6848 dw2_asm_output_data (1, 0, NULL);
6849 dw2_asm_output_data (1, 0, NULL);
6852 /* Terminate the table. */
6853 dw2_asm_output_data (1, 0, NULL);
6856 /* Output a symbol we can use to refer to this DIE from another CU. */
6859 output_die_symbol (dw_die_ref die)
6861 char *sym = die->die_symbol;
6866 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6867 /* We make these global, not weak; if the target doesn't support
6868 .linkonce, it doesn't support combining the sections, so debugging
6870 targetm.asm_out.globalize_label (asm_out_file, sym);
6872 ASM_OUTPUT_LABEL (asm_out_file, sym);
6875 /* Return a new location list, given the begin and end range, and the
6876 expression. gensym tells us whether to generate a new internal symbol for
6877 this location list node, which is done for the head of the list only. */
6879 static inline dw_loc_list_ref
6880 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6881 const char *section, unsigned int gensym)
6883 dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6885 retlist->begin = begin;
6887 retlist->expr = expr;
6888 retlist->section = section;
6890 retlist->ll_symbol = gen_internal_sym ("LLST");
6895 /* Add a location description expression to a location list. */
6898 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6899 const char *begin, const char *end,
6900 const char *section)
6904 /* Find the end of the chain. */
6905 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6908 /* Add a new location list node to the list. */
6909 *d = new_loc_list (descr, begin, end, section, 0);
6913 dwarf2out_switch_text_section (void)
6919 fde = &fde_table[fde_table_in_use - 1];
6920 fde->dw_fde_switched_sections = true;
6921 fde->dw_fde_hot_section_label = cfun->hot_section_label;
6922 fde->dw_fde_hot_section_end_label = cfun->hot_section_end_label;
6923 fde->dw_fde_unlikely_section_label = cfun->cold_section_label;
6924 fde->dw_fde_unlikely_section_end_label = cfun->cold_section_end_label;
6925 have_switched_text_section = true;
6928 /* Output the location list given to us. */
6931 output_loc_list (dw_loc_list_ref list_head)
6933 dw_loc_list_ref curr = list_head;
6935 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
6937 /* Walk the location list, and output each range + expression. */
6938 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
6941 if (!separate_line_info_table_in_use && !have_switched_text_section)
6943 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
6944 "Location list begin address (%s)",
6945 list_head->ll_symbol);
6946 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
6947 "Location list end address (%s)",
6948 list_head->ll_symbol);
6952 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
6953 "Location list begin address (%s)",
6954 list_head->ll_symbol);
6955 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
6956 "Location list end address (%s)",
6957 list_head->ll_symbol);
6959 size = size_of_locs (curr->expr);
6961 /* Output the block length for this list of location operations. */
6962 gcc_assert (size <= 0xffff);
6963 dw2_asm_output_data (2, size, "%s", "Location expression size");
6965 output_loc_sequence (curr->expr);
6968 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6969 "Location list terminator begin (%s)",
6970 list_head->ll_symbol);
6971 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6972 "Location list terminator end (%s)",
6973 list_head->ll_symbol);
6976 /* Output the DIE and its attributes. Called recursively to generate
6977 the definitions of each child DIE. */
6980 output_die (dw_die_ref die)
6986 /* If someone in another CU might refer to us, set up a symbol for
6987 them to point to. */
6988 if (die->die_symbol)
6989 output_die_symbol (die);
6991 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
6992 die->die_offset, dwarf_tag_name (die->die_tag));
6994 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6996 const char *name = dwarf_attr_name (a->dw_attr);
6998 switch (AT_class (a))
7000 case dw_val_class_addr:
7001 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
7004 case dw_val_class_offset:
7005 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
7009 case dw_val_class_range_list:
7011 char *p = strchr (ranges_section_label, '\0');
7013 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
7014 a->dw_attr_val.v.val_offset);
7015 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
7021 case dw_val_class_loc:
7022 size = size_of_locs (AT_loc (a));
7024 /* Output the block length for this list of location operations. */
7025 dw2_asm_output_data (constant_size (size), size, "%s", name);
7027 output_loc_sequence (AT_loc (a));
7030 case dw_val_class_const:
7031 /* ??? It would be slightly more efficient to use a scheme like is
7032 used for unsigned constants below, but gdb 4.x does not sign
7033 extend. Gdb 5.x does sign extend. */
7034 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
7037 case dw_val_class_unsigned_const:
7038 dw2_asm_output_data (constant_size (AT_unsigned (a)),
7039 AT_unsigned (a), "%s", name);
7042 case dw_val_class_long_long:
7044 unsigned HOST_WIDE_INT first, second;
7046 dw2_asm_output_data (1,
7047 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7050 if (WORDS_BIG_ENDIAN)
7052 first = a->dw_attr_val.v.val_long_long.hi;
7053 second = a->dw_attr_val.v.val_long_long.low;
7057 first = a->dw_attr_val.v.val_long_long.low;
7058 second = a->dw_attr_val.v.val_long_long.hi;
7061 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7062 first, "long long constant");
7063 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7068 case dw_val_class_vec:
7070 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
7071 unsigned int len = a->dw_attr_val.v.val_vec.length;
7075 dw2_asm_output_data (1, len * elt_size, "%s", name);
7076 if (elt_size > sizeof (HOST_WIDE_INT))
7081 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
7084 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
7085 "fp or vector constant word %u", i);
7089 case dw_val_class_flag:
7090 dw2_asm_output_data (1, AT_flag (a), "%s", name);
7093 case dw_val_class_loc_list:
7095 char *sym = AT_loc_list (a)->ll_symbol;
7098 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
7102 case dw_val_class_die_ref:
7103 if (AT_ref_external (a))
7105 char *sym = AT_ref (a)->die_symbol;
7108 dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name);
7112 gcc_assert (AT_ref (a)->die_offset);
7113 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
7118 case dw_val_class_fde_ref:
7122 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
7123 a->dw_attr_val.v.val_fde_index * 2);
7124 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name);
7128 case dw_val_class_lbl_id:
7129 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
7132 case dw_val_class_lbl_offset:
7133 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), "%s", name);
7136 case dw_val_class_str:
7137 if (AT_string_form (a) == DW_FORM_strp)
7138 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
7139 a->dw_attr_val.v.val_str->label,
7140 "%s: \"%s\"", name, AT_string (a));
7142 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
7150 for (c = die->die_child; c != NULL; c = c->die_sib)
7153 /* Add null byte to terminate sibling list. */
7154 if (die->die_child != NULL)
7155 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
7159 /* Output the compilation unit that appears at the beginning of the
7160 .debug_info section, and precedes the DIE descriptions. */
7163 output_compilation_unit_header (void)
7165 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7166 dw2_asm_output_data (4, 0xffffffff,
7167 "Initial length escape value indicating 64-bit DWARF extension");
7168 dw2_asm_output_data (DWARF_OFFSET_SIZE,
7169 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
7170 "Length of Compilation Unit Info");
7171 dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
7172 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
7173 "Offset Into Abbrev. Section");
7174 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
7177 /* Output the compilation unit DIE and its children. */
7180 output_comp_unit (dw_die_ref die, int output_if_empty)
7182 const char *secname;
7185 /* Unless we are outputting main CU, we may throw away empty ones. */
7186 if (!output_if_empty && die->die_child == NULL)
7189 /* Even if there are no children of this DIE, we must output the information
7190 about the compilation unit. Otherwise, on an empty translation unit, we
7191 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
7192 will then complain when examining the file. First mark all the DIEs in
7193 this CU so we know which get local refs. */
7196 build_abbrev_table (die);
7198 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
7199 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7200 calc_die_sizes (die);
7202 oldsym = die->die_symbol;
7205 tmp = alloca (strlen (oldsym) + 24);
7207 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
7209 die->die_symbol = NULL;
7210 switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
7213 switch_to_section (debug_info_section);
7215 /* Output debugging information. */
7216 output_compilation_unit_header ();
7219 /* Leave the marks on the main CU, so we can check them in
7224 die->die_symbol = oldsym;
7228 /* The DWARF2 pubname for a nested thingy looks like "A::f". The
7229 output of lang_hooks.decl_printable_name for C++ looks like
7230 "A::f(int)". Let's drop the argument list, and maybe the scope. */
7233 dwarf2_name (tree decl, int scope)
7235 return lang_hooks.decl_printable_name (decl, scope ? 1 : 0);
7238 /* Add a new entry to .debug_pubnames if appropriate. */
7241 add_pubname (tree decl, dw_die_ref die)
7245 if (! TREE_PUBLIC (decl))
7248 if (pubname_table_in_use == pubname_table_allocated)
7250 pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
7252 = ggc_realloc (pubname_table,
7253 (pubname_table_allocated * sizeof (pubname_entry)));
7254 memset (pubname_table + pubname_table_in_use, 0,
7255 PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
7258 p = &pubname_table[pubname_table_in_use++];
7260 p->name = xstrdup (dwarf2_name (decl, 1));
7263 /* Output the public names table used to speed up access to externally
7264 visible names. For now, only generate entries for externally
7265 visible procedures. */
7268 output_pubnames (void)
7271 unsigned long pubnames_length = size_of_pubnames ();
7273 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7274 dw2_asm_output_data (4, 0xffffffff,
7275 "Initial length escape value indicating 64-bit DWARF extension");
7276 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7277 "Length of Public Names Info");
7278 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7279 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7280 "Offset of Compilation Unit Info");
7281 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
7282 "Compilation Unit Length");
7284 for (i = 0; i < pubname_table_in_use; i++)
7286 pubname_ref pub = &pubname_table[i];
7288 /* We shouldn't see pubnames for DIEs outside of the main CU. */
7289 gcc_assert (pub->die->die_mark);
7291 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7294 dw2_asm_output_nstring (pub->name, -1, "external name");
7297 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7300 /* Add a new entry to .debug_aranges if appropriate. */
7303 add_arange (tree decl, dw_die_ref die)
7305 if (! DECL_SECTION_NAME (decl))
7308 if (arange_table_in_use == arange_table_allocated)
7310 arange_table_allocated += ARANGE_TABLE_INCREMENT;
7311 arange_table = ggc_realloc (arange_table,
7312 (arange_table_allocated
7313 * sizeof (dw_die_ref)));
7314 memset (arange_table + arange_table_in_use, 0,
7315 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7318 arange_table[arange_table_in_use++] = die;
7321 /* Output the information that goes into the .debug_aranges table.
7322 Namely, define the beginning and ending address range of the
7323 text section generated for this compilation unit. */
7326 output_aranges (void)
7329 unsigned long aranges_length = size_of_aranges ();
7331 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7332 dw2_asm_output_data (4, 0xffffffff,
7333 "Initial length escape value indicating 64-bit DWARF extension");
7334 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7335 "Length of Address Ranges Info");
7336 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7337 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7338 "Offset of Compilation Unit Info");
7339 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7340 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7342 /* We need to align to twice the pointer size here. */
7343 if (DWARF_ARANGES_PAD_SIZE)
7345 /* Pad using a 2 byte words so that padding is correct for any
7347 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7348 2 * DWARF2_ADDR_SIZE);
7349 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7350 dw2_asm_output_data (2, 0, NULL);
7353 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7354 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7355 text_section_label, "Length");
7356 if (flag_reorder_blocks_and_partition)
7358 dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
7360 dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
7361 cold_text_section_label, "Length");
7364 for (i = 0; i < arange_table_in_use; i++)
7366 dw_die_ref die = arange_table[i];
7368 /* We shouldn't see aranges for DIEs outside of the main CU. */
7369 gcc_assert (die->die_mark);
7371 if (die->die_tag == DW_TAG_subprogram)
7373 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7375 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7376 get_AT_low_pc (die), "Length");
7380 /* A static variable; extract the symbol from DW_AT_location.
7381 Note that this code isn't currently hit, as we only emit
7382 aranges for functions (jason 9/23/99). */
7383 dw_attr_ref a = get_AT (die, DW_AT_location);
7384 dw_loc_descr_ref loc;
7386 gcc_assert (a && AT_class (a) == dw_val_class_loc);
7389 gcc_assert (loc->dw_loc_opc == DW_OP_addr);
7391 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7392 loc->dw_loc_oprnd1.v.val_addr, "Address");
7393 dw2_asm_output_data (DWARF2_ADDR_SIZE,
7394 get_AT_unsigned (die, DW_AT_byte_size),
7399 /* Output the terminator words. */
7400 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7401 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7404 /* Add a new entry to .debug_ranges. Return the offset at which it
7408 add_ranges (tree block)
7410 unsigned int in_use = ranges_table_in_use;
7412 if (in_use == ranges_table_allocated)
7414 ranges_table_allocated += RANGES_TABLE_INCREMENT;
7416 = ggc_realloc (ranges_table, (ranges_table_allocated
7417 * sizeof (struct dw_ranges_struct)));
7418 memset (ranges_table + ranges_table_in_use, 0,
7419 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7422 ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7423 ranges_table_in_use = in_use + 1;
7425 return in_use * 2 * DWARF2_ADDR_SIZE;
7429 output_ranges (void)
7432 static const char *const start_fmt = "Offset 0x%x";
7433 const char *fmt = start_fmt;
7435 for (i = 0; i < ranges_table_in_use; i++)
7437 int block_num = ranges_table[i].block_num;
7441 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7442 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7444 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7445 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7447 /* If all code is in the text section, then the compilation
7448 unit base address defaults to DW_AT_low_pc, which is the
7449 base of the text section. */
7450 if (!separate_line_info_table_in_use && !have_switched_text_section)
7452 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7454 fmt, i * 2 * DWARF2_ADDR_SIZE);
7455 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7456 text_section_label, NULL);
7459 /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7460 compilation unit base address to zero, which allows us to
7461 use absolute addresses, and not worry about whether the
7462 target supports cross-section arithmetic. */
7465 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7466 fmt, i * 2 * DWARF2_ADDR_SIZE);
7467 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7474 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7475 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7481 /* Data structure containing information about input files. */
7484 char *path; /* Complete file name. */
7485 char *fname; /* File name part. */
7486 int length; /* Length of entire string. */
7487 int file_idx; /* Index in input file table. */
7488 int dir_idx; /* Index in directory table. */
7491 /* Data structure containing information about directories with source
7495 char *path; /* Path including directory name. */
7496 int length; /* Path length. */
7497 int prefix; /* Index of directory entry which is a prefix. */
7498 int count; /* Number of files in this directory. */
7499 int dir_idx; /* Index of directory used as base. */
7500 int used; /* Used in the end? */
7503 /* Callback function for file_info comparison. We sort by looking at
7504 the directories in the path. */
7507 file_info_cmp (const void *p1, const void *p2)
7509 const struct file_info *s1 = p1;
7510 const struct file_info *s2 = p2;
7514 /* Take care of file names without directories. We need to make sure that
7515 we return consistent values to qsort since some will get confused if
7516 we return the same value when identical operands are passed in opposite
7517 orders. So if neither has a directory, return 0 and otherwise return
7518 1 or -1 depending on which one has the directory. */
7519 if ((s1->path == s1->fname || s2->path == s2->fname))
7520 return (s2->path == s2->fname) - (s1->path == s1->fname);
7522 cp1 = (unsigned char *) s1->path;
7523 cp2 = (unsigned char *) s2->path;
7529 /* Reached the end of the first path? If so, handle like above. */
7530 if ((cp1 == (unsigned char *) s1->fname)
7531 || (cp2 == (unsigned char *) s2->fname))
7532 return ((cp2 == (unsigned char *) s2->fname)
7533 - (cp1 == (unsigned char *) s1->fname));
7535 /* Character of current path component the same? */
7536 else if (*cp1 != *cp2)
7541 /* Output the directory table and the file name table. We try to minimize
7542 the total amount of memory needed. A heuristic is used to avoid large
7543 slowdowns with many input files. */
7546 output_file_names (void)
7548 struct file_info *files;
7549 struct dir_info *dirs;
7558 /* Handle the case where file_table is empty. */
7559 if (VARRAY_ACTIVE_SIZE (file_table) <= 1)
7561 dw2_asm_output_data (1, 0, "End directory table");
7562 dw2_asm_output_data (1, 0, "End file name table");
7566 /* Allocate the various arrays we need. */
7567 files = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct file_info));
7568 dirs = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct dir_info));
7570 /* Sort the file names. */
7571 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7575 /* Skip all leading "./". */
7576 f = VARRAY_CHAR_PTR (file_table, i);
7577 while (f[0] == '.' && f[1] == '/')
7580 /* Create a new array entry. */
7582 files[i].length = strlen (f);
7583 files[i].file_idx = i;
7585 /* Search for the file name part. */
7586 f = strrchr (f, '/');
7587 files[i].fname = f == NULL ? files[i].path : f + 1;
7590 qsort (files + 1, VARRAY_ACTIVE_SIZE (file_table) - 1,
7591 sizeof (files[0]), file_info_cmp);
7593 /* Find all the different directories used. */
7594 dirs[0].path = files[1].path;
7595 dirs[0].length = files[1].fname - files[1].path;
7596 dirs[0].prefix = -1;
7598 dirs[0].dir_idx = 0;
7600 files[1].dir_idx = 0;
7603 for (i = 2; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7604 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7605 && memcmp (dirs[ndirs - 1].path, files[i].path,
7606 dirs[ndirs - 1].length) == 0)
7608 /* Same directory as last entry. */
7609 files[i].dir_idx = ndirs - 1;
7610 ++dirs[ndirs - 1].count;
7616 /* This is a new directory. */
7617 dirs[ndirs].path = files[i].path;
7618 dirs[ndirs].length = files[i].fname - files[i].path;
7619 dirs[ndirs].count = 1;
7620 dirs[ndirs].dir_idx = ndirs;
7621 dirs[ndirs].used = 0;
7622 files[i].dir_idx = ndirs;
7624 /* Search for a prefix. */
7625 dirs[ndirs].prefix = -1;
7626 for (j = 0; j < ndirs; j++)
7627 if (dirs[j].length < dirs[ndirs].length
7628 && dirs[j].length > 1
7629 && (dirs[ndirs].prefix == -1
7630 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7631 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7632 dirs[ndirs].prefix = j;
7637 /* Now to the actual work. We have to find a subset of the directories which
7638 allow expressing the file name using references to the directory table
7639 with the least amount of characters. We do not do an exhaustive search
7640 where we would have to check out every combination of every single
7641 possible prefix. Instead we use a heuristic which provides nearly optimal
7642 results in most cases and never is much off. */
7643 saved = alloca (ndirs * sizeof (int));
7644 savehere = alloca (ndirs * sizeof (int));
7646 memset (saved, '\0', ndirs * sizeof (saved[0]));
7647 for (i = 0; i < ndirs; i++)
7652 /* We can always save some space for the current directory. But this
7653 does not mean it will be enough to justify adding the directory. */
7654 savehere[i] = dirs[i].length;
7655 total = (savehere[i] - saved[i]) * dirs[i].count;
7657 for (j = i + 1; j < ndirs; j++)
7660 if (saved[j] < dirs[i].length)
7662 /* Determine whether the dirs[i] path is a prefix of the
7667 while (k != -1 && k != (int) i)
7672 /* Yes it is. We can possibly safe some memory but
7673 writing the filenames in dirs[j] relative to
7675 savehere[j] = dirs[i].length;
7676 total += (savehere[j] - saved[j]) * dirs[j].count;
7681 /* Check whether we can safe enough to justify adding the dirs[i]
7683 if (total > dirs[i].length + 1)
7685 /* It's worthwhile adding. */
7686 for (j = i; j < ndirs; j++)
7687 if (savehere[j] > 0)
7689 /* Remember how much we saved for this directory so far. */
7690 saved[j] = savehere[j];
7692 /* Remember the prefix directory. */
7693 dirs[j].dir_idx = i;
7698 /* We have to emit them in the order they appear in the file_table array
7699 since the index is used in the debug info generation. To do this
7700 efficiently we generate a back-mapping of the indices first. */
7701 backmap = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (int));
7702 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7704 backmap[files[i].file_idx] = i;
7706 /* Mark this directory as used. */
7707 dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
7710 /* That was it. We are ready to emit the information. First emit the
7711 directory name table. We have to make sure the first actually emitted
7712 directory name has index one; zero is reserved for the current working
7713 directory. Make sure we do not confuse these indices with the one for the
7714 constructed table (even though most of the time they are identical). */
7716 idx_offset = dirs[0].length > 0 ? 1 : 0;
7717 for (i = 1 - idx_offset; i < ndirs; i++)
7718 if (dirs[i].used != 0)
7720 dirs[i].used = idx++;
7721 dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7722 "Directory Entry: 0x%x", dirs[i].used);
7725 dw2_asm_output_data (1, 0, "End directory table");
7727 /* Correct the index for the current working directory entry if it
7729 if (idx_offset == 0)
7732 /* Now write all the file names. */
7733 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7735 int file_idx = backmap[i];
7736 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7738 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7739 "File Entry: 0x%lx", (unsigned long) i);
7741 /* Include directory index. */
7742 dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
7744 /* Modification time. */
7745 dw2_asm_output_data_uleb128 (0, NULL);
7747 /* File length in bytes. */
7748 dw2_asm_output_data_uleb128 (0, NULL);
7751 dw2_asm_output_data (1, 0, "End file name table");
7755 /* Output the source line number correspondence information. This
7756 information goes into the .debug_line section. */
7759 output_line_info (void)
7761 char l1[20], l2[20], p1[20], p2[20];
7762 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7763 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7766 unsigned long lt_index;
7767 unsigned long current_line;
7770 unsigned long current_file;
7771 unsigned long function;
7773 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7774 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7775 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7776 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7778 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7779 dw2_asm_output_data (4, 0xffffffff,
7780 "Initial length escape value indicating 64-bit DWARF extension");
7781 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7782 "Length of Source Line Info");
7783 ASM_OUTPUT_LABEL (asm_out_file, l1);
7785 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7786 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7787 ASM_OUTPUT_LABEL (asm_out_file, p1);
7789 /* Define the architecture-dependent minimum instruction length (in
7790 bytes). In this implementation of DWARF, this field is used for
7791 information purposes only. Since GCC generates assembly language,
7792 we have no a priori knowledge of how many instruction bytes are
7793 generated for each source line, and therefore can use only the
7794 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7795 commands. Accordingly, we fix this as `1', which is "correct
7796 enough" for all architectures, and don't let the target override. */
7797 dw2_asm_output_data (1, 1,
7798 "Minimum Instruction Length");
7800 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7801 "Default is_stmt_start flag");
7802 dw2_asm_output_data (1, DWARF_LINE_BASE,
7803 "Line Base Value (Special Opcodes)");
7804 dw2_asm_output_data (1, DWARF_LINE_RANGE,
7805 "Line Range Value (Special Opcodes)");
7806 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7807 "Special Opcode Base");
7809 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7813 case DW_LNS_advance_pc:
7814 case DW_LNS_advance_line:
7815 case DW_LNS_set_file:
7816 case DW_LNS_set_column:
7817 case DW_LNS_fixed_advance_pc:
7825 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7829 /* Write out the information about the files we use. */
7830 output_file_names ();
7831 ASM_OUTPUT_LABEL (asm_out_file, p2);
7833 /* We used to set the address register to the first location in the text
7834 section here, but that didn't accomplish anything since we already
7835 have a line note for the opening brace of the first function. */
7837 /* Generate the line number to PC correspondence table, encoded as
7838 a series of state machine operations. */
7842 if (cfun && unlikely_text_section_p (last_text_section))
7843 strcpy (prev_line_label, cfun->cold_section_label);
7845 strcpy (prev_line_label, text_section_label);
7846 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7848 dw_line_info_ref line_info = &line_info_table[lt_index];
7851 /* Disable this optimization for now; GDB wants to see two line notes
7852 at the beginning of a function so it can find the end of the
7855 /* Don't emit anything for redundant notes. Just updating the
7856 address doesn't accomplish anything, because we already assume
7857 that anything after the last address is this line. */
7858 if (line_info->dw_line_num == current_line
7859 && line_info->dw_file_num == current_file)
7863 /* Emit debug info for the address of the current line.
7865 Unfortunately, we have little choice here currently, and must always
7866 use the most general form. GCC does not know the address delta
7867 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
7868 attributes which will give an upper bound on the address range. We
7869 could perhaps use length attributes to determine when it is safe to
7870 use DW_LNS_fixed_advance_pc. */
7872 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7875 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
7876 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7877 "DW_LNS_fixed_advance_pc");
7878 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7882 /* This can handle any delta. This takes
7883 4+DWARF2_ADDR_SIZE bytes. */
7884 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7885 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7886 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7887 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7890 strcpy (prev_line_label, line_label);
7892 /* Emit debug info for the source file of the current line, if
7893 different from the previous line. */
7894 if (line_info->dw_file_num != current_file)
7896 current_file = line_info->dw_file_num;
7897 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7898 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7899 VARRAY_CHAR_PTR (file_table,
7903 /* Emit debug info for the current line number, choosing the encoding
7904 that uses the least amount of space. */
7905 if (line_info->dw_line_num != current_line)
7907 line_offset = line_info->dw_line_num - current_line;
7908 line_delta = line_offset - DWARF_LINE_BASE;
7909 current_line = line_info->dw_line_num;
7910 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7911 /* This can handle deltas from -10 to 234, using the current
7912 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
7914 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7915 "line %lu", current_line);
7918 /* This can handle any delta. This takes at least 4 bytes,
7919 depending on the value being encoded. */
7920 dw2_asm_output_data (1, DW_LNS_advance_line,
7921 "advance to line %lu", current_line);
7922 dw2_asm_output_data_sleb128 (line_offset, NULL);
7923 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7927 /* We still need to start a new row, so output a copy insn. */
7928 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7931 /* Emit debug info for the address of the end of the function. */
7934 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7935 "DW_LNS_fixed_advance_pc");
7936 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
7940 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7941 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7942 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7943 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
7946 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7947 dw2_asm_output_data_uleb128 (1, NULL);
7948 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7953 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
7955 dw_separate_line_info_ref line_info
7956 = &separate_line_info_table[lt_index];
7959 /* Don't emit anything for redundant notes. */
7960 if (line_info->dw_line_num == current_line
7961 && line_info->dw_file_num == current_file
7962 && line_info->function == function)
7966 /* Emit debug info for the address of the current line. If this is
7967 a new function, or the first line of a function, then we need
7968 to handle it differently. */
7969 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
7971 if (function != line_info->function)
7973 function = line_info->function;
7975 /* Set the address register to the first line in the function. */
7976 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7977 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7978 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7979 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7983 /* ??? See the DW_LNS_advance_pc comment above. */
7986 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7987 "DW_LNS_fixed_advance_pc");
7988 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7992 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7993 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7994 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7995 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7999 strcpy (prev_line_label, line_label);
8001 /* Emit debug info for the source file of the current line, if
8002 different from the previous line. */
8003 if (line_info->dw_file_num != current_file)
8005 current_file = line_info->dw_file_num;
8006 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8007 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
8008 VARRAY_CHAR_PTR (file_table,
8012 /* Emit debug info for the current line number, choosing the encoding
8013 that uses the least amount of space. */
8014 if (line_info->dw_line_num != current_line)
8016 line_offset = line_info->dw_line_num - current_line;
8017 line_delta = line_offset - DWARF_LINE_BASE;
8018 current_line = line_info->dw_line_num;
8019 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8020 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8021 "line %lu", current_line);
8024 dw2_asm_output_data (1, DW_LNS_advance_line,
8025 "advance to line %lu", current_line);
8026 dw2_asm_output_data_sleb128 (line_offset, NULL);
8027 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8031 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8039 /* If we're done with a function, end its sequence. */
8040 if (lt_index == separate_line_info_table_in_use
8041 || separate_line_info_table[lt_index].function != function)
8046 /* Emit debug info for the address of the end of the function. */
8047 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
8050 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8051 "DW_LNS_fixed_advance_pc");
8052 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8056 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8057 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8058 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8059 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8062 /* Output the marker for the end of this sequence. */
8063 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8064 dw2_asm_output_data_uleb128 (1, NULL);
8065 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8069 /* Output the marker for the end of the line number info. */
8070 ASM_OUTPUT_LABEL (asm_out_file, l2);
8073 /* Given a pointer to a tree node for some base type, return a pointer to
8074 a DIE that describes the given type.
8076 This routine must only be called for GCC type nodes that correspond to
8077 Dwarf base (fundamental) types. */
8080 base_type_die (tree type)
8082 dw_die_ref base_type_result;
8083 const char *type_name;
8084 enum dwarf_type encoding;
8085 tree name = TYPE_NAME (type);
8087 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
8092 if (TREE_CODE (name) == TYPE_DECL)
8093 name = DECL_NAME (name);
8095 type_name = IDENTIFIER_POINTER (name);
8098 type_name = "__unknown__";
8100 switch (TREE_CODE (type))
8103 /* Carefully distinguish the C character types, without messing
8104 up if the language is not C. Note that we check only for the names
8105 that contain spaces; other names might occur by coincidence in other
8107 if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
8108 && (TYPE_MAIN_VARIANT (type) == char_type_node
8109 || ! strcmp (type_name, "signed char")
8110 || ! strcmp (type_name, "unsigned char"))))
8112 if (TYPE_UNSIGNED (type))
8113 encoding = DW_ATE_unsigned;
8115 encoding = DW_ATE_signed;
8118 /* else fall through. */
8121 /* GNU Pascal/Ada CHAR type. Not used in C. */
8122 if (TYPE_UNSIGNED (type))
8123 encoding = DW_ATE_unsigned_char;
8125 encoding = DW_ATE_signed_char;
8129 encoding = DW_ATE_float;
8132 /* Dwarf2 doesn't know anything about complex ints, so use
8133 a user defined type for it. */
8135 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
8136 encoding = DW_ATE_complex_float;
8138 encoding = DW_ATE_lo_user;
8142 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
8143 encoding = DW_ATE_boolean;
8147 /* No other TREE_CODEs are Dwarf fundamental types. */
8151 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
8152 if (demangle_name_func)
8153 type_name = (*demangle_name_func) (type_name);
8155 add_AT_string (base_type_result, DW_AT_name, type_name);
8156 add_AT_unsigned (base_type_result, DW_AT_byte_size,
8157 int_size_in_bytes (type));
8158 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
8160 return base_type_result;
8163 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
8164 the Dwarf "root" type for the given input type. The Dwarf "root" type of
8165 a given type is generally the same as the given type, except that if the
8166 given type is a pointer or reference type, then the root type of the given
8167 type is the root type of the "basis" type for the pointer or reference
8168 type. (This definition of the "root" type is recursive.) Also, the root
8169 type of a `const' qualified type or a `volatile' qualified type is the
8170 root type of the given type without the qualifiers. */
8173 root_type (tree type)
8175 if (TREE_CODE (type) == ERROR_MARK)
8176 return error_mark_node;
8178 switch (TREE_CODE (type))
8181 return error_mark_node;
8184 case REFERENCE_TYPE:
8185 return type_main_variant (root_type (TREE_TYPE (type)));
8188 return type_main_variant (type);
8192 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
8193 given input type is a Dwarf "fundamental" type. Otherwise return null. */
8196 is_base_type (tree type)
8198 switch (TREE_CODE (type))
8212 case QUAL_UNION_TYPE:
8217 case REFERENCE_TYPE:
8230 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
8231 node, return the size in bits for the type if it is a constant, or else
8232 return the alignment for the type if the type's size is not constant, or
8233 else return BITS_PER_WORD if the type actually turns out to be an
8236 static inline unsigned HOST_WIDE_INT
8237 simple_type_size_in_bits (tree type)
8239 if (TREE_CODE (type) == ERROR_MARK)
8240 return BITS_PER_WORD;
8241 else if (TYPE_SIZE (type) == NULL_TREE)
8243 else if (host_integerp (TYPE_SIZE (type), 1))
8244 return tree_low_cst (TYPE_SIZE (type), 1);
8246 return TYPE_ALIGN (type);
8249 /* Return true if the debug information for the given type should be
8250 emitted as a subrange type. */
8253 is_subrange_type (tree type)
8255 tree subtype = TREE_TYPE (type);
8257 /* Subrange types are identified by the fact that they are integer
8258 types, and that they have a subtype which is either an integer type
8259 or an enumeral type. */
8261 if (TREE_CODE (type) != INTEGER_TYPE
8262 || subtype == NULL_TREE)
8265 if (TREE_CODE (subtype) != INTEGER_TYPE
8266 && TREE_CODE (subtype) != ENUMERAL_TYPE)
8269 if (TREE_CODE (type) == TREE_CODE (subtype)
8270 && int_size_in_bytes (type) == int_size_in_bytes (subtype)
8271 && TYPE_MIN_VALUE (type) != NULL
8272 && TYPE_MIN_VALUE (subtype) != NULL
8273 && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
8274 && TYPE_MAX_VALUE (type) != NULL
8275 && TYPE_MAX_VALUE (subtype) != NULL
8276 && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
8278 /* The type and its subtype have the same representation. If in
8279 addition the two types also have the same name, then the given
8280 type is not a subrange type, but rather a plain base type. */
8281 /* FIXME: brobecker/2004-03-22:
8282 Sizetype INTEGER_CSTs nodes are canonicalized. It should
8283 therefore be sufficient to check the TYPE_SIZE node pointers
8284 rather than checking the actual size. Unfortunately, we have
8285 found some cases, such as in the Ada "integer" type, where
8286 this is not the case. Until this problem is solved, we need to
8287 keep checking the actual size. */
8288 tree type_name = TYPE_NAME (type);
8289 tree subtype_name = TYPE_NAME (subtype);
8291 if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
8292 type_name = DECL_NAME (type_name);
8294 if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
8295 subtype_name = DECL_NAME (subtype_name);
8297 if (type_name == subtype_name)
8304 /* Given a pointer to a tree node for a subrange type, return a pointer
8305 to a DIE that describes the given type. */
8308 subrange_type_die (tree type, dw_die_ref context_die)
8310 dw_die_ref subtype_die;
8311 dw_die_ref subrange_die;
8312 tree name = TYPE_NAME (type);
8313 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
8314 tree subtype = TREE_TYPE (type);
8316 if (context_die == NULL)
8317 context_die = comp_unit_die;
8319 if (TREE_CODE (subtype) == ENUMERAL_TYPE)
8320 subtype_die = gen_enumeration_type_die (subtype, context_die);
8322 subtype_die = base_type_die (subtype);
8324 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8328 if (TREE_CODE (name) == TYPE_DECL)
8329 name = DECL_NAME (name);
8330 add_name_attribute (subrange_die, IDENTIFIER_POINTER (name));
8333 if (int_size_in_bytes (subtype) != size_in_bytes)
8335 /* The size of the subrange type and its base type do not match,
8336 so we need to generate a size attribute for the subrange type. */
8337 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8340 if (TYPE_MIN_VALUE (type) != NULL)
8341 add_bound_info (subrange_die, DW_AT_lower_bound,
8342 TYPE_MIN_VALUE (type));
8343 if (TYPE_MAX_VALUE (type) != NULL)
8344 add_bound_info (subrange_die, DW_AT_upper_bound,
8345 TYPE_MAX_VALUE (type));
8346 add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
8348 return subrange_die;
8351 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8352 entry that chains various modifiers in front of the given type. */
8355 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8356 dw_die_ref context_die)
8358 enum tree_code code = TREE_CODE (type);
8359 dw_die_ref mod_type_die = NULL;
8360 dw_die_ref sub_die = NULL;
8361 tree item_type = NULL;
8363 if (code != ERROR_MARK)
8365 tree qualified_type;
8367 /* See if we already have the appropriately qualified variant of
8370 = get_qualified_type (type,
8371 ((is_const_type ? TYPE_QUAL_CONST : 0)
8373 ? TYPE_QUAL_VOLATILE : 0)));
8375 /* If we do, then we can just use its DIE, if it exists. */
8378 mod_type_die = lookup_type_die (qualified_type);
8380 return mod_type_die;
8383 /* Handle C typedef types. */
8384 if (qualified_type && TYPE_NAME (qualified_type)
8385 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL
8386 && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type)))
8388 tree type_name = TYPE_NAME (qualified_type);
8389 tree dtype = TREE_TYPE (type_name);
8391 if (qualified_type == dtype)
8393 /* For a named type, use the typedef. */
8394 gen_type_die (qualified_type, context_die);
8395 mod_type_die = lookup_type_die (qualified_type);
8397 else if (is_const_type < TYPE_READONLY (dtype)
8398 || is_volatile_type < TYPE_VOLATILE (dtype))
8399 /* cv-unqualified version of named type. Just use the unnamed
8400 type to which it refers. */
8402 = modified_type_die (DECL_ORIGINAL_TYPE (type_name),
8403 is_const_type, is_volatile_type,
8406 /* Else cv-qualified version of named type; fall through. */
8412 else if (is_const_type)
8414 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8415 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8417 else if (is_volatile_type)
8419 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8420 sub_die = modified_type_die (type, 0, 0, context_die);
8422 else if (code == POINTER_TYPE)
8424 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8425 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8426 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8428 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8430 item_type = TREE_TYPE (type);
8432 else if (code == REFERENCE_TYPE)
8434 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8435 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8436 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8438 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8440 item_type = TREE_TYPE (type);
8442 else if (is_subrange_type (type))
8443 mod_type_die = subrange_type_die (type, context_die);
8444 else if (is_base_type (type))
8445 mod_type_die = base_type_die (type);
8448 gen_type_die (type, context_die);
8450 /* We have to get the type_main_variant here (and pass that to the
8451 `lookup_type_die' routine) because the ..._TYPE node we have
8452 might simply be a *copy* of some original type node (where the
8453 copy was created to help us keep track of typedef names) and
8454 that copy might have a different TYPE_UID from the original
8456 if (TREE_CODE (type) != VECTOR_TYPE)
8457 mod_type_die = lookup_type_die (type_main_variant (type));
8459 /* Vectors have the debugging information in the type,
8460 not the main variant. */
8461 mod_type_die = lookup_type_die (type);
8462 gcc_assert (mod_type_die);
8465 /* We want to equate the qualified type to the die below. */
8466 type = qualified_type;
8470 equate_type_number_to_die (type, mod_type_die);
8472 /* We must do this after the equate_type_number_to_die call, in case
8473 this is a recursive type. This ensures that the modified_type_die
8474 recursion will terminate even if the type is recursive. Recursive
8475 types are possible in Ada. */
8476 sub_die = modified_type_die (item_type,
8477 TYPE_READONLY (item_type),
8478 TYPE_VOLATILE (item_type),
8481 if (sub_die != NULL)
8482 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8484 return mod_type_die;
8487 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8488 an enumerated type. */
8491 type_is_enum (tree type)
8493 return TREE_CODE (type) == ENUMERAL_TYPE;
8496 /* Return the DBX register number described by a given RTL node. */
8499 dbx_reg_number (rtx rtl)
8501 unsigned regno = REGNO (rtl);
8503 gcc_assert (regno < FIRST_PSEUDO_REGISTER);
8505 #ifdef LEAF_REG_REMAP
8506 regno = LEAF_REG_REMAP (regno);
8509 return DBX_REGISTER_NUMBER (regno);
8512 /* Optionally add a DW_OP_piece term to a location description expression.
8513 DW_OP_piece is only added if the location description expression already
8514 doesn't end with DW_OP_piece. */
8517 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
8519 dw_loc_descr_ref loc;
8521 if (*list_head != NULL)
8523 /* Find the end of the chain. */
8524 for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
8527 if (loc->dw_loc_opc != DW_OP_piece)
8528 loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
8532 /* Return a location descriptor that designates a machine register or
8533 zero if there is none. */
8535 static dw_loc_descr_ref
8536 reg_loc_descriptor (rtx rtl)
8540 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8543 regs = targetm.dwarf_register_span (rtl);
8545 if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
8546 return multiple_reg_loc_descriptor (rtl, regs);
8548 return one_reg_loc_descriptor (dbx_reg_number (rtl));
8551 /* Return a location descriptor that designates a machine register for
8552 a given hard register number. */
8554 static dw_loc_descr_ref
8555 one_reg_loc_descriptor (unsigned int regno)
8558 return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8560 return new_loc_descr (DW_OP_regx, regno, 0);
8563 /* Given an RTL of a register, return a location descriptor that
8564 designates a value that spans more than one register. */
8566 static dw_loc_descr_ref
8567 multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8571 dw_loc_descr_ref loc_result = NULL;
8574 #ifdef LEAF_REG_REMAP
8575 reg = LEAF_REG_REMAP (reg);
8577 gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
8578 nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
8580 /* Simple, contiguous registers. */
8581 if (regs == NULL_RTX)
8583 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8590 t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg));
8591 add_loc_descr (&loc_result, t);
8592 add_loc_descr_op_piece (&loc_result, size);
8598 /* Now onto stupid register sets in non contiguous locations. */
8600 gcc_assert (GET_CODE (regs) == PARALLEL);
8602 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8605 for (i = 0; i < XVECLEN (regs, 0); ++i)
8609 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8610 add_loc_descr (&loc_result, t);
8611 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8612 add_loc_descr_op_piece (&loc_result, size);
8617 /* Return a location descriptor that designates a constant. */
8619 static dw_loc_descr_ref
8620 int_loc_descriptor (HOST_WIDE_INT i)
8622 enum dwarf_location_atom op;
8624 /* Pick the smallest representation of a constant, rather than just
8625 defaulting to the LEB encoding. */
8629 op = DW_OP_lit0 + i;
8632 else if (i <= 0xffff)
8634 else if (HOST_BITS_PER_WIDE_INT == 32
8644 else if (i >= -0x8000)
8646 else if (HOST_BITS_PER_WIDE_INT == 32
8647 || i >= -0x80000000)
8653 return new_loc_descr (op, i, 0);
8656 /* Return a location descriptor that designates a base+offset location. */
8658 static dw_loc_descr_ref
8659 based_loc_descr (rtx reg, HOST_WIDE_INT offset)
8663 /* We only use "frame base" when we're sure we're talking about the
8664 post-prologue local stack frame. We do this by *not* running
8665 register elimination until this point, and recognizing the special
8666 argument pointer and soft frame pointer rtx's. */
8667 if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
8669 rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
8673 if (GET_CODE (elim) == PLUS)
8675 offset += INTVAL (XEXP (elim, 1));
8676 elim = XEXP (elim, 0);
8678 gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
8679 : stack_pointer_rtx));
8680 offset += frame_pointer_cfa_offset;
8682 return new_loc_descr (DW_OP_fbreg, offset, 0);
8686 regno = dbx_reg_number (reg);
8688 return new_loc_descr (DW_OP_breg0 + regno, offset, 0);
8690 return new_loc_descr (DW_OP_bregx, regno, offset);
8693 /* Return true if this RTL expression describes a base+offset calculation. */
8696 is_based_loc (rtx rtl)
8698 return (GET_CODE (rtl) == PLUS
8699 && ((REG_P (XEXP (rtl, 0))
8700 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8701 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8704 /* The following routine converts the RTL for a variable or parameter
8705 (resident in memory) into an equivalent Dwarf representation of a
8706 mechanism for getting the address of that same variable onto the top of a
8707 hypothetical "address evaluation" stack.
8709 When creating memory location descriptors, we are effectively transforming
8710 the RTL for a memory-resident object into its Dwarf postfix expression
8711 equivalent. This routine recursively descends an RTL tree, turning
8712 it into Dwarf postfix code as it goes.
8714 MODE is the mode of the memory reference, needed to handle some
8715 autoincrement addressing modes.
8717 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
8718 location list for RTL.
8720 Return 0 if we can't represent the location. */
8722 static dw_loc_descr_ref
8723 mem_loc_descriptor (rtx rtl, enum machine_mode mode)
8725 dw_loc_descr_ref mem_loc_result = NULL;
8726 enum dwarf_location_atom op;
8728 /* Note that for a dynamically sized array, the location we will generate a
8729 description of here will be the lowest numbered location which is
8730 actually within the array. That's *not* necessarily the same as the
8731 zeroth element of the array. */
8733 rtl = targetm.delegitimize_address (rtl);
8735 switch (GET_CODE (rtl))
8740 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
8741 just fall into the SUBREG code. */
8743 /* ... fall through ... */
8746 /* The case of a subreg may arise when we have a local (register)
8747 variable or a formal (register) parameter which doesn't quite fill
8748 up an entire register. For now, just assume that it is
8749 legitimate to make the Dwarf info refer to the whole register which
8750 contains the given subreg. */
8751 rtl = XEXP (rtl, 0);
8753 /* ... fall through ... */
8756 /* Whenever a register number forms a part of the description of the
8757 method for calculating the (dynamic) address of a memory resident
8758 object, DWARF rules require the register number be referred to as
8759 a "base register". This distinction is not based in any way upon
8760 what category of register the hardware believes the given register
8761 belongs to. This is strictly DWARF terminology we're dealing with
8762 here. Note that in cases where the location of a memory-resident
8763 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8764 OP_CONST (0)) the actual DWARF location descriptor that we generate
8765 may just be OP_BASEREG (basereg). This may look deceptively like
8766 the object in question was allocated to a register (rather than in
8767 memory) so DWARF consumers need to be aware of the subtle
8768 distinction between OP_REG and OP_BASEREG. */
8769 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8770 mem_loc_result = based_loc_descr (rtl, 0);
8774 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8775 if (mem_loc_result != 0)
8776 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8780 rtl = XEXP (rtl, 1);
8782 /* ... fall through ... */
8785 /* Some ports can transform a symbol ref into a label ref, because
8786 the symbol ref is too far away and has to be dumped into a constant
8790 /* Alternatively, the symbol in the constant pool might be referenced
8791 by a different symbol. */
8792 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8795 rtx tmp = get_pool_constant_mark (rtl, &marked);
8797 if (GET_CODE (tmp) == SYMBOL_REF)
8800 if (CONSTANT_POOL_ADDRESS_P (tmp))
8801 get_pool_constant_mark (tmp, &marked);
8806 /* If all references to this pool constant were optimized away,
8807 it was not output and thus we can't represent it.
8808 FIXME: might try to use DW_OP_const_value here, though
8809 DW_OP_piece complicates it. */
8814 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8815 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8816 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8817 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
8821 /* Extract the PLUS expression nested inside and fall into
8823 rtl = XEXP (rtl, 1);
8828 /* Turn these into a PLUS expression and fall into the PLUS code
8830 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8831 GEN_INT (GET_CODE (rtl) == PRE_INC
8832 ? GET_MODE_UNIT_SIZE (mode)
8833 : -GET_MODE_UNIT_SIZE (mode)));
8835 /* ... fall through ... */
8839 if (is_based_loc (rtl))
8840 mem_loc_result = based_loc_descr (XEXP (rtl, 0),
8841 INTVAL (XEXP (rtl, 1)));
8844 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
8845 if (mem_loc_result == 0)
8848 if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8849 && INTVAL (XEXP (rtl, 1)) >= 0)
8850 add_loc_descr (&mem_loc_result,
8851 new_loc_descr (DW_OP_plus_uconst,
8852 INTVAL (XEXP (rtl, 1)), 0));
8855 add_loc_descr (&mem_loc_result,
8856 mem_loc_descriptor (XEXP (rtl, 1), mode));
8857 add_loc_descr (&mem_loc_result,
8858 new_loc_descr (DW_OP_plus, 0, 0));
8863 /* If a pseudo-reg is optimized away, it is possible for it to
8864 be replaced with a MEM containing a multiply or shift. */
8883 dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode);
8884 dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode);
8886 if (op0 == 0 || op1 == 0)
8889 mem_loc_result = op0;
8890 add_loc_descr (&mem_loc_result, op1);
8891 add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
8896 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8903 return mem_loc_result;
8906 /* Return a descriptor that describes the concatenation of two locations.
8907 This is typically a complex variable. */
8909 static dw_loc_descr_ref
8910 concat_loc_descriptor (rtx x0, rtx x1)
8912 dw_loc_descr_ref cc_loc_result = NULL;
8913 dw_loc_descr_ref x0_ref = loc_descriptor (x0);
8914 dw_loc_descr_ref x1_ref = loc_descriptor (x1);
8916 if (x0_ref == 0 || x1_ref == 0)
8919 cc_loc_result = x0_ref;
8920 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
8922 add_loc_descr (&cc_loc_result, x1_ref);
8923 add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
8925 return cc_loc_result;
8928 /* Output a proper Dwarf location descriptor for a variable or parameter
8929 which is either allocated in a register or in a memory location. For a
8930 register, we just generate an OP_REG and the register number. For a
8931 memory location we provide a Dwarf postfix expression describing how to
8932 generate the (dynamic) address of the object onto the address stack.
8934 If we don't know how to describe it, return 0. */
8936 static dw_loc_descr_ref
8937 loc_descriptor (rtx rtl)
8939 dw_loc_descr_ref loc_result = NULL;
8941 switch (GET_CODE (rtl))
8944 /* The case of a subreg may arise when we have a local (register)
8945 variable or a formal (register) parameter which doesn't quite fill
8946 up an entire register. For now, just assume that it is
8947 legitimate to make the Dwarf info refer to the whole register which
8948 contains the given subreg. */
8949 rtl = SUBREG_REG (rtl);
8951 /* ... fall through ... */
8954 loc_result = reg_loc_descriptor (rtl);
8958 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8962 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
8967 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
8969 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0));
8973 rtl = XEXP (rtl, 1);
8978 rtvec par_elems = XVEC (rtl, 0);
8979 int num_elem = GET_NUM_ELEM (par_elems);
8980 enum machine_mode mode;
8983 /* Create the first one, so we have something to add to. */
8984 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0));
8985 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
8986 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
8987 for (i = 1; i < num_elem; i++)
8989 dw_loc_descr_ref temp;
8991 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0));
8992 add_loc_descr (&loc_result, temp);
8993 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
8994 add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
9006 /* Similar, but generate the descriptor from trees instead of rtl. This comes
9007 up particularly with variable length arrays. WANT_ADDRESS is 2 if this is
9008 a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
9009 top-level invocation, and we require the address of LOC; is 0 if we require
9010 the value of LOC. */
9012 static dw_loc_descr_ref
9013 loc_descriptor_from_tree_1 (tree loc, int want_address)
9015 dw_loc_descr_ref ret, ret1;
9016 int have_address = 0;
9017 int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
9018 enum dwarf_location_atom op;
9020 /* ??? Most of the time we do not take proper care for sign/zero
9021 extending the values properly. Hopefully this won't be a real
9024 switch (TREE_CODE (loc))
9029 case PLACEHOLDER_EXPR:
9030 /* This case involves extracting fields from an object to determine the
9031 position of other fields. We don't try to encode this here. The
9032 only user of this is Ada, which encodes the needed information using
9033 the names of types. */
9039 case PREINCREMENT_EXPR:
9040 case PREDECREMENT_EXPR:
9041 case POSTINCREMENT_EXPR:
9042 case POSTDECREMENT_EXPR:
9043 /* There are no opcodes for these operations. */
9047 /* If we already want an address, there's nothing we can do. */
9051 /* Otherwise, process the argument and look for the address. */
9052 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
9055 if (DECL_THREAD_LOCAL_P (loc))
9059 /* If this is not defined, we have no way to emit the data. */
9060 if (!targetm.asm_out.output_dwarf_dtprel)
9063 /* The way DW_OP_GNU_push_tls_address is specified, we can only
9064 look up addresses of objects in the current module. */
9065 if (DECL_EXTERNAL (loc))
9068 rtl = rtl_for_decl_location (loc);
9069 if (rtl == NULL_RTX)
9074 rtl = XEXP (rtl, 0);
9075 if (! CONSTANT_P (rtl))
9078 ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
9079 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9080 ret->dw_loc_oprnd1.v.val_addr = rtl;
9082 ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
9083 add_loc_descr (&ret, ret1);
9091 if (DECL_HAS_VALUE_EXPR_P (loc))
9092 return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
9098 rtx rtl = rtl_for_decl_location (loc);
9100 if (rtl == NULL_RTX)
9102 else if (GET_CODE (rtl) == CONST_INT)
9104 HOST_WIDE_INT val = INTVAL (rtl);
9105 if (TYPE_UNSIGNED (TREE_TYPE (loc)))
9106 val &= GET_MODE_MASK (DECL_MODE (loc));
9107 ret = int_loc_descriptor (val);
9109 else if (GET_CODE (rtl) == CONST_STRING)
9111 else if (CONSTANT_P (rtl))
9113 ret = new_loc_descr (DW_OP_addr, 0, 0);
9114 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9115 ret->dw_loc_oprnd1.v.val_addr = rtl;
9119 enum machine_mode mode;
9121 /* Certain constructs can only be represented at top-level. */
9122 if (want_address == 2)
9123 return loc_descriptor (rtl);
9125 mode = GET_MODE (rtl);
9128 rtl = XEXP (rtl, 0);
9131 ret = mem_loc_descriptor (rtl, mode);
9137 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9142 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
9146 case NON_LVALUE_EXPR:
9147 case VIEW_CONVERT_EXPR:
9150 return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
9155 case ARRAY_RANGE_REF:
9158 HOST_WIDE_INT bitsize, bitpos, bytepos;
9159 enum machine_mode mode;
9162 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
9163 &unsignedp, &volatilep, false);
9168 ret = loc_descriptor_from_tree_1 (obj, 1);
9170 || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
9173 if (offset != NULL_TREE)
9175 /* Variable offset. */
9176 add_loc_descr (&ret, loc_descriptor_from_tree_1 (offset, 0));
9177 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9180 bytepos = bitpos / BITS_PER_UNIT;
9182 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
9183 else if (bytepos < 0)
9185 add_loc_descr (&ret, int_loc_descriptor (bytepos));
9186 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9194 if (host_integerp (loc, 0))
9195 ret = int_loc_descriptor (tree_low_cst (loc, 0));
9202 /* Get an RTL for this, if something has been emitted. */
9203 rtx rtl = lookup_constant_def (loc);
9204 enum machine_mode mode;
9206 if (!rtl || !MEM_P (rtl))
9208 mode = GET_MODE (rtl);
9209 rtl = XEXP (rtl, 0);
9210 ret = mem_loc_descriptor (rtl, mode);
9215 case TRUTH_AND_EXPR:
9216 case TRUTH_ANDIF_EXPR:
9221 case TRUTH_XOR_EXPR:
9227 case TRUTH_ORIF_EXPR:
9232 case FLOOR_DIV_EXPR:
9234 case ROUND_DIV_EXPR:
9235 case TRUNC_DIV_EXPR:
9243 case FLOOR_MOD_EXPR:
9245 case ROUND_MOD_EXPR:
9246 case TRUNC_MOD_EXPR:
9259 op = (unsignedp ? DW_OP_shr : DW_OP_shra);
9263 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
9264 && host_integerp (TREE_OPERAND (loc, 1), 0))
9266 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9270 add_loc_descr (&ret,
9271 new_loc_descr (DW_OP_plus_uconst,
9272 tree_low_cst (TREE_OPERAND (loc, 1),
9282 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9289 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9296 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9303 if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9318 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9319 ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9320 if (ret == 0 || ret1 == 0)
9323 add_loc_descr (&ret, ret1);
9324 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9327 case TRUTH_NOT_EXPR:
9341 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9345 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9351 const enum tree_code code =
9352 TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
9354 loc = build3 (COND_EXPR, TREE_TYPE (loc),
9355 build2 (code, integer_type_node,
9356 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
9357 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
9360 /* ... fall through ... */
9364 dw_loc_descr_ref lhs
9365 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9366 dw_loc_descr_ref rhs
9367 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
9368 dw_loc_descr_ref bra_node, jump_node, tmp;
9370 ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9371 if (ret == 0 || lhs == 0 || rhs == 0)
9374 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9375 add_loc_descr (&ret, bra_node);
9377 add_loc_descr (&ret, rhs);
9378 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9379 add_loc_descr (&ret, jump_node);
9381 add_loc_descr (&ret, lhs);
9382 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9383 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9385 /* ??? Need a node to point the skip at. Use a nop. */
9386 tmp = new_loc_descr (DW_OP_nop, 0, 0);
9387 add_loc_descr (&ret, tmp);
9388 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9389 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9393 case FIX_TRUNC_EXPR:
9395 case FIX_FLOOR_EXPR:
9396 case FIX_ROUND_EXPR:
9400 /* Leave front-end specific codes as simply unknown. This comes
9401 up, for instance, with the C STMT_EXPR. */
9402 if ((unsigned int) TREE_CODE (loc)
9403 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9406 #ifdef ENABLE_CHECKING
9407 /* Otherwise this is a generic code; we should just lists all of
9408 these explicitly. We forgot one. */
9411 /* In a release build, we want to degrade gracefully: better to
9412 generate incomplete debugging information than to crash. */
9417 /* Show if we can't fill the request for an address. */
9418 if (want_address && !have_address)
9421 /* If we've got an address and don't want one, dereference. */
9422 if (!want_address && have_address)
9424 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9426 if (size > DWARF2_ADDR_SIZE || size == -1)
9428 else if (size == DWARF2_ADDR_SIZE)
9431 op = DW_OP_deref_size;
9433 add_loc_descr (&ret, new_loc_descr (op, size, 0));
9439 static inline dw_loc_descr_ref
9440 loc_descriptor_from_tree (tree loc)
9442 return loc_descriptor_from_tree_1 (loc, 2);
9445 /* Given a value, round it up to the lowest multiple of `boundary'
9446 which is not less than the value itself. */
9448 static inline HOST_WIDE_INT
9449 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9451 return (((value + boundary - 1) / boundary) * boundary);
9454 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9455 pointer to the declared type for the relevant field variable, or return
9456 `integer_type_node' if the given node turns out to be an
9460 field_type (tree decl)
9464 if (TREE_CODE (decl) == ERROR_MARK)
9465 return integer_type_node;
9467 type = DECL_BIT_FIELD_TYPE (decl);
9468 if (type == NULL_TREE)
9469 type = TREE_TYPE (decl);
9474 /* Given a pointer to a tree node, return the alignment in bits for
9475 it, or else return BITS_PER_WORD if the node actually turns out to
9476 be an ERROR_MARK node. */
9478 static inline unsigned
9479 simple_type_align_in_bits (tree type)
9481 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9484 static inline unsigned
9485 simple_decl_align_in_bits (tree decl)
9487 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9490 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9491 lowest addressed byte of the "containing object" for the given FIELD_DECL,
9492 or return 0 if we are unable to determine what that offset is, either
9493 because the argument turns out to be a pointer to an ERROR_MARK node, or
9494 because the offset is actually variable. (We can't handle the latter case
9497 static HOST_WIDE_INT
9498 field_byte_offset (tree decl)
9500 unsigned int type_align_in_bits;
9501 unsigned int decl_align_in_bits;
9502 unsigned HOST_WIDE_INT type_size_in_bits;
9503 HOST_WIDE_INT object_offset_in_bits;
9505 tree field_size_tree;
9506 HOST_WIDE_INT bitpos_int;
9507 HOST_WIDE_INT deepest_bitpos;
9508 unsigned HOST_WIDE_INT field_size_in_bits;
9510 if (TREE_CODE (decl) == ERROR_MARK)
9513 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
9515 type = field_type (decl);
9516 field_size_tree = DECL_SIZE (decl);
9518 /* The size could be unspecified if there was an error, or for
9519 a flexible array member. */
9520 if (! field_size_tree)
9521 field_size_tree = bitsize_zero_node;
9523 /* We cannot yet cope with fields whose positions are variable, so
9524 for now, when we see such things, we simply return 0. Someday, we may
9525 be able to handle such cases, but it will be damn difficult. */
9526 if (! host_integerp (bit_position (decl), 0))
9529 bitpos_int = int_bit_position (decl);
9531 /* If we don't know the size of the field, pretend it's a full word. */
9532 if (host_integerp (field_size_tree, 1))
9533 field_size_in_bits = tree_low_cst (field_size_tree, 1);
9535 field_size_in_bits = BITS_PER_WORD;
9537 type_size_in_bits = simple_type_size_in_bits (type);
9538 type_align_in_bits = simple_type_align_in_bits (type);
9539 decl_align_in_bits = simple_decl_align_in_bits (decl);
9541 /* The GCC front-end doesn't make any attempt to keep track of the starting
9542 bit offset (relative to the start of the containing structure type) of the
9543 hypothetical "containing object" for a bit-field. Thus, when computing
9544 the byte offset value for the start of the "containing object" of a
9545 bit-field, we must deduce this information on our own. This can be rather
9546 tricky to do in some cases. For example, handling the following structure
9547 type definition when compiling for an i386/i486 target (which only aligns
9548 long long's to 32-bit boundaries) can be very tricky:
9550 struct S { int field1; long long field2:31; };
9552 Fortunately, there is a simple rule-of-thumb which can be used in such
9553 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for the
9554 structure shown above. It decides to do this based upon one simple rule
9555 for bit-field allocation. GCC allocates each "containing object" for each
9556 bit-field at the first (i.e. lowest addressed) legitimate alignment
9557 boundary (based upon the required minimum alignment for the declared type
9558 of the field) which it can possibly use, subject to the condition that
9559 there is still enough available space remaining in the containing object
9560 (when allocated at the selected point) to fully accommodate all of the
9561 bits of the bit-field itself.
9563 This simple rule makes it obvious why GCC allocates 8 bytes for each
9564 object of the structure type shown above. When looking for a place to
9565 allocate the "containing object" for `field2', the compiler simply tries
9566 to allocate a 64-bit "containing object" at each successive 32-bit
9567 boundary (starting at zero) until it finds a place to allocate that 64-
9568 bit field such that at least 31 contiguous (and previously unallocated)
9569 bits remain within that selected 64 bit field. (As it turns out, for the
9570 example above, the compiler finds it is OK to allocate the "containing
9571 object" 64-bit field at bit-offset zero within the structure type.)
9573 Here we attempt to work backwards from the limited set of facts we're
9574 given, and we try to deduce from those facts, where GCC must have believed
9575 that the containing object started (within the structure type). The value
9576 we deduce is then used (by the callers of this routine) to generate
9577 DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9578 and, in the case of DW_AT_location, regular fields as well). */
9580 /* Figure out the bit-distance from the start of the structure to the
9581 "deepest" bit of the bit-field. */
9582 deepest_bitpos = bitpos_int + field_size_in_bits;
9584 /* This is the tricky part. Use some fancy footwork to deduce where the
9585 lowest addressed bit of the containing object must be. */
9586 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9588 /* Round up to type_align by default. This works best for bitfields. */
9589 object_offset_in_bits += type_align_in_bits - 1;
9590 object_offset_in_bits /= type_align_in_bits;
9591 object_offset_in_bits *= type_align_in_bits;
9593 if (object_offset_in_bits > bitpos_int)
9595 /* Sigh, the decl must be packed. */
9596 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9598 /* Round up to decl_align instead. */
9599 object_offset_in_bits += decl_align_in_bits - 1;
9600 object_offset_in_bits /= decl_align_in_bits;
9601 object_offset_in_bits *= decl_align_in_bits;
9604 return object_offset_in_bits / BITS_PER_UNIT;
9607 /* The following routines define various Dwarf attributes and any data
9608 associated with them. */
9610 /* Add a location description attribute value to a DIE.
9612 This emits location attributes suitable for whole variables and
9613 whole parameters. Note that the location attributes for struct fields are
9614 generated by the routine `data_member_location_attribute' below. */
9617 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9618 dw_loc_descr_ref descr)
9621 add_AT_loc (die, attr_kind, descr);
9624 /* Attach the specialized form of location attribute used for data members of
9625 struct and union types. In the special case of a FIELD_DECL node which
9626 represents a bit-field, the "offset" part of this special location
9627 descriptor must indicate the distance in bytes from the lowest-addressed
9628 byte of the containing struct or union type to the lowest-addressed byte of
9629 the "containing object" for the bit-field. (See the `field_byte_offset'
9632 For any given bit-field, the "containing object" is a hypothetical object
9633 (of some integral or enum type) within which the given bit-field lives. The
9634 type of this hypothetical "containing object" is always the same as the
9635 declared type of the individual bit-field itself (for GCC anyway... the
9636 DWARF spec doesn't actually mandate this). Note that it is the size (in
9637 bytes) of the hypothetical "containing object" which will be given in the
9638 DW_AT_byte_size attribute for this bit-field. (See the
9639 `byte_size_attribute' function below.) It is also used when calculating the
9640 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
9644 add_data_member_location_attribute (dw_die_ref die, tree decl)
9646 HOST_WIDE_INT offset;
9647 dw_loc_descr_ref loc_descr = 0;
9649 if (TREE_CODE (decl) == TREE_BINFO)
9651 /* We're working on the TAG_inheritance for a base class. */
9652 if (BINFO_VIRTUAL_P (decl) && is_cxx ())
9654 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9655 aren't at a fixed offset from all (sub)objects of the same
9656 type. We need to extract the appropriate offset from our
9657 vtable. The following dwarf expression means
9659 BaseAddr = ObAddr + *((*ObAddr) - Offset)
9661 This is specific to the V3 ABI, of course. */
9663 dw_loc_descr_ref tmp;
9665 /* Make a copy of the object address. */
9666 tmp = new_loc_descr (DW_OP_dup, 0, 0);
9667 add_loc_descr (&loc_descr, tmp);
9669 /* Extract the vtable address. */
9670 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9671 add_loc_descr (&loc_descr, tmp);
9673 /* Calculate the address of the offset. */
9674 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9675 gcc_assert (offset < 0);
9677 tmp = int_loc_descriptor (-offset);
9678 add_loc_descr (&loc_descr, tmp);
9679 tmp = new_loc_descr (DW_OP_minus, 0, 0);
9680 add_loc_descr (&loc_descr, tmp);
9682 /* Extract the offset. */
9683 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9684 add_loc_descr (&loc_descr, tmp);
9686 /* Add it to the object address. */
9687 tmp = new_loc_descr (DW_OP_plus, 0, 0);
9688 add_loc_descr (&loc_descr, tmp);
9691 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9694 offset = field_byte_offset (decl);
9698 enum dwarf_location_atom op;
9700 /* The DWARF2 standard says that we should assume that the structure
9701 address is already on the stack, so we can specify a structure field
9702 address by using DW_OP_plus_uconst. */
9704 #ifdef MIPS_DEBUGGING_INFO
9705 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9706 operator correctly. It works only if we leave the offset on the
9710 op = DW_OP_plus_uconst;
9713 loc_descr = new_loc_descr (op, offset, 0);
9716 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9719 /* Writes integer values to dw_vec_const array. */
9722 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9726 *dest++ = val & 0xff;
9732 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
9734 static HOST_WIDE_INT
9735 extract_int (const unsigned char *src, unsigned int size)
9737 HOST_WIDE_INT val = 0;
9743 val |= *--src & 0xff;
9749 /* Writes floating point values to dw_vec_const array. */
9752 insert_float (rtx rtl, unsigned char *array)
9758 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9759 real_to_target (val, &rv, GET_MODE (rtl));
9761 /* real_to_target puts 32-bit pieces in each long. Pack them. */
9762 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9764 insert_int (val[i], 4, array);
9769 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
9770 does not have a "location" either in memory or in a register. These
9771 things can arise in GNU C when a constant is passed as an actual parameter
9772 to an inlined function. They can also arise in C++ where declared
9773 constants do not necessarily get memory "homes". */
9776 add_const_value_attribute (dw_die_ref die, rtx rtl)
9778 switch (GET_CODE (rtl))
9782 HOST_WIDE_INT val = INTVAL (rtl);
9785 add_AT_int (die, DW_AT_const_value, val);
9787 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9792 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9793 floating-point constant. A CONST_DOUBLE is used whenever the
9794 constant requires more than one word in order to be adequately
9795 represented. We output CONST_DOUBLEs as blocks. */
9797 enum machine_mode mode = GET_MODE (rtl);
9799 if (SCALAR_FLOAT_MODE_P (mode))
9801 unsigned int length = GET_MODE_SIZE (mode);
9802 unsigned char *array = ggc_alloc (length);
9804 insert_float (rtl, array);
9805 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9809 /* ??? We really should be using HOST_WIDE_INT throughout. */
9810 gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
9812 add_AT_long_long (die, DW_AT_const_value,
9813 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9820 enum machine_mode mode = GET_MODE (rtl);
9821 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9822 unsigned int length = CONST_VECTOR_NUNITS (rtl);
9823 unsigned char *array = ggc_alloc (length * elt_size);
9827 switch (GET_MODE_CLASS (mode))
9829 case MODE_VECTOR_INT:
9830 for (i = 0, p = array; i < length; i++, p += elt_size)
9832 rtx elt = CONST_VECTOR_ELT (rtl, i);
9833 HOST_WIDE_INT lo, hi;
9835 switch (GET_CODE (elt))
9843 lo = CONST_DOUBLE_LOW (elt);
9844 hi = CONST_DOUBLE_HIGH (elt);
9851 if (elt_size <= sizeof (HOST_WIDE_INT))
9852 insert_int (lo, elt_size, p);
9855 unsigned char *p0 = p;
9856 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9858 gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
9859 if (WORDS_BIG_ENDIAN)
9864 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9865 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9870 case MODE_VECTOR_FLOAT:
9871 for (i = 0, p = array; i < length; i++, p += elt_size)
9873 rtx elt = CONST_VECTOR_ELT (rtl, i);
9874 insert_float (elt, p);
9882 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9887 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9893 add_AT_addr (die, DW_AT_const_value, rtl);
9894 VEC_safe_push (rtx, gc, used_rtx_array, rtl);
9898 /* In cases where an inlined instance of an inline function is passed
9899 the address of an `auto' variable (which is local to the caller) we
9900 can get a situation where the DECL_RTL of the artificial local
9901 variable (for the inlining) which acts as a stand-in for the
9902 corresponding formal parameter (of the inline function) will look
9903 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
9904 exactly a compile-time constant expression, but it isn't the address
9905 of the (artificial) local variable either. Rather, it represents the
9906 *value* which the artificial local variable always has during its
9907 lifetime. We currently have no way to represent such quasi-constant
9908 values in Dwarf, so for now we just punt and generate nothing. */
9912 /* No other kinds of rtx should be possible here. */
9918 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
9919 for use in a later add_const_value_attribute call. */
9922 rtl_for_decl_init (tree init, tree type)
9926 /* If a variable is initialized with a string constant without embedded
9927 zeros, build CONST_STRING. */
9928 if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
9930 tree enttype = TREE_TYPE (type);
9931 tree domain = TYPE_DOMAIN (type);
9932 enum machine_mode mode = TYPE_MODE (enttype);
9934 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
9936 && integer_zerop (TYPE_MIN_VALUE (domain))
9937 && compare_tree_int (TYPE_MAX_VALUE (domain),
9938 TREE_STRING_LENGTH (init) - 1) == 0
9939 && ((size_t) TREE_STRING_LENGTH (init)
9940 == strlen (TREE_STRING_POINTER (init)) + 1))
9941 rtl = gen_rtx_CONST_STRING (VOIDmode,
9942 ggc_strdup (TREE_STRING_POINTER (init)));
9944 /* If the initializer is something that we know will expand into an
9945 immediate RTL constant, expand it now. Expanding anything else
9946 tends to produce unresolved symbols; see debug/5770 and c++/6381. */
9947 /* Aggregate, vector, and complex types may contain constructors that may
9948 result in code being generated when expand_expr is called, so we can't
9949 handle them here. Integer and float are useful and safe types to handle
9951 else if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
9952 && initializer_constant_valid_p (init, type) == null_pointer_node)
9954 rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
9956 /* If expand_expr returns a MEM, it wasn't immediate. */
9957 gcc_assert (!rtl || !MEM_P (rtl));
9963 /* Generate RTL for the variable DECL to represent its location. */
9966 rtl_for_decl_location (tree decl)
9970 /* Here we have to decide where we are going to say the parameter "lives"
9971 (as far as the debugger is concerned). We only have a couple of
9972 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9974 DECL_RTL normally indicates where the parameter lives during most of the
9975 activation of the function. If optimization is enabled however, this
9976 could be either NULL or else a pseudo-reg. Both of those cases indicate
9977 that the parameter doesn't really live anywhere (as far as the code
9978 generation parts of GCC are concerned) during most of the function's
9979 activation. That will happen (for example) if the parameter is never
9980 referenced within the function.
9982 We could just generate a location descriptor here for all non-NULL
9983 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9984 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9985 where DECL_RTL is NULL or is a pseudo-reg.
9987 Note however that we can only get away with using DECL_INCOMING_RTL as
9988 a backup substitute for DECL_RTL in certain limited cases. In cases
9989 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9990 we can be sure that the parameter was passed using the same type as it is
9991 declared to have within the function, and that its DECL_INCOMING_RTL
9992 points us to a place where a value of that type is passed.
9994 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9995 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9996 because in these cases DECL_INCOMING_RTL points us to a value of some
9997 type which is *different* from the type of the parameter itself. Thus,
9998 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
9999 such cases, the debugger would end up (for example) trying to fetch a
10000 `float' from a place which actually contains the first part of a
10001 `double'. That would lead to really incorrect and confusing
10002 output at debug-time.
10004 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
10005 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
10006 are a couple of exceptions however. On little-endian machines we can
10007 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
10008 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
10009 an integral type that is smaller than TREE_TYPE (decl). These cases arise
10010 when (on a little-endian machine) a non-prototyped function has a
10011 parameter declared to be of type `short' or `char'. In such cases,
10012 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
10013 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
10014 passed `int' value. If the debugger then uses that address to fetch
10015 a `short' or a `char' (on a little-endian machine) the result will be
10016 the correct data, so we allow for such exceptional cases below.
10018 Note that our goal here is to describe the place where the given formal
10019 parameter lives during most of the function's activation (i.e. between the
10020 end of the prologue and the start of the epilogue). We'll do that as best
10021 as we can. Note however that if the given formal parameter is modified
10022 sometime during the execution of the function, then a stack backtrace (at
10023 debug-time) will show the function as having been called with the *new*
10024 value rather than the value which was originally passed in. This happens
10025 rarely enough that it is not a major problem, but it *is* a problem, and
10026 I'd like to fix it.
10028 A future version of dwarf2out.c may generate two additional attributes for
10029 any given DW_TAG_formal_parameter DIE which will describe the "passed
10030 type" and the "passed location" for the given formal parameter in addition
10031 to the attributes we now generate to indicate the "declared type" and the
10032 "active location" for each parameter. This additional set of attributes
10033 could be used by debuggers for stack backtraces. Separately, note that
10034 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
10035 This happens (for example) for inlined-instances of inline function formal
10036 parameters which are never referenced. This really shouldn't be
10037 happening. All PARM_DECL nodes should get valid non-NULL
10038 DECL_INCOMING_RTL values. FIXME. */
10040 /* Use DECL_RTL as the "location" unless we find something better. */
10041 rtl = DECL_RTL_IF_SET (decl);
10043 /* When generating abstract instances, ignore everything except
10044 constants, symbols living in memory, and symbols living in
10045 fixed registers. */
10046 if (! reload_completed)
10049 && (CONSTANT_P (rtl)
10051 && CONSTANT_P (XEXP (rtl, 0)))
10053 && TREE_CODE (decl) == VAR_DECL
10054 && TREE_STATIC (decl))))
10056 rtl = targetm.delegitimize_address (rtl);
10061 else if (TREE_CODE (decl) == PARM_DECL)
10063 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
10065 tree declared_type = TREE_TYPE (decl);
10066 tree passed_type = DECL_ARG_TYPE (decl);
10067 enum machine_mode dmode = TYPE_MODE (declared_type);
10068 enum machine_mode pmode = TYPE_MODE (passed_type);
10070 /* This decl represents a formal parameter which was optimized out.
10071 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
10072 all cases where (rtl == NULL_RTX) just below. */
10073 if (dmode == pmode)
10074 rtl = DECL_INCOMING_RTL (decl);
10075 else if (SCALAR_INT_MODE_P (dmode)
10076 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
10077 && DECL_INCOMING_RTL (decl))
10079 rtx inc = DECL_INCOMING_RTL (decl);
10082 else if (MEM_P (inc))
10084 if (BYTES_BIG_ENDIAN)
10085 rtl = adjust_address_nv (inc, dmode,
10086 GET_MODE_SIZE (pmode)
10087 - GET_MODE_SIZE (dmode));
10094 /* If the parm was passed in registers, but lives on the stack, then
10095 make a big endian correction if the mode of the type of the
10096 parameter is not the same as the mode of the rtl. */
10097 /* ??? This is the same series of checks that are made in dbxout.c before
10098 we reach the big endian correction code there. It isn't clear if all
10099 of these checks are necessary here, but keeping them all is the safe
10101 else if (MEM_P (rtl)
10102 && XEXP (rtl, 0) != const0_rtx
10103 && ! CONSTANT_P (XEXP (rtl, 0))
10104 /* Not passed in memory. */
10105 && !MEM_P (DECL_INCOMING_RTL (decl))
10106 /* Not passed by invisible reference. */
10107 && (!REG_P (XEXP (rtl, 0))
10108 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
10109 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
10110 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
10111 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
10114 /* Big endian correction check. */
10115 && BYTES_BIG_ENDIAN
10116 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
10117 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
10120 int offset = (UNITS_PER_WORD
10121 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
10123 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10124 plus_constant (XEXP (rtl, 0), offset));
10127 else if (TREE_CODE (decl) == VAR_DECL
10130 && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
10131 && BYTES_BIG_ENDIAN)
10133 int rsize = GET_MODE_SIZE (GET_MODE (rtl));
10134 int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
10136 /* If a variable is declared "register" yet is smaller than
10137 a register, then if we store the variable to memory, it
10138 looks like we're storing a register-sized value, when in
10139 fact we are not. We need to adjust the offset of the
10140 storage location to reflect the actual value's bytes,
10141 else gdb will not be able to display it. */
10143 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10144 plus_constant (XEXP (rtl, 0), rsize-dsize));
10147 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
10148 and will have been substituted directly into all expressions that use it.
10149 C does not have such a concept, but C++ and other languages do. */
10150 if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
10151 rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
10154 rtl = targetm.delegitimize_address (rtl);
10156 /* If we don't look past the constant pool, we risk emitting a
10157 reference to a constant pool entry that isn't referenced from
10158 code, and thus is not emitted. */
10160 rtl = avoid_constant_pool_reference (rtl);
10165 /* We need to figure out what section we should use as the base for the
10166 address ranges where a given location is valid.
10167 1. If this particular DECL has a section associated with it, use that.
10168 2. If this function has a section associated with it, use that.
10169 3. Otherwise, use the text section.
10170 XXX: If you split a variable across multiple sections, we won't notice. */
10172 static const char *
10173 secname_for_decl (tree decl)
10175 const char *secname;
10177 if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
10179 tree sectree = DECL_SECTION_NAME (decl);
10180 secname = TREE_STRING_POINTER (sectree);
10182 else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
10184 tree sectree = DECL_SECTION_NAME (current_function_decl);
10185 secname = TREE_STRING_POINTER (sectree);
10187 else if (cfun && unlikely_text_section_p (last_text_section))
10188 secname = cfun->cold_section_label;
10190 secname = text_section_label;
10195 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
10196 data attribute for a variable or a parameter. We generate the
10197 DW_AT_const_value attribute only in those cases where the given variable
10198 or parameter does not have a true "location" either in memory or in a
10199 register. This can happen (for example) when a constant is passed as an
10200 actual argument in a call to an inline function. (It's possible that
10201 these things can crop up in other ways also.) Note that one type of
10202 constant value which can be passed into an inlined function is a constant
10203 pointer. This can happen for example if an actual argument in an inlined
10204 function call evaluates to a compile-time constant address. */
10207 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
10208 enum dwarf_attribute attr)
10211 dw_loc_descr_ref descr;
10212 var_loc_list *loc_list;
10213 struct var_loc_node *node;
10214 if (TREE_CODE (decl) == ERROR_MARK)
10217 gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
10218 || TREE_CODE (decl) == RESULT_DECL);
10220 /* See if we possibly have multiple locations for this variable. */
10221 loc_list = lookup_decl_loc (decl);
10223 /* If it truly has multiple locations, the first and last node will
10225 if (loc_list && loc_list->first != loc_list->last)
10227 const char *endname, *secname;
10228 dw_loc_list_ref list;
10231 /* Now that we know what section we are using for a base,
10232 actually construct the list of locations.
10233 The first location information is what is passed to the
10234 function that creates the location list, and the remaining
10235 locations just get added on to that list.
10236 Note that we only know the start address for a location
10237 (IE location changes), so to build the range, we use
10238 the range [current location start, next location start].
10239 This means we have to special case the last node, and generate
10240 a range of [last location start, end of function label]. */
10242 node = loc_list->first;
10243 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10244 secname = secname_for_decl (decl);
10246 list = new_loc_list (loc_descriptor (varloc),
10247 node->label, node->next->label, secname, 1);
10250 for (; node->next; node = node->next)
10251 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10253 /* The variable has a location between NODE->LABEL and
10254 NODE->NEXT->LABEL. */
10255 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10256 add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10257 node->label, node->next->label, secname);
10260 /* If the variable has a location at the last label
10261 it keeps its location until the end of function. */
10262 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10264 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
10266 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10267 if (!current_function_decl)
10268 endname = text_end_label;
10271 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
10272 current_function_funcdef_no);
10273 endname = ggc_strdup (label_id);
10275 add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10276 node->label, endname, secname);
10279 /* Finally, add the location list to the DIE, and we are done. */
10280 add_AT_loc_list (die, attr, list);
10284 /* Try to get some constant RTL for this decl, and use that as the value of
10287 rtl = rtl_for_decl_location (decl);
10288 if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
10290 add_const_value_attribute (die, rtl);
10294 /* If we have tried to generate the location otherwise, and it
10295 didn't work out (we wouldn't be here if we did), and we have a one entry
10296 location list, try generating a location from that. */
10297 if (loc_list && loc_list->first)
10299 node = loc_list->first;
10300 descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note));
10303 add_AT_location_description (die, attr, descr);
10308 /* We couldn't get any rtl, so try directly generating the location
10309 description from the tree. */
10310 descr = loc_descriptor_from_tree (decl);
10313 add_AT_location_description (die, attr, descr);
10318 /* If we don't have a copy of this variable in memory for some reason (such
10319 as a C++ member constant that doesn't have an out-of-line definition),
10320 we should tell the debugger about the constant value. */
10323 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
10325 tree init = DECL_INITIAL (decl);
10326 tree type = TREE_TYPE (decl);
10329 if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
10334 rtl = rtl_for_decl_init (init, type);
10336 add_const_value_attribute (var_die, rtl);
10339 #ifdef DWARF2_UNWIND_INFO
10340 /* Convert the CFI instructions for the current function into a location
10341 list. This is used for DW_AT_frame_base when we targeting a dwarf2
10342 consumer that does not support the dwarf3 DW_OP_call_frame_cfa. */
10344 static dw_loc_list_ref
10345 convert_cfa_to_loc_list (void)
10348 dw_loc_list_ref list, *list_tail;
10350 dw_cfa_location last_cfa, next_cfa;
10351 const char *start_label, *last_label, *section;
10353 fde = &fde_table[fde_table_in_use - 1];
10355 section = secname_for_decl (current_function_decl);
10359 next_cfa.reg = INVALID_REGNUM;
10360 next_cfa.offset = 0;
10361 next_cfa.indirect = 0;
10362 next_cfa.base_offset = 0;
10364 start_label = fde->dw_fde_begin;
10366 /* ??? Bald assumption that the CIE opcode list does not contain
10367 advance opcodes. */
10368 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
10369 lookup_cfa_1 (cfi, &next_cfa);
10371 last_cfa = next_cfa;
10372 last_label = start_label;
10374 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
10375 switch (cfi->dw_cfi_opc)
10377 case DW_CFA_advance_loc1:
10378 case DW_CFA_advance_loc2:
10379 case DW_CFA_advance_loc4:
10380 if (!cfa_equal_p (&last_cfa, &next_cfa))
10382 *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10383 last_label, section, list == NULL);
10385 list_tail = &(*list_tail)->dw_loc_next;
10386 last_cfa = next_cfa;
10387 start_label = last_label;
10389 last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
10392 case DW_CFA_advance_loc:
10393 /* The encoding is complex enough that we should never emit this. */
10394 case DW_CFA_remember_state:
10395 case DW_CFA_restore_state:
10396 /* We don't handle these two in this function. It would be possible
10397 if it were to be required. */
10398 gcc_unreachable ();
10401 lookup_cfa_1 (cfi, &next_cfa);
10405 if (!cfa_equal_p (&last_cfa, &next_cfa))
10407 *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10408 last_label, section, list == NULL);
10409 list_tail = &(*list_tail)->dw_loc_next;
10410 start_label = last_label;
10412 *list_tail = new_loc_list (build_cfa_loc (&next_cfa), start_label,
10413 fde->dw_fde_end, section, list == NULL);
10418 /* Compute a displacement from the "steady-state frame pointer" to
10419 the CFA, and store it in frame_pointer_cfa_offset. */
10422 compute_frame_pointer_to_cfa_displacement (void)
10424 HOST_WIDE_INT offset;
10427 #ifdef FRAME_POINTER_CFA_OFFSET
10428 reg = frame_pointer_rtx;
10429 offset = FRAME_POINTER_CFA_OFFSET (current_function_decl);
10431 reg = arg_pointer_rtx;
10432 offset = ARG_POINTER_CFA_OFFSET (current_function_decl);
10435 elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10436 if (GET_CODE (elim) == PLUS)
10438 offset += INTVAL (XEXP (elim, 1));
10439 elim = XEXP (elim, 0);
10441 gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
10442 : stack_pointer_rtx));
10444 frame_pointer_cfa_offset = -offset;
10448 /* Generate a DW_AT_name attribute given some string value to be included as
10449 the value of the attribute. */
10452 add_name_attribute (dw_die_ref die, const char *name_string)
10454 if (name_string != NULL && *name_string != 0)
10456 if (demangle_name_func)
10457 name_string = (*demangle_name_func) (name_string);
10459 add_AT_string (die, DW_AT_name, name_string);
10463 /* Generate a DW_AT_comp_dir attribute for DIE. */
10466 add_comp_dir_attribute (dw_die_ref die)
10468 const char *wd = get_src_pwd ();
10470 add_AT_string (die, DW_AT_comp_dir, wd);
10473 /* Given a tree node describing an array bound (either lower or upper) output
10474 a representation for that bound. */
10477 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10479 switch (TREE_CODE (bound))
10484 /* All fixed-bounds are represented by INTEGER_CST nodes. */
10486 if (! host_integerp (bound, 0)
10487 || (bound_attr == DW_AT_lower_bound
10488 && (((is_c_family () || is_java ()) && integer_zerop (bound))
10489 || (is_fortran () && integer_onep (bound)))))
10490 /* Use the default. */
10493 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10498 case NON_LVALUE_EXPR:
10499 case VIEW_CONVERT_EXPR:
10500 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10510 dw_die_ref decl_die = lookup_decl_die (bound);
10512 /* ??? Can this happen, or should the variable have been bound
10513 first? Probably it can, since I imagine that we try to create
10514 the types of parameters in the order in which they exist in
10515 the list, and won't have created a forward reference to a
10516 later parameter. */
10517 if (decl_die != NULL)
10518 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10524 /* Otherwise try to create a stack operation procedure to
10525 evaluate the value of the array bound. */
10527 dw_die_ref ctx, decl_die;
10528 dw_loc_descr_ref loc;
10530 loc = loc_descriptor_from_tree (bound);
10534 if (current_function_decl == 0)
10535 ctx = comp_unit_die;
10537 ctx = lookup_decl_die (current_function_decl);
10539 decl_die = new_die (DW_TAG_variable, ctx, bound);
10540 add_AT_flag (decl_die, DW_AT_artificial, 1);
10541 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10542 add_AT_loc (decl_die, DW_AT_location, loc);
10544 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10550 /* Note that the block of subscript information for an array type also
10551 includes information about the element type of type given array type. */
10554 add_subscript_info (dw_die_ref type_die, tree type)
10556 #ifndef MIPS_DEBUGGING_INFO
10557 unsigned dimension_number;
10560 dw_die_ref subrange_die;
10562 /* The GNU compilers represent multidimensional array types as sequences of
10563 one dimensional array types whose element types are themselves array
10564 types. Here we squish that down, so that each multidimensional array
10565 type gets only one array_type DIE in the Dwarf debugging info. The draft
10566 Dwarf specification say that we are allowed to do this kind of
10567 compression in C (because there is no difference between an array or
10568 arrays and a multidimensional array in C) but for other source languages
10569 (e.g. Ada) we probably shouldn't do this. */
10571 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10572 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10573 We work around this by disabling this feature. See also
10574 gen_array_type_die. */
10575 #ifndef MIPS_DEBUGGING_INFO
10576 for (dimension_number = 0;
10577 TREE_CODE (type) == ARRAY_TYPE;
10578 type = TREE_TYPE (type), dimension_number++)
10581 tree domain = TYPE_DOMAIN (type);
10583 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10584 and (in GNU C only) variable bounds. Handle all three forms
10586 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10589 /* We have an array type with specified bounds. */
10590 lower = TYPE_MIN_VALUE (domain);
10591 upper = TYPE_MAX_VALUE (domain);
10593 /* Define the index type. */
10594 if (TREE_TYPE (domain))
10596 /* ??? This is probably an Ada unnamed subrange type. Ignore the
10597 TREE_TYPE field. We can't emit debug info for this
10598 because it is an unnamed integral type. */
10599 if (TREE_CODE (domain) == INTEGER_TYPE
10600 && TYPE_NAME (domain) == NULL_TREE
10601 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10602 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10605 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10609 /* ??? If upper is NULL, the array has unspecified length,
10610 but it does have a lower bound. This happens with Fortran
10612 Since the debugger is definitely going to need to know N
10613 to produce useful results, go ahead and output the lower
10614 bound solo, and hope the debugger can cope. */
10616 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10618 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10621 /* Otherwise we have an array type with an unspecified length. The
10622 DWARF-2 spec does not say how to handle this; let's just leave out the
10628 add_byte_size_attribute (dw_die_ref die, tree tree_node)
10632 switch (TREE_CODE (tree_node))
10637 case ENUMERAL_TYPE:
10640 case QUAL_UNION_TYPE:
10641 size = int_size_in_bytes (tree_node);
10644 /* For a data member of a struct or union, the DW_AT_byte_size is
10645 generally given as the number of bytes normally allocated for an
10646 object of the *declared* type of the member itself. This is true
10647 even for bit-fields. */
10648 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10651 gcc_unreachable ();
10654 /* Note that `size' might be -1 when we get to this point. If it is, that
10655 indicates that the byte size of the entity in question is variable. We
10656 have no good way of expressing this fact in Dwarf at the present time,
10657 so just let the -1 pass on through. */
10658 add_AT_unsigned (die, DW_AT_byte_size, size);
10661 /* For a FIELD_DECL node which represents a bit-field, output an attribute
10662 which specifies the distance in bits from the highest order bit of the
10663 "containing object" for the bit-field to the highest order bit of the
10666 For any given bit-field, the "containing object" is a hypothetical object
10667 (of some integral or enum type) within which the given bit-field lives. The
10668 type of this hypothetical "containing object" is always the same as the
10669 declared type of the individual bit-field itself. The determination of the
10670 exact location of the "containing object" for a bit-field is rather
10671 complicated. It's handled by the `field_byte_offset' function (above).
10673 Note that it is the size (in bytes) of the hypothetical "containing object"
10674 which will be given in the DW_AT_byte_size attribute for this bit-field.
10675 (See `byte_size_attribute' above). */
10678 add_bit_offset_attribute (dw_die_ref die, tree decl)
10680 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10681 tree type = DECL_BIT_FIELD_TYPE (decl);
10682 HOST_WIDE_INT bitpos_int;
10683 HOST_WIDE_INT highest_order_object_bit_offset;
10684 HOST_WIDE_INT highest_order_field_bit_offset;
10685 HOST_WIDE_INT unsigned bit_offset;
10687 /* Must be a field and a bit field. */
10688 gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
10690 /* We can't yet handle bit-fields whose offsets are variable, so if we
10691 encounter such things, just return without generating any attribute
10692 whatsoever. Likewise for variable or too large size. */
10693 if (! host_integerp (bit_position (decl), 0)
10694 || ! host_integerp (DECL_SIZE (decl), 1))
10697 bitpos_int = int_bit_position (decl);
10699 /* Note that the bit offset is always the distance (in bits) from the
10700 highest-order bit of the "containing object" to the highest-order bit of
10701 the bit-field itself. Since the "high-order end" of any object or field
10702 is different on big-endian and little-endian machines, the computation
10703 below must take account of these differences. */
10704 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10705 highest_order_field_bit_offset = bitpos_int;
10707 if (! BYTES_BIG_ENDIAN)
10709 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10710 highest_order_object_bit_offset += simple_type_size_in_bits (type);
10714 = (! BYTES_BIG_ENDIAN
10715 ? highest_order_object_bit_offset - highest_order_field_bit_offset
10716 : highest_order_field_bit_offset - highest_order_object_bit_offset);
10718 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10721 /* For a FIELD_DECL node which represents a bit field, output an attribute
10722 which specifies the length in bits of the given field. */
10725 add_bit_size_attribute (dw_die_ref die, tree decl)
10727 /* Must be a field and a bit field. */
10728 gcc_assert (TREE_CODE (decl) == FIELD_DECL
10729 && DECL_BIT_FIELD_TYPE (decl));
10731 if (host_integerp (DECL_SIZE (decl), 1))
10732 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10735 /* If the compiled language is ANSI C, then add a 'prototyped'
10736 attribute, if arg types are given for the parameters of a function. */
10739 add_prototyped_attribute (dw_die_ref die, tree func_type)
10741 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10742 && TYPE_ARG_TYPES (func_type) != NULL)
10743 add_AT_flag (die, DW_AT_prototyped, 1);
10746 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
10747 by looking in either the type declaration or object declaration
10751 add_abstract_origin_attribute (dw_die_ref die, tree origin)
10753 dw_die_ref origin_die = NULL;
10755 if (TREE_CODE (origin) != FUNCTION_DECL)
10757 /* We may have gotten separated from the block for the inlined
10758 function, if we're in an exception handler or some such; make
10759 sure that the abstract function has been written out.
10761 Doing this for nested functions is wrong, however; functions are
10762 distinct units, and our context might not even be inline. */
10766 fn = TYPE_STUB_DECL (fn);
10768 fn = decl_function_context (fn);
10770 dwarf2out_abstract_function (fn);
10773 if (DECL_P (origin))
10774 origin_die = lookup_decl_die (origin);
10775 else if (TYPE_P (origin))
10776 origin_die = lookup_type_die (origin);
10778 /* XXX: Functions that are never lowered don't always have correct block
10779 trees (in the case of java, they simply have no block tree, in some other
10780 languages). For these functions, there is nothing we can really do to
10781 output correct debug info for inlined functions in all cases. Rather
10782 than die, we'll just produce deficient debug info now, in that we will
10783 have variables without a proper abstract origin. In the future, when all
10784 functions are lowered, we should re-add a gcc_assert (origin_die)
10788 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10791 /* We do not currently support the pure_virtual attribute. */
10794 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10796 if (DECL_VINDEX (func_decl))
10798 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10800 if (host_integerp (DECL_VINDEX (func_decl), 0))
10801 add_AT_loc (die, DW_AT_vtable_elem_location,
10802 new_loc_descr (DW_OP_constu,
10803 tree_low_cst (DECL_VINDEX (func_decl), 0),
10806 /* GNU extension: Record what type this method came from originally. */
10807 if (debug_info_level > DINFO_LEVEL_TERSE)
10808 add_AT_die_ref (die, DW_AT_containing_type,
10809 lookup_type_die (DECL_CONTEXT (func_decl)));
10813 /* Add source coordinate attributes for the given decl. */
10816 add_src_coords_attributes (dw_die_ref die, tree decl)
10818 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
10819 unsigned file_index = lookup_filename (s.file);
10821 add_AT_unsigned (die, DW_AT_decl_file, file_index);
10822 add_AT_unsigned (die, DW_AT_decl_line, s.line);
10825 /* Add a DW_AT_name attribute and source coordinate attribute for the
10826 given decl, but only if it actually has a name. */
10829 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10833 decl_name = DECL_NAME (decl);
10834 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10836 add_name_attribute (die, dwarf2_name (decl, 0));
10837 if (! DECL_ARTIFICIAL (decl))
10838 add_src_coords_attributes (die, decl);
10840 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10841 && TREE_PUBLIC (decl)
10842 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
10843 && !DECL_ABSTRACT (decl)
10844 && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
10845 add_AT_string (die, DW_AT_MIPS_linkage_name,
10846 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
10849 #ifdef VMS_DEBUGGING_INFO
10850 /* Get the function's name, as described by its RTL. This may be different
10851 from the DECL_NAME name used in the source file. */
10852 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
10854 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
10855 XEXP (DECL_RTL (decl), 0));
10856 VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
10861 /* Push a new declaration scope. */
10864 push_decl_scope (tree scope)
10866 VEC_safe_push (tree, gc, decl_scope_table, scope);
10869 /* Pop a declaration scope. */
10872 pop_decl_scope (void)
10874 VEC_pop (tree, decl_scope_table);
10877 /* Return the DIE for the scope that immediately contains this type.
10878 Non-named types get global scope. Named types nested in other
10879 types get their containing scope if it's open, or global scope
10880 otherwise. All other types (i.e. function-local named types) get
10881 the current active scope. */
10884 scope_die_for (tree t, dw_die_ref context_die)
10886 dw_die_ref scope_die = NULL;
10887 tree containing_scope;
10890 /* Non-types always go in the current scope. */
10891 gcc_assert (TYPE_P (t));
10893 containing_scope = TYPE_CONTEXT (t);
10895 /* Use the containing namespace if it was passed in (for a declaration). */
10896 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
10898 if (context_die == lookup_decl_die (containing_scope))
10901 containing_scope = NULL_TREE;
10904 /* Ignore function type "scopes" from the C frontend. They mean that
10905 a tagged type is local to a parmlist of a function declarator, but
10906 that isn't useful to DWARF. */
10907 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
10908 containing_scope = NULL_TREE;
10910 if (containing_scope == NULL_TREE)
10911 scope_die = comp_unit_die;
10912 else if (TYPE_P (containing_scope))
10914 /* For types, we can just look up the appropriate DIE. But
10915 first we check to see if we're in the middle of emitting it
10916 so we know where the new DIE should go. */
10917 for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
10918 if (VEC_index (tree, decl_scope_table, i) == containing_scope)
10923 gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
10924 || TREE_ASM_WRITTEN (containing_scope));
10926 /* If none of the current dies are suitable, we get file scope. */
10927 scope_die = comp_unit_die;
10930 scope_die = lookup_type_die (containing_scope);
10933 scope_die = context_die;
10938 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
10941 local_scope_p (dw_die_ref context_die)
10943 for (; context_die; context_die = context_die->die_parent)
10944 if (context_die->die_tag == DW_TAG_inlined_subroutine
10945 || context_die->die_tag == DW_TAG_subprogram)
10951 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
10952 whether or not to treat a DIE in this context as a declaration. */
10955 class_or_namespace_scope_p (dw_die_ref context_die)
10957 return (context_die
10958 && (context_die->die_tag == DW_TAG_structure_type
10959 || context_die->die_tag == DW_TAG_union_type
10960 || context_die->die_tag == DW_TAG_namespace));
10963 /* Many forms of DIEs require a "type description" attribute. This
10964 routine locates the proper "type descriptor" die for the type given
10965 by 'type', and adds a DW_AT_type attribute below the given die. */
10968 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
10969 int decl_volatile, dw_die_ref context_die)
10971 enum tree_code code = TREE_CODE (type);
10972 dw_die_ref type_die = NULL;
10974 /* ??? If this type is an unnamed subrange type of an integral or
10975 floating-point type, use the inner type. This is because we have no
10976 support for unnamed types in base_type_die. This can happen if this is
10977 an Ada subrange type. Correct solution is emit a subrange type die. */
10978 if ((code == INTEGER_TYPE || code == REAL_TYPE)
10979 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
10980 type = TREE_TYPE (type), code = TREE_CODE (type);
10982 if (code == ERROR_MARK
10983 /* Handle a special case. For functions whose return type is void, we
10984 generate *no* type attribute. (Note that no object may have type
10985 `void', so this only applies to function return types). */
10986 || code == VOID_TYPE)
10989 type_die = modified_type_die (type,
10990 decl_const || TYPE_READONLY (type),
10991 decl_volatile || TYPE_VOLATILE (type),
10994 if (type_die != NULL)
10995 add_AT_die_ref (object_die, DW_AT_type, type_die);
10998 /* Given an object die, add the calling convention attribute for the
10999 function call type. */
11001 add_calling_convention_attribute (dw_die_ref subr_die, tree type)
11003 enum dwarf_calling_convention value = DW_CC_normal;
11005 value = targetm.dwarf_calling_convention (type);
11007 /* Only add the attribute if the backend requests it, and
11008 is not DW_CC_normal. */
11009 if (value && (value != DW_CC_normal))
11010 add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
11013 /* Given a tree pointer to a struct, class, union, or enum type node, return
11014 a pointer to the (string) tag name for the given type, or zero if the type
11015 was declared without a tag. */
11017 static const char *
11018 type_tag (tree type)
11020 const char *name = 0;
11022 if (TYPE_NAME (type) != 0)
11026 /* Find the IDENTIFIER_NODE for the type name. */
11027 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
11028 t = TYPE_NAME (type);
11030 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
11031 a TYPE_DECL node, regardless of whether or not a `typedef' was
11033 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11034 && ! DECL_IGNORED_P (TYPE_NAME (type)))
11035 t = DECL_NAME (TYPE_NAME (type));
11037 /* Now get the name as a string, or invent one. */
11039 name = IDENTIFIER_POINTER (t);
11042 return (name == 0 || *name == '\0') ? 0 : name;
11045 /* Return the type associated with a data member, make a special check
11046 for bit field types. */
11049 member_declared_type (tree member)
11051 return (DECL_BIT_FIELD_TYPE (member)
11052 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
11055 /* Get the decl's label, as described by its RTL. This may be different
11056 from the DECL_NAME name used in the source file. */
11059 static const char *
11060 decl_start_label (tree decl)
11063 const char *fnname;
11065 x = DECL_RTL (decl);
11066 gcc_assert (MEM_P (x));
11069 gcc_assert (GET_CODE (x) == SYMBOL_REF);
11071 fnname = XSTR (x, 0);
11076 /* These routines generate the internal representation of the DIE's for
11077 the compilation unit. Debugging information is collected by walking
11078 the declaration trees passed in from dwarf2out_decl(). */
11081 gen_array_type_die (tree type, dw_die_ref context_die)
11083 dw_die_ref scope_die = scope_die_for (type, context_die);
11084 dw_die_ref array_die;
11087 /* ??? The SGI dwarf reader fails for array of array of enum types unless
11088 the inner array type comes before the outer array type. Thus we must
11089 call gen_type_die before we call new_die. See below also. */
11090 #ifdef MIPS_DEBUGGING_INFO
11091 gen_type_die (TREE_TYPE (type), context_die);
11094 array_die = new_die (DW_TAG_array_type, scope_die, type);
11095 add_name_attribute (array_die, type_tag (type));
11096 equate_type_number_to_die (type, array_die);
11098 if (TREE_CODE (type) == VECTOR_TYPE)
11100 /* The frontend feeds us a representation for the vector as a struct
11101 containing an array. Pull out the array type. */
11102 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
11103 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
11107 /* We default the array ordering. SDB will probably do
11108 the right things even if DW_AT_ordering is not present. It's not even
11109 an issue until we start to get into multidimensional arrays anyway. If
11110 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
11111 then we'll have to put the DW_AT_ordering attribute back in. (But if
11112 and when we find out that we need to put these in, we will only do so
11113 for multidimensional arrays. */
11114 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
11117 #ifdef MIPS_DEBUGGING_INFO
11118 /* The SGI compilers handle arrays of unknown bound by setting
11119 AT_declaration and not emitting any subrange DIEs. */
11120 if (! TYPE_DOMAIN (type))
11121 add_AT_flag (array_die, DW_AT_declaration, 1);
11124 add_subscript_info (array_die, type);
11126 /* Add representation of the type of the elements of this array type. */
11127 element_type = TREE_TYPE (type);
11129 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11130 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
11131 We work around this by disabling this feature. See also
11132 add_subscript_info. */
11133 #ifndef MIPS_DEBUGGING_INFO
11134 while (TREE_CODE (element_type) == ARRAY_TYPE)
11135 element_type = TREE_TYPE (element_type);
11137 gen_type_die (element_type, context_die);
11140 add_type_attribute (array_die, element_type, 0, 0, context_die);
11145 gen_entry_point_die (tree decl, dw_die_ref context_die)
11147 tree origin = decl_ultimate_origin (decl);
11148 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
11150 if (origin != NULL)
11151 add_abstract_origin_attribute (decl_die, origin);
11154 add_name_and_src_coords_attributes (decl_die, decl);
11155 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
11156 0, 0, context_die);
11159 if (DECL_ABSTRACT (decl))
11160 equate_decl_number_to_die (decl, decl_die);
11162 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
11166 /* Walk through the list of incomplete types again, trying once more to
11167 emit full debugging info for them. */
11170 retry_incomplete_types (void)
11174 for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
11175 gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
11178 /* Generate a DIE to represent an inlined instance of an enumeration type. */
11181 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
11183 dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
11185 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11186 be incomplete and such types are not marked. */
11187 add_abstract_origin_attribute (type_die, type);
11190 /* Generate a DIE to represent an inlined instance of a structure type. */
11193 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
11195 dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
11197 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11198 be incomplete and such types are not marked. */
11199 add_abstract_origin_attribute (type_die, type);
11202 /* Generate a DIE to represent an inlined instance of a union type. */
11205 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
11207 dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
11209 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11210 be incomplete and such types are not marked. */
11211 add_abstract_origin_attribute (type_die, type);
11214 /* Generate a DIE to represent an enumeration type. Note that these DIEs
11215 include all of the information about the enumeration values also. Each
11216 enumerated type name/value is listed as a child of the enumerated type
11220 gen_enumeration_type_die (tree type, dw_die_ref context_die)
11222 dw_die_ref type_die = lookup_type_die (type);
11224 if (type_die == NULL)
11226 type_die = new_die (DW_TAG_enumeration_type,
11227 scope_die_for (type, context_die), type);
11228 equate_type_number_to_die (type, type_die);
11229 add_name_attribute (type_die, type_tag (type));
11231 else if (! TYPE_SIZE (type))
11234 remove_AT (type_die, DW_AT_declaration);
11236 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
11237 given enum type is incomplete, do not generate the DW_AT_byte_size
11238 attribute or the DW_AT_element_list attribute. */
11239 if (TYPE_SIZE (type))
11243 TREE_ASM_WRITTEN (type) = 1;
11244 add_byte_size_attribute (type_die, type);
11245 if (TYPE_STUB_DECL (type) != NULL_TREE)
11246 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11248 /* If the first reference to this type was as the return type of an
11249 inline function, then it may not have a parent. Fix this now. */
11250 if (type_die->die_parent == NULL)
11251 add_child_die (scope_die_for (type, context_die), type_die);
11253 for (link = TYPE_VALUES (type);
11254 link != NULL; link = TREE_CHAIN (link))
11256 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
11257 tree value = TREE_VALUE (link);
11259 add_name_attribute (enum_die,
11260 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
11262 if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
11263 /* DWARF2 does not provide a way of indicating whether or
11264 not enumeration constants are signed or unsigned. GDB
11265 always assumes the values are signed, so we output all
11266 values as if they were signed. That means that
11267 enumeration constants with very large unsigned values
11268 will appear to have negative values in the debugger. */
11269 add_AT_int (enum_die, DW_AT_const_value,
11270 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
11274 add_AT_flag (type_die, DW_AT_declaration, 1);
11279 /* Generate a DIE to represent either a real live formal parameter decl or to
11280 represent just the type of some formal parameter position in some function
11283 Note that this routine is a bit unusual because its argument may be a
11284 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
11285 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
11286 node. If it's the former then this function is being called to output a
11287 DIE to represent a formal parameter object (or some inlining thereof). If
11288 it's the latter, then this function is only being called to output a
11289 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
11290 argument type of some subprogram type. */
11293 gen_formal_parameter_die (tree node, dw_die_ref context_die)
11295 dw_die_ref parm_die
11296 = new_die (DW_TAG_formal_parameter, context_die, node);
11299 switch (TREE_CODE_CLASS (TREE_CODE (node)))
11301 case tcc_declaration:
11302 origin = decl_ultimate_origin (node);
11303 if (origin != NULL)
11304 add_abstract_origin_attribute (parm_die, origin);
11307 add_name_and_src_coords_attributes (parm_die, node);
11308 add_type_attribute (parm_die, TREE_TYPE (node),
11309 TREE_READONLY (node),
11310 TREE_THIS_VOLATILE (node),
11312 if (DECL_ARTIFICIAL (node))
11313 add_AT_flag (parm_die, DW_AT_artificial, 1);
11316 equate_decl_number_to_die (node, parm_die);
11317 if (! DECL_ABSTRACT (node))
11318 add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
11323 /* We were called with some kind of a ..._TYPE node. */
11324 add_type_attribute (parm_die, node, 0, 0, context_die);
11328 gcc_unreachable ();
11334 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
11335 at the end of an (ANSI prototyped) formal parameters list. */
11338 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
11340 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
11343 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
11344 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
11345 parameters as specified in some function type specification (except for
11346 those which appear as part of a function *definition*). */
11349 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
11352 tree formal_type = NULL;
11353 tree first_parm_type;
11356 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
11358 arg = DECL_ARGUMENTS (function_or_method_type);
11359 function_or_method_type = TREE_TYPE (function_or_method_type);
11364 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
11366 /* Make our first pass over the list of formal parameter types and output a
11367 DW_TAG_formal_parameter DIE for each one. */
11368 for (link = first_parm_type; link; )
11370 dw_die_ref parm_die;
11372 formal_type = TREE_VALUE (link);
11373 if (formal_type == void_type_node)
11376 /* Output a (nameless) DIE to represent the formal parameter itself. */
11377 parm_die = gen_formal_parameter_die (formal_type, context_die);
11378 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
11379 && link == first_parm_type)
11380 || (arg && DECL_ARTIFICIAL (arg)))
11381 add_AT_flag (parm_die, DW_AT_artificial, 1);
11383 link = TREE_CHAIN (link);
11385 arg = TREE_CHAIN (arg);
11388 /* If this function type has an ellipsis, add a
11389 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
11390 if (formal_type != void_type_node)
11391 gen_unspecified_parameters_die (function_or_method_type, context_die);
11393 /* Make our second (and final) pass over the list of formal parameter types
11394 and output DIEs to represent those types (as necessary). */
11395 for (link = TYPE_ARG_TYPES (function_or_method_type);
11396 link && TREE_VALUE (link);
11397 link = TREE_CHAIN (link))
11398 gen_type_die (TREE_VALUE (link), context_die);
11401 /* We want to generate the DIE for TYPE so that we can generate the
11402 die for MEMBER, which has been defined; we will need to refer back
11403 to the member declaration nested within TYPE. If we're trying to
11404 generate minimal debug info for TYPE, processing TYPE won't do the
11405 trick; we need to attach the member declaration by hand. */
11408 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
11410 gen_type_die (type, context_die);
11412 /* If we're trying to avoid duplicate debug info, we may not have
11413 emitted the member decl for this function. Emit it now. */
11414 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
11415 && ! lookup_decl_die (member))
11417 dw_die_ref type_die;
11418 gcc_assert (!decl_ultimate_origin (member));
11420 push_decl_scope (type);
11421 type_die = lookup_type_die (type);
11422 if (TREE_CODE (member) == FUNCTION_DECL)
11423 gen_subprogram_die (member, type_die);
11424 else if (TREE_CODE (member) == FIELD_DECL)
11426 /* Ignore the nameless fields that are used to skip bits but handle
11427 C++ anonymous unions and structs. */
11428 if (DECL_NAME (member) != NULL_TREE
11429 || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
11430 || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
11432 gen_type_die (member_declared_type (member), type_die);
11433 gen_field_die (member, type_die);
11437 gen_variable_die (member, type_die);
11443 /* Generate the DWARF2 info for the "abstract" instance of a function which we
11444 may later generate inlined and/or out-of-line instances of. */
11447 dwarf2out_abstract_function (tree decl)
11449 dw_die_ref old_die;
11452 int was_abstract = DECL_ABSTRACT (decl);
11454 /* Make sure we have the actual abstract inline, not a clone. */
11455 decl = DECL_ORIGIN (decl);
11457 old_die = lookup_decl_die (decl);
11458 if (old_die && get_AT (old_die, DW_AT_inline))
11459 /* We've already generated the abstract instance. */
11462 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11463 we don't get confused by DECL_ABSTRACT. */
11464 if (debug_info_level > DINFO_LEVEL_TERSE)
11466 context = decl_class_context (decl);
11468 gen_type_die_for_member
11469 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11472 /* Pretend we've just finished compiling this function. */
11473 save_fn = current_function_decl;
11474 current_function_decl = decl;
11476 set_decl_abstract_flags (decl, 1);
11477 dwarf2out_decl (decl);
11478 if (! was_abstract)
11479 set_decl_abstract_flags (decl, 0);
11481 current_function_decl = save_fn;
11484 /* Generate a DIE to represent a declared function (either file-scope or
11488 gen_subprogram_die (tree decl, dw_die_ref context_die)
11490 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11491 tree origin = decl_ultimate_origin (decl);
11492 dw_die_ref subr_die;
11495 dw_die_ref old_die = lookup_decl_die (decl);
11496 int declaration = (current_function_decl != decl
11497 || class_or_namespace_scope_p (context_die));
11499 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11500 started to generate the abstract instance of an inline, decided to output
11501 its containing class, and proceeded to emit the declaration of the inline
11502 from the member list for the class. If so, DECLARATION takes priority;
11503 we'll get back to the abstract instance when done with the class. */
11505 /* The class-scope declaration DIE must be the primary DIE. */
11506 if (origin && declaration && class_or_namespace_scope_p (context_die))
11509 gcc_assert (!old_die);
11512 /* Now that the C++ front end lazily declares artificial member fns, we
11513 might need to retrofit the declaration into its class. */
11514 if (!declaration && !origin && !old_die
11515 && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
11516 && !class_or_namespace_scope_p (context_die)
11517 && debug_info_level > DINFO_LEVEL_TERSE)
11518 old_die = force_decl_die (decl);
11520 if (origin != NULL)
11522 gcc_assert (!declaration || local_scope_p (context_die));
11524 /* Fixup die_parent for the abstract instance of a nested
11525 inline function. */
11526 if (old_die && old_die->die_parent == NULL)
11527 add_child_die (context_die, old_die);
11529 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11530 add_abstract_origin_attribute (subr_die, origin);
11534 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11535 unsigned file_index = lookup_filename (s.file);
11537 if (!get_AT_flag (old_die, DW_AT_declaration)
11538 /* We can have a normal definition following an inline one in the
11539 case of redefinition of GNU C extern inlines.
11540 It seems reasonable to use AT_specification in this case. */
11541 && !get_AT (old_die, DW_AT_inline))
11543 /* Detect and ignore this case, where we are trying to output
11544 something we have already output. */
11548 /* If the definition comes from the same place as the declaration,
11549 maybe use the old DIE. We always want the DIE for this function
11550 that has the *_pc attributes to be under comp_unit_die so the
11551 debugger can find it. We also need to do this for abstract
11552 instances of inlines, since the spec requires the out-of-line copy
11553 to have the same parent. For local class methods, this doesn't
11554 apply; we just use the old DIE. */
11555 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11556 && (DECL_ARTIFICIAL (decl)
11557 || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11558 && (get_AT_unsigned (old_die, DW_AT_decl_line)
11559 == (unsigned) s.line))))
11561 subr_die = old_die;
11563 /* Clear out the declaration attribute and the formal parameters.
11564 Do not remove all children, because it is possible that this
11565 declaration die was forced using force_decl_die(). In such
11566 cases die that forced declaration die (e.g. TAG_imported_module)
11567 is one of the children that we do not want to remove. */
11568 remove_AT (subr_die, DW_AT_declaration);
11569 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11573 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11574 add_AT_specification (subr_die, old_die);
11575 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11576 add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11577 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11578 != (unsigned) s.line)
11580 (subr_die, DW_AT_decl_line, s.line);
11585 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11587 if (TREE_PUBLIC (decl))
11588 add_AT_flag (subr_die, DW_AT_external, 1);
11590 add_name_and_src_coords_attributes (subr_die, decl);
11591 if (debug_info_level > DINFO_LEVEL_TERSE)
11593 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11594 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11595 0, 0, context_die);
11598 add_pure_or_virtual_attribute (subr_die, decl);
11599 if (DECL_ARTIFICIAL (decl))
11600 add_AT_flag (subr_die, DW_AT_artificial, 1);
11602 if (TREE_PROTECTED (decl))
11603 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11604 else if (TREE_PRIVATE (decl))
11605 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11610 if (!old_die || !get_AT (old_die, DW_AT_inline))
11612 add_AT_flag (subr_die, DW_AT_declaration, 1);
11614 /* The first time we see a member function, it is in the context of
11615 the class to which it belongs. We make sure of this by emitting
11616 the class first. The next time is the definition, which is
11617 handled above. The two may come from the same source text.
11619 Note that force_decl_die() forces function declaration die. It is
11620 later reused to represent definition. */
11621 equate_decl_number_to_die (decl, subr_die);
11624 else if (DECL_ABSTRACT (decl))
11626 if (DECL_DECLARED_INLINE_P (decl))
11628 if (cgraph_function_possibly_inlined_p (decl))
11629 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11631 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11635 if (cgraph_function_possibly_inlined_p (decl))
11636 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11638 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11641 equate_decl_number_to_die (decl, subr_die);
11643 else if (!DECL_EXTERNAL (decl))
11645 if (!old_die || !get_AT (old_die, DW_AT_inline))
11646 equate_decl_number_to_die (decl, subr_die);
11648 if (!flag_reorder_blocks_and_partition)
11650 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11651 current_function_funcdef_no);
11652 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11653 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11654 current_function_funcdef_no);
11655 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11657 add_pubname (decl, subr_die);
11658 add_arange (decl, subr_die);
11661 { /* Do nothing for now; maybe need to duplicate die, one for
11662 hot section and ond for cold section, then use the hot/cold
11663 section begin/end labels to generate the aranges... */
11665 add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
11666 add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
11667 add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
11668 add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
11670 add_pubname (decl, subr_die);
11671 add_arange (decl, subr_die);
11672 add_arange (decl, subr_die);
11676 #ifdef MIPS_DEBUGGING_INFO
11677 /* Add a reference to the FDE for this routine. */
11678 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11681 #ifdef DWARF2_UNWIND_INFO
11682 /* We define the "frame base" as the function's CFA. This is more
11683 convenient for several reasons: (1) It's stable across the prologue
11684 and epilogue, which makes it better than just a frame pointer,
11685 (2) With dwarf3, there exists a one-byte encoding that allows us
11686 to reference the .debug_frame data by proxy, but failing that,
11687 (3) We can at least reuse the code inspection and interpretation
11688 code that determines the CFA position at various points in the
11690 /* ??? Use some command-line or configury switch to enable the use
11691 of dwarf3 DW_OP_call_frame_cfa. At present there are no dwarf
11692 consumers that understand it; fall back to "pure" dwarf2 and
11693 convert the CFA data into a location list. */
11695 dw_loc_list_ref list = convert_cfa_to_loc_list ();
11696 if (list->dw_loc_next)
11697 add_AT_loc_list (subr_die, DW_AT_frame_base, list);
11699 add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
11702 /* Compute a displacement from the "steady-state frame pointer" to
11703 the CFA. The former is what all stack slots and argument slots
11704 will reference in the rtl; the later is what we've told the
11705 debugger about. We'll need to adjust all frame_base references
11706 by this displacement. */
11707 compute_frame_pointer_to_cfa_displacement ();
11709 /* For targets which support DWARF2, but not DWARF2 call-frame info,
11710 we just use the stack pointer or frame pointer. */
11711 /* ??? Should investigate getting better info via callbacks, or else
11712 by interpreting the IA-64 unwind info. */
11715 = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
11716 add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
11720 if (cfun->static_chain_decl)
11721 add_AT_location_description (subr_die, DW_AT_static_link,
11722 loc_descriptor_from_tree (cfun->static_chain_decl));
11725 /* Now output descriptions of the arguments for this function. This gets
11726 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11727 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11728 `...' at the end of the formal parameter list. In order to find out if
11729 there was a trailing ellipsis or not, we must instead look at the type
11730 associated with the FUNCTION_DECL. This will be a node of type
11731 FUNCTION_TYPE. If the chain of type nodes hanging off of this
11732 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11733 an ellipsis at the end. */
11735 /* In the case where we are describing a mere function declaration, all we
11736 need to do here (and all we *can* do here) is to describe the *types* of
11737 its formal parameters. */
11738 if (debug_info_level <= DINFO_LEVEL_TERSE)
11740 else if (declaration)
11741 gen_formal_types_die (decl, subr_die);
11744 /* Generate DIEs to represent all known formal parameters. */
11745 tree arg_decls = DECL_ARGUMENTS (decl);
11748 /* When generating DIEs, generate the unspecified_parameters DIE
11749 instead if we come across the arg "__builtin_va_alist" */
11750 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11751 if (TREE_CODE (parm) == PARM_DECL)
11753 if (DECL_NAME (parm)
11754 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11755 "__builtin_va_alist"))
11756 gen_unspecified_parameters_die (parm, subr_die);
11758 gen_decl_die (parm, subr_die);
11761 /* Decide whether we need an unspecified_parameters DIE at the end.
11762 There are 2 more cases to do this for: 1) the ansi ... declaration -
11763 this is detectable when the end of the arg list is not a
11764 void_type_node 2) an unprototyped function declaration (not a
11765 definition). This just means that we have no info about the
11766 parameters at all. */
11767 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11768 if (fn_arg_types != NULL)
11770 /* This is the prototyped case, check for.... */
11771 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11772 gen_unspecified_parameters_die (decl, subr_die);
11774 else if (DECL_INITIAL (decl) == NULL_TREE)
11775 gen_unspecified_parameters_die (decl, subr_die);
11778 /* Output Dwarf info for all of the stuff within the body of the function
11779 (if it has one - it may be just a declaration). */
11780 outer_scope = DECL_INITIAL (decl);
11782 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11783 a function. This BLOCK actually represents the outermost binding contour
11784 for the function, i.e. the contour in which the function's formal
11785 parameters and labels get declared. Curiously, it appears that the front
11786 end doesn't actually put the PARM_DECL nodes for the current function onto
11787 the BLOCK_VARS list for this outer scope, but are strung off of the
11788 DECL_ARGUMENTS list for the function instead.
11790 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11791 the LABEL_DECL nodes for the function however, and we output DWARF info
11792 for those in decls_for_scope. Just within the `outer_scope' there will be
11793 a BLOCK node representing the function's outermost pair of curly braces,
11794 and any blocks used for the base and member initializers of a C++
11795 constructor function. */
11796 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11798 /* Emit a DW_TAG_variable DIE for a named return value. */
11799 if (DECL_NAME (DECL_RESULT (decl)))
11800 gen_decl_die (DECL_RESULT (decl), subr_die);
11802 current_function_has_inlines = 0;
11803 decls_for_scope (outer_scope, subr_die, 0);
11805 #if 0 && defined (MIPS_DEBUGGING_INFO)
11806 if (current_function_has_inlines)
11808 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11809 if (! comp_unit_has_inlines)
11811 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11812 comp_unit_has_inlines = 1;
11817 /* Add the calling convention attribute if requested. */
11818 add_calling_convention_attribute (subr_die, TREE_TYPE (decl));
11822 /* Generate a DIE to represent a declared data object. */
11825 gen_variable_die (tree decl, dw_die_ref context_die)
11827 tree origin = decl_ultimate_origin (decl);
11828 dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11830 dw_die_ref old_die = lookup_decl_die (decl);
11831 int declaration = (DECL_EXTERNAL (decl)
11832 /* If DECL is COMDAT and has not actually been
11833 emitted, we cannot take its address; there
11834 might end up being no definition anywhere in
11835 the program. For example, consider the C++
11839 struct S { static const int i = 7; };
11844 int f() { return S<int>::i; }
11846 Here, S<int>::i is not DECL_EXTERNAL, but no
11847 definition is required, so the compiler will
11848 not emit a definition. */
11849 || (TREE_CODE (decl) == VAR_DECL
11850 && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
11851 || class_or_namespace_scope_p (context_die));
11853 if (origin != NULL)
11854 add_abstract_origin_attribute (var_die, origin);
11856 /* Loop unrolling can create multiple blocks that refer to the same
11857 static variable, so we must test for the DW_AT_declaration flag.
11859 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11860 copy decls and set the DECL_ABSTRACT flag on them instead of
11863 ??? Duplicated blocks have been rewritten to use .debug_ranges.
11865 ??? The declare_in_namespace support causes us to get two DIEs for one
11866 variable, both of which are declarations. We want to avoid considering
11867 one to be a specification, so we must test that this DIE is not a
11869 else if (old_die && TREE_STATIC (decl) && ! declaration
11870 && get_AT_flag (old_die, DW_AT_declaration) == 1)
11872 /* This is a definition of a C++ class level static. */
11873 add_AT_specification (var_die, old_die);
11874 if (DECL_NAME (decl))
11876 expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11877 unsigned file_index = lookup_filename (s.file);
11879 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11880 add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11882 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11883 != (unsigned) s.line)
11885 add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
11890 add_name_and_src_coords_attributes (var_die, decl);
11891 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11892 TREE_THIS_VOLATILE (decl), context_die);
11894 if (TREE_PUBLIC (decl))
11895 add_AT_flag (var_die, DW_AT_external, 1);
11897 if (DECL_ARTIFICIAL (decl))
11898 add_AT_flag (var_die, DW_AT_artificial, 1);
11900 if (TREE_PROTECTED (decl))
11901 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11902 else if (TREE_PRIVATE (decl))
11903 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11907 add_AT_flag (var_die, DW_AT_declaration, 1);
11909 if (DECL_ABSTRACT (decl) || declaration)
11910 equate_decl_number_to_die (decl, var_die);
11912 if (! declaration && ! DECL_ABSTRACT (decl))
11914 add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11915 add_pubname (decl, var_die);
11918 tree_add_const_value_attribute (var_die, decl);
11921 /* Generate a DIE to represent a label identifier. */
11924 gen_label_die (tree decl, dw_die_ref context_die)
11926 tree origin = decl_ultimate_origin (decl);
11927 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11929 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11931 if (origin != NULL)
11932 add_abstract_origin_attribute (lbl_die, origin);
11934 add_name_and_src_coords_attributes (lbl_die, decl);
11936 if (DECL_ABSTRACT (decl))
11937 equate_decl_number_to_die (decl, lbl_die);
11940 insn = DECL_RTL_IF_SET (decl);
11942 /* Deleted labels are programmer specified labels which have been
11943 eliminated because of various optimizations. We still emit them
11944 here so that it is possible to put breakpoints on them. */
11948 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11950 /* When optimization is enabled (via -O) some parts of the compiler
11951 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11952 represent source-level labels which were explicitly declared by
11953 the user. This really shouldn't be happening though, so catch
11954 it if it ever does happen. */
11955 gcc_assert (!INSN_DELETED_P (insn));
11957 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11958 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11963 /* A helper function for gen_inlined_subroutine_die. Add source coordinate
11964 attributes to the DIE for a block STMT, to describe where the inlined
11965 function was called from. This is similar to add_src_coords_attributes. */
11968 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
11970 expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
11971 unsigned file_index = lookup_filename (s.file);
11973 add_AT_unsigned (die, DW_AT_call_file, file_index);
11974 add_AT_unsigned (die, DW_AT_call_line, s.line);
11977 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
11978 Add low_pc and high_pc attributes to the DIE for a block STMT. */
11981 add_high_low_attributes (tree stmt, dw_die_ref die)
11983 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11985 if (BLOCK_FRAGMENT_CHAIN (stmt))
11989 add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
11991 chain = BLOCK_FRAGMENT_CHAIN (stmt);
11994 add_ranges (chain);
11995 chain = BLOCK_FRAGMENT_CHAIN (chain);
12002 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
12003 BLOCK_NUMBER (stmt));
12004 add_AT_lbl_id (die, DW_AT_low_pc, label);
12005 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
12006 BLOCK_NUMBER (stmt));
12007 add_AT_lbl_id (die, DW_AT_high_pc, label);
12011 /* Generate a DIE for a lexical block. */
12014 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12016 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12018 if (! BLOCK_ABSTRACT (stmt))
12019 add_high_low_attributes (stmt, stmt_die);
12021 decls_for_scope (stmt, stmt_die, depth);
12024 /* Generate a DIE for an inlined subprogram. */
12027 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12029 tree decl = block_ultimate_origin (stmt);
12031 /* Emit info for the abstract instance first, if we haven't yet. We
12032 must emit this even if the block is abstract, otherwise when we
12033 emit the block below (or elsewhere), we may end up trying to emit
12034 a die whose origin die hasn't been emitted, and crashing. */
12035 dwarf2out_abstract_function (decl);
12037 if (! BLOCK_ABSTRACT (stmt))
12039 dw_die_ref subr_die
12040 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12042 add_abstract_origin_attribute (subr_die, decl);
12043 add_high_low_attributes (stmt, subr_die);
12044 add_call_src_coords_attributes (stmt, subr_die);
12046 decls_for_scope (stmt, subr_die, depth);
12047 current_function_has_inlines = 1;
12050 /* We may get here if we're the outer block of function A that was
12051 inlined into function B that was inlined into function C. When
12052 generating debugging info for C, dwarf2out_abstract_function(B)
12053 would mark all inlined blocks as abstract, including this one.
12054 So, we wouldn't (and shouldn't) expect labels to be generated
12055 for this one. Instead, just emit debugging info for
12056 declarations within the block. This is particularly important
12057 in the case of initializers of arguments passed from B to us:
12058 if they're statement expressions containing declarations, we
12059 wouldn't generate dies for their abstract variables, and then,
12060 when generating dies for the real variables, we'd die (pun
12062 gen_lexical_block_die (stmt, context_die, depth);
12065 /* Generate a DIE for a field in a record, or structure. */
12068 gen_field_die (tree decl, dw_die_ref context_die)
12070 dw_die_ref decl_die;
12072 if (TREE_TYPE (decl) == error_mark_node)
12075 decl_die = new_die (DW_TAG_member, context_die, decl);
12076 add_name_and_src_coords_attributes (decl_die, decl);
12077 add_type_attribute (decl_die, member_declared_type (decl),
12078 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12081 if (DECL_BIT_FIELD_TYPE (decl))
12083 add_byte_size_attribute (decl_die, decl);
12084 add_bit_size_attribute (decl_die, decl);
12085 add_bit_offset_attribute (decl_die, decl);
12088 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12089 add_data_member_location_attribute (decl_die, decl);
12091 if (DECL_ARTIFICIAL (decl))
12092 add_AT_flag (decl_die, DW_AT_artificial, 1);
12094 if (TREE_PROTECTED (decl))
12095 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12096 else if (TREE_PRIVATE (decl))
12097 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12099 /* Equate decl number to die, so that we can look up this decl later on. */
12100 equate_decl_number_to_die (decl, decl_die);
12104 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12105 Use modified_type_die instead.
12106 We keep this code here just in case these types of DIEs may be needed to
12107 represent certain things in other languages (e.g. Pascal) someday. */
12110 gen_pointer_type_die (tree type, dw_die_ref context_die)
12113 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12115 equate_type_number_to_die (type, ptr_die);
12116 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12117 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12120 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12121 Use modified_type_die instead.
12122 We keep this code here just in case these types of DIEs may be needed to
12123 represent certain things in other languages (e.g. Pascal) someday. */
12126 gen_reference_type_die (tree type, dw_die_ref context_die)
12129 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12131 equate_type_number_to_die (type, ref_die);
12132 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12133 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12137 /* Generate a DIE for a pointer to a member type. */
12140 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12143 = new_die (DW_TAG_ptr_to_member_type,
12144 scope_die_for (type, context_die), type);
12146 equate_type_number_to_die (type, ptr_die);
12147 add_AT_die_ref (ptr_die, DW_AT_containing_type,
12148 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12149 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12152 /* Generate the DIE for the compilation unit. */
12155 gen_compile_unit_die (const char *filename)
12158 char producer[250];
12159 const char *language_string = lang_hooks.name;
12162 die = new_die (DW_TAG_compile_unit, NULL, NULL);
12166 add_name_attribute (die, filename);
12167 /* Don't add cwd for <built-in>. */
12168 if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
12169 add_comp_dir_attribute (die);
12172 sprintf (producer, "%s %s", language_string, version_string);
12174 #ifdef MIPS_DEBUGGING_INFO
12175 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12176 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12177 not appear in the producer string, the debugger reaches the conclusion
12178 that the object file is stripped and has no debugging information.
12179 To get the MIPS/SGI debugger to believe that there is debugging
12180 information in the object file, we add a -g to the producer string. */
12181 if (debug_info_level > DINFO_LEVEL_TERSE)
12182 strcat (producer, " -g");
12185 add_AT_string (die, DW_AT_producer, producer);
12187 if (strcmp (language_string, "GNU C++") == 0)
12188 language = DW_LANG_C_plus_plus;
12189 else if (strcmp (language_string, "GNU Ada") == 0)
12190 language = DW_LANG_Ada95;
12191 else if (strcmp (language_string, "GNU F77") == 0)
12192 language = DW_LANG_Fortran77;
12193 else if (strcmp (language_string, "GNU F95") == 0)
12194 language = DW_LANG_Fortran95;
12195 else if (strcmp (language_string, "GNU Pascal") == 0)
12196 language = DW_LANG_Pascal83;
12197 else if (strcmp (language_string, "GNU Java") == 0)
12198 language = DW_LANG_Java;
12200 language = DW_LANG_C89;
12202 add_AT_unsigned (die, DW_AT_language, language);
12206 /* Generate a DIE for a string type. */
12209 gen_string_type_die (tree type, dw_die_ref context_die)
12211 dw_die_ref type_die
12212 = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
12214 equate_type_number_to_die (type, type_die);
12216 /* ??? Fudge the string length attribute for now.
12217 TODO: add string length info. */
12219 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
12220 bound_representation (upper_bound, 0, 'u');
12224 /* Generate the DIE for a base class. */
12227 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12229 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12231 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12232 add_data_member_location_attribute (die, binfo);
12234 if (BINFO_VIRTUAL_P (binfo))
12235 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12237 if (access == access_public_node)
12238 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12239 else if (access == access_protected_node)
12240 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12243 /* Generate a DIE for a class member. */
12246 gen_member_die (tree type, dw_die_ref context_die)
12249 tree binfo = TYPE_BINFO (type);
12252 /* If this is not an incomplete type, output descriptions of each of its
12253 members. Note that as we output the DIEs necessary to represent the
12254 members of this record or union type, we will also be trying to output
12255 DIEs to represent the *types* of those members. However the `type'
12256 function (above) will specifically avoid generating type DIEs for member
12257 types *within* the list of member DIEs for this (containing) type except
12258 for those types (of members) which are explicitly marked as also being
12259 members of this (containing) type themselves. The g++ front- end can
12260 force any given type to be treated as a member of some other (containing)
12261 type by setting the TYPE_CONTEXT of the given (member) type to point to
12262 the TREE node representing the appropriate (containing) type. */
12264 /* First output info about the base classes. */
12267 VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
12271 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
12272 gen_inheritance_die (base,
12273 (accesses ? VEC_index (tree, accesses, i)
12274 : access_public_node), context_die);
12277 /* Now output info about the data members and type members. */
12278 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
12280 /* If we thought we were generating minimal debug info for TYPE
12281 and then changed our minds, some of the member declarations
12282 may have already been defined. Don't define them again, but
12283 do put them in the right order. */
12285 child = lookup_decl_die (member);
12287 splice_child_die (context_die, child);
12289 gen_decl_die (member, context_die);
12292 /* Now output info about the function members (if any). */
12293 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
12295 /* Don't include clones in the member list. */
12296 if (DECL_ABSTRACT_ORIGIN (member))
12299 child = lookup_decl_die (member);
12301 splice_child_die (context_die, child);
12303 gen_decl_die (member, context_die);
12307 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
12308 is set, we pretend that the type was never defined, so we only get the
12309 member DIEs needed by later specification DIEs. */
12312 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
12314 dw_die_ref type_die = lookup_type_die (type);
12315 dw_die_ref scope_die = 0;
12317 int complete = (TYPE_SIZE (type)
12318 && (! TYPE_STUB_DECL (type)
12319 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
12320 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
12322 if (type_die && ! complete)
12325 if (TYPE_CONTEXT (type) != NULL_TREE
12326 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12327 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
12330 scope_die = scope_die_for (type, context_die);
12332 if (! type_die || (nested && scope_die == comp_unit_die))
12333 /* First occurrence of type or toplevel definition of nested class. */
12335 dw_die_ref old_die = type_die;
12337 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
12338 ? DW_TAG_structure_type : DW_TAG_union_type,
12340 equate_type_number_to_die (type, type_die);
12342 add_AT_specification (type_die, old_die);
12344 add_name_attribute (type_die, type_tag (type));
12347 remove_AT (type_die, DW_AT_declaration);
12349 /* If this type has been completed, then give it a byte_size attribute and
12350 then give a list of members. */
12351 if (complete && !ns_decl)
12353 /* Prevent infinite recursion in cases where the type of some member of
12354 this type is expressed in terms of this type itself. */
12355 TREE_ASM_WRITTEN (type) = 1;
12356 add_byte_size_attribute (type_die, type);
12357 if (TYPE_STUB_DECL (type) != NULL_TREE)
12358 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
12360 /* If the first reference to this type was as the return type of an
12361 inline function, then it may not have a parent. Fix this now. */
12362 if (type_die->die_parent == NULL)
12363 add_child_die (scope_die, type_die);
12365 push_decl_scope (type);
12366 gen_member_die (type, type_die);
12369 /* GNU extension: Record what type our vtable lives in. */
12370 if (TYPE_VFIELD (type))
12372 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
12374 gen_type_die (vtype, context_die);
12375 add_AT_die_ref (type_die, DW_AT_containing_type,
12376 lookup_type_die (vtype));
12381 add_AT_flag (type_die, DW_AT_declaration, 1);
12383 /* We don't need to do this for function-local types. */
12384 if (TYPE_STUB_DECL (type)
12385 && ! decl_function_context (TYPE_STUB_DECL (type)))
12386 VEC_safe_push (tree, gc, incomplete_types, type);
12390 /* Generate a DIE for a subroutine _type_. */
12393 gen_subroutine_type_die (tree type, dw_die_ref context_die)
12395 tree return_type = TREE_TYPE (type);
12396 dw_die_ref subr_die
12397 = new_die (DW_TAG_subroutine_type,
12398 scope_die_for (type, context_die), type);
12400 equate_type_number_to_die (type, subr_die);
12401 add_prototyped_attribute (subr_die, type);
12402 add_type_attribute (subr_die, return_type, 0, 0, context_die);
12403 gen_formal_types_die (type, subr_die);
12406 /* Generate a DIE for a type definition. */
12409 gen_typedef_die (tree decl, dw_die_ref context_die)
12411 dw_die_ref type_die;
12414 if (TREE_ASM_WRITTEN (decl))
12417 TREE_ASM_WRITTEN (decl) = 1;
12418 type_die = new_die (DW_TAG_typedef, context_die, decl);
12419 origin = decl_ultimate_origin (decl);
12420 if (origin != NULL)
12421 add_abstract_origin_attribute (type_die, origin);
12426 add_name_and_src_coords_attributes (type_die, decl);
12427 if (DECL_ORIGINAL_TYPE (decl))
12429 type = DECL_ORIGINAL_TYPE (decl);
12431 gcc_assert (type != TREE_TYPE (decl));
12432 equate_type_number_to_die (TREE_TYPE (decl), type_die);
12435 type = TREE_TYPE (decl);
12437 add_type_attribute (type_die, type, TREE_READONLY (decl),
12438 TREE_THIS_VOLATILE (decl), context_die);
12441 if (DECL_ABSTRACT (decl))
12442 equate_decl_number_to_die (decl, type_die);
12445 /* Generate a type description DIE. */
12448 gen_type_die (tree type, dw_die_ref context_die)
12452 if (type == NULL_TREE || type == error_mark_node)
12455 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12456 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
12458 if (TREE_ASM_WRITTEN (type))
12461 /* Prevent broken recursion; we can't hand off to the same type. */
12462 gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
12464 TREE_ASM_WRITTEN (type) = 1;
12465 gen_decl_die (TYPE_NAME (type), context_die);
12469 /* We are going to output a DIE to represent the unqualified version
12470 of this type (i.e. without any const or volatile qualifiers) so
12471 get the main variant (i.e. the unqualified version) of this type
12472 now. (Vectors are special because the debugging info is in the
12473 cloned type itself). */
12474 if (TREE_CODE (type) != VECTOR_TYPE)
12475 type = type_main_variant (type);
12477 if (TREE_ASM_WRITTEN (type))
12480 switch (TREE_CODE (type))
12486 case REFERENCE_TYPE:
12487 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
12488 ensures that the gen_type_die recursion will terminate even if the
12489 type is recursive. Recursive types are possible in Ada. */
12490 /* ??? We could perhaps do this for all types before the switch
12492 TREE_ASM_WRITTEN (type) = 1;
12494 /* For these types, all that is required is that we output a DIE (or a
12495 set of DIEs) to represent the "basis" type. */
12496 gen_type_die (TREE_TYPE (type), context_die);
12500 /* This code is used for C++ pointer-to-data-member types.
12501 Output a description of the relevant class type. */
12502 gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
12504 /* Output a description of the type of the object pointed to. */
12505 gen_type_die (TREE_TYPE (type), context_die);
12507 /* Now output a DIE to represent this pointer-to-data-member type
12509 gen_ptr_to_mbr_type_die (type, context_die);
12512 case FUNCTION_TYPE:
12513 /* Force out return type (in case it wasn't forced out already). */
12514 gen_type_die (TREE_TYPE (type), context_die);
12515 gen_subroutine_type_die (type, context_die);
12519 /* Force out return type (in case it wasn't forced out already). */
12520 gen_type_die (TREE_TYPE (type), context_die);
12521 gen_subroutine_type_die (type, context_die);
12525 if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
12527 gen_type_die (TREE_TYPE (type), context_die);
12528 gen_string_type_die (type, context_die);
12531 gen_array_type_die (type, context_die);
12535 gen_array_type_die (type, context_die);
12538 case ENUMERAL_TYPE:
12541 case QUAL_UNION_TYPE:
12542 /* If this is a nested type whose containing class hasn't been written
12543 out yet, writing it out will cover this one, too. This does not apply
12544 to instantiations of member class templates; they need to be added to
12545 the containing class as they are generated. FIXME: This hurts the
12546 idea of combining type decls from multiple TUs, since we can't predict
12547 what set of template instantiations we'll get. */
12548 if (TYPE_CONTEXT (type)
12549 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12550 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12552 gen_type_die (TYPE_CONTEXT (type), context_die);
12554 if (TREE_ASM_WRITTEN (type))
12557 /* If that failed, attach ourselves to the stub. */
12558 push_decl_scope (TYPE_CONTEXT (type));
12559 context_die = lookup_type_die (TYPE_CONTEXT (type));
12564 declare_in_namespace (type, context_die);
12568 if (TREE_CODE (type) == ENUMERAL_TYPE)
12569 gen_enumeration_type_die (type, context_die);
12571 gen_struct_or_union_type_die (type, context_die);
12576 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12577 it up if it is ever completed. gen_*_type_die will set it for us
12578 when appropriate. */
12587 /* No DIEs needed for fundamental types. */
12591 /* No Dwarf representation currently defined. */
12595 gcc_unreachable ();
12598 TREE_ASM_WRITTEN (type) = 1;
12601 /* Generate a DIE for a tagged type instantiation. */
12604 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12606 if (type == NULL_TREE || type == error_mark_node)
12609 /* We are going to output a DIE to represent the unqualified version of
12610 this type (i.e. without any const or volatile qualifiers) so make sure
12611 that we have the main variant (i.e. the unqualified version) of this
12613 gcc_assert (type == type_main_variant (type));
12615 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12616 an instance of an unresolved type. */
12618 switch (TREE_CODE (type))
12623 case ENUMERAL_TYPE:
12624 gen_inlined_enumeration_type_die (type, context_die);
12628 gen_inlined_structure_type_die (type, context_die);
12632 case QUAL_UNION_TYPE:
12633 gen_inlined_union_type_die (type, context_die);
12637 gcc_unreachable ();
12641 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12642 things which are local to the given block. */
12645 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12647 int must_output_die = 0;
12650 enum tree_code origin_code;
12652 /* Ignore blocks that are NULL. */
12653 if (stmt == NULL_TREE)
12656 /* If the block is one fragment of a non-contiguous block, do not
12657 process the variables, since they will have been done by the
12658 origin block. Do process subblocks. */
12659 if (BLOCK_FRAGMENT_ORIGIN (stmt))
12663 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12664 gen_block_die (sub, context_die, depth + 1);
12669 /* Determine the "ultimate origin" of this block. This block may be an
12670 inlined instance of an inlined instance of inline function, so we have
12671 to trace all of the way back through the origin chain to find out what
12672 sort of node actually served as the original seed for the creation of
12673 the current block. */
12674 origin = block_ultimate_origin (stmt);
12675 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12677 /* Determine if we need to output any Dwarf DIEs at all to represent this
12679 if (origin_code == FUNCTION_DECL)
12680 /* The outer scopes for inlinings *must* always be represented. We
12681 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
12682 must_output_die = 1;
12685 /* In the case where the current block represents an inlining of the
12686 "body block" of an inline function, we must *NOT* output any DIE for
12687 this block because we have already output a DIE to represent the whole
12688 inlined function scope and the "body block" of any function doesn't
12689 really represent a different scope according to ANSI C rules. So we
12690 check here to make sure that this block does not represent a "body
12691 block inlining" before trying to set the MUST_OUTPUT_DIE flag. */
12692 if (! is_body_block (origin ? origin : stmt))
12694 /* Determine if this block directly contains any "significant"
12695 local declarations which we will need to output DIEs for. */
12696 if (debug_info_level > DINFO_LEVEL_TERSE)
12697 /* We are not in terse mode so *any* local declaration counts
12698 as being a "significant" one. */
12699 must_output_die = (BLOCK_VARS (stmt) != NULL
12700 && (TREE_USED (stmt)
12701 || TREE_ASM_WRITTEN (stmt)
12702 || BLOCK_ABSTRACT (stmt)));
12704 /* We are in terse mode, so only local (nested) function
12705 definitions count as "significant" local declarations. */
12706 for (decl = BLOCK_VARS (stmt);
12707 decl != NULL; decl = TREE_CHAIN (decl))
12708 if (TREE_CODE (decl) == FUNCTION_DECL
12709 && DECL_INITIAL (decl))
12711 must_output_die = 1;
12717 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12718 DIE for any block which contains no significant local declarations at
12719 all. Rather, in such cases we just call `decls_for_scope' so that any
12720 needed Dwarf info for any sub-blocks will get properly generated. Note
12721 that in terse mode, our definition of what constitutes a "significant"
12722 local declaration gets restricted to include only inlined function
12723 instances and local (nested) function definitions. */
12724 if (must_output_die)
12726 if (origin_code == FUNCTION_DECL)
12727 gen_inlined_subroutine_die (stmt, context_die, depth);
12729 gen_lexical_block_die (stmt, context_die, depth);
12732 decls_for_scope (stmt, context_die, depth);
12735 /* Generate all of the decls declared within a given scope and (recursively)
12736 all of its sub-blocks. */
12739 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12744 /* Ignore NULL blocks. */
12745 if (stmt == NULL_TREE)
12748 if (TREE_USED (stmt))
12750 /* Output the DIEs to represent all of the data objects and typedefs
12751 declared directly within this block but not within any nested
12752 sub-blocks. Also, nested function and tag DIEs have been
12753 generated with a parent of NULL; fix that up now. */
12754 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12758 if (TREE_CODE (decl) == FUNCTION_DECL)
12759 die = lookup_decl_die (decl);
12760 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12761 die = lookup_type_die (TREE_TYPE (decl));
12765 if (die != NULL && die->die_parent == NULL)
12766 add_child_die (context_die, die);
12767 /* Do not produce debug information for static variables since
12768 these might be optimized out. We are called for these later
12769 in cgraph_varpool_analyze_pending_decls. */
12770 if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
12773 gen_decl_die (decl, context_die);
12777 /* If we're at -g1, we're not interested in subblocks. */
12778 if (debug_info_level <= DINFO_LEVEL_TERSE)
12781 /* Output the DIEs to represent all sub-blocks (and the items declared
12782 therein) of this block. */
12783 for (subblocks = BLOCK_SUBBLOCKS (stmt);
12785 subblocks = BLOCK_CHAIN (subblocks))
12786 gen_block_die (subblocks, context_die, depth + 1);
12789 /* Is this a typedef we can avoid emitting? */
12792 is_redundant_typedef (tree decl)
12794 if (TYPE_DECL_IS_STUB (decl))
12797 if (DECL_ARTIFICIAL (decl)
12798 && DECL_CONTEXT (decl)
12799 && is_tagged_type (DECL_CONTEXT (decl))
12800 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12801 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12802 /* Also ignore the artificial member typedef for the class name. */
12808 /* Returns the DIE for decl. A DIE will always be returned. */
12811 force_decl_die (tree decl)
12813 dw_die_ref decl_die;
12814 unsigned saved_external_flag;
12815 tree save_fn = NULL_TREE;
12816 decl_die = lookup_decl_die (decl);
12819 dw_die_ref context_die;
12820 tree decl_context = DECL_CONTEXT (decl);
12823 /* Find die that represents this context. */
12824 if (TYPE_P (decl_context))
12825 context_die = force_type_die (decl_context);
12827 context_die = force_decl_die (decl_context);
12830 context_die = comp_unit_die;
12832 decl_die = lookup_decl_die (decl);
12836 switch (TREE_CODE (decl))
12838 case FUNCTION_DECL:
12839 /* Clear current_function_decl, so that gen_subprogram_die thinks
12840 that this is a declaration. At this point, we just want to force
12841 declaration die. */
12842 save_fn = current_function_decl;
12843 current_function_decl = NULL_TREE;
12844 gen_subprogram_die (decl, context_die);
12845 current_function_decl = save_fn;
12849 /* Set external flag to force declaration die. Restore it after
12850 gen_decl_die() call. */
12851 saved_external_flag = DECL_EXTERNAL (decl);
12852 DECL_EXTERNAL (decl) = 1;
12853 gen_decl_die (decl, context_die);
12854 DECL_EXTERNAL (decl) = saved_external_flag;
12857 case NAMESPACE_DECL:
12858 dwarf2out_decl (decl);
12862 gcc_unreachable ();
12865 /* We should be able to find the DIE now. */
12867 decl_die = lookup_decl_die (decl);
12868 gcc_assert (decl_die);
12874 /* Returns the DIE for TYPE. A DIE is always returned. */
12877 force_type_die (tree type)
12879 dw_die_ref type_die;
12881 type_die = lookup_type_die (type);
12884 dw_die_ref context_die;
12885 if (TYPE_CONTEXT (type))
12887 if (TYPE_P (TYPE_CONTEXT (type)))
12888 context_die = force_type_die (TYPE_CONTEXT (type));
12890 context_die = force_decl_die (TYPE_CONTEXT (type));
12893 context_die = comp_unit_die;
12895 type_die = lookup_type_die (type);
12898 gen_type_die (type, context_die);
12899 type_die = lookup_type_die (type);
12900 gcc_assert (type_die);
12905 /* Force out any required namespaces to be able to output DECL,
12906 and return the new context_die for it, if it's changed. */
12909 setup_namespace_context (tree thing, dw_die_ref context_die)
12911 tree context = (DECL_P (thing)
12912 ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
12913 if (context && TREE_CODE (context) == NAMESPACE_DECL)
12914 /* Force out the namespace. */
12915 context_die = force_decl_die (context);
12917 return context_die;
12920 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12921 type) within its namespace, if appropriate.
12923 For compatibility with older debuggers, namespace DIEs only contain
12924 declarations; all definitions are emitted at CU scope. */
12927 declare_in_namespace (tree thing, dw_die_ref context_die)
12929 dw_die_ref ns_context;
12931 if (debug_info_level <= DINFO_LEVEL_TERSE)
12934 /* If this decl is from an inlined function, then don't try to emit it in its
12935 namespace, as we will get confused. It would have already been emitted
12936 when the abstract instance of the inline function was emitted anyways. */
12937 if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
12940 ns_context = setup_namespace_context (thing, context_die);
12942 if (ns_context != context_die)
12944 if (DECL_P (thing))
12945 gen_decl_die (thing, ns_context);
12947 gen_type_die (thing, ns_context);
12951 /* Generate a DIE for a namespace or namespace alias. */
12954 gen_namespace_die (tree decl)
12956 dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12958 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12959 they are an alias of. */
12960 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12962 /* Output a real namespace. */
12963 dw_die_ref namespace_die
12964 = new_die (DW_TAG_namespace, context_die, decl);
12965 add_name_and_src_coords_attributes (namespace_die, decl);
12966 equate_decl_number_to_die (decl, namespace_die);
12970 /* Output a namespace alias. */
12972 /* Force out the namespace we are an alias of, if necessary. */
12973 dw_die_ref origin_die
12974 = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
12976 /* Now create the namespace alias DIE. */
12977 dw_die_ref namespace_die
12978 = new_die (DW_TAG_imported_declaration, context_die, decl);
12979 add_name_and_src_coords_attributes (namespace_die, decl);
12980 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12981 equate_decl_number_to_die (decl, namespace_die);
12985 /* Generate Dwarf debug information for a decl described by DECL. */
12988 gen_decl_die (tree decl, dw_die_ref context_die)
12992 if (DECL_P (decl) && DECL_IGNORED_P (decl))
12995 switch (TREE_CODE (decl))
13001 /* The individual enumerators of an enum type get output when we output
13002 the Dwarf representation of the relevant enum type itself. */
13005 case FUNCTION_DECL:
13006 /* Don't output any DIEs to represent mere function declarations,
13007 unless they are class members or explicit block externs. */
13008 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13009 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13014 /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13015 on local redeclarations of global functions. That seems broken. */
13016 if (current_function_decl != decl)
13017 /* This is only a declaration. */;
13020 /* If we're emitting a clone, emit info for the abstract instance. */
13021 if (DECL_ORIGIN (decl) != decl)
13022 dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13024 /* If we're emitting an out-of-line copy of an inline function,
13025 emit info for the abstract instance and set up to refer to it. */
13026 else if (cgraph_function_possibly_inlined_p (decl)
13027 && ! DECL_ABSTRACT (decl)
13028 && ! class_or_namespace_scope_p (context_die)
13029 /* dwarf2out_abstract_function won't emit a die if this is just
13030 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
13031 that case, because that works only if we have a die. */
13032 && DECL_INITIAL (decl) != NULL_TREE)
13034 dwarf2out_abstract_function (decl);
13035 set_decl_origin_self (decl);
13038 /* Otherwise we're emitting the primary DIE for this decl. */
13039 else if (debug_info_level > DINFO_LEVEL_TERSE)
13041 /* Before we describe the FUNCTION_DECL itself, make sure that we
13042 have described its return type. */
13043 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13045 /* And its virtual context. */
13046 if (DECL_VINDEX (decl) != NULL_TREE)
13047 gen_type_die (DECL_CONTEXT (decl), context_die);
13049 /* And its containing type. */
13050 origin = decl_class_context (decl);
13051 if (origin != NULL_TREE)
13052 gen_type_die_for_member (origin, decl, context_die);
13054 /* And its containing namespace. */
13055 declare_in_namespace (decl, context_die);
13058 /* Now output a DIE to represent the function itself. */
13059 gen_subprogram_die (decl, context_die);
13063 /* If we are in terse mode, don't generate any DIEs to represent any
13064 actual typedefs. */
13065 if (debug_info_level <= DINFO_LEVEL_TERSE)
13068 /* In the special case of a TYPE_DECL node representing the declaration
13069 of some type tag, if the given TYPE_DECL is marked as having been
13070 instantiated from some other (original) TYPE_DECL node (e.g. one which
13071 was generated within the original definition of an inline function) we
13072 have to generate a special (abbreviated) DW_TAG_structure_type,
13073 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
13074 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
13076 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13080 if (is_redundant_typedef (decl))
13081 gen_type_die (TREE_TYPE (decl), context_die);
13083 /* Output a DIE to represent the typedef itself. */
13084 gen_typedef_die (decl, context_die);
13088 if (debug_info_level >= DINFO_LEVEL_NORMAL)
13089 gen_label_die (decl, context_die);
13094 /* If we are in terse mode, don't generate any DIEs to represent any
13095 variable declarations or definitions. */
13096 if (debug_info_level <= DINFO_LEVEL_TERSE)
13099 /* Output any DIEs that are needed to specify the type of this data
13101 gen_type_die (TREE_TYPE (decl), context_die);
13103 /* And its containing type. */
13104 origin = decl_class_context (decl);
13105 if (origin != NULL_TREE)
13106 gen_type_die_for_member (origin, decl, context_die);
13108 /* And its containing namespace. */
13109 declare_in_namespace (decl, context_die);
13111 /* Now output the DIE to represent the data object itself. This gets
13112 complicated because of the possibility that the VAR_DECL really
13113 represents an inlined instance of a formal parameter for an inline
13115 origin = decl_ultimate_origin (decl);
13116 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13117 gen_formal_parameter_die (decl, context_die);
13119 gen_variable_die (decl, context_die);
13123 /* Ignore the nameless fields that are used to skip bits but handle C++
13124 anonymous unions and structs. */
13125 if (DECL_NAME (decl) != NULL_TREE
13126 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13127 || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13129 gen_type_die (member_declared_type (decl), context_die);
13130 gen_field_die (decl, context_die);
13135 gen_type_die (TREE_TYPE (decl), context_die);
13136 gen_formal_parameter_die (decl, context_die);
13139 case NAMESPACE_DECL:
13140 gen_namespace_die (decl);
13144 /* Probably some frontend-internal decl. Assume we don't care. */
13145 gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13150 /* Add Ada "use" clause information for SGI Workshop debugger. */
13153 dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
13155 unsigned int file_index;
13157 if (filename != NULL)
13159 dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL);
13160 tree context_list_decl
13161 = build_decl (LABEL_DECL, get_identifier (context_list),
13164 TREE_PUBLIC (context_list_decl) = TRUE;
13165 add_name_attribute (unit_die, context_list);
13166 file_index = lookup_filename (filename);
13167 add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
13168 add_pubname (context_list_decl, unit_die);
13172 /* Output debug information for global decl DECL. Called from toplev.c after
13173 compilation proper has finished. */
13176 dwarf2out_global_decl (tree decl)
13178 /* Output DWARF2 information for file-scope tentative data object
13179 declarations, file-scope (extern) function declarations (which had no
13180 corresponding body) and file-scope tagged type declarations and
13181 definitions which have not yet been forced out. */
13182 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13183 dwarf2out_decl (decl);
13186 /* Output debug information for type decl DECL. Called from toplev.c
13187 and from language front ends (to record built-in types). */
13189 dwarf2out_type_decl (tree decl, int local)
13192 dwarf2out_decl (decl);
13195 /* Output debug information for imported module or decl. */
13198 dwarf2out_imported_module_or_decl (tree decl, tree context)
13200 dw_die_ref imported_die, at_import_die;
13201 dw_die_ref scope_die;
13202 unsigned file_index;
13203 expanded_location xloc;
13205 if (debug_info_level <= DINFO_LEVEL_TERSE)
13210 /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13211 We need decl DIE for reference and scope die. First, get DIE for the decl
13214 /* Get the scope die for decl context. Use comp_unit_die for global module
13215 or decl. If die is not found for non globals, force new die. */
13217 scope_die = comp_unit_die;
13218 else if (TYPE_P (context))
13219 scope_die = force_type_die (context);
13221 scope_die = force_decl_die (context);
13223 /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE. */
13224 if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13225 at_import_die = force_type_die (TREE_TYPE (decl));
13228 at_import_die = lookup_decl_die (decl);
13229 if (!at_import_die)
13231 /* If we're trying to avoid duplicate debug info, we may not have
13232 emitted the member decl for this field. Emit it now. */
13233 if (TREE_CODE (decl) == FIELD_DECL)
13235 tree type = DECL_CONTEXT (decl);
13236 dw_die_ref type_context_die;
13238 if (TYPE_CONTEXT (type))
13239 if (TYPE_P (TYPE_CONTEXT (type)))
13240 type_context_die = force_type_die (TYPE_CONTEXT (type));
13242 type_context_die = force_decl_die (TYPE_CONTEXT (type));
13244 type_context_die = comp_unit_die;
13245 gen_type_die_for_member (type, decl, type_context_die);
13247 at_import_die = force_decl_die (decl);
13251 /* OK, now we have DIEs for decl as well as scope. Emit imported die. */
13252 if (TREE_CODE (decl) == NAMESPACE_DECL)
13253 imported_die = new_die (DW_TAG_imported_module, scope_die, context);
13255 imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
13257 xloc = expand_location (input_location);
13258 file_index = lookup_filename (xloc.file);
13259 add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
13260 add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
13261 add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
13264 /* Write the debugging output for DECL. */
13267 dwarf2out_decl (tree decl)
13269 dw_die_ref context_die = comp_unit_die;
13271 switch (TREE_CODE (decl))
13276 case FUNCTION_DECL:
13277 /* What we would really like to do here is to filter out all mere
13278 file-scope declarations of file-scope functions which are never
13279 referenced later within this translation unit (and keep all of ones
13280 that *are* referenced later on) but we aren't clairvoyant, so we have
13281 no idea which functions will be referenced in the future (i.e. later
13282 on within the current translation unit). So here we just ignore all
13283 file-scope function declarations which are not also definitions. If
13284 and when the debugger needs to know something about these functions,
13285 it will have to hunt around and find the DWARF information associated
13286 with the definition of the function.
13288 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
13289 nodes represent definitions and which ones represent mere
13290 declarations. We have to check DECL_INITIAL instead. That's because
13291 the C front-end supports some weird semantics for "extern inline"
13292 function definitions. These can get inlined within the current
13293 translation unit (and thus, we need to generate Dwarf info for their
13294 abstract instances so that the Dwarf info for the concrete inlined
13295 instances can have something to refer to) but the compiler never
13296 generates any out-of-lines instances of such things (despite the fact
13297 that they *are* definitions).
13299 The important point is that the C front-end marks these "extern
13300 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
13301 them anyway. Note that the C++ front-end also plays some similar games
13302 for inline function definitions appearing within include files which
13303 also contain `#pragma interface' pragmas. */
13304 if (DECL_INITIAL (decl) == NULL_TREE)
13307 /* If we're a nested function, initially use a parent of NULL; if we're
13308 a plain function, this will be fixed up in decls_for_scope. If
13309 we're a method, it will be ignored, since we already have a DIE. */
13310 if (decl_function_context (decl)
13311 /* But if we're in terse mode, we don't care about scope. */
13312 && debug_info_level > DINFO_LEVEL_TERSE)
13313 context_die = NULL;
13317 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
13318 declaration and if the declaration was never even referenced from
13319 within this entire compilation unit. We suppress these DIEs in
13320 order to save space in the .debug section (by eliminating entries
13321 which are probably useless). Note that we must not suppress
13322 block-local extern declarations (whether used or not) because that
13323 would screw-up the debugger's name lookup mechanism and cause it to
13324 miss things which really ought to be in scope at a given point. */
13325 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
13328 /* For local statics lookup proper context die. */
13329 if (TREE_STATIC (decl) && decl_function_context (decl))
13330 context_die = lookup_decl_die (DECL_CONTEXT (decl));
13332 /* If we are in terse mode, don't generate any DIEs to represent any
13333 variable declarations or definitions. */
13334 if (debug_info_level <= DINFO_LEVEL_TERSE)
13338 case NAMESPACE_DECL:
13339 if (debug_info_level <= DINFO_LEVEL_TERSE)
13341 if (lookup_decl_die (decl) != NULL)
13346 /* Don't emit stubs for types unless they are needed by other DIEs. */
13347 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
13350 /* Don't bother trying to generate any DIEs to represent any of the
13351 normal built-in types for the language we are compiling. */
13352 if (DECL_IS_BUILTIN (decl))
13354 /* OK, we need to generate one for `bool' so GDB knows what type
13355 comparisons have. */
13356 if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
13357 == DW_LANG_C_plus_plus)
13358 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
13359 && ! DECL_IGNORED_P (decl))
13360 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
13365 /* If we are in terse mode, don't generate any DIEs for types. */
13366 if (debug_info_level <= DINFO_LEVEL_TERSE)
13369 /* If we're a function-scope tag, initially use a parent of NULL;
13370 this will be fixed up in decls_for_scope. */
13371 if (decl_function_context (decl))
13372 context_die = NULL;
13380 gen_decl_die (decl, context_die);
13383 /* Output a marker (i.e. a label) for the beginning of the generated code for
13384 a lexical block. */
13387 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
13388 unsigned int blocknum)
13390 switch_to_section (current_function_section ());
13391 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
13394 /* Output a marker (i.e. a label) for the end of the generated code for a
13398 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
13400 switch_to_section (current_function_section ());
13401 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
13404 /* Returns nonzero if it is appropriate not to emit any debugging
13405 information for BLOCK, because it doesn't contain any instructions.
13407 Don't allow this for blocks with nested functions or local classes
13408 as we would end up with orphans, and in the presence of scheduling
13409 we may end up calling them anyway. */
13412 dwarf2out_ignore_block (tree block)
13416 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
13417 if (TREE_CODE (decl) == FUNCTION_DECL
13418 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
13424 /* Lookup FILE_NAME (in the list of filenames that we know about here in
13425 dwarf2out.c) and return its "index". The index of each (known) filename is
13426 just a unique number which is associated with only that one filename. We
13427 need such numbers for the sake of generating labels (in the .debug_sfnames
13428 section) and references to those files numbers (in the .debug_srcinfo
13429 and.debug_macinfo sections). If the filename given as an argument is not
13430 found in our current list, add it to the list and assign it the next
13431 available unique index number. In order to speed up searches, we remember
13432 the index of the filename was looked up last. This handles the majority of
13436 lookup_filename (const char *file_name)
13439 char *save_file_name;
13441 /* Check to see if the file name that was searched on the previous
13442 call matches this file name. If so, return the index. */
13443 if (file_table_last_lookup_index != 0)
13446 = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
13447 if (strcmp (file_name, last) == 0)
13448 return file_table_last_lookup_index;
13451 /* Didn't match the previous lookup, search the table. */
13452 n = VARRAY_ACTIVE_SIZE (file_table);
13453 for (i = 1; i < n; i++)
13454 if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
13456 file_table_last_lookup_index = i;
13460 /* Add the new entry to the end of the filename table. */
13461 file_table_last_lookup_index = n;
13462 save_file_name = (char *) ggc_strdup (file_name);
13463 VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
13464 VARRAY_PUSH_UINT (file_table_emitted, 0);
13466 /* If the assembler is emitting the file table, and we aren't eliminating
13467 unused debug types, then we must emit .file here. If we are eliminating
13468 unused debug types, then this will be done by the maybe_emit_file call in
13469 prune_unused_types_walk_attribs. */
13471 if (DWARF2_ASM_LINE_DEBUG_INFO && ! flag_eliminate_unused_debug_types)
13472 return maybe_emit_file (i);
13477 /* If the assembler will construct the file table, then translate the compiler
13478 internal file table number into the assembler file table number, and emit
13479 a .file directive if we haven't already emitted one yet. The file table
13480 numbers are different because we prune debug info for unused variables and
13481 types, which may include filenames. */
13484 maybe_emit_file (int fileno)
13486 if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
13488 if (!VARRAY_UINT (file_table_emitted, fileno))
13490 VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
13491 fprintf (asm_out_file, "\t.file %u ",
13492 VARRAY_UINT (file_table_emitted, fileno));
13493 output_quoted_string (asm_out_file,
13494 VARRAY_CHAR_PTR (file_table, fileno));
13495 fputc ('\n', asm_out_file);
13497 return VARRAY_UINT (file_table_emitted, fileno);
13503 /* Initialize the compiler internal file table. */
13506 init_file_table (void)
13508 /* Allocate the initial hunk of the file_table. */
13509 VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
13510 VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
13512 /* Skip the first entry - file numbers begin at 1. */
13513 VARRAY_PUSH_CHAR_PTR (file_table, NULL);
13514 VARRAY_PUSH_UINT (file_table_emitted, 0);
13515 file_table_last_lookup_index = 0;
13518 /* Called by the final INSN scan whenever we see a var location. We
13519 use it to drop labels in the right places, and throw the location in
13520 our lookup table. */
13523 dwarf2out_var_location (rtx loc_note)
13525 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
13526 struct var_loc_node *newloc;
13528 static rtx last_insn;
13529 static const char *last_label;
13532 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
13534 prev_insn = PREV_INSN (loc_note);
13536 newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
13537 /* If the insn we processed last time is the previous insn
13538 and it is also a var location note, use the label we emitted
13540 if (last_insn != NULL_RTX
13541 && last_insn == prev_insn
13542 && NOTE_P (prev_insn)
13543 && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
13545 newloc->label = last_label;
13549 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
13550 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
13552 newloc->label = ggc_strdup (loclabel);
13554 newloc->var_loc_note = loc_note;
13555 newloc->next = NULL;
13557 if (cfun && unlikely_text_section_p (last_text_section))
13558 newloc->section_label = cfun->cold_section_label;
13560 newloc->section_label = text_section_label;
13562 last_insn = loc_note;
13563 last_label = newloc->label;
13564 decl = NOTE_VAR_LOCATION_DECL (loc_note);
13565 if (DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl)
13566 && DECL_P (DECL_DEBUG_EXPR (decl)))
13567 decl = DECL_DEBUG_EXPR (decl);
13568 add_var_loc_to_decl (decl, newloc);
13571 /* We need to reset the locations at the beginning of each
13572 function. We can't do this in the end_function hook, because the
13573 declarations that use the locations won't have been outputted when
13574 that hook is called. */
13577 dwarf2out_begin_function (tree unused ATTRIBUTE_UNUSED)
13579 htab_empty (decl_loc_table);
13582 /* Output a label to mark the beginning of a source code line entry
13583 and record information relating to this source line, in
13584 'line_info_table' for later output of the .debug_line section. */
13587 dwarf2out_source_line (unsigned int line, const char *filename)
13589 if (debug_info_level >= DINFO_LEVEL_NORMAL
13592 switch_to_section (current_function_section ());
13594 /* If requested, emit something human-readable. */
13595 if (flag_debug_asm)
13596 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
13599 if (DWARF2_ASM_LINE_DEBUG_INFO)
13601 unsigned file_num = lookup_filename (filename);
13603 file_num = maybe_emit_file (file_num);
13605 /* Emit the .loc directive understood by GNU as. */
13606 fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
13608 /* Indicate that line number info exists. */
13609 line_info_table_in_use++;
13611 /* Indicate that multiple line number tables exist. */
13612 if (DECL_SECTION_NAME (current_function_decl))
13613 separate_line_info_table_in_use++;
13615 else if (DECL_SECTION_NAME (current_function_decl))
13617 dw_separate_line_info_ref line_info;
13618 targetm.asm_out.internal_label (asm_out_file, SEPARATE_LINE_CODE_LABEL,
13619 separate_line_info_table_in_use);
13621 /* Expand the line info table if necessary. */
13622 if (separate_line_info_table_in_use
13623 == separate_line_info_table_allocated)
13625 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13626 separate_line_info_table
13627 = ggc_realloc (separate_line_info_table,
13628 separate_line_info_table_allocated
13629 * sizeof (dw_separate_line_info_entry));
13630 memset (separate_line_info_table
13631 + separate_line_info_table_in_use,
13633 (LINE_INFO_TABLE_INCREMENT
13634 * sizeof (dw_separate_line_info_entry)));
13637 /* Add the new entry at the end of the line_info_table. */
13639 = &separate_line_info_table[separate_line_info_table_in_use++];
13640 line_info->dw_file_num = lookup_filename (filename);
13641 line_info->dw_line_num = line;
13642 line_info->function = current_function_funcdef_no;
13646 dw_line_info_ref line_info;
13648 targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
13649 line_info_table_in_use);
13651 /* Expand the line info table if necessary. */
13652 if (line_info_table_in_use == line_info_table_allocated)
13654 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13656 = ggc_realloc (line_info_table,
13657 (line_info_table_allocated
13658 * sizeof (dw_line_info_entry)));
13659 memset (line_info_table + line_info_table_in_use, 0,
13660 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13663 /* Add the new entry at the end of the line_info_table. */
13664 line_info = &line_info_table[line_info_table_in_use++];
13665 line_info->dw_file_num = lookup_filename (filename);
13666 line_info->dw_line_num = line;
13671 /* Record the beginning of a new source file. */
13674 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13676 if (flag_eliminate_dwarf2_dups)
13678 /* Record the beginning of the file for break_out_includes. */
13679 dw_die_ref bincl_die;
13681 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13682 add_AT_string (bincl_die, DW_AT_name, filename);
13685 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13689 switch_to_section (debug_macinfo_section);
13690 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13691 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13694 fileno = maybe_emit_file (lookup_filename (filename));
13695 dw2_asm_output_data_uleb128 (fileno, "Filename we just started");
13699 /* Record the end of a source file. */
13702 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13704 if (flag_eliminate_dwarf2_dups)
13705 /* Record the end of the file for break_out_includes. */
13706 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13708 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13710 switch_to_section (debug_macinfo_section);
13711 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13715 /* Called from debug_define in toplev.c. The `buffer' parameter contains
13716 the tail part of the directive line, i.e. the part which is past the
13717 initial whitespace, #, whitespace, directive-name, whitespace part. */
13720 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13721 const char *buffer ATTRIBUTE_UNUSED)
13723 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13725 switch_to_section (debug_macinfo_section);
13726 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13727 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13728 dw2_asm_output_nstring (buffer, -1, "The macro");
13732 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
13733 the tail part of the directive line, i.e. the part which is past the
13734 initial whitespace, #, whitespace, directive-name, whitespace part. */
13737 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13738 const char *buffer ATTRIBUTE_UNUSED)
13740 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13742 switch_to_section (debug_macinfo_section);
13743 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13744 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13745 dw2_asm_output_nstring (buffer, -1, "The macro");
13749 /* Set up for Dwarf output at the start of compilation. */
13752 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13754 init_file_table ();
13756 /* Allocate the decl_die_table. */
13757 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13758 decl_die_table_eq, NULL);
13760 /* Allocate the decl_loc_table. */
13761 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13762 decl_loc_table_eq, NULL);
13764 /* Allocate the initial hunk of the decl_scope_table. */
13765 decl_scope_table = VEC_alloc (tree, gc, 256);
13767 /* Allocate the initial hunk of the abbrev_die_table. */
13768 abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13769 * sizeof (dw_die_ref));
13770 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13771 /* Zero-th entry is allocated, but unused. */
13772 abbrev_die_table_in_use = 1;
13774 /* Allocate the initial hunk of the line_info_table. */
13775 line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13776 * sizeof (dw_line_info_entry));
13777 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13779 /* Zero-th entry is allocated, but unused. */
13780 line_info_table_in_use = 1;
13782 /* Generate the initial DIE for the .debug section. Note that the (string)
13783 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13784 will (typically) be a relative pathname and that this pathname should be
13785 taken as being relative to the directory from which the compiler was
13786 invoked when the given (base) source file was compiled. We will fill
13787 in this value in dwarf2out_finish. */
13788 comp_unit_die = gen_compile_unit_die (NULL);
13790 incomplete_types = VEC_alloc (tree, gc, 64);
13792 used_rtx_array = VEC_alloc (rtx, gc, 32);
13794 debug_info_section = get_section (DEBUG_INFO_SECTION,
13795 SECTION_DEBUG, NULL);
13796 debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
13797 SECTION_DEBUG, NULL);
13798 debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
13799 SECTION_DEBUG, NULL);
13800 debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
13801 SECTION_DEBUG, NULL);
13802 debug_line_section = get_section (DEBUG_LINE_SECTION,
13803 SECTION_DEBUG, NULL);
13804 debug_loc_section = get_section (DEBUG_LOC_SECTION,
13805 SECTION_DEBUG, NULL);
13806 debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
13807 SECTION_DEBUG, NULL);
13808 debug_str_section = get_section (DEBUG_STR_SECTION,
13809 DEBUG_STR_SECTION_FLAGS, NULL);
13810 debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
13811 SECTION_DEBUG, NULL);
13813 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13814 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13815 DEBUG_ABBREV_SECTION_LABEL, 0);
13816 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13817 ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
13818 COLD_TEXT_SECTION_LABEL, 0);
13819 ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
13821 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13822 DEBUG_INFO_SECTION_LABEL, 0);
13823 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13824 DEBUG_LINE_SECTION_LABEL, 0);
13825 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13826 DEBUG_RANGES_SECTION_LABEL, 0);
13827 switch_to_section (debug_abbrev_section);
13828 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13829 switch_to_section (debug_info_section);
13830 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13831 switch_to_section (debug_line_section);
13832 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13834 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13836 switch_to_section (debug_macinfo_section);
13837 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13838 DEBUG_MACINFO_SECTION_LABEL, 0);
13839 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13842 switch_to_section (text_section);
13843 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13844 if (flag_reorder_blocks_and_partition)
13846 unlikely_text_section ();
13847 ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
13851 /* A helper function for dwarf2out_finish called through
13852 ht_forall. Emit one queued .debug_str string. */
13855 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13857 struct indirect_string_node *node = (struct indirect_string_node *) *h;
13859 if (node->form == DW_FORM_strp)
13861 switch_to_section (debug_str_section);
13862 ASM_OUTPUT_LABEL (asm_out_file, node->label);
13863 assemble_string (node->str, strlen (node->str) + 1);
13871 /* Clear the marks for a die and its children.
13872 Be cool if the mark isn't set. */
13875 prune_unmark_dies (dw_die_ref die)
13879 for (c = die->die_child; c; c = c->die_sib)
13880 prune_unmark_dies (c);
13884 /* Given DIE that we're marking as used, find any other dies
13885 it references as attributes and mark them as used. */
13888 prune_unused_types_walk_attribs (dw_die_ref die)
13892 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
13894 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13896 /* A reference to another DIE.
13897 Make sure that it will get emitted. */
13898 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13900 else if (a->dw_attr == DW_AT_decl_file || a->dw_attr == DW_AT_call_file)
13902 /* A reference to a file. Make sure the file name is emitted. */
13903 a->dw_attr_val.v.val_unsigned =
13904 maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13910 /* Mark DIE as being used. If DOKIDS is true, then walk down
13911 to DIE's children. */
13914 prune_unused_types_mark (dw_die_ref die, int dokids)
13918 if (die->die_mark == 0)
13920 /* We haven't done this node yet. Mark it as used. */
13923 /* We also have to mark its parents as used.
13924 (But we don't want to mark our parents' kids due to this.) */
13925 if (die->die_parent)
13926 prune_unused_types_mark (die->die_parent, 0);
13928 /* Mark any referenced nodes. */
13929 prune_unused_types_walk_attribs (die);
13931 /* If this node is a specification,
13932 also mark the definition, if it exists. */
13933 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13934 prune_unused_types_mark (die->die_definition, 1);
13937 if (dokids && die->die_mark != 2)
13939 /* We need to walk the children, but haven't done so yet.
13940 Remember that we've walked the kids. */
13944 for (c = die->die_child; c; c = c->die_sib)
13946 /* If this is an array type, we need to make sure our
13947 kids get marked, even if they're types. */
13948 if (die->die_tag == DW_TAG_array_type)
13949 prune_unused_types_mark (c, 1);
13951 prune_unused_types_walk (c);
13957 /* Walk the tree DIE and mark types that we actually use. */
13960 prune_unused_types_walk (dw_die_ref die)
13964 /* Don't do anything if this node is already marked. */
13968 switch (die->die_tag) {
13969 case DW_TAG_const_type:
13970 case DW_TAG_packed_type:
13971 case DW_TAG_pointer_type:
13972 case DW_TAG_reference_type:
13973 case DW_TAG_volatile_type:
13974 case DW_TAG_typedef:
13975 case DW_TAG_array_type:
13976 case DW_TAG_structure_type:
13977 case DW_TAG_union_type:
13978 case DW_TAG_class_type:
13979 case DW_TAG_friend:
13980 case DW_TAG_variant_part:
13981 case DW_TAG_enumeration_type:
13982 case DW_TAG_subroutine_type:
13983 case DW_TAG_string_type:
13984 case DW_TAG_set_type:
13985 case DW_TAG_subrange_type:
13986 case DW_TAG_ptr_to_member_type:
13987 case DW_TAG_file_type:
13988 /* It's a type node --- don't mark it. */
13992 /* Mark everything else. */
13998 /* Now, mark any dies referenced from here. */
13999 prune_unused_types_walk_attribs (die);
14001 /* Mark children. */
14002 for (c = die->die_child; c; c = c->die_sib)
14003 prune_unused_types_walk (c);
14007 /* Remove from the tree DIE any dies that aren't marked. */
14010 prune_unused_types_prune (dw_die_ref die)
14012 dw_die_ref c, p, n;
14014 gcc_assert (die->die_mark);
14017 for (c = die->die_child; c; c = n)
14022 prune_unused_types_prune (c);
14030 die->die_child = n;
14037 /* Remove dies representing declarations that we never use. */
14040 prune_unused_types (void)
14043 limbo_die_node *node;
14045 /* Clear all the marks. */
14046 prune_unmark_dies (comp_unit_die);
14047 for (node = limbo_die_list; node; node = node->next)
14048 prune_unmark_dies (node->die);
14050 /* Set the mark on nodes that are actually used. */
14051 prune_unused_types_walk (comp_unit_die);
14052 for (node = limbo_die_list; node; node = node->next)
14053 prune_unused_types_walk (node->die);
14055 /* Also set the mark on nodes referenced from the
14056 pubname_table or arange_table. */
14057 for (i = 0; i < pubname_table_in_use; i++)
14058 prune_unused_types_mark (pubname_table[i].die, 1);
14059 for (i = 0; i < arange_table_in_use; i++)
14060 prune_unused_types_mark (arange_table[i], 1);
14062 /* Get rid of nodes that aren't marked. */
14063 prune_unused_types_prune (comp_unit_die);
14064 for (node = limbo_die_list; node; node = node->next)
14065 prune_unused_types_prune (node->die);
14067 /* Leave the marks clear. */
14068 prune_unmark_dies (comp_unit_die);
14069 for (node = limbo_die_list; node; node = node->next)
14070 prune_unmark_dies (node->die);
14073 /* Output stuff that dwarf requires at the end of every file,
14074 and generate the DWARF-2 debugging info. */
14077 dwarf2out_finish (const char *filename)
14079 limbo_die_node *node, *next_node;
14080 dw_die_ref die = 0;
14082 /* Add the name for the main input file now. We delayed this from
14083 dwarf2out_init to avoid complications with PCH. */
14084 add_name_attribute (comp_unit_die, filename);
14085 if (filename[0] != DIR_SEPARATOR)
14086 add_comp_dir_attribute (comp_unit_die);
14087 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14090 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
14091 if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
14092 /* Don't add cwd for <built-in>. */
14093 && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
14095 add_comp_dir_attribute (comp_unit_die);
14100 /* Traverse the limbo die list, and add parent/child links. The only
14101 dies without parents that should be here are concrete instances of
14102 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
14103 For concrete instances, we can get the parent die from the abstract
14105 for (node = limbo_die_list; node; node = next_node)
14107 next_node = node->next;
14110 if (die->die_parent == NULL)
14112 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14115 add_child_die (origin->die_parent, die);
14116 else if (die == comp_unit_die)
14118 else if (errorcount > 0 || sorrycount > 0)
14119 /* It's OK to be confused by errors in the input. */
14120 add_child_die (comp_unit_die, die);
14123 /* In certain situations, the lexical block containing a
14124 nested function can be optimized away, which results
14125 in the nested function die being orphaned. Likewise
14126 with the return type of that nested function. Force
14127 this to be a child of the containing function.
14129 It may happen that even the containing function got fully
14130 inlined and optimized out. In that case we are lost and
14131 assign the empty child. This should not be big issue as
14132 the function is likely unreachable too. */
14133 tree context = NULL_TREE;
14135 gcc_assert (node->created_for);
14137 if (DECL_P (node->created_for))
14138 context = DECL_CONTEXT (node->created_for);
14139 else if (TYPE_P (node->created_for))
14140 context = TYPE_CONTEXT (node->created_for);
14142 gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL);
14144 origin = lookup_decl_die (context);
14146 add_child_die (origin, die);
14148 add_child_die (comp_unit_die, die);
14153 limbo_die_list = NULL;
14155 /* Walk through the list of incomplete types again, trying once more to
14156 emit full debugging info for them. */
14157 retry_incomplete_types ();
14159 /* We need to reverse all the dies before break_out_includes, or
14160 we'll see the end of an include file before the beginning. */
14161 reverse_all_dies (comp_unit_die);
14163 if (flag_eliminate_unused_debug_types)
14164 prune_unused_types ();
14166 /* Generate separate CUs for each of the include files we've seen.
14167 They will go into limbo_die_list. */
14168 if (flag_eliminate_dwarf2_dups)
14169 break_out_includes (comp_unit_die);
14171 /* Traverse the DIE's and add add sibling attributes to those DIE's
14172 that have children. */
14173 add_sibling_attributes (comp_unit_die);
14174 for (node = limbo_die_list; node; node = node->next)
14175 add_sibling_attributes (node->die);
14177 /* Output a terminator label for the .text section. */
14178 switch_to_section (text_section);
14179 targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
14180 if (flag_reorder_blocks_and_partition)
14182 unlikely_text_section ();
14183 targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
14186 /* Output the source line correspondence table. We must do this
14187 even if there is no line information. Otherwise, on an empty
14188 translation unit, we will generate a present, but empty,
14189 .debug_info section. IRIX 6.5 `nm' will then complain when
14190 examining the file. */
14191 if (! DWARF2_ASM_LINE_DEBUG_INFO)
14193 switch_to_section (debug_line_section);
14194 output_line_info ();
14197 /* Output location list section if necessary. */
14198 if (have_location_lists)
14200 /* Output the location lists info. */
14201 switch_to_section (debug_loc_section);
14202 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
14203 DEBUG_LOC_SECTION_LABEL, 0);
14204 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
14205 output_location_lists (die);
14206 have_location_lists = 0;
14209 /* We can only use the low/high_pc attributes if all of the code was
14211 if (!separate_line_info_table_in_use && !have_switched_text_section)
14213 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
14214 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
14217 /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
14218 "base address". Use zero so that these addresses become absolute. */
14219 else if (have_location_lists || ranges_table_in_use)
14220 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
14222 if (debug_info_level >= DINFO_LEVEL_NORMAL)
14223 add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
14224 debug_line_section_label);
14226 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14227 add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
14229 /* Output all of the compilation units. We put the main one last so that
14230 the offsets are available to output_pubnames. */
14231 for (node = limbo_die_list; node; node = node->next)
14232 output_comp_unit (node->die, 0);
14234 output_comp_unit (comp_unit_die, 0);
14236 /* Output the abbreviation table. */
14237 switch_to_section (debug_abbrev_section);
14238 output_abbrev_section ();
14240 /* Output public names table if necessary. */
14241 if (pubname_table_in_use)
14243 switch_to_section (debug_pubnames_section);
14244 output_pubnames ();
14247 /* Output the address range information. We only put functions in the arange
14248 table, so don't write it out if we don't have any. */
14249 if (fde_table_in_use)
14251 switch_to_section (debug_aranges_section);
14255 /* Output ranges section if necessary. */
14256 if (ranges_table_in_use)
14258 switch_to_section (debug_ranges_section);
14259 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
14263 /* Have to end the macro section. */
14264 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14266 switch_to_section (debug_macinfo_section);
14267 dw2_asm_output_data (1, 0, "End compilation unit");
14270 /* If we emitted any DW_FORM_strp form attribute, output the string
14272 if (debug_str_hash)
14273 htab_traverse (debug_str_hash, output_indirect_string, NULL);
14277 /* This should never be used, but its address is needed for comparisons. */
14278 const struct gcc_debug_hooks dwarf2_debug_hooks;
14280 #endif /* DWARF2_DEBUGGING_INFO */
14282 #include "gt-dwarf2out.h"