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 Eliminate duplicates by putting common info in a separate section
27 to be collected by the linker and referring to it with
29 Emit .debug_line header even when there are no functions, since
30 the file numbers are used by .debug_info. Alternately, leave
31 out locations for types and decls.
32 Avoid talking about ctors and op= for PODs.
33 Factor out common prologue sequences into multiple CIEs. */
35 /* The first part of this file deals with the DWARF 2 frame unwind
36 information, which is also used by the GCC efficient exception handling
37 mechanism. The second part, controlled only by an #ifdef
38 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
47 #include "hard-reg-set.h"
49 #include "insn-config.h"
55 #include "dwarf2out.h"
61 /* We cannot use <assert.h> in GCC source, since that would include
62 GCC's assert.h, which may not be compatible with the host compiler. */
67 # define assert(e) do { if (! (e)) abort (); } while (0)
70 /* Decide whether we want to emit frame unwind information for the current
76 return (write_symbols == DWARF2_DEBUG
77 #ifdef DWARF2_FRAME_INFO
80 #ifdef DWARF2_UNWIND_INFO
82 || (flag_exceptions && ! exceptions_via_longjmp)
87 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
89 /* How to start an assembler comment. */
90 #ifndef ASM_COMMENT_START
91 #define ASM_COMMENT_START ";#"
94 typedef struct dw_cfi_struct *dw_cfi_ref;
95 typedef struct dw_fde_struct *dw_fde_ref;
96 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
98 /* Call frames are described using a sequence of Call Frame
99 Information instructions. The register number, offset
100 and address fields are provided as possible operands;
101 their use is selected by the opcode field. */
103 typedef union dw_cfi_oprnd_struct
105 unsigned long dw_cfi_reg_num;
106 long int dw_cfi_offset;
107 const char *dw_cfi_addr;
108 struct dw_loc_descr_struct *dw_cfi_loc;
112 typedef struct dw_cfi_struct
114 dw_cfi_ref dw_cfi_next;
115 enum dwarf_call_frame_info dw_cfi_opc;
116 dw_cfi_oprnd dw_cfi_oprnd1;
117 dw_cfi_oprnd dw_cfi_oprnd2;
121 /* This is how we define the location of the CFA. We use to handle it
122 as REG + OFFSET all the time, but now it can be more complex.
123 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
124 Instead of passing around REG and OFFSET, we pass a copy
125 of this structure. */
126 typedef struct cfa_loc
131 int indirect; /* 1 if CFA is accessed via a dereference. */
134 /* All call frame descriptions (FDE's) in the GCC generated DWARF
135 refer to a single Common Information Entry (CIE), defined at
136 the beginning of the .debug_frame section. This used of a single
137 CIE obviates the need to keep track of multiple CIE's
138 in the DWARF generation routines below. */
140 typedef struct dw_fde_struct
142 const char *dw_fde_begin;
143 const char *dw_fde_current_label;
144 const char *dw_fde_end;
145 dw_cfi_ref dw_fde_cfi;
150 /* Maximum size (in bytes) of an artificially generated label. */
151 #define MAX_ARTIFICIAL_LABEL_BYTES 30
153 /* Make sure we know the sizes of the various types dwarf can describe. These
154 are only defaults. If the sizes are different for your target, you should
155 override these values by defining the appropriate symbols in your tm.h
158 #ifndef CHAR_TYPE_SIZE
159 #define CHAR_TYPE_SIZE BITS_PER_UNIT
162 /* The size of the target's pointer type. */
164 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
167 /* The size of addresses as they appear in the Dwarf 2 data.
168 Some architectures use word addresses to refer to code locations,
169 but Dwarf 2 info always uses byte addresses. On such machines,
170 Dwarf 2 addresses need to be larger than the architecture's
172 #ifndef DWARF2_ADDR_SIZE
173 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
176 /* The size in bytes of a DWARF field indicating an offset or length
177 relative to a debug info section, specified to be 4 bytes in the
178 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
181 #ifndef DWARF_OFFSET_SIZE
182 #define DWARF_OFFSET_SIZE 4
185 #define DWARF_VERSION 2
187 /* Round SIZE up to the nearest BOUNDARY. */
188 #define DWARF_ROUND(SIZE,BOUNDARY) \
189 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
191 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
192 #ifdef STACK_GROWS_DOWNWARD
193 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
195 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
198 /* A pointer to the base of a table that contains frame description
199 information for each routine. */
200 static dw_fde_ref fde_table;
202 /* Number of elements currently allocated for fde_table. */
203 static unsigned fde_table_allocated;
205 /* Number of elements in fde_table currently in use. */
206 static unsigned fde_table_in_use;
208 /* Size (in elements) of increments by which we may expand the
210 #define FDE_TABLE_INCREMENT 256
212 /* A list of call frame insns for the CIE. */
213 static dw_cfi_ref cie_cfi_head;
215 /* The number of the current function definition for which debugging
216 information is being generated. These numbers range from 1 up to the
217 maximum number of function definitions contained within the current
218 compilation unit. These numbers are used to create unique label id's
219 unique to each function definition. */
220 static unsigned current_funcdef_number = 0;
222 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
223 attribute that accelerates the lookup of the FDE associated
224 with the subprogram. This variable holds the table index of the FDE
225 associated with the current function (body) definition. */
226 static unsigned current_funcdef_fde;
228 /* Forward declarations for functions defined in this file. */
230 static char *stripattributes PARAMS ((const char *));
231 static const char *dwarf_cfi_name PARAMS ((unsigned));
232 static dw_cfi_ref new_cfi PARAMS ((void));
233 static void add_cfi PARAMS ((dw_cfi_ref *, dw_cfi_ref));
234 static unsigned long size_of_uleb128 PARAMS ((unsigned long));
235 static unsigned long size_of_sleb128 PARAMS ((long));
236 static void output_uleb128 PARAMS ((unsigned long));
237 static void output_sleb128 PARAMS ((long));
238 static void add_fde_cfi PARAMS ((const char *, dw_cfi_ref));
239 static void lookup_cfa_1 PARAMS ((dw_cfi_ref, dw_cfa_location *));
240 static void lookup_cfa PARAMS ((dw_cfa_location *));
241 static void reg_save PARAMS ((const char *, unsigned,
243 static void initial_return_save PARAMS ((rtx));
244 static void output_cfi PARAMS ((dw_cfi_ref, dw_fde_ref));
245 static void output_call_frame_info PARAMS ((int));
246 static void dwarf2out_stack_adjust PARAMS ((rtx));
247 static void dwarf2out_frame_debug_expr PARAMS ((rtx, const char *));
249 /* Support for complex CFA locations. */
250 static void output_cfa_loc PARAMS ((dw_cfi_ref));
251 static void get_cfa_from_loc_descr PARAMS ((dw_cfa_location *,
252 struct dw_loc_descr_struct *));
253 static struct dw_loc_descr_struct *build_cfa_loc
254 PARAMS ((dw_cfa_location *));
255 static void def_cfa_1 PARAMS ((const char *, dw_cfa_location *));
257 /* Definitions of defaults for assembler-dependent names of various
258 pseudo-ops and section names.
259 Theses may be overridden in the tm.h file (if necessary) for a particular
262 #ifdef OBJECT_FORMAT_ELF
263 #ifndef UNALIGNED_SHORT_ASM_OP
264 #define UNALIGNED_SHORT_ASM_OP ".2byte"
266 #ifndef UNALIGNED_INT_ASM_OP
267 #define UNALIGNED_INT_ASM_OP ".4byte"
269 #ifndef UNALIGNED_DOUBLE_INT_ASM_OP
270 #define UNALIGNED_DOUBLE_INT_ASM_OP ".8byte"
272 #endif /* OBJECT_FORMAT_ELF */
275 #define ASM_BYTE_OP ".byte"
278 /* Data and reference forms for relocatable data. */
279 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
280 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
282 /* Pseudo-op for defining a new section. */
283 #ifndef SECTION_ASM_OP
284 #define SECTION_ASM_OP ".section"
287 /* The default format used by the ASM_OUTPUT_SECTION macro (see below) to
288 print the SECTION_ASM_OP and the section name. The default here works for
289 almost all svr4 assemblers, except for the sparc, where the section name
290 must be enclosed in double quotes. (See sparcv4.h). */
291 #ifndef SECTION_FORMAT
292 #ifdef PUSHSECTION_FORMAT
293 #define SECTION_FORMAT PUSHSECTION_FORMAT
295 #define SECTION_FORMAT "\t%s\t%s\n"
299 #ifndef FRAME_SECTION
300 #define FRAME_SECTION ".debug_frame"
303 #ifndef FUNC_BEGIN_LABEL
304 #define FUNC_BEGIN_LABEL "LFB"
306 #ifndef FUNC_END_LABEL
307 #define FUNC_END_LABEL "LFE"
309 #define CIE_AFTER_SIZE_LABEL "LSCIE"
310 #define CIE_END_LABEL "LECIE"
311 #define CIE_LENGTH_LABEL "LLCIE"
312 #define FDE_AFTER_SIZE_LABEL "LSFDE"
313 #define FDE_END_LABEL "LEFDE"
314 #define FDE_LENGTH_LABEL "LLFDE"
316 /* Definitions of defaults for various types of primitive assembly language
317 output operations. These may be overridden from within the tm.h file,
318 but typically, that is unnecessary. */
320 #ifndef ASM_OUTPUT_SECTION
321 #define ASM_OUTPUT_SECTION(FILE, SECTION) \
322 fprintf ((FILE), SECTION_FORMAT, SECTION_ASM_OP, SECTION)
325 #ifndef ASM_OUTPUT_DWARF_DATA1
326 #define ASM_OUTPUT_DWARF_DATA1(FILE,VALUE) \
327 fprintf ((FILE), "\t%s\t0x%x", ASM_BYTE_OP, (unsigned) (VALUE))
330 #ifndef ASM_OUTPUT_DWARF_DELTA1
331 #define ASM_OUTPUT_DWARF_DELTA1(FILE,LABEL1,LABEL2) \
332 do { fprintf ((FILE), "\t%s\t", ASM_BYTE_OP); \
333 assemble_name (FILE, LABEL1); \
334 fprintf (FILE, "-"); \
335 assemble_name (FILE, LABEL2); \
339 #ifdef UNALIGNED_INT_ASM_OP
341 #ifndef UNALIGNED_OFFSET_ASM_OP
342 #define UNALIGNED_OFFSET_ASM_OP \
343 (DWARF_OFFSET_SIZE == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP : UNALIGNED_INT_ASM_OP)
346 #ifndef UNALIGNED_WORD_ASM_OP
347 #define UNALIGNED_WORD_ASM_OP \
348 ((DWARF2_ADDR_SIZE) == 8 ? UNALIGNED_DOUBLE_INT_ASM_OP \
349 : (DWARF2_ADDR_SIZE) == 2 ? UNALIGNED_SHORT_ASM_OP \
350 : UNALIGNED_INT_ASM_OP)
353 #ifndef ASM_OUTPUT_DWARF_DELTA2
354 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
355 do { fprintf ((FILE), "\t%s\t", UNALIGNED_SHORT_ASM_OP); \
356 assemble_name (FILE, LABEL1); \
357 fprintf (FILE, "-"); \
358 assemble_name (FILE, LABEL2); \
362 #ifndef ASM_OUTPUT_DWARF_DELTA4
363 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
364 do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \
365 assemble_name (FILE, LABEL1); \
366 fprintf (FILE, "-"); \
367 assemble_name (FILE, LABEL2); \
371 #ifndef ASM_OUTPUT_DWARF_DELTA
372 #define ASM_OUTPUT_DWARF_DELTA(FILE,LABEL1,LABEL2) \
373 do { fprintf ((FILE), "\t%s\t", UNALIGNED_OFFSET_ASM_OP); \
374 assemble_name (FILE, LABEL1); \
375 fprintf (FILE, "-"); \
376 assemble_name (FILE, LABEL2); \
380 #ifndef ASM_OUTPUT_DWARF_ADDR_DELTA
381 #define ASM_OUTPUT_DWARF_ADDR_DELTA(FILE,LABEL1,LABEL2) \
382 do { fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
383 assemble_name (FILE, LABEL1); \
384 fprintf (FILE, "-"); \
385 assemble_name (FILE, LABEL2); \
389 #ifndef ASM_OUTPUT_DWARF_ADDR
390 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
391 do { fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
392 assemble_name (FILE, LABEL); \
396 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
397 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) \
399 fprintf ((FILE), "\t%s\t", UNALIGNED_WORD_ASM_OP); \
400 output_addr_const ((FILE), (RTX)); \
404 #ifndef ASM_OUTPUT_DWARF_OFFSET4
405 #define ASM_OUTPUT_DWARF_OFFSET4(FILE,LABEL) \
406 do { fprintf ((FILE), "\t%s\t", UNALIGNED_INT_ASM_OP); \
407 assemble_name (FILE, LABEL); \
411 #ifndef ASM_OUTPUT_DWARF_OFFSET
412 #define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \
413 do { fprintf ((FILE), "\t%s\t", UNALIGNED_OFFSET_ASM_OP); \
414 assemble_name (FILE, LABEL); \
418 #ifndef ASM_OUTPUT_DWARF_DATA2
419 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
420 fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_SHORT_ASM_OP, (unsigned) (VALUE))
423 #ifndef ASM_OUTPUT_DWARF_DATA4
424 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
425 fprintf ((FILE), "\t%s\t0x%x", UNALIGNED_INT_ASM_OP, (unsigned) (VALUE))
428 #ifndef ASM_OUTPUT_DWARF_DATA8
429 #define ASM_OUTPUT_DWARF_DATA8(FILE,VALUE) \
430 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_DOUBLE_INT_ASM_OP, \
431 (unsigned long) (VALUE))
434 #ifndef ASM_OUTPUT_DWARF_DATA
435 #define ASM_OUTPUT_DWARF_DATA(FILE,VALUE) \
436 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_OFFSET_ASM_OP, \
437 (unsigned long) (VALUE))
440 #ifndef ASM_OUTPUT_DWARF_ADDR_DATA
441 #define ASM_OUTPUT_DWARF_ADDR_DATA(FILE,VALUE) \
442 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_WORD_ASM_OP, \
443 (unsigned long) (VALUE))
446 #ifndef ASM_OUTPUT_DWARF_CONST_DOUBLE
447 #define ASM_OUTPUT_DWARF_CONST_DOUBLE(FILE,HIGH_VALUE,LOW_VALUE) \
449 if (WORDS_BIG_ENDIAN) \
451 fprintf ((FILE), "\t%s\t0x%lx\n", UNALIGNED_INT_ASM_OP, (HIGH_VALUE));\
452 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_INT_ASM_OP, (LOW_VALUE));\
456 fprintf ((FILE), "\t%s\t0x%lx\n", UNALIGNED_INT_ASM_OP, (LOW_VALUE)); \
457 fprintf ((FILE), "\t%s\t0x%lx", UNALIGNED_INT_ASM_OP, (HIGH_VALUE)); \
462 #else /* UNALIGNED_INT_ASM_OP */
464 /* We don't have unaligned support, let's hope the normal output works for
465 .debug_frame. But we know it won't work for .debug_info. */
467 #ifdef DWARF2_DEBUGGING_INFO
468 #error DWARF2_DEBUGGING_INFO requires UNALIGNED_INT_ASM_OP.
471 #ifndef ASM_OUTPUT_DWARF_ADDR
472 #define ASM_OUTPUT_DWARF_ADDR(FILE,LABEL) \
473 assemble_integer (gen_rtx_SYMBOL_REF (Pmode, LABEL), DWARF2_ADDR_SIZE, 1)
476 #ifndef ASM_OUTPUT_DWARF_ADDR_CONST
477 #define ASM_OUTPUT_DWARF_ADDR_CONST(FILE,RTX) ASM_OUTPUT_DWARF_ADDR (FILE,RTX)
480 #ifndef ASM_OUTPUT_DWARF_OFFSET4
481 #define ASM_OUTPUT_DWARF_OFFSET4(FILE,LABEL) \
482 assemble_integer (gen_rtx_SYMBOL_REF (SImode, LABEL), 4, 1)
485 #ifndef ASM_OUTPUT_DWARF_OFFSET
486 #define ASM_OUTPUT_DWARF_OFFSET(FILE,LABEL) \
487 assemble_integer (gen_rtx_SYMBOL_REF (SImode, LABEL), 4, 1)
490 #ifndef ASM_OUTPUT_DWARF_DELTA2
491 #define ASM_OUTPUT_DWARF_DELTA2(FILE,LABEL1,LABEL2) \
492 assemble_integer (gen_rtx_MINUS (HImode, \
493 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
494 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
498 #ifndef ASM_OUTPUT_DWARF_DELTA4
499 #define ASM_OUTPUT_DWARF_DELTA4(FILE,LABEL1,LABEL2) \
500 assemble_integer (gen_rtx_MINUS (SImode, \
501 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
502 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
506 #ifndef ASM_OUTPUT_DWARF_ADDR_DELTA
507 #define ASM_OUTPUT_DWARF_ADDR_DELTA(FILE,LABEL1,LABEL2) \
508 assemble_integer (gen_rtx_MINUS (Pmode, \
509 gen_rtx_SYMBOL_REF (Pmode, LABEL1), \
510 gen_rtx_SYMBOL_REF (Pmode, LABEL2)), \
514 #ifndef ASM_OUTPUT_DWARF_DELTA
515 #define ASM_OUTPUT_DWARF_DELTA(FILE,LABEL1,LABEL2) \
516 ASM_OUTPUT_DWARF_DELTA4 (FILE,LABEL1,LABEL2)
519 #ifndef ASM_OUTPUT_DWARF_DATA2
520 #define ASM_OUTPUT_DWARF_DATA2(FILE,VALUE) \
521 assemble_integer (GEN_INT (VALUE), 2, 1)
524 #ifndef ASM_OUTPUT_DWARF_DATA4
525 #define ASM_OUTPUT_DWARF_DATA4(FILE,VALUE) \
526 assemble_integer (GEN_INT (VALUE), 4, 1)
529 #endif /* UNALIGNED_INT_ASM_OP */
532 #ifndef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
533 #define ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL(FILE, SY, HI, LO) \
535 fprintf (FILE, "\t%s\t", SET_ASM_OP); \
536 assemble_name (FILE, SY); \
538 assemble_name (FILE, HI); \
540 assemble_name (FILE, LO); \
543 #endif /* SET_ASM_OP */
545 /* This is similar to the default ASM_OUTPUT_ASCII, except that no trailing
546 newline is produced. When flag_debug_asm is asserted, we add commentary
547 at the end of the line, so we must avoid output of a newline here. */
548 #ifndef ASM_OUTPUT_DWARF_STRING
549 #define ASM_OUTPUT_DWARF_STRING(FILE,P) \
551 register int slen = strlen(P); \
552 register const char *p = (P); \
554 fprintf (FILE, "\t.ascii \""); \
555 for (i = 0; i < slen; i++) \
557 register int c = p[i]; \
558 if (c == '\"' || c == '\\') \
564 fprintf (FILE, "\\%o", c); \
567 fprintf (FILE, "\\0\""); \
572 /* The DWARF 2 CFA column which tracks the return address. Normally this
573 is the column for PC, or the first column after all of the hard
575 #ifndef DWARF_FRAME_RETURN_COLUMN
577 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
579 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
583 /* The mapping from gcc register number to DWARF 2 CFA column number. By
584 default, we just provide columns for all registers. */
585 #ifndef DWARF_FRAME_REGNUM
586 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
589 /* Hook used by __throw. */
592 expand_builtin_dwarf_fp_regnum ()
594 return GEN_INT (DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM));
597 /* The offset from the incoming value of %sp to the top of the stack frame
598 for the current function. */
599 #ifndef INCOMING_FRAME_SP_OFFSET
600 #define INCOMING_FRAME_SP_OFFSET 0
603 /* Return a pointer to a copy of the section string name S with all
604 attributes stripped off, and an asterisk prepended (for assemble_name). */
610 char *stripped = xmalloc (strlen (s) + 2);
615 while (*s && *s != ',')
622 /* Generate code to initialize the register size table. */
625 expand_builtin_init_dwarf_reg_sizes (address)
629 enum machine_mode mode = TYPE_MODE (char_type_node);
630 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
631 rtx mem = gen_rtx_MEM (mode, addr);
633 for (i = 0; i < DWARF_FRAME_REGISTERS; ++i)
635 int offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
636 int size = GET_MODE_SIZE (reg_raw_mode[i]);
641 emit_move_insn (change_address (mem, mode,
642 plus_constant (addr, offset)),
647 /* Convert a DWARF call frame info. operation to its string name */
650 dwarf_cfi_name (cfi_opc)
651 register unsigned cfi_opc;
655 case DW_CFA_advance_loc:
656 return "DW_CFA_advance_loc";
658 return "DW_CFA_offset";
660 return "DW_CFA_restore";
664 return "DW_CFA_set_loc";
665 case DW_CFA_advance_loc1:
666 return "DW_CFA_advance_loc1";
667 case DW_CFA_advance_loc2:
668 return "DW_CFA_advance_loc2";
669 case DW_CFA_advance_loc4:
670 return "DW_CFA_advance_loc4";
671 case DW_CFA_offset_extended:
672 return "DW_CFA_offset_extended";
673 case DW_CFA_restore_extended:
674 return "DW_CFA_restore_extended";
675 case DW_CFA_undefined:
676 return "DW_CFA_undefined";
677 case DW_CFA_same_value:
678 return "DW_CFA_same_value";
679 case DW_CFA_register:
680 return "DW_CFA_register";
681 case DW_CFA_remember_state:
682 return "DW_CFA_remember_state";
683 case DW_CFA_restore_state:
684 return "DW_CFA_restore_state";
686 return "DW_CFA_def_cfa";
687 case DW_CFA_def_cfa_register:
688 return "DW_CFA_def_cfa_register";
689 case DW_CFA_def_cfa_offset:
690 return "DW_CFA_def_cfa_offset";
691 case DW_CFA_def_cfa_expression:
692 return "DW_CFA_def_cfa_expression";
694 /* SGI/MIPS specific */
695 case DW_CFA_MIPS_advance_loc8:
696 return "DW_CFA_MIPS_advance_loc8";
699 case DW_CFA_GNU_window_save:
700 return "DW_CFA_GNU_window_save";
701 case DW_CFA_GNU_args_size:
702 return "DW_CFA_GNU_args_size";
703 case DW_CFA_GNU_negative_offset_extended:
704 return "DW_CFA_GNU_negative_offset_extended";
707 return "DW_CFA_<unknown>";
711 /* Return a pointer to a newly allocated Call Frame Instruction. */
713 static inline dw_cfi_ref
716 register dw_cfi_ref cfi = (dw_cfi_ref) xmalloc (sizeof (dw_cfi_node));
718 cfi->dw_cfi_next = NULL;
719 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
720 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
725 /* Add a Call Frame Instruction to list of instructions. */
728 add_cfi (list_head, cfi)
729 register dw_cfi_ref *list_head;
730 register dw_cfi_ref cfi;
732 register dw_cfi_ref *p;
734 /* Find the end of the chain. */
735 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
741 /* Generate a new label for the CFI info to refer to. */
744 dwarf2out_cfi_label ()
746 static char label[20];
747 static unsigned long label_num = 0;
749 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", label_num++);
750 ASM_OUTPUT_LABEL (asm_out_file, label);
755 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
756 or to the CIE if LABEL is NULL. */
759 add_fde_cfi (label, cfi)
760 register const char *label;
761 register dw_cfi_ref cfi;
765 register dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
768 label = dwarf2out_cfi_label ();
770 if (fde->dw_fde_current_label == NULL
771 || strcmp (label, fde->dw_fde_current_label) != 0)
773 register dw_cfi_ref xcfi;
775 fde->dw_fde_current_label = label = xstrdup (label);
777 /* Set the location counter to the new label. */
779 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
780 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
781 add_cfi (&fde->dw_fde_cfi, xcfi);
784 add_cfi (&fde->dw_fde_cfi, cfi);
788 add_cfi (&cie_cfi_head, cfi);
791 /* Subroutine of lookup_cfa. */
794 lookup_cfa_1 (cfi, loc)
795 register dw_cfi_ref cfi;
796 register dw_cfa_location *loc;
798 switch (cfi->dw_cfi_opc)
800 case DW_CFA_def_cfa_offset:
801 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
803 case DW_CFA_def_cfa_register:
804 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
807 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
808 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
810 case DW_CFA_def_cfa_expression:
811 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
818 /* Find the previous value for the CFA. */
822 register dw_cfa_location *loc;
824 register dw_cfi_ref cfi;
826 loc->reg = (unsigned long) -1;
829 loc->base_offset = 0;
831 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
832 lookup_cfa_1 (cfi, loc);
834 if (fde_table_in_use)
836 register dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
837 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
838 lookup_cfa_1 (cfi, loc);
842 /* The current rule for calculating the DWARF2 canonical frame address. */
845 /* The register used for saving registers to the stack, and its offset
847 dw_cfa_location cfa_store;
849 /* The running total of the size of arguments pushed onto the stack. */
850 static long args_size;
852 /* The last args_size we actually output. */
853 static long old_args_size;
855 /* Entry point to update the canonical frame address (CFA).
856 LABEL is passed to add_fde_cfi. The value of CFA is now to be
857 calculated from REG+OFFSET. */
860 dwarf2out_def_cfa (label, reg, offset)
861 register const char *label;
870 def_cfa_1 (label, &loc);
873 /* This routine does the actual work. The CFA is now calculated from
874 the dw_cfa_location structure. */
876 def_cfa_1 (label, loc_p)
877 register const char *label;
878 dw_cfa_location *loc_p;
880 register dw_cfi_ref cfi;
881 dw_cfa_location old_cfa, loc;
886 if (cfa_store.reg == loc.reg && loc.indirect == 0)
887 cfa_store.offset = loc.offset;
889 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
890 lookup_cfa (&old_cfa);
892 if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset &&
893 loc.indirect == old_cfa.indirect)
895 if (loc.indirect == 0
896 || loc.base_offset == old_cfa.base_offset)
902 if (loc.reg == old_cfa.reg && !loc.indirect)
904 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
905 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
908 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
909 else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
912 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
913 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
917 else if (loc.indirect == 0)
919 cfi->dw_cfi_opc = DW_CFA_def_cfa;
920 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
921 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
925 struct dw_loc_descr_struct * loc_list;
926 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
927 loc_list = build_cfa_loc (&loc);
928 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
931 add_fde_cfi (label, cfi);
934 /* Add the CFI for saving a register. REG is the CFA column number.
935 LABEL is passed to add_fde_cfi.
936 If SREG is -1, the register is saved at OFFSET from the CFA;
937 otherwise it is saved in SREG. */
940 reg_save (label, reg, sreg, offset)
941 register const char *label;
942 register unsigned reg;
943 register unsigned sreg;
944 register long offset;
946 register dw_cfi_ref cfi = new_cfi ();
948 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
950 /* The following comparison is correct. -1 is used to indicate that
951 the value isn't a register number. */
952 if (sreg == (unsigned int) -1)
955 /* The register number won't fit in 6 bits, so we have to use
957 cfi->dw_cfi_opc = DW_CFA_offset_extended;
959 cfi->dw_cfi_opc = DW_CFA_offset;
961 offset /= DWARF_CIE_DATA_ALIGNMENT;
964 cfi->dw_cfi_opc = DW_CFA_GNU_negative_offset_extended;
967 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
969 else if (sreg == reg)
970 /* We could emit a DW_CFA_same_value in this case, but don't bother. */
974 cfi->dw_cfi_opc = DW_CFA_register;
975 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
978 add_fde_cfi (label, cfi);
981 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
982 This CFI tells the unwinder that it needs to restore the window registers
983 from the previous frame's window save area.
985 ??? Perhaps we should note in the CIE where windows are saved (instead of
986 assuming 0(cfa)) and what registers are in the window. */
989 dwarf2out_window_save (label)
990 register const char *label;
992 register dw_cfi_ref cfi = new_cfi ();
993 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
994 add_fde_cfi (label, cfi);
997 /* Add a CFI to update the running total of the size of arguments
998 pushed onto the stack. */
1001 dwarf2out_args_size (label, size)
1005 register dw_cfi_ref cfi;
1007 if (size == old_args_size)
1009 old_args_size = size;
1012 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1013 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1014 add_fde_cfi (label, cfi);
1017 /* Entry point for saving a register to the stack. REG is the GCC register
1018 number. LABEL and OFFSET are passed to reg_save. */
1021 dwarf2out_reg_save (label, reg, offset)
1022 register const char *label;
1023 register unsigned reg;
1024 register long offset;
1026 reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset);
1029 /* Entry point for saving the return address in the stack.
1030 LABEL and OFFSET are passed to reg_save. */
1033 dwarf2out_return_save (label, offset)
1034 register const char *label;
1035 register long offset;
1037 reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset);
1040 /* Entry point for saving the return address in a register.
1041 LABEL and SREG are passed to reg_save. */
1044 dwarf2out_return_reg (label, sreg)
1045 register const char *label;
1046 register unsigned sreg;
1048 reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0);
1051 /* Record the initial position of the return address. RTL is
1052 INCOMING_RETURN_ADDR_RTX. */
1055 initial_return_save (rtl)
1058 unsigned int reg = (unsigned int) -1;
1061 switch (GET_CODE (rtl))
1064 /* RA is in a register. */
1065 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1068 /* RA is on the stack. */
1069 rtl = XEXP (rtl, 0);
1070 switch (GET_CODE (rtl))
1073 if (REGNO (rtl) != STACK_POINTER_REGNUM)
1078 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
1080 offset = INTVAL (XEXP (rtl, 1));
1083 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
1085 offset = -INTVAL (XEXP (rtl, 1));
1092 /* The return address is at some offset from any value we can
1093 actually load. For instance, on the SPARC it is in %i7+8. Just
1094 ignore the offset for now; it doesn't matter for unwinding frames. */
1095 if (GET_CODE (XEXP (rtl, 1)) != CONST_INT)
1097 initial_return_save (XEXP (rtl, 0));
1103 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1106 /* Check INSN to see if it looks like a push or a stack adjustment, and
1107 make a note of it if it does. EH uses this information to find out how
1108 much extra space it needs to pop off the stack. */
1111 dwarf2out_stack_adjust (insn)
1117 if (! asynchronous_exceptions && GET_CODE (insn) == CALL_INSN)
1119 /* Extract the size of the args from the CALL rtx itself. */
1121 insn = PATTERN (insn);
1122 if (GET_CODE (insn) == PARALLEL)
1123 insn = XVECEXP (insn, 0, 0);
1124 if (GET_CODE (insn) == SET)
1125 insn = SET_SRC (insn);
1126 assert (GET_CODE (insn) == CALL);
1127 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1131 /* If only calls can throw, and we have a frame pointer,
1132 save up adjustments until we see the CALL_INSN. */
1133 else if (! asynchronous_exceptions
1134 && cfa.reg != STACK_POINTER_REGNUM)
1137 if (GET_CODE (insn) == BARRIER)
1139 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1140 the compiler will have already emitted a stack adjustment, but
1141 doesn't bother for calls to noreturn functions. */
1142 #ifdef STACK_GROWS_DOWNWARD
1143 offset = -args_size;
1148 else if (GET_CODE (PATTERN (insn)) == SET)
1153 insn = PATTERN (insn);
1154 src = SET_SRC (insn);
1155 dest = SET_DEST (insn);
1157 if (dest == stack_pointer_rtx)
1159 /* (set (reg sp) (plus (reg sp) (const_int))) */
1160 code = GET_CODE (src);
1161 if (! (code == PLUS || code == MINUS)
1162 || XEXP (src, 0) != stack_pointer_rtx
1163 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1166 offset = INTVAL (XEXP (src, 1));
1168 else if (GET_CODE (dest) == MEM)
1170 /* (set (mem (pre_dec (reg sp))) (foo)) */
1171 src = XEXP (dest, 0);
1172 code = GET_CODE (src);
1174 if (! (code == PRE_DEC || code == PRE_INC)
1175 || XEXP (src, 0) != stack_pointer_rtx)
1178 offset = GET_MODE_SIZE (GET_MODE (dest));
1183 if (code == PLUS || code == PRE_INC)
1192 if (cfa.reg == STACK_POINTER_REGNUM)
1193 cfa.offset += offset;
1195 #ifndef STACK_GROWS_DOWNWARD
1198 args_size += offset;
1202 label = dwarf2out_cfi_label ();
1203 def_cfa_1 (label, &cfa);
1204 dwarf2out_args_size (label, args_size);
1207 /* A temporary register used in adjusting SP or setting up the store_reg. */
1208 static unsigned cfa_temp_reg;
1210 /* A temporary value used in adjusting SP or setting up the store_reg. */
1211 static long cfa_temp_value;
1213 /* Record call frame debugging information for an expression, which either
1214 sets SP or FP (adjusting how we calculate the frame address) or saves a
1215 register to the stack. */
1218 dwarf2out_frame_debug_expr (expr, label)
1225 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1226 the PARALLEL independently. The first element is always processed if
1227 it is a SET. This is for backward compatability. Other elements
1228 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1229 flag is set in them. */
1231 if (GET_CODE (expr) == PARALLEL
1232 || GET_CODE (expr) == SEQUENCE)
1235 int limit = XVECLEN (expr, 0);
1237 for (par_index = 0; par_index < limit; par_index++)
1239 rtx x = XVECEXP (expr, 0, par_index);
1241 if (GET_CODE (x) == SET &&
1242 (RTX_FRAME_RELATED_P (x) || par_index == 0))
1243 dwarf2out_frame_debug_expr (x, label);
1248 if (GET_CODE (expr) != SET)
1251 src = SET_SRC (expr);
1252 dest = SET_DEST (expr);
1254 switch (GET_CODE (dest))
1257 /* Update the CFA rule wrt SP or FP. Make sure src is
1258 relative to the current CFA register. */
1259 switch (GET_CODE (src))
1261 /* Setting FP from SP. */
1263 if (cfa.reg == (unsigned) REGNO (src))
1268 /* We used to require that dest be either SP or FP, but the
1269 ARM copies SP to a temporary register, and from there to
1270 FP. So we just rely on the backends to only set
1271 RTX_FRAME_RELATED_P on appropriate insns. */
1272 cfa.reg = REGNO (dest);
1277 if (dest == stack_pointer_rtx)
1280 switch (GET_CODE (XEXP (src, 1)))
1283 offset = INTVAL (XEXP (src, 1));
1286 if ((unsigned) REGNO (XEXP (src, 1)) != cfa_temp_reg)
1288 offset = cfa_temp_value;
1294 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1296 /* Restoring SP from FP in the epilogue. */
1297 if (cfa.reg != (unsigned) HARD_FRAME_POINTER_REGNUM)
1299 cfa.reg = STACK_POINTER_REGNUM;
1301 else if (XEXP (src, 0) != stack_pointer_rtx)
1304 if (GET_CODE (src) == PLUS)
1306 if (cfa.reg == STACK_POINTER_REGNUM)
1307 cfa.offset += offset;
1308 if (cfa_store.reg == STACK_POINTER_REGNUM)
1309 cfa_store.offset += offset;
1311 else if (dest == hard_frame_pointer_rtx)
1313 /* Either setting the FP from an offset of the SP,
1314 or adjusting the FP */
1315 if (! frame_pointer_needed)
1318 if (GET_CODE (XEXP (src, 0)) == REG
1319 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1320 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1322 offset = INTVAL (XEXP (src, 1));
1323 if (GET_CODE (src) == PLUS)
1325 cfa.offset += offset;
1326 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1333 if (GET_CODE (src) != PLUS
1334 || XEXP (src, 1) != stack_pointer_rtx)
1336 if (GET_CODE (XEXP (src, 0)) != REG
1337 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg)
1339 if (cfa.reg != STACK_POINTER_REGNUM)
1341 cfa_store.reg = REGNO (dest);
1342 cfa_store.offset = cfa.offset - cfa_temp_value;
1347 cfa_temp_reg = REGNO (dest);
1348 cfa_temp_value = INTVAL (src);
1352 if (GET_CODE (XEXP (src, 0)) != REG
1353 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp_reg
1354 || (unsigned) REGNO (dest) != cfa_temp_reg
1355 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1357 cfa_temp_value |= INTVAL (XEXP (src, 1));
1363 def_cfa_1 (label, &cfa);
1366 /* Skip over HIGH, assuming it will be followed by a LO_SUM, which
1367 will fill in all of the bits. */
1372 cfa_temp_reg = REGNO (dest);
1373 cfa_temp_value = INTVAL (XEXP (src, 1));
1377 if (GET_CODE (src) != REG)
1380 /* Saving a register to the stack. Make sure dest is relative to the
1382 switch (GET_CODE (XEXP (dest, 0)))
1387 offset = GET_MODE_SIZE (GET_MODE (dest));
1388 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1391 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1392 || cfa_store.reg != STACK_POINTER_REGNUM)
1394 cfa_store.offset += offset;
1395 if (cfa.reg == STACK_POINTER_REGNUM)
1396 cfa.offset = cfa_store.offset;
1398 offset = -cfa_store.offset;
1401 /* With an offset. */
1404 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1405 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1408 if (cfa_store.reg != (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1410 offset -= cfa_store.offset;
1413 /* Without an offset. */
1415 if (cfa_store.reg != (unsigned) REGNO (XEXP (dest, 0)))
1417 offset = -cfa_store.offset;
1424 if (REGNO (src) != STACK_POINTER_REGNUM
1425 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1426 && (unsigned) REGNO (src) == cfa.reg)
1428 /* We're storing the current CFA reg into the stack. */
1430 if (cfa.offset == 0)
1432 /* If the source register is exactly the CFA, assume
1433 we're saving SP like any other register; this happens
1436 def_cfa_1 (label, &cfa);
1437 dwarf2out_reg_save (label, STACK_POINTER_REGNUM, offset);
1442 /* Otherwise, we'll need to look in the stack to
1443 calculate the CFA. */
1445 rtx x = XEXP (dest, 0);
1446 if (GET_CODE (x) != REG)
1448 if (GET_CODE (x) != REG)
1450 cfa.reg = (unsigned) REGNO (x);
1451 cfa.base_offset = offset;
1453 def_cfa_1 (label, &cfa);
1458 def_cfa_1 (label, &cfa);
1459 dwarf2out_reg_save (label, REGNO (src), offset);
1468 /* Record call frame debugging information for INSN, which either
1469 sets SP or FP (adjusting how we calculate the frame address) or saves a
1470 register to the stack. If INSN is NULL_RTX, initialize our state. */
1473 dwarf2out_frame_debug (insn)
1479 if (insn == NULL_RTX)
1481 /* Set up state for generating call frame debug info. */
1483 if (cfa.reg != (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM))
1485 cfa.reg = STACK_POINTER_REGNUM;
1492 if (! RTX_FRAME_RELATED_P (insn))
1494 dwarf2out_stack_adjust (insn);
1498 label = dwarf2out_cfi_label ();
1500 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1502 insn = XEXP (src, 0);
1504 insn = PATTERN (insn);
1506 dwarf2out_frame_debug_expr (insn, label);
1509 /* Return the size of an unsigned LEB128 quantity. */
1511 static inline unsigned long
1512 size_of_uleb128 (value)
1513 register unsigned long value;
1515 register unsigned long size = 0;
1516 register unsigned byte;
1520 byte = (value & 0x7f);
1529 /* Return the size of a signed LEB128 quantity. */
1531 static inline unsigned long
1532 size_of_sleb128 (value)
1533 register long value;
1535 register unsigned long size = 0;
1536 register unsigned byte;
1540 byte = (value & 0x7f);
1544 while (!(((value == 0) && ((byte & 0x40) == 0))
1545 || ((value == -1) && ((byte & 0x40) != 0))));
1550 /* Output an unsigned LEB128 quantity. */
1553 output_uleb128 (value)
1554 register unsigned long value;
1556 unsigned long save_value = value;
1558 fprintf (asm_out_file, "\t%s\t", ASM_BYTE_OP);
1561 register unsigned byte = (value & 0x7f);
1564 /* More bytes to follow. */
1567 fprintf (asm_out_file, "0x%x", byte);
1569 fprintf (asm_out_file, ",");
1574 fprintf (asm_out_file, "\t%s ULEB128 0x%lx", ASM_COMMENT_START, save_value);
1577 /* Output an signed LEB128 quantity. */
1580 output_sleb128 (value)
1581 register long value;
1584 register unsigned byte;
1585 long save_value = value;
1587 fprintf (asm_out_file, "\t%s\t", ASM_BYTE_OP);
1590 byte = (value & 0x7f);
1591 /* arithmetic shift */
1593 more = !((((value == 0) && ((byte & 0x40) == 0))
1594 || ((value == -1) && ((byte & 0x40) != 0))));
1598 fprintf (asm_out_file, "0x%x", byte);
1600 fprintf (asm_out_file, ",");
1605 fprintf (asm_out_file, "\t%s SLEB128 %ld", ASM_COMMENT_START, save_value);
1608 /* Output a Call Frame Information opcode and its operand(s). */
1611 output_cfi (cfi, fde)
1612 register dw_cfi_ref cfi;
1613 register dw_fde_ref fde;
1615 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
1617 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1619 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f));
1621 fprintf (asm_out_file, "\t%s DW_CFA_advance_loc 0x%lx",
1622 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
1623 fputc ('\n', asm_out_file);
1626 else if (cfi->dw_cfi_opc == DW_CFA_offset)
1628 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1630 | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
1632 fprintf (asm_out_file, "\t%s DW_CFA_offset, column 0x%lx",
1633 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1635 fputc ('\n', asm_out_file);
1636 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset);
1637 fputc ('\n', asm_out_file);
1639 else if (cfi->dw_cfi_opc == DW_CFA_restore)
1641 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
1643 | (cfi->dw_cfi_oprnd1.dw_cfi_reg_num & 0x3f));
1645 fprintf (asm_out_file, "\t%s DW_CFA_restore, column 0x%lx",
1646 ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1648 fputc ('\n', asm_out_file);
1652 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, cfi->dw_cfi_opc);
1654 fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
1655 dwarf_cfi_name (cfi->dw_cfi_opc));
1657 fputc ('\n', asm_out_file);
1658 switch (cfi->dw_cfi_opc)
1660 case DW_CFA_set_loc:
1661 ASM_OUTPUT_DWARF_ADDR (asm_out_file, cfi->dw_cfi_oprnd1.dw_cfi_addr);
1662 fputc ('\n', asm_out_file);
1664 case DW_CFA_advance_loc1:
1665 ASM_OUTPUT_DWARF_DELTA1 (asm_out_file,
1666 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1667 fde->dw_fde_current_label);
1668 fputc ('\n', asm_out_file);
1669 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1671 case DW_CFA_advance_loc2:
1672 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file,
1673 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1674 fde->dw_fde_current_label);
1675 fputc ('\n', asm_out_file);
1676 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1678 case DW_CFA_advance_loc4:
1679 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file,
1680 cfi->dw_cfi_oprnd1.dw_cfi_addr,
1681 fde->dw_fde_current_label);
1682 fputc ('\n', asm_out_file);
1683 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1685 #ifdef MIPS_DEBUGGING_INFO
1686 case DW_CFA_MIPS_advance_loc8:
1687 /* TODO: not currently implemented. */
1691 case DW_CFA_offset_extended:
1692 case DW_CFA_GNU_negative_offset_extended:
1693 case DW_CFA_def_cfa:
1694 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1695 fputc ('\n', asm_out_file);
1696 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset);
1697 fputc ('\n', asm_out_file);
1699 case DW_CFA_restore_extended:
1700 case DW_CFA_undefined:
1701 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1702 fputc ('\n', asm_out_file);
1704 case DW_CFA_same_value:
1705 case DW_CFA_def_cfa_register:
1706 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1707 fputc ('\n', asm_out_file);
1709 case DW_CFA_register:
1710 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
1711 fputc ('\n', asm_out_file);
1712 output_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
1713 fputc ('\n', asm_out_file);
1715 case DW_CFA_def_cfa_offset:
1716 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset);
1717 fputc ('\n', asm_out_file);
1719 case DW_CFA_GNU_window_save:
1721 case DW_CFA_GNU_args_size:
1722 output_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset);
1723 fputc ('\n', asm_out_file);
1725 case DW_CFA_def_cfa_expression:
1726 output_cfa_loc (cfi);
1734 /* Output the call frame information used to used to record information
1735 that relates to calculating the frame pointer, and records the
1736 location of saved registers. */
1739 output_call_frame_info (for_eh)
1742 register unsigned long i;
1743 register dw_fde_ref fde;
1744 register dw_cfi_ref cfi;
1745 char l1[20], l2[20];
1746 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1750 /* Do we want to include a pointer to the exception table? */
1751 int eh_ptr = for_eh && exception_table_p ();
1753 /* If we don't have any functions we'll want to unwind out of, don't
1754 emit any EH unwind information. */
1757 for (i = 0; i < fde_table_in_use; ++i)
1758 if (! fde_table[i].nothrow)
1764 fputc ('\n', asm_out_file);
1766 /* We're going to be generating comments, so turn on app. */
1772 #ifdef EH_FRAME_SECTION
1773 EH_FRAME_SECTION ();
1775 tree label = get_file_function_name ('F');
1777 force_data_section ();
1778 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1779 ASM_GLOBALIZE_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
1780 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
1782 assemble_label ("__FRAME_BEGIN__");
1785 ASM_OUTPUT_SECTION (asm_out_file, FRAME_SECTION);
1787 /* Output the CIE. */
1788 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
1789 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
1790 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1791 ASM_GENERATE_INTERNAL_LABEL (ld, CIE_LENGTH_LABEL, for_eh);
1793 ASM_OUTPUT_DWARF_OFFSET4 (asm_out_file, ld);
1795 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
1798 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
1800 ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
1803 fprintf (asm_out_file, "\t%s Length of Common Information Entry",
1806 fputc ('\n', asm_out_file);
1807 ASM_OUTPUT_LABEL (asm_out_file, l1);
1810 /* Now that the CIE pointer is PC-relative for EH,
1811 use 0 to identify the CIE. */
1812 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
1814 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
1817 fprintf (asm_out_file, "\t%s CIE Identifier Tag", ASM_COMMENT_START);
1819 fputc ('\n', asm_out_file);
1820 if (! for_eh && DWARF_OFFSET_SIZE == 8)
1822 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, DW_CIE_ID);
1823 fputc ('\n', asm_out_file);
1826 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_CIE_VERSION);
1828 fprintf (asm_out_file, "\t%s CIE Version", ASM_COMMENT_START);
1830 fputc ('\n', asm_out_file);
1833 /* The CIE contains a pointer to the exception region info for the
1834 frame. Make the augmentation string three bytes (including the
1835 trailing null) so the pointer is 4-byte aligned. The Solaris ld
1836 can't handle unaligned relocs. */
1839 ASM_OUTPUT_DWARF_STRING (asm_out_file, "eh");
1840 fprintf (asm_out_file, "\t%s CIE Augmentation", ASM_COMMENT_START);
1844 ASM_OUTPUT_ASCII (asm_out_file, "eh", 3);
1846 fputc ('\n', asm_out_file);
1848 ASM_OUTPUT_DWARF_ADDR (asm_out_file, "__EXCEPTION_TABLE__");
1850 fprintf (asm_out_file, "\t%s pointer to exception region info",
1855 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
1857 fprintf (asm_out_file, "\t%s CIE Augmentation (none)",
1861 fputc ('\n', asm_out_file);
1864 fprintf (asm_out_file, " (CIE Code Alignment Factor)");
1866 fputc ('\n', asm_out_file);
1867 output_sleb128 (DWARF_CIE_DATA_ALIGNMENT);
1869 fprintf (asm_out_file, " (CIE Data Alignment Factor)");
1871 fputc ('\n', asm_out_file);
1872 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_FRAME_RETURN_COLUMN);
1874 fprintf (asm_out_file, "\t%s CIE RA Column", ASM_COMMENT_START);
1876 fputc ('\n', asm_out_file);
1878 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
1879 output_cfi (cfi, NULL);
1881 /* Pad the CIE out to an address sized boundary. */
1882 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1883 ASM_OUTPUT_LABEL (asm_out_file, l2);
1884 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1885 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
1887 fprintf (asm_out_file, "\t%s CIE Length Symbol", ASM_COMMENT_START);
1888 fputc ('\n', asm_out_file);
1891 /* Loop through all of the FDE's. */
1892 for (i = 0; i < fde_table_in_use; ++i)
1894 fde = &fde_table[i];
1896 /* Don't emit EH unwind info for leaf functions. */
1897 if (for_eh && fde->nothrow)
1900 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i*2);
1901 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i*2);
1902 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1903 ASM_GENERATE_INTERNAL_LABEL (ld, FDE_LENGTH_LABEL, for_eh + i*2);
1905 ASM_OUTPUT_DWARF_OFFSET4 (asm_out_file, ld);
1907 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, ld);
1910 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l2, l1);
1912 ASM_OUTPUT_DWARF_DELTA (asm_out_file, l2, l1);
1915 fprintf (asm_out_file, "\t%s FDE Length", ASM_COMMENT_START);
1916 fputc ('\n', asm_out_file);
1917 ASM_OUTPUT_LABEL (asm_out_file, l1);
1919 /* ??? This always emits a 4 byte offset when for_eh is true, but it
1920 emits a target dependent sized offset when for_eh is not true.
1921 This inconsistency may confuse gdb. The only case where we need a
1922 non-4 byte offset is for the Irix6 N64 ABI, so we may lose SGI
1923 compatibility if we emit a 4 byte offset. We need a 4 byte offset
1924 though in order to be compatible with the dwarf_fde struct in frame.c.
1925 If the for_eh case is changed, then the struct in frame.c has
1926 to be adjusted appropriately. */
1928 ASM_OUTPUT_DWARF_DELTA4 (asm_out_file, l1, "__FRAME_BEGIN__");
1930 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, stripattributes (FRAME_SECTION));
1932 fprintf (asm_out_file, "\t%s FDE CIE offset", ASM_COMMENT_START);
1934 fputc ('\n', asm_out_file);
1935 ASM_OUTPUT_DWARF_ADDR (asm_out_file, fde->dw_fde_begin);
1937 fprintf (asm_out_file, "\t%s FDE initial location", ASM_COMMENT_START);
1939 fputc ('\n', asm_out_file);
1940 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file,
1941 fde->dw_fde_end, fde->dw_fde_begin);
1943 fprintf (asm_out_file, "\t%s FDE address range", ASM_COMMENT_START);
1945 fputc ('\n', asm_out_file);
1947 /* Loop through the Call Frame Instructions associated with
1949 fde->dw_fde_current_label = fde->dw_fde_begin;
1950 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
1951 output_cfi (cfi, fde);
1953 /* Pad the FDE out to an address sized boundary. */
1954 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (DWARF2_ADDR_SIZE));
1955 ASM_OUTPUT_LABEL (asm_out_file, l2);
1956 #ifdef ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL
1957 ASM_OUTPUT_DEFINE_LABEL_DIFFERENCE_SYMBOL (asm_out_file, ld, l2, l1);
1959 fprintf (asm_out_file, "\t%s FDE Length Symbol", ASM_COMMENT_START);
1960 fputc ('\n', asm_out_file);
1963 #ifndef EH_FRAME_SECTION
1966 /* Emit terminating zero for table. */
1967 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, 0);
1968 fputc ('\n', asm_out_file);
1971 #ifdef MIPS_DEBUGGING_INFO
1972 /* Work around Irix 6 assembler bug whereby labels at the end of a section
1973 get a value of 0. Putting .align 0 after the label fixes it. */
1974 ASM_OUTPUT_ALIGN (asm_out_file, 0);
1977 /* Turn off app to make assembly quicker. */
1982 /* Output a marker (i.e. a label) for the beginning of a function, before
1986 dwarf2out_begin_prologue ()
1988 char label[MAX_ARTIFICIAL_LABEL_BYTES];
1989 register dw_fde_ref fde;
1991 ++current_funcdef_number;
1993 function_section (current_function_decl);
1994 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
1995 current_funcdef_number);
1996 ASM_OUTPUT_LABEL (asm_out_file, label);
1997 current_function_func_begin_label = get_identifier (label);
1999 /* Expand the fde table if necessary. */
2000 if (fde_table_in_use == fde_table_allocated)
2002 fde_table_allocated += FDE_TABLE_INCREMENT;
2004 = (dw_fde_ref) xrealloc (fde_table,
2005 fde_table_allocated * sizeof (dw_fde_node));
2008 /* Record the FDE associated with this function. */
2009 current_funcdef_fde = fde_table_in_use;
2011 /* Add the new FDE at the end of the fde_table. */
2012 fde = &fde_table[fde_table_in_use++];
2013 fde->dw_fde_begin = xstrdup (label);
2014 fde->dw_fde_current_label = NULL;
2015 fde->dw_fde_end = NULL;
2016 fde->dw_fde_cfi = NULL;
2017 fde->nothrow = current_function_nothrow;
2019 args_size = old_args_size = 0;
2022 /* Output a marker (i.e. a label) for the absolute end of the generated code
2023 for a function definition. This gets called *after* the epilogue code has
2027 dwarf2out_end_epilogue ()
2030 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2032 /* Output a label to mark the endpoint of the code generated for this
2034 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL, current_funcdef_number);
2035 ASM_OUTPUT_LABEL (asm_out_file, label);
2036 fde = &fde_table[fde_table_in_use - 1];
2037 fde->dw_fde_end = xstrdup (label);
2041 dwarf2out_frame_init ()
2043 /* Allocate the initial hunk of the fde_table. */
2044 fde_table = (dw_fde_ref) xcalloc (FDE_TABLE_INCREMENT, sizeof (dw_fde_node));
2045 fde_table_allocated = FDE_TABLE_INCREMENT;
2046 fde_table_in_use = 0;
2048 /* Generate the CFA instructions common to all FDE's. Do it now for the
2049 sake of lookup_cfa. */
2051 #ifdef DWARF2_UNWIND_INFO
2052 /* On entry, the Canonical Frame Address is at SP. */
2053 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2054 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2059 dwarf2out_frame_finish ()
2061 /* Output call frame information. */
2062 #ifdef MIPS_DEBUGGING_INFO
2063 if (write_symbols == DWARF2_DEBUG)
2064 output_call_frame_info (0);
2065 if (flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
2066 output_call_frame_info (1);
2068 if (write_symbols == DWARF2_DEBUG
2069 || flag_unwind_tables || (flag_exceptions && ! exceptions_via_longjmp))
2070 output_call_frame_info (1);
2074 /* And now, the subset of the debugging information support code necessary
2075 for emitting location expressions. */
2077 typedef struct dw_val_struct *dw_val_ref;
2078 typedef struct die_struct *dw_die_ref;
2079 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2081 /* Each DIE may have a series of attribute/value pairs. Values
2082 can take on several forms. The forms that are used in this
2083 implementation are listed below. */
2090 dw_val_class_unsigned_const,
2091 dw_val_class_long_long,
2094 dw_val_class_die_ref,
2095 dw_val_class_fde_ref,
2096 dw_val_class_lbl_id,
2097 dw_val_class_lbl_offset,
2102 /* Describe a double word constant value. */
2103 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2105 typedef struct dw_long_long_struct
2112 /* Describe a floating point constant value. */
2114 typedef struct dw_fp_struct
2121 /* The dw_val_node describes an attribute's value, as it is
2122 represented internally. */
2124 typedef struct dw_val_struct
2126 dw_val_class val_class;
2130 dw_loc_descr_ref val_loc;
2132 long unsigned val_unsigned;
2133 dw_long_long_const val_long_long;
2134 dw_float_const val_float;
2135 dw_die_ref val_die_ref;
2136 unsigned val_fde_index;
2139 unsigned char val_flag;
2145 /* Locations in memory are described using a sequence of stack machine
2148 typedef struct dw_loc_descr_struct
2150 dw_loc_descr_ref dw_loc_next;
2151 enum dwarf_location_atom dw_loc_opc;
2152 dw_val_node dw_loc_oprnd1;
2153 dw_val_node dw_loc_oprnd2;
2157 static const char *dwarf_stack_op_name PARAMS ((unsigned));
2158 static dw_loc_descr_ref new_loc_descr PARAMS ((enum dwarf_location_atom,
2161 static void add_loc_descr PARAMS ((dw_loc_descr_ref *,
2163 static unsigned long size_of_loc_descr PARAMS ((dw_loc_descr_ref));
2164 static unsigned long size_of_locs PARAMS ((dw_loc_descr_ref));
2165 static void output_loc_operands PARAMS ((dw_loc_descr_ref));
2166 static void output_loc_sequence PARAMS ((dw_loc_descr_ref));
2168 /* Convert a DWARF stack opcode into its string name. */
2171 dwarf_stack_op_name (op)
2172 register unsigned op;
2177 return "DW_OP_addr";
2179 return "DW_OP_deref";
2181 return "DW_OP_const1u";
2183 return "DW_OP_const1s";
2185 return "DW_OP_const2u";
2187 return "DW_OP_const2s";
2189 return "DW_OP_const4u";
2191 return "DW_OP_const4s";
2193 return "DW_OP_const8u";
2195 return "DW_OP_const8s";
2197 return "DW_OP_constu";
2199 return "DW_OP_consts";
2203 return "DW_OP_drop";
2205 return "DW_OP_over";
2207 return "DW_OP_pick";
2209 return "DW_OP_swap";
2213 return "DW_OP_xderef";
2221 return "DW_OP_minus";
2233 return "DW_OP_plus";
2234 case DW_OP_plus_uconst:
2235 return "DW_OP_plus_uconst";
2241 return "DW_OP_shra";
2259 return "DW_OP_skip";
2261 return "DW_OP_lit0";
2263 return "DW_OP_lit1";
2265 return "DW_OP_lit2";
2267 return "DW_OP_lit3";
2269 return "DW_OP_lit4";
2271 return "DW_OP_lit5";
2273 return "DW_OP_lit6";
2275 return "DW_OP_lit7";
2277 return "DW_OP_lit8";
2279 return "DW_OP_lit9";
2281 return "DW_OP_lit10";
2283 return "DW_OP_lit11";
2285 return "DW_OP_lit12";
2287 return "DW_OP_lit13";
2289 return "DW_OP_lit14";
2291 return "DW_OP_lit15";
2293 return "DW_OP_lit16";
2295 return "DW_OP_lit17";
2297 return "DW_OP_lit18";
2299 return "DW_OP_lit19";
2301 return "DW_OP_lit20";
2303 return "DW_OP_lit21";
2305 return "DW_OP_lit22";
2307 return "DW_OP_lit23";
2309 return "DW_OP_lit24";
2311 return "DW_OP_lit25";
2313 return "DW_OP_lit26";
2315 return "DW_OP_lit27";
2317 return "DW_OP_lit28";
2319 return "DW_OP_lit29";
2321 return "DW_OP_lit30";
2323 return "DW_OP_lit31";
2325 return "DW_OP_reg0";
2327 return "DW_OP_reg1";
2329 return "DW_OP_reg2";
2331 return "DW_OP_reg3";
2333 return "DW_OP_reg4";
2335 return "DW_OP_reg5";
2337 return "DW_OP_reg6";
2339 return "DW_OP_reg7";
2341 return "DW_OP_reg8";
2343 return "DW_OP_reg9";
2345 return "DW_OP_reg10";
2347 return "DW_OP_reg11";
2349 return "DW_OP_reg12";
2351 return "DW_OP_reg13";
2353 return "DW_OP_reg14";
2355 return "DW_OP_reg15";
2357 return "DW_OP_reg16";
2359 return "DW_OP_reg17";
2361 return "DW_OP_reg18";
2363 return "DW_OP_reg19";
2365 return "DW_OP_reg20";
2367 return "DW_OP_reg21";
2369 return "DW_OP_reg22";
2371 return "DW_OP_reg23";
2373 return "DW_OP_reg24";
2375 return "DW_OP_reg25";
2377 return "DW_OP_reg26";
2379 return "DW_OP_reg27";
2381 return "DW_OP_reg28";
2383 return "DW_OP_reg29";
2385 return "DW_OP_reg30";
2387 return "DW_OP_reg31";
2389 return "DW_OP_breg0";
2391 return "DW_OP_breg1";
2393 return "DW_OP_breg2";
2395 return "DW_OP_breg3";
2397 return "DW_OP_breg4";
2399 return "DW_OP_breg5";
2401 return "DW_OP_breg6";
2403 return "DW_OP_breg7";
2405 return "DW_OP_breg8";
2407 return "DW_OP_breg9";
2409 return "DW_OP_breg10";
2411 return "DW_OP_breg11";
2413 return "DW_OP_breg12";
2415 return "DW_OP_breg13";
2417 return "DW_OP_breg14";
2419 return "DW_OP_breg15";
2421 return "DW_OP_breg16";
2423 return "DW_OP_breg17";
2425 return "DW_OP_breg18";
2427 return "DW_OP_breg19";
2429 return "DW_OP_breg20";
2431 return "DW_OP_breg21";
2433 return "DW_OP_breg22";
2435 return "DW_OP_breg23";
2437 return "DW_OP_breg24";
2439 return "DW_OP_breg25";
2441 return "DW_OP_breg26";
2443 return "DW_OP_breg27";
2445 return "DW_OP_breg28";
2447 return "DW_OP_breg29";
2449 return "DW_OP_breg30";
2451 return "DW_OP_breg31";
2453 return "DW_OP_regx";
2455 return "DW_OP_fbreg";
2457 return "DW_OP_bregx";
2459 return "DW_OP_piece";
2460 case DW_OP_deref_size:
2461 return "DW_OP_deref_size";
2462 case DW_OP_xderef_size:
2463 return "DW_OP_xderef_size";
2467 return "OP_<unknown>";
2472 /* Return a pointer to a newly allocated location description. Location
2473 descriptions are simple expression terms that can be strung
2474 together to form more complicated location (address) descriptions. */
2476 static inline dw_loc_descr_ref
2477 new_loc_descr (op, oprnd1, oprnd2)
2478 register enum dwarf_location_atom op;
2479 register unsigned long oprnd1;
2480 register unsigned long oprnd2;
2482 register dw_loc_descr_ref descr
2483 = (dw_loc_descr_ref) xmalloc (sizeof (dw_loc_descr_node));
2485 descr->dw_loc_next = NULL;
2486 descr->dw_loc_opc = op;
2487 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
2488 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
2489 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
2490 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
2495 /* Add a location description term to a location description expression. */
2498 add_loc_descr (list_head, descr)
2499 register dw_loc_descr_ref *list_head;
2500 register dw_loc_descr_ref descr;
2502 register dw_loc_descr_ref *d;
2504 /* Find the end of the chain. */
2505 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
2511 /* Return the size of a location descriptor. */
2513 static unsigned long
2514 size_of_loc_descr (loc)
2515 register dw_loc_descr_ref loc;
2517 register unsigned long size = 1;
2519 switch (loc->dw_loc_opc)
2522 size += DWARF2_ADDR_SIZE;
2541 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2544 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2549 case DW_OP_plus_uconst:
2550 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2588 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2591 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2594 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2597 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2598 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
2601 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2603 case DW_OP_deref_size:
2604 case DW_OP_xderef_size:
2614 /* Return the size of a series of location descriptors. */
2616 static unsigned long
2618 register dw_loc_descr_ref loc;
2620 register unsigned long size = 0;
2622 for (; loc != NULL; loc = loc->dw_loc_next)
2623 size += size_of_loc_descr (loc);
2628 /* Output location description stack opcode's operands (if any). */
2631 output_loc_operands (loc)
2632 register dw_loc_descr_ref loc;
2634 register dw_val_ref val1 = &loc->dw_loc_oprnd1;
2635 register dw_val_ref val2 = &loc->dw_loc_oprnd2;
2637 switch (loc->dw_loc_opc)
2639 #ifdef DWARF2_DEBUGGING_INFO
2641 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, val1->v.val_addr);
2642 fputc ('\n', asm_out_file);
2646 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, val1->v.val_int);
2647 fputc ('\n', asm_out_file);
2651 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, val1->v.val_int);
2652 fputc ('\n', asm_out_file);
2657 fputc ('\n', asm_out_file);
2661 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, val1->v.val_int);
2662 fputc ('\n', asm_out_file);
2674 /* We currently don't make any attempt to make sure these are
2675 aligned properly like we do for the main unwind info, so
2676 don't support emitting things larger than a byte if we're
2677 only doing unwinding. */
2682 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_flag);
2683 fputc ('\n', asm_out_file);
2686 output_uleb128 (val1->v.val_unsigned);
2687 fputc ('\n', asm_out_file);
2690 output_sleb128 (val1->v.val_int);
2691 fputc ('\n', asm_out_file);
2694 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_int);
2695 fputc ('\n', asm_out_file);
2697 case DW_OP_plus_uconst:
2698 output_uleb128 (val1->v.val_unsigned);
2699 fputc ('\n', asm_out_file);
2733 output_sleb128 (val1->v.val_int);
2734 fputc ('\n', asm_out_file);
2737 output_uleb128 (val1->v.val_unsigned);
2738 fputc ('\n', asm_out_file);
2741 output_sleb128 (val1->v.val_int);
2742 fputc ('\n', asm_out_file);
2745 output_uleb128 (val1->v.val_unsigned);
2746 fputc ('\n', asm_out_file);
2747 output_sleb128 (val2->v.val_int);
2748 fputc ('\n', asm_out_file);
2751 output_uleb128 (val1->v.val_unsigned);
2752 fputc ('\n', asm_out_file);
2754 case DW_OP_deref_size:
2755 case DW_OP_xderef_size:
2756 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, val1->v.val_flag);
2757 fputc ('\n', asm_out_file);
2760 /* Other codes have no operands. */
2765 /* Output a sequence of location operations. */
2768 output_loc_sequence (loc)
2769 dw_loc_descr_ref loc;
2771 for (; loc != NULL; loc = loc->dw_loc_next)
2773 /* Output the opcode. */
2774 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, loc->dw_loc_opc);
2776 fprintf (asm_out_file, "\t%s %s", ASM_COMMENT_START,
2777 dwarf_stack_op_name (loc->dw_loc_opc));
2779 fputc ('\n', asm_out_file);
2781 /* Output the operand(s) (if any). */
2782 output_loc_operands (loc);
2786 /* This routine will generate the correct assembly data for a location
2787 description based on a cfi entry with a complex address. */
2790 output_cfa_loc (cfi)
2793 dw_loc_descr_ref loc;
2796 /* Output the size of the block. */
2797 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
2798 size = size_of_locs (loc);
2799 output_uleb128 (size);
2800 fputc ('\n', asm_out_file);
2802 /* Now output the operations themselves. */
2803 output_loc_sequence (loc);
2806 /* This function builds a dwarf location descriptor seqeunce from
2807 a dw_cfa_location. */
2809 static struct dw_loc_descr_struct *
2811 dw_cfa_location *cfa;
2813 struct dw_loc_descr_struct *head, *tmp;
2815 if (cfa->indirect == 0)
2818 if (cfa->base_offset)
2819 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
2821 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
2822 head->dw_loc_oprnd1.val_class = dw_val_class_const;
2823 tmp = new_loc_descr (DW_OP_deref, 0, 0);
2824 add_loc_descr (&head, tmp);
2825 if (cfa->offset != 0)
2827 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
2828 add_loc_descr (&head, tmp);
2833 /* This function fills in aa dw_cfa_location structure from a
2834 dwarf location descriptor sequence. */
2837 get_cfa_from_loc_descr (cfa, loc)
2838 dw_cfa_location *cfa;
2839 struct dw_loc_descr_struct * loc;
2841 struct dw_loc_descr_struct * ptr;
2843 cfa->base_offset = 0;
2847 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
2849 enum dwarf_location_atom op = ptr->dw_loc_opc;
2884 cfa->reg = op - DW_OP_reg0;
2887 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
2921 cfa->reg = op - DW_OP_breg0;
2922 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
2925 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
2926 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
2931 case DW_OP_plus_uconst:
2932 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
2935 fatal ("DW_LOC_OP %s not implememnted yet.\n",
2936 dwarf_stack_op_name (ptr->dw_loc_opc));
2940 #endif /* .debug_frame support */
2942 /* And now, the support for symbolic debugging information. */
2943 #ifdef DWARF2_DEBUGGING_INFO
2945 /* NOTE: In the comments in this file, many references are made to
2946 "Debugging Information Entries". This term is abbreviated as `DIE'
2947 throughout the remainder of this file. */
2949 /* An internal representation of the DWARF output is built, and then
2950 walked to generate the DWARF debugging info. The walk of the internal
2951 representation is done after the entire program has been compiled.
2952 The types below are used to describe the internal representation. */
2954 /* Various DIE's use offsets relative to the beginning of the
2955 .debug_info section to refer to each other. */
2957 typedef long int dw_offset;
2959 /* Define typedefs here to avoid circular dependencies. */
2961 typedef struct dw_attr_struct *dw_attr_ref;
2962 typedef struct dw_line_info_struct *dw_line_info_ref;
2963 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
2964 typedef struct pubname_struct *pubname_ref;
2965 typedef dw_die_ref *arange_ref;
2967 /* Each entry in the line_info_table maintains the file and
2968 line number associated with the label generated for that
2969 entry. The label gives the PC value associated with
2970 the line number entry. */
2972 typedef struct dw_line_info_struct
2974 unsigned long dw_file_num;
2975 unsigned long dw_line_num;
2979 /* Line information for functions in separate sections; each one gets its
2981 typedef struct dw_separate_line_info_struct
2983 unsigned long dw_file_num;
2984 unsigned long dw_line_num;
2985 unsigned long function;
2987 dw_separate_line_info_entry;
2989 /* Each DIE attribute has a field specifying the attribute kind,
2990 a link to the next attribute in the chain, and an attribute value.
2991 Attributes are typically linked below the DIE they modify. */
2993 typedef struct dw_attr_struct
2995 enum dwarf_attribute dw_attr;
2996 dw_attr_ref dw_attr_next;
2997 dw_val_node dw_attr_val;
3001 /* The Debugging Information Entry (DIE) structure */
3003 typedef struct die_struct
3005 enum dwarf_tag die_tag;
3006 dw_attr_ref die_attr;
3007 dw_die_ref die_parent;
3008 dw_die_ref die_child;
3010 dw_offset die_offset;
3011 unsigned long die_abbrev;
3015 /* The pubname structure */
3017 typedef struct pubname_struct
3024 /* The limbo die list structure. */
3025 typedef struct limbo_die_struct
3028 struct limbo_die_struct *next;
3032 /* How to start an assembler comment. */
3033 #ifndef ASM_COMMENT_START
3034 #define ASM_COMMENT_START ";#"
3037 /* Define a macro which returns non-zero for a TYPE_DECL which was
3038 implicitly generated for a tagged type.
3040 Note that unlike the gcc front end (which generates a NULL named
3041 TYPE_DECL node for each complete tagged type, each array type, and
3042 each function type node created) the g++ front end generates a
3043 _named_ TYPE_DECL node for each tagged type node created.
3044 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3045 generate a DW_TAG_typedef DIE for them. */
3047 #define TYPE_DECL_IS_STUB(decl) \
3048 (DECL_NAME (decl) == NULL_TREE \
3049 || (DECL_ARTIFICIAL (decl) \
3050 && is_tagged_type (TREE_TYPE (decl)) \
3051 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3052 /* This is necessary for stub decls that \
3053 appear in nested inline functions. */ \
3054 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3055 && (decl_ultimate_origin (decl) \
3056 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3058 /* Information concerning the compilation unit's programming
3059 language, and compiler version. */
3061 extern int flag_traditional;
3063 /* Fixed size portion of the DWARF compilation unit header. */
3064 #define DWARF_COMPILE_UNIT_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 3)
3066 /* Fixed size portion of debugging line information prolog. */
3067 #define DWARF_LINE_PROLOG_HEADER_SIZE 5
3069 /* Fixed size portion of public names info. */
3070 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3072 /* Fixed size portion of the address range info. */
3073 #define DWARF_ARANGES_HEADER_SIZE \
3074 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3075 - DWARF_OFFSET_SIZE)
3077 /* Size of padding portion in the address range info. It must be
3078 aligned to twice the pointer size. */
3079 #define DWARF_ARANGES_PAD_SIZE \
3080 (DWARF_ROUND (2 * DWARF_OFFSET_SIZE + 4, DWARF2_ADDR_SIZE * 2) \
3081 - (2 * DWARF_OFFSET_SIZE + 4))
3083 /* The default is to have gcc emit the line number tables. */
3084 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3085 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3088 /* Define the architecture-dependent minimum instruction length (in bytes).
3089 In this implementation of DWARF, this field is used for information
3090 purposes only. Since GCC generates assembly language, we have
3091 no a priori knowledge of how many instruction bytes are generated
3092 for each source line, and therefore can use only the DW_LNE_set_address
3093 and DW_LNS_fixed_advance_pc line information commands. */
3095 #ifndef DWARF_LINE_MIN_INSTR_LENGTH
3096 #define DWARF_LINE_MIN_INSTR_LENGTH 4
3099 /* Minimum line offset in a special line info. opcode.
3100 This value was chosen to give a reasonable range of values. */
3101 #define DWARF_LINE_BASE -10
3103 /* First special line opcde - leave room for the standard opcodes. */
3104 #define DWARF_LINE_OPCODE_BASE 10
3106 /* Range of line offsets in a special line info. opcode. */
3107 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3109 /* Flag that indicates the initial value of the is_stmt_start flag.
3110 In the present implementation, we do not mark any lines as
3111 the beginning of a source statement, because that information
3112 is not made available by the GCC front-end. */
3113 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3115 /* This location is used by calc_die_sizes() to keep track
3116 the offset of each DIE within the .debug_info section. */
3117 static unsigned long next_die_offset;
3119 /* Record the root of the DIE's built for the current compilation unit. */
3120 static dw_die_ref comp_unit_die;
3122 /* A list of DIEs with a NULL parent waiting to be relocated. */
3123 static limbo_die_node *limbo_die_list = 0;
3125 /* Pointer to an array of filenames referenced by this compilation unit. */
3126 static char **file_table;
3128 /* Total number of entries in the table (i.e. array) pointed to by
3129 `file_table'. This is the *total* and includes both used and unused
3131 static unsigned file_table_allocated;
3133 /* Number of entries in the file_table which are actually in use. */
3134 static unsigned file_table_in_use;
3136 /* Size (in elements) of increments by which we may expand the filename
3138 #define FILE_TABLE_INCREMENT 64
3140 /* Local pointer to the name of the main input file. Initialized in
3142 static const char *primary_filename;
3144 /* A pointer to the base of a table of references to DIE's that describe
3145 declarations. The table is indexed by DECL_UID() which is a unique
3146 number identifying each decl. */
3147 static dw_die_ref *decl_die_table;
3149 /* Number of elements currently allocated for the decl_die_table. */
3150 static unsigned decl_die_table_allocated;
3152 /* Number of elements in decl_die_table currently in use. */
3153 static unsigned decl_die_table_in_use;
3155 /* Size (in elements) of increments by which we may expand the
3157 #define DECL_DIE_TABLE_INCREMENT 256
3159 /* A pointer to the base of a table of references to declaration
3160 scopes. This table is a display which tracks the nesting
3161 of declaration scopes at the current scope and containing
3162 scopes. This table is used to find the proper place to
3163 define type declaration DIE's. */
3164 static tree *decl_scope_table;
3166 /* Number of elements currently allocated for the decl_scope_table. */
3167 static int decl_scope_table_allocated;
3169 /* Current level of nesting of declaration scopes. */
3170 static int decl_scope_depth;
3172 /* Size (in elements) of increments by which we may expand the
3173 decl_scope_table. */
3174 #define DECL_SCOPE_TABLE_INCREMENT 64
3176 /* A pointer to the base of a list of references to DIE's that
3177 are uniquely identified by their tag, presence/absence of
3178 children DIE's, and list of attribute/value pairs. */
3179 static dw_die_ref *abbrev_die_table;
3181 /* Number of elements currently allocated for abbrev_die_table. */
3182 static unsigned abbrev_die_table_allocated;
3184 /* Number of elements in type_die_table currently in use. */
3185 static unsigned abbrev_die_table_in_use;
3187 /* Size (in elements) of increments by which we may expand the
3188 abbrev_die_table. */
3189 #define ABBREV_DIE_TABLE_INCREMENT 256
3191 /* A pointer to the base of a table that contains line information
3192 for each source code line in .text in the compilation unit. */
3193 static dw_line_info_ref line_info_table;
3195 /* Number of elements currently allocated for line_info_table. */
3196 static unsigned line_info_table_allocated;
3198 /* Number of elements in separate_line_info_table currently in use. */
3199 static unsigned separate_line_info_table_in_use;
3201 /* A pointer to the base of a table that contains line information
3202 for each source code line outside of .text in the compilation unit. */
3203 static dw_separate_line_info_ref separate_line_info_table;
3205 /* Number of elements currently allocated for separate_line_info_table. */
3206 static unsigned separate_line_info_table_allocated;
3208 /* Number of elements in line_info_table currently in use. */
3209 static unsigned line_info_table_in_use;
3211 /* Size (in elements) of increments by which we may expand the
3213 #define LINE_INFO_TABLE_INCREMENT 1024
3215 /* A pointer to the base of a table that contains a list of publicly
3216 accessible names. */
3217 static pubname_ref pubname_table;
3219 /* Number of elements currently allocated for pubname_table. */
3220 static unsigned pubname_table_allocated;
3222 /* Number of elements in pubname_table currently in use. */
3223 static unsigned pubname_table_in_use;
3225 /* Size (in elements) of increments by which we may expand the
3227 #define PUBNAME_TABLE_INCREMENT 64
3229 /* A pointer to the base of a table that contains a list of publicly
3230 accessible names. */
3231 static arange_ref arange_table;
3233 /* Number of elements currently allocated for arange_table. */
3234 static unsigned arange_table_allocated;
3236 /* Number of elements in arange_table currently in use. */
3237 static unsigned arange_table_in_use;
3239 /* Size (in elements) of increments by which we may expand the
3241 #define ARANGE_TABLE_INCREMENT 64
3243 /* A pointer to the base of a list of incomplete types which might be
3244 completed at some later time. */
3246 static tree *incomplete_types_list;
3248 /* Number of elements currently allocated for the incomplete_types_list. */
3249 static unsigned incomplete_types_allocated;
3251 /* Number of elements of incomplete_types_list currently in use. */
3252 static unsigned incomplete_types;
3254 /* Size (in elements) of increments by which we may expand the incomplete
3255 types list. Actually, a single hunk of space of this size should
3256 be enough for most typical programs. */
3257 #define INCOMPLETE_TYPES_INCREMENT 64
3259 /* Record whether the function being analyzed contains inlined functions. */
3260 static int current_function_has_inlines;
3261 #if 0 && defined (MIPS_DEBUGGING_INFO)
3262 static int comp_unit_has_inlines;
3265 /* Array of RTXes referenced by the debugging information, which therefore
3266 must be kept around forever. We do this rather than perform GC on
3267 the dwarf info because almost all of the dwarf info lives forever, and
3268 it's easier to support non-GC frontends this way. */
3269 static varray_type used_rtx_varray;
3271 /* Forward declarations for functions defined in this file. */
3273 static int is_pseudo_reg PARAMS ((rtx));
3274 static tree type_main_variant PARAMS ((tree));
3275 static int is_tagged_type PARAMS ((tree));
3276 static const char *dwarf_tag_name PARAMS ((unsigned));
3277 static const char *dwarf_attr_name PARAMS ((unsigned));
3278 static const char *dwarf_form_name PARAMS ((unsigned));
3280 static const char *dwarf_type_encoding_name PARAMS ((unsigned));
3282 static tree decl_ultimate_origin PARAMS ((tree));
3283 static tree block_ultimate_origin PARAMS ((tree));
3284 static tree decl_class_context PARAMS ((tree));
3285 static void add_dwarf_attr PARAMS ((dw_die_ref, dw_attr_ref));
3286 static void add_AT_flag PARAMS ((dw_die_ref,
3287 enum dwarf_attribute,
3289 static void add_AT_int PARAMS ((dw_die_ref,
3290 enum dwarf_attribute, long));
3291 static void add_AT_unsigned PARAMS ((dw_die_ref,
3292 enum dwarf_attribute,
3294 static void add_AT_long_long PARAMS ((dw_die_ref,
3295 enum dwarf_attribute,
3298 static void add_AT_float PARAMS ((dw_die_ref,
3299 enum dwarf_attribute,
3301 static void add_AT_string PARAMS ((dw_die_ref,
3302 enum dwarf_attribute,
3304 static void add_AT_die_ref PARAMS ((dw_die_ref,
3305 enum dwarf_attribute,
3307 static void add_AT_fde_ref PARAMS ((dw_die_ref,
3308 enum dwarf_attribute,
3310 static void add_AT_loc PARAMS ((dw_die_ref,
3311 enum dwarf_attribute,
3313 static void add_AT_addr PARAMS ((dw_die_ref,
3314 enum dwarf_attribute,
3316 static void add_AT_lbl_id PARAMS ((dw_die_ref,
3317 enum dwarf_attribute,
3319 static void add_AT_lbl_offset PARAMS ((dw_die_ref,
3320 enum dwarf_attribute,
3322 static dw_attr_ref get_AT PARAMS ((dw_die_ref,
3323 enum dwarf_attribute));
3324 static const char *get_AT_low_pc PARAMS ((dw_die_ref));
3325 static const char *get_AT_hi_pc PARAMS ((dw_die_ref));
3326 static const char *get_AT_string PARAMS ((dw_die_ref,
3327 enum dwarf_attribute));
3328 static int get_AT_flag PARAMS ((dw_die_ref,
3329 enum dwarf_attribute));
3330 static unsigned get_AT_unsigned PARAMS ((dw_die_ref,
3331 enum dwarf_attribute));
3332 static inline dw_die_ref get_AT_ref PARAMS ((dw_die_ref,
3333 enum dwarf_attribute));
3334 static int is_c_family PARAMS ((void));
3335 static int is_fortran PARAMS ((void));
3336 static void remove_AT PARAMS ((dw_die_ref,
3337 enum dwarf_attribute));
3338 static void remove_children PARAMS ((dw_die_ref));
3339 static void add_child_die PARAMS ((dw_die_ref, dw_die_ref));
3340 static dw_die_ref new_die PARAMS ((enum dwarf_tag, dw_die_ref));
3341 static dw_die_ref lookup_type_die PARAMS ((tree));
3342 static void equate_type_number_to_die PARAMS ((tree, dw_die_ref));
3343 static dw_die_ref lookup_decl_die PARAMS ((tree));
3344 static void equate_decl_number_to_die PARAMS ((tree, dw_die_ref));
3345 static void print_spaces PARAMS ((FILE *));
3346 static void print_die PARAMS ((dw_die_ref, FILE *));
3347 static void print_dwarf_line_table PARAMS ((FILE *));
3348 static void add_sibling_attributes PARAMS ((dw_die_ref));
3349 static void build_abbrev_table PARAMS ((dw_die_ref));
3350 static unsigned long size_of_string PARAMS ((const char *));
3351 static int constant_size PARAMS ((long unsigned));
3352 static unsigned long size_of_die PARAMS ((dw_die_ref));
3353 static void calc_die_sizes PARAMS ((dw_die_ref));
3354 static unsigned long size_of_line_prolog PARAMS ((void));
3355 static unsigned long size_of_pubnames PARAMS ((void));
3356 static unsigned long size_of_aranges PARAMS ((void));
3357 static enum dwarf_form value_format PARAMS ((dw_attr_ref));
3358 static void output_value_format PARAMS ((dw_attr_ref));
3359 static void output_abbrev_section PARAMS ((void));
3360 static void output_die PARAMS ((dw_die_ref));
3361 static void output_compilation_unit_header PARAMS ((void));
3362 static const char *dwarf2_name PARAMS ((tree, int));
3363 static void add_pubname PARAMS ((tree, dw_die_ref));
3364 static void output_pubnames PARAMS ((void));
3365 static void add_arange PARAMS ((tree, dw_die_ref));
3366 static void output_aranges PARAMS ((void));
3367 static void output_line_info PARAMS ((void));
3368 static dw_die_ref base_type_die PARAMS ((tree));
3369 static tree root_type PARAMS ((tree));
3370 static int is_base_type PARAMS ((tree));
3371 static dw_die_ref modified_type_die PARAMS ((tree, int, int, dw_die_ref));
3372 static int type_is_enum PARAMS ((tree));
3373 static unsigned int reg_number PARAMS ((rtx));
3374 static dw_loc_descr_ref reg_loc_descriptor PARAMS ((rtx));
3375 static dw_loc_descr_ref based_loc_descr PARAMS ((unsigned, long));
3376 static int is_based_loc PARAMS ((rtx));
3377 static dw_loc_descr_ref mem_loc_descriptor PARAMS ((rtx, enum machine_mode mode));
3378 static dw_loc_descr_ref concat_loc_descriptor PARAMS ((rtx, rtx));
3379 static dw_loc_descr_ref loc_descriptor PARAMS ((rtx));
3380 static HOST_WIDE_INT ceiling PARAMS ((HOST_WIDE_INT, unsigned int));
3381 static tree field_type PARAMS ((tree));
3382 static unsigned int simple_type_align_in_bits PARAMS ((tree));
3383 static unsigned HOST_WIDE_INT simple_type_size_in_bits PARAMS ((tree));
3384 static HOST_WIDE_INT field_byte_offset PARAMS ((tree));
3385 static void add_AT_location_description PARAMS ((dw_die_ref,
3386 enum dwarf_attribute, rtx));
3387 static void add_data_member_location_attribute PARAMS ((dw_die_ref, tree));
3388 static void add_const_value_attribute PARAMS ((dw_die_ref, rtx));
3389 static void add_location_or_const_value_attribute PARAMS ((dw_die_ref, tree));
3390 static void add_name_attribute PARAMS ((dw_die_ref, const char *));
3391 static void add_bound_info PARAMS ((dw_die_ref,
3392 enum dwarf_attribute, tree));
3393 static void add_subscript_info PARAMS ((dw_die_ref, tree));
3394 static void add_byte_size_attribute PARAMS ((dw_die_ref, tree));
3395 static void add_bit_offset_attribute PARAMS ((dw_die_ref, tree));
3396 static void add_bit_size_attribute PARAMS ((dw_die_ref, tree));
3397 static void add_prototyped_attribute PARAMS ((dw_die_ref, tree));
3398 static void add_abstract_origin_attribute PARAMS ((dw_die_ref, tree));
3399 static void add_pure_or_virtual_attribute PARAMS ((dw_die_ref, tree));
3400 static void add_src_coords_attributes PARAMS ((dw_die_ref, tree));
3401 static void add_name_and_src_coords_attributes PARAMS ((dw_die_ref, tree));
3402 static void push_decl_scope PARAMS ((tree));
3403 static dw_die_ref scope_die_for PARAMS ((tree, dw_die_ref));
3404 static void pop_decl_scope PARAMS ((void));
3405 static void add_type_attribute PARAMS ((dw_die_ref, tree, int, int,
3407 static const char *type_tag PARAMS ((tree));
3408 static tree member_declared_type PARAMS ((tree));
3410 static const char *decl_start_label PARAMS ((tree));
3412 static void gen_array_type_die PARAMS ((tree, dw_die_ref));
3413 static void gen_set_type_die PARAMS ((tree, dw_die_ref));
3415 static void gen_entry_point_die PARAMS ((tree, dw_die_ref));
3417 static void gen_inlined_enumeration_type_die PARAMS ((tree, dw_die_ref));
3418 static void gen_inlined_structure_type_die PARAMS ((tree, dw_die_ref));
3419 static void gen_inlined_union_type_die PARAMS ((tree, dw_die_ref));
3420 static void gen_enumeration_type_die PARAMS ((tree, dw_die_ref));
3421 static dw_die_ref gen_formal_parameter_die PARAMS ((tree, dw_die_ref));
3422 static void gen_unspecified_parameters_die PARAMS ((tree, dw_die_ref));
3423 static void gen_formal_types_die PARAMS ((tree, dw_die_ref));
3424 static void gen_subprogram_die PARAMS ((tree, dw_die_ref));
3425 static void gen_variable_die PARAMS ((tree, dw_die_ref));
3426 static void gen_label_die PARAMS ((tree, dw_die_ref));
3427 static void gen_lexical_block_die PARAMS ((tree, dw_die_ref, int));
3428 static void gen_inlined_subroutine_die PARAMS ((tree, dw_die_ref, int));
3429 static void gen_field_die PARAMS ((tree, dw_die_ref));
3430 static void gen_ptr_to_mbr_type_die PARAMS ((tree, dw_die_ref));
3431 static dw_die_ref gen_compile_unit_die PARAMS ((const char *));
3432 static void gen_string_type_die PARAMS ((tree, dw_die_ref));
3433 static void gen_inheritance_die PARAMS ((tree, dw_die_ref));
3434 static void gen_member_die PARAMS ((tree, dw_die_ref));
3435 static void gen_struct_or_union_type_die PARAMS ((tree, dw_die_ref));
3436 static void gen_subroutine_type_die PARAMS ((tree, dw_die_ref));
3437 static void gen_typedef_die PARAMS ((tree, dw_die_ref));
3438 static void gen_type_die PARAMS ((tree, dw_die_ref));
3439 static void gen_tagged_type_instantiation_die PARAMS ((tree, dw_die_ref));
3440 static void gen_block_die PARAMS ((tree, dw_die_ref, int));
3441 static void decls_for_scope PARAMS ((tree, dw_die_ref, int));
3442 static int is_redundant_typedef PARAMS ((tree));
3443 static void gen_decl_die PARAMS ((tree, dw_die_ref));
3444 static unsigned lookup_filename PARAMS ((const char *));
3445 static void add_incomplete_type PARAMS ((tree));
3446 static void retry_incomplete_types PARAMS ((void));
3447 static void gen_type_die_for_member PARAMS ((tree, tree, dw_die_ref));
3448 static void gen_abstract_function PARAMS ((tree));
3449 static rtx save_rtx PARAMS ((rtx));
3450 static void splice_child_die PARAMS ((dw_die_ref, dw_die_ref));
3451 static void reverse_die_lists PARAMS ((dw_die_ref));
3453 /* Section names used to hold DWARF debugging information. */
3454 #ifndef DEBUG_INFO_SECTION
3455 #define DEBUG_INFO_SECTION ".debug_info"
3457 #ifndef ABBREV_SECTION
3458 #define ABBREV_SECTION ".debug_abbrev"
3460 #ifndef ARANGES_SECTION
3461 #define ARANGES_SECTION ".debug_aranges"
3463 #ifndef DW_MACINFO_SECTION
3464 #define DW_MACINFO_SECTION ".debug_macinfo"
3466 #ifndef DEBUG_LINE_SECTION
3467 #define DEBUG_LINE_SECTION ".debug_line"
3470 #define LOC_SECTION ".debug_loc"
3472 #ifndef PUBNAMES_SECTION
3473 #define PUBNAMES_SECTION ".debug_pubnames"
3476 #define STR_SECTION ".debug_str"
3479 /* Standard ELF section names for compiled code and data. */
3480 #ifndef TEXT_SECTION
3481 #define TEXT_SECTION ".text"
3483 #ifndef DATA_SECTION
3484 #define DATA_SECTION ".data"
3487 #define BSS_SECTION ".bss"
3490 /* Labels we insert at beginning sections we can reference instead of
3491 the section names themselves. */
3493 #ifndef TEXT_SECTION_LABEL
3494 #define TEXT_SECTION_LABEL "Ltext"
3496 #ifndef DEBUG_LINE_SECTION_LABEL
3497 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3499 #ifndef DEBUG_INFO_SECTION_LABEL
3500 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3502 #ifndef ABBREV_SECTION_LABEL
3503 #define ABBREV_SECTION_LABEL "Ldebug_abbrev"
3507 /* Definitions of defaults for formats and names of various special
3508 (artificial) labels which may be generated within this file (when the -g
3509 options is used and DWARF_DEBUGGING_INFO is in effect.
3510 If necessary, these may be overridden from within the tm.h file, but
3511 typically, overriding these defaults is unnecessary. */
3513 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3514 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3515 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3516 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3517 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3519 #ifndef TEXT_END_LABEL
3520 #define TEXT_END_LABEL "Letext"
3522 #ifndef DATA_END_LABEL
3523 #define DATA_END_LABEL "Ledata"
3525 #ifndef BSS_END_LABEL
3526 #define BSS_END_LABEL "Lebss"
3528 #ifndef INSN_LABEL_FMT
3529 #define INSN_LABEL_FMT "LI%u_"
3531 #ifndef BLOCK_BEGIN_LABEL
3532 #define BLOCK_BEGIN_LABEL "LBB"
3534 #ifndef BLOCK_END_LABEL
3535 #define BLOCK_END_LABEL "LBE"
3537 #ifndef BODY_BEGIN_LABEL
3538 #define BODY_BEGIN_LABEL "Lbb"
3540 #ifndef BODY_END_LABEL
3541 #define BODY_END_LABEL "Lbe"
3543 #ifndef LINE_CODE_LABEL
3544 #define LINE_CODE_LABEL "LM"
3546 #ifndef SEPARATE_LINE_CODE_LABEL
3547 #define SEPARATE_LINE_CODE_LABEL "LSM"
3550 /* We allow a language front-end to designate a function that is to be
3551 called to "demangle" any name before it it put into a DIE. */
3553 static const char *(*demangle_name_func) PARAMS ((const char *));
3556 dwarf2out_set_demangle_name_func (func)
3557 const char *(*func) PARAMS ((const char *));
3559 demangle_name_func = func;
3562 /* Return an rtx like ORIG which lives forever. If we're doing GC,
3563 that means adding it to used_rtx_varray. If not, that means making
3564 a copy on the permanent_obstack. */
3571 VARRAY_PUSH_RTX (used_rtx_varray, orig);
3574 push_obstacks_nochange ();
3575 end_temporary_allocation ();
3576 orig = copy_rtx (orig);
3583 /* Test if rtl node points to a pseudo register. */
3589 return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3590 || (GET_CODE (rtl) == SUBREG
3591 && REGNO (XEXP (rtl, 0)) >= FIRST_PSEUDO_REGISTER));
3594 /* Return a reference to a type, with its const and volatile qualifiers
3598 type_main_variant (type)
3601 type = TYPE_MAIN_VARIANT (type);
3603 /* There really should be only one main variant among any group of variants
3604 of a given type (and all of the MAIN_VARIANT values for all members of
3605 the group should point to that one type) but sometimes the C front-end
3606 messes this up for array types, so we work around that bug here. */
3608 if (TREE_CODE (type) == ARRAY_TYPE)
3609 while (type != TYPE_MAIN_VARIANT (type))
3610 type = TYPE_MAIN_VARIANT (type);
3615 /* Return non-zero if the given type node represents a tagged type. */
3618 is_tagged_type (type)
3621 register enum tree_code code = TREE_CODE (type);
3623 return (code == RECORD_TYPE || code == UNION_TYPE
3624 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
3627 /* Convert a DIE tag into its string name. */
3630 dwarf_tag_name (tag)
3631 register unsigned tag;
3635 case DW_TAG_padding:
3636 return "DW_TAG_padding";
3637 case DW_TAG_array_type:
3638 return "DW_TAG_array_type";
3639 case DW_TAG_class_type:
3640 return "DW_TAG_class_type";
3641 case DW_TAG_entry_point:
3642 return "DW_TAG_entry_point";
3643 case DW_TAG_enumeration_type:
3644 return "DW_TAG_enumeration_type";
3645 case DW_TAG_formal_parameter:
3646 return "DW_TAG_formal_parameter";
3647 case DW_TAG_imported_declaration:
3648 return "DW_TAG_imported_declaration";
3650 return "DW_TAG_label";
3651 case DW_TAG_lexical_block:
3652 return "DW_TAG_lexical_block";
3654 return "DW_TAG_member";
3655 case DW_TAG_pointer_type:
3656 return "DW_TAG_pointer_type";
3657 case DW_TAG_reference_type:
3658 return "DW_TAG_reference_type";
3659 case DW_TAG_compile_unit:
3660 return "DW_TAG_compile_unit";
3661 case DW_TAG_string_type:
3662 return "DW_TAG_string_type";
3663 case DW_TAG_structure_type:
3664 return "DW_TAG_structure_type";
3665 case DW_TAG_subroutine_type:
3666 return "DW_TAG_subroutine_type";
3667 case DW_TAG_typedef:
3668 return "DW_TAG_typedef";
3669 case DW_TAG_union_type:
3670 return "DW_TAG_union_type";
3671 case DW_TAG_unspecified_parameters:
3672 return "DW_TAG_unspecified_parameters";
3673 case DW_TAG_variant:
3674 return "DW_TAG_variant";
3675 case DW_TAG_common_block:
3676 return "DW_TAG_common_block";
3677 case DW_TAG_common_inclusion:
3678 return "DW_TAG_common_inclusion";
3679 case DW_TAG_inheritance:
3680 return "DW_TAG_inheritance";
3681 case DW_TAG_inlined_subroutine:
3682 return "DW_TAG_inlined_subroutine";
3684 return "DW_TAG_module";
3685 case DW_TAG_ptr_to_member_type:
3686 return "DW_TAG_ptr_to_member_type";
3687 case DW_TAG_set_type:
3688 return "DW_TAG_set_type";
3689 case DW_TAG_subrange_type:
3690 return "DW_TAG_subrange_type";
3691 case DW_TAG_with_stmt:
3692 return "DW_TAG_with_stmt";
3693 case DW_TAG_access_declaration:
3694 return "DW_TAG_access_declaration";
3695 case DW_TAG_base_type:
3696 return "DW_TAG_base_type";
3697 case DW_TAG_catch_block:
3698 return "DW_TAG_catch_block";
3699 case DW_TAG_const_type:
3700 return "DW_TAG_const_type";
3701 case DW_TAG_constant:
3702 return "DW_TAG_constant";
3703 case DW_TAG_enumerator:
3704 return "DW_TAG_enumerator";
3705 case DW_TAG_file_type:
3706 return "DW_TAG_file_type";
3708 return "DW_TAG_friend";
3709 case DW_TAG_namelist:
3710 return "DW_TAG_namelist";
3711 case DW_TAG_namelist_item:
3712 return "DW_TAG_namelist_item";
3713 case DW_TAG_packed_type:
3714 return "DW_TAG_packed_type";
3715 case DW_TAG_subprogram:
3716 return "DW_TAG_subprogram";
3717 case DW_TAG_template_type_param:
3718 return "DW_TAG_template_type_param";
3719 case DW_TAG_template_value_param:
3720 return "DW_TAG_template_value_param";
3721 case DW_TAG_thrown_type:
3722 return "DW_TAG_thrown_type";
3723 case DW_TAG_try_block:
3724 return "DW_TAG_try_block";
3725 case DW_TAG_variant_part:
3726 return "DW_TAG_variant_part";
3727 case DW_TAG_variable:
3728 return "DW_TAG_variable";
3729 case DW_TAG_volatile_type:
3730 return "DW_TAG_volatile_type";
3731 case DW_TAG_MIPS_loop:
3732 return "DW_TAG_MIPS_loop";
3733 case DW_TAG_format_label:
3734 return "DW_TAG_format_label";
3735 case DW_TAG_function_template:
3736 return "DW_TAG_function_template";
3737 case DW_TAG_class_template:
3738 return "DW_TAG_class_template";
3740 return "DW_TAG_<unknown>";
3744 /* Convert a DWARF attribute code into its string name. */
3747 dwarf_attr_name (attr)
3748 register unsigned attr;
3753 return "DW_AT_sibling";
3754 case DW_AT_location:
3755 return "DW_AT_location";
3757 return "DW_AT_name";
3758 case DW_AT_ordering:
3759 return "DW_AT_ordering";
3760 case DW_AT_subscr_data:
3761 return "DW_AT_subscr_data";
3762 case DW_AT_byte_size:
3763 return "DW_AT_byte_size";
3764 case DW_AT_bit_offset:
3765 return "DW_AT_bit_offset";
3766 case DW_AT_bit_size:
3767 return "DW_AT_bit_size";
3768 case DW_AT_element_list:
3769 return "DW_AT_element_list";
3770 case DW_AT_stmt_list:
3771 return "DW_AT_stmt_list";
3773 return "DW_AT_low_pc";
3775 return "DW_AT_high_pc";
3776 case DW_AT_language:
3777 return "DW_AT_language";
3779 return "DW_AT_member";
3781 return "DW_AT_discr";
3782 case DW_AT_discr_value:
3783 return "DW_AT_discr_value";
3784 case DW_AT_visibility:
3785 return "DW_AT_visibility";
3787 return "DW_AT_import";
3788 case DW_AT_string_length:
3789 return "DW_AT_string_length";
3790 case DW_AT_common_reference:
3791 return "DW_AT_common_reference";
3792 case DW_AT_comp_dir:
3793 return "DW_AT_comp_dir";
3794 case DW_AT_const_value:
3795 return "DW_AT_const_value";
3796 case DW_AT_containing_type:
3797 return "DW_AT_containing_type";
3798 case DW_AT_default_value:
3799 return "DW_AT_default_value";
3801 return "DW_AT_inline";
3802 case DW_AT_is_optional:
3803 return "DW_AT_is_optional";
3804 case DW_AT_lower_bound:
3805 return "DW_AT_lower_bound";
3806 case DW_AT_producer:
3807 return "DW_AT_producer";
3808 case DW_AT_prototyped:
3809 return "DW_AT_prototyped";
3810 case DW_AT_return_addr:
3811 return "DW_AT_return_addr";
3812 case DW_AT_start_scope:
3813 return "DW_AT_start_scope";
3814 case DW_AT_stride_size:
3815 return "DW_AT_stride_size";
3816 case DW_AT_upper_bound:
3817 return "DW_AT_upper_bound";
3818 case DW_AT_abstract_origin:
3819 return "DW_AT_abstract_origin";
3820 case DW_AT_accessibility:
3821 return "DW_AT_accessibility";
3822 case DW_AT_address_class:
3823 return "DW_AT_address_class";
3824 case DW_AT_artificial:
3825 return "DW_AT_artificial";
3826 case DW_AT_base_types:
3827 return "DW_AT_base_types";
3828 case DW_AT_calling_convention:
3829 return "DW_AT_calling_convention";
3831 return "DW_AT_count";
3832 case DW_AT_data_member_location:
3833 return "DW_AT_data_member_location";
3834 case DW_AT_decl_column:
3835 return "DW_AT_decl_column";
3836 case DW_AT_decl_file:
3837 return "DW_AT_decl_file";
3838 case DW_AT_decl_line:
3839 return "DW_AT_decl_line";
3840 case DW_AT_declaration:
3841 return "DW_AT_declaration";
3842 case DW_AT_discr_list:
3843 return "DW_AT_discr_list";
3844 case DW_AT_encoding:
3845 return "DW_AT_encoding";
3846 case DW_AT_external:
3847 return "DW_AT_external";
3848 case DW_AT_frame_base:
3849 return "DW_AT_frame_base";
3851 return "DW_AT_friend";
3852 case DW_AT_identifier_case:
3853 return "DW_AT_identifier_case";
3854 case DW_AT_macro_info:
3855 return "DW_AT_macro_info";
3856 case DW_AT_namelist_items:
3857 return "DW_AT_namelist_items";
3858 case DW_AT_priority:
3859 return "DW_AT_priority";
3861 return "DW_AT_segment";
3862 case DW_AT_specification:
3863 return "DW_AT_specification";
3864 case DW_AT_static_link:
3865 return "DW_AT_static_link";
3867 return "DW_AT_type";
3868 case DW_AT_use_location:
3869 return "DW_AT_use_location";
3870 case DW_AT_variable_parameter:
3871 return "DW_AT_variable_parameter";
3872 case DW_AT_virtuality:
3873 return "DW_AT_virtuality";
3874 case DW_AT_vtable_elem_location:
3875 return "DW_AT_vtable_elem_location";
3877 case DW_AT_MIPS_fde:
3878 return "DW_AT_MIPS_fde";
3879 case DW_AT_MIPS_loop_begin:
3880 return "DW_AT_MIPS_loop_begin";
3881 case DW_AT_MIPS_tail_loop_begin:
3882 return "DW_AT_MIPS_tail_loop_begin";
3883 case DW_AT_MIPS_epilog_begin:
3884 return "DW_AT_MIPS_epilog_begin";
3885 case DW_AT_MIPS_loop_unroll_factor:
3886 return "DW_AT_MIPS_loop_unroll_factor";
3887 case DW_AT_MIPS_software_pipeline_depth:
3888 return "DW_AT_MIPS_software_pipeline_depth";
3889 case DW_AT_MIPS_linkage_name:
3890 return "DW_AT_MIPS_linkage_name";
3891 case DW_AT_MIPS_stride:
3892 return "DW_AT_MIPS_stride";
3893 case DW_AT_MIPS_abstract_name:
3894 return "DW_AT_MIPS_abstract_name";
3895 case DW_AT_MIPS_clone_origin:
3896 return "DW_AT_MIPS_clone_origin";
3897 case DW_AT_MIPS_has_inlines:
3898 return "DW_AT_MIPS_has_inlines";
3900 case DW_AT_sf_names:
3901 return "DW_AT_sf_names";
3902 case DW_AT_src_info:
3903 return "DW_AT_src_info";
3904 case DW_AT_mac_info:
3905 return "DW_AT_mac_info";
3906 case DW_AT_src_coords:
3907 return "DW_AT_src_coords";
3908 case DW_AT_body_begin:
3909 return "DW_AT_body_begin";
3910 case DW_AT_body_end:
3911 return "DW_AT_body_end";
3913 return "DW_AT_<unknown>";
3917 /* Convert a DWARF value form code into its string name. */
3920 dwarf_form_name (form)
3921 register unsigned form;
3926 return "DW_FORM_addr";
3927 case DW_FORM_block2:
3928 return "DW_FORM_block2";
3929 case DW_FORM_block4:
3930 return "DW_FORM_block4";
3932 return "DW_FORM_data2";
3934 return "DW_FORM_data4";
3936 return "DW_FORM_data8";
3937 case DW_FORM_string:
3938 return "DW_FORM_string";
3940 return "DW_FORM_block";
3941 case DW_FORM_block1:
3942 return "DW_FORM_block1";
3944 return "DW_FORM_data1";
3946 return "DW_FORM_flag";
3948 return "DW_FORM_sdata";
3950 return "DW_FORM_strp";
3952 return "DW_FORM_udata";
3953 case DW_FORM_ref_addr:
3954 return "DW_FORM_ref_addr";
3956 return "DW_FORM_ref1";
3958 return "DW_FORM_ref2";
3960 return "DW_FORM_ref4";
3962 return "DW_FORM_ref8";
3963 case DW_FORM_ref_udata:
3964 return "DW_FORM_ref_udata";
3965 case DW_FORM_indirect:
3966 return "DW_FORM_indirect";
3968 return "DW_FORM_<unknown>";
3972 /* Convert a DWARF type code into its string name. */
3976 dwarf_type_encoding_name (enc)
3977 register unsigned enc;
3981 case DW_ATE_address:
3982 return "DW_ATE_address";
3983 case DW_ATE_boolean:
3984 return "DW_ATE_boolean";
3985 case DW_ATE_complex_float:
3986 return "DW_ATE_complex_float";
3988 return "DW_ATE_float";
3990 return "DW_ATE_signed";
3991 case DW_ATE_signed_char:
3992 return "DW_ATE_signed_char";
3993 case DW_ATE_unsigned:
3994 return "DW_ATE_unsigned";
3995 case DW_ATE_unsigned_char:
3996 return "DW_ATE_unsigned_char";
3998 return "DW_ATE_<unknown>";
4003 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4004 instance of an inlined instance of a decl which is local to an inline
4005 function, so we have to trace all of the way back through the origin chain
4006 to find out what sort of node actually served as the original seed for the
4010 decl_ultimate_origin (decl)
4013 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4014 nodes in the function to point to themselves; ignore that if
4015 we're trying to output the abstract instance of this function. */
4016 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4019 #ifdef ENABLE_CHECKING
4020 if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
4021 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4022 most distant ancestor, this should never happen. */
4026 return DECL_ABSTRACT_ORIGIN (decl);
4029 /* Determine the "ultimate origin" of a block. The block may be an inlined
4030 instance of an inlined instance of a block which is local to an inline
4031 function, so we have to trace all of the way back through the origin chain
4032 to find out what sort of node actually served as the original seed for the
4036 block_ultimate_origin (block)
4037 register tree block;
4039 register tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4041 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4042 nodes in the function to point to themselves; ignore that if
4043 we're trying to output the abstract instance of this function. */
4044 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4047 if (immediate_origin == NULL_TREE)
4051 register tree ret_val;
4052 register tree lookahead = immediate_origin;
4056 ret_val = lookahead;
4057 lookahead = (TREE_CODE (ret_val) == BLOCK)
4058 ? BLOCK_ABSTRACT_ORIGIN (ret_val)
4061 while (lookahead != NULL && lookahead != ret_val);
4067 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4068 of a virtual function may refer to a base class, so we check the 'this'
4072 decl_class_context (decl)
4075 tree context = NULL_TREE;
4077 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4078 context = DECL_CONTEXT (decl);
4080 context = TYPE_MAIN_VARIANT
4081 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4083 if (context && !TYPE_P (context))
4084 context = NULL_TREE;
4089 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4090 addition order, and correct that in add_sibling_attributes. */
4093 add_dwarf_attr (die, attr)
4094 register dw_die_ref die;
4095 register dw_attr_ref attr;
4097 if (die != NULL && attr != NULL)
4099 attr->dw_attr_next = die->die_attr;
4100 die->die_attr = attr;
4104 static inline dw_val_class AT_class PARAMS ((dw_attr_ref));
4105 static inline dw_val_class
4109 return a->dw_attr_val.val_class;
4112 /* Add a flag value attribute to a DIE. */
4115 add_AT_flag (die, attr_kind, flag)
4116 register dw_die_ref die;
4117 register enum dwarf_attribute attr_kind;
4118 register unsigned flag;
4120 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4122 attr->dw_attr_next = NULL;
4123 attr->dw_attr = attr_kind;
4124 attr->dw_attr_val.val_class = dw_val_class_flag;
4125 attr->dw_attr_val.v.val_flag = flag;
4126 add_dwarf_attr (die, attr);
4129 static inline unsigned AT_flag PARAMS ((dw_attr_ref));
4130 static inline unsigned
4132 register dw_attr_ref a;
4134 if (a && AT_class (a) == dw_val_class_flag)
4135 return a->dw_attr_val.v.val_flag;
4140 /* Add a signed integer attribute value to a DIE. */
4143 add_AT_int (die, attr_kind, int_val)
4144 register dw_die_ref die;
4145 register enum dwarf_attribute attr_kind;
4146 register long int int_val;
4148 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4150 attr->dw_attr_next = NULL;
4151 attr->dw_attr = attr_kind;
4152 attr->dw_attr_val.val_class = dw_val_class_const;
4153 attr->dw_attr_val.v.val_int = int_val;
4154 add_dwarf_attr (die, attr);
4157 static inline long int AT_int PARAMS ((dw_attr_ref));
4158 static inline long int
4160 register dw_attr_ref a;
4162 if (a && AT_class (a) == dw_val_class_const)
4163 return a->dw_attr_val.v.val_int;
4168 /* Add an unsigned integer attribute value to a DIE. */
4171 add_AT_unsigned (die, attr_kind, unsigned_val)
4172 register dw_die_ref die;
4173 register enum dwarf_attribute attr_kind;
4174 register unsigned long unsigned_val;
4176 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4178 attr->dw_attr_next = NULL;
4179 attr->dw_attr = attr_kind;
4180 attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4181 attr->dw_attr_val.v.val_unsigned = unsigned_val;
4182 add_dwarf_attr (die, attr);
4185 static inline unsigned long AT_unsigned PARAMS ((dw_attr_ref));
4186 static inline unsigned long
4188 register dw_attr_ref a;
4190 if (a && AT_class (a) == dw_val_class_unsigned_const)
4191 return a->dw_attr_val.v.val_unsigned;
4196 /* Add an unsigned double integer attribute value to a DIE. */
4199 add_AT_long_long (die, attr_kind, val_hi, val_low)
4200 register dw_die_ref die;
4201 register enum dwarf_attribute attr_kind;
4202 register unsigned long val_hi;
4203 register unsigned long val_low;
4205 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4207 attr->dw_attr_next = NULL;
4208 attr->dw_attr = attr_kind;
4209 attr->dw_attr_val.val_class = dw_val_class_long_long;
4210 attr->dw_attr_val.v.val_long_long.hi = val_hi;
4211 attr->dw_attr_val.v.val_long_long.low = val_low;
4212 add_dwarf_attr (die, attr);
4215 /* Add a floating point attribute value to a DIE and return it. */
4218 add_AT_float (die, attr_kind, length, array)
4219 register dw_die_ref die;
4220 register enum dwarf_attribute attr_kind;
4221 register unsigned length;
4222 register long *array;
4224 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4226 attr->dw_attr_next = NULL;
4227 attr->dw_attr = attr_kind;
4228 attr->dw_attr_val.val_class = dw_val_class_float;
4229 attr->dw_attr_val.v.val_float.length = length;
4230 attr->dw_attr_val.v.val_float.array = array;
4231 add_dwarf_attr (die, attr);
4234 /* Add a string attribute value to a DIE. */
4237 add_AT_string (die, attr_kind, str)
4238 register dw_die_ref die;
4239 register enum dwarf_attribute attr_kind;
4240 register const char *str;
4242 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4244 attr->dw_attr_next = NULL;
4245 attr->dw_attr = attr_kind;
4246 attr->dw_attr_val.val_class = dw_val_class_str;
4247 attr->dw_attr_val.v.val_str = xstrdup (str);
4248 add_dwarf_attr (die, attr);
4251 static inline const char *AT_string PARAMS ((dw_attr_ref));
4252 static inline const char *
4254 register dw_attr_ref a;
4256 if (a && AT_class (a) == dw_val_class_str)
4257 return a->dw_attr_val.v.val_str;
4262 /* Add a DIE reference attribute value to a DIE. */
4265 add_AT_die_ref (die, attr_kind, targ_die)
4266 register dw_die_ref die;
4267 register enum dwarf_attribute attr_kind;
4268 register dw_die_ref targ_die;
4270 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4272 attr->dw_attr_next = NULL;
4273 attr->dw_attr = attr_kind;
4274 attr->dw_attr_val.val_class = dw_val_class_die_ref;
4275 attr->dw_attr_val.v.val_die_ref = targ_die;
4276 add_dwarf_attr (die, attr);
4279 static inline dw_die_ref AT_ref PARAMS ((dw_attr_ref));
4280 static inline dw_die_ref
4282 register dw_attr_ref a;
4284 if (a && AT_class (a) == dw_val_class_die_ref)
4285 return a->dw_attr_val.v.val_die_ref;
4290 /* Add an FDE reference attribute value to a DIE. */
4293 add_AT_fde_ref (die, attr_kind, targ_fde)
4294 register dw_die_ref die;
4295 register enum dwarf_attribute attr_kind;
4296 register unsigned targ_fde;
4298 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4300 attr->dw_attr_next = NULL;
4301 attr->dw_attr = attr_kind;
4302 attr->dw_attr_val.val_class = dw_val_class_fde_ref;
4303 attr->dw_attr_val.v.val_fde_index = targ_fde;
4304 add_dwarf_attr (die, attr);
4307 /* Add a location description attribute value to a DIE. */
4310 add_AT_loc (die, attr_kind, loc)
4311 register dw_die_ref die;
4312 register enum dwarf_attribute attr_kind;
4313 register dw_loc_descr_ref loc;
4315 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4317 attr->dw_attr_next = NULL;
4318 attr->dw_attr = attr_kind;
4319 attr->dw_attr_val.val_class = dw_val_class_loc;
4320 attr->dw_attr_val.v.val_loc = loc;
4321 add_dwarf_attr (die, attr);
4324 static inline dw_loc_descr_ref AT_loc PARAMS ((dw_attr_ref));
4325 static inline dw_loc_descr_ref
4327 register dw_attr_ref a;
4329 if (a && AT_class (a) == dw_val_class_loc)
4330 return a->dw_attr_val.v.val_loc;
4335 /* Add an address constant attribute value to a DIE. */
4338 add_AT_addr (die, attr_kind, addr)
4339 register dw_die_ref die;
4340 register enum dwarf_attribute attr_kind;
4343 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4345 attr->dw_attr_next = NULL;
4346 attr->dw_attr = attr_kind;
4347 attr->dw_attr_val.val_class = dw_val_class_addr;
4348 attr->dw_attr_val.v.val_addr = addr;
4349 add_dwarf_attr (die, attr);
4352 static inline rtx AT_addr PARAMS ((dw_attr_ref));
4355 register dw_attr_ref a;
4357 if (a && AT_class (a) == dw_val_class_addr)
4358 return a->dw_attr_val.v.val_addr;
4363 /* Add a label identifier attribute value to a DIE. */
4366 add_AT_lbl_id (die, attr_kind, lbl_id)
4367 register dw_die_ref die;
4368 register enum dwarf_attribute attr_kind;
4369 register const char *lbl_id;
4371 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4373 attr->dw_attr_next = NULL;
4374 attr->dw_attr = attr_kind;
4375 attr->dw_attr_val.val_class = dw_val_class_lbl_id;
4376 attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4377 add_dwarf_attr (die, attr);
4380 /* Add a section offset attribute value to a DIE. */
4383 add_AT_lbl_offset (die, attr_kind, label)
4384 register dw_die_ref die;
4385 register enum dwarf_attribute attr_kind;
4386 register const char *label;
4388 register dw_attr_ref attr = (dw_attr_ref) xmalloc (sizeof (dw_attr_node));
4390 attr->dw_attr_next = NULL;
4391 attr->dw_attr = attr_kind;
4392 attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
4393 attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
4394 add_dwarf_attr (die, attr);
4398 static inline const char *AT_lbl PARAMS ((dw_attr_ref));
4399 static inline const char *
4401 register dw_attr_ref a;
4403 if (a && (AT_class (a) == dw_val_class_lbl_id
4404 || AT_class (a) == dw_val_class_lbl_offset))
4405 return a->dw_attr_val.v.val_lbl_id;
4410 /* Get the attribute of type attr_kind. */
4412 static inline dw_attr_ref
4413 get_AT (die, attr_kind)
4414 register dw_die_ref die;
4415 register enum dwarf_attribute attr_kind;
4417 register dw_attr_ref a;
4418 register dw_die_ref spec = NULL;
4422 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4424 if (a->dw_attr == attr_kind)
4427 if (a->dw_attr == DW_AT_specification
4428 || a->dw_attr == DW_AT_abstract_origin)
4433 return get_AT (spec, attr_kind);
4439 /* Return the "low pc" attribute value, typically associated with
4440 a subprogram DIE. Return null if the "low pc" attribute is
4441 either not prsent, or if it cannot be represented as an
4442 assembler label identifier. */
4444 static inline const char *
4446 register dw_die_ref die;
4448 register dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4452 /* Return the "high pc" attribute value, typically associated with
4453 a subprogram DIE. Return null if the "high pc" attribute is
4454 either not prsent, or if it cannot be represented as an
4455 assembler label identifier. */
4457 static inline const char *
4459 register dw_die_ref die;
4461 register dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4465 /* Return the value of the string attribute designated by ATTR_KIND, or
4466 NULL if it is not present. */
4468 static inline const char *
4469 get_AT_string (die, attr_kind)
4470 register dw_die_ref die;
4471 register enum dwarf_attribute attr_kind;
4473 register dw_attr_ref a = get_AT (die, attr_kind);
4474 return AT_string (a);
4477 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4478 if it is not present. */
4481 get_AT_flag (die, attr_kind)
4482 register dw_die_ref die;
4483 register enum dwarf_attribute attr_kind;
4485 register dw_attr_ref a = get_AT (die, attr_kind);
4489 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4490 if it is not present. */
4492 static inline unsigned
4493 get_AT_unsigned (die, attr_kind)
4494 register dw_die_ref die;
4495 register enum dwarf_attribute attr_kind;
4497 register dw_attr_ref a = get_AT (die, attr_kind);
4498 return AT_unsigned (a);
4501 static inline dw_die_ref
4502 get_AT_ref (die, attr_kind)
4504 register enum dwarf_attribute attr_kind;
4506 register dw_attr_ref a = get_AT (die, attr_kind);
4513 register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
4515 return (lang == DW_LANG_C || lang == DW_LANG_C89
4516 || lang == DW_LANG_C_plus_plus);
4522 register unsigned lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
4524 return (lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90);
4527 /* Free up the memory used by A. */
4529 static inline void free_AT PARAMS ((dw_attr_ref));
4534 switch (AT_class (a))
4536 case dw_val_class_str:
4537 case dw_val_class_lbl_id:
4538 case dw_val_class_lbl_offset:
4539 free (a->dw_attr_val.v.val_str);
4549 /* Remove the specified attribute if present. */
4552 remove_AT (die, attr_kind)
4553 register dw_die_ref die;
4554 register enum dwarf_attribute attr_kind;
4556 register dw_attr_ref *p;
4557 register dw_attr_ref removed = NULL;
4561 for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
4562 if ((*p)->dw_attr == attr_kind)
4565 *p = (*p)->dw_attr_next;
4574 /* Free up the memory used by DIE. */
4576 static inline void free_die PARAMS ((dw_die_ref));
4581 remove_children (die);
4585 /* Discard the children of this DIE. */
4588 remove_children (die)
4589 register dw_die_ref die;
4591 register dw_die_ref child_die = die->die_child;
4593 die->die_child = NULL;
4595 while (child_die != NULL)
4597 register dw_die_ref tmp_die = child_die;
4598 register dw_attr_ref a;
4600 child_die = child_die->die_sib;
4602 for (a = tmp_die->die_attr; a != NULL; )
4604 register dw_attr_ref tmp_a = a;
4606 a = a->dw_attr_next;
4614 /* Add a child DIE below its parent. We build the lists up in reverse
4615 addition order, and correct that in add_sibling_attributes. */
4618 add_child_die (die, child_die)
4619 register dw_die_ref die;
4620 register dw_die_ref child_die;
4622 if (die != NULL && child_die != NULL)
4624 if (die == child_die)
4626 child_die->die_parent = die;
4627 child_die->die_sib = die->die_child;
4628 die->die_child = child_die;
4632 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
4633 is the specification, to the front of PARENT's list of children. */
4636 splice_child_die (parent, child)
4637 dw_die_ref parent, child;
4641 /* We want the declaration DIE from inside the class, not the
4642 specification DIE at toplevel. */
4643 if (child->die_parent != parent)
4645 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
4650 if (child->die_parent != parent
4651 && child->die_parent != get_AT_ref (parent, DW_AT_specification))
4654 for (p = &(parent->die_child); *p; p = &((*p)->die_sib))
4657 *p = child->die_sib;
4661 child->die_sib = parent->die_child;
4662 parent->die_child = child;
4665 /* Return a pointer to a newly created DIE node. */
4667 static inline dw_die_ref
4668 new_die (tag_value, parent_die)
4669 register enum dwarf_tag tag_value;
4670 register dw_die_ref parent_die;
4672 register dw_die_ref die = (dw_die_ref) xmalloc (sizeof (die_node));
4674 die->die_tag = tag_value;
4675 die->die_abbrev = 0;
4676 die->die_offset = 0;
4677 die->die_child = NULL;
4678 die->die_parent = NULL;
4679 die->die_sib = NULL;
4680 die->die_attr = NULL;
4682 if (parent_die != NULL)
4683 add_child_die (parent_die, die);
4686 limbo_die_node *limbo_node;
4688 limbo_node = (limbo_die_node *) xmalloc (sizeof (limbo_die_node));
4689 limbo_node->die = die;
4690 limbo_node->next = limbo_die_list;
4691 limbo_die_list = limbo_node;
4697 /* Return the DIE associated with the given type specifier. */
4699 static inline dw_die_ref
4700 lookup_type_die (type)
4703 if (TREE_CODE (type) == VECTOR_TYPE)
4704 type = TYPE_DEBUG_REPRESENTATION_TYPE (type);
4705 return (dw_die_ref) TYPE_SYMTAB_POINTER (type);
4708 /* Equate a DIE to a given type specifier. */
4711 equate_type_number_to_die (type, type_die)
4713 register dw_die_ref type_die;
4715 TYPE_SYMTAB_POINTER (type) = (char *) type_die;
4718 /* Return the DIE associated with a given declaration. */
4720 static inline dw_die_ref
4721 lookup_decl_die (decl)
4724 register unsigned decl_id = DECL_UID (decl);
4726 return (decl_id < decl_die_table_in_use
4727 ? decl_die_table[decl_id] : NULL);
4730 /* Equate a DIE to a particular declaration. */
4733 equate_decl_number_to_die (decl, decl_die)
4735 register dw_die_ref decl_die;
4737 register unsigned decl_id = DECL_UID (decl);
4738 register unsigned num_allocated;
4740 if (decl_id >= decl_die_table_allocated)
4743 = ((decl_id + 1 + DECL_DIE_TABLE_INCREMENT - 1)
4744 / DECL_DIE_TABLE_INCREMENT)
4745 * DECL_DIE_TABLE_INCREMENT;
4748 = (dw_die_ref *) xrealloc (decl_die_table,
4749 sizeof (dw_die_ref) * num_allocated);
4751 bzero ((char *) &decl_die_table[decl_die_table_allocated],
4752 (num_allocated - decl_die_table_allocated) * sizeof (dw_die_ref));
4753 decl_die_table_allocated = num_allocated;
4756 if (decl_id >= decl_die_table_in_use)
4757 decl_die_table_in_use = (decl_id + 1);
4759 decl_die_table[decl_id] = decl_die;
4762 /* Keep track of the number of spaces used to indent the
4763 output of the debugging routines that print the structure of
4764 the DIE internal representation. */
4765 static int print_indent;
4767 /* Indent the line the number of spaces given by print_indent. */
4770 print_spaces (outfile)
4773 fprintf (outfile, "%*s", print_indent, "");
4776 /* Print the information associated with a given DIE, and its children.
4777 This routine is a debugging aid only. */
4780 print_die (die, outfile)
4784 register dw_attr_ref a;
4785 register dw_die_ref c;
4787 print_spaces (outfile);
4788 fprintf (outfile, "DIE %4lu: %s\n",
4789 die->die_offset, dwarf_tag_name (die->die_tag));
4790 print_spaces (outfile);
4791 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
4792 fprintf (outfile, " offset: %lu\n", die->die_offset);
4794 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4796 print_spaces (outfile);
4797 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
4799 switch (AT_class (a))
4801 case dw_val_class_addr:
4802 fprintf (outfile, "address");
4804 case dw_val_class_loc:
4805 fprintf (outfile, "location descriptor");
4807 case dw_val_class_const:
4808 fprintf (outfile, "%ld", AT_int (a));
4810 case dw_val_class_unsigned_const:
4811 fprintf (outfile, "%lu", AT_unsigned (a));
4813 case dw_val_class_long_long:
4814 fprintf (outfile, "constant (%lu,%lu)",
4815 a->dw_attr_val.v.val_long_long.hi,
4816 a->dw_attr_val.v.val_long_long.low);
4818 case dw_val_class_float:
4819 fprintf (outfile, "floating-point constant");
4821 case dw_val_class_flag:
4822 fprintf (outfile, "%u", AT_flag (a));
4824 case dw_val_class_die_ref:
4825 if (AT_ref (a) != NULL)
4826 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
4828 fprintf (outfile, "die -> <null>");
4830 case dw_val_class_lbl_id:
4831 case dw_val_class_lbl_offset:
4832 fprintf (outfile, "label: %s", AT_lbl (a));
4834 case dw_val_class_str:
4835 if (AT_string (a) != NULL)
4836 fprintf (outfile, "\"%s\"", AT_string (a));
4838 fprintf (outfile, "<null>");
4844 fprintf (outfile, "\n");
4847 if (die->die_child != NULL)
4850 for (c = die->die_child; c != NULL; c = c->die_sib)
4851 print_die (c, outfile);
4857 /* Print the contents of the source code line number correspondence table.
4858 This routine is a debugging aid only. */
4861 print_dwarf_line_table (outfile)
4864 register unsigned i;
4865 register dw_line_info_ref line_info;
4867 fprintf (outfile, "\n\nDWARF source line information\n");
4868 for (i = 1; i < line_info_table_in_use; ++i)
4870 line_info = &line_info_table[i];
4871 fprintf (outfile, "%5d: ", i);
4872 fprintf (outfile, "%-20s", file_table[line_info->dw_file_num]);
4873 fprintf (outfile, "%6ld", line_info->dw_line_num);
4874 fprintf (outfile, "\n");
4877 fprintf (outfile, "\n\n");
4880 /* Print the information collected for a given DIE. */
4883 debug_dwarf_die (die)
4886 print_die (die, stderr);
4889 /* Print all DWARF information collected for the compilation unit.
4890 This routine is a debugging aid only. */
4896 print_die (comp_unit_die, stderr);
4897 if (! DWARF2_ASM_LINE_DEBUG_INFO)
4898 print_dwarf_line_table (stderr);
4901 /* We build up the lists of children and attributes by pushing new ones
4902 onto the beginning of the list. Reverse the lists for DIE so that
4903 they are in order of addition. */
4906 reverse_die_lists (die)
4907 register dw_die_ref die;
4909 register dw_die_ref c, cp, cn;
4910 register dw_attr_ref a, ap, an;
4912 for (a = die->die_attr, ap = 0; a; a = an)
4914 an = a->dw_attr_next;
4915 a->dw_attr_next = ap;
4920 for (c = die->die_child, cp = 0; c; c = cn)
4926 die->die_child = cp;
4929 /* Traverse the DIE, reverse its lists of attributes and children, and
4930 add a sibling attribute if it may have the effect of speeding up
4931 access to siblings. To save some space, avoid generating sibling
4932 attributes for DIE's without children. */
4935 add_sibling_attributes (die)
4936 register dw_die_ref die;
4938 register dw_die_ref c;
4940 reverse_die_lists (die);
4942 if (die != comp_unit_die && die->die_sib && die->die_child != NULL)
4943 /* Add the sibling link to the front of the attribute list. */
4944 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
4946 for (c = die->die_child; c != NULL; c = c->die_sib)
4947 add_sibling_attributes (c);
4950 /* The format of each DIE (and its attribute value pairs)
4951 is encoded in an abbreviation table. This routine builds the
4952 abbreviation table and assigns a unique abbreviation id for
4953 each abbreviation entry. The children of each die are visited
4957 build_abbrev_table (die)
4958 register dw_die_ref die;
4960 register unsigned long abbrev_id;
4961 register unsigned long n_alloc;
4962 register dw_die_ref c;
4963 register dw_attr_ref d_attr, a_attr;
4964 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
4966 register dw_die_ref abbrev = abbrev_die_table[abbrev_id];
4968 if (abbrev->die_tag == die->die_tag)
4970 if ((abbrev->die_child != NULL) == (die->die_child != NULL))
4972 a_attr = abbrev->die_attr;
4973 d_attr = die->die_attr;
4975 while (a_attr != NULL && d_attr != NULL)
4977 if ((a_attr->dw_attr != d_attr->dw_attr)
4978 || (value_format (a_attr) != value_format (d_attr)))
4981 a_attr = a_attr->dw_attr_next;
4982 d_attr = d_attr->dw_attr_next;
4985 if (a_attr == NULL && d_attr == NULL)
4991 if (abbrev_id >= abbrev_die_table_in_use)
4993 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
4995 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
4997 = (dw_die_ref *) xrealloc (abbrev_die_table,
4998 sizeof (dw_die_ref) * n_alloc);
5000 bzero ((char *) &abbrev_die_table[abbrev_die_table_allocated],
5001 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
5002 abbrev_die_table_allocated = n_alloc;
5005 ++abbrev_die_table_in_use;
5006 abbrev_die_table[abbrev_id] = die;
5009 die->die_abbrev = abbrev_id;
5010 for (c = die->die_child; c != NULL; c = c->die_sib)
5011 build_abbrev_table (c);
5014 /* Return the size of a string, including the null byte.
5016 This used to treat backslashes as escapes, and hence they were not included
5017 in the count. However, that conflicts with what ASM_OUTPUT_ASCII does,
5018 which treats a backslash as a backslash, escaping it if necessary, and hence
5019 we must include them in the count. */
5021 static unsigned long
5022 size_of_string (str)
5023 register const char *str;
5025 return strlen (str) + 1;
5028 /* Return the power-of-two number of bytes necessary to represent VALUE. */
5031 constant_size (value)
5032 long unsigned value;
5039 log = floor_log2 (value);
5042 log = 1 << (floor_log2 (log) + 1);
5047 /* Return the size of a DIE, as it is represented in the
5048 .debug_info section. */
5050 static unsigned long
5052 register dw_die_ref die;
5054 register unsigned long size = 0;
5055 register dw_attr_ref a;
5057 size += size_of_uleb128 (die->die_abbrev);
5058 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5060 switch (AT_class (a))
5062 case dw_val_class_addr:
5063 size += DWARF2_ADDR_SIZE;
5065 case dw_val_class_loc:
5067 register unsigned long lsize = size_of_locs (AT_loc (a));
5070 size += constant_size (lsize);
5074 case dw_val_class_const:
5075 size += size_of_sleb128 (AT_int (a));
5077 case dw_val_class_unsigned_const:
5078 size += constant_size (AT_unsigned (a));
5080 case dw_val_class_long_long:
5081 size += 1 + 8; /* block */
5083 case dw_val_class_float:
5084 size += 1 + a->dw_attr_val.v.val_float.length * 4; /* block */
5086 case dw_val_class_flag:
5089 case dw_val_class_die_ref:
5090 size += DWARF_OFFSET_SIZE;
5092 case dw_val_class_fde_ref:
5093 size += DWARF_OFFSET_SIZE;
5095 case dw_val_class_lbl_id:
5096 size += DWARF2_ADDR_SIZE;
5098 case dw_val_class_lbl_offset:
5099 size += DWARF_OFFSET_SIZE;
5101 case dw_val_class_str:
5102 size += size_of_string (AT_string (a));
5112 /* Size the debugging information associated with a given DIE.
5113 Visits the DIE's children recursively. Updates the global
5114 variable next_die_offset, on each time through. Uses the
5115 current value of next_die_offset to update the die_offset
5116 field in each DIE. */
5119 calc_die_sizes (die)
5122 register dw_die_ref c;
5123 die->die_offset = next_die_offset;
5124 next_die_offset += size_of_die (die);
5126 for (c = die->die_child; c != NULL; c = c->die_sib)
5129 if (die->die_child != NULL)
5130 /* Count the null byte used to terminate sibling lists. */
5131 next_die_offset += 1;
5134 /* Return the size of the line information prolog generated for the
5135 compilation unit. */
5137 static unsigned long
5138 size_of_line_prolog ()
5140 register unsigned long size;
5141 register unsigned long ft_index;
5143 size = DWARF_LINE_PROLOG_HEADER_SIZE;
5145 /* Count the size of the table giving number of args for each
5147 size += DWARF_LINE_OPCODE_BASE - 1;
5149 /* Include directory table is empty (at present). Count only the
5150 null byte used to terminate the table. */
5153 for (ft_index = 1; ft_index < file_table_in_use; ++ft_index)
5155 /* File name entry. */
5156 size += size_of_string (file_table[ft_index]);
5158 /* Include directory index. */
5159 size += size_of_uleb128 (0);
5161 /* Modification time. */
5162 size += size_of_uleb128 (0);
5164 /* File length in bytes. */
5165 size += size_of_uleb128 (0);
5168 /* Count the file table terminator. */
5173 /* Return the size of the .debug_pubnames table generated for the
5174 compilation unit. */
5176 static unsigned long
5179 register unsigned long size;
5180 register unsigned i;
5182 size = DWARF_PUBNAMES_HEADER_SIZE;
5183 for (i = 0; i < pubname_table_in_use; ++i)
5185 register pubname_ref p = &pubname_table[i];
5186 size += DWARF_OFFSET_SIZE + size_of_string (p->name);
5189 size += DWARF_OFFSET_SIZE;
5193 /* Return the size of the information in the .debug_aranges section. */
5195 static unsigned long
5198 register unsigned long size;
5200 size = DWARF_ARANGES_HEADER_SIZE;
5202 /* Count the address/length pair for this compilation unit. */
5203 size += 2 * DWARF2_ADDR_SIZE;
5204 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
5206 /* Count the two zero words used to terminated the address range table. */
5207 size += 2 * DWARF2_ADDR_SIZE;
5211 /* Select the encoding of an attribute value. */
5213 static enum dwarf_form
5217 switch (a->dw_attr_val.val_class)
5219 case dw_val_class_addr:
5220 return DW_FORM_addr;
5221 case dw_val_class_loc:
5222 switch (constant_size (size_of_locs (AT_loc (a))))
5225 return DW_FORM_block1;
5227 return DW_FORM_block2;
5231 case dw_val_class_const:
5232 return DW_FORM_sdata;
5233 case dw_val_class_unsigned_const:
5234 switch (constant_size (AT_unsigned (a)))
5237 return DW_FORM_data1;
5239 return DW_FORM_data2;
5241 return DW_FORM_data4;
5243 return DW_FORM_data8;
5247 case dw_val_class_long_long:
5248 return DW_FORM_block1;
5249 case dw_val_class_float:
5250 return DW_FORM_block1;
5251 case dw_val_class_flag:
5252 return DW_FORM_flag;
5253 case dw_val_class_die_ref:
5255 case dw_val_class_fde_ref:
5256 return DW_FORM_data;
5257 case dw_val_class_lbl_id:
5258 return DW_FORM_addr;
5259 case dw_val_class_lbl_offset:
5260 return DW_FORM_data;
5261 case dw_val_class_str:
5262 return DW_FORM_string;
5268 /* Output the encoding of an attribute value. */
5271 output_value_format (a)
5274 enum dwarf_form form = value_format (a);
5276 output_uleb128 (form);
5278 fprintf (asm_out_file, " (%s)", dwarf_form_name (form));
5280 fputc ('\n', asm_out_file);
5283 /* Output the .debug_abbrev section which defines the DIE abbreviation
5287 output_abbrev_section ()
5289 unsigned long abbrev_id;
5292 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
5294 register dw_die_ref abbrev = abbrev_die_table[abbrev_id];
5296 output_uleb128 (abbrev_id);
5298 fprintf (asm_out_file, " (abbrev code)");
5300 fputc ('\n', asm_out_file);
5301 output_uleb128 (abbrev->die_tag);
5303 fprintf (asm_out_file, " (TAG: %s)",
5304 dwarf_tag_name (abbrev->die_tag));
5306 fputc ('\n', asm_out_file);
5307 fprintf (asm_out_file, "\t%s\t0x%x", ASM_BYTE_OP,
5308 abbrev->die_child != NULL ? DW_children_yes : DW_children_no);
5311 fprintf (asm_out_file, "\t%s %s",
5313 (abbrev->die_child != NULL
5314 ? "DW_children_yes" : "DW_children_no"));
5316 fputc ('\n', asm_out_file);
5318 for (a_attr = abbrev->die_attr; a_attr != NULL;
5319 a_attr = a_attr->dw_attr_next)
5321 output_uleb128 (a_attr->dw_attr);
5323 fprintf (asm_out_file, " (%s)",
5324 dwarf_attr_name (a_attr->dw_attr));
5326 fputc ('\n', asm_out_file);
5327 output_value_format (a_attr);
5330 fprintf (asm_out_file, "\t%s\t0,0\n", ASM_BYTE_OP);
5333 /* Terminate the table. */
5334 fprintf (asm_out_file, "\t%s\t0\n", ASM_BYTE_OP);
5337 /* Output the DIE and its attributes. Called recursively to generate
5338 the definitions of each child DIE. */
5342 register dw_die_ref die;
5344 register dw_attr_ref a;
5345 register dw_die_ref c;
5346 register unsigned long size;
5348 output_uleb128 (die->die_abbrev);
5350 fprintf (asm_out_file, " (DIE (0x%lx) %s)",
5351 die->die_offset, dwarf_tag_name (die->die_tag));
5353 fputc ('\n', asm_out_file);
5355 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5357 switch (AT_class (a))
5359 case dw_val_class_addr:
5360 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file, AT_addr (a));
5363 case dw_val_class_loc:
5364 size = size_of_locs (AT_loc (a));
5366 /* Output the block length for this list of location operations. */
5367 switch (constant_size (size))
5370 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, size);
5373 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, size);
5380 fprintf (asm_out_file, "\t%s %s",
5381 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5383 fputc ('\n', asm_out_file);
5385 output_loc_sequence (AT_loc (a));
5388 case dw_val_class_const:
5389 /* ??? It would be slightly more efficient to use a scheme like is
5390 used for unsigned constants below, but gdb 4.x does not sign
5391 extend. Gdb 5.x does sign extend. */
5392 output_sleb128 (AT_int (a));
5395 case dw_val_class_unsigned_const:
5396 switch (constant_size (AT_unsigned (a)))
5399 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, AT_unsigned (a));
5402 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, AT_unsigned (a));
5405 ASM_OUTPUT_DWARF_DATA4 (asm_out_file, AT_unsigned (a));
5408 ASM_OUTPUT_DWARF_DATA8 (asm_out_file, AT_unsigned (a));
5415 case dw_val_class_long_long:
5416 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 8);
5418 fprintf (asm_out_file, "\t%s %s",
5419 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5421 fputc ('\n', asm_out_file);
5422 ASM_OUTPUT_DWARF_CONST_DOUBLE (asm_out_file,
5423 a->dw_attr_val.v.val_long_long.hi,
5424 a->dw_attr_val.v.val_long_long.low);
5427 fprintf (asm_out_file,
5428 "\t%s long long constant", ASM_COMMENT_START);
5430 fputc ('\n', asm_out_file);
5433 case dw_val_class_float:
5435 register unsigned int i;
5436 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
5437 a->dw_attr_val.v.val_float.length * 4);
5439 fprintf (asm_out_file, "\t%s %s",
5440 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5442 fputc ('\n', asm_out_file);
5443 for (i = 0; i < a->dw_attr_val.v.val_float.length; ++i)
5445 ASM_OUTPUT_DWARF_DATA4 (asm_out_file,
5446 a->dw_attr_val.v.val_float.array[i]);
5448 fprintf (asm_out_file, "\t%s fp constant word %u",
5449 ASM_COMMENT_START, i);
5451 fputc ('\n', asm_out_file);
5456 case dw_val_class_flag:
5457 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, AT_flag (a));
5460 case dw_val_class_die_ref:
5461 ASM_OUTPUT_DWARF_DATA (asm_out_file, AT_ref (a)->die_offset);
5464 case dw_val_class_fde_ref:
5467 ASM_GENERATE_INTERNAL_LABEL
5468 (l1, FDE_AFTER_SIZE_LABEL, a->dw_attr_val.v.val_fde_index * 2);
5469 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, l1);
5470 fprintf (asm_out_file, " - %d", DWARF_OFFSET_SIZE);
5474 case dw_val_class_lbl_id:
5475 ASM_OUTPUT_DWARF_ADDR (asm_out_file, AT_lbl (a));
5478 case dw_val_class_lbl_offset:
5479 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, AT_lbl (a));
5482 case dw_val_class_str:
5484 ASM_OUTPUT_DWARF_STRING (asm_out_file, AT_string (a));
5486 ASM_OUTPUT_ASCII (asm_out_file, AT_string (a),
5487 (int) strlen (AT_string (a)) + 1);
5494 if (AT_class (a) != dw_val_class_loc
5495 && AT_class (a) != dw_val_class_long_long
5496 && AT_class (a) != dw_val_class_float)
5499 fprintf (asm_out_file, "\t%s %s",
5500 ASM_COMMENT_START, dwarf_attr_name (a->dw_attr));
5502 fputc ('\n', asm_out_file);
5506 for (c = die->die_child; c != NULL; c = c->die_sib)
5509 if (die->die_child != NULL)
5511 /* Add null byte to terminate sibling list. */
5512 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
5514 fprintf (asm_out_file, "\t%s end of children of DIE 0x%lx",
5515 ASM_COMMENT_START, die->die_offset);
5517 fputc ('\n', asm_out_file);
5521 /* Output the compilation unit that appears at the beginning of the
5522 .debug_info section, and precedes the DIE descriptions. */
5525 output_compilation_unit_header ()
5527 ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset - DWARF_OFFSET_SIZE);
5529 fprintf (asm_out_file, "\t%s Length of Compilation Unit Info.",
5532 fputc ('\n', asm_out_file);
5533 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
5535 fprintf (asm_out_file, "\t%s DWARF version number", ASM_COMMENT_START);
5537 fputc ('\n', asm_out_file);
5538 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, abbrev_section_label);
5540 fprintf (asm_out_file, "\t%s Offset Into Abbrev. Section",
5543 fputc ('\n', asm_out_file);
5544 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF2_ADDR_SIZE);
5546 fprintf (asm_out_file, "\t%s Pointer Size (in bytes)", ASM_COMMENT_START);
5548 fputc ('\n', asm_out_file);
5551 /* The DWARF2 pubname for a nested thingy looks like "A::f". The output
5552 of decl_printable_name for C++ looks like "A::f(int)". Let's drop the
5553 argument list, and maybe the scope. */
5556 dwarf2_name (decl, scope)
5560 return (*decl_printable_name) (decl, scope ? 1 : 0);
5563 /* Add a new entry to .debug_pubnames if appropriate. */
5566 add_pubname (decl, die)
5572 if (! TREE_PUBLIC (decl))
5575 if (pubname_table_in_use == pubname_table_allocated)
5577 pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
5578 pubname_table = (pubname_ref) xrealloc
5579 (pubname_table, pubname_table_allocated * sizeof (pubname_entry));
5582 p = &pubname_table[pubname_table_in_use++];
5585 p->name = xstrdup (dwarf2_name (decl, 1));
5588 /* Output the public names table used to speed up access to externally
5589 visible names. For now, only generate entries for externally
5590 visible procedures. */
5595 register unsigned i;
5596 register unsigned long pubnames_length = size_of_pubnames ();
5598 ASM_OUTPUT_DWARF_DATA (asm_out_file, pubnames_length);
5601 fprintf (asm_out_file, "\t%s Length of Public Names Info.",
5604 fputc ('\n', asm_out_file);
5605 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
5608 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
5610 fputc ('\n', asm_out_file);
5611 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, debug_info_section_label);
5613 fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
5616 fputc ('\n', asm_out_file);
5617 ASM_OUTPUT_DWARF_DATA (asm_out_file, next_die_offset);
5619 fprintf (asm_out_file, "\t%s Compilation Unit Length", ASM_COMMENT_START);
5621 fputc ('\n', asm_out_file);
5622 for (i = 0; i < pubname_table_in_use; ++i)
5624 register pubname_ref pub = &pubname_table[i];
5626 ASM_OUTPUT_DWARF_DATA (asm_out_file, pub->die->die_offset);
5628 fprintf (asm_out_file, "\t%s DIE offset", ASM_COMMENT_START);
5630 fputc ('\n', asm_out_file);
5634 ASM_OUTPUT_DWARF_STRING (asm_out_file, pub->name);
5635 fprintf (asm_out_file, "%s external name", ASM_COMMENT_START);
5639 ASM_OUTPUT_ASCII (asm_out_file, pub->name,
5640 (int) strlen (pub->name) + 1);
5643 fputc ('\n', asm_out_file);
5646 ASM_OUTPUT_DWARF_DATA (asm_out_file, 0);
5647 fputc ('\n', asm_out_file);
5650 /* Add a new entry to .debug_aranges if appropriate. */
5653 add_arange (decl, die)
5657 if (! DECL_SECTION_NAME (decl))
5660 if (arange_table_in_use == arange_table_allocated)
5662 arange_table_allocated += ARANGE_TABLE_INCREMENT;
5664 = (arange_ref) xrealloc (arange_table,
5665 arange_table_allocated * sizeof (dw_die_ref));
5668 arange_table[arange_table_in_use++] = die;
5671 /* Output the information that goes into the .debug_aranges table.
5672 Namely, define the beginning and ending address range of the
5673 text section generated for this compilation unit. */
5678 register unsigned i;
5679 register unsigned long aranges_length = size_of_aranges ();
5681 ASM_OUTPUT_DWARF_DATA (asm_out_file, aranges_length);
5683 fprintf (asm_out_file, "\t%s Length of Address Ranges Info.",
5686 fputc ('\n', asm_out_file);
5687 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
5689 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
5691 fputc ('\n', asm_out_file);
5692 ASM_OUTPUT_DWARF_OFFSET (asm_out_file, debug_info_section_label);
5694 fprintf (asm_out_file, "\t%s Offset of Compilation Unit Info.",
5697 fputc ('\n', asm_out_file);
5698 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF2_ADDR_SIZE);
5700 fprintf (asm_out_file, "\t%s Size of Address", ASM_COMMENT_START);
5702 fputc ('\n', asm_out_file);
5703 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
5705 fprintf (asm_out_file, "\t%s Size of Segment Descriptor",
5708 fputc ('\n', asm_out_file);
5710 /* We need to align to twice the pointer size here. */
5711 if (DWARF_ARANGES_PAD_SIZE)
5713 /* Pad using a 2 bytes word so that padding is correct
5714 for any pointer size. */
5715 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, 0);
5716 for (i = 2; i < DWARF_ARANGES_PAD_SIZE; i += 2)
5717 fprintf (asm_out_file, ",0");
5719 fprintf (asm_out_file, "\t%s Pad to %d byte boundary",
5720 ASM_COMMENT_START, 2 * DWARF2_ADDR_SIZE);
5723 fputc ('\n', asm_out_file);
5724 ASM_OUTPUT_DWARF_ADDR (asm_out_file, text_section_label);
5726 fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
5728 fputc ('\n', asm_out_file);
5729 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file, text_end_label,
5730 text_section_label);
5732 fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
5734 fputc ('\n', asm_out_file);
5735 for (i = 0; i < arange_table_in_use; ++i)
5737 dw_die_ref die = arange_table[i];
5739 if (die->die_tag == DW_TAG_subprogram)
5740 ASM_OUTPUT_DWARF_ADDR (asm_out_file, get_AT_low_pc (die));
5743 /* A static variable; extract the symbol from DW_AT_location.
5744 Note that this code isn't currently hit, as we only emit
5745 aranges for functions (jason 9/23/99). */
5747 dw_attr_ref a = get_AT (die, DW_AT_location);
5748 dw_loc_descr_ref loc;
5749 if (! a || AT_class (a) != dw_val_class_loc)
5753 if (loc->dw_loc_opc != DW_OP_addr)
5756 ASM_OUTPUT_DWARF_ADDR_CONST (asm_out_file,
5757 loc->dw_loc_oprnd1.v.val_addr);
5761 fprintf (asm_out_file, "\t%s Address", ASM_COMMENT_START);
5763 fputc ('\n', asm_out_file);
5764 if (die->die_tag == DW_TAG_subprogram)
5765 ASM_OUTPUT_DWARF_ADDR_DELTA (asm_out_file, get_AT_hi_pc (die),
5766 get_AT_low_pc (die));
5768 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file,
5769 get_AT_unsigned (die, DW_AT_byte_size));
5772 fprintf (asm_out_file, "%s Length", ASM_COMMENT_START);
5774 fputc ('\n', asm_out_file);
5777 /* Output the terminator words. */
5778 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file, 0);
5779 fputc ('\n', asm_out_file);
5780 ASM_OUTPUT_DWARF_ADDR_DATA (asm_out_file, 0);
5781 fputc ('\n', asm_out_file);
5784 /* Output the source line number correspondence information. This
5785 information goes into the .debug_line section. */
5790 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
5791 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
5792 register unsigned opc;
5793 register unsigned n_op_args;
5794 register unsigned long ft_index;
5795 register unsigned long lt_index;
5796 register unsigned long current_line;
5797 register long line_offset;
5798 register long line_delta;
5799 register unsigned long current_file;
5800 register unsigned long function;
5802 ASM_OUTPUT_DWARF_DELTA (asm_out_file, ".LTEND", ".LTSTART");
5804 fprintf (asm_out_file, "\t%s Length of Source Line Info.",
5807 fputc ('\n', asm_out_file);
5808 ASM_OUTPUT_LABEL (asm_out_file, ".LTSTART");
5809 ASM_OUTPUT_DWARF_DATA2 (asm_out_file, DWARF_VERSION);
5811 fprintf (asm_out_file, "\t%s DWARF Version", ASM_COMMENT_START);
5813 fputc ('\n', asm_out_file);
5814 ASM_OUTPUT_DWARF_DATA (asm_out_file, size_of_line_prolog ());
5816 fprintf (asm_out_file, "\t%s Prolog Length", ASM_COMMENT_START);
5818 fputc ('\n', asm_out_file);
5819 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_MIN_INSTR_LENGTH);
5821 fprintf (asm_out_file, "\t%s Minimum Instruction Length",
5824 fputc ('\n', asm_out_file);
5825 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DWARF_LINE_DEFAULT_IS_STMT_START);
5827 fprintf (asm_out_file, "\t%s Default is_stmt_start flag",
5830 fputc ('\n', asm_out_file);
5831 fprintf (asm_out_file, "\t%s\t%d", ASM_BYTE_OP, DWARF_LINE_BASE);
5833 fprintf (asm_out_file, "\t%s Line Base Value (Special Opcodes)",
5836 fputc ('\n', asm_out_file);
5837 fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_RANGE);
5839 fprintf (asm_out_file, "\t%s Line Range Value (Special Opcodes)",
5842 fputc ('\n', asm_out_file);
5843 fprintf (asm_out_file, "\t%s\t%u", ASM_BYTE_OP, DWARF_LINE_OPCODE_BASE);
5845 fprintf (asm_out_file, "\t%s Special Opcode Base", ASM_COMMENT_START);
5847 fputc ('\n', asm_out_file);
5848 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; ++opc)
5852 case DW_LNS_advance_pc:
5853 case DW_LNS_advance_line:
5854 case DW_LNS_set_file:
5855 case DW_LNS_set_column:
5856 case DW_LNS_fixed_advance_pc:
5863 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, n_op_args);
5865 fprintf (asm_out_file, "\t%s opcode: 0x%x has %d args",
5866 ASM_COMMENT_START, opc, n_op_args);
5867 fputc ('\n', asm_out_file);
5871 fprintf (asm_out_file, "%s Include Directory Table\n", ASM_COMMENT_START);
5873 /* Include directory table is empty, at present */
5874 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
5875 fputc ('\n', asm_out_file);
5877 fprintf (asm_out_file, "%s File Name Table\n", ASM_COMMENT_START);
5879 for (ft_index = 1; ft_index < file_table_in_use; ++ft_index)
5883 ASM_OUTPUT_DWARF_STRING (asm_out_file, file_table[ft_index]);
5884 fprintf (asm_out_file, "%s File Entry: 0x%lx",
5885 ASM_COMMENT_START, ft_index);
5889 ASM_OUTPUT_ASCII (asm_out_file,
5890 file_table[ft_index],
5891 (int) strlen (file_table[ft_index]) + 1);
5894 fputc ('\n', asm_out_file);
5896 /* Include directory index */
5898 fputc ('\n', asm_out_file);
5900 /* Modification time */
5902 fputc ('\n', asm_out_file);
5904 /* File length in bytes */
5906 fputc ('\n', asm_out_file);
5909 /* Terminate the file name table */
5910 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
5911 fputc ('\n', asm_out_file);
5913 /* We used to set the address register to the first location in the text
5914 section here, but that didn't accomplish anything since we already
5915 have a line note for the opening brace of the first function. */
5917 /* Generate the line number to PC correspondence table, encoded as
5918 a series of state machine operations. */
5921 strcpy (prev_line_label, text_section_label);
5922 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
5924 register dw_line_info_ref line_info = &line_info_table[lt_index];
5927 /* Disable this optimization for now; GDB wants to see two line notes
5928 at the beginning of a function so it can find the end of the
5931 /* Don't emit anything for redundant notes. Just updating the
5932 address doesn't accomplish anything, because we already assume
5933 that anything after the last address is this line. */
5934 if (line_info->dw_line_num == current_line
5935 && line_info->dw_file_num == current_file)
5939 /* Emit debug info for the address of the current line, choosing
5940 the encoding that uses the least amount of space. */
5941 /* ??? Unfortunately, we have little choice here currently, and must
5942 always use the most general form. Gcc does not know the address
5943 delta itself, so we can't use DW_LNS_advance_pc. There are no known
5944 dwarf2 aware assemblers at this time, so we can't use any special
5945 pseudo ops that would allow the assembler to optimally encode this for
5946 us. Many ports do have length attributes which will give an upper
5947 bound on the address range. We could perhaps use length attributes
5948 to determine when it is safe to use DW_LNS_fixed_advance_pc. */
5949 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
5952 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
5953 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
5955 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
5958 fputc ('\n', asm_out_file);
5959 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label, prev_line_label);
5960 fputc ('\n', asm_out_file);
5964 /* This can handle any delta. This takes
5965 4+DWARF2_ADDR_SIZE bytes. */
5966 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
5968 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
5970 fputc ('\n', asm_out_file);
5971 output_uleb128 (1 + DWARF2_ADDR_SIZE);
5972 fputc ('\n', asm_out_file);
5973 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
5974 fputc ('\n', asm_out_file);
5975 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
5976 fputc ('\n', asm_out_file);
5978 strcpy (prev_line_label, line_label);
5980 /* Emit debug info for the source file of the current line, if
5981 different from the previous line. */
5982 if (line_info->dw_file_num != current_file)
5984 current_file = line_info->dw_file_num;
5985 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
5987 fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
5989 fputc ('\n', asm_out_file);
5990 output_uleb128 (current_file);
5992 fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
5994 fputc ('\n', asm_out_file);
5997 /* Emit debug info for the current line number, choosing the encoding
5998 that uses the least amount of space. */
5999 if (line_info->dw_line_num != current_line)
6001 line_offset = line_info->dw_line_num - current_line;
6002 line_delta = line_offset - DWARF_LINE_BASE;
6003 current_line = line_info->dw_line_num;
6004 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
6006 /* This can handle deltas from -10 to 234, using the current
6007 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
6009 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
6010 DWARF_LINE_OPCODE_BASE + line_delta);
6012 fprintf (asm_out_file,
6013 "\t%s line %ld", ASM_COMMENT_START, current_line);
6015 fputc ('\n', asm_out_file);
6019 /* This can handle any delta. This takes at least 4 bytes,
6020 depending on the value being encoded. */
6021 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
6023 fprintf (asm_out_file, "\t%s advance to line %ld",
6024 ASM_COMMENT_START, current_line);
6026 fputc ('\n', asm_out_file);
6027 output_sleb128 (line_offset);
6028 fputc ('\n', asm_out_file);
6029 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6031 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6032 fputc ('\n', asm_out_file);
6037 /* We still need to start a new row, so output a copy insn. */
6038 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6040 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6041 fputc ('\n', asm_out_file);
6045 /* Emit debug info for the address of the end of the function. */
6048 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6050 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6053 fputc ('\n', asm_out_file);
6054 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, text_end_label, prev_line_label);
6055 fputc ('\n', asm_out_file);
6059 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6061 fprintf (asm_out_file, "\t%s DW_LNE_set_address", ASM_COMMENT_START);
6062 fputc ('\n', asm_out_file);
6063 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6064 fputc ('\n', asm_out_file);
6065 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6066 fputc ('\n', asm_out_file);
6067 ASM_OUTPUT_DWARF_ADDR (asm_out_file, text_end_label);
6068 fputc ('\n', asm_out_file);
6071 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6073 fprintf (asm_out_file, "\t%s DW_LNE_end_sequence", ASM_COMMENT_START);
6075 fputc ('\n', asm_out_file);
6077 fputc ('\n', asm_out_file);
6078 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_end_sequence);
6079 fputc ('\n', asm_out_file);
6084 for (lt_index = 0; lt_index < separate_line_info_table_in_use; )
6086 register dw_separate_line_info_ref line_info
6087 = &separate_line_info_table[lt_index];
6090 /* Don't emit anything for redundant notes. */
6091 if (line_info->dw_line_num == current_line
6092 && line_info->dw_file_num == current_file
6093 && line_info->function == function)
6097 /* Emit debug info for the address of the current line. If this is
6098 a new function, or the first line of a function, then we need
6099 to handle it differently. */
6100 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
6102 if (function != line_info->function)
6104 function = line_info->function;
6106 /* Set the address register to the first line in the function */
6107 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6109 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6112 fputc ('\n', asm_out_file);
6113 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6114 fputc ('\n', asm_out_file);
6115 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6116 fputc ('\n', asm_out_file);
6117 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6118 fputc ('\n', asm_out_file);
6122 /* ??? See the DW_LNS_advance_pc comment above. */
6125 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6127 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6130 fputc ('\n', asm_out_file);
6131 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label,
6133 fputc ('\n', asm_out_file);
6137 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6139 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6141 fputc ('\n', asm_out_file);
6142 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6143 fputc ('\n', asm_out_file);
6144 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6145 fputc ('\n', asm_out_file);
6146 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6147 fputc ('\n', asm_out_file);
6150 strcpy (prev_line_label, line_label);
6152 /* Emit debug info for the source file of the current line, if
6153 different from the previous line. */
6154 if (line_info->dw_file_num != current_file)
6156 current_file = line_info->dw_file_num;
6157 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_set_file);
6159 fprintf (asm_out_file, "\t%s DW_LNS_set_file", ASM_COMMENT_START);
6161 fputc ('\n', asm_out_file);
6162 output_uleb128 (current_file);
6164 fprintf (asm_out_file, " (\"%s\")", file_table[current_file]);
6166 fputc ('\n', asm_out_file);
6169 /* Emit debug info for the current line number, choosing the encoding
6170 that uses the least amount of space. */
6171 if (line_info->dw_line_num != current_line)
6173 line_offset = line_info->dw_line_num - current_line;
6174 line_delta = line_offset - DWARF_LINE_BASE;
6175 current_line = line_info->dw_line_num;
6176 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
6178 ASM_OUTPUT_DWARF_DATA1 (asm_out_file,
6179 DWARF_LINE_OPCODE_BASE + line_delta);
6181 fprintf (asm_out_file,
6182 "\t%s line %ld", ASM_COMMENT_START, current_line);
6184 fputc ('\n', asm_out_file);
6188 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_advance_line);
6190 fprintf (asm_out_file, "\t%s advance to line %ld",
6191 ASM_COMMENT_START, current_line);
6193 fputc ('\n', asm_out_file);
6194 output_sleb128 (line_offset);
6195 fputc ('\n', asm_out_file);
6196 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6198 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6199 fputc ('\n', asm_out_file);
6204 /* We still need to start a new row, so output a copy insn. */
6205 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_copy);
6207 fprintf (asm_out_file, "\t%s DW_LNS_copy", ASM_COMMENT_START);
6208 fputc ('\n', asm_out_file);
6216 /* If we're done with a function, end its sequence. */
6217 if (lt_index == separate_line_info_table_in_use
6218 || separate_line_info_table[lt_index].function != function)
6223 /* Emit debug info for the address of the end of the function. */
6224 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
6227 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNS_fixed_advance_pc);
6229 fprintf (asm_out_file, "\t%s DW_LNS_fixed_advance_pc",
6232 fputc ('\n', asm_out_file);
6233 ASM_OUTPUT_DWARF_DELTA2 (asm_out_file, line_label,
6235 fputc ('\n', asm_out_file);
6239 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6241 fprintf (asm_out_file, "\t%s DW_LNE_set_address",
6243 fputc ('\n', asm_out_file);
6244 output_uleb128 (1 + DWARF2_ADDR_SIZE);
6245 fputc ('\n', asm_out_file);
6246 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_set_address);
6247 fputc ('\n', asm_out_file);
6248 ASM_OUTPUT_DWARF_ADDR (asm_out_file, line_label);
6249 fputc ('\n', asm_out_file);
6252 /* Output the marker for the end of this sequence. */
6253 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, 0);
6255 fprintf (asm_out_file, "\t%s DW_LNE_end_sequence",
6258 fputc ('\n', asm_out_file);
6260 fputc ('\n', asm_out_file);
6261 ASM_OUTPUT_DWARF_DATA1 (asm_out_file, DW_LNE_end_sequence);
6262 fputc ('\n', asm_out_file);
6266 /* Output the marker for the end of the line number info. */
6267 ASM_OUTPUT_LABEL (asm_out_file, ".LTEND");
6270 /* Given a pointer to a tree node for some base type, return a pointer to
6271 a DIE that describes the given type.
6273 This routine must only be called for GCC type nodes that correspond to
6274 Dwarf base (fundamental) types. */
6277 base_type_die (type)
6280 register dw_die_ref base_type_result;
6281 register const char *type_name;
6282 register enum dwarf_type encoding;
6283 register tree name = TYPE_NAME (type);
6285 if (TREE_CODE (type) == ERROR_MARK
6286 || TREE_CODE (type) == VOID_TYPE)
6291 if (TREE_CODE (name) == TYPE_DECL)
6292 name = DECL_NAME (name);
6294 type_name = IDENTIFIER_POINTER (name);
6297 type_name = "__unknown__";
6299 switch (TREE_CODE (type))
6302 /* Carefully distinguish the C character types, without messing
6303 up if the language is not C. Note that we check only for the names
6304 that contain spaces; other names might occur by coincidence in other
6306 if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
6307 && (type == char_type_node
6308 || ! strcmp (type_name, "signed char")
6309 || ! strcmp (type_name, "unsigned char"))))
6311 if (TREE_UNSIGNED (type))
6312 encoding = DW_ATE_unsigned;
6314 encoding = DW_ATE_signed;
6317 /* else fall through */
6320 /* GNU Pascal/Ada CHAR type. Not used in C. */
6321 if (TREE_UNSIGNED (type))
6322 encoding = DW_ATE_unsigned_char;
6324 encoding = DW_ATE_signed_char;
6328 encoding = DW_ATE_float;
6331 /* Dwarf2 doesn't know anything about complex ints, so use
6332 a user defined type for it. */
6334 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
6335 encoding = DW_ATE_complex_float;
6337 encoding = DW_ATE_lo_user;
6341 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
6342 encoding = DW_ATE_boolean;
6346 abort (); /* No other TREE_CODEs are Dwarf fundamental types. */
6349 base_type_result = new_die (DW_TAG_base_type, comp_unit_die);
6350 if (demangle_name_func)
6351 type_name = (*demangle_name_func) (type_name);
6353 add_AT_string (base_type_result, DW_AT_name, type_name);
6354 add_AT_unsigned (base_type_result, DW_AT_byte_size,
6355 int_size_in_bytes (type));
6356 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
6358 return base_type_result;
6361 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
6362 the Dwarf "root" type for the given input type. The Dwarf "root" type of
6363 a given type is generally the same as the given type, except that if the
6364 given type is a pointer or reference type, then the root type of the given
6365 type is the root type of the "basis" type for the pointer or reference
6366 type. (This definition of the "root" type is recursive.) Also, the root
6367 type of a `const' qualified type or a `volatile' qualified type is the
6368 root type of the given type without the qualifiers. */
6374 if (TREE_CODE (type) == ERROR_MARK)
6375 return error_mark_node;
6377 switch (TREE_CODE (type))
6380 return error_mark_node;
6383 case REFERENCE_TYPE:
6384 return type_main_variant (root_type (TREE_TYPE (type)));
6387 return type_main_variant (type);
6391 /* Given a pointer to an arbitrary ..._TYPE tree node, return non-zero if the
6392 given input type is a Dwarf "fundamental" type. Otherwise return null. */
6398 switch (TREE_CODE (type))
6413 case QUAL_UNION_TYPE:
6418 case REFERENCE_TYPE:
6431 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
6432 entry that chains various modifiers in front of the given type. */
6435 modified_type_die (type, is_const_type, is_volatile_type, context_die)
6437 register int is_const_type;
6438 register int is_volatile_type;
6439 register dw_die_ref context_die;
6441 register enum tree_code code = TREE_CODE (type);
6442 register dw_die_ref mod_type_die = NULL;
6443 register dw_die_ref sub_die = NULL;
6444 register tree item_type = NULL;
6446 if (code != ERROR_MARK)
6448 type = build_type_variant (type, is_const_type, is_volatile_type);
6450 mod_type_die = lookup_type_die (type);
6452 return mod_type_die;
6454 /* Handle C typedef types. */
6455 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
6456 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
6458 tree dtype = TREE_TYPE (TYPE_NAME (type));
6461 /* For a named type, use the typedef. */
6462 gen_type_die (type, context_die);
6463 mod_type_die = lookup_type_die (type);
6466 else if (is_const_type < TYPE_READONLY (dtype)
6467 || is_volatile_type < TYPE_VOLATILE (dtype))
6468 /* cv-unqualified version of named type. Just use the unnamed
6469 type to which it refers. */
6471 = modified_type_die (DECL_ORIGINAL_TYPE (TYPE_NAME (type)),
6472 is_const_type, is_volatile_type,
6474 /* Else cv-qualified version of named type; fall through. */
6479 else if (is_const_type)
6481 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die);
6482 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
6484 else if (is_volatile_type)
6486 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die);
6487 sub_die = modified_type_die (type, 0, 0, context_die);
6489 else if (code == POINTER_TYPE)
6491 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die);
6492 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
6494 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
6496 item_type = TREE_TYPE (type);
6498 else if (code == REFERENCE_TYPE)
6500 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die);
6501 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
6503 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
6505 item_type = TREE_TYPE (type);
6507 else if (is_base_type (type))
6508 mod_type_die = base_type_die (type);
6511 gen_type_die (type, context_die);
6513 /* We have to get the type_main_variant here (and pass that to the
6514 `lookup_type_die' routine) because the ..._TYPE node we have
6515 might simply be a *copy* of some original type node (where the
6516 copy was created to help us keep track of typedef names) and
6517 that copy might have a different TYPE_UID from the original
6519 mod_type_die = lookup_type_die (type_main_variant (type));
6520 if (mod_type_die == NULL)
6525 equate_type_number_to_die (type, mod_type_die);
6527 /* We must do this after the equate_type_number_to_die call, in case
6528 this is a recursive type. This ensures that the modified_type_die
6529 recursion will terminate even if the type is recursive. Recursive
6530 types are possible in Ada. */
6531 sub_die = modified_type_die (item_type,
6532 TYPE_READONLY (item_type),
6533 TYPE_VOLATILE (item_type),
6536 if (sub_die != NULL)
6537 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
6539 return mod_type_die;
6542 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
6543 an enumerated type. */
6549 return TREE_CODE (type) == ENUMERAL_TYPE;
6552 /* Return the register number described by a given RTL node. */
6558 register unsigned regno = REGNO (rtl);
6560 if (regno >= FIRST_PSEUDO_REGISTER)
6562 warning ("internal regno botch: regno = %d\n", regno);
6566 regno = DBX_REGISTER_NUMBER (regno);
6570 /* Return a location descriptor that designates a machine register. */
6572 static dw_loc_descr_ref
6573 reg_loc_descriptor (rtl)
6576 register dw_loc_descr_ref loc_result = NULL;
6577 register unsigned reg = reg_number (rtl);
6580 loc_result = new_loc_descr (DW_OP_reg0 + reg, 0, 0);
6582 loc_result = new_loc_descr (DW_OP_regx, reg, 0);
6587 /* Return a location descriptor that designates a base+offset location. */
6589 static dw_loc_descr_ref
6590 based_loc_descr (reg, offset)
6594 register dw_loc_descr_ref loc_result;
6595 /* For the "frame base", we use the frame pointer or stack pointer
6596 registers, since the RTL for local variables is relative to one of
6598 register unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed
6599 ? HARD_FRAME_POINTER_REGNUM
6600 : STACK_POINTER_REGNUM);
6603 loc_result = new_loc_descr (DW_OP_fbreg, offset, 0);
6605 loc_result = new_loc_descr (DW_OP_breg0 + reg, offset, 0);
6607 loc_result = new_loc_descr (DW_OP_bregx, reg, offset);
6612 /* Return true if this RTL expression describes a base+offset calculation. */
6618 return (GET_CODE (rtl) == PLUS
6619 && ((GET_CODE (XEXP (rtl, 0)) == REG
6620 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
6623 /* The following routine converts the RTL for a variable or parameter
6624 (resident in memory) into an equivalent Dwarf representation of a
6625 mechanism for getting the address of that same variable onto the top of a
6626 hypothetical "address evaluation" stack.
6628 When creating memory location descriptors, we are effectively transforming
6629 the RTL for a memory-resident object into its Dwarf postfix expression
6630 equivalent. This routine recursively descends an RTL tree, turning
6631 it into Dwarf postfix code as it goes.
6633 MODE is the mode of the memory reference, needed to handle some
6634 autoincrement addressing modes. */
6636 static dw_loc_descr_ref
6637 mem_loc_descriptor (rtl, mode)
6639 enum machine_mode mode;
6641 dw_loc_descr_ref mem_loc_result = NULL;
6642 /* Note that for a dynamically sized array, the location we will generate a
6643 description of here will be the lowest numbered location which is
6644 actually within the array. That's *not* necessarily the same as the
6645 zeroth element of the array. */
6647 #ifdef ASM_SIMPLIFY_DWARF_ADDR
6648 rtl = ASM_SIMPLIFY_DWARF_ADDR (rtl);
6651 switch (GET_CODE (rtl))
6655 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
6656 just fall into the SUBREG code. */
6658 /* ... fall through ... */
6661 /* The case of a subreg may arise when we have a local (register)
6662 variable or a formal (register) parameter which doesn't quite fill
6663 up an entire register. For now, just assume that it is
6664 legitimate to make the Dwarf info refer to the whole register which
6665 contains the given subreg. */
6666 rtl = XEXP (rtl, 0);
6668 /* ... fall through ... */
6671 /* Whenever a register number forms a part of the description of the
6672 method for calculating the (dynamic) address of a memory resident
6673 object, DWARF rules require the register number be referred to as
6674 a "base register". This distinction is not based in any way upon
6675 what category of register the hardware believes the given register
6676 belongs to. This is strictly DWARF terminology we're dealing with
6677 here. Note that in cases where the location of a memory-resident
6678 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
6679 OP_CONST (0)) the actual DWARF location descriptor that we generate
6680 may just be OP_BASEREG (basereg). This may look deceptively like
6681 the object in question was allocated to a register (rather than in
6682 memory) so DWARF consumers need to be aware of the subtle
6683 distinction between OP_REG and OP_BASEREG. */
6684 mem_loc_result = based_loc_descr (reg_number (rtl), 0);
6688 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
6689 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
6693 /* Some ports can transform a symbol ref into a label ref, because
6694 the symbol ref is too far away and has to be dumped into a constant
6698 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
6699 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
6700 mem_loc_result->dw_loc_oprnd1.v.val_addr = save_rtx (rtl);
6705 /* Turn these into a PLUS expression and fall into the PLUS code
6707 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
6708 GEN_INT (GET_CODE (rtl) == PRE_INC
6709 ? GET_MODE_UNIT_SIZE (mode)
6710 : - GET_MODE_UNIT_SIZE (mode)));
6712 /* ... fall through ... */
6715 if (is_based_loc (rtl))
6716 mem_loc_result = based_loc_descr (reg_number (XEXP (rtl, 0)),
6717 INTVAL (XEXP (rtl, 1)));
6720 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 0),
6722 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 1),
6724 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_plus, 0, 0));
6729 /* If a pseudo-reg is optimized away, it is possible for it to
6730 be replaced with a MEM containing a multiply. */
6731 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 0), mode));
6732 add_loc_descr (&mem_loc_result, mem_loc_descriptor (XEXP (rtl, 1), mode));
6733 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
6737 mem_loc_result = new_loc_descr (DW_OP_constu, INTVAL (rtl), 0);
6744 return mem_loc_result;
6747 /* Return a descriptor that describes the concatenation of two locations.
6748 This is typically a complex variable. */
6750 static dw_loc_descr_ref
6751 concat_loc_descriptor (x0, x1)
6752 register rtx x0, x1;
6754 dw_loc_descr_ref cc_loc_result = NULL;
6756 if (!is_pseudo_reg (x0)
6757 && (GET_CODE (x0) != MEM || !is_pseudo_reg (XEXP (x0, 0))))
6758 add_loc_descr (&cc_loc_result, loc_descriptor (x0));
6759 add_loc_descr (&cc_loc_result,
6760 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x0)), 0));
6762 if (!is_pseudo_reg (x1)
6763 && (GET_CODE (x1) != MEM || !is_pseudo_reg (XEXP (x1, 0))))
6764 add_loc_descr (&cc_loc_result, loc_descriptor (x1));
6765 add_loc_descr (&cc_loc_result,
6766 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (GET_MODE (x1)), 0));
6768 return cc_loc_result;
6771 /* Output a proper Dwarf location descriptor for a variable or parameter
6772 which is either allocated in a register or in a memory location. For a
6773 register, we just generate an OP_REG and the register number. For a
6774 memory location we provide a Dwarf postfix expression describing how to
6775 generate the (dynamic) address of the object onto the address stack. */
6777 static dw_loc_descr_ref
6778 loc_descriptor (rtl)
6781 dw_loc_descr_ref loc_result = NULL;
6782 switch (GET_CODE (rtl))
6785 /* The case of a subreg may arise when we have a local (register)
6786 variable or a formal (register) parameter which doesn't quite fill
6787 up an entire register. For now, just assume that it is
6788 legitimate to make the Dwarf info refer to the whole register which
6789 contains the given subreg. */
6790 rtl = XEXP (rtl, 0);
6792 /* ... fall through ... */
6795 loc_result = reg_loc_descriptor (rtl);
6799 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
6803 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
6813 /* Given a value, round it up to the lowest multiple of `boundary'
6814 which is not less than the value itself. */
6816 static inline HOST_WIDE_INT
6817 ceiling (value, boundary)
6818 HOST_WIDE_INT value;
6819 unsigned int boundary;
6821 return (((value + boundary - 1) / boundary) * boundary);
6824 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
6825 pointer to the declared type for the relevant field variable, or return
6826 `integer_type_node' if the given node turns out to be an
6835 if (TREE_CODE (decl) == ERROR_MARK)
6836 return integer_type_node;
6838 type = DECL_BIT_FIELD_TYPE (decl);
6839 if (type == NULL_TREE)
6840 type = TREE_TYPE (decl);
6845 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
6846 node, return the alignment in bits for the type, or else return
6847 BITS_PER_WORD if the node actually turns out to be an
6850 static inline unsigned
6851 simple_type_align_in_bits (type)
6854 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
6857 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
6858 node, return the size in bits for the type if it is a constant, or else
6859 return the alignment for the type if the type's size is not constant, or
6860 else return BITS_PER_WORD if the type actually turns out to be an
6863 static inline unsigned HOST_WIDE_INT
6864 simple_type_size_in_bits (type)
6867 if (TREE_CODE (type) == ERROR_MARK)
6868 return BITS_PER_WORD;
6871 register tree type_size_tree = TYPE_SIZE (type);
6873 if (! host_integerp (type_size_tree, 1))
6874 return TYPE_ALIGN (type);
6876 return tree_low_cst (type_size_tree, 1);
6880 /* Given a pointer to what is assumed to be a FIELD_DECL node, compute and
6881 return the byte offset of the lowest addressed byte of the "containing
6882 object" for the given FIELD_DECL, or return 0 if we are unable to
6883 determine what that offset is, either because the argument turns out to
6884 be a pointer to an ERROR_MARK node, or because the offset is actually
6885 variable. (We can't handle the latter case just yet). */
6887 static HOST_WIDE_INT
6888 field_byte_offset (decl)
6891 unsigned int type_align_in_bytes;
6892 unsigned int type_align_in_bits;
6893 unsigned HOST_WIDE_INT type_size_in_bits;
6894 HOST_WIDE_INT object_offset_in_align_units;
6895 HOST_WIDE_INT object_offset_in_bits;
6896 HOST_WIDE_INT object_offset_in_bytes;
6898 tree field_size_tree;
6899 HOST_WIDE_INT bitpos_int;
6900 HOST_WIDE_INT deepest_bitpos;
6901 unsigned HOST_WIDE_INT field_size_in_bits;
6903 if (TREE_CODE (decl) == ERROR_MARK)
6906 if (TREE_CODE (decl) != FIELD_DECL)
6909 type = field_type (decl);
6910 field_size_tree = DECL_SIZE (decl);
6912 /* If there was an error, the size could be zero. */
6913 if (! field_size_tree)
6921 /* We cannot yet cope with fields whose positions are variable, so
6922 for now, when we see such things, we simply return 0. Someday, we may
6923 be able to handle such cases, but it will be damn difficult. */
6924 if (! host_integerp (bit_position (decl), 0))
6927 bitpos_int = int_bit_position (decl);
6929 /* If we don't know the size of the field, pretend it's a full word. */
6930 if (host_integerp (field_size_tree, 1))
6931 field_size_in_bits = tree_low_cst (field_size_tree, 1);
6933 field_size_in_bits = BITS_PER_WORD;
6935 type_size_in_bits = simple_type_size_in_bits (type);
6936 type_align_in_bits = simple_type_align_in_bits (type);
6937 type_align_in_bytes = type_align_in_bits / BITS_PER_UNIT;
6939 /* Note that the GCC front-end doesn't make any attempt to keep track of
6940 the starting bit offset (relative to the start of the containing
6941 structure type) of the hypothetical "containing object" for a bit-
6942 field. Thus, when computing the byte offset value for the start of the
6943 "containing object" of a bit-field, we must deduce this information on
6944 our own. This can be rather tricky to do in some cases. For example,
6945 handling the following structure type definition when compiling for an
6946 i386/i486 target (which only aligns long long's to 32-bit boundaries)
6949 struct S { int field1; long long field2:31; };
6951 Fortunately, there is a simple rule-of-thumb which can be
6952 used in such cases. When compiling for an i386/i486, GCC will allocate
6953 8 bytes for the structure shown above. It decides to do this based upon
6954 one simple rule for bit-field allocation. Quite simply, GCC allocates
6955 each "containing object" for each bit-field at the first (i.e. lowest
6956 addressed) legitimate alignment boundary (based upon the required
6957 minimum alignment for the declared type of the field) which it can
6958 possibly use, subject to the condition that there is still enough
6959 available space remaining in the containing object (when allocated at
6960 the selected point) to fully accommodate all of the bits of the
6961 bit-field itself. This simple rule makes it obvious why GCC allocates
6962 8 bytes for each object of the structure type shown above. When looking
6963 for a place to allocate the "containing object" for `field2', the
6964 compiler simply tries to allocate a 64-bit "containing object" at each
6965 successive 32-bit boundary (starting at zero) until it finds a place to
6966 allocate that 64- bit field such that at least 31 contiguous (and
6967 previously unallocated) bits remain within that selected 64 bit field.
6968 (As it turns out, for the example above, the compiler finds that it is
6969 OK to allocate the "containing object" 64-bit field at bit-offset zero
6970 within the structure type.) Here we attempt to work backwards from the
6971 limited set of facts we're given, and we try to deduce from those facts,
6972 where GCC must have believed that the containing object started (within
6973 the structure type). The value we deduce is then used (by the callers of
6974 this routine) to generate DW_AT_location and DW_AT_bit_offset attributes
6975 for fields (both bit-fields and, in the case of DW_AT_location, regular
6978 /* Figure out the bit-distance from the start of the structure to the
6979 "deepest" bit of the bit-field. */
6980 deepest_bitpos = bitpos_int + field_size_in_bits;
6982 /* This is the tricky part. Use some fancy footwork to deduce where the
6983 lowest addressed bit of the containing object must be. */
6984 object_offset_in_bits
6985 = ceiling (deepest_bitpos, type_align_in_bits) - type_size_in_bits;
6987 /* Compute the offset of the containing object in "alignment units". */
6988 object_offset_in_align_units = object_offset_in_bits / type_align_in_bits;
6990 /* Compute the offset of the containing object in bytes. */
6991 object_offset_in_bytes = object_offset_in_align_units * type_align_in_bytes;
6993 return object_offset_in_bytes;
6996 /* The following routines define various Dwarf attributes and any data
6997 associated with them. */
6999 /* Add a location description attribute value to a DIE.
7001 This emits location attributes suitable for whole variables and
7002 whole parameters. Note that the location attributes for struct fields are
7003 generated by the routine `data_member_location_attribute' below. */
7006 add_AT_location_description (die, attr_kind, rtl)
7008 enum dwarf_attribute attr_kind;
7011 /* Handle a special case. If we are about to output a location descriptor
7012 for a variable or parameter which has been optimized out of existence,
7013 don't do that. A variable which has been optimized out
7014 of existence will have a DECL_RTL value which denotes a pseudo-reg.
7015 Currently, in some rare cases, variables can have DECL_RTL values which
7016 look like (MEM (REG pseudo-reg#)). These cases are due to bugs
7017 elsewhere in the compiler. We treat such cases as if the variable(s) in
7018 question had been optimized out of existence. */
7020 if (is_pseudo_reg (rtl)
7021 || (GET_CODE (rtl) == MEM
7022 && is_pseudo_reg (XEXP (rtl, 0)))
7023 /* This can happen for a PARM_DECL with a DECL_INCOMING_RTL which
7024 references the internal argument pointer (a pseudo) in a function
7025 where all references to the internal argument pointer were
7026 eliminated via the optimizers. */
7027 || (GET_CODE (rtl) == MEM
7028 && GET_CODE (XEXP (rtl, 0)) == PLUS
7029 && is_pseudo_reg (XEXP (XEXP (rtl, 0), 0)))
7030 || (GET_CODE (rtl) == CONCAT
7031 && is_pseudo_reg (XEXP (rtl, 0))
7032 && is_pseudo_reg (XEXP (rtl, 1))))
7035 add_AT_loc (die, attr_kind, loc_descriptor (rtl));
7038 /* Attach the specialized form of location attribute used for data
7039 members of struct and union types. In the special case of a
7040 FIELD_DECL node which represents a bit-field, the "offset" part
7041 of this special location descriptor must indicate the distance
7042 in bytes from the lowest-addressed byte of the containing struct
7043 or union type to the lowest-addressed byte of the "containing
7044 object" for the bit-field. (See the `field_byte_offset' function
7045 above).. For any given bit-field, the "containing object" is a
7046 hypothetical object (of some integral or enum type) within which
7047 the given bit-field lives. The type of this hypothetical
7048 "containing object" is always the same as the declared type of
7049 the individual bit-field itself (for GCC anyway... the DWARF
7050 spec doesn't actually mandate this). Note that it is the size
7051 (in bytes) of the hypothetical "containing object" which will
7052 be given in the DW_AT_byte_size attribute for this bit-field.
7053 (See the `byte_size_attribute' function below.) It is also used
7054 when calculating the value of the DW_AT_bit_offset attribute.
7055 (See the `bit_offset_attribute' function below). */
7058 add_data_member_location_attribute (die, decl)
7059 register dw_die_ref die;
7062 register unsigned long offset;
7063 register dw_loc_descr_ref loc_descr;
7064 register enum dwarf_location_atom op;
7066 if (TREE_CODE (decl) == TREE_VEC)
7067 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
7069 offset = field_byte_offset (decl);
7071 /* The DWARF2 standard says that we should assume that the structure address
7072 is already on the stack, so we can specify a structure field address
7073 by using DW_OP_plus_uconst. */
7075 #ifdef MIPS_DEBUGGING_INFO
7076 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst operator
7077 correctly. It works only if we leave the offset on the stack. */
7080 op = DW_OP_plus_uconst;
7083 loc_descr = new_loc_descr (op, offset, 0);
7084 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
7087 /* Attach an DW_AT_const_value attribute for a variable or a parameter which
7088 does not have a "location" either in memory or in a register. These
7089 things can arise in GNU C when a constant is passed as an actual parameter
7090 to an inlined function. They can also arise in C++ where declared
7091 constants do not necessarily get memory "homes". */
7094 add_const_value_attribute (die, rtl)
7095 register dw_die_ref die;
7098 switch (GET_CODE (rtl))
7101 /* Note that a CONST_INT rtx could represent either an integer or a
7102 floating-point constant. A CONST_INT is used whenever the constant
7103 will fit into a single word. In all such cases, the original mode
7104 of the constant value is wiped out, and the CONST_INT rtx is
7105 assigned VOIDmode. */
7106 add_AT_unsigned (die, DW_AT_const_value, (unsigned) INTVAL (rtl));
7110 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
7111 floating-point constant. A CONST_DOUBLE is used whenever the
7112 constant requires more than one word in order to be adequately
7113 represented. We output CONST_DOUBLEs as blocks. */
7115 register enum machine_mode mode = GET_MODE (rtl);
7117 if (GET_MODE_CLASS (mode) == MODE_FLOAT)
7119 register unsigned length = GET_MODE_SIZE (mode) / sizeof (long);
7123 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
7127 REAL_VALUE_TO_TARGET_SINGLE (rv, array[0]);
7131 REAL_VALUE_TO_TARGET_DOUBLE (rv, array);
7136 REAL_VALUE_TO_TARGET_LONG_DOUBLE (rv, array);
7143 add_AT_float (die, DW_AT_const_value, length, array);
7146 add_AT_long_long (die, DW_AT_const_value,
7147 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
7152 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
7158 add_AT_addr (die, DW_AT_const_value, save_rtx (rtl));
7162 /* In cases where an inlined instance of an inline function is passed
7163 the address of an `auto' variable (which is local to the caller) we
7164 can get a situation where the DECL_RTL of the artificial local
7165 variable (for the inlining) which acts as a stand-in for the
7166 corresponding formal parameter (of the inline function) will look
7167 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
7168 exactly a compile-time constant expression, but it isn't the address
7169 of the (artificial) local variable either. Rather, it represents the
7170 *value* which the artificial local variable always has during its
7171 lifetime. We currently have no way to represent such quasi-constant
7172 values in Dwarf, so for now we just punt and generate nothing. */
7176 /* No other kinds of rtx should be possible here. */
7182 /* Generate *either* an DW_AT_location attribute or else an DW_AT_const_value
7183 data attribute for a variable or a parameter. We generate the
7184 DW_AT_const_value attribute only in those cases where the given variable
7185 or parameter does not have a true "location" either in memory or in a
7186 register. This can happen (for example) when a constant is passed as an
7187 actual argument in a call to an inline function. (It's possible that
7188 these things can crop up in other ways also.) Note that one type of
7189 constant value which can be passed into an inlined function is a constant
7190 pointer. This can happen for example if an actual argument in an inlined
7191 function call evaluates to a compile-time constant address. */
7194 add_location_or_const_value_attribute (die, decl)
7195 register dw_die_ref die;
7199 register tree declared_type;
7200 register tree passed_type;
7202 if (TREE_CODE (decl) == ERROR_MARK)
7205 if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL)
7208 /* Here we have to decide where we are going to say the parameter "lives"
7209 (as far as the debugger is concerned). We only have a couple of
7210 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
7212 DECL_RTL normally indicates where the parameter lives during most of the
7213 activation of the function. If optimization is enabled however, this
7214 could be either NULL or else a pseudo-reg. Both of those cases indicate
7215 that the parameter doesn't really live anywhere (as far as the code
7216 generation parts of GCC are concerned) during most of the function's
7217 activation. That will happen (for example) if the parameter is never
7218 referenced within the function.
7220 We could just generate a location descriptor here for all non-NULL
7221 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
7222 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
7223 where DECL_RTL is NULL or is a pseudo-reg.
7225 Note however that we can only get away with using DECL_INCOMING_RTL as
7226 a backup substitute for DECL_RTL in certain limited cases. In cases
7227 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
7228 we can be sure that the parameter was passed using the same type as it is
7229 declared to have within the function, and that its DECL_INCOMING_RTL
7230 points us to a place where a value of that type is passed.
7232 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
7233 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
7234 because in these cases DECL_INCOMING_RTL points us to a value of some
7235 type which is *different* from the type of the parameter itself. Thus,
7236 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
7237 such cases, the debugger would end up (for example) trying to fetch a
7238 `float' from a place which actually contains the first part of a
7239 `double'. That would lead to really incorrect and confusing
7240 output at debug-time.
7242 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
7243 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
7244 are a couple of exceptions however. On little-endian machines we can
7245 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
7246 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
7247 an integral type that is smaller than TREE_TYPE (decl). These cases arise
7248 when (on a little-endian machine) a non-prototyped function has a
7249 parameter declared to be of type `short' or `char'. In such cases,
7250 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
7251 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
7252 passed `int' value. If the debugger then uses that address to fetch
7253 a `short' or a `char' (on a little-endian machine) the result will be
7254 the correct data, so we allow for such exceptional cases below.
7256 Note that our goal here is to describe the place where the given formal
7257 parameter lives during most of the function's activation (i.e. between
7258 the end of the prologue and the start of the epilogue). We'll do that
7259 as best as we can. Note however that if the given formal parameter is
7260 modified sometime during the execution of the function, then a stack
7261 backtrace (at debug-time) will show the function as having been
7262 called with the *new* value rather than the value which was
7263 originally passed in. This happens rarely enough that it is not
7264 a major problem, but it *is* a problem, and I'd like to fix it.
7266 A future version of dwarf2out.c may generate two additional
7267 attributes for any given DW_TAG_formal_parameter DIE which will
7268 describe the "passed type" and the "passed location" for the
7269 given formal parameter in addition to the attributes we now
7270 generate to indicate the "declared type" and the "active
7271 location" for each parameter. This additional set of attributes
7272 could be used by debuggers for stack backtraces. Separately, note
7273 that sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be
7274 NULL also. This happens (for example) for inlined-instances of
7275 inline function formal parameters which are never referenced.
7276 This really shouldn't be happening. All PARM_DECL nodes should
7277 get valid non-NULL DECL_INCOMING_RTL values, but integrate.c
7278 doesn't currently generate these values for inlined instances of
7279 inline function parameters, so when we see such cases, we are
7280 just out-of-luck for the time being (until integrate.c
7283 /* Use DECL_RTL as the "location" unless we find something better. */
7284 rtl = DECL_RTL (decl);
7286 if (TREE_CODE (decl) == PARM_DECL)
7288 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
7290 declared_type = type_main_variant (TREE_TYPE (decl));
7291 passed_type = type_main_variant (DECL_ARG_TYPE (decl));
7293 /* This decl represents a formal parameter which was optimized out.
7294 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
7295 all* cases where (rtl == NULL_RTX) just below. */
7296 if (declared_type == passed_type)
7297 rtl = DECL_INCOMING_RTL (decl);
7298 else if (! BYTES_BIG_ENDIAN
7299 && TREE_CODE (declared_type) == INTEGER_TYPE
7300 && (GET_MODE_SIZE (TYPE_MODE (declared_type))
7301 <= GET_MODE_SIZE (TYPE_MODE (passed_type))))
7302 rtl = DECL_INCOMING_RTL (decl);
7305 /* If the parm was passed in registers, but lives on the stack, then
7306 make a big endian correction if the mode of the type of the
7307 parameter is not the same as the mode of the rtl. */
7308 /* ??? This is the same series of checks that are made in dbxout.c before
7309 we reach the big endian correction code there. It isn't clear if all
7310 of these checks are necessary here, but keeping them all is the safe
7312 else if (GET_CODE (rtl) == MEM
7313 && XEXP (rtl, 0) != const0_rtx
7314 && ! CONSTANT_P (XEXP (rtl, 0))
7315 /* Not passed in memory. */
7316 && GET_CODE (DECL_INCOMING_RTL (decl)) != MEM
7317 /* Not passed by invisible reference. */
7318 && (GET_CODE (XEXP (rtl, 0)) != REG
7319 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
7320 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
7321 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
7322 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
7325 /* Big endian correction check. */
7327 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
7328 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
7331 int offset = (UNITS_PER_WORD
7332 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
7333 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
7334 plus_constant (XEXP (rtl, 0), offset));
7338 if (rtl == NULL_RTX)
7341 rtl = eliminate_regs (rtl, 0, NULL_RTX);
7342 #ifdef LEAF_REG_REMAP
7343 if (current_function_uses_only_leaf_regs)
7344 leaf_renumber_regs_insn (rtl);
7347 switch (GET_CODE (rtl))
7350 /* The address of a variable that was optimized away; don't emit
7361 /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
7362 add_const_value_attribute (die, rtl);
7369 add_AT_location_description (die, DW_AT_location, rtl);
7377 /* Generate an DW_AT_name attribute given some string value to be included as
7378 the value of the attribute. */
7381 add_name_attribute (die, name_string)
7382 register dw_die_ref die;
7383 register const char *name_string;
7385 if (name_string != NULL && *name_string != 0)
7387 if (demangle_name_func)
7388 name_string = (*demangle_name_func) (name_string);
7390 add_AT_string (die, DW_AT_name, name_string);
7394 /* Given a tree node describing an array bound (either lower or upper) output
7395 a representation for that bound. */
7398 add_bound_info (subrange_die, bound_attr, bound)
7399 register dw_die_ref subrange_die;
7400 register enum dwarf_attribute bound_attr;
7401 register tree bound;
7403 /* If this is an Ada unconstrained array type, then don't emit any debug
7404 info because the array bounds are unknown. They are parameterized when
7405 the type is instantiated. */
7406 if (contains_placeholder_p (bound))
7409 switch (TREE_CODE (bound))
7414 /* All fixed-bounds are represented by INTEGER_CST nodes. */
7416 if (! host_integerp (bound, 0)
7417 || (bound_attr == DW_AT_lower_bound
7418 && ((is_c_family () && integer_zerop (bound))
7419 || (is_fortran () && integer_onep (bound)))))
7420 /* use the default */
7423 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
7428 case NON_LVALUE_EXPR:
7429 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
7433 /* If optimization is turned on, the SAVE_EXPRs that describe how to
7434 access the upper bound values may be bogus. If they refer to a
7435 register, they may only describe how to get at these values at the
7436 points in the generated code right after they have just been
7437 computed. Worse yet, in the typical case, the upper bound values
7438 will not even *be* computed in the optimized code (though the
7439 number of elements will), so these SAVE_EXPRs are entirely
7440 bogus. In order to compensate for this fact, we check here to see
7441 if optimization is enabled, and if so, we don't add an attribute
7442 for the (unknown and unknowable) upper bound. This should not
7443 cause too much trouble for existing (stupid?) debuggers because
7444 they have to deal with empty upper bounds location descriptions
7445 anyway in order to be able to deal with incomplete array types.
7446 Of course an intelligent debugger (GDB?) should be able to
7447 comprehend that a missing upper bound specification in a array
7448 type used for a storage class `auto' local array variable
7449 indicates that the upper bound is both unknown (at compile- time)
7450 and unknowable (at run-time) due to optimization.
7452 We assume that a MEM rtx is safe because gcc wouldn't put the
7453 value there unless it was going to be used repeatedly in the
7454 function, i.e. for cleanups. */
7455 if (! optimize || (SAVE_EXPR_RTL (bound)
7456 && GET_CODE (SAVE_EXPR_RTL (bound)) == MEM))
7458 register dw_die_ref ctx = lookup_decl_die (current_function_decl);
7459 register dw_die_ref decl_die = new_die (DW_TAG_variable, ctx);
7460 register rtx loc = SAVE_EXPR_RTL (bound);
7462 /* If the RTL for the SAVE_EXPR is memory, handle the case where
7463 it references an outer function's frame. */
7465 if (GET_CODE (loc) == MEM)
7467 rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
7469 if (XEXP (loc, 0) != new_addr)
7470 loc = gen_rtx_MEM (GET_MODE (loc), new_addr);
7473 add_AT_flag (decl_die, DW_AT_artificial, 1);
7474 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
7475 add_AT_location_description (decl_die, DW_AT_location, loc);
7476 add_AT_die_ref (subrange_die, bound_attr, decl_die);
7479 /* Else leave out the attribute. */
7485 /* ??? These types of bounds can be created by the Ada front end,
7486 and it isn't clear how to emit debug info for them. */
7494 /* Note that the block of subscript information for an array type also
7495 includes information about the element type of type given array type. */
7498 add_subscript_info (type_die, type)
7499 register dw_die_ref type_die;
7502 #ifndef MIPS_DEBUGGING_INFO
7503 register unsigned dimension_number;
7505 register tree lower, upper;
7506 register dw_die_ref subrange_die;
7508 /* The GNU compilers represent multidimensional array types as sequences of
7509 one dimensional array types whose element types are themselves array
7510 types. Here we squish that down, so that each multidimensional array
7511 type gets only one array_type DIE in the Dwarf debugging info. The draft
7512 Dwarf specification say that we are allowed to do this kind of
7513 compression in C (because there is no difference between an array or
7514 arrays and a multidimensional array in C) but for other source languages
7515 (e.g. Ada) we probably shouldn't do this. */
7517 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
7518 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
7519 We work around this by disabling this feature. See also
7520 gen_array_type_die. */
7521 #ifndef MIPS_DEBUGGING_INFO
7522 for (dimension_number = 0;
7523 TREE_CODE (type) == ARRAY_TYPE;
7524 type = TREE_TYPE (type), dimension_number++)
7527 register tree domain = TYPE_DOMAIN (type);
7529 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
7530 and (in GNU C only) variable bounds. Handle all three forms
7532 subrange_die = new_die (DW_TAG_subrange_type, type_die);
7535 /* We have an array type with specified bounds. */
7536 lower = TYPE_MIN_VALUE (domain);
7537 upper = TYPE_MAX_VALUE (domain);
7539 /* define the index type. */
7540 if (TREE_TYPE (domain))
7542 /* ??? This is probably an Ada unnamed subrange type. Ignore the
7543 TREE_TYPE field. We can't emit debug info for this
7544 because it is an unnamed integral type. */
7545 if (TREE_CODE (domain) == INTEGER_TYPE
7546 && TYPE_NAME (domain) == NULL_TREE
7547 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
7548 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
7551 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
7555 /* ??? If upper is NULL, the array has unspecified length,
7556 but it does have a lower bound. This happens with Fortran
7558 Since the debugger is definitely going to need to know N
7559 to produce useful results, go ahead and output the lower
7560 bound solo, and hope the debugger can cope. */
7562 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
7564 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
7567 /* We have an array type with an unspecified length. The DWARF-2
7568 spec does not say how to handle this; let's just leave out the
7573 #ifndef MIPS_DEBUGGING_INFO
7579 add_byte_size_attribute (die, tree_node)
7581 register tree tree_node;
7583 register unsigned size;
7585 switch (TREE_CODE (tree_node))
7593 case QUAL_UNION_TYPE:
7594 size = int_size_in_bytes (tree_node);
7597 /* For a data member of a struct or union, the DW_AT_byte_size is
7598 generally given as the number of bytes normally allocated for an
7599 object of the *declared* type of the member itself. This is true
7600 even for bit-fields. */
7601 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
7607 /* Note that `size' might be -1 when we get to this point. If it is, that
7608 indicates that the byte size of the entity in question is variable. We
7609 have no good way of expressing this fact in Dwarf at the present time,
7610 so just let the -1 pass on through. */
7612 add_AT_unsigned (die, DW_AT_byte_size, size);
7615 /* For a FIELD_DECL node which represents a bit-field, output an attribute
7616 which specifies the distance in bits from the highest order bit of the
7617 "containing object" for the bit-field to the highest order bit of the
7620 For any given bit-field, the "containing object" is a hypothetical
7621 object (of some integral or enum type) within which the given bit-field
7622 lives. The type of this hypothetical "containing object" is always the
7623 same as the declared type of the individual bit-field itself. The
7624 determination of the exact location of the "containing object" for a
7625 bit-field is rather complicated. It's handled by the
7626 `field_byte_offset' function (above).
7628 Note that it is the size (in bytes) of the hypothetical "containing object"
7629 which will be given in the DW_AT_byte_size attribute for this bit-field.
7630 (See `byte_size_attribute' above). */
7633 add_bit_offset_attribute (die, decl)
7634 register dw_die_ref die;
7637 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
7638 tree type = DECL_BIT_FIELD_TYPE (decl);
7639 HOST_WIDE_INT bitpos_int;
7640 HOST_WIDE_INT highest_order_object_bit_offset;
7641 HOST_WIDE_INT highest_order_field_bit_offset;
7642 HOST_WIDE_INT unsigned bit_offset;
7644 /* Must be a field and a bit field. */
7646 || TREE_CODE (decl) != FIELD_DECL)
7649 /* We can't yet handle bit-fields whose offsets are variable, so if we
7650 encounter such things, just return without generating any attribute
7651 whatsoever. Likewise for variable or too large size. */
7652 if (! host_integerp (bit_position (decl), 0)
7653 || ! host_integerp (DECL_SIZE (decl), 1))
7656 bitpos_int = int_bit_position (decl);
7658 /* Note that the bit offset is always the distance (in bits) from the
7659 highest-order bit of the "containing object" to the highest-order bit of
7660 the bit-field itself. Since the "high-order end" of any object or field
7661 is different on big-endian and little-endian machines, the computation
7662 below must take account of these differences. */
7663 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
7664 highest_order_field_bit_offset = bitpos_int;
7666 if (! BYTES_BIG_ENDIAN)
7668 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
7669 highest_order_object_bit_offset += simple_type_size_in_bits (type);
7673 = (! BYTES_BIG_ENDIAN
7674 ? highest_order_object_bit_offset - highest_order_field_bit_offset
7675 : highest_order_field_bit_offset - highest_order_object_bit_offset);
7677 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
7680 /* For a FIELD_DECL node which represents a bit field, output an attribute
7681 which specifies the length in bits of the given field. */
7684 add_bit_size_attribute (die, decl)
7685 register dw_die_ref die;
7688 /* Must be a field and a bit field. */
7689 if (TREE_CODE (decl) != FIELD_DECL
7690 || ! DECL_BIT_FIELD_TYPE (decl))
7693 if (host_integerp (DECL_SIZE (decl), 1))
7694 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
7697 /* If the compiled language is ANSI C, then add a 'prototyped'
7698 attribute, if arg types are given for the parameters of a function. */
7701 add_prototyped_attribute (die, func_type)
7702 register dw_die_ref die;
7703 register tree func_type;
7705 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
7706 && TYPE_ARG_TYPES (func_type) != NULL)
7707 add_AT_flag (die, DW_AT_prototyped, 1);
7711 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
7712 by looking in either the type declaration or object declaration
7716 add_abstract_origin_attribute (die, origin)
7717 register dw_die_ref die;
7718 register tree origin;
7720 dw_die_ref origin_die = NULL;
7722 if (TREE_CODE (origin) != FUNCTION_DECL)
7724 /* We may have gotten separated from the block for the inlined
7725 function, if we're in an exception handler or some such; make
7726 sure that the abstract function has been written out.
7728 Doing this for nested functions is wrong, however; functions are
7729 distinct units, and our context might not even be inline. */
7732 fn = TYPE_STUB_DECL (fn);
7733 fn = decl_function_context (fn);
7735 gen_abstract_function (fn);
7738 if (DECL_P (origin))
7739 origin_die = lookup_decl_die (origin);
7740 else if (TYPE_P (origin))
7741 origin_die = lookup_type_die (origin);
7743 if (origin_die == NULL)
7746 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
7749 /* We do not currently support the pure_virtual attribute. */
7752 add_pure_or_virtual_attribute (die, func_decl)
7753 register dw_die_ref die;
7754 register tree func_decl;
7756 if (DECL_VINDEX (func_decl))
7758 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
7760 if (host_integerp (DECL_VINDEX (func_decl), 0))
7761 add_AT_loc (die, DW_AT_vtable_elem_location,
7762 new_loc_descr (DW_OP_constu,
7763 tree_low_cst (DECL_VINDEX (func_decl), 0),
7766 /* GNU extension: Record what type this method came from originally. */
7767 if (debug_info_level > DINFO_LEVEL_TERSE)
7768 add_AT_die_ref (die, DW_AT_containing_type,
7769 lookup_type_die (DECL_CONTEXT (func_decl)));
7773 /* Add source coordinate attributes for the given decl. */
7776 add_src_coords_attributes (die, decl)
7777 register dw_die_ref die;
7780 register unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
7782 add_AT_unsigned (die, DW_AT_decl_file, file_index);
7783 add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
7786 /* Add an DW_AT_name attribute and source coordinate attribute for the
7787 given decl, but only if it actually has a name. */
7790 add_name_and_src_coords_attributes (die, decl)
7791 register dw_die_ref die;
7794 register tree decl_name;
7796 decl_name = DECL_NAME (decl);
7797 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
7799 add_name_attribute (die, dwarf2_name (decl, 0));
7800 if (! DECL_ARTIFICIAL (decl))
7801 add_src_coords_attributes (die, decl);
7803 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
7804 && TREE_PUBLIC (decl)
7805 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
7806 add_AT_string (die, DW_AT_MIPS_linkage_name,
7807 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
7811 /* Push a new declaration scope. */
7814 push_decl_scope (scope)
7817 /* Make room in the decl_scope_table, if necessary. */
7818 if (decl_scope_table_allocated == decl_scope_depth)
7820 decl_scope_table_allocated += DECL_SCOPE_TABLE_INCREMENT;
7822 = (tree *) xrealloc (decl_scope_table,
7823 decl_scope_table_allocated * sizeof (tree));
7826 decl_scope_table[decl_scope_depth] = scope;
7830 /* Pop a declaration scope. */
7834 if (decl_scope_depth <= 0)
7839 /* Return the DIE for the scope that immediately contains this type.
7840 Non-named types get global scope. Named types nested in other
7841 types get their containing scope if it's open, or global scope
7842 otherwise. All other types (i.e. function-local named types) get
7843 the current active scope. */
7846 scope_die_for (t, context_die)
7848 register dw_die_ref context_die;
7850 register dw_die_ref scope_die = NULL;
7851 register tree containing_scope;
7854 /* Non-types always go in the current scope. */
7858 containing_scope = TYPE_CONTEXT (t);
7860 /* Ignore namespaces for the moment. */
7861 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
7862 containing_scope = NULL_TREE;
7864 /* Ignore function type "scopes" from the C frontend. They mean that
7865 a tagged type is local to a parmlist of a function declarator, but
7866 that isn't useful to DWARF. */
7867 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
7868 containing_scope = NULL_TREE;
7870 if (containing_scope == NULL_TREE)
7871 scope_die = comp_unit_die;
7872 else if (TYPE_P (containing_scope))
7874 /* For types, we can just look up the appropriate DIE. But
7875 first we check to see if we're in the middle of emitting it
7876 so we know where the new DIE should go. */
7878 for (i = decl_scope_depth - 1; i >= 0; --i)
7879 if (decl_scope_table[i] == containing_scope)
7884 if (debug_info_level > DINFO_LEVEL_TERSE
7885 && !TREE_ASM_WRITTEN (containing_scope))
7888 /* If none of the current dies are suitable, we get file scope. */
7889 scope_die = comp_unit_die;
7892 scope_die = lookup_type_die (containing_scope);
7895 scope_die = context_die;
7900 /* Returns nonzero iff CONTEXT_DIE is internal to a function. */
7902 static inline int local_scope_p PARAMS ((dw_die_ref));
7904 local_scope_p (context_die)
7905 dw_die_ref context_die;
7907 for (; context_die; context_die = context_die->die_parent)
7908 if (context_die->die_tag == DW_TAG_inlined_subroutine
7909 || context_die->die_tag == DW_TAG_subprogram)
7914 /* Returns nonzero iff CONTEXT_DIE is a class. */
7916 static inline int class_scope_p PARAMS ((dw_die_ref));
7918 class_scope_p (context_die)
7919 dw_die_ref context_die;
7922 && (context_die->die_tag == DW_TAG_structure_type
7923 || context_die->die_tag == DW_TAG_union_type));
7926 /* Many forms of DIEs require a "type description" attribute. This
7927 routine locates the proper "type descriptor" die for the type given
7928 by 'type', and adds an DW_AT_type attribute below the given die. */
7931 add_type_attribute (object_die, type, decl_const, decl_volatile, context_die)
7932 register dw_die_ref object_die;
7934 register int decl_const;
7935 register int decl_volatile;
7936 register dw_die_ref context_die;
7938 register enum tree_code code = TREE_CODE (type);
7939 register dw_die_ref type_die = NULL;
7941 /* ??? If this type is an unnamed subrange type of an integral or
7942 floating-point type, use the inner type. This is because we have no
7943 support for unnamed types in base_type_die. This can happen if this is
7944 an Ada subrange type. Correct solution is emit a subrange type die. */
7945 if ((code == INTEGER_TYPE || code == REAL_TYPE)
7946 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
7947 type = TREE_TYPE (type), code = TREE_CODE (type);
7949 if (code == ERROR_MARK)
7952 /* Handle a special case. For functions whose return type is void, we
7953 generate *no* type attribute. (Note that no object may have type
7954 `void', so this only applies to function return types). */
7955 if (code == VOID_TYPE)
7958 type_die = modified_type_die (type,
7959 decl_const || TYPE_READONLY (type),
7960 decl_volatile || TYPE_VOLATILE (type),
7962 if (type_die != NULL)
7963 add_AT_die_ref (object_die, DW_AT_type, type_die);
7966 /* Given a tree pointer to a struct, class, union, or enum type node, return
7967 a pointer to the (string) tag name for the given type, or zero if the type
7968 was declared without a tag. */
7974 register const char *name = 0;
7976 if (TYPE_NAME (type) != 0)
7978 register tree t = 0;
7980 /* Find the IDENTIFIER_NODE for the type name. */
7981 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
7982 t = TYPE_NAME (type);
7984 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
7985 a TYPE_DECL node, regardless of whether or not a `typedef' was
7987 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
7988 && ! DECL_IGNORED_P (TYPE_NAME (type)))
7989 t = DECL_NAME (TYPE_NAME (type));
7991 /* Now get the name as a string, or invent one. */
7993 name = IDENTIFIER_POINTER (t);
7996 return (name == 0 || *name == '\0') ? 0 : name;
7999 /* Return the type associated with a data member, make a special check
8000 for bit field types. */
8003 member_declared_type (member)
8004 register tree member;
8006 return (DECL_BIT_FIELD_TYPE (member)
8007 ? DECL_BIT_FIELD_TYPE (member)
8008 : TREE_TYPE (member));
8011 /* Get the decl's label, as described by its RTL. This may be different
8012 from the DECL_NAME name used in the source file. */
8016 decl_start_label (decl)
8021 x = DECL_RTL (decl);
8022 if (GET_CODE (x) != MEM)
8026 if (GET_CODE (x) != SYMBOL_REF)
8029 fnname = XSTR (x, 0);
8034 /* These routines generate the internal representation of the DIE's for
8035 the compilation unit. Debugging information is collected by walking
8036 the declaration trees passed in from dwarf2out_decl(). */
8039 gen_array_type_die (type, context_die)
8041 register dw_die_ref context_die;
8043 register dw_die_ref scope_die = scope_die_for (type, context_die);
8044 register dw_die_ref array_die;
8045 register tree element_type;
8047 /* ??? The SGI dwarf reader fails for array of array of enum types unless
8048 the inner array type comes before the outer array type. Thus we must
8049 call gen_type_die before we call new_die. See below also. */
8050 #ifdef MIPS_DEBUGGING_INFO
8051 gen_type_die (TREE_TYPE (type), context_die);
8054 array_die = new_die (DW_TAG_array_type, scope_die);
8057 /* We default the array ordering. SDB will probably do
8058 the right things even if DW_AT_ordering is not present. It's not even
8059 an issue until we start to get into multidimensional arrays anyway. If
8060 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
8061 then we'll have to put the DW_AT_ordering attribute back in. (But if
8062 and when we find out that we need to put these in, we will only do so
8063 for multidimensional arrays. */
8064 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
8067 #ifdef MIPS_DEBUGGING_INFO
8068 /* The SGI compilers handle arrays of unknown bound by setting
8069 AT_declaration and not emitting any subrange DIEs. */
8070 if (! TYPE_DOMAIN (type))
8071 add_AT_unsigned (array_die, DW_AT_declaration, 1);
8074 add_subscript_info (array_die, type);
8076 add_name_attribute (array_die, type_tag (type));
8077 equate_type_number_to_die (type, array_die);
8079 /* Add representation of the type of the elements of this array type. */
8080 element_type = TREE_TYPE (type);
8082 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
8083 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
8084 We work around this by disabling this feature. See also
8085 add_subscript_info. */
8086 #ifndef MIPS_DEBUGGING_INFO
8087 while (TREE_CODE (element_type) == ARRAY_TYPE)
8088 element_type = TREE_TYPE (element_type);
8090 gen_type_die (element_type, context_die);
8093 add_type_attribute (array_die, element_type, 0, 0, context_die);
8097 gen_set_type_die (type, context_die)
8099 register dw_die_ref context_die;
8101 register dw_die_ref type_die
8102 = new_die (DW_TAG_set_type, scope_die_for (type, context_die));
8104 equate_type_number_to_die (type, type_die);
8105 add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die);
8110 gen_entry_point_die (decl, context_die)
8112 register dw_die_ref context_die;
8114 register tree origin = decl_ultimate_origin (decl);
8115 register dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die);
8117 add_abstract_origin_attribute (decl_die, origin);
8120 add_name_and_src_coords_attributes (decl_die, decl);
8121 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
8125 if (DECL_ABSTRACT (decl))
8126 equate_decl_number_to_die (decl, decl_die);
8128 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
8132 /* Remember a type in the incomplete_types_list. */
8135 add_incomplete_type (type)
8138 if (incomplete_types == incomplete_types_allocated)
8140 incomplete_types_allocated += INCOMPLETE_TYPES_INCREMENT;
8141 incomplete_types_list
8142 = (tree *) xrealloc (incomplete_types_list,
8143 sizeof (tree) * incomplete_types_allocated);
8146 incomplete_types_list[incomplete_types++] = type;
8149 /* Walk through the list of incomplete types again, trying once more to
8150 emit full debugging info for them. */
8153 retry_incomplete_types ()
8157 while (incomplete_types)
8160 type = incomplete_types_list[incomplete_types];
8161 gen_type_die (type, comp_unit_die);
8165 /* Generate a DIE to represent an inlined instance of an enumeration type. */
8168 gen_inlined_enumeration_type_die (type, context_die)
8170 register dw_die_ref context_die;
8172 register dw_die_ref type_die = new_die (DW_TAG_enumeration_type,
8174 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8175 be incomplete and such types are not marked. */
8176 add_abstract_origin_attribute (type_die, type);
8179 /* Generate a DIE to represent an inlined instance of a structure type. */
8182 gen_inlined_structure_type_die (type, context_die)
8184 register dw_die_ref context_die;
8186 register dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die);
8188 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8189 be incomplete and such types are not marked. */
8190 add_abstract_origin_attribute (type_die, type);
8193 /* Generate a DIE to represent an inlined instance of a union type. */
8196 gen_inlined_union_type_die (type, context_die)
8198 register dw_die_ref context_die;
8200 register dw_die_ref type_die = new_die (DW_TAG_union_type, context_die);
8202 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
8203 be incomplete and such types are not marked. */
8204 add_abstract_origin_attribute (type_die, type);
8207 /* Generate a DIE to represent an enumeration type. Note that these DIEs
8208 include all of the information about the enumeration values also. Each
8209 enumerated type name/value is listed as a child of the enumerated type
8213 gen_enumeration_type_die (type, context_die)
8215 register dw_die_ref context_die;
8217 register dw_die_ref type_die = lookup_type_die (type);
8219 if (type_die == NULL)
8221 type_die = new_die (DW_TAG_enumeration_type,
8222 scope_die_for (type, context_die));
8223 equate_type_number_to_die (type, type_die);
8224 add_name_attribute (type_die, type_tag (type));
8226 else if (! TYPE_SIZE (type))
8229 remove_AT (type_die, DW_AT_declaration);
8231 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
8232 given enum type is incomplete, do not generate the DW_AT_byte_size
8233 attribute or the DW_AT_element_list attribute. */
8234 if (TYPE_SIZE (type))
8238 TREE_ASM_WRITTEN (type) = 1;
8239 add_byte_size_attribute (type_die, type);
8240 if (TYPE_STUB_DECL (type) != NULL_TREE)
8241 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
8243 /* If the first reference to this type was as the return type of an
8244 inline function, then it may not have a parent. Fix this now. */
8245 if (type_die->die_parent == NULL)
8246 add_child_die (scope_die_for (type, context_die), type_die);
8248 for (link = TYPE_FIELDS (type);
8249 link != NULL; link = TREE_CHAIN (link))
8251 register dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die);
8253 add_name_attribute (enum_die,
8254 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
8256 if (host_integerp (TREE_VALUE (link), 0))
8258 if (tree_int_cst_sgn (TREE_VALUE (link)) < 0)
8259 add_AT_int (enum_die, DW_AT_const_value,
8260 tree_low_cst (TREE_VALUE (link), 0));
8262 add_AT_unsigned (enum_die, DW_AT_const_value,
8263 tree_low_cst (TREE_VALUE (link), 0));
8268 add_AT_flag (type_die, DW_AT_declaration, 1);
8272 /* Generate a DIE to represent either a real live formal parameter decl or to
8273 represent just the type of some formal parameter position in some function
8276 Note that this routine is a bit unusual because its argument may be a
8277 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
8278 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
8279 node. If it's the former then this function is being called to output a
8280 DIE to represent a formal parameter object (or some inlining thereof). If
8281 it's the latter, then this function is only being called to output a
8282 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
8283 argument type of some subprogram type. */
8286 gen_formal_parameter_die (node, context_die)
8288 register dw_die_ref context_die;
8290 register dw_die_ref parm_die
8291 = new_die (DW_TAG_formal_parameter, context_die);
8292 register tree origin;
8294 switch (TREE_CODE_CLASS (TREE_CODE (node)))
8297 origin = decl_ultimate_origin (node);
8299 add_abstract_origin_attribute (parm_die, origin);
8302 add_name_and_src_coords_attributes (parm_die, node);
8303 add_type_attribute (parm_die, TREE_TYPE (node),
8304 TREE_READONLY (node),
8305 TREE_THIS_VOLATILE (node),
8307 if (DECL_ARTIFICIAL (node))
8308 add_AT_flag (parm_die, DW_AT_artificial, 1);
8311 equate_decl_number_to_die (node, parm_die);
8312 if (! DECL_ABSTRACT (node))
8313 add_location_or_const_value_attribute (parm_die, node);
8318 /* We were called with some kind of a ..._TYPE node. */
8319 add_type_attribute (parm_die, node, 0, 0, context_die);
8329 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
8330 at the end of an (ANSI prototyped) formal parameters list. */
8333 gen_unspecified_parameters_die (decl_or_type, context_die)
8334 register tree decl_or_type ATTRIBUTE_UNUSED;
8335 register dw_die_ref context_die;
8337 new_die (DW_TAG_unspecified_parameters, context_die);
8340 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
8341 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
8342 parameters as specified in some function type specification (except for
8343 those which appear as part of a function *definition*). */
8346 gen_formal_types_die (function_or_method_type, context_die)
8347 register tree function_or_method_type;
8348 register dw_die_ref context_die;
8351 register tree formal_type = NULL;
8352 register tree first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
8355 /* In the case where we are generating a formal types list for a C++
8356 non-static member function type, skip over the first thing on the
8357 TYPE_ARG_TYPES list because it only represents the type of the hidden
8358 `this pointer'. The debugger should be able to figure out (without
8359 being explicitly told) that this non-static member function type takes a
8360 `this pointer' and should be able to figure what the type of that hidden
8361 parameter is from the DW_AT_member attribute of the parent
8362 DW_TAG_subroutine_type DIE. */
8363 if (TREE_CODE (function_or_method_type) == METHOD_TYPE)
8364 first_parm_type = TREE_CHAIN (first_parm_type);
8367 /* Make our first pass over the list of formal parameter types and output a
8368 DW_TAG_formal_parameter DIE for each one. */
8369 for (link = first_parm_type; link; link = TREE_CHAIN (link))
8371 register dw_die_ref parm_die;
8373 formal_type = TREE_VALUE (link);
8374 if (formal_type == void_type_node)
8377 /* Output a (nameless) DIE to represent the formal parameter itself. */
8378 parm_die = gen_formal_parameter_die (formal_type, context_die);
8379 if (TREE_CODE (function_or_method_type) == METHOD_TYPE
8380 && link == first_parm_type)
8381 add_AT_flag (parm_die, DW_AT_artificial, 1);
8384 /* If this function type has an ellipsis, add a
8385 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
8386 if (formal_type != void_type_node)
8387 gen_unspecified_parameters_die (function_or_method_type, context_die);
8389 /* Make our second (and final) pass over the list of formal parameter types
8390 and output DIEs to represent those types (as necessary). */
8391 for (link = TYPE_ARG_TYPES (function_or_method_type);
8393 link = TREE_CHAIN (link))
8395 formal_type = TREE_VALUE (link);
8396 if (formal_type == void_type_node)
8399 gen_type_die (formal_type, context_die);
8403 /* We want to generate the DIE for TYPE so that we can generate the
8404 die for MEMBER, which has been defined; we will need to refer back
8405 to the member declaration nested within TYPE. If we're trying to
8406 generate minimal debug info for TYPE, processing TYPE won't do the
8407 trick; we need to attach the member declaration by hand. */
8410 gen_type_die_for_member (type, member, context_die)
8412 dw_die_ref context_die;
8414 gen_type_die (type, context_die);
8416 /* If we're trying to avoid duplicate debug info, we may not have
8417 emitted the member decl for this function. Emit it now. */
8418 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
8419 && ! lookup_decl_die (member))
8421 if (decl_ultimate_origin (member))
8424 push_decl_scope (type);
8425 if (TREE_CODE (member) == FUNCTION_DECL)
8426 gen_subprogram_die (member, lookup_type_die (type));
8428 gen_variable_die (member, lookup_type_die (type));
8433 /* Generate the DWARF2 info for the "abstract" instance
8434 of a function which we may later generate inlined and/or
8435 out-of-line instances of. */
8438 gen_abstract_function (decl)
8441 register dw_die_ref old_die = lookup_decl_die (decl);
8444 if (old_die && get_AT_unsigned (old_die, DW_AT_inline))
8445 /* We've already generated the abstract instance. */
8448 save_fn = current_function_decl;
8449 current_function_decl = decl;
8451 set_decl_abstract_flags (decl, 1);
8452 dwarf2out_decl (decl);
8453 set_decl_abstract_flags (decl, 0);
8455 current_function_decl = save_fn;
8458 /* Generate a DIE to represent a declared function (either file-scope or
8462 gen_subprogram_die (decl, context_die)
8464 register dw_die_ref context_die;
8466 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
8467 register tree origin = decl_ultimate_origin (decl);
8468 register dw_die_ref subr_die;
8469 register rtx fp_reg;
8470 register tree fn_arg_types;
8471 register tree outer_scope;
8472 register dw_die_ref old_die = lookup_decl_die (decl);
8473 register int declaration = (current_function_decl != decl
8474 || class_scope_p (context_die));
8476 /* Note that it is possible to have both DECL_ABSTRACT and `declaration'
8477 be true, if we started to generate the abstract instance of an inline,
8478 decided to output its containing class, and proceeded to emit the
8479 declaration of the inline from the member list for the class. In that
8480 case, `declaration' takes priority; we'll get back to the abstract
8481 instance when we're done with the class. */
8483 /* The class-scope declaration DIE must be the primary DIE. */
8484 if (origin && declaration && class_scope_p (context_die))
8493 if (declaration && ! local_scope_p (context_die))
8496 /* Fixup die_parent for the abstract instance of a nested
8498 if (old_die && old_die->die_parent == NULL)
8499 add_child_die (context_die, old_die);
8501 subr_die = new_die (DW_TAG_subprogram, context_die);
8502 add_abstract_origin_attribute (subr_die, origin);
8504 else if (old_die && DECL_ABSTRACT (decl)
8505 && get_AT_unsigned (old_die, DW_AT_inline))
8507 /* This must be a redefinition of an extern inline function.
8508 We can just reuse the old die here. */
8511 /* Clear out the inlined attribute and parm types. */
8512 remove_AT (subr_die, DW_AT_inline);
8513 remove_children (subr_die);
8517 register unsigned file_index
8518 = lookup_filename (DECL_SOURCE_FILE (decl));
8520 if (get_AT_flag (old_die, DW_AT_declaration) != 1)
8522 /* ??? This can happen if there is a bug in the program, for
8523 instance, if it has duplicate function definitions. Ideally,
8524 we should detect this case and ignore it. For now, if we have
8525 already reported an error, any error at all, then assume that
8526 we got here because of a input error, not a dwarf2 bug. */
8532 /* If the definition comes from the same place as the declaration,
8533 maybe use the old DIE. We always want the DIE for this function
8534 that has the *_pc attributes to be under comp_unit_die so the
8535 debugger can find it. For inlines, that is the concrete instance,
8536 so we can use the old DIE here. For non-inline methods, we want a
8537 specification DIE at toplevel, so we need a new DIE. For local
8538 class methods, this doesn't apply; we just use the old DIE. */
8539 if ((DECL_ABSTRACT (decl) || old_die->die_parent == comp_unit_die
8540 || context_die == NULL)
8541 && (DECL_ARTIFICIAL (decl)
8542 || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
8543 && (get_AT_unsigned (old_die, DW_AT_decl_line)
8544 == (unsigned)DECL_SOURCE_LINE (decl)))))
8548 /* Clear out the declaration attribute and the parm types. */
8549 remove_AT (subr_die, DW_AT_declaration);
8550 remove_children (subr_die);
8554 subr_die = new_die (DW_TAG_subprogram, context_die);
8555 add_AT_die_ref (subr_die, DW_AT_specification, old_die);
8556 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
8557 add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
8558 if (get_AT_unsigned (old_die, DW_AT_decl_line)
8559 != (unsigned)DECL_SOURCE_LINE (decl))
8561 (subr_die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
8566 subr_die = new_die (DW_TAG_subprogram, context_die);
8568 if (TREE_PUBLIC (decl))
8569 add_AT_flag (subr_die, DW_AT_external, 1);
8571 add_name_and_src_coords_attributes (subr_die, decl);
8572 if (debug_info_level > DINFO_LEVEL_TERSE)
8574 register tree type = TREE_TYPE (decl);
8576 add_prototyped_attribute (subr_die, type);
8577 add_type_attribute (subr_die, TREE_TYPE (type), 0, 0, context_die);
8580 add_pure_or_virtual_attribute (subr_die, decl);
8581 if (DECL_ARTIFICIAL (decl))
8582 add_AT_flag (subr_die, DW_AT_artificial, 1);
8583 if (TREE_PROTECTED (decl))
8584 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
8585 else if (TREE_PRIVATE (decl))
8586 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
8592 add_AT_flag (subr_die, DW_AT_declaration, 1);
8594 /* The first time we see a member function, it is in the context of
8595 the class to which it belongs. We make sure of this by emitting
8596 the class first. The next time is the definition, which is
8597 handled above. The two may come from the same source text. */
8598 if (DECL_CONTEXT (decl) || DECL_ABSTRACT (decl))
8599 equate_decl_number_to_die (decl, subr_die);
8601 else if (DECL_ABSTRACT (decl))
8603 if (DECL_INLINE (decl) && !flag_no_inline)
8605 /* ??? Checking DECL_DEFER_OUTPUT is correct for static
8606 inline functions, but not for extern inline functions.
8607 We can't get this completely correct because information
8608 about whether the function was declared inline is not
8610 if (DECL_DEFER_OUTPUT (decl))
8611 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
8613 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
8616 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
8618 equate_decl_number_to_die (decl, subr_die);
8620 else if (!DECL_EXTERNAL (decl))
8622 if (origin == NULL_TREE)
8623 equate_decl_number_to_die (decl, subr_die);
8625 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
8626 current_funcdef_number);
8627 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
8628 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
8629 current_funcdef_number);
8630 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
8632 add_pubname (decl, subr_die);
8633 add_arange (decl, subr_die);
8635 #ifdef MIPS_DEBUGGING_INFO
8636 /* Add a reference to the FDE for this routine. */
8637 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
8640 /* Define the "frame base" location for this routine. We use the
8641 frame pointer or stack pointer registers, since the RTL for local
8642 variables is relative to one of them. */
8644 = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
8645 add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
8648 /* ??? This fails for nested inline functions, because context_display
8649 is not part of the state saved/restored for inline functions. */
8650 if (current_function_needs_context)
8651 add_AT_location_description (subr_die, DW_AT_static_link,
8652 lookup_static_chain (decl));
8656 /* Now output descriptions of the arguments for this function. This gets
8657 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
8658 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
8659 `...' at the end of the formal parameter list. In order to find out if
8660 there was a trailing ellipsis or not, we must instead look at the type
8661 associated with the FUNCTION_DECL. This will be a node of type
8662 FUNCTION_TYPE. If the chain of type nodes hanging off of this
8663 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
8664 an ellipsis at the end. */
8666 /* In the case where we are describing a mere function declaration, all we
8667 need to do here (and all we *can* do here) is to describe the *types* of
8668 its formal parameters. */
8669 if (debug_info_level <= DINFO_LEVEL_TERSE)
8671 else if (declaration)
8672 gen_formal_types_die (TREE_TYPE (decl), subr_die);
8675 /* Generate DIEs to represent all known formal parameters */
8676 register tree arg_decls = DECL_ARGUMENTS (decl);
8679 /* When generating DIEs, generate the unspecified_parameters DIE
8680 instead if we come across the arg "__builtin_va_alist" */
8681 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
8682 if (TREE_CODE (parm) == PARM_DECL)
8684 if (DECL_NAME (parm)
8685 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
8686 "__builtin_va_alist"))
8687 gen_unspecified_parameters_die (parm, subr_die);
8689 gen_decl_die (parm, subr_die);
8692 /* Decide whether we need a unspecified_parameters DIE at the end.
8693 There are 2 more cases to do this for: 1) the ansi ... declaration -
8694 this is detectable when the end of the arg list is not a
8695 void_type_node 2) an unprototyped function declaration (not a
8696 definition). This just means that we have no info about the
8697 parameters at all. */
8698 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
8699 if (fn_arg_types != NULL)
8701 /* this is the prototyped case, check for ... */
8702 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
8703 gen_unspecified_parameters_die (decl, subr_die);
8705 else if (DECL_INITIAL (decl) == NULL_TREE)
8706 gen_unspecified_parameters_die (decl, subr_die);
8709 /* Output Dwarf info for all of the stuff within the body of the function
8710 (if it has one - it may be just a declaration). */
8711 outer_scope = DECL_INITIAL (decl);
8713 /* Note that here, `outer_scope' is a pointer to the outermost BLOCK
8714 node created to represent a function. This outermost BLOCK actually
8715 represents the outermost binding contour for the function, i.e. the
8716 contour in which the function's formal parameters and labels get
8717 declared. Curiously, it appears that the front end doesn't actually
8718 put the PARM_DECL nodes for the current function onto the BLOCK_VARS
8719 list for this outer scope. (They are strung off of the DECL_ARGUMENTS
8720 list for the function instead.) The BLOCK_VARS list for the
8721 `outer_scope' does provide us with a list of the LABEL_DECL nodes for
8722 the function however, and we output DWARF info for those in
8723 decls_for_scope. Just within the `outer_scope' there will be a BLOCK
8724 node representing the function's outermost pair of curly braces, and
8725 any blocks used for the base and member initializers of a C++
8726 constructor function. */
8727 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
8729 current_function_has_inlines = 0;
8730 decls_for_scope (outer_scope, subr_die, 0);
8732 #if 0 && defined (MIPS_DEBUGGING_INFO)
8733 if (current_function_has_inlines)
8735 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
8736 if (! comp_unit_has_inlines)
8738 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
8739 comp_unit_has_inlines = 1;
8746 /* Generate a DIE to represent a declared data object. */
8749 gen_variable_die (decl, context_die)
8751 register dw_die_ref context_die;
8753 register tree origin = decl_ultimate_origin (decl);
8754 register dw_die_ref var_die = new_die (DW_TAG_variable, context_die);
8756 dw_die_ref old_die = lookup_decl_die (decl);
8757 int declaration = (DECL_EXTERNAL (decl)
8758 || class_scope_p (context_die));
8761 add_abstract_origin_attribute (var_die, origin);
8762 /* Loop unrolling can create multiple blocks that refer to the same
8763 static variable, so we must test for the DW_AT_declaration flag. */
8764 /* ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
8765 copy decls and set the DECL_ABSTRACT flag on them instead of
8767 else if (old_die && TREE_STATIC (decl)
8768 && get_AT_flag (old_die, DW_AT_declaration) == 1)
8770 /* This is a definition of a C++ class level static. */
8771 add_AT_die_ref (var_die, DW_AT_specification, old_die);
8772 if (DECL_NAME (decl))
8774 register unsigned file_index
8775 = lookup_filename (DECL_SOURCE_FILE (decl));
8777 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
8778 add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
8780 if (get_AT_unsigned (old_die, DW_AT_decl_line)
8781 != (unsigned)DECL_SOURCE_LINE (decl))
8783 add_AT_unsigned (var_die, DW_AT_decl_line,
8784 DECL_SOURCE_LINE (decl));
8789 add_name_and_src_coords_attributes (var_die, decl);
8790 add_type_attribute (var_die, TREE_TYPE (decl),
8791 TREE_READONLY (decl),
8792 TREE_THIS_VOLATILE (decl), context_die);
8794 if (TREE_PUBLIC (decl))
8795 add_AT_flag (var_die, DW_AT_external, 1);
8797 if (DECL_ARTIFICIAL (decl))
8798 add_AT_flag (var_die, DW_AT_artificial, 1);
8800 if (TREE_PROTECTED (decl))
8801 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
8803 else if (TREE_PRIVATE (decl))
8804 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
8808 add_AT_flag (var_die, DW_AT_declaration, 1);
8810 if (class_scope_p (context_die) || DECL_ABSTRACT (decl))
8811 equate_decl_number_to_die (decl, var_die);
8813 if (! declaration && ! DECL_ABSTRACT (decl))
8815 add_location_or_const_value_attribute (var_die, decl);
8816 add_pubname (decl, var_die);
8820 /* Generate a DIE to represent a label identifier. */
8823 gen_label_die (decl, context_die)
8825 register dw_die_ref context_die;
8827 register tree origin = decl_ultimate_origin (decl);
8828 register dw_die_ref lbl_die = new_die (DW_TAG_label, context_die);
8830 char label[MAX_ARTIFICIAL_LABEL_BYTES];
8831 char label2[MAX_ARTIFICIAL_LABEL_BYTES];
8834 add_abstract_origin_attribute (lbl_die, origin);
8836 add_name_and_src_coords_attributes (lbl_die, decl);
8838 if (DECL_ABSTRACT (decl))
8839 equate_decl_number_to_die (decl, lbl_die);
8842 insn = DECL_RTL (decl);
8844 /* Deleted labels are programmer specified labels which have been
8845 eliminated because of various optimisations. We still emit them
8846 here so that it is possible to put breakpoints on them. */
8847 if (GET_CODE (insn) == CODE_LABEL
8848 || ((GET_CODE (insn) == NOTE
8849 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL)))
8851 /* When optimization is enabled (via -O) some parts of the compiler
8852 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
8853 represent source-level labels which were explicitly declared by
8854 the user. This really shouldn't be happening though, so catch
8855 it if it ever does happen. */
8856 if (INSN_DELETED_P (insn))
8859 sprintf (label2, INSN_LABEL_FMT, current_funcdef_number);
8860 ASM_GENERATE_INTERNAL_LABEL (label, label2,
8861 (unsigned) INSN_UID (insn));
8862 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
8867 /* Generate a DIE for a lexical block. */
8870 gen_lexical_block_die (stmt, context_die, depth)
8872 register dw_die_ref context_die;
8875 register dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die);
8876 char label[MAX_ARTIFICIAL_LABEL_BYTES];
8878 if (! BLOCK_ABSTRACT (stmt))
8880 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
8881 BLOCK_NUMBER (stmt));
8882 add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
8883 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
8884 BLOCK_NUMBER (stmt));
8885 add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
8888 decls_for_scope (stmt, stmt_die, depth);
8891 /* Generate a DIE for an inlined subprogram. */
8894 gen_inlined_subroutine_die (stmt, context_die, depth)
8896 register dw_die_ref context_die;
8899 if (! BLOCK_ABSTRACT (stmt))
8901 register dw_die_ref subr_die
8902 = new_die (DW_TAG_inlined_subroutine, context_die);
8903 register tree decl = block_ultimate_origin (stmt);
8904 char label[MAX_ARTIFICIAL_LABEL_BYTES];
8906 /* Emit info for the abstract instance first, if we haven't yet. */
8907 gen_abstract_function (decl);
8909 add_abstract_origin_attribute (subr_die, decl);
8910 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
8911 BLOCK_NUMBER (stmt));
8912 add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
8913 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
8914 BLOCK_NUMBER (stmt));
8915 add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
8916 decls_for_scope (stmt, subr_die, depth);
8917 current_function_has_inlines = 1;
8921 /* Generate a DIE for a field in a record, or structure. */
8924 gen_field_die (decl, context_die)
8926 register dw_die_ref context_die;
8928 register dw_die_ref decl_die = new_die (DW_TAG_member, context_die);
8930 add_name_and_src_coords_attributes (decl_die, decl);
8931 add_type_attribute (decl_die, member_declared_type (decl),
8932 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
8935 /* If this is a bit field... */
8936 if (DECL_BIT_FIELD_TYPE (decl))
8938 add_byte_size_attribute (decl_die, decl);
8939 add_bit_size_attribute (decl_die, decl);
8940 add_bit_offset_attribute (decl_die, decl);
8943 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
8944 add_data_member_location_attribute (decl_die, decl);
8946 if (DECL_ARTIFICIAL (decl))
8947 add_AT_flag (decl_die, DW_AT_artificial, 1);
8949 if (TREE_PROTECTED (decl))
8950 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
8952 else if (TREE_PRIVATE (decl))
8953 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
8957 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
8958 Use modified_type_die instead.
8959 We keep this code here just in case these types of DIEs may be needed to
8960 represent certain things in other languages (e.g. Pascal) someday. */
8962 gen_pointer_type_die (type, context_die)
8964 register dw_die_ref context_die;
8966 register dw_die_ref ptr_die
8967 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die));
8969 equate_type_number_to_die (type, ptr_die);
8970 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
8971 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
8974 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
8975 Use modified_type_die instead.
8976 We keep this code here just in case these types of DIEs may be needed to
8977 represent certain things in other languages (e.g. Pascal) someday. */
8979 gen_reference_type_die (type, context_die)
8981 register dw_die_ref context_die;
8983 register dw_die_ref ref_die
8984 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die));
8986 equate_type_number_to_die (type, ref_die);
8987 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
8988 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
8992 /* Generate a DIE for a pointer to a member type. */
8994 gen_ptr_to_mbr_type_die (type, context_die)
8996 register dw_die_ref context_die;
8998 register dw_die_ref ptr_die
8999 = new_die (DW_TAG_ptr_to_member_type, scope_die_for (type, context_die));
9001 equate_type_number_to_die (type, ptr_die);
9002 add_AT_die_ref (ptr_die, DW_AT_containing_type,
9003 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
9004 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
9007 /* Generate the DIE for the compilation unit. */
9010 gen_compile_unit_die (filename)
9011 register const char *filename;
9013 register dw_die_ref die;
9015 const char *wd = getpwd ();
9018 die = new_die (DW_TAG_compile_unit, NULL);
9019 add_name_attribute (die, filename);
9021 if (wd != NULL && filename[0] != DIR_SEPARATOR)
9022 add_AT_string (die, DW_AT_comp_dir, wd);
9024 sprintf (producer, "%s %s", language_string, version_string);
9026 #ifdef MIPS_DEBUGGING_INFO
9027 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
9028 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
9029 not appear in the producer string, the debugger reaches the conclusion
9030 that the object file is stripped and has no debugging information.
9031 To get the MIPS/SGI debugger to believe that there is debugging
9032 information in the object file, we add a -g to the producer string. */
9033 if (debug_info_level > DINFO_LEVEL_TERSE)
9034 strcat (producer, " -g");
9037 add_AT_string (die, DW_AT_producer, producer);
9039 if (strcmp (language_string, "GNU C++") == 0)
9040 language = DW_LANG_C_plus_plus;
9041 else if (strcmp (language_string, "GNU Ada") == 0)
9042 language = DW_LANG_Ada83;
9043 else if (strcmp (language_string, "GNU F77") == 0)
9044 language = DW_LANG_Fortran77;
9045 else if (strcmp (language_string, "GNU Pascal") == 0)
9046 language = DW_LANG_Pascal83;
9047 else if (flag_traditional)
9048 language = DW_LANG_C;
9050 language = DW_LANG_C89;
9052 add_AT_unsigned (die, DW_AT_language, language);
9057 /* Generate a DIE for a string type. */
9060 gen_string_type_die (type, context_die)
9062 register dw_die_ref context_die;
9064 register dw_die_ref type_die
9065 = new_die (DW_TAG_string_type, scope_die_for (type, context_die));
9067 equate_type_number_to_die (type, type_die);
9069 /* Fudge the string length attribute for now. */
9071 /* TODO: add string length info.
9072 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
9073 bound_representation (upper_bound, 0, 'u'); */
9076 /* Generate the DIE for a base class. */
9079 gen_inheritance_die (binfo, context_die)
9080 register tree binfo;
9081 register dw_die_ref context_die;
9083 dw_die_ref die = new_die (DW_TAG_inheritance, context_die);
9085 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
9086 add_data_member_location_attribute (die, binfo);
9088 if (TREE_VIA_VIRTUAL (binfo))
9089 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
9090 if (TREE_VIA_PUBLIC (binfo))
9091 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
9092 else if (TREE_VIA_PROTECTED (binfo))
9093 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
9096 /* Generate a DIE for a class member. */
9099 gen_member_die (type, context_die)
9101 register dw_die_ref context_die;
9103 register tree member;
9106 /* If this is not an incomplete type, output descriptions of each of its
9107 members. Note that as we output the DIEs necessary to represent the
9108 members of this record or union type, we will also be trying to output
9109 DIEs to represent the *types* of those members. However the `type'
9110 function (above) will specifically avoid generating type DIEs for member
9111 types *within* the list of member DIEs for this (containing) type execpt
9112 for those types (of members) which are explicitly marked as also being
9113 members of this (containing) type themselves. The g++ front- end can
9114 force any given type to be treated as a member of some other
9115 (containing) type by setting the TYPE_CONTEXT of the given (member) type
9116 to point to the TREE node representing the appropriate (containing)
9119 /* First output info about the base classes. */
9120 if (TYPE_BINFO (type) && TYPE_BINFO_BASETYPES (type))
9122 register tree bases = TYPE_BINFO_BASETYPES (type);
9123 register int n_bases = TREE_VEC_LENGTH (bases);
9126 for (i = 0; i < n_bases; i++)
9127 gen_inheritance_die (TREE_VEC_ELT (bases, i), context_die);
9130 /* Now output info about the data members and type members. */
9131 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
9133 /* If we thought we were generating minimal debug info for TYPE
9134 and then changed our minds, some of the member declarations
9135 may have already been defined. Don't define them again, but
9136 do put them in the right order. */
9138 child = lookup_decl_die (member);
9140 splice_child_die (context_die, child);
9142 gen_decl_die (member, context_die);
9145 /* Now output info about the function members (if any). */
9146 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
9148 child = lookup_decl_die (member);
9150 splice_child_die (context_die, child);
9152 gen_decl_die (member, context_die);
9156 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
9157 is set, we pretend that the type was never defined, so we only get the
9158 member DIEs needed by later specification DIEs. */
9161 gen_struct_or_union_type_die (type, context_die)
9163 register dw_die_ref context_die;
9165 register dw_die_ref type_die = lookup_type_die (type);
9166 register dw_die_ref scope_die = 0;
9167 register int nested = 0;
9168 int complete = (TYPE_SIZE (type)
9169 && (! TYPE_STUB_DECL (type)
9170 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
9172 if (type_die && ! complete)
9175 if (TYPE_CONTEXT (type) != NULL_TREE
9176 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type)))
9179 scope_die = scope_die_for (type, context_die);
9181 if (! type_die || (nested && scope_die == comp_unit_die))
9182 /* First occurrence of type or toplevel definition of nested class. */
9184 register dw_die_ref old_die = type_die;
9186 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
9187 ? DW_TAG_structure_type : DW_TAG_union_type,
9189 equate_type_number_to_die (type, type_die);
9190 add_name_attribute (type_die, type_tag (type));
9192 add_AT_die_ref (type_die, DW_AT_specification, old_die);
9195 remove_AT (type_die, DW_AT_declaration);
9197 /* If this type has been completed, then give it a byte_size attribute and
9198 then give a list of members. */
9201 /* Prevent infinite recursion in cases where the type of some member of
9202 this type is expressed in terms of this type itself. */
9203 TREE_ASM_WRITTEN (type) = 1;
9204 add_byte_size_attribute (type_die, type);
9205 if (TYPE_STUB_DECL (type) != NULL_TREE)
9206 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
9208 /* If the first reference to this type was as the return type of an
9209 inline function, then it may not have a parent. Fix this now. */
9210 if (type_die->die_parent == NULL)
9211 add_child_die (scope_die, type_die);
9213 push_decl_scope (type);
9214 gen_member_die (type, type_die);
9217 /* GNU extension: Record what type our vtable lives in. */
9218 if (TYPE_VFIELD (type))
9220 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
9222 gen_type_die (vtype, context_die);
9223 add_AT_die_ref (type_die, DW_AT_containing_type,
9224 lookup_type_die (vtype));
9229 add_AT_flag (type_die, DW_AT_declaration, 1);
9231 /* We don't need to do this for function-local types. */
9232 if (! decl_function_context (TYPE_STUB_DECL (type)))
9233 add_incomplete_type (type);
9237 /* Generate a DIE for a subroutine _type_. */
9240 gen_subroutine_type_die (type, context_die)
9242 register dw_die_ref context_die;
9244 register tree return_type = TREE_TYPE (type);
9245 register dw_die_ref subr_die
9246 = new_die (DW_TAG_subroutine_type, scope_die_for (type, context_die));
9248 equate_type_number_to_die (type, subr_die);
9249 add_prototyped_attribute (subr_die, type);
9250 add_type_attribute (subr_die, return_type, 0, 0, context_die);
9251 gen_formal_types_die (type, subr_die);
9254 /* Generate a DIE for a type definition */
9257 gen_typedef_die (decl, context_die)
9259 register dw_die_ref context_die;
9261 register dw_die_ref type_die;
9262 register tree origin;
9264 if (TREE_ASM_WRITTEN (decl))
9266 TREE_ASM_WRITTEN (decl) = 1;
9268 type_die = new_die (DW_TAG_typedef, context_die);
9269 origin = decl_ultimate_origin (decl);
9271 add_abstract_origin_attribute (type_die, origin);
9275 add_name_and_src_coords_attributes (type_die, decl);
9276 if (DECL_ORIGINAL_TYPE (decl))
9278 type = DECL_ORIGINAL_TYPE (decl);
9280 if (type == TREE_TYPE (decl))
9283 equate_type_number_to_die (TREE_TYPE (decl), type_die);
9286 type = TREE_TYPE (decl);
9287 add_type_attribute (type_die, type, TREE_READONLY (decl),
9288 TREE_THIS_VOLATILE (decl), context_die);
9291 if (DECL_ABSTRACT (decl))
9292 equate_decl_number_to_die (decl, type_die);
9295 /* Generate a type description DIE. */
9298 gen_type_die (type, context_die)
9300 register dw_die_ref context_die;
9304 if (type == NULL_TREE || type == error_mark_node)
9307 /* We are going to output a DIE to represent the unqualified version of
9308 this type (i.e. without any const or volatile qualifiers) so get the
9309 main variant (i.e. the unqualified version) of this type now. */
9310 type = type_main_variant (type);
9312 if (TREE_ASM_WRITTEN (type))
9315 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
9316 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
9318 TREE_ASM_WRITTEN (type) = 1;
9319 gen_decl_die (TYPE_NAME (type), context_die);
9323 switch (TREE_CODE (type))
9329 case REFERENCE_TYPE:
9330 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
9331 ensures that the gen_type_die recursion will terminate even if the
9332 type is recursive. Recursive types are possible in Ada. */
9333 /* ??? We could perhaps do this for all types before the switch
9335 TREE_ASM_WRITTEN (type) = 1;
9337 /* For these types, all that is required is that we output a DIE (or a
9338 set of DIEs) to represent the "basis" type. */
9339 gen_type_die (TREE_TYPE (type), context_die);
9343 /* This code is used for C++ pointer-to-data-member types.
9344 Output a description of the relevant class type. */
9345 gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
9347 /* Output a description of the type of the object pointed to. */
9348 gen_type_die (TREE_TYPE (type), context_die);
9350 /* Now output a DIE to represent this pointer-to-data-member type
9352 gen_ptr_to_mbr_type_die (type, context_die);
9356 gen_type_die (TYPE_DOMAIN (type), context_die);
9357 gen_set_type_die (type, context_die);
9361 gen_type_die (TREE_TYPE (type), context_die);
9362 abort (); /* No way to represent these in Dwarf yet! */
9366 /* Force out return type (in case it wasn't forced out already). */
9367 gen_type_die (TREE_TYPE (type), context_die);
9368 gen_subroutine_type_die (type, context_die);
9372 /* Force out return type (in case it wasn't forced out already). */
9373 gen_type_die (TREE_TYPE (type), context_die);
9374 gen_subroutine_type_die (type, context_die);
9378 if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
9380 gen_type_die (TREE_TYPE (type), context_die);
9381 gen_string_type_die (type, context_die);
9384 gen_array_type_die (type, context_die);
9388 gen_type_die (TYPE_DEBUG_REPRESENTATION_TYPE (type), context_die);
9394 case QUAL_UNION_TYPE:
9395 /* If this is a nested type whose containing class hasn't been
9396 written out yet, writing it out will cover this one, too.
9397 This does not apply to instantiations of member class templates;
9398 they need to be added to the containing class as they are
9399 generated. FIXME: This hurts the idea of combining type decls
9400 from multiple TUs, since we can't predict what set of template
9401 instantiations we'll get. */
9402 if (TYPE_CONTEXT (type)
9403 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
9404 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
9406 gen_type_die (TYPE_CONTEXT (type), context_die);
9408 if (TREE_ASM_WRITTEN (type))
9411 /* If that failed, attach ourselves to the stub. */
9412 push_decl_scope (TYPE_CONTEXT (type));
9413 context_die = lookup_type_die (TYPE_CONTEXT (type));
9419 if (TREE_CODE (type) == ENUMERAL_TYPE)
9420 gen_enumeration_type_die (type, context_die);
9422 gen_struct_or_union_type_die (type, context_die);
9427 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
9428 it up if it is ever completed. gen_*_type_die will set it for us
9429 when appropriate. */
9438 /* No DIEs needed for fundamental types. */
9442 /* No Dwarf representation currently defined. */
9449 TREE_ASM_WRITTEN (type) = 1;
9452 /* Generate a DIE for a tagged type instantiation. */
9455 gen_tagged_type_instantiation_die (type, context_die)
9457 register dw_die_ref context_die;
9459 if (type == NULL_TREE || type == error_mark_node)
9462 /* We are going to output a DIE to represent the unqualified version of
9463 this type (i.e. without any const or volatile qualifiers) so make sure
9464 that we have the main variant (i.e. the unqualified version) of this
9466 if (type != type_main_variant (type))
9469 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
9470 an instance of an unresolved type. */
9472 switch (TREE_CODE (type))
9478 gen_inlined_enumeration_type_die (type, context_die);
9482 gen_inlined_structure_type_die (type, context_die);
9486 case QUAL_UNION_TYPE:
9487 gen_inlined_union_type_die (type, context_die);
9495 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
9496 things which are local to the given block. */
9499 gen_block_die (stmt, context_die, depth)
9501 register dw_die_ref context_die;
9504 register int must_output_die = 0;
9505 register tree origin;
9507 register enum tree_code origin_code;
9509 /* Ignore blocks never really used to make RTL. */
9511 if (stmt == NULL_TREE || !TREE_USED (stmt)
9512 || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
9515 /* Determine the "ultimate origin" of this block. This block may be an
9516 inlined instance of an inlined instance of inline function, so we have
9517 to trace all of the way back through the origin chain to find out what
9518 sort of node actually served as the original seed for the creation of
9519 the current block. */
9520 origin = block_ultimate_origin (stmt);
9521 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
9523 /* Determine if we need to output any Dwarf DIEs at all to represent this
9525 if (origin_code == FUNCTION_DECL)
9526 /* The outer scopes for inlinings *must* always be represented. We
9527 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
9528 must_output_die = 1;
9531 /* In the case where the current block represents an inlining of the
9532 "body block" of an inline function, we must *NOT* output any DIE for
9533 this block because we have already output a DIE to represent the
9534 whole inlined function scope and the "body block" of any function
9535 doesn't really represent a different scope according to ANSI C
9536 rules. So we check here to make sure that this block does not
9537 represent a "body block inlining" before trying to set the
9538 `must_output_die' flag. */
9539 if (! is_body_block (origin ? origin : stmt))
9541 /* Determine if this block directly contains any "significant"
9542 local declarations which we will need to output DIEs for. */
9543 if (debug_info_level > DINFO_LEVEL_TERSE)
9544 /* We are not in terse mode so *any* local declaration counts
9545 as being a "significant" one. */
9546 must_output_die = (BLOCK_VARS (stmt) != NULL);
9548 /* We are in terse mode, so only local (nested) function
9549 definitions count as "significant" local declarations. */
9550 for (decl = BLOCK_VARS (stmt);
9551 decl != NULL; decl = TREE_CHAIN (decl))
9552 if (TREE_CODE (decl) == FUNCTION_DECL
9553 && DECL_INITIAL (decl))
9555 must_output_die = 1;
9561 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
9562 DIE for any block which contains no significant local declarations at
9563 all. Rather, in such cases we just call `decls_for_scope' so that any
9564 needed Dwarf info for any sub-blocks will get properly generated. Note
9565 that in terse mode, our definition of what constitutes a "significant"
9566 local declaration gets restricted to include only inlined function
9567 instances and local (nested) function definitions. */
9568 if (must_output_die)
9570 if (origin_code == FUNCTION_DECL)
9571 gen_inlined_subroutine_die (stmt, context_die, depth);
9573 gen_lexical_block_die (stmt, context_die, depth);
9576 decls_for_scope (stmt, context_die, depth);
9579 /* Generate all of the decls declared within a given scope and (recursively)
9580 all of its sub-blocks. */
9583 decls_for_scope (stmt, context_die, depth)
9585 register dw_die_ref context_die;
9589 register tree subblocks;
9591 /* Ignore blocks never really used to make RTL. */
9592 if (stmt == NULL_TREE || ! TREE_USED (stmt))
9595 /* Output the DIEs to represent all of the data objects and typedefs
9596 declared directly within this block but not within any nested
9597 sub-blocks. Also, nested function and tag DIEs have been
9598 generated with a parent of NULL; fix that up now. */
9599 for (decl = BLOCK_VARS (stmt);
9600 decl != NULL; decl = TREE_CHAIN (decl))
9602 register dw_die_ref die;
9604 if (TREE_CODE (decl) == FUNCTION_DECL)
9605 die = lookup_decl_die (decl);
9606 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
9607 die = lookup_type_die (TREE_TYPE (decl));
9611 if (die != NULL && die->die_parent == NULL)
9612 add_child_die (context_die, die);
9614 gen_decl_die (decl, context_die);
9617 /* Output the DIEs to represent all sub-blocks (and the items declared
9618 therein) of this block. */
9619 for (subblocks = BLOCK_SUBBLOCKS (stmt);
9621 subblocks = BLOCK_CHAIN (subblocks))
9622 gen_block_die (subblocks, context_die, depth + 1);
9625 /* Is this a typedef we can avoid emitting? */
9628 is_redundant_typedef (decl)
9631 if (TYPE_DECL_IS_STUB (decl))
9634 if (DECL_ARTIFICIAL (decl)
9635 && DECL_CONTEXT (decl)
9636 && is_tagged_type (DECL_CONTEXT (decl))
9637 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
9638 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
9639 /* Also ignore the artificial member typedef for the class name. */
9645 /* Generate Dwarf debug information for a decl described by DECL. */
9648 gen_decl_die (decl, context_die)
9650 register dw_die_ref context_die;
9652 register tree origin;
9654 if (TREE_CODE (decl) == ERROR_MARK)
9657 /* If this ..._DECL node is marked to be ignored, then ignore it. */
9658 if (DECL_IGNORED_P (decl))
9661 switch (TREE_CODE (decl))
9664 /* The individual enumerators of an enum type get output when we output
9665 the Dwarf representation of the relevant enum type itself. */
9669 /* Don't output any DIEs to represent mere function declarations,
9670 unless they are class members or explicit block externs. */
9671 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
9672 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
9675 /* If we're emitting an out-of-line copy of an inline function,
9676 emit info for the abstract instance and set up to refer to it. */
9677 if (DECL_INLINE (decl) && ! DECL_ABSTRACT (decl)
9678 && ! class_scope_p (context_die)
9679 /* gen_abstract_function won't emit a die if this is just a
9680 declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
9681 that case, because that works only if we have a die. */
9682 && DECL_INITIAL (decl) != NULL_TREE)
9684 gen_abstract_function (decl);
9685 set_decl_origin_self (decl);
9688 if (debug_info_level > DINFO_LEVEL_TERSE)
9690 /* Before we describe the FUNCTION_DECL itself, make sure that we
9691 have described its return type. */
9692 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
9694 /* And its virtual context. */
9695 if (DECL_VINDEX (decl) != NULL_TREE)
9696 gen_type_die (DECL_CONTEXT (decl), context_die);
9698 /* And its containing type. */
9699 origin = decl_class_context (decl);
9700 if (origin != NULL_TREE)
9701 gen_type_die_for_member (origin, decl, context_die);
9704 /* Now output a DIE to represent the function itself. */
9705 gen_subprogram_die (decl, context_die);
9709 /* If we are in terse mode, don't generate any DIEs to represent any
9711 if (debug_info_level <= DINFO_LEVEL_TERSE)
9714 /* In the special case of a TYPE_DECL node representing the
9715 declaration of some type tag, if the given TYPE_DECL is marked as
9716 having been instantiated from some other (original) TYPE_DECL node
9717 (e.g. one which was generated within the original definition of an
9718 inline function) we have to generate a special (abbreviated)
9719 DW_TAG_structure_type, DW_TAG_union_type, or DW_TAG_enumeration_type
9721 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
9723 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
9727 if (is_redundant_typedef (decl))
9728 gen_type_die (TREE_TYPE (decl), context_die);
9730 /* Output a DIE to represent the typedef itself. */
9731 gen_typedef_die (decl, context_die);
9735 if (debug_info_level >= DINFO_LEVEL_NORMAL)
9736 gen_label_die (decl, context_die);
9740 /* If we are in terse mode, don't generate any DIEs to represent any
9741 variable declarations or definitions. */
9742 if (debug_info_level <= DINFO_LEVEL_TERSE)
9745 /* Output any DIEs that are needed to specify the type of this data
9747 gen_type_die (TREE_TYPE (decl), context_die);
9749 /* And its containing type. */
9750 origin = decl_class_context (decl);
9751 if (origin != NULL_TREE)
9752 gen_type_die_for_member (origin, decl, context_die);
9754 /* Now output the DIE to represent the data object itself. This gets
9755 complicated because of the possibility that the VAR_DECL really
9756 represents an inlined instance of a formal parameter for an inline
9758 origin = decl_ultimate_origin (decl);
9759 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
9760 gen_formal_parameter_die (decl, context_die);
9762 gen_variable_die (decl, context_die);
9766 /* Ignore the nameless fields that are used to skip bits, but
9767 handle C++ anonymous unions. */
9768 if (DECL_NAME (decl) != NULL_TREE
9769 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
9771 gen_type_die (member_declared_type (decl), context_die);
9772 gen_field_die (decl, context_die);
9777 gen_type_die (TREE_TYPE (decl), context_die);
9778 gen_formal_parameter_die (decl, context_die);
9781 case NAMESPACE_DECL:
9782 /* Ignore for now. */
9790 /* Add Ada "use" clause information for SGI Workshop debugger. */
9793 dwarf2out_add_library_unit_info (filename, context_list)
9794 const char *filename;
9795 const char *context_list;
9797 unsigned int file_index;
9799 if (filename != NULL)
9801 dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die);
9802 tree context_list_decl
9803 = build_decl (LABEL_DECL, get_identifier (context_list),
9806 TREE_PUBLIC (context_list_decl) = TRUE;
9807 add_name_attribute (unit_die, context_list);
9808 file_index = lookup_filename (filename);
9809 add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
9810 add_pubname (context_list_decl, unit_die);
9814 /* Write the debugging output for DECL. */
9817 dwarf2out_decl (decl)
9820 register dw_die_ref context_die = comp_unit_die;
9822 if (TREE_CODE (decl) == ERROR_MARK)
9825 /* If this ..._DECL node is marked to be ignored, then ignore it. */
9826 if (DECL_IGNORED_P (decl))
9829 switch (TREE_CODE (decl))
9832 /* Ignore this FUNCTION_DECL if it refers to a builtin declaration of a
9833 builtin function. Explicit programmer-supplied declarations of
9834 these same functions should NOT be ignored however. */
9835 if (DECL_EXTERNAL (decl) && DECL_BUILT_IN (decl))
9838 /* What we would really like to do here is to filter out all mere
9839 file-scope declarations of file-scope functions which are never
9840 referenced later within this translation unit (and keep all of ones
9841 that *are* referenced later on) but we aren't clairvoyant, so we have
9842 no idea which functions will be referenced in the future (i.e. later
9843 on within the current translation unit). So here we just ignore all
9844 file-scope function declarations which are not also definitions. If
9845 and when the debugger needs to know something about these functions,
9846 it will have to hunt around and find the DWARF information associated
9847 with the definition of the function. Note that we can't just check
9848 `DECL_EXTERNAL' to find out which FUNCTION_DECL nodes represent
9849 definitions and which ones represent mere declarations. We have to
9850 check `DECL_INITIAL' instead. That's because the C front-end
9851 supports some weird semantics for "extern inline" function
9852 definitions. These can get inlined within the current translation
9853 unit (an thus, we need to generate DWARF info for their abstract
9854 instances so that the DWARF info for the concrete inlined instances
9855 can have something to refer to) but the compiler never generates any
9856 out-of-lines instances of such things (despite the fact that they
9857 *are* definitions). The important point is that the C front-end
9858 marks these "extern inline" functions as DECL_EXTERNAL, but we need
9859 to generate DWARF for them anyway. Note that the C++ front-end also
9860 plays some similar games for inline function definitions appearing
9861 within include files which also contain
9862 `#pragma interface' pragmas. */
9863 if (DECL_INITIAL (decl) == NULL_TREE)
9866 /* If we're a nested function, initially use a parent of NULL; if we're
9867 a plain function, this will be fixed up in decls_for_scope. If
9868 we're a method, it will be ignored, since we already have a DIE. */
9869 if (decl_function_context (decl))
9875 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
9876 declaration and if the declaration was never even referenced from
9877 within this entire compilation unit. We suppress these DIEs in
9878 order to save space in the .debug section (by eliminating entries
9879 which are probably useless). Note that we must not suppress
9880 block-local extern declarations (whether used or not) because that
9881 would screw-up the debugger's name lookup mechanism and cause it to
9882 miss things which really ought to be in scope at a given point. */
9883 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
9886 /* If we are in terse mode, don't generate any DIEs to represent any
9887 variable declarations or definitions. */
9888 if (debug_info_level <= DINFO_LEVEL_TERSE)
9893 /* Don't emit stubs for types unless they are needed by other DIEs. */
9894 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
9897 /* Don't bother trying to generate any DIEs to represent any of the
9898 normal built-in types for the language we are compiling. */
9899 if (DECL_SOURCE_LINE (decl) == 0)
9901 /* OK, we need to generate one for `bool' so GDB knows what type
9902 comparisons have. */
9903 if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
9904 == DW_LANG_C_plus_plus)
9905 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE)
9906 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
9911 /* If we are in terse mode, don't generate any DIEs for types. */
9912 if (debug_info_level <= DINFO_LEVEL_TERSE)
9915 /* If we're a function-scope tag, initially use a parent of NULL;
9916 this will be fixed up in decls_for_scope. */
9917 if (decl_function_context (decl))
9926 gen_decl_die (decl, context_die);
9929 /* Output a marker (i.e. a label) for the beginning of the generated code for
9933 dwarf2out_begin_block (blocknum)
9934 register unsigned blocknum;
9936 function_section (current_function_decl);
9937 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
9940 /* Output a marker (i.e. a label) for the end of the generated code for a
9944 dwarf2out_end_block (blocknum)
9945 register unsigned blocknum;
9947 function_section (current_function_decl);
9948 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
9951 /* Returns nonzero if it is appropriate not to emit any debugging
9952 information for BLOCK, because it doesn't contain any instructions.
9954 Don't allow this for blocks with nested functions or local classes
9955 as we would end up with orphans, and in the presence of scheduling
9956 we may end up calling them anyway. */
9959 dwarf2out_ignore_block (block)
9963 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
9964 if (TREE_CODE (decl) == FUNCTION_DECL
9965 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
9970 /* Output a marker (i.e. a label) at a point in the assembly code which
9971 corresponds to a given source level label. */
9974 dwarf2out_label (insn)
9977 char label[MAX_ARTIFICIAL_LABEL_BYTES];
9979 if (debug_info_level >= DINFO_LEVEL_NORMAL)
9981 function_section (current_function_decl);
9982 sprintf (label, INSN_LABEL_FMT, current_funcdef_number);
9983 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, label,
9984 (unsigned) INSN_UID (insn));
9988 /* Lookup a filename (in the list of filenames that we know about here in
9989 dwarf2out.c) and return its "index". The index of each (known) filename is
9990 just a unique number which is associated with only that one filename.
9991 We need such numbers for the sake of generating labels
9992 (in the .debug_sfnames section) and references to those
9993 files numbers (in the .debug_srcinfo and.debug_macinfo sections).
9994 If the filename given as an argument is not found in our current list,
9995 add it to the list and assign it the next available unique index number.
9996 In order to speed up searches, we remember the index of the filename
9997 was looked up last. This handles the majority of all searches. */
10000 lookup_filename (file_name)
10001 const char *file_name;
10003 static unsigned last_file_lookup_index = 0;
10004 register unsigned i;
10006 /* Check to see if the file name that was searched on the previous call
10007 matches this file name. If so, return the index. */
10008 if (last_file_lookup_index != 0)
10009 if (strcmp (file_name, file_table[last_file_lookup_index]) == 0)
10010 return last_file_lookup_index;
10012 /* Didn't match the previous lookup, search the table */
10013 for (i = 1; i < file_table_in_use; ++i)
10014 if (strcmp (file_name, file_table[i]) == 0)
10016 last_file_lookup_index = i;
10020 /* Prepare to add a new table entry by making sure there is enough space in
10021 the table to do so. If not, expand the current table. */
10022 if (file_table_in_use == file_table_allocated)
10024 file_table_allocated += FILE_TABLE_INCREMENT;
10026 = (char **) xrealloc (file_table,
10027 file_table_allocated * sizeof (char *));
10030 /* Add the new entry to the end of the filename table. */
10031 file_table[file_table_in_use] = xstrdup (file_name);
10032 last_file_lookup_index = file_table_in_use++;
10034 return last_file_lookup_index;
10037 /* Output a label to mark the beginning of a source code line entry
10038 and record information relating to this source line, in
10039 'line_info_table' for later output of the .debug_line section. */
10042 dwarf2out_line (filename, line)
10043 register const char *filename;
10044 register unsigned line;
10046 if (debug_info_level >= DINFO_LEVEL_NORMAL)
10048 function_section (current_function_decl);
10050 if (DWARF2_ASM_LINE_DEBUG_INFO)
10052 static const char *lastfile;
10054 /* Emit the .file and .loc directives understood by GNU as. */
10055 if (lastfile == 0 || strcmp (filename, lastfile))
10058 ggc_add_string_root ((char **) &lastfile, 1);
10060 fprintf (asm_out_file, "\t.file 0 \"%s\"\n", filename);
10061 lastfile = filename;
10064 fprintf (asm_out_file, "\t.loc 0 %d 0\n", line);
10066 /* Indicate that line number info exists. */
10067 ++line_info_table_in_use;
10069 /* Indicate that multiple line number tables exist. */
10070 if (DECL_SECTION_NAME (current_function_decl))
10071 ++separate_line_info_table_in_use;
10073 else if (DECL_SECTION_NAME (current_function_decl))
10075 register dw_separate_line_info_ref line_info;
10076 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, SEPARATE_LINE_CODE_LABEL,
10077 separate_line_info_table_in_use);
10078 if (flag_debug_asm)
10079 fprintf (asm_out_file, "\t%s line %d", ASM_COMMENT_START, line);
10080 fputc ('\n', asm_out_file);
10082 /* expand the line info table if necessary */
10083 if (separate_line_info_table_in_use
10084 == separate_line_info_table_allocated)
10086 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
10087 separate_line_info_table
10088 = (dw_separate_line_info_ref)
10089 xrealloc (separate_line_info_table,
10090 separate_line_info_table_allocated
10091 * sizeof (dw_separate_line_info_entry));
10094 /* Add the new entry at the end of the line_info_table. */
10096 = &separate_line_info_table[separate_line_info_table_in_use++];
10097 line_info->dw_file_num = lookup_filename (filename);
10098 line_info->dw_line_num = line;
10099 line_info->function = current_funcdef_number;
10103 register dw_line_info_ref line_info;
10105 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, LINE_CODE_LABEL,
10106 line_info_table_in_use);
10107 if (flag_debug_asm)
10108 fprintf (asm_out_file, "\t%s line %d", ASM_COMMENT_START, line);
10109 fputc ('\n', asm_out_file);
10111 /* Expand the line info table if necessary. */
10112 if (line_info_table_in_use == line_info_table_allocated)
10114 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
10116 = (dw_line_info_ref)
10117 xrealloc (line_info_table,
10118 (line_info_table_allocated
10119 * sizeof (dw_line_info_entry)));
10122 /* Add the new entry at the end of the line_info_table. */
10123 line_info = &line_info_table[line_info_table_in_use++];
10124 line_info->dw_file_num = lookup_filename (filename);
10125 line_info->dw_line_num = line;
10130 /* Record the beginning of a new source file, for later output
10131 of the .debug_macinfo section. At present, unimplemented. */
10134 dwarf2out_start_source_file (filename)
10135 register const char *filename ATTRIBUTE_UNUSED;
10139 /* Record the end of a source file, for later output
10140 of the .debug_macinfo section. At present, unimplemented. */
10143 dwarf2out_end_source_file ()
10147 /* Called from check_newline in c-parse.y. The `buffer' parameter contains
10148 the tail part of the directive line, i.e. the part which is past the
10149 initial whitespace, #, whitespace, directive-name, whitespace part. */
10152 dwarf2out_define (lineno, buffer)
10153 register unsigned lineno ATTRIBUTE_UNUSED;
10154 register const char *buffer ATTRIBUTE_UNUSED;
10156 static int initialized = 0;
10159 dwarf2out_start_source_file (primary_filename);
10164 /* Called from check_newline in c-parse.y. The `buffer' parameter contains
10165 the tail part of the directive line, i.e. the part which is past the
10166 initial whitespace, #, whitespace, directive-name, whitespace part. */
10169 dwarf2out_undef (lineno, buffer)
10170 register unsigned lineno ATTRIBUTE_UNUSED;
10171 register const char *buffer ATTRIBUTE_UNUSED;
10175 /* Set up for Dwarf output at the start of compilation. */
10178 dwarf2out_init (asm_out_file, main_input_filename)
10179 register FILE *asm_out_file;
10180 register const char *main_input_filename;
10182 /* Remember the name of the primary input file. */
10183 primary_filename = main_input_filename;
10185 /* Allocate the initial hunk of the file_table. */
10186 file_table = (char **) xcalloc (FILE_TABLE_INCREMENT, sizeof (char *));
10187 file_table_allocated = FILE_TABLE_INCREMENT;
10189 /* Skip the first entry - file numbers begin at 1. */
10190 file_table_in_use = 1;
10192 /* Allocate the initial hunk of the decl_die_table. */
10194 = (dw_die_ref *) xcalloc (DECL_DIE_TABLE_INCREMENT, sizeof (dw_die_ref));
10195 decl_die_table_allocated = DECL_DIE_TABLE_INCREMENT;
10196 decl_die_table_in_use = 0;
10198 /* Allocate the initial hunk of the decl_scope_table. */
10200 = (tree *) xcalloc (DECL_SCOPE_TABLE_INCREMENT, sizeof (tree));
10201 decl_scope_table_allocated = DECL_SCOPE_TABLE_INCREMENT;
10202 decl_scope_depth = 0;
10204 /* Allocate the initial hunk of the abbrev_die_table. */
10206 = (dw_die_ref *) xcalloc (ABBREV_DIE_TABLE_INCREMENT,
10207 sizeof (dw_die_ref));
10208 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
10209 /* Zero-th entry is allocated, but unused */
10210 abbrev_die_table_in_use = 1;
10212 /* Allocate the initial hunk of the line_info_table. */
10214 = (dw_line_info_ref) xcalloc (LINE_INFO_TABLE_INCREMENT,
10215 sizeof (dw_line_info_entry));
10216 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
10217 /* Zero-th entry is allocated, but unused */
10218 line_info_table_in_use = 1;
10220 /* Generate the initial DIE for the .debug section. Note that the (string)
10221 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
10222 will (typically) be a relative pathname and that this pathname should be
10223 taken as being relative to the directory from which the compiler was
10224 invoked when the given (base) source file was compiled. */
10225 comp_unit_die = gen_compile_unit_die (main_input_filename);
10229 VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
10230 ggc_add_rtx_varray_root (&used_rtx_varray, 1);
10233 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
10234 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, ABBREV_SECTION_LABEL, 0);
10235 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
10236 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
10238 strcpy (text_section_label, stripattributes (TEXT_SECTION));
10239 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
10240 DEBUG_INFO_SECTION_LABEL, 0);
10241 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
10242 DEBUG_LINE_SECTION_LABEL, 0);
10244 ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION);
10245 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
10246 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
10248 ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION);
10249 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
10251 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_INFO_SECTION);
10252 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
10253 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
10254 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
10257 /* Output stuff that dwarf requires at the end of every file,
10258 and generate the DWARF-2 debugging info. */
10261 dwarf2out_finish ()
10263 limbo_die_node *node, *next_node;
10266 /* Traverse the limbo die list, and add parent/child links. The only
10267 dies without parents that should be here are concrete instances of
10268 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
10269 For concrete instances, we can get the parent die from the abstract
10271 for (node = limbo_die_list; node; node = next_node)
10273 next_node = node->next;
10276 if (die->die_parent == NULL)
10278 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
10280 add_child_die (origin->die_parent, die);
10281 else if (die == comp_unit_die)
10288 limbo_die_list = NULL;
10290 /* Walk through the list of incomplete types again, trying once more to
10291 emit full debugging info for them. */
10292 retry_incomplete_types ();
10294 /* Traverse the DIE's, reverse their lists of attributes and children,
10295 and add add sibling attributes to those DIE's that have children. */
10296 add_sibling_attributes (comp_unit_die);
10298 /* Output a terminator label for the .text section. */
10299 fputc ('\n', asm_out_file);
10300 ASM_OUTPUT_SECTION (asm_out_file, TEXT_SECTION);
10301 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, TEXT_END_LABEL, 0);
10304 /* Output a terminator label for the .data section. */
10305 fputc ('\n', asm_out_file);
10306 ASM_OUTPUT_SECTION (asm_out_file, DATA_SECTION);
10307 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, DATA_END_LABEL, 0);
10309 /* Output a terminator label for the .bss section. */
10310 fputc ('\n', asm_out_file);
10311 ASM_OUTPUT_SECTION (asm_out_file, BSS_SECTION);
10312 ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, BSS_END_LABEL, 0);
10315 /* Output the source line correspondence table. */
10316 if (line_info_table_in_use > 1 || separate_line_info_table_in_use)
10318 if (! DWARF2_ASM_LINE_DEBUG_INFO)
10320 fputc ('\n', asm_out_file);
10321 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_LINE_SECTION);
10322 output_line_info ();
10325 /* We can only use the low/high_pc attributes if all of the code
10327 if (separate_line_info_table_in_use == 0)
10329 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
10330 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
10333 add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
10334 debug_line_section_label);
10337 #if 0 /* unimplemented */
10338 if (debug_info_level >= DINFO_LEVEL_VERBOSE && primary)
10339 add_AT_unsigned (die, DW_AT_macro_info, 0);
10342 /* Output the abbreviation table. */
10343 fputc ('\n', asm_out_file);
10344 ASM_OUTPUT_SECTION (asm_out_file, ABBREV_SECTION);
10345 build_abbrev_table (comp_unit_die);
10346 output_abbrev_section ();
10348 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
10349 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10350 calc_die_sizes (comp_unit_die);
10352 /* Output debugging information. */
10353 fputc ('\n', asm_out_file);
10354 ASM_OUTPUT_SECTION (asm_out_file, DEBUG_INFO_SECTION);
10355 output_compilation_unit_header ();
10356 output_die (comp_unit_die);
10358 if (pubname_table_in_use)
10360 /* Output public names table. */
10361 fputc ('\n', asm_out_file);
10362 ASM_OUTPUT_SECTION (asm_out_file, PUBNAMES_SECTION);
10363 output_pubnames ();
10366 /* We only put functions in the arange table, so don't write it out if
10367 we don't have any. */
10368 if (fde_table_in_use)
10370 /* Output the address range information. */
10371 fputc ('\n', asm_out_file);
10372 ASM_OUTPUT_SECTION (asm_out_file, ARANGES_SECTION);
10376 #endif /* DWARF2_DEBUGGING_INFO */