1 /* Output Dwarf2 format symbol table information from the GNU C compiler.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000
3 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 GNU CC.
10 GNU CC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
15 GNU CC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GNU CC; see the file COPYING. If not, write to
22 the Free Software Foundation, 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
25 /* TODO: Implement .debug_str handling, and share entries somehow.
26 Emit .debug_line header even when there are no functions, since
27 the file numbers are used by .debug_info. Alternately, leave
28 out locations for types and decls.
29 Avoid talking about ctors and op= for PODs.
30 Factor out common prologue sequences into multiple CIEs. */
32 /* The first part of this file deals with the DWARF 2 frame unwind
33 information, which is also used by the GCC efficient exception handling
34 mechanism. The second part, controlled only by an #ifdef
35 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
44 #include "hard-reg-set.h"
46 #include "insn-config.h"
52 #include "dwarf2out.h"
59 /* Decide whether we want to emit frame unwind information for the current
65 return (write_symbols == DWARF2_DEBUG
66 #ifdef DWARF2_FRAME_INFO
69 #ifdef DWARF2_UNWIND_INFO
71 || (flag_exceptions && ! exceptions_via_longjmp)
76 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
78 /* How to start an assembler comment. */
79 #ifndef ASM_COMMENT_START
80 #define ASM_COMMENT_START ";#"
83 typedef struct dw_cfi_struct *dw_cfi_ref;
84 typedef struct dw_fde_struct *dw_fde_ref;
85 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
87 /* Call frames are described using a sequence of Call Frame
88 Information instructions. The register number, offset
89 and address fields are provided as possible operands;
90 their use is selected by the opcode field. */
92 typedef union dw_cfi_oprnd_struct
94 unsigned long dw_cfi_reg_num;
95 long int dw_cfi_offset;
96 const char *dw_cfi_addr;
97 struct dw_loc_descr_struct *dw_cfi_loc;
101 typedef struct dw_cfi_struct
103 dw_cfi_ref dw_cfi_next;
104 enum dwarf_call_frame_info dw_cfi_opc;
105 dw_cfi_oprnd dw_cfi_oprnd1;
106 dw_cfi_oprnd dw_cfi_oprnd2;
110 /* This is how we define the location of the CFA. We use to handle it
111 as REG + OFFSET all the time, but now it can be more complex.
112 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
113 Instead of passing around REG and OFFSET, we pass a copy
114 of this structure. */
115 typedef struct cfa_loc
120 int indirect; /* 1 if CFA is accessed via a dereference. */
123 /* All call frame descriptions (FDE's) in the GCC generated DWARF
124 refer to a single Common Information Entry (CIE), defined at
125 the beginning of the .debug_frame section. This used of a single
126 CIE obviates the need to keep track of multiple CIE's
127 in the DWARF generation routines below. */
129 typedef struct dw_fde_struct
131 const char *dw_fde_begin;
132 const char *dw_fde_current_label;
133 const char *dw_fde_end;
134 dw_cfi_ref dw_fde_cfi;
139 /* Maximum size (in bytes) of an artificially generated label. */
140 #define MAX_ARTIFICIAL_LABEL_BYTES 30
142 /* The size of the target's pointer type. */
144 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
147 /* The size of addresses as they appear in the Dwarf 2 data.
148 Some architectures use word addresses to refer to code locations,
149 but Dwarf 2 info always uses byte addresses. On such machines,
150 Dwarf 2 addresses need to be larger than the architecture's
152 #ifndef DWARF2_ADDR_SIZE
153 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
156 /* The size in bytes of a DWARF field indicating an offset or length
157 relative to a debug info section, specified to be 4 bytes in the
158 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
161 #ifndef DWARF_OFFSET_SIZE
162 #define DWARF_OFFSET_SIZE 4
165 #define DWARF_VERSION 2
167 /* Round SIZE up to the nearest BOUNDARY. */
168 #define DWARF_ROUND(SIZE,BOUNDARY) \
169 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
171 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
172 #ifdef STACK_GROWS_DOWNWARD
173 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
175 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
178 /* A pointer to the base of a table that contains frame description
179 information for each routine. */
180 static dw_fde_ref fde_table;
182 /* Number of elements currently allocated for fde_table. */
183 static unsigned fde_table_allocated;
185 /* Number of elements in fde_table currently in use. */
186 static unsigned fde_table_in_use;
188 /* Size (in elements) of increments by which we may expand the
190 #define FDE_TABLE_INCREMENT 256
192 /* A list of call frame insns for the CIE. */
193 static dw_cfi_ref cie_cfi_head;
195 /* The number of the current function definition for which debugging
196 information is being generated. These numbers range from 1 up to the
197 maximum number of function definitions contained within the current
198 compilation unit. These numbers are used to create unique label id's
199 unique to each function definition. */
200 static unsigned current_funcdef_number = 0;
202 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
203 attribute that accelerates the lookup of the FDE associated
204 with the subprogram. This variable holds the table index of the FDE
205 associated with the current function (body) definition. */
206 static unsigned current_funcdef_fde;
208 /* Forward declarations for functions defined in this file. */
210 static char *stripattributes PARAMS ((const char *));
211 static const char *dwarf_cfi_name PARAMS ((unsigned));
212 static dw_cfi_ref new_cfi PARAMS ((void));
213 static void add_cfi PARAMS ((dw_cfi_ref *, dw_cfi_ref));
214 static unsigned long size_of_uleb128 PARAMS ((unsigned long));
215 static unsigned long size_of_sleb128 PARAMS ((long));
216 static void output_uleb128 PARAMS ((unsigned long));
217 static void output_sleb128 PARAMS ((long));
218 static void add_fde_cfi PARAMS ((const char *, dw_cfi_ref));
219 static void lookup_cfa_1 PARAMS ((dw_cfi_ref, dw_cfa_location *));
220 static void lookup_cfa PARAMS ((dw_cfa_location *));
221 static void reg_save PARAMS ((const char *, unsigned,
223 static void initial_return_save PARAMS ((rtx));
224 static long stack_adjust_offset PARAMS ((rtx));
225 static void output_cfi PARAMS ((dw_cfi_ref, dw_fde_ref));
226 static void output_call_frame_info PARAMS ((int));
227 static void dwarf2out_stack_adjust PARAMS ((rtx));
228 static void dwarf2out_frame_debug_expr PARAMS ((rtx, const char *));
230 /* Support for complex CFA locations. */
231 static void output_cfa_loc PARAMS ((dw_cfi_ref));
232 static void get_cfa_from_loc_descr PARAMS ((dw_cfa_location *,
233 struct dw_loc_descr_struct *));
234 static struct dw_loc_descr_struct *build_cfa_loc
235 PARAMS ((dw_cfa_location *));
236 static void def_cfa_1 PARAMS ((const char *, dw_cfa_location *));
238 /* Definitions of defaults for assembler-dependent names of various
239 pseudo-ops and section names.
240 Theses may be overridden in the tm.h file (if necessary) for a particular
243 #ifdef OBJECT_FORMAT_ELF
244 #ifndef UNALIGNED_SHORT_ASM_OP
245 #define UNALIGNED_SHORT_ASM_OP ".2byte"
247 #ifndef UNALIGNED_INT_ASM_OP
248 #define UNALIGNED_INT_ASM_OP ".4byte"
250 #ifndef UNALIGNED_DOUBLE_INT_ASM_OP
251 #define UNALIGNED_DOUBLE_INT_ASM_OP ".8byte"
253 #endif /* OBJECT_FORMAT_ELF */
256 #define ASM_BYTE_OP ".byte"
259 /* Data and reference forms for relocatable data. */
260 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
261 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
263 /* Pseudo-op for defining a new section. */
264 #ifndef SECTION_ASM_OP
265 #define SECTION_ASM_OP ".section"
268 /* The default format used by the ASM_OUTPUT_SECTION macro (see below) to
269 print the SECTION_ASM_OP and the section name. The default here works for
270 almost all svr4 assemblers, except for the sparc, where the section name
271 must be enclosed in double quotes. (See sparcv4.h). */
272 #ifndef SECTION_FORMAT
273 #ifdef PUSHSECTION_FORMAT
274 #define SECTION_FORMAT PUSHSECTION_FORMAT
276 #define SECTION_FORMAT "\t%s\t%s\n"
280 #ifndef FRAME_SECTION
281 #define FRAME_SECTION ".debug_frame"
284 #ifndef FUNC_BEGIN_LABEL
285 #define FUNC_BEGIN_LABEL "LFB"
287 #ifndef FUNC_END_LABEL
288 #define FUNC_END_LABEL "LFE"
290 #define CIE_AFTER_SIZE_LABEL "LSCIE"
291 #define CIE_END_LABEL "LECIE"
292 #define CIE_LENGTH_LABEL "LLCIE"
293 #define FDE_AFTER_SIZE_LABEL "LSFDE"
294 #define FDE_END_LABEL "LEFDE"
295 #define FDE_LENGTH_LABEL "LLFDE"
296 #define DIE_LABEL_PREFIX "DW"
298 /* Definitions of defaults for various types of primitive assembly language
299 output operations. These may be overridden from within the tm.h file,
300 but typically, that is unnecessary. */
302 #ifndef ASM_OUTPUT_SECTION
303 #define ASM_OUTPUT_SECTION(FILE, SECTION) \
304 fprintf ((FILE), SECTION_FORMAT, SECTION_ASM_OP, SECTION)
307 #ifndef ASM_OUTPUT_DWARF_DATA1
308 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
309 fprintf ((FILE), "\t%s\t0x%x", ASM_BYTE_OP, (unsigned) (VALUE))
312 #ifndef ASM_OUTPUT_DWARF_DELTA1
313 #define ASM_OUTPUT_DWARF_DELTA1(FILE,LABEL1,LABEL2) \
314 do { fprintf ((FILE), "\t%s\t", ASM_BYTE_OP); \
315 assemble_name (FILE, LABEL1); \
316 fprintf (FILE, "-"); \
317 assemble_name (FILE, LABEL2); \
321 #ifdef UNALIGNED_INT_ASM_OP
323 #ifndef UNALIGNED_OFFSET_ASM_OP
324 #define UNALIGNED_OFFSET_ASM_OP \
325 (DWARF_OFFSET_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
328 #ifndef UNALIGNED_WORD_ASM_OP
329 #define UNALIGNED_WORD_ASM_OP \
330 ((DWARF2_ADDR_SIZE) == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP \
331 : (DWARF2_ADDR_SIZE) == 2 ? UNALIGNED_SHORT_ASM_OP \
332 : UNALIGNED_INT_ASM_OP)
335 #ifndef ASM_OUTPUT_DWARF_DELTA2
336 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
337 do { fprintf ((FILE), "\t%s\t", UNALIGNED_SHORT_ASM_OP); \
338 assemble_name (FILE, LABEL1); \
339 fprintf (FILE, "-"); \
340 assemble_name (FILE, LABEL2); \
344 #ifndef ASM_OUTPUT_DWARF_DELTA4
345 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
346 do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \
347 assemble_name (FILE, LABEL1); \
348 fprintf (FILE, "-"); \
349 assemble_name (FILE, LABEL2); \
353 #ifndef ASM_OUTPUT_DWARF_DELTA
354 #define ASM_OUTPUT_DWARF_DELTA(FILE,LABEL1,LABEL2) \
355 do { fprintf ((FILE), "\t%s\t", UNALIGNED_OFFSET_ASM_OP); \
356 assemble_name (FILE, LABEL1); \
357 fprintf (FILE, "-"); \
358 assemble_name (FILE, LABEL2); \
362 #ifndef ASM_OUTPUT_DWARF_ADDR_DELTA
363 #define ASM_OUTPUT_DWARF_ADDR_DELTA(FILE,LABEL1,LABEL2) \
364 do { fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
365 assemble_name (FILE, LABEL1); \
366 fprintf (FILE, "-"); \
367 assemble_name (FILE, LABEL2); \
371 #ifndef ASM_OUTPUT_DWARF_ADDR
372 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
373 do { fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
374 assemble_name (FILE, LABEL); \
378 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
379 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) \
381 fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
382 output_addr_const ((FILE), (RTX)); \
386 #ifndef ASM_OUTPUT_DWARF_OFFSET4
387 #define ASM_OUTPUT_DWARF_OFFSET4(FILE,LABEL) \
388 do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \
389 assemble_name (FILE, LABEL); \
393 #ifndef ASM_OUTPUT_DWARF_OFFSET
394 #define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \
395 do { fprintf ((FILE), "\t%s\t", UNALIGNED_OFFSET_ASM_OP); \
396 assemble_name (FILE, LABEL); \
400 #ifndef ASM_OUTPUT_DWARF_DATA2
401 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
402 fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_SHORT_ASM_OP, (unsigned) (VALUE))
405 #ifndef ASM_OUTPUT_DWARF_DATA4
406 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
407 fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_INT_ASM_OP, (unsigned) (VALUE))
410 #ifndef ASM_OUTPUT_DWARF_DATA8
411 #define ASM_OUTPUT_DWARF_DATA8(FILE,VALUE) \
412 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_DOUBLE_INT_ASM_OP, \
413 (unsigned long) (VALUE))
416 #ifndef ASM_OUTPUT_DWARF_DATA
417 #define ASM_OUTPUT_DWARF_DATA(FILE,VALUE) \
418 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_OFFSET_ASM_OP, \
419 (unsigned long) (VALUE))
422 #ifndef ASM_OUTPUT_DWARF_ADDR_DATA
423 #define ASM_OUTPUT_DWARF_ADDR_DATA(FILE,VALUE) \
424 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_WORD_ASM_OP, \
425 (unsigned long) (VALUE))
428 #ifndef ASM_OUTPUT_DWARF_CONST_DOUBLE
429 #define ASM_OUTPUT_DWARF_CONST_DOUBLE(FILE,HIGH_VALUE,LOW_VALUE) \
431 if (WORDS_BIG_ENDIAN) \
433 fprintf ((FILE), "\t%s\t0x%lx\n", UNALIGNED_INT_ASM_OP, (HIGH_VALUE));\
434 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_INT_ASM_OP, (LOW_VALUE));\
438 fprintf ((FILE), "\t%s\t0x%lx\n", UNALIGNED_INT_ASM_OP, (LOW_VALUE)); \
439 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_INT_ASM_OP, (HIGH_VALUE)); \
444 #else /* UNALIGNED_INT_ASM_OP */
446 /* We don't have unaligned support, let's hope the normal output works for
447 .debug_frame. But we know it won't work for .debug_info. */
449 #ifdef DWARF2_DEBUGGING_INFO
450 #error DWARF2_DEBUGGING_INFO requires UNALIGNED_INT_ASM_OP.
453 #ifndef ASM_OUTPUT_DWARF_ADDR
454 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
455 assemble_integer (gen_rtx_SYMBOL_REF (Pmode, LABEL), DWARF2_ADDR_SIZE, 1)
458 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
459 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) ASM_OUTPUT_DWARF_ADDR (FILE,RTX)
462 #ifndef ASM_OUTPUT_DWARF_OFFSET4
463 #define ASM_OUTPUT_DWARF_OFFSET4(FILE,LABEL) \
464 assemble_integer (gen_rtx_SYMBOL_REF (SImode, LABEL), 4, 1)
467 #ifndef ASM_OUTPUT_DWARF_OFFSET
468 #define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \
469 assemble_integer (gen_rtx_SYMBOL_REF (SImode, LABEL), 4, 1)
472 #ifndef ASM_OUTPUT_DWARF_DELTA2
473 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
474 assemble_integer (gen_rtx_MINUS (HImode, \
475 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
476 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
480 #ifndef ASM_OUTPUT_DWARF_DELTA4
481 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
482 assemble_integer (gen_rtx_MINUS (SImode, \
483 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
484 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
488 #ifndef ASM_OUTPUT_DWARF_ADDR_DELTA
489 #define ASM_OUTPUT_DWARF_ADDR_DELTA(FILE,LABEL1,LABEL2) \
490 assemble_integer (gen_rtx_MINUS (Pmode, \
491 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
492 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
496 #ifndef ASM_OUTPUT_DWARF_DELTA
497 #define ASM_OUTPUT_DWARF_DELTA(FILE,LABEL1,LABEL2) \
498 ASM_OUTPUT_DWARF_DELTA4 (FILE,LABEL1,LABEL2)
501 #ifndef ASM_OUTPUT_DWARF_DATA2
502 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
503 assemble_integer (GEN_INT (VALUE), 2, 1)
506 #ifndef ASM_OUTPUT_DWARF_DATA4
507 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
508 assemble_integer (GEN_INT (VALUE), 4, 1)
511 #endif /* UNALIGNED_INT_ASM_OP */
514 #ifndef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
515 #define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \
517 fprintf (FILE, "\t%s\t", SET_ASM_OP); \
518 assemble_name (FILE, SY); \
520 assemble_name (FILE, HI); \
522 assemble_name (FILE, LO); \
525 #endif /* SET_ASM_OP */
527 /* This is similar to the default ASM_OUTPUT_ASCII, except that no trailing
528 newline is produced. When flag_debug_asm is asserted, we add commentary
529 at the end of the line, so we must avoid output of a newline here. */
530 #ifndef ASM_OUTPUT_DWARF_STRING
531 #define ASM_OUTPUT_DWARF_STRING(FILE,P) \
533 register int slen = strlen(P); \
534 register const char *p = (P); \
536 fprintf (FILE, "\t.ascii \""); \
537 for (i = 0; i < slen; i++) \
539 register int c = p[i]; \
540 if (c == '\"' || c == '\\') \
546 fprintf (FILE, "\\%o", c); \
549 fprintf (FILE, "\\0\""); \
554 /* The DWARF 2 CFA column which tracks the return address. Normally this
555 is the column for PC, or the first column after all of the hard
557 #ifndef DWARF_FRAME_RETURN_COLUMN
559 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
561 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
565 /* The mapping from gcc register number to DWARF 2 CFA column number. By
566 default, we just provide columns for all registers. */
567 #ifndef DWARF_FRAME_REGNUM
568 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
571 /* Hook used by __throw. */
574 expand_builtin_dwarf_fp_regnum ()
576 return GEN_INT (DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM));
579 /* The offset from the incoming value of %sp to the top of the stack frame
580 for the current function. */
581 #ifndef INCOMING_FRAME_SP_OFFSET
582 #define INCOMING_FRAME_SP_OFFSET 0
585 /* Return a pointer to a copy of the section string name S with all
586 attributes stripped off, and an asterisk prepended (for assemble_name). */
592 char *stripped = xmalloc (strlen (s) + 2);
597 while (*s && *s != ',')
604 /* Generate code to initialize the register size table. */
607 expand_builtin_init_dwarf_reg_sizes (address)
611 enum machine_mode mode = TYPE_MODE (char_type_node);
612 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
613 rtx mem = gen_rtx_MEM (mode, addr);
615 for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
617 int offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
618 int size = GET_MODE_SIZE (reg_raw_mode[i]);
623 emit_move_insn (change_address (mem, mode,
624 plus_constant (addr, offset)),
629 /* Convert a DWARF call frame info. operation to its string name */
632 dwarf_cfi_name (cfi_opc)
633 register unsigned cfi_opc;
637 case DW_CFA_advance_loc:
638 return "DW_CFA_advance_loc";
640 return "DW_CFA_offset";
642 return "DW_CFA_restore";
646 return "DW_CFA_set_loc";
647 case DW_CFA_advance_loc1:
648 return "DW_CFA_advance_loc1";
649 case DW_CFA_advance_loc2:
650 return "DW_CFA_advance_loc2";
651 case DW_CFA_advance_loc4:
652 return "DW_CFA_advance_loc4";
653 case DW_CFA_offset_extended:
654 return "DW_CFA_offset_extended";
655 case DW_CFA_restore_extended:
656 return "DW_CFA_restore_extended";
657 case DW_CFA_undefined:
658 return "DW_CFA_undefined";
659 case DW_CFA_same_value:
660 return "DW_CFA_same_value";
661 case DW_CFA_register:
662 return "DW_CFA_register";
663 case DW_CFA_remember_state:
664 return "DW_CFA_remember_state";
665 case DW_CFA_restore_state:
666 return "DW_CFA_restore_state";
668 return "DW_CFA_def_cfa";
669 case DW_CFA_def_cfa_register:
670 return "DW_CFA_def_cfa_register";
671 case DW_CFA_def_cfa_offset:
672 return "DW_CFA_def_cfa_offset";
673 case DW_CFA_def_cfa_expression:
674 return "DW_CFA_def_cfa_expression";
676 /* SGI/MIPS specific */
677 case DW_CFA_MIPS_advance_loc8:
678 return "DW_CFA_MIPS_advance_loc8";
681 case DW_CFA_GNU_window_save:
682 return "DW_CFA_GNU_window_save";
683 case DW_CFA_GNU_args_size:
684 return "DW_CFA_GNU_args_size";
685 case DW_CFA_GNU_negative_offset_extended:
686 return "DW_CFA_GNU_negative_offset_extended";
689 return "DW_CFA_<unknown>";
693 /* Return a pointer to a newly allocated Call Frame Instruction. */
695 static inline dw_cfi_ref
698 register dw_cfi_ref cfi = (dw_cfi_ref) xmalloc (sizeof (dw_cfi_node));
700 cfi->dw_cfi_next = NULL;
701 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
702 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
707 /* Add a Call Frame Instruction to list of instructions. */
710 add_cfi (list_head, cfi)
711 register dw_cfi_ref *list_head;
712 register dw_cfi_ref cfi;
714 register dw_cfi_ref *p;
716 /* Find the end of the chain. */
717 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
723 /* Generate a new label for the CFI info to refer to. */
726 dwarf2out_cfi_label ()
728 static char label[20];
729 static unsigned long label_num = 0;
731 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", label_num++);
732 ASM_OUTPUT_LABEL (asm_out_file, label);
737 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
738 or to the CIE if LABEL is NULL. */
741 add_fde_cfi (label, cfi)
742 register const char *label;
743 register dw_cfi_ref cfi;
747 register dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
750 label = dwarf2out_cfi_label ();
752 if (fde->dw_fde_current_label == NULL
753 || strcmp (label, fde->dw_fde_current_label) != 0)
755 register dw_cfi_ref xcfi;
757 fde->dw_fde_current_label = label = xstrdup (label);
759 /* Set the location counter to the new label. */
761 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
762 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
763 add_cfi (&fde->dw_fde_cfi, xcfi);
766 add_cfi (&fde->dw_fde_cfi, cfi);
770 add_cfi (&cie_cfi_head, cfi);
773 /* Subroutine of lookup_cfa. */
776 lookup_cfa_1 (cfi, loc)
777 register dw_cfi_ref cfi;
778 register dw_cfa_location *loc;
780 switch (cfi->dw_cfi_opc)
782 case DW_CFA_def_cfa_offset:
783 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
785 case DW_CFA_def_cfa_register:
786 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
789 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
790 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
792 case DW_CFA_def_cfa_expression:
793 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
800 /* Find the previous value for the CFA. */
804 register dw_cfa_location *loc;
806 register dw_cfi_ref cfi;
808 loc->reg = (unsigned long) -1;
811 loc->base_offset = 0;
813 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
814 lookup_cfa_1 (cfi, loc);
816 if (fde_table_in_use)
818 register dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
819 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
820 lookup_cfa_1 (cfi, loc);
824 /* The current rule for calculating the DWARF2 canonical frame address. */
827 /* The register used for saving registers to the stack, and its offset
829 dw_cfa_location cfa_store;
831 /* The running total of the size of arguments pushed onto the stack. */
832 static long args_size;
834 /* The last args_size we actually output. */
835 static long old_args_size;
837 /* Entry point to update the canonical frame address (CFA).
838 LABEL is passed to add_fde_cfi. The value of CFA is now to be
839 calculated from REG+OFFSET. */
842 dwarf2out_def_cfa (label, reg, offset)
843 register const char *label;
852 def_cfa_1 (label, &loc);
855 /* This routine does the actual work. The CFA is now calculated from
856 the dw_cfa_location structure. */
858 def_cfa_1 (label, loc_p)
859 register const char *label;
860 dw_cfa_location *loc_p;
862 register dw_cfi_ref cfi;
863 dw_cfa_location old_cfa, loc;
868 if (cfa_store.reg == loc.reg && loc.indirect == 0)
869 cfa_store.offset = loc.offset;
871 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
872 lookup_cfa (&old_cfa);
874 if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset &&
875 loc.indirect == old_cfa.indirect)
877 if (loc.indirect == 0
878 || loc.base_offset == old_cfa.base_offset)
884 if (loc.reg == old_cfa.reg && !loc.indirect)
886 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
887 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
890 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
891 else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
894 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
895 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
899 else if (loc.indirect == 0)
901 cfi->dw_cfi_opc = DW_CFA_def_cfa;
902 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
903 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
907 struct dw_loc_descr_struct *loc_list;
908 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
909 loc_list = build_cfa_loc (&loc);
910 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
913 add_fde_cfi (label, cfi);
916 /* Add the CFI for saving a register. REG is the CFA column number.
917 LABEL is passed to add_fde_cfi.
918 If SREG is -1, the register is saved at OFFSET from the CFA;
919 otherwise it is saved in SREG. */
922 reg_save (label, reg, sreg, offset)
923 register const char *label;
924 register unsigned reg;
925 register unsigned sreg;
926 register long offset;
928 register dw_cfi_ref cfi = new_cfi ();
930 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
932 /* The following comparison is correct. -1 is used to indicate that
933 the value isn't a register number. */
934 if (sreg == (unsigned int) -1)
937 /* The register number won't fit in 6 bits, so we have to use
939 cfi->dw_cfi_opc = DW_CFA_offset_extended;
941 cfi->dw_cfi_opc = DW_CFA_offset;
943 offset /= DWARF_CIE_DATA_ALIGNMENT;
946 cfi->dw_cfi_opc = DW_CFA_GNU_negative_offset_extended;
949 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
951 else if (sreg == reg)
952 /* We could emit a DW_CFA_same_value in this case, but don't bother. */
956 cfi->dw_cfi_opc = DW_CFA_register;
957 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
960 add_fde_cfi (label, cfi);
963 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
964 This CFI tells the unwinder that it needs to restore the window registers
965 from the previous frame's window save area.
967 ??? Perhaps we should note in the CIE where windows are saved (instead of
968 assuming 0(cfa)) and what registers are in the window. */
971 dwarf2out_window_save (label)
972 register const char *label;
974 register dw_cfi_ref cfi = new_cfi ();
975 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
976 add_fde_cfi (label, cfi);
979 /* Add a CFI to update the running total of the size of arguments
980 pushed onto the stack. */
983 dwarf2out_args_size (label, size)
987 register dw_cfi_ref cfi;
989 if (size == old_args_size)
991 old_args_size = size;
994 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
995 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
996 add_fde_cfi (label, cfi);
999 /* Entry point for saving a register to the stack. REG is the GCC register
1000 number. LABEL and OFFSET are passed to reg_save. */
1003 dwarf2out_reg_save (label, reg, offset)
1004 register const char *label;
1005 register unsigned reg;
1006 register long offset;
1008 reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset);
1011 /* Entry point for saving the return address in the stack.
1012 LABEL and OFFSET are passed to reg_save. */
1015 dwarf2out_return_save (label, offset)
1016 register const char *label;
1017 register long offset;
1019 reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset);
1022 /* Entry point for saving the return address in a register.
1023 LABEL and SREG are passed to reg_save. */
1026 dwarf2out_return_reg (label, sreg)
1027 register const char *label;
1028 register unsigned sreg;
1030 reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0);
1033 /* Record the initial position of the return address. RTL is
1034 INCOMING_RETURN_ADDR_RTX. */
1037 initial_return_save (rtl)
1040 unsigned int reg = (unsigned int) -1;
1043 switch (GET_CODE (rtl))
1046 /* RA is in a register. */
1047 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1050 /* RA is on the stack. */
1051 rtl = XEXP (rtl, 0);
1052 switch (GET_CODE (rtl))
1055 if (REGNO (rtl) != STACK_POINTER_REGNUM)
1060 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
1062 offset = INTVAL (XEXP (rtl, 1));
1065 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
1067 offset = -INTVAL (XEXP (rtl, 1));
1074 /* The return address is at some offset from any value we can
1075 actually load. For instance, on the SPARC it is in %i7+8. Just
1076 ignore the offset for now; it doesn't matter for unwinding frames. */
1077 if (GET_CODE (XEXP (rtl, 1)) != CONST_INT)
1079 initial_return_save (XEXP (rtl, 0));
1085 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1088 /* Given a SET, calculate the amount of stack adjustment it
1092 stack_adjust_offset (pattern)
1095 rtx src = SET_SRC (pattern);
1096 rtx dest = SET_DEST (pattern);
1100 if (dest == stack_pointer_rtx)
1102 /* (set (reg sp) (plus (reg sp) (const_int))) */
1103 code = GET_CODE (src);
1104 if (! (code == PLUS || code == MINUS)
1105 || XEXP (src, 0) != stack_pointer_rtx
1106 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1109 offset = INTVAL (XEXP (src, 1));
1111 else if (GET_CODE (dest) == MEM)
1113 /* (set (mem (pre_dec (reg sp))) (foo)) */
1114 src = XEXP (dest, 0);
1115 code = GET_CODE (src);
1117 if (! (code == PRE_DEC || code == PRE_INC)
1118 || XEXP (src, 0) != stack_pointer_rtx)
1121 offset = GET_MODE_SIZE (GET_MODE (dest));
1126 if (code == PLUS || code == PRE_INC)
1132 /* Check INSN to see if it looks like a push or a stack adjustment, and
1133 make a note of it if it does. EH uses this information to find out how
1134 much extra space it needs to pop off the stack. */
1137 dwarf2out_stack_adjust (insn)
1143 if (! asynchronous_exceptions && GET_CODE (insn) == CALL_INSN)
1145 /* Extract the size of the args from the CALL rtx itself. */
1147 insn = PATTERN (insn);
1148 if (GET_CODE (insn) == PARALLEL)
1149 insn = XVECEXP (insn, 0, 0);
1150 if (GET_CODE (insn) == SET)
1151 insn = SET_SRC (insn);
1152 if (GET_CODE (insn) != CALL)
1154 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1158 /* If only calls can throw, and we have a frame pointer,
1159 save up adjustments until we see the CALL_INSN. */
1160 else if (! asynchronous_exceptions
1161 && cfa.reg != STACK_POINTER_REGNUM)
1164 if (GET_CODE (insn) == BARRIER)
1166 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1167 the compiler will have already emitted a stack adjustment, but
1168 doesn't bother for calls to noreturn functions. */
1169 #ifdef STACK_GROWS_DOWNWARD
1170 offset = -args_size;
1175 else if (GET_CODE (PATTERN (insn)) == SET)
1177 offset = stack_adjust_offset (PATTERN (insn));
1179 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1180 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1182 /* There may be stack adjustments inside compound insns. Search
1187 for (j = XVECLEN (PATTERN (insn), 0) - 1; j >= 0; j--)
1189 rtx pattern = XVECEXP (PATTERN (insn), 0, j);
1190 if (GET_CODE (pattern) == SET)
1191 offset += stack_adjust_offset (pattern);
1200 if (cfa.reg == STACK_POINTER_REGNUM)
1201 cfa.offset += offset;
1203 #ifndef STACK_GROWS_DOWNWARD
1206 args_size += offset;
1210 label = dwarf2out_cfi_label ();
1211 def_cfa_1 (label, &cfa);
1212 dwarf2out_args_size (label, args_size);
1215 /* A temporary register used in adjusting SP or setting up the store_reg. */
1216 static unsigned cfa_temp_reg;
1218 /* A temporary value used in adjusting SP or setting up the store_reg. */
1219 static long cfa_temp_value;
1221 /* Record call frame debugging information for an expression, which either
1222 sets SP or FP (adjusting how we calculate the frame address) or saves a
1223 register to the stack. */
1226 dwarf2out_frame_debug_expr (expr, label)
1233 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1234 the PARALLEL independently. The first element is always processed if
1235 it is a SET. This is for backward compatability. Other elements
1236 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1237 flag is set in them. */
1239 if (GET_CODE (expr) == PARALLEL
1240 || GET_CODE (expr) == SEQUENCE)
1243 int limit = XVECLEN (expr, 0);
1245 for (par_index = 0; par_index < limit; par_index++)
1247 rtx x = XVECEXP (expr, 0, par_index);
1249 if (GET_CODE (x) == SET &&
1250 (RTX_FRAME_RELATED_P (x) || par_index == 0))
1251 dwarf2out_frame_debug_expr (x, label);
1256 if (GET_CODE (expr) != SET)
1259 src = SET_SRC (expr);
1260 dest = SET_DEST (expr);
1262 switch (GET_CODE (dest))
1265 /* Update the CFA rule wrt SP or FP. Make sure src is
1266 relative to the current CFA register. */
1267 switch (GET_CODE (src))
1269 /* Setting FP from SP. */
1271 if (cfa.reg == (unsigned) REGNO (src))
1277 /* We used to require that dest be either SP or FP, but the
1278 ARM copies SP to a temporary register, and from there to
1279 FP. So we just rely on the backends to only set
1280 RTX_FRAME_RELATED_P on appropriate insns. */
1281 cfa.reg = REGNO (dest);
1286 if (dest == stack_pointer_rtx)
1289 switch (GET_CODE (XEXP (src, 1)))
1292 offset = INTVAL (XEXP (src, 1));
1295 if ((unsigned) REGNO (XEXP (src, 1)) != cfa_temp_reg)
1297 offset = cfa_temp_value;
1303 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1305 /* Restoring SP from FP in the epilogue. */
1306 if (cfa.reg != (unsigned) HARD_FRAME_POINTER_REGNUM)
1308 cfa.reg = STACK_POINTER_REGNUM;
1310 else if (XEXP (src, 0) != stack_pointer_rtx)
1313 if (GET_CODE (src) == PLUS)
1315 if (cfa.reg == STACK_POINTER_REGNUM)
1316 cfa.offset += offset;
1317 if (cfa_store.reg == STACK_POINTER_REGNUM)
1318 cfa_store.offset += offset;
1320 else if (dest == hard_frame_pointer_rtx)
1322 /* Either setting the FP from an offset of the SP,
1323 or adjusting the FP */
1324 if (! frame_pointer_needed)
1327 if (GET_CODE (XEXP (src, 0)) == REG
1328 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1329 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1331 offset = INTVAL (XEXP (src, 1));
1332 if (GET_CODE (src) == PLUS)
1334 cfa.offset += offset;
1335 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1342 if (GET_CODE (src) != PLUS
1343 || XEXP (src, 1) != stack_pointer_rtx)
1345 if (GET_CODE (XEXP (src, 0)) != REG
1346 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg)
1348 if (cfa.reg != STACK_POINTER_REGNUM)
1350 cfa_store.reg = REGNO (dest);
1351 cfa_store.offset = cfa.offset - cfa_temp_value;
1356 cfa_temp_reg = REGNO (dest);
1357 cfa_temp_value = INTVAL (src);
1361 if (GET_CODE (XEXP (src, 0)) != REG
1362 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg
1363 || (unsigned) REGNO (dest) != cfa_temp_reg
1364 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1366 cfa_temp_value |= INTVAL (XEXP (src, 1));
1372 def_cfa_1 (label, &cfa);
1375 /* Skip over HIGH, assuming it will be followed by a LO_SUM, which
1376 will fill in all of the bits. */
1381 cfa_temp_reg = REGNO (dest);
1382 cfa_temp_value = INTVAL (XEXP (src, 1));
1386 if (GET_CODE (src) != REG)
1389 /* Saving a register to the stack. Make sure dest is relative to the
1391 switch (GET_CODE (XEXP (dest, 0)))
1396 offset = GET_MODE_SIZE (GET_MODE (dest));
1397 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1400 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1401 || cfa_store.reg != STACK_POINTER_REGNUM)
1403 cfa_store.offset += offset;
1404 if (cfa.reg == STACK_POINTER_REGNUM)
1405 cfa.offset = cfa_store.offset;
1407 offset = -cfa_store.offset;
1410 /* With an offset. */
1413 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1414 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1417 if (cfa_store.reg != (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1419 offset -= cfa_store.offset;
1422 /* Without an offset. */
1424 if (cfa_store.reg != (unsigned) REGNO (XEXP (dest, 0)))
1426 offset = -cfa_store.offset;
1433 if (REGNO (src) != STACK_POINTER_REGNUM
1434 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1435 && (unsigned) REGNO (src) == cfa.reg)
1437 /* We're storing the current CFA reg into the stack. */
1439 if (cfa.offset == 0)
1441 /* If the source register is exactly the CFA, assume
1442 we're saving SP like any other register; this happens
1445 def_cfa_1 (label, &cfa);
1446 dwarf2out_reg_save (label, STACK_POINTER_REGNUM, offset);
1451 /* Otherwise, we'll need to look in the stack to
1452 calculate the CFA. */
1454 rtx x = XEXP (dest, 0);
1455 if (GET_CODE (x) != REG)
1457 if (GET_CODE (x) != REG)
1459 cfa.reg = (unsigned) REGNO (x);
1460 cfa.base_offset = offset;
1462 def_cfa_1 (label, &cfa);
1467 def_cfa_1 (label, &cfa);
1468 dwarf2out_reg_save (label, REGNO (src), offset);
1476 /* Record call frame debugging information for INSN, which either
1477 sets SP or FP (adjusting how we calculate the frame address) or saves a
1478 register to the stack. If INSN is NULL_RTX, initialize our state. */
1481 dwarf2out_frame_debug (insn)
1487 if (insn == NULL_RTX)
1489 /* Set up state for generating call frame debug info. */
1491 if (cfa.reg != (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM))
1493 cfa.reg = STACK_POINTER_REGNUM;
1500 if (! RTX_FRAME_RELATED_P (insn))
1502 dwarf2out_stack_adjust (insn);
1506 label = dwarf2out_cfi_label ();
1508 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1510 insn = XEXP (src, 0);
1512 insn = PATTERN (insn);
1514 dwarf2out_frame_debug_expr (insn, label);
1517 /* Return the size of an unsigned LEB128 quantity. */
1519 static inline unsigned long
1520 size_of_uleb128 (value)
1521 register unsigned long value;
1523 register unsigned long size = 0;
1524 register unsigned byte;
1528 byte = (value & 0x7f);
1537 /* Return the size of a signed LEB128 quantity. */
1539 static inline unsigned long
1540 size_of_sleb128 (value)
1541 register long value;
1543 register unsigned long size = 0;
1544 register unsigned byte;
1548 byte = (value & 0x7f);
1552 while (!(((value == 0) && ((byte & 0x40) == 0))
1553 || ((value == -1) && ((byte & 0x40) != 0))));
1558 /* Output an unsigned LEB128 quantity. */
1561 output_uleb128 (value)
1562 register unsigned long value;
1564 unsigned long save_value = value;
1566 fprintf (asm_out_file, "\t%s\t", ASM_BYTE_OP);
1569 register unsigned byte = (value & 0x7f);
1572 /* More bytes to follow. */
1575 fprintf (asm_out_file, "0x%x", byte);
1577 fprintf (asm_out_file, ",");
1582 fprintf (asm_out_file, "\t%s ULEB128 0x%lx", ASM_COMMENT_START, save_value);
1585 /* Output an signed LEB128 quantity. */
1588 output_sleb128 (value)
1589 register long value;
1592 register unsigned byte;
1593 long save_value = value;
1595 fprintf (asm_out_file, "\t%s\t", ASM_BYTE_OP);
1598 byte = (value & 0x7f);
1599 /* arithmetic shift */
1601 more = !((((value == 0) && ((byte & 0x40) == 0))
1602 || ((value == -1) && ((byte & 0x40) != 0))));
1606 fprintf (asm_out_file, "0x%x", byte);
1608 fprintf (asm_out_file, ",");
1613 fprintf (asm_out_file, "\t%s SLEB128 %ld", ASM_COMMENT_START, save_value);
1616 /* Output a Call Frame Information opcode and its operand(s). */
1619 output_cfi (cfi, fde)
1620 register dw_cfi_ref cfi;
1621 register dw_fde_ref fde;
1623 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
1625 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1627 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f));
1629 fprintf (asm_out_file, "\t%s DW_CFA_advance_loc 0x%lx",
1630 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
1631 fputc ('\n', asm_out_file);
1634 else if (cfi->dw_cfi_opc == DW_CFA_offset)
1636 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1638 | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
1640 fprintf (asm_out_file, "\t%s DW_CFA_offset, column 0x%lx",
1641 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1643 fputc ('\n', asm_out_file);
1644 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset);
1645 fputc ('\n', asm_out_file);
1647 else if (cfi->dw_cfi_opc == DW_CFA_restore)
1649 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1651 | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
1653 fprintf (asm_out_file, "\t%s DW_CFA_restore, column 0x%lx",
1654 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1656 fputc ('\n', asm_out_file);
1660 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, cfi->dw_cfi_opc);
1662 fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
1663 dwarf_cfi_name (cfi->dw_cfi_opc));
1665 fputc ('\n', asm_out_file);
1666 switch (cfi->dw_cfi_opc)
1668 case DW_CFA_set_loc:
1669 ASM_OUTPUT_DWARF_ADDR (asm_out_file, cfi->dw_cfi_oprnd1.dw_cfi_addr);
1670 fputc ('\n', asm_out_file);
1672 case DW_CFA_advance_loc1:
1673 ASM_OUTPUT_DWARF_DELTA1 (asm_out_file,
1674 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1675 fde->dw_fde_current_label);
1676 fputc ('\n', asm_out_file);
1677 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1679 case DW_CFA_advance_loc2:
1680 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file,
1681 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1682 fde->dw_fde_current_label);
1683 fputc ('\n', asm_out_file);
1684 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1686 case DW_CFA_advance_loc4:
1687 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
1688 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1689 fde->dw_fde_current_label);
1690 fputc ('\n', asm_out_file);
1691 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1693 #ifdef MIPS_DEBUGGING_INFO
1694 case DW_CFA_MIPS_advance_loc8:
1695 /* TODO: not currently implemented. */
1699 case DW_CFA_offset_extended:
1700 case DW_CFA_GNU_negative_offset_extended:
1701 case DW_CFA_def_cfa:
1702 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1703 fputc ('\n', asm_out_file);
1704 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset);
1705 fputc ('\n', asm_out_file);
1707 case DW_CFA_restore_extended:
1708 case DW_CFA_undefined:
1709 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1710 fputc ('\n', asm_out_file);
1712 case DW_CFA_same_value:
1713 case DW_CFA_def_cfa_register:
1714 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1715 fputc ('\n', asm_out_file);
1717 case DW_CFA_register:
1718 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1719 fputc ('\n', asm_out_file);
1720 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
1721 fputc ('\n', asm_out_file);
1723 case DW_CFA_def_cfa_offset:
1724 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset);
1725 fputc ('\n', asm_out_file);
1727 case DW_CFA_GNU_window_save:
1729 case DW_CFA_GNU_args_size:
1730 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset);
1731 fputc ('\n', asm_out_file);
1733 case DW_CFA_def_cfa_expression:
1734 output_cfa_loc (cfi);
1742 /* Output the call frame information used to used to record information
1743 that relates to calculating the frame pointer, and records the
1744 location of saved registers. */
1747 output_call_frame_info (for_eh)
1750 register unsigned long i;
1751 register dw_fde_ref fde;
1752 register dw_cfi_ref cfi;
1753 char l1[20], l2[20];
1754 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1758 /* Do we want to include a pointer to the exception table? */
1759 int eh_ptr = for_eh && exception_table_p ();
1761 /* If we don't have any functions we'll want to unwind out of, don't
1762 emit any EH unwind information. */
1765 for (i = 0; i < fde_table_in_use; ++i)
1766 if (! fde_table[i].nothrow)
1772 fputc ('\n', asm_out_file);
1774 /* We're going to be generating comments, so turn on app. */
1780 #ifdef EH_FRAME_SECTION
1781 EH_FRAME_SECTION ();
1783 tree label = get_file_function_name ('F');
1785 force_data_section ();
1786 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1787 ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
1788 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
1790 assemble_label ("__FRAME_BEGIN__");
1793 ASM_OUTPUT_SECTION (asm_out_file, FRAME_SECTION);
1795 /* Output the CIE. */
1796 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
1797 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
1798 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1799 ASM_GENERATE_INTERNAL_LABEL (ld, CIE_LENGTH_LABEL, for_eh);
1801 ASM_OUTPUT_DWARF_OFFSET4 (asm_out_file, ld);
1803 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
1806 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
1808 ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
1811 fprintf (asm_out_file, "\t%s Length of Common Information Entry",
1814 fputc ('\n', asm_out_file);
1815 ASM_OUTPUT_LABEL (asm_out_file, l1);
1818 /* Now that the CIE pointer is PC-relative for EH,
1819 use 0 to identify the CIE. */
1820 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
1822 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
1825 fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START);
1827 fputc ('\n', asm_out_file);
1828 if (! for_eh && DWARF_OFFSET_SIZE == 8)
1830 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
1831 fputc ('\n', asm_out_file);
1834 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_CIE_VERSION);
1836 fprintf (asm_out_file, "\t%s CIE Version", ASM_COMMENT_START);
1838 fputc ('\n', asm_out_file);
1841 /* The CIE contains a pointer to the exception region info for the
1842 frame. Make the augmentation string three bytes (including the
1843 trailing null) so the pointer is 4-byte aligned. The Solaris ld
1844 can't handle unaligned relocs. */
1847 ASM_OUTPUT_DWARF_STRING (asm_out_file, "eh");
1848 fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START);
1852 ASM_OUTPUT_ASCII (asm_out_file, "eh", 3);
1854 fputc ('\n', asm_out_file);
1856 ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__");
1858 fprintf (asm_out_file, "\t%s pointer to exception region info",
1863 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
1865 fprintf (asm_out_file, "\t%s CIE Augmentation (none)",
1869 fputc ('\n', asm_out_file);
1872 fprintf (asm_out_file, " (CIE Code Alignment Factor)");
1874 fputc ('\n', asm_out_file);
1875 output_sleb128 (DWARF_CIE_DATA_ALIGNMENT);
1877 fprintf (asm_out_file, " (CIE Data Alignment Factor)");
1879 fputc ('\n', asm_out_file);
1880 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_FRAME_RETURN_COLUMN);
1882 fprintf (asm_out_file, "\t%s CIE RA Column", ASM_COMMENT_START);
1884 fputc ('\n', asm_out_file);
1886 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
1887 output_cfi (cfi, NULL);
1889 /* Pad the CIE out to an address sized boundary. */
1890 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1891 ASM_OUTPUT_LABEL (asm_out_file, l2);
1892 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1893 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
1895 fprintf (asm_out_file, "\t%s CIE Length Symbol", ASM_COMMENT_START);
1896 fputc ('\n', asm_out_file);
1899 /* Loop through all of the FDE's. */
1900 for (i = 0; i < fde_table_in_use; ++i)
1902 fde = &fde_table[i];
1904 /* Don't emit EH unwind info for leaf functions. */
1905 if (for_eh && fde->nothrow)
1908 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
1909 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
1910 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1911 ASM_GENERATE_INTERNAL_LABEL (ld, FDE_LENGTH_LABEL, for_eh + i * 2);
1913 ASM_OUTPUT_DWARF_OFFSET4 (asm_out_file, ld);
1915 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
1918 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
1920 ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
1923 fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START);
1924 fputc ('\n', asm_out_file);
1925 ASM_OUTPUT_LABEL (asm_out_file, l1);
1927 /* ??? This always emits a 4 byte offset when for_eh is true, but it
1928 emits a target dependent sized offset when for_eh is not true.
1929 This inconsistency may confuse gdb. The only case where we need a
1930 non-4 byte offset is for the Irix6 N64 ABI, so we may lose SGI
1931 compatibility if we emit a 4 byte offset. We need a 4 byte offset
1932 though in order to be compatible with the dwarf_fde struct in frame.c.
1933 If the for_eh case is changed, then the struct in frame.c has
1934 to be adjusted appropriately. */
1936 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l1, "__FRAME_BEGIN__");
1938 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (FRAME_SECTION));
1940 fprintf (asm_out_file, "\t%s FDE CIE offset", ASM_COMMENT_START);
1942 fputc ('\n', asm_out_file);
1943 ASM_OUTPUT_DWARF_ADDR (asm_out_file, fde->dw_fde_begin);
1945 fprintf (asm_out_file, "\t%s FDE initial location", ASM_COMMENT_START);
1947 fputc ('\n', asm_out_file);
1948 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file,
1949 fde->dw_fde_end, fde->dw_fde_begin);
1951 fprintf (asm_out_file, "\t%s FDE address range", ASM_COMMENT_START);
1953 fputc ('\n', asm_out_file);
1955 /* Loop through the Call Frame Instructions associated with
1957 fde->dw_fde_current_label = fde->dw_fde_begin;
1958 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
1959 output_cfi (cfi, fde);
1961 /* Pad the FDE out to an address sized boundary. */
1962 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1963 ASM_OUTPUT_LABEL (asm_out_file, l2);
1964 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1965 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
1967 fprintf (asm_out_file, "\t%s FDE Length Symbol", ASM_COMMENT_START);
1968 fputc ('\n', asm_out_file);
1971 #ifndef EH_FRAME_SECTION
1974 /* Emit terminating zero for table. */
1975 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
1976 fputc ('\n', asm_out_file);
1979 #ifdef MIPS_DEBUGGING_INFO
1980 /* Work around Irix 6 assembler bug whereby labels at the end of a section
1981 get a value of 0. Putting .align 0 after the label fixes it. */
1982 ASM_OUTPUT_ALIGN (asm_out_file, 0);
1985 /* Turn off app to make assembly quicker. */
1990 /* Output a marker (i.e. a label) for the beginning of a function, before
1994 dwarf2out_begin_prologue ()
1996 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1997 register dw_fde_ref fde;
1999 ++current_funcdef_number;
2001 function_section (current_function_decl);
2002 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2003 current_funcdef_number);
2004 ASM_OUTPUT_LABEL (asm_out_file, label);
2005 current_function_func_begin_label = get_identifier (label);
2007 /* Expand the fde table if necessary. */
2008 if (fde_table_in_use == fde_table_allocated)
2010 fde_table_allocated += FDE_TABLE_INCREMENT;
2012 = (dw_fde_ref) xrealloc (fde_table,
2013 fde_table_allocated * sizeof (dw_fde_node));
2016 /* Record the FDE associated with this function. */
2017 current_funcdef_fde = fde_table_in_use;
2019 /* Add the new FDE at the end of the fde_table. */
2020 fde = &fde_table[fde_table_in_use++];
2021 fde->dw_fde_begin = xstrdup (label);
2022 fde->dw_fde_current_label = NULL;
2023 fde->dw_fde_end = NULL;
2024 fde->dw_fde_cfi = NULL;
2025 fde->nothrow = current_function_nothrow;
2027 args_size = old_args_size = 0;
2030 /* Output a marker (i.e. a label) for the absolute end of the generated code
2031 for a function definition. This gets called *after* the epilogue code has
2035 dwarf2out_end_epilogue ()
2038 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2040 /* Output a label to mark the endpoint of the code generated for this
2042 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, current_funcdef_number);
2043 ASM_OUTPUT_LABEL (asm_out_file, label);
2044 fde = &fde_table[fde_table_in_use - 1];
2045 fde->dw_fde_end = xstrdup (label);
2049 dwarf2out_frame_init ()
2051 /* Allocate the initial hunk of the fde_table. */
2052 fde_table = (dw_fde_ref) xcalloc (FDE_TABLE_INCREMENT, sizeof (dw_fde_node));
2053 fde_table_allocated = FDE_TABLE_INCREMENT;
2054 fde_table_in_use = 0;
2056 /* Generate the CFA instructions common to all FDE's. Do it now for the
2057 sake of lookup_cfa. */
2059 #ifdef DWARF2_UNWIND_INFO
2060 /* On entry, the Canonical Frame Address is at SP. */
2061 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2062 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2067 dwarf2out_frame_finish ()
2069 /* Output call frame information. */
2070 #ifdef MIPS_DEBUGGING_INFO
2071 if (write_symbols == DWARF2_DEBUG)
2072 output_call_frame_info (0);
2073 if (flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
2074 output_call_frame_info (1);
2076 if (write_symbols == DWARF2_DEBUG
2077 || flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
2078 output_call_frame_info (1);
2082 /* And now, the subset of the debugging information support code necessary
2083 for emitting location expressions. */
2085 typedef struct dw_val_struct *dw_val_ref;
2086 typedef struct die_struct *dw_die_ref;
2087 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2089 /* Each DIE may have a series of attribute/value pairs. Values
2090 can take on several forms. The forms that are used in this
2091 implementation are listed below. */
2098 dw_val_class_unsigned_const,
2099 dw_val_class_long_long,
2102 dw_val_class_die_ref,
2103 dw_val_class_fde_ref,
2104 dw_val_class_lbl_id,
2105 dw_val_class_lbl_offset,
2110 /* Describe a double word constant value. */
2111 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2113 typedef struct dw_long_long_struct
2120 /* Describe a floating point constant value. */
2122 typedef struct dw_fp_struct
2129 /* The dw_val_node describes an attribute's value, as it is
2130 represented internally. */
2132 typedef struct dw_val_struct
2134 dw_val_class val_class;
2138 dw_loc_descr_ref val_loc;
2140 long unsigned val_unsigned;
2141 dw_long_long_const val_long_long;
2142 dw_float_const val_float;
2147 unsigned val_fde_index;
2150 unsigned char val_flag;
2156 /* Locations in memory are described using a sequence of stack machine
2159 typedef struct dw_loc_descr_struct
2161 dw_loc_descr_ref dw_loc_next;
2162 enum dwarf_location_atom dw_loc_opc;
2163 dw_val_node dw_loc_oprnd1;
2164 dw_val_node dw_loc_oprnd2;
2168 static const char *dwarf_stack_op_name PARAMS ((unsigned));
2169 static dw_loc_descr_ref new_loc_descr PARAMS ((enum dwarf_location_atom,
2172 static void add_loc_descr PARAMS ((dw_loc_descr_ref *,
2174 static unsigned long size_of_loc_descr PARAMS ((dw_loc_descr_ref));
2175 static unsigned long size_of_locs PARAMS ((dw_loc_descr_ref));
2176 static void output_loc_operands PARAMS ((dw_loc_descr_ref));
2177 static void output_loc_sequence PARAMS ((dw_loc_descr_ref));
2179 /* Convert a DWARF stack opcode into its string name. */
2182 dwarf_stack_op_name (op)
2183 register unsigned op;
2188 return "DW_OP_addr";
2190 return "DW_OP_deref";
2192 return "DW_OP_const1u";
2194 return "DW_OP_const1s";
2196 return "DW_OP_const2u";
2198 return "DW_OP_const2s";
2200 return "DW_OP_const4u";
2202 return "DW_OP_const4s";
2204 return "DW_OP_const8u";
2206 return "DW_OP_const8s";
2208 return "DW_OP_constu";
2210 return "DW_OP_consts";
2214 return "DW_OP_drop";
2216 return "DW_OP_over";
2218 return "DW_OP_pick";
2220 return "DW_OP_swap";
2224 return "DW_OP_xderef";
2232 return "DW_OP_minus";
2244 return "DW_OP_plus";
2245 case DW_OP_plus_uconst:
2246 return "DW_OP_plus_uconst";
2252 return "DW_OP_shra";
2270 return "DW_OP_skip";
2272 return "DW_OP_lit0";
2274 return "DW_OP_lit1";
2276 return "DW_OP_lit2";
2278 return "DW_OP_lit3";
2280 return "DW_OP_lit4";
2282 return "DW_OP_lit5";
2284 return "DW_OP_lit6";
2286 return "DW_OP_lit7";
2288 return "DW_OP_lit8";
2290 return "DW_OP_lit9";
2292 return "DW_OP_lit10";
2294 return "DW_OP_lit11";
2296 return "DW_OP_lit12";
2298 return "DW_OP_lit13";
2300 return "DW_OP_lit14";
2302 return "DW_OP_lit15";
2304 return "DW_OP_lit16";
2306 return "DW_OP_lit17";
2308 return "DW_OP_lit18";
2310 return "DW_OP_lit19";
2312 return "DW_OP_lit20";
2314 return "DW_OP_lit21";
2316 return "DW_OP_lit22";
2318 return "DW_OP_lit23";
2320 return "DW_OP_lit24";
2322 return "DW_OP_lit25";
2324 return "DW_OP_lit26";
2326 return "DW_OP_lit27";
2328 return "DW_OP_lit28";
2330 return "DW_OP_lit29";
2332 return "DW_OP_lit30";
2334 return "DW_OP_lit31";
2336 return "DW_OP_reg0";
2338 return "DW_OP_reg1";
2340 return "DW_OP_reg2";
2342 return "DW_OP_reg3";
2344 return "DW_OP_reg4";
2346 return "DW_OP_reg5";
2348 return "DW_OP_reg6";
2350 return "DW_OP_reg7";
2352 return "DW_OP_reg8";
2354 return "DW_OP_reg9";
2356 return "DW_OP_reg10";
2358 return "DW_OP_reg11";
2360 return "DW_OP_reg12";
2362 return "DW_OP_reg13";
2364 return "DW_OP_reg14";
2366 return "DW_OP_reg15";
2368 return "DW_OP_reg16";
2370 return "DW_OP_reg17";
2372 return "DW_OP_reg18";
2374 return "DW_OP_reg19";
2376 return "DW_OP_reg20";
2378 return "DW_OP_reg21";
2380 return "DW_OP_reg22";
2382 return "DW_OP_reg23";
2384 return "DW_OP_reg24";
2386 return "DW_OP_reg25";
2388 return "DW_OP_reg26";
2390 return "DW_OP_reg27";
2392 return "DW_OP_reg28";
2394 return "DW_OP_reg29";
2396 return "DW_OP_reg30";
2398 return "DW_OP_reg31";
2400 return "DW_OP_breg0";
2402 return "DW_OP_breg1";
2404 return "DW_OP_breg2";
2406 return "DW_OP_breg3";
2408 return "DW_OP_breg4";
2410 return "DW_OP_breg5";
2412 return "DW_OP_breg6";
2414 return "DW_OP_breg7";
2416 return "DW_OP_breg8";
2418 return "DW_OP_breg9";
2420 return "DW_OP_breg10";
2422 return "DW_OP_breg11";
2424 return "DW_OP_breg12";
2426 return "DW_OP_breg13";
2428 return "DW_OP_breg14";
2430 return "DW_OP_breg15";
2432 return "DW_OP_breg16";
2434 return "DW_OP_breg17";
2436 return "DW_OP_breg18";
2438 return "DW_OP_breg19";
2440 return "DW_OP_breg20";
2442 return "DW_OP_breg21";
2444 return "DW_OP_breg22";
2446 return "DW_OP_breg23";
2448 return "DW_OP_breg24";
2450 return "DW_OP_breg25";
2452 return "DW_OP_breg26";
2454 return "DW_OP_breg27";
2456 return "DW_OP_breg28";
2458 return "DW_OP_breg29";
2460 return "DW_OP_breg30";
2462 return "DW_OP_breg31";
2464 return "DW_OP_regx";
2466 return "DW_OP_fbreg";
2468 return "DW_OP_bregx";
2470 return "DW_OP_piece";
2471 case DW_OP_deref_size:
2472 return "DW_OP_deref_size";
2473 case DW_OP_xderef_size:
2474 return "DW_OP_xderef_size";
2478 return "OP_<unknown>";
2482 /* Return a pointer to a newly allocated location description. Location
2483 descriptions are simple expression terms that can be strung
2484 together to form more complicated location (address) descriptions. */
2486 static inline dw_loc_descr_ref
2487 new_loc_descr (op, oprnd1, oprnd2)
2488 register enum dwarf_location_atom op;
2489 register unsigned long oprnd1;
2490 register unsigned long oprnd2;
2492 /* Use xcalloc here so we clear out all of the long_long constant in
2494 register dw_loc_descr_ref descr
2495 = (dw_loc_descr_ref) xcalloc (1, sizeof (dw_loc_descr_node));
2497 descr->dw_loc_opc = op;
2498 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
2499 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
2500 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
2501 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
2506 /* Add a location description term to a location description expression. */
2509 add_loc_descr (list_head, descr)
2510 register dw_loc_descr_ref *list_head;
2511 register dw_loc_descr_ref descr;
2513 register dw_loc_descr_ref *d;
2515 /* Find the end of the chain. */
2516 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
2522 /* Return the size of a location descriptor. */
2524 static unsigned long
2525 size_of_loc_descr (loc)
2526 register dw_loc_descr_ref loc;
2528 register unsigned long size = 1;
2530 switch (loc->dw_loc_opc)
2533 size += DWARF2_ADDR_SIZE;
2552 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2555 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2560 case DW_OP_plus_uconst:
2561 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2599 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2602 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2605 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2608 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2609 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
2612 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2614 case DW_OP_deref_size:
2615 case DW_OP_xderef_size:
2625 /* Return the size of a series of location descriptors. */
2627 static unsigned long
2629 register dw_loc_descr_ref loc;
2631 register unsigned long size = 0;
2633 for (; loc != NULL; loc = loc->dw_loc_next)
2634 size += size_of_loc_descr (loc);
2639 /* Output location description stack opcode's operands (if any). */
2642 output_loc_operands (loc)
2643 register dw_loc_descr_ref loc;
2645 register dw_val_ref val1 = &loc->dw_loc_oprnd1;
2646 register dw_val_ref val2 = &loc->dw_loc_oprnd2;
2648 switch (loc->dw_loc_opc)
2650 #ifdef DWARF2_DEBUGGING_INFO
2652 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, val1->v.val_addr);
2653 fputc ('\n', asm_out_file);
2657 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, val1->v.val_int);
2658 fputc ('\n', asm_out_file);
2662 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, val1->v.val_int);
2663 fputc ('\n', asm_out_file);
2668 fputc ('\n', asm_out_file);
2672 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, val1->v.val_int);
2673 fputc ('\n', asm_out_file);
2685 /* We currently don't make any attempt to make sure these are
2686 aligned properly like we do for the main unwind info, so
2687 don't support emitting things larger than a byte if we're
2688 only doing unwinding. */
2693 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_flag);
2694 fputc ('\n', asm_out_file);
2697 output_uleb128 (val1->v.val_unsigned);
2698 fputc ('\n', asm_out_file);
2701 output_sleb128 (val1->v.val_int);
2702 fputc ('\n', asm_out_file);
2705 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_int);
2706 fputc ('\n', asm_out_file);
2708 case DW_OP_plus_uconst:
2709 output_uleb128 (val1->v.val_unsigned);
2710 fputc ('\n', asm_out_file);
2744 output_sleb128 (val1->v.val_int);
2745 fputc ('\n', asm_out_file);
2748 output_uleb128 (val1->v.val_unsigned);
2749 fputc ('\n', asm_out_file);
2752 output_sleb128 (val1->v.val_int);
2753 fputc ('\n', asm_out_file);
2756 output_uleb128 (val1->v.val_unsigned);
2757 fputc ('\n', asm_out_file);
2758 output_sleb128 (val2->v.val_int);
2759 fputc ('\n', asm_out_file);
2762 output_uleb128 (val1->v.val_unsigned);
2763 fputc ('\n', asm_out_file);
2765 case DW_OP_deref_size:
2766 case DW_OP_xderef_size:
2767 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_flag);
2768 fputc ('\n', asm_out_file);
2771 /* Other codes have no operands. */
2776 /* Output a sequence of location operations. */
2779 output_loc_sequence (loc)
2780 dw_loc_descr_ref loc;
2782 for (; loc != NULL; loc = loc->dw_loc_next)
2784 /* Output the opcode. */
2785 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, loc->dw_loc_opc);
2787 fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
2788 dwarf_stack_op_name (loc->dw_loc_opc));
2790 fputc ('\n', asm_out_file);
2792 /* Output the operand(s) (if any). */
2793 output_loc_operands (loc);
2797 /* This routine will generate the correct assembly data for a location
2798 description based on a cfi entry with a complex address. */
2801 output_cfa_loc (cfi)
2804 dw_loc_descr_ref loc;
2807 /* Output the size of the block. */
2808 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
2809 size = size_of_locs (loc);
2810 output_uleb128 (size);
2811 fputc ('\n', asm_out_file);
2813 /* Now output the operations themselves. */
2814 output_loc_sequence (loc);
2817 /* This function builds a dwarf location descriptor seqeunce from
2818 a dw_cfa_location. */
2820 static struct dw_loc_descr_struct *
2822 dw_cfa_location *cfa;
2824 struct dw_loc_descr_struct *head, *tmp;
2826 if (cfa->indirect == 0)
2829 if (cfa->base_offset)
2830 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
2832 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
2833 head->dw_loc_oprnd1.val_class = dw_val_class_const;
2834 tmp = new_loc_descr (DW_OP_deref, 0, 0);
2835 add_loc_descr (&head, tmp);
2836 if (cfa->offset != 0)
2838 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
2839 add_loc_descr (&head, tmp);
2844 /* This function fills in aa dw_cfa_location structure from a
2845 dwarf location descriptor sequence. */
2848 get_cfa_from_loc_descr (cfa, loc)
2849 dw_cfa_location *cfa;
2850 struct dw_loc_descr_struct *loc;
2852 struct dw_loc_descr_struct *ptr;
2854 cfa->base_offset = 0;
2858 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
2860 enum dwarf_location_atom op = ptr->dw_loc_opc;
2895 cfa->reg = op - DW_OP_reg0;
2898 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
2932 cfa->reg = op - DW_OP_breg0;
2933 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
2936 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
2937 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
2942 case DW_OP_plus_uconst:
2943 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
2946 fatal ("DW_LOC_OP %s not implememnted yet.\n",
2947 dwarf_stack_op_name (ptr->dw_loc_opc));
2951 #endif /* .debug_frame support */
2953 /* And now, the support for symbolic debugging information. */
2954 #ifdef DWARF2_DEBUGGING_INFO
2956 /* NOTE: In the comments in this file, many references are made to
2957 "Debugging Information Entries". This term is abbreviated as `DIE'
2958 throughout the remainder of this file. */
2960 /* An internal representation of the DWARF output is built, and then
2961 walked to generate the DWARF debugging info. The walk of the internal
2962 representation is done after the entire program has been compiled.
2963 The types below are used to describe the internal representation. */
2965 /* Various DIE's use offsets relative to the beginning of the
2966 .debug_info section to refer to each other. */
2968 typedef long int dw_offset;
2970 /* Define typedefs here to avoid circular dependencies. */
2972 typedef struct dw_attr_struct *dw_attr_ref;
2973 typedef struct dw_line_info_struct *dw_line_info_ref;
2974 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
2975 typedef struct pubname_struct *pubname_ref;
2976 typedef dw_die_ref *arange_ref;
2978 /* Each entry in the line_info_table maintains the file and
2979 line number associated with the label generated for that
2980 entry. The label gives the PC value associated with
2981 the line number entry. */
2983 typedef struct dw_line_info_struct
2985 unsigned long dw_file_num;
2986 unsigned long dw_line_num;
2990 /* Line information for functions in separate sections; each one gets its
2992 typedef struct dw_separate_line_info_struct
2994 unsigned long dw_file_num;
2995 unsigned long dw_line_num;
2996 unsigned long function;
2998 dw_separate_line_info_entry;
3000 /* Each DIE attribute has a field specifying the attribute kind,
3001 a link to the next attribute in the chain, and an attribute value.
3002 Attributes are typically linked below the DIE they modify. */
3004 typedef struct dw_attr_struct
3006 enum dwarf_attribute dw_attr;
3007 dw_attr_ref dw_attr_next;
3008 dw_val_node dw_attr_val;
3012 /* The Debugging Information Entry (DIE) structure */
3014 typedef struct die_struct
3016 enum dwarf_tag die_tag;
3018 dw_attr_ref die_attr;
3019 dw_die_ref die_parent;
3020 dw_die_ref die_child;
3022 dw_offset die_offset;
3023 unsigned long die_abbrev;
3027 /* The pubname structure */
3029 typedef struct pubname_struct
3036 /* The limbo die list structure. */
3037 typedef struct limbo_die_struct
3040 struct limbo_die_struct *next;
3044 /* How to start an assembler comment. */
3045 #ifndef ASM_COMMENT_START
3046 #define ASM_COMMENT_START ";#"
3049 /* Define a macro which returns non-zero for a TYPE_DECL which was
3050 implicitly generated for a tagged type.
3052 Note that unlike the gcc front end (which generates a NULL named
3053 TYPE_DECL node for each complete tagged type, each array type, and
3054 each function type node created) the g++ front end generates a
3055 _named_ TYPE_DECL node for each tagged type node created.
3056 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3057 generate a DW_TAG_typedef DIE for them. */
3059 #define TYPE_DECL_IS_STUB(decl) \
3060 (DECL_NAME (decl) == NULL_TREE \
3061 || (DECL_ARTIFICIAL (decl) \
3062 && is_tagged_type (TREE_TYPE (decl)) \
3063 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3064 /* This is necessary for stub decls that \
3065 appear in nested inline functions. */ \
3066 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3067 && (decl_ultimate_origin (decl) \
3068 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3070 /* Information concerning the compilation unit's programming
3071 language, and compiler version. */
3073 extern int flag_traditional;
3075 /* Fixed size portion of the DWARF compilation unit header. */
3076 #define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3)
3078 /* Fixed size portion of debugging line information prolog. */
3079 #define DWARF_LINE_PROLOG_HEADER_SIZE 5
3081 /* Fixed size portion of public names info. */
3082 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3084 /* Fixed size portion of the address range info. */
3085 #define DWARF_ARANGES_HEADER_SIZE \
3086 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3087 - DWARF_OFFSET_SIZE)
3089 /* Size of padding portion in the address range info. It must be
3090 aligned to twice the pointer size. */
3091 #define DWARF_ARANGES_PAD_SIZE \
3092 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3093 - (2 * DWARF_OFFSET_SIZE + 4))
3095 /* The default is to have gcc emit the line number tables. */
3096 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3097 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3100 /* Define the architecture-dependent minimum instruction length (in bytes).
3101 In this implementation of DWARF, this field is used for information
3102 purposes only. Since GCC generates assembly language, we have
3103 no a priori knowledge of how many instruction bytes are generated
3104 for each source line, and therefore can use only the DW_LNE_set_address
3105 and DW_LNS_fixed_advance_pc line information commands. */
3107 #ifndef DWARF_LINE_MIN_INSTR_LENGTH
3108 #define DWARF_LINE_MIN_INSTR_LENGTH 4
3111 /* Minimum line offset in a special line info. opcode.
3112 This value was chosen to give a reasonable range of values. */
3113 #define DWARF_LINE_BASE -10
3115 /* First special line opcde - leave room for the standard opcodes. */
3116 #define DWARF_LINE_OPCODE_BASE 10
3118 /* Range of line offsets in a special line info. opcode. */
3119 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3121 /* Flag that indicates the initial value of the is_stmt_start flag.
3122 In the present implementation, we do not mark any lines as
3123 the beginning of a source statement, because that information
3124 is not made available by the GCC front-end. */
3125 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3127 /* This location is used by calc_die_sizes() to keep track
3128 the offset of each DIE within the .debug_info section. */
3129 static unsigned long next_die_offset;
3131 /* Record the root of the DIE's built for the current compilation unit. */
3132 static dw_die_ref comp_unit_die;
3134 /* A list of DIEs with a NULL parent waiting to be relocated. */
3135 static limbo_die_node *limbo_die_list = 0;
3137 /* Pointer to an array of filenames referenced by this compilation unit. */
3138 static char **file_table;
3140 /* Total number of entries in the table (i.e. array) pointed to by
3141 `file_table'. This is the *total* and includes both used and unused
3143 static unsigned file_table_allocated;
3145 /* Number of entries in the file_table which are actually in use. */
3146 static unsigned file_table_in_use;
3148 /* Size (in elements) of increments by which we may expand the filename
3150 #define FILE_TABLE_INCREMENT 64
3152 /* Local pointer to the name of the main input file. Initialized in
3154 static const char *primary_filename;
3156 /* A pointer to the base of a table of references to DIE's that describe
3157 declarations. The table is indexed by DECL_UID() which is a unique
3158 number identifying each decl. */
3159 static dw_die_ref *decl_die_table;
3161 /* Number of elements currently allocated for the decl_die_table. */
3162 static unsigned decl_die_table_allocated;
3164 /* Number of elements in decl_die_table currently in use. */
3165 static unsigned decl_die_table_in_use;
3167 /* Size (in elements) of increments by which we may expand the
3169 #define DECL_DIE_TABLE_INCREMENT 256
3171 /* A pointer to the base of a table of references to declaration
3172 scopes. This table is a display which tracks the nesting
3173 of declaration scopes at the current scope and containing
3174 scopes. This table is used to find the proper place to
3175 define type declaration DIE's. */
3176 static tree *decl_scope_table;
3178 /* Number of elements currently allocated for the decl_scope_table. */
3179 static int decl_scope_table_allocated;
3181 /* Current level of nesting of declaration scopes. */
3182 static int decl_scope_depth;
3184 /* Size (in elements) of increments by which we may expand the
3185 decl_scope_table. */
3186 #define DECL_SCOPE_TABLE_INCREMENT 64
3188 /* A pointer to the base of a list of references to DIE's that
3189 are uniquely identified by their tag, presence/absence of
3190 children DIE's, and list of attribute/value pairs. */
3191 static dw_die_ref *abbrev_die_table;
3193 /* Number of elements currently allocated for abbrev_die_table. */
3194 static unsigned abbrev_die_table_allocated;
3196 /* Number of elements in type_die_table currently in use. */
3197 static unsigned abbrev_die_table_in_use;
3199 /* Size (in elements) of increments by which we may expand the
3200 abbrev_die_table. */
3201 #define ABBREV_DIE_TABLE_INCREMENT 256
3203 /* A pointer to the base of a table that contains line information
3204 for each source code line in .text in the compilation unit. */
3205 static dw_line_info_ref line_info_table;
3207 /* Number of elements currently allocated for line_info_table. */
3208 static unsigned line_info_table_allocated;
3210 /* Number of elements in separate_line_info_table currently in use. */
3211 static unsigned separate_line_info_table_in_use;
3213 /* A pointer to the base of a table that contains line information
3214 for each source code line outside of .text in the compilation unit. */
3215 static dw_separate_line_info_ref separate_line_info_table;
3217 /* Number of elements currently allocated for separate_line_info_table. */
3218 static unsigned separate_line_info_table_allocated;
3220 /* Number of elements in line_info_table currently in use. */
3221 static unsigned line_info_table_in_use;
3223 /* Size (in elements) of increments by which we may expand the
3225 #define LINE_INFO_TABLE_INCREMENT 1024
3227 /* A pointer to the base of a table that contains a list of publicly
3228 accessible names. */
3229 static pubname_ref pubname_table;
3231 /* Number of elements currently allocated for pubname_table. */
3232 static unsigned pubname_table_allocated;
3234 /* Number of elements in pubname_table currently in use. */
3235 static unsigned pubname_table_in_use;
3237 /* Size (in elements) of increments by which we may expand the
3239 #define PUBNAME_TABLE_INCREMENT 64
3241 /* A pointer to the base of a table that contains a list of publicly
3242 accessible names. */
3243 static arange_ref arange_table;
3245 /* Number of elements currently allocated for arange_table. */
3246 static unsigned arange_table_allocated;
3248 /* Number of elements in arange_table currently in use. */
3249 static unsigned arange_table_in_use;
3251 /* Size (in elements) of increments by which we may expand the
3253 #define ARANGE_TABLE_INCREMENT 64
3255 /* A pointer to the base of a list of incomplete types which might be
3256 completed at some later time. */
3258 static tree *incomplete_types_list;
3260 /* Number of elements currently allocated for the incomplete_types_list. */
3261 static unsigned incomplete_types_allocated;
3263 /* Number of elements of incomplete_types_list currently in use. */
3264 static unsigned incomplete_types;
3266 /* Size (in elements) of increments by which we may expand the incomplete
3267 types list. Actually, a single hunk of space of this size should
3268 be enough for most typical programs. */
3269 #define INCOMPLETE_TYPES_INCREMENT 64
3271 /* Record whether the function being analyzed contains inlined functions. */
3272 static int current_function_has_inlines;
3273 #if 0 && defined (MIPS_DEBUGGING_INFO)
3274 static int comp_unit_has_inlines;
3277 /* Array of RTXes referenced by the debugging information, which therefore
3278 must be kept around forever. We do this rather than perform GC on
3279 the dwarf info because almost all of the dwarf info lives forever, and
3280 it's easier to support non-GC frontends this way. */
3281 static varray_type used_rtx_varray;
3283 /* Forward declarations for functions defined in this file. */
3285 static int is_pseudo_reg PARAMS ((rtx));
3286 static tree type_main_variant PARAMS ((tree));
3287 static int is_tagged_type PARAMS ((tree));
3288 static const char *dwarf_tag_name PARAMS ((unsigned));
3289 static const char *dwarf_attr_name PARAMS ((unsigned));
3290 static const char *dwarf_form_name PARAMS ((unsigned));
3292 static const char *dwarf_type_encoding_name PARAMS ((unsigned));
3294 static tree decl_ultimate_origin PARAMS ((tree));
3295 static tree block_ultimate_origin PARAMS ((tree));
3296 static tree decl_class_context PARAMS ((tree));
3297 static void add_dwarf_attr PARAMS ((dw_die_ref, dw_attr_ref));
3298 static void add_AT_flag PARAMS ((dw_die_ref,
3299 enum dwarf_attribute,
3301 static void add_AT_int PARAMS ((dw_die_ref,
3302 enum dwarf_attribute, long));
3303 static void add_AT_unsigned PARAMS ((dw_die_ref,
3304 enum dwarf_attribute,
3306 static void add_AT_long_long PARAMS ((dw_die_ref,
3307 enum dwarf_attribute,
3310 static void add_AT_float PARAMS ((dw_die_ref,
3311 enum dwarf_attribute,
3313 static void add_AT_string PARAMS ((dw_die_ref,
3314 enum dwarf_attribute,
3316 static void add_AT_die_ref PARAMS ((dw_die_ref,
3317 enum dwarf_attribute,
3319 static void add_AT_fde_ref PARAMS ((dw_die_ref,
3320 enum dwarf_attribute,
3322 static void add_AT_loc PARAMS ((dw_die_ref,
3323 enum dwarf_attribute,
3325 static void add_AT_addr PARAMS ((dw_die_ref,
3326 enum dwarf_attribute,
3328 static void add_AT_lbl_id PARAMS ((dw_die_ref,
3329 enum dwarf_attribute,
3331 static void add_AT_lbl_offset PARAMS ((dw_die_ref,
3332 enum dwarf_attribute,
3334 static dw_attr_ref get_AT PARAMS ((dw_die_ref,
3335 enum dwarf_attribute));
3336 static const char *get_AT_low_pc PARAMS ((dw_die_ref));
3337 static const char *get_AT_hi_pc PARAMS ((dw_die_ref));
3338 static const char *get_AT_string PARAMS ((dw_die_ref,
3339 enum dwarf_attribute));
3340 static int get_AT_flag PARAMS ((dw_die_ref,
3341 enum dwarf_attribute));
3342 static unsigned get_AT_unsigned PARAMS ((dw_die_ref,
3343 enum dwarf_attribute));
3344 static inline dw_die_ref get_AT_ref PARAMS ((dw_die_ref,
3345 enum dwarf_attribute));
3346 static int is_c_family PARAMS ((void));
3347 static int is_java PARAMS ((void));
3348 static int is_fortran PARAMS ((void));
3349 static void remove_AT PARAMS ((dw_die_ref,
3350 enum dwarf_attribute));
3351 static void remove_children PARAMS ((dw_die_ref));
3352 static void add_child_die PARAMS ((dw_die_ref, dw_die_ref));
3353 static dw_die_ref new_die PARAMS ((enum dwarf_tag, dw_die_ref));
3354 static dw_die_ref lookup_type_die PARAMS ((tree));
3355 static void equate_type_number_to_die PARAMS ((tree, dw_die_ref));
3356 static dw_die_ref lookup_decl_die PARAMS ((tree));
3357 static void equate_decl_number_to_die PARAMS ((tree, dw_die_ref));
3358 static void print_spaces PARAMS ((FILE *));
3359 static void print_die PARAMS ((dw_die_ref, FILE *));
3360 static void print_dwarf_line_table PARAMS ((FILE *));
3361 static void reverse_die_lists PARAMS ((dw_die_ref));
3362 static void reverse_all_dies PARAMS ((dw_die_ref));
3363 static dw_die_ref push_new_compile_unit PARAMS ((dw_die_ref, dw_die_ref));
3364 static dw_die_ref pop_compile_unit PARAMS ((dw_die_ref));
3365 static void loc_checksum PARAMS ((dw_loc_descr_ref, struct md5_ctx *));
3366 static void attr_checksum PARAMS ((dw_attr_ref, struct md5_ctx *));
3367 static void die_checksum PARAMS ((dw_die_ref, struct md5_ctx *));
3368 static void compute_section_prefix PARAMS ((dw_die_ref));
3369 static int is_type_die PARAMS ((dw_die_ref));
3370 static int is_comdat_die PARAMS ((dw_die_ref));
3371 static int is_symbol_die PARAMS ((dw_die_ref));
3372 static char *gen_internal_sym PARAMS ((void));
3373 static void assign_symbol_names PARAMS ((dw_die_ref));
3374 static void break_out_includes PARAMS ((dw_die_ref));
3375 static void add_sibling_attributes PARAMS ((dw_die_ref));
3376 static void build_abbrev_table PARAMS ((dw_die_ref));
3377 static unsigned long size_of_string PARAMS ((const char *));
3378 static int constant_size PARAMS ((long unsigned));
3379 static unsigned long size_of_die PARAMS ((dw_die_ref));
3380 static void calc_die_sizes PARAMS ((dw_die_ref));
3381 static void clear_die_sizes PARAMS ((dw_die_ref));
3382 static unsigned long size_of_line_prolog PARAMS ((void));
3383 static unsigned long size_of_pubnames PARAMS ((void));
3384 static unsigned long size_of_aranges PARAMS ((void));
3385 static enum dwarf_form value_format PARAMS ((dw_attr_ref));
3386 static void output_value_format PARAMS ((dw_attr_ref));
3387 static void output_abbrev_section PARAMS ((void));
3388 static void output_die_symbol PARAMS ((dw_die_ref));
3389 static void output_symbolic_ref PARAMS ((dw_die_ref));
3390 static void output_die PARAMS ((dw_die_ref));
3391 static void output_compilation_unit_header PARAMS ((void));
3392 static void output_comp_unit PARAMS ((dw_die_ref));
3393 static const char *dwarf2_name PARAMS ((tree, int));
3394 static void add_pubname PARAMS ((tree, dw_die_ref));
3395 static void output_pubnames PARAMS ((void));
3396 static void add_arange PARAMS ((tree, dw_die_ref));
3397 static void output_aranges PARAMS ((void));
3398 static void output_line_info PARAMS ((void));
3399 static dw_die_ref base_type_die PARAMS ((tree));
3400 static tree root_type PARAMS ((tree));
3401 static int is_base_type PARAMS ((tree));
3402 static dw_die_ref modified_type_die PARAMS ((tree, int, int, dw_die_ref));
3403 static int type_is_enum PARAMS ((tree));
3404 static unsigned int reg_number PARAMS ((rtx));
3405 static dw_loc_descr_ref reg_loc_descriptor PARAMS ((rtx));
3406 static dw_loc_descr_ref based_loc_descr PARAMS ((unsigned, long));
3407 static int is_based_loc PARAMS ((rtx));
3408 static dw_loc_descr_ref mem_loc_descriptor PARAMS ((rtx, enum machine_mode mode));
3409 static dw_loc_descr_ref concat_loc_descriptor PARAMS ((rtx, rtx));
3410 static dw_loc_descr_ref loc_descriptor PARAMS ((rtx));
3411 static HOST_WIDE_INT ceiling PARAMS ((HOST_WIDE_INT, unsigned int));
3412 static tree field_type PARAMS ((tree));
3413 static unsigned int simple_type_align_in_bits PARAMS ((tree));
3414 static unsigned HOST_WIDE_INT simple_type_size_in_bits PARAMS ((tree));
3415 static HOST_WIDE_INT field_byte_offset PARAMS ((tree));
3416 static void add_AT_location_description PARAMS ((dw_die_ref,
3417 enum dwarf_attribute, rtx));
3418 static void add_data_member_location_attribute PARAMS ((dw_die_ref, tree));
3419 static void add_const_value_attribute PARAMS ((dw_die_ref, rtx));
3420 static void add_location_or_const_value_attribute PARAMS ((dw_die_ref, tree));
3421 static void add_name_attribute PARAMS ((dw_die_ref, const char *));
3422 static void add_bound_info PARAMS ((dw_die_ref,
3423 enum dwarf_attribute, tree));
3424 static void add_subscript_info PARAMS ((dw_die_ref, tree));
3425 static void add_byte_size_attribute PARAMS ((dw_die_ref, tree));
3426 static void add_bit_offset_attribute PARAMS ((dw_die_ref, tree));
3427 static void add_bit_size_attribute PARAMS ((dw_die_ref, tree));
3428 static void add_prototyped_attribute PARAMS ((dw_die_ref, tree));
3429 static void add_abstract_origin_attribute PARAMS ((dw_die_ref, tree));
3430 static void add_pure_or_virtual_attribute PARAMS ((dw_die_ref, tree));
3431 static void add_src_coords_attributes PARAMS ((dw_die_ref, tree));
3432 static void add_name_and_src_coords_attributes PARAMS ((dw_die_ref, tree));
3433 static void push_decl_scope PARAMS ((tree));
3434 static dw_die_ref scope_die_for PARAMS ((tree, dw_die_ref));
3435 static void pop_decl_scope PARAMS ((void));
3436 static void add_type_attribute PARAMS ((dw_die_ref, tree, int, int,
3438 static const char *type_tag PARAMS ((tree));
3439 static tree member_declared_type PARAMS ((tree));
3441 static const char *decl_start_label PARAMS ((tree));
3443 static void gen_array_type_die PARAMS ((tree, dw_die_ref));
3444 static void gen_set_type_die PARAMS ((tree, dw_die_ref));
3446 static void gen_entry_point_die PARAMS ((tree, dw_die_ref));
3448 static void gen_inlined_enumeration_type_die PARAMS ((tree, dw_die_ref));
3449 static void gen_inlined_structure_type_die PARAMS ((tree, dw_die_ref));
3450 static void gen_inlined_union_type_die PARAMS ((tree, dw_die_ref));
3451 static void gen_enumeration_type_die PARAMS ((tree, dw_die_ref));
3452 static dw_die_ref gen_formal_parameter_die PARAMS ((tree, dw_die_ref));
3453 static void gen_unspecified_parameters_die PARAMS ((tree, dw_die_ref));
3454 static void gen_formal_types_die PARAMS ((tree, dw_die_ref));
3455 static void gen_subprogram_die PARAMS ((tree, dw_die_ref));
3456 static void gen_variable_die PARAMS ((tree, dw_die_ref));
3457 static void gen_label_die PARAMS ((tree, dw_die_ref));
3458 static void gen_lexical_block_die PARAMS ((tree, dw_die_ref, int));
3459 static void gen_inlined_subroutine_die PARAMS ((tree, dw_die_ref, int));
3460 static void gen_field_die PARAMS ((tree, dw_die_ref));
3461 static void gen_ptr_to_mbr_type_die PARAMS ((tree, dw_die_ref));
3462 static dw_die_ref gen_compile_unit_die PARAMS ((const char *));
3463 static void gen_string_type_die PARAMS ((tree, dw_die_ref));
3464 static void gen_inheritance_die PARAMS ((tree, dw_die_ref));
3465 static void gen_member_die PARAMS ((tree, dw_die_ref));
3466 static void gen_struct_or_union_type_die PARAMS ((tree, dw_die_ref));
3467 static void gen_subroutine_type_die PARAMS ((tree, dw_die_ref));
3468 static void gen_typedef_die PARAMS ((tree, dw_die_ref));
3469 static void gen_type_die PARAMS ((tree, dw_die_ref));
3470 static void gen_tagged_type_instantiation_die PARAMS ((tree, dw_die_ref));
3471 static void gen_block_die PARAMS ((tree, dw_die_ref, int));
3472 static void decls_for_scope PARAMS ((tree, dw_die_ref, int));
3473 static int is_redundant_typedef PARAMS ((tree));
3474 static void gen_decl_die PARAMS ((tree, dw_die_ref));
3475 static unsigned lookup_filename PARAMS ((const char *));
3476 static void add_incomplete_type PARAMS ((tree));
3477 static void retry_incomplete_types PARAMS ((void));
3478 static void gen_type_die_for_member PARAMS ((tree, tree, dw_die_ref));
3479 static void gen_abstract_function PARAMS ((tree));
3480 static rtx save_rtx PARAMS ((rtx));
3481 static void splice_child_die PARAMS ((dw_die_ref, dw_die_ref));
3483 /* Section names used to hold DWARF debugging information. */
3484 #ifndef DEBUG_INFO_SECTION
3485 #define DEBUG_INFO_SECTION ".debug_info"
3487 #ifndef ABBREV_SECTION
3488 #define ABBREV_SECTION ".debug_abbrev"
3490 #ifndef ARANGES_SECTION
3491 #define ARANGES_SECTION ".debug_aranges"
3493 #ifndef DW_MACINFO_SECTION
3494 #define DW_MACINFO_SECTION ".debug_macinfo"
3496 #ifndef DEBUG_LINE_SECTION
3497 #define DEBUG_LINE_SECTION ".debug_line"
3500 #define LOC_SECTION ".debug_loc"
3502 #ifndef PUBNAMES_SECTION
3503 #define PUBNAMES_SECTION ".debug_pubnames"
3506 #define STR_SECTION ".debug_str"
3509 /* Standard ELF section names for compiled code and data. */
3510 #ifndef TEXT_SECTION
3511 #define TEXT_SECTION ".text"
3513 #ifndef DATA_SECTION
3514 #define DATA_SECTION ".data"
3517 #define BSS_SECTION ".bss"
3520 /* Labels we insert at beginning sections we can reference instead of
3521 the section names themselves. */
3523 #ifndef TEXT_SECTION_LABEL
3524 #define TEXT_SECTION_LABEL "Ltext"
3526 #ifndef DEBUG_LINE_SECTION_LABEL
3527 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3529 #ifndef DEBUG_INFO_SECTION_LABEL
3530 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3532 #ifndef ABBREV_SECTION_LABEL
3533 #define ABBREV_SECTION_LABEL "Ldebug_abbrev"
3536 /* Definitions of defaults for formats and names of various special
3537 (artificial) labels which may be generated within this file (when the -g
3538 options is used and DWARF_DEBUGGING_INFO is in effect.
3539 If necessary, these may be overridden from within the tm.h file, but
3540 typically, overriding these defaults is unnecessary. */
3542 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3543 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3544 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3545 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3546 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3548 #ifndef TEXT_END_LABEL
3549 #define TEXT_END_LABEL "Letext"
3551 #ifndef DATA_END_LABEL
3552 #define DATA_END_LABEL "Ledata"
3554 #ifndef BSS_END_LABEL
3555 #define BSS_END_LABEL "Lebss"
3557 #ifndef INSN_LABEL_FMT
3558 #define INSN_LABEL_FMT "LI%u_"
3560 #ifndef BLOCK_BEGIN_LABEL
3561 #define BLOCK_BEGIN_LABEL "LBB"
3563 #ifndef BLOCK_END_LABEL
3564 #define BLOCK_END_LABEL "LBE"
3566 #ifndef BODY_BEGIN_LABEL
3567 #define BODY_BEGIN_LABEL "Lbb"
3569 #ifndef BODY_END_LABEL
3570 #define BODY_END_LABEL "Lbe"
3572 #ifndef LINE_CODE_LABEL
3573 #define LINE_CODE_LABEL "LM"
3575 #ifndef SEPARATE_LINE_CODE_LABEL
3576 #define SEPARATE_LINE_CODE_LABEL "LSM"
3579 /* We allow a language front-end to designate a function that is to be
3580 called to "demangle" any name before it it put into a DIE. */
3582 static const char *(*demangle_name_func) PARAMS ((const char *));
3585 dwarf2out_set_demangle_name_func (func)
3586 const char *(*func) PARAMS ((const char *));
3588 demangle_name_func = func;
3591 /* Return an rtx like ORIG which lives forever. If we're doing GC,
3592 that means adding it to used_rtx_varray. If not, that means making
3593 a copy on the permanent_obstack. */
3600 VARRAY_PUSH_RTX (used_rtx_varray, orig);
3603 push_obstacks_nochange ();
3604 end_temporary_allocation ();
3605 orig = copy_rtx (orig);
3612 /* Test if rtl node points to a pseudo register. */
3618 return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3619 || (GET_CODE (rtl) == SUBREG
3620 && REGNO (XEXP (rtl, 0)) >= FIRST_PSEUDO_REGISTER));
3623 /* Return a reference to a type, with its const and volatile qualifiers
3627 type_main_variant (type)
3630 type = TYPE_MAIN_VARIANT (type);
3632 /* There really should be only one main variant among any group of variants
3633 of a given type (and all of the MAIN_VARIANT values for all members of
3634 the group should point to that one type) but sometimes the C front-end
3635 messes this up for array types, so we work around that bug here. */
3637 if (TREE_CODE (type) == ARRAY_TYPE)
3638 while (type != TYPE_MAIN_VARIANT (type))
3639 type = TYPE_MAIN_VARIANT (type);
3644 /* Return non-zero if the given type node represents a tagged type. */
3647 is_tagged_type (type)
3650 register enum tree_code code = TREE_CODE (type);
3652 return (code == RECORD_TYPE || code == UNION_TYPE
3653 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3656 /* Convert a DIE tag into its string name. */
3659 dwarf_tag_name (tag)
3660 register unsigned tag;
3664 case DW_TAG_padding:
3665 return "DW_TAG_padding";
3666 case DW_TAG_array_type:
3667 return "DW_TAG_array_type";
3668 case DW_TAG_class_type:
3669 return "DW_TAG_class_type";
3670 case DW_TAG_entry_point:
3671 return "DW_TAG_entry_point";
3672 case DW_TAG_enumeration_type:
3673 return "DW_TAG_enumeration_type";
3674 case DW_TAG_formal_parameter:
3675 return "DW_TAG_formal_parameter";
3676 case DW_TAG_imported_declaration:
3677 return "DW_TAG_imported_declaration";
3679 return "DW_TAG_label";
3680 case DW_TAG_lexical_block:
3681 return "DW_TAG_lexical_block";
3683 return "DW_TAG_member";
3684 case DW_TAG_pointer_type:
3685 return "DW_TAG_pointer_type";
3686 case DW_TAG_reference_type:
3687 return "DW_TAG_reference_type";
3688 case DW_TAG_compile_unit:
3689 return "DW_TAG_compile_unit";
3690 case DW_TAG_string_type:
3691 return "DW_TAG_string_type";
3692 case DW_TAG_structure_type:
3693 return "DW_TAG_structure_type";
3694 case DW_TAG_subroutine_type:
3695 return "DW_TAG_subroutine_type";
3696 case DW_TAG_typedef:
3697 return "DW_TAG_typedef";
3698 case DW_TAG_union_type:
3699 return "DW_TAG_union_type";
3700 case DW_TAG_unspecified_parameters:
3701 return "DW_TAG_unspecified_parameters";
3702 case DW_TAG_variant:
3703 return "DW_TAG_variant";
3704 case DW_TAG_common_block:
3705 return "DW_TAG_common_block";
3706 case DW_TAG_common_inclusion:
3707 return "DW_TAG_common_inclusion";
3708 case DW_TAG_inheritance:
3709 return "DW_TAG_inheritance";
3710 case DW_TAG_inlined_subroutine:
3711 return "DW_TAG_inlined_subroutine";
3713 return "DW_TAG_module";
3714 case DW_TAG_ptr_to_member_type:
3715 return "DW_TAG_ptr_to_member_type";
3716 case DW_TAG_set_type:
3717 return "DW_TAG_set_type";
3718 case DW_TAG_subrange_type:
3719 return "DW_TAG_subrange_type";
3720 case DW_TAG_with_stmt:
3721 return "DW_TAG_with_stmt";
3722 case DW_TAG_access_declaration:
3723 return "DW_TAG_access_declaration";
3724 case DW_TAG_base_type:
3725 return "DW_TAG_base_type";
3726 case DW_TAG_catch_block:
3727 return "DW_TAG_catch_block";
3728 case DW_TAG_const_type:
3729 return "DW_TAG_const_type";
3730 case DW_TAG_constant:
3731 return "DW_TAG_constant";
3732 case DW_TAG_enumerator:
3733 return "DW_TAG_enumerator";
3734 case DW_TAG_file_type:
3735 return "DW_TAG_file_type";
3737 return "DW_TAG_friend";
3738 case DW_TAG_namelist:
3739 return "DW_TAG_namelist";
3740 case DW_TAG_namelist_item:
3741 return "DW_TAG_namelist_item";
3742 case DW_TAG_packed_type:
3743 return "DW_TAG_packed_type";
3744 case DW_TAG_subprogram:
3745 return "DW_TAG_subprogram";
3746 case DW_TAG_template_type_param:
3747 return "DW_TAG_template_type_param";
3748 case DW_TAG_template_value_param:
3749 return "DW_TAG_template_value_param";
3750 case DW_TAG_thrown_type:
3751 return "DW_TAG_thrown_type";
3752 case DW_TAG_try_block:
3753 return "DW_TAG_try_block";
3754 case DW_TAG_variant_part:
3755 return "DW_TAG_variant_part";
3756 case DW_TAG_variable:
3757 return "DW_TAG_variable";
3758 case DW_TAG_volatile_type:
3759 return "DW_TAG_volatile_type";
3760 case DW_TAG_MIPS_loop:
3761 return "DW_TAG_MIPS_loop";
3762 case DW_TAG_format_label:
3763 return "DW_TAG_format_label";
3764 case DW_TAG_function_template:
3765 return "DW_TAG_function_template";
3766 case DW_TAG_class_template:
3767 return "DW_TAG_class_template";
3768 case DW_TAG_GNU_BINCL:
3769 return "DW_TAG_GNU_BINCL";
3770 case DW_TAG_GNU_EINCL:
3771 return "DW_TAG_GNU_EINCL";
3773 return "DW_TAG_<unknown>";
3777 /* Convert a DWARF attribute code into its string name. */
3780 dwarf_attr_name (attr)
3781 register unsigned attr;
3786 return "DW_AT_sibling";
3787 case DW_AT_location:
3788 return "DW_AT_location";
3790 return "DW_AT_name";
3791 case DW_AT_ordering:
3792 return "DW_AT_ordering";
3793 case DW_AT_subscr_data:
3794 return "DW_AT_subscr_data";
3795 case DW_AT_byte_size:
3796 return "DW_AT_byte_size";
3797 case DW_AT_bit_offset:
3798 return "DW_AT_bit_offset";
3799 case DW_AT_bit_size:
3800 return "DW_AT_bit_size";
3801 case DW_AT_element_list:
3802 return "DW_AT_element_list";
3803 case DW_AT_stmt_list:
3804 return "DW_AT_stmt_list";
3806 return "DW_AT_low_pc";
3808 return "DW_AT_high_pc";
3809 case DW_AT_language:
3810 return "DW_AT_language";
3812 return "DW_AT_member";
3814 return "DW_AT_discr";
3815 case DW_AT_discr_value:
3816 return "DW_AT_discr_value";
3817 case DW_AT_visibility:
3818 return "DW_AT_visibility";
3820 return "DW_AT_import";
3821 case DW_AT_string_length:
3822 return "DW_AT_string_length";
3823 case DW_AT_common_reference:
3824 return "DW_AT_common_reference";
3825 case DW_AT_comp_dir:
3826 return "DW_AT_comp_dir";
3827 case DW_AT_const_value:
3828 return "DW_AT_const_value";
3829 case DW_AT_containing_type:
3830 return "DW_AT_containing_type";
3831 case DW_AT_default_value:
3832 return "DW_AT_default_value";
3834 return "DW_AT_inline";
3835 case DW_AT_is_optional:
3836 return "DW_AT_is_optional";
3837 case DW_AT_lower_bound:
3838 return "DW_AT_lower_bound";
3839 case DW_AT_producer:
3840 return "DW_AT_producer";
3841 case DW_AT_prototyped:
3842 return "DW_AT_prototyped";
3843 case DW_AT_return_addr:
3844 return "DW_AT_return_addr";
3845 case DW_AT_start_scope:
3846 return "DW_AT_start_scope";
3847 case DW_AT_stride_size:
3848 return "DW_AT_stride_size";
3849 case DW_AT_upper_bound:
3850 return "DW_AT_upper_bound";
3851 case DW_AT_abstract_origin:
3852 return "DW_AT_abstract_origin";
3853 case DW_AT_accessibility:
3854 return "DW_AT_accessibility";
3855 case DW_AT_address_class:
3856 return "DW_AT_address_class";
3857 case DW_AT_artificial:
3858 return "DW_AT_artificial";
3859 case DW_AT_base_types:
3860 return "DW_AT_base_types";
3861 case DW_AT_calling_convention:
3862 return "DW_AT_calling_convention";
3864 return "DW_AT_count";
3865 case DW_AT_data_member_location:
3866 return "DW_AT_data_member_location";
3867 case DW_AT_decl_column:
3868 return "DW_AT_decl_column";
3869 case DW_AT_decl_file:
3870 return "DW_AT_decl_file";
3871 case DW_AT_decl_line:
3872 return "DW_AT_decl_line";
3873 case DW_AT_declaration:
3874 return "DW_AT_declaration";
3875 case DW_AT_discr_list:
3876 return "DW_AT_discr_list";
3877 case DW_AT_encoding:
3878 return "DW_AT_encoding";
3879 case DW_AT_external:
3880 return "DW_AT_external";
3881 case DW_AT_frame_base:
3882 return "DW_AT_frame_base";
3884 return "DW_AT_friend";
3885 case DW_AT_identifier_case:
3886 return "DW_AT_identifier_case";
3887 case DW_AT_macro_info:
3888 return "DW_AT_macro_info";
3889 case DW_AT_namelist_items:
3890 return "DW_AT_namelist_items";
3891 case DW_AT_priority:
3892 return "DW_AT_priority";
3894 return "DW_AT_segment";
3895 case DW_AT_specification:
3896 return "DW_AT_specification";
3897 case DW_AT_static_link:
3898 return "DW_AT_static_link";
3900 return "DW_AT_type";
3901 case DW_AT_use_location:
3902 return "DW_AT_use_location";
3903 case DW_AT_variable_parameter:
3904 return "DW_AT_variable_parameter";
3905 case DW_AT_virtuality:
3906 return "DW_AT_virtuality";
3907 case DW_AT_vtable_elem_location:
3908 return "DW_AT_vtable_elem_location";
3910 case DW_AT_MIPS_fde:
3911 return "DW_AT_MIPS_fde";
3912 case DW_AT_MIPS_loop_begin:
3913 return "DW_AT_MIPS_loop_begin";
3914 case DW_AT_MIPS_tail_loop_begin:
3915 return "DW_AT_MIPS_tail_loop_begin";
3916 case DW_AT_MIPS_epilog_begin:
3917 return "DW_AT_MIPS_epilog_begin";
3918 case DW_AT_MIPS_loop_unroll_factor:
3919 return "DW_AT_MIPS_loop_unroll_factor";
3920 case DW_AT_MIPS_software_pipeline_depth:
3921 return "DW_AT_MIPS_software_pipeline_depth";
3922 case DW_AT_MIPS_linkage_name:
3923 return "DW_AT_MIPS_linkage_name";
3924 case DW_AT_MIPS_stride:
3925 return "DW_AT_MIPS_stride";
3926 case DW_AT_MIPS_abstract_name:
3927 return "DW_AT_MIPS_abstract_name";
3928 case DW_AT_MIPS_clone_origin:
3929 return "DW_AT_MIPS_clone_origin";
3930 case DW_AT_MIPS_has_inlines:
3931 return "DW_AT_MIPS_has_inlines";
3933 case DW_AT_sf_names:
3934 return "DW_AT_sf_names";
3935 case DW_AT_src_info:
3936 return "DW_AT_src_info";
3937 case DW_AT_mac_info:
3938 return "DW_AT_mac_info";
3939 case DW_AT_src_coords:
3940 return "DW_AT_src_coords";
3941 case DW_AT_body_begin:
3942 return "DW_AT_body_begin";
3943 case DW_AT_body_end:
3944 return "DW_AT_body_end";
3946 return "DW_AT_<unknown>";
3950 /* Convert a DWARF value form code into its string name. */
3953 dwarf_form_name (form)
3954 register unsigned form;
3959 return "DW_FORM_addr";
3960 case DW_FORM_block2:
3961 return "DW_FORM_block2";
3962 case DW_FORM_block4:
3963 return "DW_FORM_block4";
3965 return "DW_FORM_data2";
3967 return "DW_FORM_data4";
3969 return "DW_FORM_data8";
3970 case DW_FORM_string:
3971 return "DW_FORM_string";
3973 return "DW_FORM_block";
3974 case DW_FORM_block1:
3975 return "DW_FORM_block1";
3977 return "DW_FORM_data1";
3979 return "DW_FORM_flag";
3981 return "DW_FORM_sdata";
3983 return "DW_FORM_strp";
3985 return "DW_FORM_udata";
3986 case DW_FORM_ref_addr:
3987 return "DW_FORM_ref_addr";
3989 return "DW_FORM_ref1";
3991 return "DW_FORM_ref2";
3993 return "DW_FORM_ref4";
3995 return "DW_FORM_ref8";
3996 case DW_FORM_ref_udata:
3997 return "DW_FORM_ref_udata";
3998 case DW_FORM_indirect:
3999 return "DW_FORM_indirect";
4001 return "DW_FORM_<unknown>";
4005 /* Convert a DWARF type code into its string name. */
4009 dwarf_type_encoding_name (enc)
4010 register unsigned enc;
4014 case DW_ATE_address:
4015 return "DW_ATE_address";
4016 case DW_ATE_boolean:
4017 return "DW_ATE_boolean";
4018 case DW_ATE_complex_float:
4019 return "DW_ATE_complex_float";
4021 return "DW_ATE_float";
4023 return "DW_ATE_signed";
4024 case DW_ATE_signed_char:
4025 return "DW_ATE_signed_char";
4026 case DW_ATE_unsigned:
4027 return "DW_ATE_unsigned";
4028 case DW_ATE_unsigned_char:
4029 return "DW_ATE_unsigned_char";
4031 return "DW_ATE_<unknown>";
4036 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4037 instance of an inlined instance of a decl which is local to an inline
4038 function, so we have to trace all of the way back through the origin chain
4039 to find out what sort of node actually served as the original seed for the
4043 decl_ultimate_origin (decl)
4046 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4047 nodes in the function to point to themselves; ignore that if
4048 we're trying to output the abstract instance of this function. */
4049 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4052 #ifdef ENABLE_CHECKING
4053 if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
4054 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4055 most distant ancestor, this should never happen. */
4059 return DECL_ABSTRACT_ORIGIN (decl);
4062 /* Determine the "ultimate origin" of a block. The block may be an inlined
4063 instance of an inlined instance of a block which is local to an inline
4064 function, so we have to trace all of the way back through the origin chain
4065 to find out what sort of node actually served as the original seed for the
4069 block_ultimate_origin (block)
4070 register tree block;
4072 register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4074 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4075 nodes in the function to point to themselves; ignore that if
4076 we're trying to output the abstract instance of this function. */
4077 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4080 if (immediate_origin == NULL_TREE)
4084 register tree ret_val;
4085 register tree lookahead = immediate_origin;
4089 ret_val = lookahead;
4090 lookahead = (TREE_CODE (ret_val) == BLOCK)
4091 ? BLOCK_ABSTRACT_ORIGIN (ret_val)
4094 while (lookahead != NULL && lookahead != ret_val);
4100 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4101 of a virtual function may refer to a base class, so we check the 'this'
4105 decl_class_context (decl)
4108 tree context = NULL_TREE;
4110 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4111 context = DECL_CONTEXT (decl);
4113 context = TYPE_MAIN_VARIANT
4114 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4116 if (context && !TYPE_P (context))
4117 context = NULL_TREE;
4122 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4123 addition order, and correct that in reverse_all_dies. */
4126 add_dwarf_attr (die, attr)
4127 register dw_die_ref die;
4128 register dw_attr_ref attr;
4130 if (die != NULL && attr != NULL)
4132 attr->dw_attr_next = die->die_attr;
4133 die->die_attr = attr;
4137 static inline dw_val_class AT_class PARAMS ((dw_attr_ref));
4138 static inline dw_val_class
4142 return a->dw_attr_val.val_class;
4145 /* Add a flag value attribute to a DIE. */
4148 add_AT_flag (die, attr_kind, flag)
4149 register dw_die_ref die;
4150 register enum dwarf_attribute attr_kind;
4151 register unsigned flag;
4153 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4155 attr->dw_attr_next = NULL;
4156 attr->dw_attr = attr_kind;
4157 attr->dw_attr_val.val_class = dw_val_class_flag;
4158 attr->dw_attr_val.v.val_flag = flag;
4159 add_dwarf_attr (die, attr);
4162 static inline unsigned AT_flag PARAMS ((dw_attr_ref));
4163 static inline unsigned
4165 register dw_attr_ref a;
4167 if (a && AT_class (a) == dw_val_class_flag)
4168 return a->dw_attr_val.v.val_flag;
4173 /* Add a signed integer attribute value to a DIE. */
4176 add_AT_int (die, attr_kind, int_val)
4177 register dw_die_ref die;
4178 register enum dwarf_attribute attr_kind;
4179 register long int int_val;
4181 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4183 attr->dw_attr_next = NULL;
4184 attr->dw_attr = attr_kind;
4185 attr->dw_attr_val.val_class = dw_val_class_const;
4186 attr->dw_attr_val.v.val_int = int_val;
4187 add_dwarf_attr (die, attr);
4190 static inline long int AT_int PARAMS ((dw_attr_ref));
4191 static inline long int
4193 register dw_attr_ref a;
4195 if (a && AT_class (a) == dw_val_class_const)
4196 return a->dw_attr_val.v.val_int;
4201 /* Add an unsigned integer attribute value to a DIE. */
4204 add_AT_unsigned (die, attr_kind, unsigned_val)
4205 register dw_die_ref die;
4206 register enum dwarf_attribute attr_kind;
4207 register unsigned long unsigned_val;
4209 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4211 attr->dw_attr_next = NULL;
4212 attr->dw_attr = attr_kind;
4213 attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4214 attr->dw_attr_val.v.val_unsigned = unsigned_val;
4215 add_dwarf_attr (die, attr);
4218 static inline unsigned long AT_unsigned PARAMS ((dw_attr_ref));
4219 static inline unsigned long
4221 register dw_attr_ref a;
4223 if (a && AT_class (a) == dw_val_class_unsigned_const)
4224 return a->dw_attr_val.v.val_unsigned;
4229 /* Add an unsigned double integer attribute value to a DIE. */
4232 add_AT_long_long (die, attr_kind, val_hi, val_low)
4233 register dw_die_ref die;
4234 register enum dwarf_attribute attr_kind;
4235 register unsigned long val_hi;
4236 register unsigned long val_low;
4238 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4240 attr->dw_attr_next = NULL;
4241 attr->dw_attr = attr_kind;
4242 attr->dw_attr_val.val_class = dw_val_class_long_long;
4243 attr->dw_attr_val.v.val_long_long.hi = val_hi;
4244 attr->dw_attr_val.v.val_long_long.low = val_low;
4245 add_dwarf_attr (die, attr);
4248 /* Add a floating point attribute value to a DIE and return it. */
4251 add_AT_float (die, attr_kind, length, array)
4252 register dw_die_ref die;
4253 register enum dwarf_attribute attr_kind;
4254 register unsigned length;
4255 register long *array;
4257 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4259 attr->dw_attr_next = NULL;
4260 attr->dw_attr = attr_kind;
4261 attr->dw_attr_val.val_class = dw_val_class_float;
4262 attr->dw_attr_val.v.val_float.length = length;
4263 attr->dw_attr_val.v.val_float.array = array;
4264 add_dwarf_attr (die, attr);
4267 /* Add a string attribute value to a DIE. */
4270 add_AT_string (die, attr_kind, str)
4271 register dw_die_ref die;
4272 register enum dwarf_attribute attr_kind;
4273 register const char *str;
4275 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4277 attr->dw_attr_next = NULL;
4278 attr->dw_attr = attr_kind;
4279 attr->dw_attr_val.val_class = dw_val_class_str;
4280 attr->dw_attr_val.v.val_str = xstrdup (str);
4281 add_dwarf_attr (die, attr);
4284 static inline const char *AT_string PARAMS ((dw_attr_ref));
4285 static inline const char *
4287 register dw_attr_ref a;
4289 if (a && AT_class (a) == dw_val_class_str)
4290 return a->dw_attr_val.v.val_str;
4295 /* Add a DIE reference attribute value to a DIE. */
4298 add_AT_die_ref (die, attr_kind, targ_die)
4299 register dw_die_ref die;
4300 register enum dwarf_attribute attr_kind;
4301 register dw_die_ref targ_die;
4303 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4305 attr->dw_attr_next = NULL;
4306 attr->dw_attr = attr_kind;
4307 attr->dw_attr_val.val_class = dw_val_class_die_ref;
4308 attr->dw_attr_val.v.val_die_ref.die = targ_die;
4309 attr->dw_attr_val.v.val_die_ref.external = 0;
4310 add_dwarf_attr (die, attr);
4313 static inline dw_die_ref AT_ref PARAMS ((dw_attr_ref));
4314 static inline dw_die_ref
4316 register dw_attr_ref a;
4318 if (a && AT_class (a) == dw_val_class_die_ref)
4319 return a->dw_attr_val.v.val_die_ref.die;
4324 static inline int AT_ref_external PARAMS ((dw_attr_ref));
4327 register dw_attr_ref a;
4329 if (a && AT_class (a) == dw_val_class_die_ref)
4330 return a->dw_attr_val.v.val_die_ref.external;
4335 static inline void set_AT_ref_external PARAMS ((dw_attr_ref, int));
4337 set_AT_ref_external (a, i)
4338 register dw_attr_ref a;
4341 if (a && AT_class (a) == dw_val_class_die_ref)
4342 a->dw_attr_val.v.val_die_ref.external = i;
4347 /* Add an FDE reference attribute value to a DIE. */
4350 add_AT_fde_ref (die, attr_kind, targ_fde)
4351 register dw_die_ref die;
4352 register enum dwarf_attribute attr_kind;
4353 register unsigned targ_fde;
4355 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4357 attr->dw_attr_next = NULL;
4358 attr->dw_attr = attr_kind;
4359 attr->dw_attr_val.val_class = dw_val_class_fde_ref;
4360 attr->dw_attr_val.v.val_fde_index = targ_fde;
4361 add_dwarf_attr (die, attr);
4364 /* Add a location description attribute value to a DIE. */
4367 add_AT_loc (die, attr_kind, loc)
4368 register dw_die_ref die;
4369 register enum dwarf_attribute attr_kind;
4370 register dw_loc_descr_ref loc;
4372 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4374 attr->dw_attr_next = NULL;
4375 attr->dw_attr = attr_kind;
4376 attr->dw_attr_val.val_class = dw_val_class_loc;
4377 attr->dw_attr_val.v.val_loc = loc;
4378 add_dwarf_attr (die, attr);
4381 static inline dw_loc_descr_ref AT_loc PARAMS ((dw_attr_ref));
4382 static inline dw_loc_descr_ref
4384 register dw_attr_ref a;
4386 if (a && AT_class (a) == dw_val_class_loc)
4387 return a->dw_attr_val.v.val_loc;
4392 /* Add an address constant attribute value to a DIE. */
4395 add_AT_addr (die, attr_kind, addr)
4396 register dw_die_ref die;
4397 register enum dwarf_attribute attr_kind;
4400 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4402 attr->dw_attr_next = NULL;
4403 attr->dw_attr = attr_kind;
4404 attr->dw_attr_val.val_class = dw_val_class_addr;
4405 attr->dw_attr_val.v.val_addr = addr;
4406 add_dwarf_attr (die, attr);
4409 static inline rtx AT_addr PARAMS ((dw_attr_ref));
4412 register dw_attr_ref a;
4414 if (a && AT_class (a) == dw_val_class_addr)
4415 return a->dw_attr_val.v.val_addr;
4420 /* Add a label identifier attribute value to a DIE. */
4423 add_AT_lbl_id (die, attr_kind, lbl_id)
4424 register dw_die_ref die;
4425 register enum dwarf_attribute attr_kind;
4426 register const char *lbl_id;
4428 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4430 attr->dw_attr_next = NULL;
4431 attr->dw_attr = attr_kind;
4432 attr->dw_attr_val.val_class = dw_val_class_lbl_id;
4433 attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4434 add_dwarf_attr (die, attr);
4437 /* Add a section offset attribute value to a DIE. */
4440 add_AT_lbl_offset (die, attr_kind, label)
4441 register dw_die_ref die;
4442 register enum dwarf_attribute attr_kind;
4443 register const char *label;
4445 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4447 attr->dw_attr_next = NULL;
4448 attr->dw_attr = attr_kind;
4449 attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
4450 attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
4451 add_dwarf_attr (die, attr);
4454 static inline const char *AT_lbl PARAMS ((dw_attr_ref));
4455 static inline const char *
4457 register dw_attr_ref a;
4459 if (a && (AT_class (a) == dw_val_class_lbl_id
4460 || AT_class (a) == dw_val_class_lbl_offset))
4461 return a->dw_attr_val.v.val_lbl_id;
4466 /* Get the attribute of type attr_kind. */
4468 static inline dw_attr_ref
4469 get_AT (die, attr_kind)
4470 register dw_die_ref die;
4471 register enum dwarf_attribute attr_kind;
4473 register dw_attr_ref a;
4474 register dw_die_ref spec = NULL;
4478 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4480 if (a->dw_attr == attr_kind)
4483 if (a->dw_attr == DW_AT_specification
4484 || a->dw_attr == DW_AT_abstract_origin)
4489 return get_AT (spec, attr_kind);
4495 /* Return the "low pc" attribute value, typically associated with
4496 a subprogram DIE. Return null if the "low pc" attribute is
4497 either not prsent, or if it cannot be represented as an
4498 assembler label identifier. */
4500 static inline const char *
4502 register dw_die_ref die;
4504 register dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4505 return a ? AT_lbl (a) : NULL;
4508 /* Return the "high pc" attribute value, typically associated with
4509 a subprogram DIE. Return null if the "high pc" attribute is
4510 either not prsent, or if it cannot be represented as an
4511 assembler label identifier. */
4513 static inline const char *
4515 register dw_die_ref die;
4517 register dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4518 return a ? AT_lbl (a) : NULL;
4521 /* Return the value of the string attribute designated by ATTR_KIND, or
4522 NULL if it is not present. */
4524 static inline const char *
4525 get_AT_string (die, attr_kind)
4526 register dw_die_ref die;
4527 register enum dwarf_attribute attr_kind;
4529 register dw_attr_ref a = get_AT (die, attr_kind);
4530 return a ? AT_string (a) : NULL;
4533 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4534 if it is not present. */
4537 get_AT_flag (die, attr_kind)
4538 register dw_die_ref die;
4539 register enum dwarf_attribute attr_kind;
4541 register dw_attr_ref a = get_AT (die, attr_kind);
4542 return a ? AT_flag (a) : 0;
4545 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4546 if it is not present. */
4548 static inline unsigned
4549 get_AT_unsigned (die, attr_kind)
4550 register dw_die_ref die;
4551 register enum dwarf_attribute attr_kind;
4553 register dw_attr_ref a = get_AT (die, attr_kind);
4554 return a ? AT_unsigned (a) : 0;
4557 static inline dw_die_ref
4558 get_AT_ref (die, attr_kind)
4560 register enum dwarf_attribute attr_kind;
4562 register dw_attr_ref a = get_AT (die, attr_kind);
4563 return a ? AT_ref (a) : NULL;
4569 register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
4571 return (lang == DW_LANG_C || lang == DW_LANG_C89
4572 || lang == DW_LANG_C_plus_plus);
4578 register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
4580 return (lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90);
4586 register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
4588 return (lang == DW_LANG_Java);
4591 /* Free up the memory used by A. */
4593 static inline void free_AT PARAMS ((dw_attr_ref));
4598 switch (AT_class (a))
4600 case dw_val_class_str:
4601 case dw_val_class_lbl_id:
4602 case dw_val_class_lbl_offset:
4603 free (a->dw_attr_val.v.val_str);
4613 /* Remove the specified attribute if present. */
4616 remove_AT (die, attr_kind)
4617 register dw_die_ref die;
4618 register enum dwarf_attribute attr_kind;
4620 register dw_attr_ref *p;
4621 register dw_attr_ref removed = NULL;
4625 for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
4626 if ((*p)->dw_attr == attr_kind)
4629 *p = (*p)->dw_attr_next;
4638 /* Free up the memory used by DIE. */
4640 static inline void free_die PARAMS ((dw_die_ref));
4645 remove_children (die);
4649 /* Discard the children of this DIE. */
4652 remove_children (die)
4653 register dw_die_ref die;
4655 register dw_die_ref child_die = die->die_child;
4657 die->die_child = NULL;
4659 while (child_die != NULL)
4661 register dw_die_ref tmp_die = child_die;
4662 register dw_attr_ref a;
4664 child_die = child_die->die_sib;
4666 for (a = tmp_die->die_attr; a != NULL;)
4668 register dw_attr_ref tmp_a = a;
4670 a = a->dw_attr_next;
4678 /* Add a child DIE below its parent. We build the lists up in reverse
4679 addition order, and correct that in reverse_all_dies. */
4682 add_child_die (die, child_die)
4683 register dw_die_ref die;
4684 register dw_die_ref child_die;
4686 if (die != NULL && child_die != NULL)
4688 if (die == child_die)
4690 child_die->die_parent = die;
4691 child_die->die_sib = die->die_child;
4692 die->die_child = child_die;
4696 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4697 is the specification, to the front of PARENT's list of children. */
4700 splice_child_die (parent, child)
4701 dw_die_ref parent, child;
4705 /* We want the declaration DIE from inside the class, not the
4706 specification DIE at toplevel. */
4707 if (child->die_parent != parent)
4709 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
4714 if (child->die_parent != parent
4715 && child->die_parent != get_AT_ref (parent, DW_AT_specification))
4718 for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
4721 *p = child->die_sib;
4725 child->die_sib = parent->die_child;
4726 parent->die_child = child;
4729 /* Return a pointer to a newly created DIE node. */
4731 static inline dw_die_ref
4732 new_die (tag_value, parent_die)
4733 register enum dwarf_tag tag_value;
4734 register dw_die_ref parent_die;
4736 register dw_die_ref die = (dw_die_ref) xmalloc (sizeof (die_node));
4738 die->die_tag = tag_value;
4739 die->die_abbrev = 0;
4740 die->die_offset = 0;
4741 die->die_child = NULL;
4742 die->die_parent = NULL;
4743 die->die_sib = NULL;
4744 die->die_attr = NULL;
4745 die->die_symbol = NULL;
4747 if (parent_die != NULL)
4748 add_child_die (parent_die, die);
4751 limbo_die_node *limbo_node;
4753 limbo_node = (limbo_die_node *) xmalloc (sizeof (limbo_die_node));
4754 limbo_node->die = die;
4755 limbo_node->next = limbo_die_list;
4756 limbo_die_list = limbo_node;
4762 /* Return the DIE associated with the given type specifier. */
4764 static inline dw_die_ref
4765 lookup_type_die (type)
4768 if (TREE_CODE (type) == VECTOR_TYPE)
4769 type = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4770 return (dw_die_ref) TYPE_SYMTAB_POINTER (type);
4773 /* Equate a DIE to a given type specifier. */
4776 equate_type_number_to_die (type, type_die)
4778 register dw_die_ref type_die;
4780 TYPE_SYMTAB_POINTER (type) = (char *) type_die;
4783 /* Return the DIE associated with a given declaration. */
4785 static inline dw_die_ref
4786 lookup_decl_die (decl)
4789 register unsigned decl_id = DECL_UID (decl);
4791 return (decl_id < decl_die_table_in_use
4792 ? decl_die_table[decl_id] : NULL);
4795 /* Equate a DIE to a particular declaration. */
4798 equate_decl_number_to_die (decl, decl_die)
4800 register dw_die_ref decl_die;
4802 register unsigned decl_id = DECL_UID (decl);
4803 register unsigned num_allocated;
4805 if (decl_id >= decl_die_table_allocated)
4808 = ((decl_id + 1 + DECL_DIE_TABLE_INCREMENT - 1)
4809 / DECL_DIE_TABLE_INCREMENT)
4810 * DECL_DIE_TABLE_INCREMENT;
4813 = (dw_die_ref *) xrealloc (decl_die_table,
4814 sizeof (dw_die_ref) * num_allocated);
4816 bzero ((char *) &decl_die_table[decl_die_table_allocated],
4817 (num_allocated - decl_die_table_allocated) * sizeof (dw_die_ref));
4818 decl_die_table_allocated = num_allocated;
4821 if (decl_id >= decl_die_table_in_use)
4822 decl_die_table_in_use = (decl_id + 1);
4824 decl_die_table[decl_id] = decl_die;
4827 /* Keep track of the number of spaces used to indent the
4828 output of the debugging routines that print the structure of
4829 the DIE internal representation. */
4830 static int print_indent;
4832 /* Indent the line the number of spaces given by print_indent. */
4835 print_spaces (outfile)
4838 fprintf (outfile, "%*s", print_indent, "");
4841 /* Print the information associated with a given DIE, and its children.
4842 This routine is a debugging aid only. */
4845 print_die (die, outfile)
4849 register dw_attr_ref a;
4850 register dw_die_ref c;
4852 print_spaces (outfile);
4853 fprintf (outfile, "DIE %4lu: %s\n",
4854 die->die_offset, dwarf_tag_name (die->die_tag));
4855 print_spaces (outfile);
4856 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
4857 fprintf (outfile, " offset: %lu\n", die->die_offset);
4859 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4861 print_spaces (outfile);
4862 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
4864 switch (AT_class (a))
4866 case dw_val_class_addr:
4867 fprintf (outfile, "address");
4869 case dw_val_class_loc:
4870 fprintf (outfile, "location descriptor");
4872 case dw_val_class_const:
4873 fprintf (outfile, "%ld", AT_int (a));
4875 case dw_val_class_unsigned_const:
4876 fprintf (outfile, "%lu", AT_unsigned (a));
4878 case dw_val_class_long_long:
4879 fprintf (outfile, "constant (%lu,%lu)",
4880 a->dw_attr_val.v.val_long_long.hi,
4881 a->dw_attr_val.v.val_long_long.low);
4883 case dw_val_class_float:
4884 fprintf (outfile, "floating-point constant");
4886 case dw_val_class_flag:
4887 fprintf (outfile, "%u", AT_flag (a));
4889 case dw_val_class_die_ref:
4890 if (AT_ref (a) != NULL)
4892 if (AT_ref (a)->die_offset == 0)
4893 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
4895 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
4898 fprintf (outfile, "die -> <null>");
4900 case dw_val_class_lbl_id:
4901 case dw_val_class_lbl_offset:
4902 fprintf (outfile, "label: %s", AT_lbl (a));
4904 case dw_val_class_str:
4905 if (AT_string (a) != NULL)
4906 fprintf (outfile, "\"%s\"", AT_string (a));
4908 fprintf (outfile, "<null>");
4914 fprintf (outfile, "\n");
4917 if (die->die_child != NULL)
4920 for (c = die->die_child; c != NULL; c = c->die_sib)
4921 print_die (c, outfile);
4925 if (print_indent == 0)
4926 fprintf (outfile, "\n");
4929 /* Print the contents of the source code line number correspondence table.
4930 This routine is a debugging aid only. */
4933 print_dwarf_line_table (outfile)
4936 register unsigned i;
4937 register dw_line_info_ref line_info;
4939 fprintf (outfile, "\n\nDWARF source line information\n");
4940 for (i = 1; i < line_info_table_in_use; ++i)
4942 line_info = &line_info_table[i];
4943 fprintf (outfile, "%5d: ", i);
4944 fprintf (outfile, "%-20s", file_table[line_info->dw_file_num]);
4945 fprintf (outfile, "%6ld", line_info->dw_line_num);
4946 fprintf (outfile, "\n");
4949 fprintf (outfile, "\n\n");
4952 /* Print the information collected for a given DIE. */
4955 debug_dwarf_die (die)
4958 print_die (die, stderr);
4961 /* Print all DWARF information collected for the compilation unit.
4962 This routine is a debugging aid only. */
4968 print_die (comp_unit_die, stderr);
4969 if (! DWARF2_ASM_LINE_DEBUG_INFO)
4970 print_dwarf_line_table (stderr);
4973 /* We build up the lists of children and attributes by pushing new ones
4974 onto the beginning of the list. Reverse the lists for DIE so that
4975 they are in order of addition. */
4978 reverse_die_lists (die)
4979 register dw_die_ref die;
4981 register dw_die_ref c, cp, cn;
4982 register dw_attr_ref a, ap, an;
4984 for (a = die->die_attr, ap = 0; a; a = an)
4986 an = a->dw_attr_next;
4987 a->dw_attr_next = ap;
4992 for (c = die->die_child, cp = 0; c; c = cn)
4998 die->die_child = cp;
5001 /* reverse_die_lists only reverses the single die you pass it. Since
5002 we used to reverse all dies in add_sibling_attributes, which runs
5003 through all the dies, it would reverse all the dies. Now, however,
5004 since we don't call reverse_die_lists in add_sibling_attributes, we
5005 need a routine to recursively reverse all the dies. This is that
5009 reverse_all_dies (die)
5010 register dw_die_ref die;
5012 register dw_die_ref c;
5014 reverse_die_lists (die);
5016 for (c = die->die_child; c; c = c->die_sib)
5017 reverse_all_dies (c);
5020 /* Start a new compilation unit DIE for an include file. OLD_UNIT is
5021 the CU for the enclosing include file, if any. BINCL_DIE is the
5022 DW_TAG_GNU_BINCL DIE that marks the start of the DIEs for this
5026 push_new_compile_unit (old_unit, bincl_die)
5027 dw_die_ref old_unit, bincl_die;
5029 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5030 dw_die_ref new_unit = gen_compile_unit_die (filename);
5031 new_unit->die_sib = old_unit;
5035 /* Close an include-file CU and reopen the enclosing one. */
5038 pop_compile_unit (old_unit)
5039 dw_die_ref old_unit;
5041 dw_die_ref new_unit = old_unit->die_sib;
5042 old_unit->die_sib = NULL;
5046 #define PROCESS(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5047 #define PROCESS_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5049 /* Calculate the checksum of a location expression. */
5052 loc_checksum (loc, ctx)
5053 dw_loc_descr_ref loc;
5054 struct md5_ctx *ctx;
5056 PROCESS (loc->dw_loc_opc);
5057 PROCESS (loc->dw_loc_oprnd1);
5058 PROCESS (loc->dw_loc_oprnd2);
5061 /* Calculate the checksum of an attribute. */
5064 attr_checksum (at, ctx)
5066 struct md5_ctx *ctx;
5068 dw_loc_descr_ref loc;
5071 PROCESS (at->dw_attr);
5073 /* We don't care about differences in file numbering. */
5074 if (at->dw_attr == DW_AT_decl_file
5075 /* Or that this was compiled with a different compiler snapshot; if
5076 the output is the same, that's what matters. */
5077 || at->dw_attr == DW_AT_producer)
5080 switch (AT_class (at))
5082 case dw_val_class_const:
5083 PROCESS (at->dw_attr_val.v.val_int);
5085 case dw_val_class_unsigned_const:
5086 PROCESS (at->dw_attr_val.v.val_unsigned);
5088 case dw_val_class_long_long:
5089 PROCESS (at->dw_attr_val.v.val_long_long);
5091 case dw_val_class_float:
5092 PROCESS (at->dw_attr_val.v.val_float);
5094 case dw_val_class_flag:
5095 PROCESS (at->dw_attr_val.v.val_flag);
5098 case dw_val_class_str:
5099 PROCESS_STRING (AT_string (at));
5101 case dw_val_class_addr:
5103 switch (GET_CODE (r))
5106 PROCESS_STRING (XSTR (r, 0));
5114 case dw_val_class_loc:
5115 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5116 loc_checksum (loc, ctx);
5119 case dw_val_class_die_ref:
5120 if (AT_ref (at)->die_offset)
5121 PROCESS (AT_ref (at)->die_offset);
5122 /* FIXME else use target die name or something. */
5124 case dw_val_class_fde_ref:
5125 case dw_val_class_lbl_id:
5126 case dw_val_class_lbl_offset:
5133 /* Calculate the checksum of a DIE. */
5136 die_checksum (die, ctx)
5138 struct md5_ctx *ctx;
5143 PROCESS (die->die_tag);
5145 for (a = die->die_attr; a; a = a->dw_attr_next)
5146 attr_checksum (a, ctx);
5148 for (c = die->die_child; c; c = c->die_sib)
5149 die_checksum (c, ctx);
5153 #undef PROCESS_STRING
5155 /* The prefix to attach to symbols on DIEs in the current comdat debug
5157 static char *comdat_symbol_id;
5159 /* The index of the current symbol within the current comdat CU. */
5160 static unsigned int comdat_symbol_number;
5162 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
5163 children, and set comdat_symbol_id accordingly. */
5166 compute_section_prefix (unit_die)
5167 dw_die_ref unit_die;
5171 unsigned char checksum[16];
5174 md5_init_ctx (&ctx);
5175 die_checksum (unit_die, &ctx);
5176 md5_finish_ctx (&ctx, checksum);
5178 p = file_name_nondirectory (get_AT_string (unit_die, DW_AT_name));
5179 name = (char *) alloca (strlen (p) + 64);
5180 sprintf (name, "%s.", p);
5182 clean_symbol_name (name);
5184 p = name + strlen (name);
5185 for (i = 0; i < 4; ++i)
5187 sprintf (p, "%.2x", checksum[i]);
5191 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
5192 comdat_symbol_number = 0;
5195 /* Returns nonzero iff DIE represents a type, in the sense of TYPE_P. */
5201 switch (die->die_tag)
5203 case DW_TAG_array_type:
5204 case DW_TAG_class_type:
5205 case DW_TAG_enumeration_type:
5206 case DW_TAG_pointer_type:
5207 case DW_TAG_reference_type:
5208 case DW_TAG_string_type:
5209 case DW_TAG_structure_type:
5210 case DW_TAG_subroutine_type:
5211 case DW_TAG_union_type:
5212 case DW_TAG_ptr_to_member_type:
5213 case DW_TAG_set_type:
5214 case DW_TAG_subrange_type:
5215 case DW_TAG_base_type:
5216 case DW_TAG_const_type:
5217 case DW_TAG_file_type:
5218 case DW_TAG_packed_type:
5219 case DW_TAG_volatile_type:
5226 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
5227 Basically, we want to choose the bits that are likely to be shared between
5228 compilations (types) and leave out the bits that are specific to individual
5229 compilations (functions). */
5236 /* I think we want to leave base types and __vtbl_ptr_type in the
5237 main CU, as we do for stabs. The advantage is a greater
5238 likelihood of sharing between objects that don't include headers
5239 in the same order (and therefore would put the base types in a
5240 different comdat). jason 8/28/00 */
5241 if (c->die_tag == DW_TAG_base_type)
5244 if (c->die_tag == DW_TAG_pointer_type
5245 || c->die_tag == DW_TAG_reference_type
5246 || c->die_tag == DW_TAG_const_type
5247 || c->die_tag == DW_TAG_volatile_type)
5249 dw_die_ref t = get_AT_ref (c, DW_AT_type);
5250 return t ? is_comdat_die (t) : 0;
5254 return is_type_die (c);
5257 /* Returns 1 iff C is the sort of DIE that might be referred to from another
5258 compilation unit. */
5264 if (is_type_die (c))
5266 if (get_AT (c, DW_AT_declaration)
5267 && ! get_AT (c, DW_AT_specification))
5276 static int label_num;
5277 ASM_GENERATE_INTERNAL_LABEL (buf, "LDIE", label_num++);
5278 return xstrdup (buf);
5281 /* Assign symbols to all worthy DIEs under DIE. */
5284 assign_symbol_names (die)
5285 register dw_die_ref die;
5287 register dw_die_ref c;
5289 if (is_symbol_die (die))
5291 if (comdat_symbol_id)
5293 char *p = alloca (strlen (comdat_symbol_id) + 64);
5294 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
5295 comdat_symbol_id, comdat_symbol_number++);
5296 die->die_symbol = xstrdup (p);
5299 die->die_symbol = gen_internal_sym ();
5302 for (c = die->die_child; c != NULL; c = c->die_sib)
5303 assign_symbol_names (c);
5306 /* Traverse the DIE (which is always comp_unit_die), and set up
5307 additional compilation units for each of the include files we see
5308 bracketed by BINCL/EINCL. */
5311 break_out_includes (die)
5312 register dw_die_ref die;
5315 register dw_die_ref unit = NULL;
5316 limbo_die_node *node;
5318 for (ptr = &(die->die_child); *ptr; )
5320 register dw_die_ref c = *ptr;
5322 if (c->die_tag == DW_TAG_GNU_BINCL
5323 || c->die_tag == DW_TAG_GNU_EINCL
5324 || (unit && is_comdat_die (c)))
5326 /* This DIE is for a secondary CU; remove it from the main one. */
5329 if (c->die_tag == DW_TAG_GNU_BINCL)
5331 unit = push_new_compile_unit (unit, c);
5334 else if (c->die_tag == DW_TAG_GNU_EINCL)
5336 unit = pop_compile_unit (unit);
5340 add_child_die (unit, c);
5344 /* Leave this DIE in the main CU. */
5345 ptr = &(c->die_sib);
5351 /* We can only use this in debugging, since the frontend doesn't check
5352 to make sure that we leave every include file we enter. */
5357 assign_symbol_names (die);
5358 for (node = limbo_die_list; node; node = node->next)
5360 compute_section_prefix (node->die);
5361 assign_symbol_names (node->die);
5365 /* Traverse the DIE and add a sibling attribute if it may have the
5366 effect of speeding up access to siblings. To save some space,
5367 avoid generating sibling attributes for DIE's without children. */
5370 add_sibling_attributes (die)
5371 register dw_die_ref die;
5373 register dw_die_ref c;
5375 if (die->die_tag != DW_TAG_compile_unit
5376 && die->die_sib && die->die_child != NULL)
5377 /* Add the sibling link to the front of the attribute list. */
5378 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
5380 for (c = die->die_child; c != NULL; c = c->die_sib)
5381 add_sibling_attributes (c);
5384 /* The format of each DIE (and its attribute value pairs)
5385 is encoded in an abbreviation table. This routine builds the
5386 abbreviation table and assigns a unique abbreviation id for
5387 each abbreviation entry. The children of each die are visited
5391 build_abbrev_table (die)
5392 register dw_die_ref die;
5394 register unsigned long abbrev_id;
5395 register unsigned long n_alloc;
5396 register dw_die_ref c;
5397 register dw_attr_ref d_attr, a_attr;
5399 /* Scan the DIE references, and mark as external any that refer to
5400 DIEs from other CUs (i.e. those with cleared die_offset). */
5401 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
5403 if (AT_class (d_attr) == dw_val_class_die_ref
5404 && AT_ref (d_attr)->die_offset == 0)
5406 if (AT_ref (d_attr)->die_symbol == 0)
5408 set_AT_ref_external (d_attr, 1);
5412 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
5414 register dw_die_ref abbrev = abbrev_die_table[abbrev_id];
5416 if (abbrev->die_tag == die->die_tag)
5418 if ((abbrev->die_child != NULL) == (die->die_child != NULL))
5420 a_attr = abbrev->die_attr;
5421 d_attr = die->die_attr;
5423 while (a_attr != NULL && d_attr != NULL)
5425 if ((a_attr->dw_attr != d_attr->dw_attr)
5426 || (value_format (a_attr) != value_format (d_attr)))
5429 a_attr = a_attr->dw_attr_next;
5430 d_attr = d_attr->dw_attr_next;
5433 if (a_attr == NULL && d_attr == NULL)
5439 if (abbrev_id >= abbrev_die_table_in_use)
5441 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
5443 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
5445 = (dw_die_ref *) xrealloc (abbrev_die_table,
5446 sizeof (dw_die_ref) * n_alloc);
5448 bzero ((char *) &abbrev_die_table[abbrev_die_table_allocated],
5449 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
5450 abbrev_die_table_allocated = n_alloc;
5453 ++abbrev_die_table_in_use;
5454 abbrev_die_table[abbrev_id] = die;
5457 die->die_abbrev = abbrev_id;
5458 for (c = die->die_child; c != NULL; c = c->die_sib)
5459 build_abbrev_table (c);
5462 /* Return the size of a string, including the null byte.
5464 This used to treat backslashes as escapes, and hence they were not included
5465 in the count. However, that conflicts with what ASM_OUTPUT_ASCII does,
5466 which treats a backslash as a backslash, escaping it if necessary, and hence
5467 we must include them in the count. */
5469 static unsigned long
5470 size_of_string (str)
5471 register const char *str;
5473 return strlen (str) + 1;
5476 /* Return the power-of-two number of bytes necessary to represent VALUE. */
5479 constant_size (value)
5480 long unsigned value;
5487 log = floor_log2 (value);
5490 log = 1 << (floor_log2 (log) + 1);
5495 /* Return the size of a DIE, as it is represented in the
5496 .debug_info section. */
5498 static unsigned long
5500 register dw_die_ref die;
5502 register unsigned long size = 0;
5503 register dw_attr_ref a;
5505 size += size_of_uleb128 (die->die_abbrev);
5506 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5508 switch (AT_class (a))
5510 case dw_val_class_addr:
5511 size += DWARF2_ADDR_SIZE;
5513 case dw_val_class_loc:
5515 register unsigned long lsize = size_of_locs (AT_loc (a));
5518 size += constant_size (lsize);
5522 case dw_val_class_const:
5523 size += size_of_sleb128 (AT_int (a));
5525 case dw_val_class_unsigned_const:
5526 size += constant_size (AT_unsigned (a));
5528 case dw_val_class_long_long:
5529 size += 1 + 8; /* block */
5531 case dw_val_class_float:
5532 size += 1 + a->dw_attr_val.v.val_float.length * 4; /* block */
5534 case dw_val_class_flag:
5537 case dw_val_class_die_ref:
5538 size += DWARF_OFFSET_SIZE;
5540 case dw_val_class_fde_ref:
5541 size += DWARF_OFFSET_SIZE;
5543 case dw_val_class_lbl_id:
5544 size += DWARF2_ADDR_SIZE;
5546 case dw_val_class_lbl_offset:
5547 size += DWARF_OFFSET_SIZE;
5549 case dw_val_class_str:
5550 size += size_of_string (AT_string (a));
5560 /* Size the debugging information associated with a given DIE.
5561 Visits the DIE's children recursively. Updates the global
5562 variable next_die_offset, on each time through. Uses the
5563 current value of next_die_offset to update the die_offset
5564 field in each DIE. */
5567 calc_die_sizes (die)
5570 register dw_die_ref c;
5571 die->die_offset = next_die_offset;
5572 next_die_offset += size_of_die (die);
5574 for (c = die->die_child; c != NULL; c = c->die_sib)
5577 if (die->die_child != NULL)
5578 /* Count the null byte used to terminate sibling lists. */
5579 next_die_offset += 1;
5582 /* Clear the offsets and sizes for a die and its children. We do this so
5583 that we know whether or not a reference needs to use FORM_ref_addr; only
5584 DIEs in the same CU will have non-zero offsets available. */
5587 clear_die_sizes (die)
5590 register dw_die_ref c;
5591 die->die_offset = 0;
5592 for (c = die->die_child; c; c = c->die_sib)
5593 clear_die_sizes (c);
5596 /* Return the size of the line information prolog generated for the
5597 compilation unit. */
5599 static unsigned long
5600 size_of_line_prolog ()
5602 register unsigned long size;
5603 register unsigned long ft_index;
5605 size = DWARF_LINE_PROLOG_HEADER_SIZE;
5607 /* Count the size of the table giving number of args for each
5609 size += DWARF_LINE_OPCODE_BASE - 1;
5611 /* Include directory table is empty (at present). Count only the
5612 null byte used to terminate the table. */
5615 for (ft_index = 1; ft_index < file_table_in_use; ++ft_index)
5617 /* File name entry. */
5618 size += size_of_string (file_table[ft_index]);
5620 /* Include directory index. */
5621 size += size_of_uleb128 (0);
5623 /* Modification time. */
5624 size += size_of_uleb128 (0);
5626 /* File length in bytes. */
5627 size += size_of_uleb128 (0);
5630 /* Count the file table terminator. */
5635 /* Return the size of the .debug_pubnames table generated for the
5636 compilation unit. */
5638 static unsigned long
5641 register unsigned long size;
5642 register unsigned i;
5644 size = DWARF_PUBNAMES_HEADER_SIZE;
5645 for (i = 0; i < pubname_table_in_use; ++i)
5647 register pubname_ref p = &pubname_table[i];
5648 size += DWARF_OFFSET_SIZE + size_of_string (p->name);
5651 size += DWARF_OFFSET_SIZE;
5655 /* Return the size of the information in the .debug_aranges section. */
5657 static unsigned long
5660 register unsigned long size;
5662 size = DWARF_ARANGES_HEADER_SIZE;
5664 /* Count the address/length pair for this compilation unit. */
5665 size += 2 * DWARF2_ADDR_SIZE;
5666 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
5668 /* Count the two zero words used to terminated the address range table. */
5669 size += 2 * DWARF2_ADDR_SIZE;
5673 /* Select the encoding of an attribute value. */
5675 static enum dwarf_form
5679 switch (a->dw_attr_val.val_class)
5681 case dw_val_class_addr:
5682 return DW_FORM_addr;
5683 case dw_val_class_loc:
5684 switch (constant_size (size_of_locs (AT_loc (a))))
5687 return DW_FORM_block1;
5689 return DW_FORM_block2;
5693 case dw_val_class_const:
5694 return DW_FORM_sdata;
5695 case dw_val_class_unsigned_const:
5696 switch (constant_size (AT_unsigned (a)))
5699 return DW_FORM_data1;
5701 return DW_FORM_data2;
5703 return DW_FORM_data4;
5705 return DW_FORM_data8;
5709 case dw_val_class_long_long:
5710 return DW_FORM_block1;
5711 case dw_val_class_float:
5712 return DW_FORM_block1;
5713 case dw_val_class_flag:
5714 return DW_FORM_flag;
5715 case dw_val_class_die_ref:
5716 if (AT_ref_external (a))
5717 return DW_FORM_ref_addr;
5720 case dw_val_class_fde_ref:
5721 return DW_FORM_data;
5722 case dw_val_class_lbl_id:
5723 return DW_FORM_addr;
5724 case dw_val_class_lbl_offset:
5725 return DW_FORM_data;
5726 case dw_val_class_str:
5727 return DW_FORM_string;
5733 /* Output the encoding of an attribute value. */
5736 output_value_format (a)
5739 enum dwarf_form form = value_format (a);
5741 output_uleb128 (form);
5743 fprintf (asm_out_file, " (%s)", dwarf_form_name (form));
5745 fputc ('\n', asm_out_file);
5748 /* Output the .debug_abbrev section which defines the DIE abbreviation
5752 output_abbrev_section ()
5754 unsigned long abbrev_id;
5757 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
5759 register dw_die_ref abbrev = abbrev_die_table[abbrev_id];
5761 output_uleb128 (abbrev_id);
5763 fprintf (asm_out_file, " (abbrev code)");
5765 fputc ('\n', asm_out_file);
5766 output_uleb128 (abbrev->die_tag);
5768 fprintf (asm_out_file, " (TAG: %s)",
5769 dwarf_tag_name (abbrev->die_tag));
5771 fputc ('\n', asm_out_file);
5772 fprintf (asm_out_file, "\t%s\t0x%x", ASM_BYTE_OP,
5773 abbrev->die_child != NULL ? DW_children_yes : DW_children_no);
5776 fprintf (asm_out_file, "\t%s %s",
5778 (abbrev->die_child != NULL
5779 ? "DW_children_yes" : "DW_children_no"));
5781 fputc ('\n', asm_out_file);
5783 for (a_attr = abbrev->die_attr; a_attr != NULL;
5784 a_attr = a_attr->dw_attr_next)
5786 output_uleb128 (a_attr->dw_attr);
5788 fprintf (asm_out_file, " (%s)",
5789 dwarf_attr_name (a_attr->dw_attr));
5791 fputc ('\n', asm_out_file);
5792 output_value_format (a_attr);
5795 fprintf (asm_out_file, "\t%s\t0,0\n", ASM_BYTE_OP);
5798 /* Terminate the table. */
5799 fprintf (asm_out_file, "\t%s\t0\n", ASM_BYTE_OP);
5802 /* Output a symbol we can use to refer to this DIE from another CU. */
5805 output_die_symbol (die)
5806 register dw_die_ref die;
5808 char *sym = die->die_symbol;
5813 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
5814 /* We make these global, not weak; if the target doesn't support
5815 .linkonce, it doesn't support combining the sections, so debugging
5817 ASM_GLOBALIZE_LABEL (asm_out_file, sym);
5818 ASM_OUTPUT_LABEL (asm_out_file, sym);
5821 /* Output a symbolic (i.e. FORM_ref_addr) reference to TARGET_DIE. */
5824 output_symbolic_ref (target_die)
5825 dw_die_ref target_die;
5827 char *sym = target_die->die_symbol;
5832 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, sym);
5835 /* Output the DIE and its attributes. Called recursively to generate
5836 the definitions of each child DIE. */
5840 register dw_die_ref die;
5842 register dw_attr_ref a;
5843 register dw_die_ref c;
5844 register unsigned long size;
5846 /* If someone in another CU might refer to us, set up a symbol for
5847 them to point to. */
5848 if (die->die_symbol)
5849 output_die_symbol (die);
5851 output_uleb128 (die->die_abbrev);
5853 fprintf (asm_out_file, " (DIE (0x%lx) %s)",
5854 die->die_offset, dwarf_tag_name (die->die_tag));
5856 fputc ('\n', asm_out_file);
5858 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5860 switch (AT_class (a))
5862 case dw_val_class_addr:
5863 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, AT_addr (a));
5866 case dw_val_class_loc:
5867 size = size_of_locs (AT_loc (a));
5869 /* Output the block length for this list of location operations. */
5870 switch (constant_size (size))
5873 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, size);
5876 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, size);
5883 fprintf (asm_out_file, "\t%s %s",
5884 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5886 fputc ('\n', asm_out_file);
5888 output_loc_sequence (AT_loc (a));
5891 case dw_val_class_const:
5892 /* ??? It would be slightly more efficient to use a scheme like is
5893 used for unsigned constants below, but gdb 4.x does not sign
5894 extend. Gdb 5.x does sign extend. */
5895 output_sleb128 (AT_int (a));
5898 case dw_val_class_unsigned_const:
5899 switch (constant_size (AT_unsigned (a)))
5902 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, AT_unsigned (a));
5905 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, AT_unsigned (a));
5908 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, AT_unsigned (a));
5911 ASM_OUTPUT_DWARF_DATA8 (asm_out_file, AT_unsigned (a));
5918 case dw_val_class_long_long:
5919 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 8);
5921 fprintf (asm_out_file, "\t%s %s",
5922 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5924 fputc ('\n', asm_out_file);
5925 ASM_OUTPUT_DWARF_CONST_DOUBLE (asm_out_file,
5926 a->dw_attr_val.v.val_long_long.hi,
5927 a->dw_attr_val.v.val_long_long.low);
5930 fprintf (asm_out_file,
5931 "\t%s long long constant", ASM_COMMENT_START);
5933 fputc ('\n', asm_out_file);
5936 case dw_val_class_float:
5938 register unsigned int i;
5939 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
5940 a->dw_attr_val.v.val_float.length * 4);
5942 fprintf (asm_out_file, "\t%s %s",
5943 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5945 fputc ('\n', asm_out_file);
5946 for (i = 0; i < a->dw_attr_val.v.val_float.length; ++i)
5948 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
5949 a->dw_attr_val.v.val_float.array[i]);
5951 fprintf (asm_out_file, "\t%s fp constant word %u",
5952 ASM_COMMENT_START, i);
5954 fputc ('\n', asm_out_file);
5959 case dw_val_class_flag:
5960 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, AT_flag (a));
5963 case dw_val_class_die_ref:
5964 if (AT_ref_external (a))
5965 output_symbolic_ref (AT_ref (a));
5967 ASM_OUTPUT_DWARF_DATA (asm_out_file, AT_ref (a)->die_offset);
5970 case dw_val_class_fde_ref:
5973 ASM_GENERATE_INTERNAL_LABEL
5974 (l1, FDE_AFTER_SIZE_LABEL, a->dw_attr_val.v.val_fde_index * 2);
5975 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, l1);
5976 fprintf (asm_out_file, " - %d", DWARF_OFFSET_SIZE);
5980 case dw_val_class_lbl_id:
5981 ASM_OUTPUT_DWARF_ADDR (asm_out_file, AT_lbl (a));
5984 case dw_val_class_lbl_offset:
5985 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, AT_lbl (a));
5988 case dw_val_class_str:
5990 ASM_OUTPUT_DWARF_STRING (asm_out_file, AT_string (a));
5992 ASM_OUTPUT_ASCII (asm_out_file, AT_string (a),
5993 (int) strlen (AT_string (a)) + 1);
6000 if (AT_class (a) != dw_val_class_loc
6001 && AT_class (a) != dw_val_class_long_long
6002 && AT_class (a) != dw_val_class_float)
6005 fprintf (asm_out_file, "\t%s %s",
6006 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
6008 fputc ('\n', asm_out_file);
6012 for (c = die->die_child; c != NULL; c = c->die_sib)
6015 if (die->die_child != NULL)
6017 /* Add null byte to terminate sibling list. */
6018 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6020 fprintf (asm_out_file, "\t%s end of children of DIE 0x%lx",
6021 ASM_COMMENT_START, die->die_offset);
6023 fputc ('\n', asm_out_file);
6027 /* Output the compilation unit that appears at the beginning of the
6028 .debug_info section, and precedes the DIE descriptions. */
6031 output_compilation_unit_header ()
6033 ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset - DWARF_OFFSET_SIZE);
6035 fprintf (asm_out_file, "\t%s Length of Compilation Unit Info.",
6038 fputc ('\n', asm_out_file);
6039 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
6041 fprintf (asm_out_file, "\t%s DWARF version number", ASM_COMMENT_START);
6043 fputc ('\n', asm_out_file);
6044 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, abbrev_section_label);
6046 fprintf (asm_out_file, "\t%s Offset Into Abbrev. Section",
6049 fputc ('\n', asm_out_file);
6050 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF2_ADDR_SIZE);
6052 fprintf (asm_out_file, "\t%s Pointer Size (in bytes)", ASM_COMMENT_START);
6054 fputc ('\n', asm_out_file);
6057 /* Output the compilation unit DIE and its children. */
6060 output_comp_unit (die)
6065 if (die->die_child == 0)
6068 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
6069 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
6070 calc_die_sizes (die);
6072 build_abbrev_table (die);
6074 if (die->die_symbol)
6076 secname = (char *) alloca (strlen (die->die_symbol) + 24);
6077 sprintf (secname, ".gnu.linkonce.wi.%s", die->die_symbol);
6078 die->die_symbol = NULL;
6081 secname = (char *) DEBUG_INFO_SECTION;
6083 /* Output debugging information. */
6084 fputc ('\n', asm_out_file);
6085 ASM_OUTPUT_SECTION (asm_out_file, secname);
6086 output_compilation_unit_header ();
6089 /* Leave the sizes on the main CU, since we do it last and we use the
6090 sizes in output_pubnames. */
6091 if (die->die_symbol)
6092 clear_die_sizes (die);
6095 /* The DWARF2 pubname for a nested thingy looks like "A::f". The output
6096 of decl_printable_name for C++ looks like "A::f(int)". Let's drop the
6097 argument list, and maybe the scope. */
6100 dwarf2_name (decl, scope)
6104 return (*decl_printable_name) (decl, scope ? 1 : 0);
6107 /* Add a new entry to .debug_pubnames if appropriate. */
6110 add_pubname (decl, die)
6116 if (! TREE_PUBLIC (decl))
6119 if (pubname_table_in_use == pubname_table_allocated)
6121 pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
6122 pubname_table = (pubname_ref) xrealloc
6123 (pubname_table, pubname_table_allocated * sizeof (pubname_entry));
6126 p = &pubname_table[pubname_table_in_use++];
6129 p->name = xstrdup (dwarf2_name (decl, 1));
6132 /* Output the public names table used to speed up access to externally
6133 visible names. For now, only generate entries for externally
6134 visible procedures. */
6139 register unsigned i;
6140 register unsigned long pubnames_length = size_of_pubnames ();
6142 ASM_OUTPUT_DWARF_DATA (asm_out_file, pubnames_length);
6145 fprintf (asm_out_file, "\t%s Length of Public Names Info.",
6148 fputc ('\n', asm_out_file);
6149 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
6152 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
6154 fputc ('\n', asm_out_file);
6155 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, debug_info_section_label);
6157 fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
6160 fputc ('\n', asm_out_file);
6161 ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset);
6163 fprintf (asm_out_file, "\t%s Compilation Unit Length", ASM_COMMENT_START);
6165 fputc ('\n', asm_out_file);
6166 for (i = 0; i < pubname_table_in_use; ++i)
6168 register pubname_ref pub = &pubname_table[i];
6170 /* We shouldn't see pubnames for DIEs outside of the main CU. */
6171 if (pub->die->die_offset == 0)
6174 ASM_OUTPUT_DWARF_DATA (asm_out_file, pub->die->die_offset);
6176 fprintf (asm_out_file, "\t%s DIE offset", ASM_COMMENT_START);
6178 fputc ('\n', asm_out_file);
6182 ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name);
6183 fprintf (asm_out_file, "%s external name", ASM_COMMENT_START);
6187 ASM_OUTPUT_ASCII (asm_out_file, pub->name,
6188 (int) strlen (pub->name) + 1);
6191 fputc ('\n', asm_out_file);
6194 ASM_OUTPUT_DWARF_DATA (asm_out_file, 0);
6195 fputc ('\n', asm_out_file);
6198 /* Add a new entry to .debug_aranges if appropriate. */
6201 add_arange (decl, die)
6205 if (! DECL_SECTION_NAME (decl))
6208 if (arange_table_in_use == arange_table_allocated)
6210 arange_table_allocated += ARANGE_TABLE_INCREMENT;
6212 = (arange_ref) xrealloc (arange_table,
6213 arange_table_allocated * sizeof (dw_die_ref));
6216 arange_table[arange_table_in_use++] = die;
6219 /* Output the information that goes into the .debug_aranges table.
6220 Namely, define the beginning and ending address range of the
6221 text section generated for this compilation unit. */
6226 register unsigned i;
6227 register unsigned long aranges_length = size_of_aranges ();
6229 ASM_OUTPUT_DWARF_DATA (asm_out_file, aranges_length);
6231 fprintf (asm_out_file, "\t%s Length of Address Ranges Info.",
6234 fputc ('\n', asm_out_file);
6235 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
6237 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
6239 fputc ('\n', asm_out_file);
6240 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, debug_info_section_label);
6242 fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
6245 fputc ('\n', asm_out_file);
6246 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF2_ADDR_SIZE);
6248 fprintf (asm_out_file, "\t%s Size of Address", ASM_COMMENT_START);
6250 fputc ('\n', asm_out_file);
6251 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6253 fprintf (asm_out_file, "\t%s Size of Segment Descriptor",
6256 fputc ('\n', asm_out_file);
6258 /* We need to align to twice the pointer size here. */
6259 if (DWARF_ARANGES_PAD_SIZE)
6261 /* Pad using a 2 bytes word so that padding is correct
6262 for any pointer size. */
6263 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
6264 for (i = 2; i < DWARF_ARANGES_PAD_SIZE; i += 2)
6265 fprintf (asm_out_file, ",0");
6267 fprintf (asm_out_file, "\t%s Pad to %d byte boundary",
6268 ASM_COMMENT_START, 2 * DWARF2_ADDR_SIZE);
6271 fputc ('\n', asm_out_file);
6272 ASM_OUTPUT_DWARF_ADDR (asm_out_file, text_section_label);
6274 fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
6276 fputc ('\n', asm_out_file);
6277 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file, text_end_label,
6278 text_section_label);
6280 fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
6282 fputc ('\n', asm_out_file);
6283 for (i = 0; i < arange_table_in_use; ++i)
6285 dw_die_ref die = arange_table[i];
6287 /* We shouldn't see aranges for DIEs outside of the main CU. */
6288 if (die->die_offset == 0)
6291 if (die->die_tag == DW_TAG_subprogram)
6292 ASM_OUTPUT_DWARF_ADDR (asm_out_file, get_AT_low_pc (die));
6295 /* A static variable; extract the symbol from DW_AT_location.
6296 Note that this code isn't currently hit, as we only emit
6297 aranges for functions (jason 9/23/99). */
6299 dw_attr_ref a = get_AT (die, DW_AT_location);
6300 dw_loc_descr_ref loc;
6301 if (! a || AT_class (a) != dw_val_class_loc)
6305 if (loc->dw_loc_opc != DW_OP_addr)
6308 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file,
6309 loc->dw_loc_oprnd1.v.val_addr);
6313 fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
6315 fputc ('\n', asm_out_file);
6316 if (die->die_tag == DW_TAG_subprogram)
6317 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file, get_AT_hi_pc (die),
6318 get_AT_low_pc (die));
6320 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file,
6321 get_AT_unsigned (die, DW_AT_byte_size));
6324 fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
6326 fputc ('\n', asm_out_file);
6329 /* Output the terminator words. */
6330 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file, 0);
6331 fputc ('\n', asm_out_file);
6332 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file, 0);
6333 fputc ('\n', asm_out_file);
6336 /* Output the source line number correspondence information. This
6337 information goes into the .debug_line section. */
6342 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
6343 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
6344 register unsigned opc;
6345 register unsigned n_op_args;
6346 register unsigned long ft_index;
6347 register unsigned long lt_index;
6348 register unsigned long current_line;
6349 register long line_offset;
6350 register long line_delta;
6351 register unsigned long current_file;
6352 register unsigned long function;
6354 ASM_OUTPUT_DWARF_DELTA (asm_out_file, ".LTEND", ".LTSTART");
6356 fprintf (asm_out_file, "\t%s Length of Source Line Info.",
6359 fputc ('\n', asm_out_file);
6360 ASM_OUTPUT_LABEL (asm_out_file, ".LTSTART");
6361 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
6363 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
6365 fputc ('\n', asm_out_file);
6366 ASM_OUTPUT_DWARF_DATA (asm_out_file, size_of_line_prolog ());
6368 fprintf (asm_out_file, "\t%s Prolog Length", ASM_COMMENT_START);
6370 fputc ('\n', asm_out_file);
6371 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_MIN_INSTR_LENGTH);
6373 fprintf (asm_out_file, "\t%s Minimum Instruction Length",
6376 fputc ('\n', asm_out_file);
6377 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_DEFAULT_IS_STMT_START);
6379 fprintf (asm_out_file, "\t%s Default is_stmt_start flag",
6382 fputc ('\n', asm_out_file);
6383 fprintf (asm_out_file, "\t%s\t%d", ASM_BYTE_OP, DWARF_LINE_BASE);
6385 fprintf (asm_out_file, "\t%s Line Base Value (Special Opcodes)",
6388 fputc ('\n', asm_out_file);
6389 fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_RANGE);
6391 fprintf (asm_out_file, "\t%s Line Range Value (Special Opcodes)",
6394 fputc ('\n', asm_out_file);
6395 fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_OPCODE_BASE);
6397 fprintf (asm_out_file, "\t%s Special Opcode Base", ASM_COMMENT_START);
6399 fputc ('\n', asm_out_file);
6400 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; ++opc)
6404 case DW_LNS_advance_pc:
6405 case DW_LNS_advance_line:
6406 case DW_LNS_set_file:
6407 case DW_LNS_set_column:
6408 case DW_LNS_fixed_advance_pc:
6415 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, n_op_args);
6417 fprintf (asm_out_file, "\t%s opcode: 0x%x has %d args",
6418 ASM_COMMENT_START, opc, n_op_args);
6419 fputc ('\n', asm_out_file);
6423 fprintf (asm_out_file, "%s Include Directory Table\n", ASM_COMMENT_START);
6425 /* Include directory table is empty, at present */
6426 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6427 fputc ('\n', asm_out_file);
6429 fprintf (asm_out_file, "%s File Name Table\n", ASM_COMMENT_START);
6431 for (ft_index = 1; ft_index < file_table_in_use; ++ft_index)
6435 ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]);
6436 fprintf (asm_out_file, "%s File Entry: 0x%lx",
6437 ASM_COMMENT_START, ft_index);
6441 ASM_OUTPUT_ASCII (asm_out_file,
6442 file_table[ft_index],
6443 (int) strlen (file_table[ft_index]) + 1);
6446 fputc ('\n', asm_out_file);
6448 /* Include directory index */
6450 fputc ('\n', asm_out_file);
6452 /* Modification time */
6454 fputc ('\n', asm_out_file);
6456 /* File length in bytes */
6458 fputc ('\n', asm_out_file);
6461 /* Terminate the file name table */
6462 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6463 fputc ('\n', asm_out_file);
6465 /* We used to set the address register to the first location in the text
6466 section here, but that didn't accomplish anything since we already
6467 have a line note for the opening brace of the first function. */
6469 /* Generate the line number to PC correspondence table, encoded as
6470 a series of state machine operations. */
6473 strcpy (prev_line_label, text_section_label);
6474 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
6476 register dw_line_info_ref line_info = &line_info_table[lt_index];
6479 /* Disable this optimization for now; GDB wants to see two line notes
6480 at the beginning of a function so it can find the end of the
6483 /* Don't emit anything for redundant notes. Just updating the
6484 address doesn't accomplish anything, because we already assume
6485 that anything after the last address is this line. */
6486 if (line_info->dw_line_num == current_line
6487 && line_info->dw_file_num == current_file)
6491 /* Emit debug info for the address of the current line, choosing
6492 the encoding that uses the least amount of space. */
6493 /* ??? Unfortunately, we have little choice here currently, and must
6494 always use the most general form. Gcc does not know the address
6495 delta itself, so we can't use DW_LNS_advance_pc. There are no known
6496 dwarf2 aware assemblers at this time, so we can't use any special
6497 pseudo ops that would allow the assembler to optimally encode this for
6498 us. Many ports do have length attributes which will give an upper
6499 bound on the address range. We could perhaps use length attributes
6500 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
6501 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
6504 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
6505 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6507 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6510 fputc ('\n', asm_out_file);
6511 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label, prev_line_label);
6512 fputc ('\n', asm_out_file);
6516 /* This can handle any delta. This takes
6517 4+DWARF2_ADDR_SIZE bytes. */
6518 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6520 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6522 fputc ('\n', asm_out_file);
6523 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6524 fputc ('\n', asm_out_file);
6525 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6526 fputc ('\n', asm_out_file);
6527 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6528 fputc ('\n', asm_out_file);
6530 strcpy (prev_line_label, line_label);
6532 /* Emit debug info for the source file of the current line, if
6533 different from the previous line. */
6534 if (line_info->dw_file_num != current_file)
6536 current_file = line_info->dw_file_num;
6537 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
6539 fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
6541 fputc ('\n', asm_out_file);
6542 output_uleb128 (current_file);
6544 fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
6546 fputc ('\n', asm_out_file);
6549 /* Emit debug info for the current line number, choosing the encoding
6550 that uses the least amount of space. */
6551 if (line_info->dw_line_num != current_line)
6553 line_offset = line_info->dw_line_num - current_line;
6554 line_delta = line_offset - DWARF_LINE_BASE;
6555 current_line = line_info->dw_line_num;
6556 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
6558 /* This can handle deltas from -10 to 234, using the current
6559 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
6561 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
6562 DWARF_LINE_OPCODE_BASE + line_delta);
6564 fprintf (asm_out_file,
6565 "\t%s line %ld", ASM_COMMENT_START, current_line);
6567 fputc ('\n', asm_out_file);
6571 /* This can handle any delta. This takes at least 4 bytes,
6572 depending on the value being encoded. */
6573 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
6575 fprintf (asm_out_file, "\t%s advance to line %ld",
6576 ASM_COMMENT_START, current_line);
6578 fputc ('\n', asm_out_file);
6579 output_sleb128 (line_offset);
6580 fputc ('\n', asm_out_file);
6581 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6583 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6584 fputc ('\n', asm_out_file);
6589 /* We still need to start a new row, so output a copy insn. */
6590 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6592 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6593 fputc ('\n', asm_out_file);
6597 /* Emit debug info for the address of the end of the function. */
6600 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6602 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6605 fputc ('\n', asm_out_file);
6606 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, text_end_label, prev_line_label);
6607 fputc ('\n', asm_out_file);
6611 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6613 fprintf (asm_out_file, "\t%s DW_LNE_set_address", ASM_COMMENT_START);
6614 fputc ('\n', asm_out_file);
6615 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6616 fputc ('\n', asm_out_file);
6617 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6618 fputc ('\n', asm_out_file);
6619 ASM_OUTPUT_DWARF_ADDR (asm_out_file, text_end_label);
6620 fputc ('\n', asm_out_file);
6623 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6625 fprintf (asm_out_file, "\t%s DW_LNE_end_sequence", ASM_COMMENT_START);
6627 fputc ('\n', asm_out_file);
6629 fputc ('\n', asm_out_file);
6630 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_end_sequence);
6631 fputc ('\n', asm_out_file);
6636 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
6638 register dw_separate_line_info_ref line_info
6639 = &separate_line_info_table[lt_index];
6642 /* Don't emit anything for redundant notes. */
6643 if (line_info->dw_line_num == current_line
6644 && line_info->dw_file_num == current_file
6645 && line_info->function == function)
6649 /* Emit debug info for the address of the current line. If this is
6650 a new function, or the first line of a function, then we need
6651 to handle it differently. */
6652 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
6654 if (function != line_info->function)
6656 function = line_info->function;
6658 /* Set the address register to the first line in the function */
6659 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6661 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6664 fputc ('\n', asm_out_file);
6665 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6666 fputc ('\n', asm_out_file);
6667 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6668 fputc ('\n', asm_out_file);
6669 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6670 fputc ('\n', asm_out_file);
6674 /* ??? See the DW_LNS_advance_pc comment above. */
6677 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6679 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6682 fputc ('\n', asm_out_file);
6683 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label,
6685 fputc ('\n', asm_out_file);
6689 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6691 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6693 fputc ('\n', asm_out_file);
6694 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6695 fputc ('\n', asm_out_file);
6696 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6697 fputc ('\n', asm_out_file);
6698 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6699 fputc ('\n', asm_out_file);
6702 strcpy (prev_line_label, line_label);
6704 /* Emit debug info for the source file of the current line, if
6705 different from the previous line. */
6706 if (line_info->dw_file_num != current_file)
6708 current_file = line_info->dw_file_num;
6709 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
6711 fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
6713 fputc ('\n', asm_out_file);
6714 output_uleb128 (current_file);
6716 fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
6718 fputc ('\n', asm_out_file);
6721 /* Emit debug info for the current line number, choosing the encoding
6722 that uses the least amount of space. */
6723 if (line_info->dw_line_num != current_line)
6725 line_offset = line_info->dw_line_num - current_line;
6726 line_delta = line_offset - DWARF_LINE_BASE;
6727 current_line = line_info->dw_line_num;
6728 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
6730 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
6731 DWARF_LINE_OPCODE_BASE + line_delta);
6733 fprintf (asm_out_file,
6734 "\t%s line %ld", ASM_COMMENT_START, current_line);
6736 fputc ('\n', asm_out_file);
6740 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
6742 fprintf (asm_out_file, "\t%s advance to line %ld",
6743 ASM_COMMENT_START, current_line);
6745 fputc ('\n', asm_out_file);
6746 output_sleb128 (line_offset);
6747 fputc ('\n', asm_out_file);
6748 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6750 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6751 fputc ('\n', asm_out_file);
6756 /* We still need to start a new row, so output a copy insn. */
6757 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6759 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6760 fputc ('\n', asm_out_file);
6768 /* If we're done with a function, end its sequence. */
6769 if (lt_index == separate_line_info_table_in_use
6770 || separate_line_info_table[lt_index].function != function)
6775 /* Emit debug info for the address of the end of the function. */
6776 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
6779 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6781 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6784 fputc ('\n', asm_out_file);
6785 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label,
6787 fputc ('\n', asm_out_file);
6791 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6793 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6795 fputc ('\n', asm_out_file);
6796 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6797 fputc ('\n', asm_out_file);
6798 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6799 fputc ('\n', asm_out_file);
6800 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6801 fputc ('\n', asm_out_file);
6804 /* Output the marker for the end of this sequence. */
6805 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6807 fprintf (asm_out_file, "\t%s DW_LNE_end_sequence",
6810 fputc ('\n', asm_out_file);
6812 fputc ('\n', asm_out_file);
6813 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_end_sequence);
6814 fputc ('\n', asm_out_file);
6818 /* Output the marker for the end of the line number info. */
6819 ASM_OUTPUT_LABEL (asm_out_file, ".LTEND");
6822 /* Given a pointer to a tree node for some base type, return a pointer to
6823 a DIE that describes the given type.
6825 This routine must only be called for GCC type nodes that correspond to
6826 Dwarf base (fundamental) types. */
6829 base_type_die (type)
6832 register dw_die_ref base_type_result;
6833 register const char *type_name;
6834 register enum dwarf_type encoding;
6835 register tree name = TYPE_NAME (type);
6837 if (TREE_CODE (type) == ERROR_MARK
6838 || TREE_CODE (type) == VOID_TYPE)
6843 if (TREE_CODE (name) == TYPE_DECL)
6844 name = DECL_NAME (name);
6846 type_name = IDENTIFIER_POINTER (name);
6849 type_name = "__unknown__";
6851 switch (TREE_CODE (type))
6854 /* Carefully distinguish the C character types, without messing
6855 up if the language is not C. Note that we check only for the names
6856 that contain spaces; other names might occur by coincidence in other
6858 if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
6859 && (type == char_type_node
6860 || ! strcmp (type_name, "signed char")
6861 || ! strcmp (type_name, "unsigned char"))))
6863 if (TREE_UNSIGNED (type))
6864 encoding = DW_ATE_unsigned;
6866 encoding = DW_ATE_signed;
6869 /* else fall through. */
6872 /* GNU Pascal/Ada CHAR type. Not used in C. */
6873 if (TREE_UNSIGNED (type))
6874 encoding = DW_ATE_unsigned_char;
6876 encoding = DW_ATE_signed_char;
6880 encoding = DW_ATE_float;
6883 /* Dwarf2 doesn't know anything about complex ints, so use
6884 a user defined type for it. */
6886 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
6887 encoding = DW_ATE_complex_float;
6889 encoding = DW_ATE_lo_user;
6893 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
6894 encoding = DW_ATE_boolean;
6898 abort (); /* No other TREE_CODEs are Dwarf fundamental types. */
6901 base_type_result = new_die (DW_TAG_base_type, comp_unit_die);
6902 if (demangle_name_func)
6903 type_name = (*demangle_name_func) (type_name);
6905 add_AT_string (base_type_result, DW_AT_name, type_name);
6906 add_AT_unsigned (base_type_result, DW_AT_byte_size,
6907 int_size_in_bytes (type));
6908 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
6910 return base_type_result;
6913 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
6914 the Dwarf "root" type for the given input type. The Dwarf "root" type of
6915 a given type is generally the same as the given type, except that if the
6916 given type is a pointer or reference type, then the root type of the given
6917 type is the root type of the "basis" type for the pointer or reference
6918 type. (This definition of the "root" type is recursive.) Also, the root
6919 type of a `const' qualified type or a `volatile' qualified type is the
6920 root type of the given type without the qualifiers. */
6926 if (TREE_CODE (type) == ERROR_MARK)
6927 return error_mark_node;
6929 switch (TREE_CODE (type))
6932 return error_mark_node;
6935 case REFERENCE_TYPE:
6936 return type_main_variant (root_type (TREE_TYPE (type)));
6939 return type_main_variant (type);
6943 /* Given a pointer to an arbitrary ..._TYPE tree node, return non-zero if the
6944 given input type is a Dwarf "fundamental" type. Otherwise return null. */
6950 switch (TREE_CODE (type))
6965 case QUAL_UNION_TYPE:
6970 case REFERENCE_TYPE:
6983 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
6984 entry that chains various modifiers in front of the given type. */
6987 modified_type_die (type, is_const_type, is_volatile_type, context_die)
6989 register int is_const_type;
6990 register int is_volatile_type;
6991 register dw_die_ref context_die;
6993 register enum tree_code code = TREE_CODE (type);
6994 register dw_die_ref mod_type_die = NULL;
6995 register dw_die_ref sub_die = NULL;
6996 register tree item_type = NULL;
6998 if (code != ERROR_MARK)
7000 type = build_type_variant (type, is_const_type, is_volatile_type);
7002 mod_type_die = lookup_type_die (type);
7004 return mod_type_die;
7006 /* Handle C typedef types. */
7007 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7008 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
7010 tree dtype = TREE_TYPE (TYPE_NAME (type));
7013 /* For a named type, use the typedef. */
7014 gen_type_die (type, context_die);
7015 mod_type_die = lookup_type_die (type);
7018 else if (is_const_type < TYPE_READONLY (dtype)
7019 || is_volatile_type < TYPE_VOLATILE (dtype))
7020 /* cv-unqualified version of named type. Just use the unnamed
7021 type to which it refers. */
7023 = modified_type_die (DECL_ORIGINAL_TYPE (TYPE_NAME (type)),
7024 is_const_type, is_volatile_type,
7026 /* Else cv-qualified version of named type; fall through. */
7032 else if (is_const_type)
7034 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die);
7035 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
7037 else if (is_volatile_type)
7039 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die);
7040 sub_die = modified_type_die (type, 0, 0, context_die);
7042 else if (code == POINTER_TYPE)
7044 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die);
7045 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
7047 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
7049 item_type = TREE_TYPE (type);
7051 else if (code == REFERENCE_TYPE)
7053 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die);
7054 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
7056 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
7058 item_type = TREE_TYPE (type);
7060 else if (is_base_type (type))
7061 mod_type_die = base_type_die (type);
7064 gen_type_die (type, context_die);
7066 /* We have to get the type_main_variant here (and pass that to the
7067 `lookup_type_die' routine) because the ..._TYPE node we have
7068 might simply be a *copy* of some original type node (where the
7069 copy was created to help us keep track of typedef names) and
7070 that copy might have a different TYPE_UID from the original
7072 mod_type_die = lookup_type_die (type_main_variant (type));
7073 if (mod_type_die == NULL)
7078 equate_type_number_to_die (type, mod_type_die);
7080 /* We must do this after the equate_type_number_to_die call, in case
7081 this is a recursive type. This ensures that the modified_type_die
7082 recursion will terminate even if the type is recursive. Recursive
7083 types are possible in Ada. */
7084 sub_die = modified_type_die (item_type,
7085 TYPE_READONLY (item_type),
7086 TYPE_VOLATILE (item_type),
7089 if (sub_die != NULL)
7090 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
7092 return mod_type_die;
7095 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
7096 an enumerated type. */
7102 return TREE_CODE (type) == ENUMERAL_TYPE;
7105 /* Return the register number described by a given RTL node. */
7111 register unsigned regno = REGNO (rtl);
7113 if (regno >= FIRST_PSEUDO_REGISTER)
7115 warning ("internal regno botch: regno = %d\n", regno);
7119 regno = DBX_REGISTER_NUMBER (regno);
7123 /* Return a location descriptor that designates a machine register. */
7125 static dw_loc_descr_ref
7126 reg_loc_descriptor (rtl)
7129 register dw_loc_descr_ref loc_result = NULL;
7130 register unsigned reg = reg_number (rtl);
7133 loc_result = new_loc_descr (DW_OP_reg0 + reg, 0, 0);
7135 loc_result = new_loc_descr (DW_OP_regx, reg, 0);
7140 /* Return a location descriptor that designates a base+offset location. */
7142 static dw_loc_descr_ref
7143 based_loc_descr (reg, offset)
7147 register dw_loc_descr_ref loc_result;
7148 /* For the "frame base", we use the frame pointer or stack pointer
7149 registers, since the RTL for local variables is relative to one of
7151 register unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed
7152 ? HARD_FRAME_POINTER_REGNUM
7153 : STACK_POINTER_REGNUM);
7156 loc_result = new_loc_descr (DW_OP_fbreg, offset, 0);
7158 loc_result = new_loc_descr (DW_OP_breg0 + reg, offset, 0);
7160 loc_result = new_loc_descr (DW_OP_bregx, reg, offset);
7165 /* Return true if this RTL expression describes a base+offset calculation. */
7171 return (GET_CODE (rtl) == PLUS
7172 && ((GET_CODE (XEXP (rtl, 0)) == REG
7173 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
7176 /* The following routine converts the RTL for a variable or parameter
7177 (resident in memory) into an equivalent Dwarf representation of a
7178 mechanism for getting the address of that same variable onto the top of a
7179 hypothetical "address evaluation" stack.
7181 When creating memory location descriptors, we are effectively transforming
7182 the RTL for a memory-resident object into its Dwarf postfix expression
7183 equivalent. This routine recursively descends an RTL tree, turning
7184 it into Dwarf postfix code as it goes.
7186 MODE is the mode of the memory reference, needed to handle some
7187 autoincrement addressing modes. */
7189 static dw_loc_descr_ref
7190 mem_loc_descriptor (rtl, mode)
7192 enum machine_mode mode;
7194 dw_loc_descr_ref mem_loc_result = NULL;
7195 /* Note that for a dynamically sized array, the location we will generate a
7196 description of here will be the lowest numbered location which is
7197 actually within the array. That's *not* necessarily the same as the
7198 zeroth element of the array. */
7200 #ifdef ASM_SIMPLIFY_DWARF_ADDR
7201 rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl);
7204 switch (GET_CODE (rtl))
7208 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
7209 just fall into the SUBREG code. */
7214 /* The case of a subreg may arise when we have a local (register)
7215 variable or a formal (register) parameter which doesn't quite fill
7216 up an entire register. For now, just assume that it is
7217 legitimate to make the Dwarf info refer to the whole register which
7218 contains the given subreg. */
7219 rtl = XEXP (rtl, 0);
7224 /* Whenever a register number forms a part of the description of the
7225 method for calculating the (dynamic) address of a memory resident
7226 object, DWARF rules require the register number be referred to as
7227 a "base register". This distinction is not based in any way upon
7228 what category of register the hardware believes the given register
7229 belongs to. This is strictly DWARF terminology we're dealing with
7230 here. Note that in cases where the location of a memory-resident
7231 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
7232 OP_CONST (0)) the actual DWARF location descriptor that we generate
7233 may just be OP_BASEREG (basereg). This may look deceptively like
7234 the object in question was allocated to a register (rather than in
7235 memory) so DWARF consumers need to be aware of the subtle
7236 distinction between OP_REG and OP_BASEREG. */
7237 mem_loc_result = based_loc_descr (reg_number (rtl), 0);
7241 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
7242 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
7246 /* Some ports can transform a symbol ref into a label ref, because
7247 the symbol ref is too far away and has to be dumped into a constant
7251 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
7252 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
7253 mem_loc_result->dw_loc_oprnd1.v.val_addr = save_rtx (rtl);
7258 /* Turn these into a PLUS expression and fall into the PLUS code
7260 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
7261 GEN_INT (GET_CODE (rtl) == PRE_INC
7262 ? GET_MODE_UNIT_SIZE (mode)
7263 : -GET_MODE_UNIT_SIZE (mode)));
7268 if (is_based_loc (rtl))
7269 mem_loc_result = based_loc_descr (reg_number (XEXP (rtl, 0)),
7270 INTVAL (XEXP (rtl, 1)));
7273 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 0),
7275 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 1),
7277 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_plus, 0, 0));
7282 /* If a pseudo-reg is optimized away, it is possible for it to
7283 be replaced with a MEM containing a multiply. */
7284 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 0), mode));
7285 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 1), mode));
7286 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
7290 mem_loc_result = new_loc_descr (DW_OP_constu, INTVAL (rtl), 0);
7297 return mem_loc_result;
7300 /* Return a descriptor that describes the concatenation of two locations.
7301 This is typically a complex variable. */
7303 static dw_loc_descr_ref
7304 concat_loc_descriptor (x0, x1)
7305 register rtx x0, x1;
7307 dw_loc_descr_ref cc_loc_result = NULL;
7309 if (!is_pseudo_reg (x0)
7310 && (GET_CODE (x0) != MEM || !is_pseudo_reg (XEXP (x0, 0))))
7311 add_loc_descr (&cc_loc_result, loc_descriptor (x0));
7312 add_loc_descr (&cc_loc_result,
7313 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x0)), 0));
7315 if (!is_pseudo_reg (x1)
7316 && (GET_CODE (x1) != MEM || !is_pseudo_reg (XEXP (x1, 0))))
7317 add_loc_descr (&cc_loc_result, loc_descriptor (x1));
7318 add_loc_descr (&cc_loc_result,
7319 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x1)), 0));
7321 return cc_loc_result;
7324 /* Output a proper Dwarf location descriptor for a variable or parameter
7325 which is either allocated in a register or in a memory location. For a
7326 register, we just generate an OP_REG and the register number. For a
7327 memory location we provide a Dwarf postfix expression describing how to
7328 generate the (dynamic) address of the object onto the address stack. */
7330 static dw_loc_descr_ref
7331 loc_descriptor (rtl)
7334 dw_loc_descr_ref loc_result = NULL;
7335 switch (GET_CODE (rtl))
7338 /* The case of a subreg may arise when we have a local (register)
7339 variable or a formal (register) parameter which doesn't quite fill
7340 up an entire register. For now, just assume that it is
7341 legitimate to make the Dwarf info refer to the whole register which
7342 contains the given subreg. */
7343 rtl = XEXP (rtl, 0);
7348 loc_result = reg_loc_descriptor (rtl);
7352 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
7356 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
7366 /* Given a value, round it up to the lowest multiple of `boundary'
7367 which is not less than the value itself. */
7369 static inline HOST_WIDE_INT
7370 ceiling (value, boundary)
7371 HOST_WIDE_INT value;
7372 unsigned int boundary;
7374 return (((value + boundary - 1) / boundary) * boundary);
7377 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
7378 pointer to the declared type for the relevant field variable, or return
7379 `integer_type_node' if the given node turns out to be an
7388 if (TREE_CODE (decl) == ERROR_MARK)
7389 return integer_type_node;
7391 type = DECL_BIT_FIELD_TYPE (decl);
7392 if (type == NULL_TREE)
7393 type = TREE_TYPE (decl);
7398 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
7399 node, return the alignment in bits for the type, or else return
7400 BITS_PER_WORD if the node actually turns out to be an
7403 static inline unsigned
7404 simple_type_align_in_bits (type)
7407 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
7410 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
7411 node, return the size in bits for the type if it is a constant, or else
7412 return the alignment for the type if the type's size is not constant, or
7413 else return BITS_PER_WORD if the type actually turns out to be an
7416 static inline unsigned HOST_WIDE_INT
7417 simple_type_size_in_bits (type)
7420 if (TREE_CODE (type) == ERROR_MARK)
7421 return BITS_PER_WORD;
7424 register tree type_size_tree = TYPE_SIZE (type);
7426 if (! host_integerp (type_size_tree, 1))
7427 return TYPE_ALIGN (type);
7429 return tree_low_cst (type_size_tree, 1);
7433 /* Given a pointer to what is assumed to be a FIELD_DECL node, compute and
7434 return the byte offset of the lowest addressed byte of the "containing
7435 object" for the given FIELD_DECL, or return 0 if we are unable to
7436 determine what that offset is, either because the argument turns out to
7437 be a pointer to an ERROR_MARK node, or because the offset is actually
7438 variable. (We can't handle the latter case just yet). */
7440 static HOST_WIDE_INT
7441 field_byte_offset (decl)
7444 unsigned int type_align_in_bytes;
7445 unsigned int type_align_in_bits;
7446 unsigned HOST_WIDE_INT type_size_in_bits;
7447 HOST_WIDE_INT object_offset_in_align_units;
7448 HOST_WIDE_INT object_offset_in_bits;
7449 HOST_WIDE_INT object_offset_in_bytes;
7451 tree field_size_tree;
7452 HOST_WIDE_INT bitpos_int;
7453 HOST_WIDE_INT deepest_bitpos;
7454 unsigned HOST_WIDE_INT field_size_in_bits;
7456 if (TREE_CODE (decl) == ERROR_MARK)
7459 if (TREE_CODE (decl) != FIELD_DECL)
7462 type = field_type (decl);
7463 field_size_tree = DECL_SIZE (decl);
7465 /* If there was an error, the size could be zero. */
7466 if (! field_size_tree)
7474 /* We cannot yet cope with fields whose positions are variable, so
7475 for now, when we see such things, we simply return 0. Someday, we may
7476 be able to handle such cases, but it will be damn difficult. */
7477 if (! host_integerp (bit_position (decl), 0))
7480 bitpos_int = int_bit_position (decl);
7482 /* If we don't know the size of the field, pretend it's a full word. */
7483 if (host_integerp (field_size_tree, 1))
7484 field_size_in_bits = tree_low_cst (field_size_tree, 1);
7486 field_size_in_bits = BITS_PER_WORD;
7488 type_size_in_bits = simple_type_size_in_bits (type);
7489 type_align_in_bits = simple_type_align_in_bits (type);
7490 type_align_in_bytes = type_align_in_bits / BITS_PER_UNIT;
7492 /* Note that the GCC front-end doesn't make any attempt to keep track of
7493 the starting bit offset (relative to the start of the containing
7494 structure type) of the hypothetical "containing object" for a bit-
7495 field. Thus, when computing the byte offset value for the start of the
7496 "containing object" of a bit-field, we must deduce this information on
7497 our own. This can be rather tricky to do in some cases. For example,
7498 handling the following structure type definition when compiling for an
7499 i386/i486 target (which only aligns long long's to 32-bit boundaries)
7502 struct S { int field1; long long field2:31; };
7504 Fortunately, there is a simple rule-of-thumb which can be
7505 used in such cases. When compiling for an i386/i486, GCC will allocate
7506 8 bytes for the structure shown above. It decides to do this based upon
7507 one simple rule for bit-field allocation. Quite simply, GCC allocates
7508 each "containing object" for each bit-field at the first (i.e. lowest
7509 addressed) legitimate alignment boundary (based upon the required
7510 minimum alignment for the declared type of the field) which it can
7511 possibly use, subject to the condition that there is still enough
7512 available space remaining in the containing object (when allocated at
7513 the selected point) to fully accommodate all of the bits of the
7514 bit-field itself. This simple rule makes it obvious why GCC allocates
7515 8 bytes for each object of the structure type shown above. When looking
7516 for a place to allocate the "containing object" for `field2', the
7517 compiler simply tries to allocate a 64-bit "containing object" at each
7518 successive 32-bit boundary (starting at zero) until it finds a place to
7519 allocate that 64- bit field such that at least 31 contiguous (and
7520 previously unallocated) bits remain within that selected 64 bit field.
7521 (As it turns out, for the example above, the compiler finds that it is
7522 OK to allocate the "containing object" 64-bit field at bit-offset zero
7523 within the structure type.) Here we attempt to work backwards from the
7524 limited set of facts we're given, and we try to deduce from those facts,
7525 where GCC must have believed that the containing object started (within
7526 the structure type). The value we deduce is then used (by the callers of
7527 this routine) to generate DW_AT_location and DW_AT_bit_offset attributes
7528 for fields (both bit-fields and, in the case of DW_AT_location, regular
7531 /* Figure out the bit-distance from the start of the structure to the
7532 "deepest" bit of the bit-field. */
7533 deepest_bitpos = bitpos_int + field_size_in_bits;
7535 /* This is the tricky part. Use some fancy footwork to deduce where the
7536 lowest addressed bit of the containing object must be. */
7537 object_offset_in_bits
7538 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
7540 /* Compute the offset of the containing object in "alignment units". */
7541 object_offset_in_align_units = object_offset_in_bits / type_align_in_bits;
7543 /* Compute the offset of the containing object in bytes. */
7544 object_offset_in_bytes = object_offset_in_align_units * type_align_in_bytes;
7546 return object_offset_in_bytes;
7549 /* The following routines define various Dwarf attributes and any data
7550 associated with them. */
7552 /* Add a location description attribute value to a DIE.
7554 This emits location attributes suitable for whole variables and
7555 whole parameters. Note that the location attributes for struct fields are
7556 generated by the routine `data_member_location_attribute' below. */
7559 add_AT_location_description (die, attr_kind, rtl)
7561 enum dwarf_attribute attr_kind;
7564 /* Handle a special case. If we are about to output a location descriptor
7565 for a variable or parameter which has been optimized out of existence,
7566 don't do that. A variable which has been optimized out
7567 of existence will have a DECL_RTL value which denotes a pseudo-reg.
7568 Currently, in some rare cases, variables can have DECL_RTL values which
7569 look like (MEM (REG pseudo-reg#)). These cases are due to bugs
7570 elsewhere in the compiler. We treat such cases as if the variable(s) in
7571 question had been optimized out of existence. */
7573 if (is_pseudo_reg (rtl)
7574 || (GET_CODE (rtl) == MEM
7575 && is_pseudo_reg (XEXP (rtl, 0)))
7576 /* This can happen for a PARM_DECL with a DECL_INCOMING_RTL which
7577 references the internal argument pointer (a pseudo) in a function
7578 where all references to the internal argument pointer were
7579 eliminated via the optimizers. */
7580 || (GET_CODE (rtl) == MEM
7581 && GET_CODE (XEXP (rtl, 0)) == PLUS
7582 && is_pseudo_reg (XEXP (XEXP (rtl, 0), 0)))
7583 || (GET_CODE (rtl) == CONCAT
7584 && is_pseudo_reg (XEXP (rtl, 0))
7585 && is_pseudo_reg (XEXP (rtl, 1))))
7588 add_AT_loc (die, attr_kind, loc_descriptor (rtl));
7591 /* Attach the specialized form of location attribute used for data
7592 members of struct and union types. In the special case of a
7593 FIELD_DECL node which represents a bit-field, the "offset" part
7594 of this special location descriptor must indicate the distance
7595 in bytes from the lowest-addressed byte of the containing struct
7596 or union type to the lowest-addressed byte of the "containing
7597 object" for the bit-field. (See the `field_byte_offset' function
7598 above).. For any given bit-field, the "containing object" is a
7599 hypothetical object (of some integral or enum type) within which
7600 the given bit-field lives. The type of this hypothetical
7601 "containing object" is always the same as the declared type of
7602 the individual bit-field itself (for GCC anyway... the DWARF
7603 spec doesn't actually mandate this). Note that it is the size
7604 (in bytes) of the hypothetical "containing object" which will
7605 be given in the DW_AT_byte_size attribute for this bit-field.
7606 (See the `byte_size_attribute' function below.) It is also used
7607 when calculating the value of the DW_AT_bit_offset attribute.
7608 (See the `bit_offset_attribute' function below). */
7611 add_data_member_location_attribute (die, decl)
7612 register dw_die_ref die;
7615 register unsigned long offset;
7616 register dw_loc_descr_ref loc_descr;
7617 register enum dwarf_location_atom op;
7619 if (TREE_CODE (decl) == TREE_VEC)
7620 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
7622 offset = field_byte_offset (decl);
7624 /* The DWARF2 standard says that we should assume that the structure address
7625 is already on the stack, so we can specify a structure field address
7626 by using DW_OP_plus_uconst. */
7628 #ifdef MIPS_DEBUGGING_INFO
7629 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst operator
7630 correctly. It works only if we leave the offset on the stack. */
7633 op = DW_OP_plus_uconst;
7636 loc_descr = new_loc_descr (op, offset, 0);
7637 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
7640 /* Attach an DW_AT_const_value attribute for a variable or a parameter which
7641 does not have a "location" either in memory or in a register. These
7642 things can arise in GNU C when a constant is passed as an actual parameter
7643 to an inlined function. They can also arise in C++ where declared
7644 constants do not necessarily get memory "homes". */
7647 add_const_value_attribute (die, rtl)
7648 register dw_die_ref die;
7651 switch (GET_CODE (rtl))
7654 /* Note that a CONST_INT rtx could represent either an integer or a
7655 floating-point constant. A CONST_INT is used whenever the constant
7656 will fit into a single word. In all such cases, the original mode
7657 of the constant value is wiped out, and the CONST_INT rtx is
7658 assigned VOIDmode. */
7659 add_AT_unsigned (die, DW_AT_const_value, (unsigned) INTVAL (rtl));
7663 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
7664 floating-point constant. A CONST_DOUBLE is used whenever the
7665 constant requires more than one word in order to be adequately
7666 represented. We output CONST_DOUBLEs as blocks. */
7668 register enum machine_mode mode = GET_MODE (rtl);
7670 if (GET_MODE_CLASS (mode) == MODE_FLOAT)
7672 register unsigned length = GET_MODE_SIZE (mode) / sizeof (long);
7676 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
7680 REAL_VALUE_TO_TARGET_SINGLE (rv, array[0]);
7684 REAL_VALUE_TO_TARGET_DOUBLE (rv, array);
7689 REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, array);
7696 add_AT_float (die, DW_AT_const_value, length, array);
7699 add_AT_long_long (die, DW_AT_const_value,
7700 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
7705 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
7711 add_AT_addr (die, DW_AT_const_value, save_rtx (rtl));
7715 /* In cases where an inlined instance of an inline function is passed
7716 the address of an `auto' variable (which is local to the caller) we
7717 can get a situation where the DECL_RTL of the artificial local
7718 variable (for the inlining) which acts as a stand-in for the
7719 corresponding formal parameter (of the inline function) will look
7720 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
7721 exactly a compile-time constant expression, but it isn't the address
7722 of the (artificial) local variable either. Rather, it represents the
7723 *value* which the artificial local variable always has during its
7724 lifetime. We currently have no way to represent such quasi-constant
7725 values in Dwarf, so for now we just punt and generate nothing. */
7729 /* No other kinds of rtx should be possible here. */
7735 /* Generate *either* an DW_AT_location attribute or else an DW_AT_const_value
7736 data attribute for a variable or a parameter. We generate the
7737 DW_AT_const_value attribute only in those cases where the given variable
7738 or parameter does not have a true "location" either in memory or in a
7739 register. This can happen (for example) when a constant is passed as an
7740 actual argument in a call to an inline function. (It's possible that
7741 these things can crop up in other ways also.) Note that one type of
7742 constant value which can be passed into an inlined function is a constant
7743 pointer. This can happen for example if an actual argument in an inlined
7744 function call evaluates to a compile-time constant address. */
7747 add_location_or_const_value_attribute (die, decl)
7748 register dw_die_ref die;
7752 register tree declared_type;
7753 register tree passed_type;
7755 if (TREE_CODE (decl) == ERROR_MARK)
7758 if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL)
7761 /* Here we have to decide where we are going to say the parameter "lives"
7762 (as far as the debugger is concerned). We only have a couple of
7763 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
7765 DECL_RTL normally indicates where the parameter lives during most of the
7766 activation of the function. If optimization is enabled however, this
7767 could be either NULL or else a pseudo-reg. Both of those cases indicate
7768 that the parameter doesn't really live anywhere (as far as the code
7769 generation parts of GCC are concerned) during most of the function's
7770 activation. That will happen (for example) if the parameter is never
7771 referenced within the function.
7773 We could just generate a location descriptor here for all non-NULL
7774 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
7775 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
7776 where DECL_RTL is NULL or is a pseudo-reg.
7778 Note however that we can only get away with using DECL_INCOMING_RTL as
7779 a backup substitute for DECL_RTL in certain limited cases. In cases
7780 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
7781 we can be sure that the parameter was passed using the same type as it is
7782 declared to have within the function, and that its DECL_INCOMING_RTL
7783 points us to a place where a value of that type is passed.
7785 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
7786 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
7787 because in these cases DECL_INCOMING_RTL points us to a value of some
7788 type which is *different* from the type of the parameter itself. Thus,
7789 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
7790 such cases, the debugger would end up (for example) trying to fetch a
7791 `float' from a place which actually contains the first part of a
7792 `double'. That would lead to really incorrect and confusing
7793 output at debug-time.
7795 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
7796 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
7797 are a couple of exceptions however. On little-endian machines we can
7798 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
7799 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
7800 an integral type that is smaller than TREE_TYPE (decl). These cases arise
7801 when (on a little-endian machine) a non-prototyped function has a
7802 parameter declared to be of type `short' or `char'. In such cases,
7803 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
7804 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
7805 passed `int' value. If the debugger then uses that address to fetch
7806 a `short' or a `char' (on a little-endian machine) the result will be
7807 the correct data, so we allow for such exceptional cases below.
7809 Note that our goal here is to describe the place where the given formal
7810 parameter lives during most of the function's activation (i.e. between
7811 the end of the prologue and the start of the epilogue). We'll do that
7812 as best as we can. Note however that if the given formal parameter is
7813 modified sometime during the execution of the function, then a stack
7814 backtrace (at debug-time) will show the function as having been
7815 called with the *new* value rather than the value which was
7816 originally passed in. This happens rarely enough that it is not
7817 a major problem, but it *is* a problem, and I'd like to fix it.
7819 A future version of dwarf2out.c may generate two additional
7820 attributes for any given DW_TAG_formal_parameter DIE which will
7821 describe the "passed type" and the "passed location" for the
7822 given formal parameter in addition to the attributes we now
7823 generate to indicate the "declared type" and the "active
7824 location" for each parameter. This additional set of attributes
7825 could be used by debuggers for stack backtraces. Separately, note
7826 that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be
7827 NULL also. This happens (for example) for inlined-instances of
7828 inline function formal parameters which are never referenced.
7829 This really shouldn't be happening. All PARM_DECL nodes should
7830 get valid non-NULL DECL_INCOMING_RTL values, but integrate.c
7831 doesn't currently generate these values for inlined instances of
7832 inline function parameters, so when we see such cases, we are
7833 just out-of-luck for the time being (until integrate.c
7836 /* Use DECL_RTL as the "location" unless we find something better. */
7837 rtl = DECL_RTL (decl);
7839 if (TREE_CODE (decl) == PARM_DECL)
7841 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
7843 declared_type = type_main_variant (TREE_TYPE (decl));
7844 passed_type = type_main_variant (DECL_ARG_TYPE (decl));
7846 /* This decl represents a formal parameter which was optimized out.
7847 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
7848 all* cases where (rtl == NULL_RTX) just below. */
7849 if (declared_type == passed_type)
7850 rtl = DECL_INCOMING_RTL (decl);
7851 else if (! BYTES_BIG_ENDIAN
7852 && TREE_CODE (declared_type) == INTEGER_TYPE
7853 && (GET_MODE_SIZE (TYPE_MODE (declared_type))
7854 <= GET_MODE_SIZE (TYPE_MODE (passed_type))))
7855 rtl = DECL_INCOMING_RTL (decl);
7858 /* If the parm was passed in registers, but lives on the stack, then
7859 make a big endian correction if the mode of the type of the
7860 parameter is not the same as the mode of the rtl. */
7861 /* ??? This is the same series of checks that are made in dbxout.c before
7862 we reach the big endian correction code there. It isn't clear if all
7863 of these checks are necessary here, but keeping them all is the safe
7865 else if (GET_CODE (rtl) == MEM
7866 && XEXP (rtl, 0) != const0_rtx
7867 && ! CONSTANT_P (XEXP (rtl, 0))
7868 /* Not passed in memory. */
7869 && GET_CODE (DECL_INCOMING_RTL (decl)) != MEM
7870 /* Not passed by invisible reference. */
7871 && (GET_CODE (XEXP (rtl, 0)) != REG
7872 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
7873 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
7874 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
7875 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
7878 /* Big endian correction check. */
7880 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
7881 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
7884 int offset = (UNITS_PER_WORD
7885 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
7886 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
7887 plus_constant (XEXP (rtl, 0), offset));
7891 if (rtl == NULL_RTX)
7894 rtl = eliminate_regs (rtl, 0, NULL_RTX);
7895 #ifdef LEAF_REG_REMAP
7896 if (current_function_uses_only_leaf_regs)
7897 leaf_renumber_regs_insn (rtl);
7900 switch (GET_CODE (rtl))
7903 /* The address of a variable that was optimized away; don't emit
7914 /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
7915 add_const_value_attribute (die, rtl);
7922 add_AT_location_description (die, DW_AT_location, rtl);
7930 /* Generate an DW_AT_name attribute given some string value to be included as
7931 the value of the attribute. */
7934 add_name_attribute (die, name_string)
7935 register dw_die_ref die;
7936 register const char *name_string;
7938 if (name_string != NULL && *name_string != 0)
7940 if (demangle_name_func)
7941 name_string = (*demangle_name_func) (name_string);
7943 add_AT_string (die, DW_AT_name, name_string);
7947 /* Given a tree node describing an array bound (either lower or upper) output
7948 a representation for that bound. */
7951 add_bound_info (subrange_die, bound_attr, bound)
7952 register dw_die_ref subrange_die;
7953 register enum dwarf_attribute bound_attr;
7954 register tree bound;
7956 /* If this is an Ada unconstrained array type, then don't emit any debug
7957 info because the array bounds are unknown. They are parameterized when
7958 the type is instantiated. */
7959 if (contains_placeholder_p (bound))
7962 switch (TREE_CODE (bound))
7967 /* All fixed-bounds are represented by INTEGER_CST nodes. */
7969 if (! host_integerp (bound, 0)
7970 || (bound_attr == DW_AT_lower_bound
7971 && (((is_c_family () || is_java ()) && integer_zerop (bound))
7972 || (is_fortran () && integer_onep (bound)))))
7973 /* use the default */
7976 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
7981 case NON_LVALUE_EXPR:
7982 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
7986 /* If optimization is turned on, the SAVE_EXPRs that describe how to
7987 access the upper bound values may be bogus. If they refer to a
7988 register, they may only describe how to get at these values at the
7989 points in the generated code right after they have just been
7990 computed. Worse yet, in the typical case, the upper bound values
7991 will not even *be* computed in the optimized code (though the
7992 number of elements will), so these SAVE_EXPRs are entirely
7993 bogus. In order to compensate for this fact, we check here to see
7994 if optimization is enabled, and if so, we don't add an attribute
7995 for the (unknown and unknowable) upper bound. This should not
7996 cause too much trouble for existing (stupid?) debuggers because
7997 they have to deal with empty upper bounds location descriptions
7998 anyway in order to be able to deal with incomplete array types.
7999 Of course an intelligent debugger (GDB?) should be able to
8000 comprehend that a missing upper bound specification in a array
8001 type used for a storage class `auto' local array variable
8002 indicates that the upper bound is both unknown (at compile- time)
8003 and unknowable (at run-time) due to optimization.
8005 We assume that a MEM rtx is safe because gcc wouldn't put the
8006 value there unless it was going to be used repeatedly in the
8007 function, i.e. for cleanups. */
8008 if (! optimize || (SAVE_EXPR_RTL (bound)
8009 && GET_CODE (SAVE_EXPR_RTL (bound)) == MEM))
8011 register dw_die_ref ctx = lookup_decl_die (current_function_decl);
8012 register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx);
8013 register rtx loc = SAVE_EXPR_RTL (bound);
8015 /* If the RTL for the SAVE_EXPR is memory, handle the case where
8016 it references an outer function's frame. */
8018 if (GET_CODE (loc) == MEM)
8020 rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
8022 if (XEXP (loc, 0) != new_addr)
8023 loc = gen_rtx_MEM (GET_MODE (loc), new_addr);
8026 add_AT_flag (decl_die, DW_AT_artificial, 1);
8027 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
8028 add_AT_location_description (decl_die, DW_AT_location, loc);
8029 add_AT_die_ref (subrange_die, bound_attr, decl_die);
8032 /* Else leave out the attribute. */
8038 /* ??? These types of bounds can be created by the Ada front end,
8039 and it isn't clear how to emit debug info for them. */
8047 /* Note that the block of subscript information for an array type also
8048 includes information about the element type of type given array type. */
8051 add_subscript_info (type_die, type)
8052 register dw_die_ref type_die;
8055 #ifndef MIPS_DEBUGGING_INFO
8056 register unsigned dimension_number;
8058 register tree lower, upper;
8059 register dw_die_ref subrange_die;
8061 /* The GNU compilers represent multidimensional array types as sequences of
8062 one dimensional array types whose element types are themselves array
8063 types. Here we squish that down, so that each multidimensional array
8064 type gets only one array_type DIE in the Dwarf debugging info. The draft
8065 Dwarf specification say that we are allowed to do this kind of
8066 compression in C (because there is no difference between an array or
8067 arrays and a multidimensional array in C) but for other source languages
8068 (e.g. Ada) we probably shouldn't do this. */
8070 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
8071 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
8072 We work around this by disabling this feature. See also
8073 gen_array_type_die. */
8074 #ifndef MIPS_DEBUGGING_INFO
8075 for (dimension_number = 0;
8076 TREE_CODE (type) == ARRAY_TYPE;
8077 type = TREE_TYPE (type), dimension_number++)
8080 register tree domain = TYPE_DOMAIN (type);
8082 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
8083 and (in GNU C only) variable bounds. Handle all three forms
8085 subrange_die = new_die (DW_TAG_subrange_type, type_die);
8088 /* We have an array type with specified bounds. */
8089 lower = TYPE_MIN_VALUE (domain);
8090 upper = TYPE_MAX_VALUE (domain);
8092 /* define the index type. */
8093 if (TREE_TYPE (domain))
8095 /* ??? This is probably an Ada unnamed subrange type. Ignore the
8096 TREE_TYPE field. We can't emit debug info for this
8097 because it is an unnamed integral type. */
8098 if (TREE_CODE (domain) == INTEGER_TYPE
8099 && TYPE_NAME (domain) == NULL_TREE
8100 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
8101 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
8104 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
8108 /* ??? If upper is NULL, the array has unspecified length,
8109 but it does have a lower bound. This happens with Fortran
8111 Since the debugger is definitely going to need to know N
8112 to produce useful results, go ahead and output the lower
8113 bound solo, and hope the debugger can cope. */
8115 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
8117 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
8120 /* We have an array type with an unspecified length. The DWARF-2
8121 spec does not say how to handle this; let's just leave out the
8125 #ifndef MIPS_DEBUGGING_INFO
8131 add_byte_size_attribute (die, tree_node)
8133 register tree tree_node;
8135 register unsigned size;
8137 switch (TREE_CODE (tree_node))
8145 case QUAL_UNION_TYPE:
8146 size = int_size_in_bytes (tree_node);
8149 /* For a data member of a struct or union, the DW_AT_byte_size is
8150 generally given as the number of bytes normally allocated for an
8151 object of the *declared* type of the member itself. This is true
8152 even for bit-fields. */
8153 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
8159 /* Note that `size' might be -1 when we get to this point. If it is, that
8160 indicates that the byte size of the entity in question is variable. We
8161 have no good way of expressing this fact in Dwarf at the present time,
8162 so just let the -1 pass on through. */
8164 add_AT_unsigned (die, DW_AT_byte_size, size);
8167 /* For a FIELD_DECL node which represents a bit-field, output an attribute
8168 which specifies the distance in bits from the highest order bit of the
8169 "containing object" for the bit-field to the highest order bit of the
8172 For any given bit-field, the "containing object" is a hypothetical
8173 object (of some integral or enum type) within which the given bit-field
8174 lives. The type of this hypothetical "containing object" is always the
8175 same as the declared type of the individual bit-field itself. The
8176 determination of the exact location of the "containing object" for a
8177 bit-field is rather complicated. It's handled by the
8178 `field_byte_offset' function (above).
8180 Note that it is the size (in bytes) of the hypothetical "containing object"
8181 which will be given in the DW_AT_byte_size attribute for this bit-field.
8182 (See `byte_size_attribute' above). */
8185 add_bit_offset_attribute (die, decl)
8186 register dw_die_ref die;
8189 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
8190 tree type = DECL_BIT_FIELD_TYPE (decl);
8191 HOST_WIDE_INT bitpos_int;
8192 HOST_WIDE_INT highest_order_object_bit_offset;
8193 HOST_WIDE_INT highest_order_field_bit_offset;
8194 HOST_WIDE_INT unsigned bit_offset;
8196 /* Must be a field and a bit field. */
8198 || TREE_CODE (decl) != FIELD_DECL)
8201 /* We can't yet handle bit-fields whose offsets are variable, so if we
8202 encounter such things, just return without generating any attribute
8203 whatsoever. Likewise for variable or too large size. */
8204 if (! host_integerp (bit_position (decl), 0)
8205 || ! host_integerp (DECL_SIZE (decl), 1))
8208 bitpos_int = int_bit_position (decl);
8210 /* Note that the bit offset is always the distance (in bits) from the
8211 highest-order bit of the "containing object" to the highest-order bit of
8212 the bit-field itself. Since the "high-order end" of any object or field
8213 is different on big-endian and little-endian machines, the computation
8214 below must take account of these differences. */
8215 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
8216 highest_order_field_bit_offset = bitpos_int;
8218 if (! BYTES_BIG_ENDIAN)
8220 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
8221 highest_order_object_bit_offset += simple_type_size_in_bits (type);
8225 = (! BYTES_BIG_ENDIAN
8226 ? highest_order_object_bit_offset - highest_order_field_bit_offset
8227 : highest_order_field_bit_offset - highest_order_object_bit_offset);
8229 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
8232 /* For a FIELD_DECL node which represents a bit field, output an attribute
8233 which specifies the length in bits of the given field. */
8236 add_bit_size_attribute (die, decl)
8237 register dw_die_ref die;
8240 /* Must be a field and a bit field. */
8241 if (TREE_CODE (decl) != FIELD_DECL
8242 || ! DECL_BIT_FIELD_TYPE (decl))
8245 if (host_integerp (DECL_SIZE (decl), 1))
8246 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
8249 /* If the compiled language is ANSI C, then add a 'prototyped'
8250 attribute, if arg types are given for the parameters of a function. */
8253 add_prototyped_attribute (die, func_type)
8254 register dw_die_ref die;
8255 register tree func_type;
8257 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
8258 && TYPE_ARG_TYPES (func_type) != NULL)
8259 add_AT_flag (die, DW_AT_prototyped, 1);
8262 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
8263 by looking in either the type declaration or object declaration
8267 add_abstract_origin_attribute (die, origin)
8268 register dw_die_ref die;
8269 register tree origin;
8271 dw_die_ref origin_die = NULL;
8273 if (TREE_CODE (origin) != FUNCTION_DECL)
8275 /* We may have gotten separated from the block for the inlined
8276 function, if we're in an exception handler or some such; make
8277 sure that the abstract function has been written out.
8279 Doing this for nested functions is wrong, however; functions are
8280 distinct units, and our context might not even be inline. */
8283 fn = TYPE_STUB_DECL (fn);
8284 fn = decl_function_context (fn);
8286 gen_abstract_function (fn);
8289 if (DECL_P (origin))
8290 origin_die = lookup_decl_die (origin);
8291 else if (TYPE_P (origin))
8292 origin_die = lookup_type_die (origin);
8294 if (origin_die == NULL)
8297 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
8300 /* We do not currently support the pure_virtual attribute. */
8303 add_pure_or_virtual_attribute (die, func_decl)
8304 register dw_die_ref die;
8305 register tree func_decl;
8307 if (DECL_VINDEX (func_decl))
8309 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
8311 if (host_integerp (DECL_VINDEX (func_decl), 0))
8312 add_AT_loc (die, DW_AT_vtable_elem_location,
8313 new_loc_descr (DW_OP_constu,
8314 tree_low_cst (DECL_VINDEX (func_decl), 0),
8317 /* GNU extension: Record what type this method came from originally. */
8318 if (debug_info_level > DINFO_LEVEL_TERSE)
8319 add_AT_die_ref (die, DW_AT_containing_type,
8320 lookup_type_die (DECL_CONTEXT (func_decl)));
8324 /* Add source coordinate attributes for the given decl. */
8327 add_src_coords_attributes (die, decl)
8328 register dw_die_ref die;
8331 register unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
8333 add_AT_unsigned (die, DW_AT_decl_file, file_index);
8334 add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
8337 /* Add an DW_AT_name attribute and source coordinate attribute for the
8338 given decl, but only if it actually has a name. */
8341 add_name_and_src_coords_attributes (die, decl)
8342 register dw_die_ref die;
8345 register tree decl_name;
8347 decl_name = DECL_NAME (decl);
8348 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
8350 add_name_attribute (die, dwarf2_name (decl, 0));
8351 if (! DECL_ARTIFICIAL (decl))
8352 add_src_coords_attributes (die, decl);
8354 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
8355 && TREE_PUBLIC (decl)
8356 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
8357 add_AT_string (die, DW_AT_MIPS_linkage_name,
8358 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
8362 /* Push a new declaration scope. */
8365 push_decl_scope (scope)
8368 /* Make room in the decl_scope_table, if necessary. */
8369 if (decl_scope_table_allocated == decl_scope_depth)
8371 decl_scope_table_allocated += DECL_SCOPE_TABLE_INCREMENT;
8373 = (tree *) xrealloc (decl_scope_table,
8374 decl_scope_table_allocated * sizeof (tree));
8377 decl_scope_table[decl_scope_depth] = scope;
8381 /* Pop a declaration scope. */
8385 if (decl_scope_depth <= 0)
8390 /* Return the DIE for the scope that immediately contains this type.
8391 Non-named types get global scope. Named types nested in other
8392 types get their containing scope if it's open, or global scope
8393 otherwise. All other types (i.e. function-local named types) get
8394 the current active scope. */
8397 scope_die_for (t, context_die)
8399 register dw_die_ref context_die;
8401 register dw_die_ref scope_die = NULL;
8402 register tree containing_scope;
8405 /* Non-types always go in the current scope. */
8409 containing_scope = TYPE_CONTEXT (t);
8411 /* Ignore namespaces for the moment. */
8412 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
8413 containing_scope = NULL_TREE;
8415 /* Ignore function type "scopes" from the C frontend. They mean that
8416 a tagged type is local to a parmlist of a function declarator, but
8417 that isn't useful to DWARF. */
8418 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
8419 containing_scope = NULL_TREE;
8421 if (containing_scope == NULL_TREE)
8422 scope_die = comp_unit_die;
8423 else if (TYPE_P (containing_scope))
8425 /* For types, we can just look up the appropriate DIE. But
8426 first we check to see if we're in the middle of emitting it
8427 so we know where the new DIE should go. */
8429 for (i = decl_scope_depth - 1; i >= 0; --i)
8430 if (decl_scope_table[i] == containing_scope)
8435 if (debug_info_level > DINFO_LEVEL_TERSE
8436 && !TREE_ASM_WRITTEN (containing_scope))
8439 /* If none of the current dies are suitable, we get file scope. */
8440 scope_die = comp_unit_die;
8443 scope_die = lookup_type_die (containing_scope);
8446 scope_die = context_die;
8451 /* Returns nonzero iff CONTEXT_DIE is internal to a function. */
8453 static inline int local_scope_p PARAMS ((dw_die_ref));
8455 local_scope_p (context_die)
8456 dw_die_ref context_die;
8458 for (; context_die; context_die = context_die->die_parent)
8459 if (context_die->die_tag == DW_TAG_inlined_subroutine
8460 || context_die->die_tag == DW_TAG_subprogram)
8465 /* Returns nonzero iff CONTEXT_DIE is a class. */
8467 static inline int class_scope_p PARAMS ((dw_die_ref));
8469 class_scope_p (context_die)
8470 dw_die_ref context_die;
8473 && (context_die->die_tag == DW_TAG_structure_type
8474 || context_die->die_tag == DW_TAG_union_type));
8477 /* Many forms of DIEs require a "type description" attribute. This
8478 routine locates the proper "type descriptor" die for the type given
8479 by 'type', and adds an DW_AT_type attribute below the given die. */
8482 add_type_attribute (object_die, type, decl_const, decl_volatile, context_die)
8483 register dw_die_ref object_die;
8485 register int decl_const;
8486 register int decl_volatile;
8487 register dw_die_ref context_die;
8489 register enum tree_code code = TREE_CODE (type);
8490 register dw_die_ref type_die = NULL;
8492 /* ??? If this type is an unnamed subrange type of an integral or
8493 floating-point type, use the inner type. This is because we have no
8494 support for unnamed types in base_type_die. This can happen if this is
8495 an Ada subrange type. Correct solution is emit a subrange type die. */
8496 if ((code == INTEGER_TYPE || code == REAL_TYPE)
8497 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
8498 type = TREE_TYPE (type), code = TREE_CODE (type);
8500 if (code == ERROR_MARK)
8503 /* Handle a special case. For functions whose return type is void, we
8504 generate *no* type attribute. (Note that no object may have type
8505 `void', so this only applies to function return types). */
8506 if (code == VOID_TYPE)
8509 type_die = modified_type_die (type,
8510 decl_const || TYPE_READONLY (type),
8511 decl_volatile || TYPE_VOLATILE (type),
8513 if (type_die != NULL)
8514 add_AT_die_ref (object_die, DW_AT_type, type_die);
8517 /* Given a tree pointer to a struct, class, union, or enum type node, return
8518 a pointer to the (string) tag name for the given type, or zero if the type
8519 was declared without a tag. */
8525 register const char *name = 0;
8527 if (TYPE_NAME (type) != 0)
8529 register tree t = 0;
8531 /* Find the IDENTIFIER_NODE for the type name. */
8532 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
8533 t = TYPE_NAME (type);
8535 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
8536 a TYPE_DECL node, regardless of whether or not a `typedef' was
8538 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
8539 && ! DECL_IGNORED_P (TYPE_NAME (type)))
8540 t = DECL_NAME (TYPE_NAME (type));
8542 /* Now get the name as a string, or invent one. */
8544 name = IDENTIFIER_POINTER (t);
8547 return (name == 0 || *name == '\0') ? 0 : name;
8550 /* Return the type associated with a data member, make a special check
8551 for bit field types. */
8554 member_declared_type (member)
8555 register tree member;
8557 return (DECL_BIT_FIELD_TYPE (member)
8558 ? DECL_BIT_FIELD_TYPE (member)
8559 : TREE_TYPE (member));
8562 /* Get the decl's label, as described by its RTL. This may be different
8563 from the DECL_NAME name used in the source file. */
8567 decl_start_label (decl)
8572 x = DECL_RTL (decl);
8573 if (GET_CODE (x) != MEM)
8577 if (GET_CODE (x) != SYMBOL_REF)
8580 fnname = XSTR (x, 0);
8585 /* These routines generate the internal representation of the DIE's for
8586 the compilation unit. Debugging information is collected by walking
8587 the declaration trees passed in from dwarf2out_decl(). */
8590 gen_array_type_die (type, context_die)
8592 register dw_die_ref context_die;
8594 register dw_die_ref scope_die = scope_die_for (type, context_die);
8595 register dw_die_ref array_die;
8596 register tree element_type;
8598 /* ??? The SGI dwarf reader fails for array of array of enum types unless
8599 the inner array type comes before the outer array type. Thus we must
8600 call gen_type_die before we call new_die. See below also. */
8601 #ifdef MIPS_DEBUGGING_INFO
8602 gen_type_die (TREE_TYPE (type), context_die);
8605 array_die = new_die (DW_TAG_array_type, scope_die);
8608 /* We default the array ordering. SDB will probably do
8609 the right things even if DW_AT_ordering is not present. It's not even
8610 an issue until we start to get into multidimensional arrays anyway. If
8611 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
8612 then we'll have to put the DW_AT_ordering attribute back in. (But if
8613 and when we find out that we need to put these in, we will only do so
8614 for multidimensional arrays. */
8615 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
8618 #ifdef MIPS_DEBUGGING_INFO
8619 /* The SGI compilers handle arrays of unknown bound by setting
8620 AT_declaration and not emitting any subrange DIEs. */
8621 if (! TYPE_DOMAIN (type))
8622 add_AT_unsigned (array_die, DW_AT_declaration, 1);
8625 add_subscript_info (array_die, type);
8627 add_name_attribute (array_die, type_tag (type));
8628 equate_type_number_to_die (type, array_die);
8630 /* Add representation of the type of the elements of this array type. */
8631 element_type = TREE_TYPE (type);
8633 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
8634 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
8635 We work around this by disabling this feature. See also
8636 add_subscript_info. */
8637 #ifndef MIPS_DEBUGGING_INFO
8638 while (TREE_CODE (element_type) == ARRAY_TYPE)
8639 element_type = TREE_TYPE (element_type);
8641 gen_type_die (element_type, context_die);
8644 add_type_attribute (array_die, element_type, 0, 0, context_die);
8648 gen_set_type_die (type, context_die)
8650 register dw_die_ref context_die;
8652 register dw_die_ref type_die
8653 = new_die (DW_TAG_set_type, scope_die_for (type, context_die));
8655 equate_type_number_to_die (type, type_die);
8656 add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die);
8661 gen_entry_point_die (decl, context_die)
8663 register dw_die_ref context_die;
8665 register tree origin = decl_ultimate_origin (decl);
8666 register dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die);
8668 add_abstract_origin_attribute (decl_die, origin);
8671 add_name_and_src_coords_attributes (decl_die, decl);
8672 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
8676 if (DECL_ABSTRACT (decl))
8677 equate_decl_number_to_die (decl, decl_die);
8679 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
8683 /* Remember a type in the incomplete_types_list. */
8686 add_incomplete_type (type)
8689 if (incomplete_types == incomplete_types_allocated)
8691 incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
8692 incomplete_types_list
8693 = (tree *) xrealloc (incomplete_types_list,
8694 sizeof (tree) * incomplete_types_allocated);
8697 incomplete_types_list[incomplete_types++] = type;
8700 /* Walk through the list of incomplete types again, trying once more to
8701 emit full debugging info for them. */
8704 retry_incomplete_types ()
8708 while (incomplete_types)
8711 type = incomplete_types_list[incomplete_types];
8712 gen_type_die (type, comp_unit_die);
8716 /* Generate a DIE to represent an inlined instance of an enumeration type. */
8719 gen_inlined_enumeration_type_die (type, context_die)
8721 register dw_die_ref context_die;
8723 register dw_die_ref type_die = new_die (DW_TAG_enumeration_type,
8725 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8726 be incomplete and such types are not marked. */
8727 add_abstract_origin_attribute (type_die, type);
8730 /* Generate a DIE to represent an inlined instance of a structure type. */
8733 gen_inlined_structure_type_die (type, context_die)
8735 register dw_die_ref context_die;
8737 register dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die);
8739 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8740 be incomplete and such types are not marked. */
8741 add_abstract_origin_attribute (type_die, type);
8744 /* Generate a DIE to represent an inlined instance of a union type. */
8747 gen_inlined_union_type_die (type, context_die)
8749 register dw_die_ref context_die;
8751 register dw_die_ref type_die = new_die (DW_TAG_union_type, context_die);
8753 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8754 be incomplete and such types are not marked. */
8755 add_abstract_origin_attribute (type_die, type);
8758 /* Generate a DIE to represent an enumeration type. Note that these DIEs
8759 include all of the information about the enumeration values also. Each
8760 enumerated type name/value is listed as a child of the enumerated type
8764 gen_enumeration_type_die (type, context_die)
8766 register dw_die_ref context_die;
8768 register dw_die_ref type_die = lookup_type_die (type);
8770 if (type_die == NULL)
8772 type_die = new_die (DW_TAG_enumeration_type,
8773 scope_die_for (type, context_die));
8774 equate_type_number_to_die (type, type_die);
8775 add_name_attribute (type_die, type_tag (type));
8777 else if (! TYPE_SIZE (type))
8780 remove_AT (type_die, DW_AT_declaration);
8782 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
8783 given enum type is incomplete, do not generate the DW_AT_byte_size
8784 attribute or the DW_AT_element_list attribute. */
8785 if (TYPE_SIZE (type))
8789 TREE_ASM_WRITTEN (type) = 1;
8790 add_byte_size_attribute (type_die, type);
8791 if (TYPE_STUB_DECL (type) != NULL_TREE)
8792 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
8794 /* If the first reference to this type was as the return type of an
8795 inline function, then it may not have a parent. Fix this now. */
8796 if (type_die->die_parent == NULL)
8797 add_child_die (scope_die_for (type, context_die), type_die);
8799 for (link = TYPE_FIELDS (type);
8800 link != NULL; link = TREE_CHAIN (link))
8802 register dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die);
8804 add_name_attribute (enum_die,
8805 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
8807 if (host_integerp (TREE_VALUE (link), 0))
8809 if (tree_int_cst_sgn (TREE_VALUE (link)) < 0)
8810 add_AT_int (enum_die, DW_AT_const_value,
8811 tree_low_cst (TREE_VALUE (link), 0));
8813 add_AT_unsigned (enum_die, DW_AT_const_value,
8814 tree_low_cst (TREE_VALUE (link), 0));
8819 add_AT_flag (type_die, DW_AT_declaration, 1);
8822 /* Generate a DIE to represent either a real live formal parameter decl or to
8823 represent just the type of some formal parameter position in some function
8826 Note that this routine is a bit unusual because its argument may be a
8827 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
8828 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
8829 node. If it's the former then this function is being called to output a
8830 DIE to represent a formal parameter object (or some inlining thereof). If
8831 it's the latter, then this function is only being called to output a
8832 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
8833 argument type of some subprogram type. */
8836 gen_formal_parameter_die (node, context_die)
8838 register dw_die_ref context_die;
8840 register dw_die_ref parm_die
8841 = new_die (DW_TAG_formal_parameter, context_die);
8842 register tree origin;
8844 switch (TREE_CODE_CLASS (TREE_CODE (node)))
8847 origin = decl_ultimate_origin (node);
8849 add_abstract_origin_attribute (parm_die, origin);
8852 add_name_and_src_coords_attributes (parm_die, node);
8853 add_type_attribute (parm_die, TREE_TYPE (node),
8854 TREE_READONLY (node),
8855 TREE_THIS_VOLATILE (node),
8857 if (DECL_ARTIFICIAL (node))
8858 add_AT_flag (parm_die, DW_AT_artificial, 1);
8861 equate_decl_number_to_die (node, parm_die);
8862 if (! DECL_ABSTRACT (node))
8863 add_location_or_const_value_attribute (parm_die, node);
8868 /* We were called with some kind of a ..._TYPE node. */
8869 add_type_attribute (parm_die, node, 0, 0, context_die);
8879 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
8880 at the end of an (ANSI prototyped) formal parameters list. */
8883 gen_unspecified_parameters_die (decl_or_type, context_die)
8884 register tree decl_or_type ATTRIBUTE_UNUSED;
8885 register dw_die_ref context_die;
8887 new_die (DW_TAG_unspecified_parameters, context_die);
8890 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
8891 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
8892 parameters as specified in some function type specification (except for
8893 those which appear as part of a function *definition*). */
8896 gen_formal_types_die (function_or_method_type, context_die)
8897 register tree function_or_method_type;
8898 register dw_die_ref context_die;
8901 register tree formal_type = NULL;
8902 register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
8905 /* In the case where we are generating a formal types list for a C++
8906 non-static member function type, skip over the first thing on the
8907 TYPE_ARG_TYPES list because it only represents the type of the hidden
8908 `this pointer'. The debugger should be able to figure out (without
8909 being explicitly told) that this non-static member function type takes a
8910 `this pointer' and should be able to figure what the type of that hidden
8911 parameter is from the DW_AT_member attribute of the parent
8912 DW_TAG_subroutine_type DIE. */
8913 if (TREE_CODE (function_or_method_type) == METHOD_TYPE)
8914 first_parm_type = TREE_CHAIN (first_parm_type);
8917 /* Make our first pass over the list of formal parameter types and output a
8918 DW_TAG_formal_parameter DIE for each one. */
8919 for (link = first_parm_type; link; link = TREE_CHAIN (link))
8921 register dw_die_ref parm_die;
8923 formal_type = TREE_VALUE (link);
8924 if (formal_type == void_type_node)
8927 /* Output a (nameless) DIE to represent the formal parameter itself. */
8928 parm_die = gen_formal_parameter_die (formal_type, context_die);
8929 if (TREE_CODE (function_or_method_type) == METHOD_TYPE
8930 && link == first_parm_type)
8931 add_AT_flag (parm_die, DW_AT_artificial, 1);
8934 /* If this function type has an ellipsis, add a
8935 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
8936 if (formal_type != void_type_node)
8937 gen_unspecified_parameters_die (function_or_method_type, context_die);
8939 /* Make our second (and final) pass over the list of formal parameter types
8940 and output DIEs to represent those types (as necessary). */
8941 for (link = TYPE_ARG_TYPES (function_or_method_type);
8943 link = TREE_CHAIN (link))
8945 formal_type = TREE_VALUE (link);
8946 if (formal_type == void_type_node)
8949 gen_type_die (formal_type, context_die);
8953 /* We want to generate the DIE for TYPE so that we can generate the
8954 die for MEMBER, which has been defined; we will need to refer back
8955 to the member declaration nested within TYPE. If we're trying to
8956 generate minimal debug info for TYPE, processing TYPE won't do the
8957 trick; we need to attach the member declaration by hand. */
8960 gen_type_die_for_member (type, member, context_die)
8962 dw_die_ref context_die;
8964 gen_type_die (type, context_die);
8966 /* If we're trying to avoid duplicate debug info, we may not have
8967 emitted the member decl for this function. Emit it now. */
8968 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
8969 && ! lookup_decl_die (member))
8971 if (decl_ultimate_origin (member))
8974 push_decl_scope (type);
8975 if (TREE_CODE (member) == FUNCTION_DECL)
8976 gen_subprogram_die (member, lookup_type_die (type));
8978 gen_variable_die (member, lookup_type_die (type));
8983 /* Generate the DWARF2 info for the "abstract" instance
8984 of a function which we may later generate inlined and/or
8985 out-of-line instances of. */
8988 gen_abstract_function (decl)
8991 register dw_die_ref old_die = lookup_decl_die (decl);
8994 if (old_die && get_AT_unsigned (old_die, DW_AT_inline))
8995 /* We've already generated the abstract instance. */
8998 save_fn = current_function_decl;
8999 current_function_decl = decl;
9001 set_decl_abstract_flags (decl, 1);
9002 dwarf2out_decl (decl);
9003 set_decl_abstract_flags (decl, 0);
9005 current_function_decl = save_fn;
9008 /* Generate a DIE to represent a declared function (either file-scope or
9012 gen_subprogram_die (decl, context_die)
9014 register dw_die_ref context_die;
9016 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
9017 register tree origin = decl_ultimate_origin (decl);
9018 register dw_die_ref subr_die;
9019 register rtx fp_reg;
9020 register tree fn_arg_types;
9021 register tree outer_scope;
9022 register dw_die_ref old_die = lookup_decl_die (decl);
9023 register int declaration = (current_function_decl != decl
9024 || class_scope_p (context_die));
9026 /* Note that it is possible to have both DECL_ABSTRACT and `declaration'
9027 be true, if we started to generate the abstract instance of an inline,
9028 decided to output its containing class, and proceeded to emit the
9029 declaration of the inline from the member list for the class. In that
9030 case, `declaration' takes priority; we'll get back to the abstract
9031 instance when we're done with the class. */
9033 /* The class-scope declaration DIE must be the primary DIE. */
9034 if (origin && declaration && class_scope_p (context_die))
9043 if (declaration && ! local_scope_p (context_die))
9046 /* Fixup die_parent for the abstract instance of a nested
9048 if (old_die && old_die->die_parent == NULL)
9049 add_child_die (context_die, old_die);
9051 subr_die = new_die (DW_TAG_subprogram, context_die);
9052 add_abstract_origin_attribute (subr_die, origin);
9054 else if (old_die && DECL_ABSTRACT (decl)
9055 && get_AT_unsigned (old_die, DW_AT_inline))
9057 /* This must be a redefinition of an extern inline function.
9058 We can just reuse the old die here. */
9061 /* Clear out the inlined attribute and parm types. */
9062 remove_AT (subr_die, DW_AT_inline);
9063 remove_children (subr_die);
9067 register unsigned file_index
9068 = lookup_filename (DECL_SOURCE_FILE (decl));
9070 if (get_AT_flag (old_die, DW_AT_declaration) != 1)
9072 /* ??? This can happen if there is a bug in the program, for
9073 instance, if it has duplicate function definitions. Ideally,
9074 we should detect this case and ignore it. For now, if we have
9075 already reported an error, any error at all, then assume that
9076 we got here because of a input error, not a dwarf2 bug. */
9082 /* If the definition comes from the same place as the declaration,
9083 maybe use the old DIE. We always want the DIE for this function
9084 that has the *_pc attributes to be under comp_unit_die so the
9085 debugger can find it. For inlines, that is the concrete instance,
9086 so we can use the old DIE here. For non-inline methods, we want a
9087 specification DIE at toplevel, so we need a new DIE. For local
9088 class methods, this doesn't apply; we just use the old DIE. */
9089 if ((DECL_ABSTRACT (decl) || old_die->die_parent == comp_unit_die
9090 || context_die == NULL)
9091 && (DECL_ARTIFICIAL (decl)
9092 || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
9093 && (get_AT_unsigned (old_die, DW_AT_decl_line)
9094 == (unsigned) DECL_SOURCE_LINE (decl)))))
9098 /* Clear out the declaration attribute and the parm types. */
9099 remove_AT (subr_die, DW_AT_declaration);
9100 remove_children (subr_die);
9104 subr_die = new_die (DW_TAG_subprogram, context_die);
9105 add_AT_die_ref (subr_die, DW_AT_specification, old_die);
9106 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
9107 add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
9108 if (get_AT_unsigned (old_die, DW_AT_decl_line)
9109 != (unsigned) DECL_SOURCE_LINE (decl))
9111 (subr_die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
9116 subr_die = new_die (DW_TAG_subprogram, context_die);
9118 if (TREE_PUBLIC (decl))
9119 add_AT_flag (subr_die, DW_AT_external, 1);
9121 add_name_and_src_coords_attributes (subr_die, decl);
9122 if (debug_info_level > DINFO_LEVEL_TERSE)
9124 register tree type = TREE_TYPE (decl);
9126 add_prototyped_attribute (subr_die, type);
9127 add_type_attribute (subr_die, TREE_TYPE (type), 0, 0, context_die);
9130 add_pure_or_virtual_attribute (subr_die, decl);
9131 if (DECL_ARTIFICIAL (decl))
9132 add_AT_flag (subr_die, DW_AT_artificial, 1);
9133 if (TREE_PROTECTED (decl))
9134 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
9135 else if (TREE_PRIVATE (decl))
9136 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
9142 add_AT_flag (subr_die, DW_AT_declaration, 1);
9144 /* The first time we see a member function, it is in the context of
9145 the class to which it belongs. We make sure of this by emitting
9146 the class first. The next time is the definition, which is
9147 handled above. The two may come from the same source text. */
9148 if (DECL_CONTEXT (decl) || DECL_ABSTRACT (decl))
9149 equate_decl_number_to_die (decl, subr_die);
9151 else if (DECL_ABSTRACT (decl))
9153 if (DECL_INLINE (decl) && !flag_no_inline)
9155 /* ??? Checking DECL_DEFER_OUTPUT is correct for static
9156 inline functions, but not for extern inline functions.
9157 We can't get this completely correct because information
9158 about whether the function was declared inline is not
9160 if (DECL_DEFER_OUTPUT (decl))
9161 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
9163 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
9166 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
9168 equate_decl_number_to_die (decl, subr_die);
9170 else if (!DECL_EXTERNAL (decl))
9172 if (origin == NULL_TREE)
9173 equate_decl_number_to_die (decl, subr_die);
9175 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
9176 current_funcdef_number);
9177 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
9178 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
9179 current_funcdef_number);
9180 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
9182 add_pubname (decl, subr_die);
9183 add_arange (decl, subr_die);
9185 #ifdef MIPS_DEBUGGING_INFO
9186 /* Add a reference to the FDE for this routine. */
9187 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
9190 /* Define the "frame base" location for this routine. We use the
9191 frame pointer or stack pointer registers, since the RTL for local
9192 variables is relative to one of them. */
9194 = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
9195 add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
9198 /* ??? This fails for nested inline functions, because context_display
9199 is not part of the state saved/restored for inline functions. */
9200 if (current_function_needs_context)
9201 add_AT_location_description (subr_die, DW_AT_static_link,
9202 lookup_static_chain (decl));
9206 /* Now output descriptions of the arguments for this function. This gets
9207 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
9208 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
9209 `...' at the end of the formal parameter list. In order to find out if
9210 there was a trailing ellipsis or not, we must instead look at the type
9211 associated with the FUNCTION_DECL. This will be a node of type
9212 FUNCTION_TYPE. If the chain of type nodes hanging off of this
9213 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
9214 an ellipsis at the end. */
9216 /* In the case where we are describing a mere function declaration, all we
9217 need to do here (and all we *can* do here) is to describe the *types* of
9218 its formal parameters. */
9219 if (debug_info_level <= DINFO_LEVEL_TERSE)
9221 else if (declaration)
9222 gen_formal_types_die (TREE_TYPE (decl), subr_die);
9225 /* Generate DIEs to represent all known formal parameters */
9226 register tree arg_decls = DECL_ARGUMENTS (decl);
9229 /* When generating DIEs, generate the unspecified_parameters DIE
9230 instead if we come across the arg "__builtin_va_alist" */
9231 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
9232 if (TREE_CODE (parm) == PARM_DECL)
9234 if (DECL_NAME (parm)
9235 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
9236 "__builtin_va_alist"))
9237 gen_unspecified_parameters_die (parm, subr_die);
9239 gen_decl_die (parm, subr_die);
9242 /* Decide whether we need a unspecified_parameters DIE at the end.
9243 There are 2 more cases to do this for: 1) the ansi ... declaration -
9244 this is detectable when the end of the arg list is not a
9245 void_type_node 2) an unprototyped function declaration (not a
9246 definition). This just means that we have no info about the
9247 parameters at all. */
9248 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
9249 if (fn_arg_types != NULL)
9251 /* this is the prototyped case, check for ... */
9252 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
9253 gen_unspecified_parameters_die (decl, subr_die);
9255 else if (DECL_INITIAL (decl) == NULL_TREE)
9256 gen_unspecified_parameters_die (decl, subr_die);
9259 /* Output Dwarf info for all of the stuff within the body of the function
9260 (if it has one - it may be just a declaration). */
9261 outer_scope = DECL_INITIAL (decl);
9263 /* Note that here, `outer_scope' is a pointer to the outermost BLOCK
9264 node created to represent a function. This outermost BLOCK actually
9265 represents the outermost binding contour for the function, i.e. the
9266 contour in which the function's formal parameters and labels get
9267 declared. Curiously, it appears that the front end doesn't actually
9268 put the PARM_DECL nodes for the current function onto the BLOCK_VARS
9269 list for this outer scope. (They are strung off of the DECL_ARGUMENTS
9270 list for the function instead.) The BLOCK_VARS list for the
9271 `outer_scope' does provide us with a list of the LABEL_DECL nodes for
9272 the function however, and we output DWARF info for those in
9273 decls_for_scope. Just within the `outer_scope' there will be a BLOCK
9274 node representing the function's outermost pair of curly braces, and
9275 any blocks used for the base and member initializers of a C++
9276 constructor function. */
9277 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
9279 current_function_has_inlines = 0;
9280 decls_for_scope (outer_scope, subr_die, 0);
9282 #if 0 && defined (MIPS_DEBUGGING_INFO)
9283 if (current_function_has_inlines)
9285 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
9286 if (! comp_unit_has_inlines)
9288 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
9289 comp_unit_has_inlines = 1;
9296 /* Generate a DIE to represent a declared data object. */
9299 gen_variable_die (decl, context_die)
9301 register dw_die_ref context_die;
9303 register tree origin = decl_ultimate_origin (decl);
9304 register dw_die_ref var_die = new_die (DW_TAG_variable, context_die);
9306 dw_die_ref old_die = lookup_decl_die (decl);
9307 int declaration = (DECL_EXTERNAL (decl)
9308 || class_scope_p (context_die));
9311 add_abstract_origin_attribute (var_die, origin);
9312 /* Loop unrolling can create multiple blocks that refer to the same
9313 static variable, so we must test for the DW_AT_declaration flag. */
9314 /* ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
9315 copy decls and set the DECL_ABSTRACT flag on them instead of
9317 else if (old_die && TREE_STATIC (decl)
9318 && get_AT_flag (old_die, DW_AT_declaration) == 1)
9320 /* This is a definition of a C++ class level static. */
9321 add_AT_die_ref (var_die, DW_AT_specification, old_die);
9322 if (DECL_NAME (decl))
9324 register unsigned file_index
9325 = lookup_filename (DECL_SOURCE_FILE (decl));
9327 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
9328 add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
9330 if (get_AT_unsigned (old_die, DW_AT_decl_line)
9331 != (unsigned) DECL_SOURCE_LINE (decl))
9333 add_AT_unsigned (var_die, DW_AT_decl_line,
9334 DECL_SOURCE_LINE (decl));
9339 add_name_and_src_coords_attributes (var_die, decl);
9340 add_type_attribute (var_die, TREE_TYPE (decl),
9341 TREE_READONLY (decl),
9342 TREE_THIS_VOLATILE (decl), context_die);
9344 if (TREE_PUBLIC (decl))
9345 add_AT_flag (var_die, DW_AT_external, 1);
9347 if (DECL_ARTIFICIAL (decl))
9348 add_AT_flag (var_die, DW_AT_artificial, 1);
9350 if (TREE_PROTECTED (decl))
9351 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
9353 else if (TREE_PRIVATE (decl))
9354 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
9358 add_AT_flag (var_die, DW_AT_declaration, 1);
9360 if (class_scope_p (context_die) || DECL_ABSTRACT (decl))
9361 equate_decl_number_to_die (decl, var_die);
9363 if (! declaration && ! DECL_ABSTRACT (decl))
9365 add_location_or_const_value_attribute (var_die, decl);
9366 add_pubname (decl, var_die);
9370 /* Generate a DIE to represent a label identifier. */
9373 gen_label_die (decl, context_die)
9375 register dw_die_ref context_die;
9377 register tree origin = decl_ultimate_origin (decl);
9378 register dw_die_ref lbl_die = new_die (DW_TAG_label, context_die);
9380 char label[MAX_ARTIFICIAL_LABEL_BYTES];
9381 char label2[MAX_ARTIFICIAL_LABEL_BYTES];
9384 add_abstract_origin_attribute (lbl_die, origin);
9386 add_name_and_src_coords_attributes (lbl_die, decl);
9388 if (DECL_ABSTRACT (decl))
9389 equate_decl_number_to_die (decl, lbl_die);
9392 insn = DECL_RTL (decl);
9394 /* Deleted labels are programmer specified labels which have been
9395 eliminated because of various optimisations. We still emit them
9396 here so that it is possible to put breakpoints on them. */
9397 if (GET_CODE (insn) == CODE_LABEL
9398 || ((GET_CODE (insn) == NOTE
9399 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)))
9401 /* When optimization is enabled (via -O) some parts of the compiler
9402 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
9403 represent source-level labels which were explicitly declared by
9404 the user. This really shouldn't be happening though, so catch
9405 it if it ever does happen. */
9406 if (INSN_DELETED_P (insn))
9409 sprintf (label2, INSN_LABEL_FMT, current_funcdef_number);
9410 ASM_GENERATE_INTERNAL_LABEL (label, label2,
9411 (unsigned) INSN_UID (insn));
9412 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
9417 /* Generate a DIE for a lexical block. */
9420 gen_lexical_block_die (stmt, context_die, depth)
9422 register dw_die_ref context_die;
9425 register dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die);
9426 char label[MAX_ARTIFICIAL_LABEL_BYTES];
9428 if (! BLOCK_ABSTRACT (stmt))
9430 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
9431 BLOCK_NUMBER (stmt));
9432 add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
9433 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
9434 BLOCK_NUMBER (stmt));
9435 add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
9438 decls_for_scope (stmt, stmt_die, depth);
9441 /* Generate a DIE for an inlined subprogram. */
9444 gen_inlined_subroutine_die (stmt, context_die, depth)
9446 register dw_die_ref context_die;
9449 if (! BLOCK_ABSTRACT (stmt))
9451 register dw_die_ref subr_die
9452 = new_die (DW_TAG_inlined_subroutine, context_die);
9453 register tree decl = block_ultimate_origin (stmt);
9454 char label[MAX_ARTIFICIAL_LABEL_BYTES];
9456 /* Emit info for the abstract instance first, if we haven't yet. */
9457 gen_abstract_function (decl);
9459 add_abstract_origin_attribute (subr_die, decl);
9460 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
9461 BLOCK_NUMBER (stmt));
9462 add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
9463 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
9464 BLOCK_NUMBER (stmt));
9465 add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
9466 decls_for_scope (stmt, subr_die, depth);
9467 current_function_has_inlines = 1;
9471 /* Generate a DIE for a field in a record, or structure. */
9474 gen_field_die (decl, context_die)
9476 register dw_die_ref context_die;
9478 register dw_die_ref decl_die = new_die (DW_TAG_member, context_die);
9480 add_name_and_src_coords_attributes (decl_die, decl);
9481 add_type_attribute (decl_die, member_declared_type (decl),
9482 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
9485 /* If this is a bit field... */
9486 if (DECL_BIT_FIELD_TYPE (decl))
9488 add_byte_size_attribute (decl_die, decl);
9489 add_bit_size_attribute (decl_die, decl);
9490 add_bit_offset_attribute (decl_die, decl);
9493 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
9494 add_data_member_location_attribute (decl_die, decl);
9496 if (DECL_ARTIFICIAL (decl))
9497 add_AT_flag (decl_die, DW_AT_artificial, 1);
9499 if (TREE_PROTECTED (decl))
9500 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
9502 else if (TREE_PRIVATE (decl))
9503 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
9507 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
9508 Use modified_type_die instead.
9509 We keep this code here just in case these types of DIEs may be needed to
9510 represent certain things in other languages (e.g. Pascal) someday. */
9512 gen_pointer_type_die (type, context_die)
9514 register dw_die_ref context_die;
9516 register dw_die_ref ptr_die
9517 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die));
9519 equate_type_number_to_die (type, ptr_die);
9520 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
9521 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
9524 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
9525 Use modified_type_die instead.
9526 We keep this code here just in case these types of DIEs may be needed to
9527 represent certain things in other languages (e.g. Pascal) someday. */
9529 gen_reference_type_die (type, context_die)
9531 register dw_die_ref context_die;
9533 register dw_die_ref ref_die
9534 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die));
9536 equate_type_number_to_die (type, ref_die);
9537 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
9538 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
9542 /* Generate a DIE for a pointer to a member type. */
9544 gen_ptr_to_mbr_type_die (type, context_die)
9546 register dw_die_ref context_die;
9548 register dw_die_ref ptr_die
9549 = new_die (DW_TAG_ptr_to_member_type, scope_die_for (type, context_die));
9551 equate_type_number_to_die (type, ptr_die);
9552 add_AT_die_ref (ptr_die, DW_AT_containing_type,
9553 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
9554 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
9557 /* Generate the DIE for the compilation unit. */
9560 gen_compile_unit_die (filename)
9561 register const char *filename;
9563 register dw_die_ref die;
9565 const char *wd = getpwd ();
9568 die = new_die (DW_TAG_compile_unit, NULL);
9569 add_name_attribute (die, filename);
9571 if (wd != NULL && filename[0] != DIR_SEPARATOR)
9572 add_AT_string (die, DW_AT_comp_dir, wd);
9574 sprintf (producer, "%s %s", language_string, version_string);
9576 #ifdef MIPS_DEBUGGING_INFO
9577 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
9578 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
9579 not appear in the producer string, the debugger reaches the conclusion
9580 that the object file is stripped and has no debugging information.
9581 To get the MIPS/SGI debugger to believe that there is debugging
9582 information in the object file, we add a -g to the producer string. */
9583 if (debug_info_level > DINFO_LEVEL_TERSE)
9584 strcat (producer, " -g");
9587 add_AT_string (die, DW_AT_producer, producer);
9589 if (strcmp (language_string, "GNU C++") == 0)
9590 language = DW_LANG_C_plus_plus;
9591 else if (strcmp (language_string, "GNU Ada") == 0)
9592 language = DW_LANG_Ada83;
9593 else if (strcmp (language_string, "GNU F77") == 0)
9594 language = DW_LANG_Fortran77;
9595 else if (strcmp (language_string, "GNU Pascal") == 0)
9596 language = DW_LANG_Pascal83;
9597 else if (strcmp (language_string, "GNU Java") == 0)
9598 language = DW_LANG_Java;
9599 else if (flag_traditional)
9600 language = DW_LANG_C;
9602 language = DW_LANG_C89;
9604 add_AT_unsigned (die, DW_AT_language, language);
9609 /* Generate a DIE for a string type. */
9612 gen_string_type_die (type, context_die)
9614 register dw_die_ref context_die;
9616 register dw_die_ref type_die
9617 = new_die (DW_TAG_string_type, scope_die_for (type, context_die));
9619 equate_type_number_to_die (type, type_die);
9621 /* Fudge the string length attribute for now. */
9623 /* TODO: add string length info.
9624 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
9625 bound_representation (upper_bound, 0, 'u'); */
9628 /* Generate the DIE for a base class. */
9631 gen_inheritance_die (binfo, context_die)
9632 register tree binfo;
9633 register dw_die_ref context_die;
9635 dw_die_ref die = new_die (DW_TAG_inheritance, context_die);
9637 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
9638 add_data_member_location_attribute (die, binfo);
9640 if (TREE_VIA_VIRTUAL (binfo))
9641 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
9642 if (TREE_VIA_PUBLIC (binfo))
9643 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
9644 else if (TREE_VIA_PROTECTED (binfo))
9645 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
9648 /* Generate a DIE for a class member. */
9651 gen_member_die (type, context_die)
9653 register dw_die_ref context_die;
9655 register tree member;
9658 /* If this is not an incomplete type, output descriptions of each of its
9659 members. Note that as we output the DIEs necessary to represent the
9660 members of this record or union type, we will also be trying to output
9661 DIEs to represent the *types* of those members. However the `type'
9662 function (above) will specifically avoid generating type DIEs for member
9663 types *within* the list of member DIEs for this (containing) type execpt
9664 for those types (of members) which are explicitly marked as also being
9665 members of this (containing) type themselves. The g++ front- end can
9666 force any given type to be treated as a member of some other
9667 (containing) type by setting the TYPE_CONTEXT of the given (member) type
9668 to point to the TREE node representing the appropriate (containing)
9671 /* First output info about the base classes. */
9672 if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type))
9674 register tree bases = TYPE_BINFO_BASETYPES (type);
9675 register int n_bases = TREE_VEC_LENGTH (bases);
9678 for (i = 0; i < n_bases; i++)
9679 gen_inheritance_die (TREE_VEC_ELT (bases, i), context_die);
9682 /* Now output info about the data members and type members. */
9683 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
9685 /* If we thought we were generating minimal debug info for TYPE
9686 and then changed our minds, some of the member declarations
9687 may have already been defined. Don't define them again, but
9688 do put them in the right order. */
9690 child = lookup_decl_die (member);
9692 splice_child_die (context_die, child);
9694 gen_decl_die (member, context_die);
9697 /* Now output info about the function members (if any). */
9698 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
9700 child = lookup_decl_die (member);
9702 splice_child_die (context_die, child);
9704 gen_decl_die (member, context_die);
9708 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
9709 is set, we pretend that the type was never defined, so we only get the
9710 member DIEs needed by later specification DIEs. */
9713 gen_struct_or_union_type_die (type, context_die)
9715 register dw_die_ref context_die;
9717 register dw_die_ref type_die = lookup_type_die (type);
9718 register dw_die_ref scope_die = 0;
9719 register int nested = 0;
9720 int complete = (TYPE_SIZE (type)
9721 && (! TYPE_STUB_DECL (type)
9722 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
9724 if (type_die && ! complete)
9727 if (TYPE_CONTEXT (type) != NULL_TREE
9728 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type)))
9731 scope_die = scope_die_for (type, context_die);
9733 if (! type_die || (nested && scope_die == comp_unit_die))
9734 /* First occurrence of type or toplevel definition of nested class. */
9736 register dw_die_ref old_die = type_die;
9738 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
9739 ? DW_TAG_structure_type : DW_TAG_union_type,
9741 equate_type_number_to_die (type, type_die);
9743 add_AT_die_ref (type_die, DW_AT_specification, old_die);
9745 add_name_attribute (type_die, type_tag (type));
9748 remove_AT (type_die, DW_AT_declaration);
9750 /* If this type has been completed, then give it a byte_size attribute and
9751 then give a list of members. */
9754 /* Prevent infinite recursion in cases where the type of some member of
9755 this type is expressed in terms of this type itself. */
9756 TREE_ASM_WRITTEN (type) = 1;
9757 add_byte_size_attribute (type_die, type);
9758 if (TYPE_STUB_DECL (type) != NULL_TREE)
9759 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
9761 /* If the first reference to this type was as the return type of an
9762 inline function, then it may not have a parent. Fix this now. */
9763 if (type_die->die_parent == NULL)
9764 add_child_die (scope_die, type_die);
9766 push_decl_scope (type);
9767 gen_member_die (type, type_die);
9770 /* GNU extension: Record what type our vtable lives in. */
9771 if (TYPE_VFIELD (type))
9773 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
9775 gen_type_die (vtype, context_die);
9776 add_AT_die_ref (type_die, DW_AT_containing_type,
9777 lookup_type_die (vtype));
9782 add_AT_flag (type_die, DW_AT_declaration, 1);
9784 /* We don't need to do this for function-local types. */
9785 if (! decl_function_context (TYPE_STUB_DECL (type)))
9786 add_incomplete_type (type);
9790 /* Generate a DIE for a subroutine _type_. */
9793 gen_subroutine_type_die (type, context_die)
9795 register dw_die_ref context_die;
9797 register tree return_type = TREE_TYPE (type);
9798 register dw_die_ref subr_die
9799 = new_die (DW_TAG_subroutine_type, scope_die_for (type, context_die));
9801 equate_type_number_to_die (type, subr_die);
9802 add_prototyped_attribute (subr_die, type);
9803 add_type_attribute (subr_die, return_type, 0, 0, context_die);
9804 gen_formal_types_die (type, subr_die);
9807 /* Generate a DIE for a type definition */
9810 gen_typedef_die (decl, context_die)
9812 register dw_die_ref context_die;
9814 register dw_die_ref type_die;
9815 register tree origin;
9817 if (TREE_ASM_WRITTEN (decl))
9819 TREE_ASM_WRITTEN (decl) = 1;
9821 type_die = new_die (DW_TAG_typedef, context_die);
9822 origin = decl_ultimate_origin (decl);
9824 add_abstract_origin_attribute (type_die, origin);
9828 add_name_and_src_coords_attributes (type_die, decl);
9829 if (DECL_ORIGINAL_TYPE (decl))
9831 type = DECL_ORIGINAL_TYPE (decl);
9833 if (type == TREE_TYPE (decl))
9836 equate_type_number_to_die (TREE_TYPE (decl), type_die);
9839 type = TREE_TYPE (decl);
9840 add_type_attribute (type_die, type, TREE_READONLY (decl),
9841 TREE_THIS_VOLATILE (decl), context_die);
9844 if (DECL_ABSTRACT (decl))
9845 equate_decl_number_to_die (decl, type_die);
9848 /* Generate a type description DIE. */
9851 gen_type_die (type, context_die)
9853 register dw_die_ref context_die;
9857 if (type == NULL_TREE || type == error_mark_node)
9860 /* We are going to output a DIE to represent the unqualified version of
9861 this type (i.e. without any const or volatile qualifiers) so get the
9862 main variant (i.e. the unqualified version) of this type now. */
9863 type = type_main_variant (type);
9865 if (TREE_ASM_WRITTEN (type))
9868 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9869 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
9871 TREE_ASM_WRITTEN (type) = 1;
9872 gen_decl_die (TYPE_NAME (type), context_die);
9876 switch (TREE_CODE (type))
9882 case REFERENCE_TYPE:
9883 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
9884 ensures that the gen_type_die recursion will terminate even if the
9885 type is recursive. Recursive types are possible in Ada. */
9886 /* ??? We could perhaps do this for all types before the switch
9888 TREE_ASM_WRITTEN (type) = 1;
9890 /* For these types, all that is required is that we output a DIE (or a
9891 set of DIEs) to represent the "basis" type. */
9892 gen_type_die (TREE_TYPE (type), context_die);
9896 /* This code is used for C++ pointer-to-data-member types.
9897 Output a description of the relevant class type. */
9898 gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
9900 /* Output a description of the type of the object pointed to. */
9901 gen_type_die (TREE_TYPE (type), context_die);
9903 /* Now output a DIE to represent this pointer-to-data-member type
9905 gen_ptr_to_mbr_type_die (type, context_die);
9909 gen_type_die (TYPE_DOMAIN (type), context_die);
9910 gen_set_type_die (type, context_die);
9914 gen_type_die (TREE_TYPE (type), context_die);
9915 abort (); /* No way to represent these in Dwarf yet! */
9919 /* Force out return type (in case it wasn't forced out already). */
9920 gen_type_die (TREE_TYPE (type), context_die);
9921 gen_subroutine_type_die (type, context_die);
9925 /* Force out return type (in case it wasn't forced out already). */
9926 gen_type_die (TREE_TYPE (type), context_die);
9927 gen_subroutine_type_die (type, context_die);
9931 if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
9933 gen_type_die (TREE_TYPE (type), context_die);
9934 gen_string_type_die (type, context_die);
9937 gen_array_type_die (type, context_die);
9941 gen_type_die (TYPE_DEBUG_REPRESENTATION_TYPE (type), context_die);
9947 case QUAL_UNION_TYPE:
9948 /* If this is a nested type whose containing class hasn't been
9949 written out yet, writing it out will cover this one, too.
9950 This does not apply to instantiations of member class templates;
9951 they need to be added to the containing class as they are
9952 generated. FIXME: This hurts the idea of combining type decls
9953 from multiple TUs, since we can't predict what set of template
9954 instantiations we'll get. */
9955 if (TYPE_CONTEXT (type)
9956 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
9957 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
9959 gen_type_die (TYPE_CONTEXT (type), context_die);
9961 if (TREE_ASM_WRITTEN (type))
9964 /* If that failed, attach ourselves to the stub. */
9965 push_decl_scope (TYPE_CONTEXT (type));
9966 context_die = lookup_type_die (TYPE_CONTEXT (type));
9972 if (TREE_CODE (type) == ENUMERAL_TYPE)
9973 gen_enumeration_type_die (type, context_die);
9975 gen_struct_or_union_type_die (type, context_die);
9980 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
9981 it up if it is ever completed. gen_*_type_die will set it for us
9982 when appropriate. */
9991 /* No DIEs needed for fundamental types. */
9995 /* No Dwarf representation currently defined. */
10002 TREE_ASM_WRITTEN (type) = 1;
10005 /* Generate a DIE for a tagged type instantiation. */
10008 gen_tagged_type_instantiation_die (type, context_die)
10009 register tree type;
10010 register dw_die_ref context_die;
10012 if (type == NULL_TREE || type == error_mark_node)
10015 /* We are going to output a DIE to represent the unqualified version of
10016 this type (i.e. without any const or volatile qualifiers) so make sure
10017 that we have the main variant (i.e. the unqualified version) of this
10019 if (type != type_main_variant (type))
10022 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
10023 an instance of an unresolved type. */
10025 switch (TREE_CODE (type))
10030 case ENUMERAL_TYPE:
10031 gen_inlined_enumeration_type_die (type, context_die);
10035 gen_inlined_structure_type_die (type, context_die);
10039 case QUAL_UNION_TYPE:
10040 gen_inlined_union_type_die (type, context_die);
10048 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
10049 things which are local to the given block. */
10052 gen_block_die (stmt, context_die, depth)
10053 register tree stmt;
10054 register dw_die_ref context_die;
10057 register int must_output_die = 0;
10058 register tree origin;
10059 register tree decl;
10060 register enum tree_code origin_code;
10062 /* Ignore blocks never really used to make RTL. */
10064 if (stmt == NULL_TREE || !TREE_USED (stmt)
10065 || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
10068 /* Determine the "ultimate origin" of this block. This block may be an
10069 inlined instance of an inlined instance of inline function, so we have
10070 to trace all of the way back through the origin chain to find out what
10071 sort of node actually served as the original seed for the creation of
10072 the current block. */
10073 origin = block_ultimate_origin (stmt);
10074 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
10076 /* Determine if we need to output any Dwarf DIEs at all to represent this
10078 if (origin_code == FUNCTION_DECL)
10079 /* The outer scopes for inlinings *must* always be represented. We
10080 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
10081 must_output_die = 1;
10084 /* In the case where the current block represents an inlining of the
10085 "body block" of an inline function, we must *NOT* output any DIE for
10086 this block because we have already output a DIE to represent the
10087 whole inlined function scope and the "body block" of any function
10088 doesn't really represent a different scope according to ANSI C
10089 rules. So we check here to make sure that this block does not
10090 represent a "body block inlining" before trying to set the
10091 `must_output_die' flag. */
10092 if (! is_body_block (origin ? origin : stmt))
10094 /* Determine if this block directly contains any "significant"
10095 local declarations which we will need to output DIEs for. */
10096 if (debug_info_level > DINFO_LEVEL_TERSE)
10097 /* We are not in terse mode so *any* local declaration counts
10098 as being a "significant" one. */
10099 must_output_die = (BLOCK_VARS (stmt) != NULL);
10101 /* We are in terse mode, so only local (nested) function
10102 definitions count as "significant" local declarations. */
10103 for (decl = BLOCK_VARS (stmt);
10104 decl != NULL; decl = TREE_CHAIN (decl))
10105 if (TREE_CODE (decl) == FUNCTION_DECL
10106 && DECL_INITIAL (decl))
10108 must_output_die = 1;
10114 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
10115 DIE for any block which contains no significant local declarations at
10116 all. Rather, in such cases we just call `decls_for_scope' so that any
10117 needed Dwarf info for any sub-blocks will get properly generated. Note
10118 that in terse mode, our definition of what constitutes a "significant"
10119 local declaration gets restricted to include only inlined function
10120 instances and local (nested) function definitions. */
10121 if (must_output_die)
10123 if (origin_code == FUNCTION_DECL)
10124 gen_inlined_subroutine_die (stmt, context_die, depth);
10126 gen_lexical_block_die (stmt, context_die, depth);
10129 decls_for_scope (stmt, context_die, depth);
10132 /* Generate all of the decls declared within a given scope and (recursively)
10133 all of its sub-blocks. */
10136 decls_for_scope (stmt, context_die, depth)
10137 register tree stmt;
10138 register dw_die_ref context_die;
10141 register tree decl;
10142 register tree subblocks;
10144 /* Ignore blocks never really used to make RTL. */
10145 if (stmt == NULL_TREE || ! TREE_USED (stmt))
10148 /* Output the DIEs to represent all of the data objects and typedefs
10149 declared directly within this block but not within any nested
10150 sub-blocks. Also, nested function and tag DIEs have been
10151 generated with a parent of NULL; fix that up now. */
10152 for (decl = BLOCK_VARS (stmt);
10153 decl != NULL; decl = TREE_CHAIN (decl))
10155 register dw_die_ref die;
10157 if (TREE_CODE (decl) == FUNCTION_DECL)
10158 die = lookup_decl_die (decl);
10159 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
10160 die = lookup_type_die (TREE_TYPE (decl));
10164 if (die != NULL && die->die_parent == NULL)
10165 add_child_die (context_die, die);
10167 gen_decl_die (decl, context_die);
10170 /* Output the DIEs to represent all sub-blocks (and the items declared
10171 therein) of this block. */
10172 for (subblocks = BLOCK_SUBBLOCKS (stmt);
10174 subblocks = BLOCK_CHAIN (subblocks))
10175 gen_block_die (subblocks, context_die, depth + 1);
10178 /* Is this a typedef we can avoid emitting? */
10181 is_redundant_typedef (decl)
10182 register tree decl;
10184 if (TYPE_DECL_IS_STUB (decl))
10187 if (DECL_ARTIFICIAL (decl)
10188 && DECL_CONTEXT (decl)
10189 && is_tagged_type (DECL_CONTEXT (decl))
10190 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
10191 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
10192 /* Also ignore the artificial member typedef for the class name. */
10198 /* Generate Dwarf debug information for a decl described by DECL. */
10201 gen_decl_die (decl, context_die)
10202 register tree decl;
10203 register dw_die_ref context_die;
10205 register tree origin;
10207 if (TREE_CODE (decl) == ERROR_MARK)
10210 /* If this ..._DECL node is marked to be ignored, then ignore it. */
10211 if (DECL_IGNORED_P (decl))
10214 switch (TREE_CODE (decl))
10217 /* The individual enumerators of an enum type get output when we output
10218 the Dwarf representation of the relevant enum type itself. */
10221 case FUNCTION_DECL:
10222 /* Don't output any DIEs to represent mere function declarations,
10223 unless they are class members or explicit block externs. */
10224 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
10225 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
10228 /* If we're emitting an out-of-line copy of an inline function,
10229 emit info for the abstract instance and set up to refer to it. */
10230 if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl)
10231 && ! class_scope_p (context_die)
10232 /* gen_abstract_function won't emit a die if this is just a
10233 declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
10234 that case, because that works only if we have a die. */
10235 && DECL_INITIAL (decl) != NULL_TREE)
10237 gen_abstract_function (decl);
10238 set_decl_origin_self (decl);
10241 if (debug_info_level > DINFO_LEVEL_TERSE)
10243 /* Before we describe the FUNCTION_DECL itself, make sure that we
10244 have described its return type. */
10245 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
10247 /* And its virtual context. */
10248 if (DECL_VINDEX (decl) != NULL_TREE)
10249 gen_type_die (DECL_CONTEXT (decl), context_die);
10251 /* And its containing type. */
10252 origin = decl_class_context (decl);
10253 if (origin != NULL_TREE)
10254 gen_type_die_for_member (origin, decl, context_die);
10257 /* Now output a DIE to represent the function itself. */
10258 gen_subprogram_die (decl, context_die);
10262 /* If we are in terse mode, don't generate any DIEs to represent any
10263 actual typedefs. */
10264 if (debug_info_level <= DINFO_LEVEL_TERSE)
10267 /* In the special case of a TYPE_DECL node representing the
10268 declaration of some type tag, if the given TYPE_DECL is marked as
10269 having been instantiated from some other (original) TYPE_DECL node
10270 (e.g. one which was generated within the original definition of an
10271 inline function) we have to generate a special (abbreviated)
10272 DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration_type
10274 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
10276 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
10280 if (is_redundant_typedef (decl))
10281 gen_type_die (TREE_TYPE (decl), context_die);
10283 /* Output a DIE to represent the typedef itself. */
10284 gen_typedef_die (decl, context_die);
10288 if (debug_info_level >= DINFO_LEVEL_NORMAL)
10289 gen_label_die (decl, context_die);
10293 /* If we are in terse mode, don't generate any DIEs to represent any
10294 variable declarations or definitions. */
10295 if (debug_info_level <= DINFO_LEVEL_TERSE)
10298 /* Output any DIEs that are needed to specify the type of this data
10300 gen_type_die (TREE_TYPE (decl), context_die);
10302 /* And its containing type. */
10303 origin = decl_class_context (decl);
10304 if (origin != NULL_TREE)
10305 gen_type_die_for_member (origin, decl, context_die);
10307 /* Now output the DIE to represent the data object itself. This gets
10308 complicated because of the possibility that the VAR_DECL really
10309 represents an inlined instance of a formal parameter for an inline
10311 origin = decl_ultimate_origin (decl);
10312 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
10313 gen_formal_parameter_die (decl, context_die);
10315 gen_variable_die (decl, context_die);
10319 /* Ignore the nameless fields that are used to skip bits, but
10320 handle C++ anonymous unions. */
10321 if (DECL_NAME (decl) != NULL_TREE
10322 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
10324 gen_type_die (member_declared_type (decl), context_die);
10325 gen_field_die (decl, context_die);
10330 gen_type_die (TREE_TYPE (decl), context_die);
10331 gen_formal_parameter_die (decl, context_die);
10334 case NAMESPACE_DECL:
10335 /* Ignore for now. */
10343 /* Add Ada "use" clause information for SGI Workshop debugger. */
10346 dwarf2out_add_library_unit_info (filename, context_list)
10347 const char *filename;
10348 const char *context_list;
10350 unsigned int file_index;
10352 if (filename != NULL)
10354 dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die);
10355 tree context_list_decl
10356 = build_decl (LABEL_DECL, get_identifier (context_list),
10359 TREE_PUBLIC (context_list_decl) = TRUE;
10360 add_name_attribute (unit_die, context_list);
10361 file_index = lookup_filename (filename);
10362 add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
10363 add_pubname (context_list_decl, unit_die);
10367 /* Write the debugging output for DECL. */
10370 dwarf2out_decl (decl)
10371 register tree decl;
10373 register dw_die_ref context_die = comp_unit_die;
10375 if (TREE_CODE (decl) == ERROR_MARK)
10378 /* If this ..._DECL node is marked to be ignored, then ignore it. */
10379 if (DECL_IGNORED_P (decl))
10382 switch (TREE_CODE (decl))
10384 case FUNCTION_DECL:
10385 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of a
10386 builtin function. Explicit programmer-supplied declarations of
10387 these same functions should NOT be ignored however. */
10388 if (DECL_EXTERNAL (decl) && DECL_BUILT_IN (decl))
10391 /* What we would really like to do here is to filter out all mere
10392 file-scope declarations of file-scope functions which are never
10393 referenced later within this translation unit (and keep all of ones
10394 that *are* referenced later on) but we aren't clairvoyant, so we have
10395 no idea which functions will be referenced in the future (i.e. later
10396 on within the current translation unit). So here we just ignore all
10397 file-scope function declarations which are not also definitions. If
10398 and when the debugger needs to know something about these functions,
10399 it will have to hunt around and find the DWARF information associated
10400 with the definition of the function. Note that we can't just check
10401 `DECL_EXTERNAL' to find out which FUNCTION_DECL nodes represent
10402 definitions and which ones represent mere declarations. We have to
10403 check `DECL_INITIAL' instead. That's because the C front-end
10404 supports some weird semantics for "extern inline" function
10405 definitions. These can get inlined within the current translation
10406 unit (an thus, we need to generate DWARF info for their abstract
10407 instances so that the DWARF info for the concrete inlined instances
10408 can have something to refer to) but the compiler never generates any
10409 out-of-lines instances of such things (despite the fact that they
10410 *are* definitions). The important point is that the C front-end
10411 marks these "extern inline" functions as DECL_EXTERNAL, but we need
10412 to generate DWARF for them anyway. Note that the C++ front-end also
10413 plays some similar games for inline function definitions appearing
10414 within include files which also contain
10415 `#pragma interface' pragmas. */
10416 if (DECL_INITIAL (decl) == NULL_TREE)
10419 /* If we're a nested function, initially use a parent of NULL; if we're
10420 a plain function, this will be fixed up in decls_for_scope. If
10421 we're a method, it will be ignored, since we already have a DIE. */
10422 if (decl_function_context (decl))
10423 context_die = NULL;
10428 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
10429 declaration and if the declaration was never even referenced from
10430 within this entire compilation unit. We suppress these DIEs in
10431 order to save space in the .debug section (by eliminating entries
10432 which are probably useless). Note that we must not suppress
10433 block-local extern declarations (whether used or not) because that
10434 would screw-up the debugger's name lookup mechanism and cause it to
10435 miss things which really ought to be in scope at a given point. */
10436 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
10439 /* If we are in terse mode, don't generate any DIEs to represent any
10440 variable declarations or definitions. */
10441 if (debug_info_level <= DINFO_LEVEL_TERSE)
10446 /* Don't emit stubs for types unless they are needed by other DIEs. */
10447 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
10450 /* Don't bother trying to generate any DIEs to represent any of the
10451 normal built-in types for the language we are compiling. */
10452 if (DECL_SOURCE_LINE (decl) == 0)
10454 /* OK, we need to generate one for `bool' so GDB knows what type
10455 comparisons have. */
10456 if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
10457 == DW_LANG_C_plus_plus)
10458 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE)
10459 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
10464 /* If we are in terse mode, don't generate any DIEs for types. */
10465 if (debug_info_level <= DINFO_LEVEL_TERSE)
10468 /* If we're a function-scope tag, initially use a parent of NULL;
10469 this will be fixed up in decls_for_scope. */
10470 if (decl_function_context (decl))
10471 context_die = NULL;
10479 gen_decl_die (decl, context_die);
10482 /* Output a marker (i.e. a label) for the beginning of the generated code for
10483 a lexical block. */
10486 dwarf2out_begin_block (blocknum)
10487 register unsigned blocknum;
10489 function_section (current_function_decl);
10490 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
10493 /* Output a marker (i.e. a label) for the end of the generated code for a
10497 dwarf2out_end_block (blocknum)
10498 register unsigned blocknum;
10500 function_section (current_function_decl);
10501 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
10504 /* Returns nonzero if it is appropriate not to emit any debugging
10505 information for BLOCK, because it doesn't contain any instructions.
10507 Don't allow this for blocks with nested functions or local classes
10508 as we would end up with orphans, and in the presence of scheduling
10509 we may end up calling them anyway. */
10512 dwarf2out_ignore_block (block)
10516 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
10517 if (TREE_CODE (decl) == FUNCTION_DECL
10518 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
10523 /* Output a marker (i.e. a label) at a point in the assembly code which
10524 corresponds to a given source level label. */
10527 dwarf2out_label (insn)
10530 char label[MAX_ARTIFICIAL_LABEL_BYTES];
10532 if (debug_info_level >= DINFO_LEVEL_NORMAL)
10534 function_section (current_function_decl);
10535 sprintf (label, INSN_LABEL_FMT, current_funcdef_number);
10536 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, label,
10537 (unsigned) INSN_UID (insn));
10541 /* Lookup a filename (in the list of filenames that we know about here in
10542 dwarf2out.c) and return its "index". The index of each (known) filename is
10543 just a unique number which is associated with only that one filename.
10544 We need such numbers for the sake of generating labels
10545 (in the .debug_sfnames section) and references to those
10546 files numbers (in the .debug_srcinfo and.debug_macinfo sections).
10547 If the filename given as an argument is not found in our current list,
10548 add it to the list and assign it the next available unique index number.
10549 In order to speed up searches, we remember the index of the filename
10550 was looked up last. This handles the majority of all searches. */
10553 lookup_filename (file_name)
10554 const char *file_name;
10556 static unsigned last_file_lookup_index = 0;
10557 register unsigned i;
10559 /* Check to see if the file name that was searched on the previous call
10560 matches this file name. If so, return the index. */
10561 if (last_file_lookup_index != 0)
10562 if (strcmp (file_name, file_table[last_file_lookup_index]) == 0)
10563 return last_file_lookup_index;
10565 /* Didn't match the previous lookup, search the table */
10566 for (i = 1; i < file_table_in_use; ++i)
10567 if (strcmp (file_name, file_table[i]) == 0)
10569 last_file_lookup_index = i;
10573 /* Prepare to add a new table entry by making sure there is enough space in
10574 the table to do so. If not, expand the current table. */
10575 if (file_table_in_use == file_table_allocated)
10577 file_table_allocated += FILE_TABLE_INCREMENT;
10579 = (char **) xrealloc (file_table,
10580 file_table_allocated * sizeof (char *));
10583 /* Add the new entry to the end of the filename table. */
10584 file_table[file_table_in_use] = xstrdup (file_name);
10585 last_file_lookup_index = file_table_in_use++;
10587 return last_file_lookup_index;
10590 /* Output a label to mark the beginning of a source code line entry
10591 and record information relating to this source line, in
10592 'line_info_table' for later output of the .debug_line section. */
10595 dwarf2out_line (filename, line)
10596 register const char *filename;
10597 register unsigned line;
10599 if (debug_info_level >= DINFO_LEVEL_NORMAL)
10601 function_section (current_function_decl);
10603 if (DWARF2_ASM_LINE_DEBUG_INFO)
10605 static const char *lastfile;
10607 /* Emit the .file and .loc directives understood by GNU as. */
10608 if (lastfile == 0 || strcmp (filename, lastfile))
10611 ggc_add_string_root ((char **) &lastfile, 1);
10613 fprintf (asm_out_file, "\t.file 0 \"%s\"\n", filename);
10614 lastfile = filename;
10617 fprintf (asm_out_file, "\t.loc 0 %d 0\n", line);
10619 /* Indicate that line number info exists. */
10620 ++line_info_table_in_use;
10622 /* Indicate that multiple line number tables exist. */
10623 if (DECL_SECTION_NAME (current_function_decl))
10624 ++separate_line_info_table_in_use;
10626 else if (DECL_SECTION_NAME (current_function_decl))
10628 register dw_separate_line_info_ref line_info;
10629 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, SEPARATE_LINE_CODE_LABEL,
10630 separate_line_info_table_in_use);
10631 if (flag_debug_asm)
10632 fprintf (asm_out_file, "\t%s line %d", ASM_COMMENT_START, line);
10633 fputc ('\n', asm_out_file);
10635 /* expand the line info table if necessary */
10636 if (separate_line_info_table_in_use
10637 == separate_line_info_table_allocated)
10639 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
10640 separate_line_info_table
10641 = (dw_separate_line_info_ref)
10642 xrealloc (separate_line_info_table,
10643 separate_line_info_table_allocated
10644 * sizeof (dw_separate_line_info_entry));
10647 /* Add the new entry at the end of the line_info_table. */
10649 = &separate_line_info_table[separate_line_info_table_in_use++];
10650 line_info->dw_file_num = lookup_filename (filename);
10651 line_info->dw_line_num = line;
10652 line_info->function = current_funcdef_number;
10656 register dw_line_info_ref line_info;
10658 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, LINE_CODE_LABEL,
10659 line_info_table_in_use);
10660 if (flag_debug_asm)
10661 fprintf (asm_out_file, "\t%s line %d", ASM_COMMENT_START, line);
10662 fputc ('\n', asm_out_file);
10664 /* Expand the line info table if necessary. */
10665 if (line_info_table_in_use == line_info_table_allocated)
10667 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
10669 = (dw_line_info_ref)
10670 xrealloc (line_info_table,
10671 (line_info_table_allocated
10672 * sizeof (dw_line_info_entry)));
10675 /* Add the new entry at the end of the line_info_table. */
10676 line_info = &line_info_table[line_info_table_in_use++];
10677 line_info->dw_file_num = lookup_filename (filename);
10678 line_info->dw_line_num = line;
10683 /* Record the beginning of a new source file, for later output
10684 of the .debug_macinfo section. At present, unimplemented. */
10687 dwarf2out_start_source_file (filename)
10688 register const char *filename ATTRIBUTE_UNUSED;
10690 if (flag_eliminate_dwarf2_dups)
10692 /* Record the beginning of the file for break_out_includes. */
10693 dw_die_ref bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die);
10694 add_AT_string (bincl_die, DW_AT_name, filename);
10698 /* Record the end of a source file, for later output
10699 of the .debug_macinfo section. At present, unimplemented. */
10702 dwarf2out_end_source_file ()
10704 if (flag_eliminate_dwarf2_dups)
10706 /* Record the end of the file for break_out_includes. */
10707 new_die (DW_TAG_GNU_EINCL, comp_unit_die);
10711 /* Called from check_newline in c-parse.y. The `buffer' parameter contains
10712 the tail part of the directive line, i.e. the part which is past the
10713 initial whitespace, #, whitespace, directive-name, whitespace part. */
10716 dwarf2out_define (lineno, buffer)
10717 register unsigned lineno ATTRIBUTE_UNUSED;
10718 register const char *buffer ATTRIBUTE_UNUSED;
10720 static int initialized = 0;
10723 dwarf2out_start_source_file (primary_filename);
10728 /* Called from check_newline in c-parse.y. The `buffer' parameter contains
10729 the tail part of the directive line, i.e. the part which is past the
10730 initial whitespace, #, whitespace, directive-name, whitespace part. */
10733 dwarf2out_undef (lineno, buffer)
10734 register unsigned lineno ATTRIBUTE_UNUSED;
10735 register const char *buffer ATTRIBUTE_UNUSED;
10739 /* Set up for Dwarf output at the start of compilation. */
10742 dwarf2out_init (asm_out_file, main_input_filename)
10743 register FILE *asm_out_file;
10744 register const char *main_input_filename;
10746 /* Remember the name of the primary input file. */
10747 primary_filename = main_input_filename;
10749 /* Allocate the initial hunk of the file_table. */
10750 file_table = (char **) xcalloc (FILE_TABLE_INCREMENT, sizeof (char *));
10751 file_table_allocated = FILE_TABLE_INCREMENT;
10753 /* Skip the first entry - file numbers begin at 1. */
10754 file_table_in_use = 1;
10756 /* Allocate the initial hunk of the decl_die_table. */
10758 = (dw_die_ref *) xcalloc (DECL_DIE_TABLE_INCREMENT, sizeof (dw_die_ref));
10759 decl_die_table_allocated = DECL_DIE_TABLE_INCREMENT;
10760 decl_die_table_in_use = 0;
10762 /* Allocate the initial hunk of the decl_scope_table. */
10764 = (tree *) xcalloc (DECL_SCOPE_TABLE_INCREMENT, sizeof (tree));
10765 decl_scope_table_allocated = DECL_SCOPE_TABLE_INCREMENT;
10766 decl_scope_depth = 0;
10768 /* Allocate the initial hunk of the abbrev_die_table. */
10770 = (dw_die_ref *) xcalloc (ABBREV_DIE_TABLE_INCREMENT,
10771 sizeof (dw_die_ref));
10772 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
10773 /* Zero-th entry is allocated, but unused */
10774 abbrev_die_table_in_use = 1;
10776 /* Allocate the initial hunk of the line_info_table. */
10778 = (dw_line_info_ref) xcalloc (LINE_INFO_TABLE_INCREMENT,
10779 sizeof (dw_line_info_entry));
10780 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
10781 /* Zero-th entry is allocated, but unused */
10782 line_info_table_in_use = 1;
10784 /* Generate the initial DIE for the .debug section. Note that the (string)
10785 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
10786 will (typically) be a relative pathname and that this pathname should be
10787 taken as being relative to the directory from which the compiler was
10788 invoked when the given (base) source file was compiled. */
10789 comp_unit_die = gen_compile_unit_die (main_input_filename);
10793 VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
10794 ggc_add_rtx_varray_root (&used_rtx_varray, 1);
10797 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
10798 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, ABBREV_SECTION_LABEL, 0);
10799 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
10800 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
10802 strcpy (text_section_label, stripattributes (TEXT_SECTION));
10803 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
10804 DEBUG_INFO_SECTION_LABEL, 0);
10805 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
10806 DEBUG_LINE_SECTION_LABEL, 0);
10808 ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION);
10809 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
10810 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
10812 ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION);
10813 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
10815 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_INFO_SECTION);
10816 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
10817 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
10818 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
10821 /* Output stuff that dwarf requires at the end of every file,
10822 and generate the DWARF-2 debugging info. */
10825 dwarf2out_finish ()
10827 limbo_die_node *node, *next_node;
10830 /* Traverse the limbo die list, and add parent/child links. The only
10831 dies without parents that should be here are concrete instances of
10832 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
10833 For concrete instances, we can get the parent die from the abstract
10835 for (node = limbo_die_list; node; node = next_node)
10837 next_node = node->next;
10840 if (die->die_parent == NULL)
10842 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
10844 add_child_die (origin->die_parent, die);
10845 else if (die == comp_unit_die)
10852 limbo_die_list = NULL;
10854 /* Walk through the list of incomplete types again, trying once more to
10855 emit full debugging info for them. */
10856 retry_incomplete_types ();
10858 /* We need to reverse all the dies before break_out_includes, or
10859 we'll see the end of an include file before the beginning. */
10860 reverse_all_dies (comp_unit_die);
10862 /* Generate separate CUs for each of the include files we've seen.
10863 They will go into limbo_die_list. */
10864 if (flag_eliminate_dwarf2_dups)
10865 break_out_includes (comp_unit_die);
10867 /* Traverse the DIE's and add add sibling attributes to those DIE's
10868 that have children. */
10869 add_sibling_attributes (comp_unit_die);
10870 for (node = limbo_die_list; node; node = node->next)
10871 add_sibling_attributes (node->die);
10873 /* Output a terminator label for the .text section. */
10874 fputc ('\n', asm_out_file);
10875 ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION);
10876 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, TEXT_END_LABEL, 0);
10879 /* Output a terminator label for the .data section. */
10880 fputc ('\n', asm_out_file);
10881 ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION);
10882 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, DATA_END_LABEL, 0);
10884 /* Output a terminator label for the .bss section. */
10885 fputc ('\n', asm_out_file);
10886 ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION);
10887 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0);
10890 /* Output the source line correspondence table. */
10891 if (line_info_table_in_use > 1 || separate_line_info_table_in_use)
10893 if (! DWARF2_ASM_LINE_DEBUG_INFO)
10895 fputc ('\n', asm_out_file);
10896 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
10897 output_line_info ();
10900 /* We can only use the low/high_pc attributes if all of the code
10902 if (separate_line_info_table_in_use == 0)
10904 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
10905 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
10908 add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
10909 debug_line_section_label);
10912 #if 0 /* unimplemented */
10913 if (debug_info_level >= DINFO_LEVEL_VERBOSE && primary)
10914 add_AT_unsigned (die, DW_AT_macro_info, 0);
10917 /* Output all of the compilation units. We put the main one last so that
10918 the offsets are available to output_pubnames. */
10919 for (node = limbo_die_list; node; node = node->next)
10920 output_comp_unit (node->die);
10921 output_comp_unit (comp_unit_die);
10923 /* Output the abbreviation table. */
10924 fputc ('\n', asm_out_file);
10925 ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION);
10926 output_abbrev_section ();
10928 if (pubname_table_in_use)
10930 /* Output public names table. */
10931 fputc ('\n', asm_out_file);
10932 ASM_OUTPUT_SECTION (asm_out_file, PUBNAMES_SECTION);
10933 output_pubnames ();
10936 /* We only put functions in the arange table, so don't write it out if
10937 we don't have any. */
10938 if (fde_table_in_use)
10940 /* Output the address range information. */
10941 fputc ('\n', asm_out_file);
10942 ASM_OUTPUT_SECTION (asm_out_file, ARANGES_SECTION);
10946 #endif /* DWARF2_DEBUGGING_INFO */