svn merge -r102224:107263 svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-3_4-branch
[official-gcc.git] / gcc / dwarf2out.c
blob57a864c62d792bf16177193e0c334e5c0ab57f5f
1 /* Output Dwarf2 format symbol table information from GCC.
2 Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3 2003, 2004, 2005 Free Software Foundation, Inc.
4 Contributed by Gary Funck (gary@intrepid.com).
5 Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
6 Extensively modified by Jason Merrill (jason@cygnus.com).
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 2, or (at your option) any later
13 version.
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING. If not, write to the Free
22 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
23 02111-1307, USA. */
25 /* TODO: Emit .debug_line header even when there are no functions, since
26 the file numbers are used by .debug_info. Alternately, leave
27 out locations for types and decls.
28 Avoid talking about ctors and op= for PODs.
29 Factor out common prologue sequences into multiple CIEs. */
31 /* The first part of this file deals with the DWARF 2 frame unwind
32 information, which is also used by the GCC efficient exception handling
33 mechanism. The second part, controlled only by an #ifdef
34 DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35 information. */
37 #include "config.h"
38 #include "system.h"
39 #include "coretypes.h"
40 #include "tm.h"
41 #include "tree.h"
42 #include "flags.h"
43 #include "real.h"
44 #include "rtl.h"
45 #include "hard-reg-set.h"
46 #include "regs.h"
47 #include "insn-config.h"
48 #include "reload.h"
49 #include "function.h"
50 #include "output.h"
51 #include "expr.h"
52 #include "libfuncs.h"
53 #include "except.h"
54 #include "dwarf2.h"
55 #include "dwarf2out.h"
56 #include "dwarf2asm.h"
57 #include "toplev.h"
58 #include "varray.h"
59 #include "ggc.h"
60 #include "md5.h"
61 #include "tm_p.h"
62 #include "diagnostic.h"
63 #include "debug.h"
64 #include "target.h"
65 #include "langhooks.h"
66 #include "hashtab.h"
67 #include "cgraph.h"
69 #ifdef DWARF2_DEBUGGING_INFO
70 static void dwarf2out_source_line (unsigned int, const char *);
71 #endif
73 /* DWARF2 Abbreviation Glossary:
74 CFA = Canonical Frame Address
75 a fixed address on the stack which identifies a call frame.
76 We define it to be the value of SP just before the call insn.
77 The CFA register and offset, which may change during the course
78 of the function, are used to calculate its value at runtime.
79 CFI = Call Frame Instruction
80 an instruction for the DWARF2 abstract machine
81 CIE = Common Information Entry
82 information describing information common to one or more FDEs
83 DIE = Debugging Information Entry
84 FDE = Frame Description Entry
85 information describing the stack call frame, in particular,
86 how to restore registers
88 DW_CFA_... = DWARF2 CFA call frame instruction
89 DW_TAG_... = DWARF2 DIE tag */
91 /* Decide whether we want to emit frame unwind information for the current
92 translation unit. */
94 int
95 dwarf2out_do_frame (void)
97 return (write_symbols == DWARF2_DEBUG
98 || write_symbols == VMS_AND_DWARF2_DEBUG
99 #ifdef DWARF2_FRAME_INFO
100 || DWARF2_FRAME_INFO
101 #endif
102 #ifdef DWARF2_UNWIND_INFO
103 || flag_unwind_tables
104 || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)
105 #endif
109 /* The size of the target's pointer type. */
110 #ifndef PTR_SIZE
111 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
112 #endif
114 /* Various versions of targetm.eh_frame_section. Note these must appear
115 outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro guards. */
117 /* Version of targetm.eh_frame_section for systems with named sections. */
118 void
119 named_section_eh_frame_section (void)
121 #ifdef EH_FRAME_SECTION_NAME
122 #ifdef HAVE_LD_RO_RW_SECTION_MIXING
123 int fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
124 int per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
125 int lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
126 int flags;
128 flags = (! flag_pic
129 || ((fde_encoding & 0x70) != DW_EH_PE_absptr
130 && (fde_encoding & 0x70) != DW_EH_PE_aligned
131 && (per_encoding & 0x70) != DW_EH_PE_absptr
132 && (per_encoding & 0x70) != DW_EH_PE_aligned
133 && (lsda_encoding & 0x70) != DW_EH_PE_absptr
134 && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
135 ? 0 : SECTION_WRITE;
136 named_section_flags (EH_FRAME_SECTION_NAME, flags);
137 #else
138 named_section_flags (EH_FRAME_SECTION_NAME, SECTION_WRITE);
139 #endif
140 #endif
143 /* Version of targetm.eh_frame_section for systems using collect2. */
144 void
145 collect2_eh_frame_section (void)
147 tree label = get_file_function_name ('F');
149 data_section ();
150 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
151 (*targetm.asm_out.globalize_label) (asm_out_file, IDENTIFIER_POINTER (label));
152 ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
155 /* Default version of targetm.eh_frame_section. */
156 void
157 default_eh_frame_section (void)
159 #ifdef EH_FRAME_SECTION_NAME
160 named_section_eh_frame_section ();
161 #else
162 collect2_eh_frame_section ();
163 #endif
166 /* Array of RTXes referenced by the debugging information, which therefore
167 must be kept around forever. */
168 static GTY(()) varray_type used_rtx_varray;
170 /* A pointer to the base of a list of incomplete types which might be
171 completed at some later time. incomplete_types_list needs to be a VARRAY
172 because we want to tell the garbage collector about it. */
173 static GTY(()) varray_type incomplete_types;
175 /* A pointer to the base of a table of references to declaration
176 scopes. This table is a display which tracks the nesting
177 of declaration scopes at the current scope and containing
178 scopes. This table is used to find the proper place to
179 define type declaration DIE's. */
180 static GTY(()) varray_type decl_scope_table;
182 /* How to start an assembler comment. */
183 #ifndef ASM_COMMENT_START
184 #define ASM_COMMENT_START ";#"
185 #endif
187 typedef struct dw_cfi_struct *dw_cfi_ref;
188 typedef struct dw_fde_struct *dw_fde_ref;
189 typedef union dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
191 /* Call frames are described using a sequence of Call Frame
192 Information instructions. The register number, offset
193 and address fields are provided as possible operands;
194 their use is selected by the opcode field. */
196 enum dw_cfi_oprnd_type {
197 dw_cfi_oprnd_unused,
198 dw_cfi_oprnd_reg_num,
199 dw_cfi_oprnd_offset,
200 dw_cfi_oprnd_addr,
201 dw_cfi_oprnd_loc
204 typedef union dw_cfi_oprnd_struct GTY(())
206 unsigned long GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
207 HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
208 const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
209 struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
211 dw_cfi_oprnd;
213 typedef struct dw_cfi_struct GTY(())
215 dw_cfi_ref dw_cfi_next;
216 enum dwarf_call_frame_info dw_cfi_opc;
217 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
218 dw_cfi_oprnd1;
219 dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
220 dw_cfi_oprnd2;
222 dw_cfi_node;
224 /* This is how we define the location of the CFA. We use to handle it
225 as REG + OFFSET all the time, but now it can be more complex.
226 It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
227 Instead of passing around REG and OFFSET, we pass a copy
228 of this structure. */
229 typedef struct cfa_loc GTY(())
231 unsigned long reg;
232 HOST_WIDE_INT offset;
233 HOST_WIDE_INT base_offset;
234 int indirect; /* 1 if CFA is accessed via a dereference. */
235 } dw_cfa_location;
237 /* All call frame descriptions (FDE's) in the GCC generated DWARF
238 refer to a single Common Information Entry (CIE), defined at
239 the beginning of the .debug_frame section. This use of a single
240 CIE obviates the need to keep track of multiple CIE's
241 in the DWARF generation routines below. */
243 typedef struct dw_fde_struct GTY(())
245 const char *dw_fde_begin;
246 const char *dw_fde_current_label;
247 const char *dw_fde_end;
248 dw_cfi_ref dw_fde_cfi;
249 unsigned funcdef_number;
250 unsigned all_throwers_are_sibcalls : 1;
251 unsigned nothrow : 1;
252 unsigned uses_eh_lsda : 1;
254 dw_fde_node;
256 /* Maximum size (in bytes) of an artificially generated label. */
257 #define MAX_ARTIFICIAL_LABEL_BYTES 30
259 /* The size of addresses as they appear in the Dwarf 2 data.
260 Some architectures use word addresses to refer to code locations,
261 but Dwarf 2 info always uses byte addresses. On such machines,
262 Dwarf 2 addresses need to be larger than the architecture's
263 pointers. */
264 #ifndef DWARF2_ADDR_SIZE
265 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
266 #endif
268 /* The size in bytes of a DWARF field indicating an offset or length
269 relative to a debug info section, specified to be 4 bytes in the
270 DWARF-2 specification. The SGI/MIPS ABI defines it to be the same
271 as PTR_SIZE. */
273 #ifndef DWARF_OFFSET_SIZE
274 #define DWARF_OFFSET_SIZE 4
275 #endif
277 /* According to the (draft) DWARF 3 specification, the initial length
278 should either be 4 or 12 bytes. When it's 12 bytes, the first 4
279 bytes are 0xffffffff, followed by the length stored in the next 8
280 bytes.
282 However, the SGI/MIPS ABI uses an initial length which is equal to
283 DWARF_OFFSET_SIZE. It is defined (elsewhere) accordingly. */
285 #ifndef DWARF_INITIAL_LENGTH_SIZE
286 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
287 #endif
289 #define DWARF_VERSION 2
291 /* Round SIZE up to the nearest BOUNDARY. */
292 #define DWARF_ROUND(SIZE,BOUNDARY) \
293 ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
295 /* Offsets recorded in opcodes are a multiple of this alignment factor. */
296 #ifndef DWARF_CIE_DATA_ALIGNMENT
297 #ifdef STACK_GROWS_DOWNWARD
298 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
299 #else
300 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
301 #endif
302 #endif
304 /* A pointer to the base of a table that contains frame description
305 information for each routine. */
306 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
308 /* Number of elements currently allocated for fde_table. */
309 static GTY(()) unsigned fde_table_allocated;
311 /* Number of elements in fde_table currently in use. */
312 static GTY(()) unsigned fde_table_in_use;
314 /* Size (in elements) of increments by which we may expand the
315 fde_table. */
316 #define FDE_TABLE_INCREMENT 256
318 /* A list of call frame insns for the CIE. */
319 static GTY(()) dw_cfi_ref cie_cfi_head;
321 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
322 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
323 attribute that accelerates the lookup of the FDE associated
324 with the subprogram. This variable holds the table index of the FDE
325 associated with the current function (body) definition. */
326 static unsigned current_funcdef_fde;
327 #endif
329 struct indirect_string_node GTY(())
331 const char *str;
332 unsigned int refcount;
333 unsigned int form;
334 char *label;
337 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
339 static GTY(()) int dw2_string_counter;
340 static GTY(()) unsigned long dwarf2out_cfi_label_num;
342 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
344 /* Forward declarations for functions defined in this file. */
346 static char *stripattributes (const char *);
347 static const char *dwarf_cfi_name (unsigned);
348 static dw_cfi_ref new_cfi (void);
349 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
350 static void add_fde_cfi (const char *, dw_cfi_ref);
351 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
352 static void lookup_cfa (dw_cfa_location *);
353 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
354 static void initial_return_save (rtx);
355 static HOST_WIDE_INT stack_adjust_offset (rtx);
356 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
357 static void output_call_frame_info (int);
358 static void dwarf2out_stack_adjust (rtx);
359 static void queue_reg_save (const char *, rtx, HOST_WIDE_INT);
360 static void flush_queued_reg_saves (void);
361 static bool clobbers_queued_reg_save (rtx);
362 static void dwarf2out_frame_debug_expr (rtx, const char *);
364 /* Support for complex CFA locations. */
365 static void output_cfa_loc (dw_cfi_ref);
366 static void get_cfa_from_loc_descr (dw_cfa_location *,
367 struct dw_loc_descr_struct *);
368 static struct dw_loc_descr_struct *build_cfa_loc
369 (dw_cfa_location *);
370 static void def_cfa_1 (const char *, dw_cfa_location *);
372 /* How to start an assembler comment. */
373 #ifndef ASM_COMMENT_START
374 #define ASM_COMMENT_START ";#"
375 #endif
377 /* Data and reference forms for relocatable data. */
378 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
379 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
381 #ifndef DEBUG_FRAME_SECTION
382 #define DEBUG_FRAME_SECTION ".debug_frame"
383 #endif
385 #ifndef FUNC_BEGIN_LABEL
386 #define FUNC_BEGIN_LABEL "LFB"
387 #endif
389 #ifndef FUNC_END_LABEL
390 #define FUNC_END_LABEL "LFE"
391 #endif
393 #define FRAME_BEGIN_LABEL "Lframe"
394 #define CIE_AFTER_SIZE_LABEL "LSCIE"
395 #define CIE_END_LABEL "LECIE"
396 #define FDE_LABEL "LSFDE"
397 #define FDE_AFTER_SIZE_LABEL "LASFDE"
398 #define FDE_END_LABEL "LEFDE"
399 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
400 #define LINE_NUMBER_END_LABEL "LELT"
401 #define LN_PROLOG_AS_LABEL "LASLTP"
402 #define LN_PROLOG_END_LABEL "LELTP"
403 #define DIE_LABEL_PREFIX "DW"
405 /* The DWARF 2 CFA column which tracks the return address. Normally this
406 is the column for PC, or the first column after all of the hard
407 registers. */
408 #ifndef DWARF_FRAME_RETURN_COLUMN
409 #ifdef PC_REGNUM
410 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (PC_REGNUM)
411 #else
412 #define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGISTERS
413 #endif
414 #endif
416 /* The mapping from gcc register number to DWARF 2 CFA column number. By
417 default, we just provide columns for all registers. */
418 #ifndef DWARF_FRAME_REGNUM
419 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
420 #endif
422 /* The offset from the incoming value of %sp to the top of the stack frame
423 for the current function. */
424 #ifndef INCOMING_FRAME_SP_OFFSET
425 #define INCOMING_FRAME_SP_OFFSET 0
426 #endif
428 /* Hook used by __throw. */
431 expand_builtin_dwarf_sp_column (void)
433 return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
436 /* Return a pointer to a copy of the section string name S with all
437 attributes stripped off, and an asterisk prepended (for assemble_name). */
439 static inline char *
440 stripattributes (const char *s)
442 char *stripped = xmalloc (strlen (s) + 2);
443 char *p = stripped;
445 *p++ = '*';
447 while (*s && *s != ',')
448 *p++ = *s++;
450 *p = '\0';
451 return stripped;
454 /* Generate code to initialize the register size table. */
456 void
457 expand_builtin_init_dwarf_reg_sizes (tree address)
459 int i;
460 enum machine_mode mode = TYPE_MODE (char_type_node);
461 rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
462 rtx mem = gen_rtx_MEM (BLKmode, addr);
463 bool wrote_return_column = false;
465 for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
466 if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
468 HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
469 enum machine_mode save_mode = reg_raw_mode[i];
470 HOST_WIDE_INT size;
472 if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
473 save_mode = choose_hard_reg_mode (i, 1, true);
474 if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
476 if (save_mode == VOIDmode)
477 continue;
478 wrote_return_column = true;
480 size = GET_MODE_SIZE (save_mode);
481 if (offset < 0)
482 continue;
484 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
487 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
488 if (! wrote_return_column)
489 abort ();
490 i = DWARF_ALT_FRAME_RETURN_COLUMN;
491 wrote_return_column = false;
492 #else
493 i = DWARF_FRAME_RETURN_COLUMN;
494 #endif
496 if (! wrote_return_column)
498 enum machine_mode save_mode = Pmode;
499 HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
500 HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
501 emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
505 /* Convert a DWARF call frame info. operation to its string name */
507 static const char *
508 dwarf_cfi_name (unsigned int cfi_opc)
510 switch (cfi_opc)
512 case DW_CFA_advance_loc:
513 return "DW_CFA_advance_loc";
514 case DW_CFA_offset:
515 return "DW_CFA_offset";
516 case DW_CFA_restore:
517 return "DW_CFA_restore";
518 case DW_CFA_nop:
519 return "DW_CFA_nop";
520 case DW_CFA_set_loc:
521 return "DW_CFA_set_loc";
522 case DW_CFA_advance_loc1:
523 return "DW_CFA_advance_loc1";
524 case DW_CFA_advance_loc2:
525 return "DW_CFA_advance_loc2";
526 case DW_CFA_advance_loc4:
527 return "DW_CFA_advance_loc4";
528 case DW_CFA_offset_extended:
529 return "DW_CFA_offset_extended";
530 case DW_CFA_restore_extended:
531 return "DW_CFA_restore_extended";
532 case DW_CFA_undefined:
533 return "DW_CFA_undefined";
534 case DW_CFA_same_value:
535 return "DW_CFA_same_value";
536 case DW_CFA_register:
537 return "DW_CFA_register";
538 case DW_CFA_remember_state:
539 return "DW_CFA_remember_state";
540 case DW_CFA_restore_state:
541 return "DW_CFA_restore_state";
542 case DW_CFA_def_cfa:
543 return "DW_CFA_def_cfa";
544 case DW_CFA_def_cfa_register:
545 return "DW_CFA_def_cfa_register";
546 case DW_CFA_def_cfa_offset:
547 return "DW_CFA_def_cfa_offset";
549 /* DWARF 3 */
550 case DW_CFA_def_cfa_expression:
551 return "DW_CFA_def_cfa_expression";
552 case DW_CFA_expression:
553 return "DW_CFA_expression";
554 case DW_CFA_offset_extended_sf:
555 return "DW_CFA_offset_extended_sf";
556 case DW_CFA_def_cfa_sf:
557 return "DW_CFA_def_cfa_sf";
558 case DW_CFA_def_cfa_offset_sf:
559 return "DW_CFA_def_cfa_offset_sf";
561 /* SGI/MIPS specific */
562 case DW_CFA_MIPS_advance_loc8:
563 return "DW_CFA_MIPS_advance_loc8";
565 /* GNU extensions */
566 case DW_CFA_GNU_window_save:
567 return "DW_CFA_GNU_window_save";
568 case DW_CFA_GNU_args_size:
569 return "DW_CFA_GNU_args_size";
570 case DW_CFA_GNU_negative_offset_extended:
571 return "DW_CFA_GNU_negative_offset_extended";
573 default:
574 return "DW_CFA_<unknown>";
578 /* Return a pointer to a newly allocated Call Frame Instruction. */
580 static inline dw_cfi_ref
581 new_cfi (void)
583 dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
585 cfi->dw_cfi_next = NULL;
586 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
587 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
589 return cfi;
592 /* Add a Call Frame Instruction to list of instructions. */
594 static inline void
595 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
597 dw_cfi_ref *p;
599 /* Find the end of the chain. */
600 for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
603 *p = cfi;
606 /* Generate a new label for the CFI info to refer to. */
608 char *
609 dwarf2out_cfi_label (void)
611 static char label[20];
613 ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
614 ASM_OUTPUT_LABEL (asm_out_file, label);
615 return label;
618 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
619 or to the CIE if LABEL is NULL. */
621 static void
622 add_fde_cfi (const char *label, dw_cfi_ref cfi)
624 if (label)
626 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
628 if (*label == 0)
629 label = dwarf2out_cfi_label ();
631 if (fde->dw_fde_current_label == NULL
632 || strcmp (label, fde->dw_fde_current_label) != 0)
634 dw_cfi_ref xcfi;
636 fde->dw_fde_current_label = label = xstrdup (label);
638 /* Set the location counter to the new label. */
639 xcfi = new_cfi ();
640 xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
641 xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
642 add_cfi (&fde->dw_fde_cfi, xcfi);
645 add_cfi (&fde->dw_fde_cfi, cfi);
648 else
649 add_cfi (&cie_cfi_head, cfi);
652 /* Subroutine of lookup_cfa. */
654 static inline void
655 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
657 switch (cfi->dw_cfi_opc)
659 case DW_CFA_def_cfa_offset:
660 loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
661 break;
662 case DW_CFA_def_cfa_register:
663 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
664 break;
665 case DW_CFA_def_cfa:
666 loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
667 loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
668 break;
669 case DW_CFA_def_cfa_expression:
670 get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
671 break;
672 default:
673 break;
677 /* Find the previous value for the CFA. */
679 static void
680 lookup_cfa (dw_cfa_location *loc)
682 dw_cfi_ref cfi;
684 loc->reg = (unsigned long) -1;
685 loc->offset = 0;
686 loc->indirect = 0;
687 loc->base_offset = 0;
689 for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
690 lookup_cfa_1 (cfi, loc);
692 if (fde_table_in_use)
694 dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
695 for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
696 lookup_cfa_1 (cfi, loc);
700 /* The current rule for calculating the DWARF2 canonical frame address. */
701 static dw_cfa_location cfa;
703 /* The register used for saving registers to the stack, and its offset
704 from the CFA. */
705 static dw_cfa_location cfa_store;
707 /* The running total of the size of arguments pushed onto the stack. */
708 static HOST_WIDE_INT args_size;
710 /* The last args_size we actually output. */
711 static HOST_WIDE_INT old_args_size;
713 /* Entry point to update the canonical frame address (CFA).
714 LABEL is passed to add_fde_cfi. The value of CFA is now to be
715 calculated from REG+OFFSET. */
717 void
718 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
720 dw_cfa_location loc;
721 loc.indirect = 0;
722 loc.base_offset = 0;
723 loc.reg = reg;
724 loc.offset = offset;
725 def_cfa_1 (label, &loc);
728 /* This routine does the actual work. The CFA is now calculated from
729 the dw_cfa_location structure. */
731 static void
732 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
734 dw_cfi_ref cfi;
735 dw_cfa_location old_cfa, loc;
737 cfa = *loc_p;
738 loc = *loc_p;
740 if (cfa_store.reg == loc.reg && loc.indirect == 0)
741 cfa_store.offset = loc.offset;
743 loc.reg = DWARF_FRAME_REGNUM (loc.reg);
744 lookup_cfa (&old_cfa);
746 /* If nothing changed, no need to issue any call frame instructions. */
747 if (loc.reg == old_cfa.reg && loc.offset == old_cfa.offset
748 && loc.indirect == old_cfa.indirect
749 && (loc.indirect == 0 || loc.base_offset == old_cfa.base_offset))
750 return;
752 cfi = new_cfi ();
754 if (loc.reg == old_cfa.reg && !loc.indirect)
756 /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction,
757 indicating the CFA register did not change but the offset
758 did. */
759 cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
760 cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
763 #ifndef MIPS_DEBUGGING_INFO /* SGI dbx thinks this means no offset. */
764 else if (loc.offset == old_cfa.offset && old_cfa.reg != (unsigned long) -1
765 && !loc.indirect)
767 /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
768 indicating the CFA register has changed to <register> but the
769 offset has not changed. */
770 cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
771 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
773 #endif
775 else if (loc.indirect == 0)
777 /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
778 indicating the CFA register has changed to <register> with
779 the specified offset. */
780 cfi->dw_cfi_opc = DW_CFA_def_cfa;
781 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
782 cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
784 else
786 /* Construct a DW_CFA_def_cfa_expression instruction to
787 calculate the CFA using a full location expression since no
788 register-offset pair is available. */
789 struct dw_loc_descr_struct *loc_list;
791 cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
792 loc_list = build_cfa_loc (&loc);
793 cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
796 add_fde_cfi (label, cfi);
799 /* Add the CFI for saving a register. REG is the CFA column number.
800 LABEL is passed to add_fde_cfi.
801 If SREG is -1, the register is saved at OFFSET from the CFA;
802 otherwise it is saved in SREG. */
804 static void
805 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
807 dw_cfi_ref cfi = new_cfi ();
809 cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
811 /* The following comparison is correct. -1 is used to indicate that
812 the value isn't a register number. */
813 if (sreg == (unsigned int) -1)
815 if (reg & ~0x3f)
816 /* The register number won't fit in 6 bits, so we have to use
817 the long form. */
818 cfi->dw_cfi_opc = DW_CFA_offset_extended;
819 else
820 cfi->dw_cfi_opc = DW_CFA_offset;
822 #ifdef ENABLE_CHECKING
824 /* If we get an offset that is not a multiple of
825 DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
826 definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
827 description. */
828 HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
830 if (check_offset * DWARF_CIE_DATA_ALIGNMENT != offset)
831 abort ();
833 #endif
834 offset /= DWARF_CIE_DATA_ALIGNMENT;
835 if (offset < 0)
836 cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
838 cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
840 else if (sreg == reg)
841 /* We could emit a DW_CFA_same_value in this case, but don't bother. */
842 return;
843 else
845 cfi->dw_cfi_opc = DW_CFA_register;
846 cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
849 add_fde_cfi (label, cfi);
852 /* Add the CFI for saving a register window. LABEL is passed to reg_save.
853 This CFI tells the unwinder that it needs to restore the window registers
854 from the previous frame's window save area.
856 ??? Perhaps we should note in the CIE where windows are saved (instead of
857 assuming 0(cfa)) and what registers are in the window. */
859 void
860 dwarf2out_window_save (const char *label)
862 dw_cfi_ref cfi = new_cfi ();
864 cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
865 add_fde_cfi (label, cfi);
868 /* Add a CFI to update the running total of the size of arguments
869 pushed onto the stack. */
871 void
872 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
874 dw_cfi_ref cfi;
876 if (size == old_args_size)
877 return;
879 old_args_size = size;
881 cfi = new_cfi ();
882 cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
883 cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
884 add_fde_cfi (label, cfi);
887 /* Entry point for saving a register to the stack. REG is the GCC register
888 number. LABEL and OFFSET are passed to reg_save. */
890 void
891 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
893 reg_save (label, DWARF_FRAME_REGNUM (reg), -1, offset);
896 /* Entry point for saving the return address in the stack.
897 LABEL and OFFSET are passed to reg_save. */
899 void
900 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
902 reg_save (label, DWARF_FRAME_RETURN_COLUMN, -1, offset);
905 /* Entry point for saving the return address in a register.
906 LABEL and SREG are passed to reg_save. */
908 void
909 dwarf2out_return_reg (const char *label, unsigned int sreg)
911 reg_save (label, DWARF_FRAME_RETURN_COLUMN, sreg, 0);
914 /* Record the initial position of the return address. RTL is
915 INCOMING_RETURN_ADDR_RTX. */
917 static void
918 initial_return_save (rtx rtl)
920 unsigned int reg = (unsigned int) -1;
921 HOST_WIDE_INT offset = 0;
923 switch (GET_CODE (rtl))
925 case REG:
926 /* RA is in a register. */
927 reg = DWARF_FRAME_REGNUM (REGNO (rtl));
928 break;
930 case MEM:
931 /* RA is on the stack. */
932 rtl = XEXP (rtl, 0);
933 switch (GET_CODE (rtl))
935 case REG:
936 if (REGNO (rtl) != STACK_POINTER_REGNUM)
937 abort ();
938 offset = 0;
939 break;
941 case PLUS:
942 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
943 abort ();
944 offset = INTVAL (XEXP (rtl, 1));
945 break;
947 case MINUS:
948 if (REGNO (XEXP (rtl, 0)) != STACK_POINTER_REGNUM)
949 abort ();
950 offset = -INTVAL (XEXP (rtl, 1));
951 break;
953 default:
954 abort ();
957 break;
959 case PLUS:
960 /* The return address is at some offset from any value we can
961 actually load. For instance, on the SPARC it is in %i7+8. Just
962 ignore the offset for now; it doesn't matter for unwinding frames. */
963 if (GET_CODE (XEXP (rtl, 1)) != CONST_INT)
964 abort ();
965 initial_return_save (XEXP (rtl, 0));
966 return;
968 default:
969 abort ();
972 reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
975 /* Given a SET, calculate the amount of stack adjustment it
976 contains. */
978 static HOST_WIDE_INT
979 stack_adjust_offset (rtx pattern)
981 rtx src = SET_SRC (pattern);
982 rtx dest = SET_DEST (pattern);
983 HOST_WIDE_INT offset = 0;
984 enum rtx_code code;
986 if (dest == stack_pointer_rtx)
988 /* (set (reg sp) (plus (reg sp) (const_int))) */
989 code = GET_CODE (src);
990 if (! (code == PLUS || code == MINUS)
991 || XEXP (src, 0) != stack_pointer_rtx
992 || GET_CODE (XEXP (src, 1)) != CONST_INT)
993 return 0;
995 offset = INTVAL (XEXP (src, 1));
996 if (code == PLUS)
997 offset = -offset;
999 else if (GET_CODE (dest) == MEM)
1001 /* (set (mem (pre_dec (reg sp))) (foo)) */
1002 src = XEXP (dest, 0);
1003 code = GET_CODE (src);
1005 switch (code)
1007 case PRE_MODIFY:
1008 case POST_MODIFY:
1009 if (XEXP (src, 0) == stack_pointer_rtx)
1011 rtx val = XEXP (XEXP (src, 1), 1);
1012 /* We handle only adjustments by constant amount. */
1013 if (GET_CODE (XEXP (src, 1)) != PLUS ||
1014 GET_CODE (val) != CONST_INT)
1015 abort ();
1016 offset = -INTVAL (val);
1017 break;
1019 return 0;
1021 case PRE_DEC:
1022 case POST_DEC:
1023 if (XEXP (src, 0) == stack_pointer_rtx)
1025 offset = GET_MODE_SIZE (GET_MODE (dest));
1026 break;
1028 return 0;
1030 case PRE_INC:
1031 case POST_INC:
1032 if (XEXP (src, 0) == stack_pointer_rtx)
1034 offset = -GET_MODE_SIZE (GET_MODE (dest));
1035 break;
1037 return 0;
1039 default:
1040 return 0;
1043 else
1044 return 0;
1046 return offset;
1049 /* Check INSN to see if it looks like a push or a stack adjustment, and
1050 make a note of it if it does. EH uses this information to find out how
1051 much extra space it needs to pop off the stack. */
1053 static void
1054 dwarf2out_stack_adjust (rtx insn)
1056 HOST_WIDE_INT offset;
1057 const char *label;
1058 int i;
1060 /* Don't handle epilogues at all. Certainly it would be wrong to do so
1061 with this function. Proper support would require all frame-related
1062 insns to be marked, and to be able to handle saving state around
1063 epilogues textually in the middle of the function. */
1064 if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1065 return;
1067 if (!flag_asynchronous_unwind_tables && GET_CODE (insn) == CALL_INSN)
1069 /* Extract the size of the args from the CALL rtx itself. */
1070 insn = PATTERN (insn);
1071 if (GET_CODE (insn) == PARALLEL)
1072 insn = XVECEXP (insn, 0, 0);
1073 if (GET_CODE (insn) == SET)
1074 insn = SET_SRC (insn);
1075 if (GET_CODE (insn) != CALL)
1076 abort ();
1078 dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1079 return;
1082 /* If only calls can throw, and we have a frame pointer,
1083 save up adjustments until we see the CALL_INSN. */
1084 else if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1085 return;
1087 if (GET_CODE (insn) == BARRIER)
1089 /* When we see a BARRIER, we know to reset args_size to 0. Usually
1090 the compiler will have already emitted a stack adjustment, but
1091 doesn't bother for calls to noreturn functions. */
1092 #ifdef STACK_GROWS_DOWNWARD
1093 offset = -args_size;
1094 #else
1095 offset = args_size;
1096 #endif
1098 else if (GET_CODE (PATTERN (insn)) == SET)
1099 offset = stack_adjust_offset (PATTERN (insn));
1100 else if (GET_CODE (PATTERN (insn)) == PARALLEL
1101 || GET_CODE (PATTERN (insn)) == SEQUENCE)
1103 /* There may be stack adjustments inside compound insns. Search
1104 for them. */
1105 for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1106 if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1107 offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1109 else
1110 return;
1112 if (offset == 0)
1113 return;
1115 if (cfa.reg == STACK_POINTER_REGNUM)
1116 cfa.offset += offset;
1118 #ifndef STACK_GROWS_DOWNWARD
1119 offset = -offset;
1120 #endif
1122 args_size += offset;
1123 if (args_size < 0)
1124 args_size = 0;
1126 label = dwarf2out_cfi_label ();
1127 def_cfa_1 (label, &cfa);
1128 dwarf2out_args_size (label, args_size);
1131 #endif
1133 /* We delay emitting a register save until either (a) we reach the end
1134 of the prologue or (b) the register is clobbered. This clusters
1135 register saves so that there are fewer pc advances. */
1137 struct queued_reg_save GTY(())
1139 struct queued_reg_save *next;
1140 rtx reg;
1141 HOST_WIDE_INT cfa_offset;
1144 static GTY(()) struct queued_reg_save *queued_reg_saves;
1146 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1147 static const char *last_reg_save_label;
1149 static void
1150 queue_reg_save (const char *label, rtx reg, HOST_WIDE_INT offset)
1152 struct queued_reg_save *q = ggc_alloc (sizeof (*q));
1154 q->next = queued_reg_saves;
1155 q->reg = reg;
1156 q->cfa_offset = offset;
1157 queued_reg_saves = q;
1159 last_reg_save_label = label;
1162 static void
1163 flush_queued_reg_saves (void)
1165 struct queued_reg_save *q, *next;
1167 for (q = queued_reg_saves; q; q = next)
1169 dwarf2out_reg_save (last_reg_save_label, REGNO (q->reg), q->cfa_offset);
1170 next = q->next;
1173 queued_reg_saves = NULL;
1174 last_reg_save_label = NULL;
1177 static bool
1178 clobbers_queued_reg_save (rtx insn)
1180 struct queued_reg_save *q;
1182 for (q = queued_reg_saves; q; q = q->next)
1183 if (modified_in_p (q->reg, insn))
1184 return true;
1186 return false;
1190 /* A temporary register holding an integral value used in adjusting SP
1191 or setting up the store_reg. The "offset" field holds the integer
1192 value, not an offset. */
1193 static dw_cfa_location cfa_temp;
1195 /* Record call frame debugging information for an expression EXPR,
1196 which either sets SP or FP (adjusting how we calculate the frame
1197 address) or saves a register to the stack. LABEL indicates the
1198 address of EXPR.
1200 This function encodes a state machine mapping rtxes to actions on
1201 cfa, cfa_store, and cfa_temp.reg. We describe these rules so
1202 users need not read the source code.
1204 The High-Level Picture
1206 Changes in the register we use to calculate the CFA: Currently we
1207 assume that if you copy the CFA register into another register, we
1208 should take the other one as the new CFA register; this seems to
1209 work pretty well. If it's wrong for some target, it's simple
1210 enough not to set RTX_FRAME_RELATED_P on the insn in question.
1212 Changes in the register we use for saving registers to the stack:
1213 This is usually SP, but not always. Again, we deduce that if you
1214 copy SP into another register (and SP is not the CFA register),
1215 then the new register is the one we will be using for register
1216 saves. This also seems to work.
1218 Register saves: There's not much guesswork about this one; if
1219 RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1220 register save, and the register used to calculate the destination
1221 had better be the one we think we're using for this purpose.
1223 Except: If the register being saved is the CFA register, and the
1224 offset is nonzero, we are saving the CFA, so we assume we have to
1225 use DW_CFA_def_cfa_expression. If the offset is 0, we assume that
1226 the intent is to save the value of SP from the previous frame.
1228 Invariants / Summaries of Rules
1230 cfa current rule for calculating the CFA. It usually
1231 consists of a register and an offset.
1232 cfa_store register used by prologue code to save things to the stack
1233 cfa_store.offset is the offset from the value of
1234 cfa_store.reg to the actual CFA
1235 cfa_temp register holding an integral value. cfa_temp.offset
1236 stores the value, which will be used to adjust the
1237 stack pointer. cfa_temp is also used like cfa_store,
1238 to track stores to the stack via fp or a temp reg.
1240 Rules 1- 4: Setting a register's value to cfa.reg or an expression
1241 with cfa.reg as the first operand changes the cfa.reg and its
1242 cfa.offset. Rule 1 and 4 also set cfa_temp.reg and
1243 cfa_temp.offset.
1245 Rules 6- 9: Set a non-cfa.reg register value to a constant or an
1246 expression yielding a constant. This sets cfa_temp.reg
1247 and cfa_temp.offset.
1249 Rule 5: Create a new register cfa_store used to save items to the
1250 stack.
1252 Rules 10-14: Save a register to the stack. Define offset as the
1253 difference of the original location and cfa_store's
1254 location (or cfa_temp's location if cfa_temp is used).
1256 The Rules
1258 "{a,b}" indicates a choice of a xor b.
1259 "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1261 Rule 1:
1262 (set <reg1> <reg2>:cfa.reg)
1263 effects: cfa.reg = <reg1>
1264 cfa.offset unchanged
1265 cfa_temp.reg = <reg1>
1266 cfa_temp.offset = cfa.offset
1268 Rule 2:
1269 (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1270 {<const_int>,<reg>:cfa_temp.reg}))
1271 effects: cfa.reg = sp if fp used
1272 cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1273 cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1274 if cfa_store.reg==sp
1276 Rule 3:
1277 (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1278 effects: cfa.reg = fp
1279 cfa_offset += +/- <const_int>
1281 Rule 4:
1282 (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1283 constraints: <reg1> != fp
1284 <reg1> != sp
1285 effects: cfa.reg = <reg1>
1286 cfa_temp.reg = <reg1>
1287 cfa_temp.offset = cfa.offset
1289 Rule 5:
1290 (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1291 constraints: <reg1> != fp
1292 <reg1> != sp
1293 effects: cfa_store.reg = <reg1>
1294 cfa_store.offset = cfa.offset - cfa_temp.offset
1296 Rule 6:
1297 (set <reg> <const_int>)
1298 effects: cfa_temp.reg = <reg>
1299 cfa_temp.offset = <const_int>
1301 Rule 7:
1302 (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1303 effects: cfa_temp.reg = <reg1>
1304 cfa_temp.offset |= <const_int>
1306 Rule 8:
1307 (set <reg> (high <exp>))
1308 effects: none
1310 Rule 9:
1311 (set <reg> (lo_sum <exp> <const_int>))
1312 effects: cfa_temp.reg = <reg>
1313 cfa_temp.offset = <const_int>
1315 Rule 10:
1316 (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1317 effects: cfa_store.offset -= <const_int>
1318 cfa.offset = cfa_store.offset if cfa.reg == sp
1319 cfa.reg = sp
1320 cfa.base_offset = -cfa_store.offset
1322 Rule 11:
1323 (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1324 effects: cfa_store.offset += -/+ mode_size(mem)
1325 cfa.offset = cfa_store.offset if cfa.reg == sp
1326 cfa.reg = sp
1327 cfa.base_offset = -cfa_store.offset
1329 Rule 12:
1330 (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1332 <reg2>)
1333 effects: cfa.reg = <reg1>
1334 cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1336 Rule 13:
1337 (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1338 effects: cfa.reg = <reg1>
1339 cfa.base_offset = -{cfa_store,cfa_temp}.offset
1341 Rule 14:
1342 (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1343 effects: cfa.reg = <reg1>
1344 cfa.base_offset = -cfa_temp.offset
1345 cfa_temp.offset -= mode_size(mem) */
1347 static void
1348 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1350 rtx src, dest;
1351 HOST_WIDE_INT offset;
1353 /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1354 the PARALLEL independently. The first element is always processed if
1355 it is a SET. This is for backward compatibility. Other elements
1356 are processed only if they are SETs and the RTX_FRAME_RELATED_P
1357 flag is set in them. */
1358 if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1360 int par_index;
1361 int limit = XVECLEN (expr, 0);
1363 for (par_index = 0; par_index < limit; par_index++)
1364 if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1365 && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1366 || par_index == 0))
1367 dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1369 return;
1372 if (GET_CODE (expr) != SET)
1373 abort ();
1375 src = SET_SRC (expr);
1376 dest = SET_DEST (expr);
1378 switch (GET_CODE (dest))
1380 case REG:
1381 /* Rule 1 */
1382 /* Update the CFA rule wrt SP or FP. Make sure src is
1383 relative to the current CFA register. */
1384 switch (GET_CODE (src))
1386 /* Setting FP from SP. */
1387 case REG:
1388 if (cfa.reg == (unsigned) REGNO (src))
1389 /* OK. */
1391 else
1392 abort ();
1394 /* We used to require that dest be either SP or FP, but the
1395 ARM copies SP to a temporary register, and from there to
1396 FP. So we just rely on the backends to only set
1397 RTX_FRAME_RELATED_P on appropriate insns. */
1398 cfa.reg = REGNO (dest);
1399 cfa_temp.reg = cfa.reg;
1400 cfa_temp.offset = cfa.offset;
1401 break;
1403 case PLUS:
1404 case MINUS:
1405 case LO_SUM:
1406 if (dest == stack_pointer_rtx)
1408 /* Rule 2 */
1409 /* Adjusting SP. */
1410 switch (GET_CODE (XEXP (src, 1)))
1412 case CONST_INT:
1413 offset = INTVAL (XEXP (src, 1));
1414 break;
1415 case REG:
1416 if ((unsigned) REGNO (XEXP (src, 1)) != cfa_temp.reg)
1417 abort ();
1418 offset = cfa_temp.offset;
1419 break;
1420 default:
1421 abort ();
1424 if (XEXP (src, 0) == hard_frame_pointer_rtx)
1426 /* Restoring SP from FP in the epilogue. */
1427 if (cfa.reg != (unsigned) HARD_FRAME_POINTER_REGNUM)
1428 abort ();
1429 cfa.reg = STACK_POINTER_REGNUM;
1431 else if (GET_CODE (src) == LO_SUM)
1432 /* Assume we've set the source reg of the LO_SUM from sp. */
1434 else if (XEXP (src, 0) != stack_pointer_rtx)
1435 abort ();
1437 if (GET_CODE (src) != MINUS)
1438 offset = -offset;
1439 if (cfa.reg == STACK_POINTER_REGNUM)
1440 cfa.offset += offset;
1441 if (cfa_store.reg == STACK_POINTER_REGNUM)
1442 cfa_store.offset += offset;
1444 else if (dest == hard_frame_pointer_rtx)
1446 /* Rule 3 */
1447 /* Either setting the FP from an offset of the SP,
1448 or adjusting the FP */
1449 if (! frame_pointer_needed)
1450 abort ();
1452 if (GET_CODE (XEXP (src, 0)) == REG
1453 && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1454 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1456 offset = INTVAL (XEXP (src, 1));
1457 if (GET_CODE (src) != MINUS)
1458 offset = -offset;
1459 cfa.offset += offset;
1460 cfa.reg = HARD_FRAME_POINTER_REGNUM;
1462 else
1463 abort ();
1465 else
1467 if (GET_CODE (src) == MINUS)
1468 abort ();
1470 /* Rule 4 */
1471 if (GET_CODE (XEXP (src, 0)) == REG
1472 && REGNO (XEXP (src, 0)) == cfa.reg
1473 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1475 /* Setting a temporary CFA register that will be copied
1476 into the FP later on. */
1477 offset = - INTVAL (XEXP (src, 1));
1478 cfa.offset += offset;
1479 cfa.reg = REGNO (dest);
1480 /* Or used to save regs to the stack. */
1481 cfa_temp.reg = cfa.reg;
1482 cfa_temp.offset = cfa.offset;
1485 /* Rule 5 */
1486 else if (GET_CODE (XEXP (src, 0)) == REG
1487 && REGNO (XEXP (src, 0)) == cfa_temp.reg
1488 && XEXP (src, 1) == stack_pointer_rtx)
1490 /* Setting a scratch register that we will use instead
1491 of SP for saving registers to the stack. */
1492 if (cfa.reg != STACK_POINTER_REGNUM)
1493 abort ();
1494 cfa_store.reg = REGNO (dest);
1495 cfa_store.offset = cfa.offset - cfa_temp.offset;
1498 /* Rule 9 */
1499 else if (GET_CODE (src) == LO_SUM
1500 && GET_CODE (XEXP (src, 1)) == CONST_INT)
1502 cfa_temp.reg = REGNO (dest);
1503 cfa_temp.offset = INTVAL (XEXP (src, 1));
1505 else
1506 abort ();
1508 break;
1510 /* Rule 6 */
1511 case CONST_INT:
1512 cfa_temp.reg = REGNO (dest);
1513 cfa_temp.offset = INTVAL (src);
1514 break;
1516 /* Rule 7 */
1517 case IOR:
1518 if (GET_CODE (XEXP (src, 0)) != REG
1519 || (unsigned) REGNO (XEXP (src, 0)) != cfa_temp.reg
1520 || GET_CODE (XEXP (src, 1)) != CONST_INT)
1521 abort ();
1523 if ((unsigned) REGNO (dest) != cfa_temp.reg)
1524 cfa_temp.reg = REGNO (dest);
1525 cfa_temp.offset |= INTVAL (XEXP (src, 1));
1526 break;
1528 /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1529 which will fill in all of the bits. */
1530 /* Rule 8 */
1531 case HIGH:
1532 break;
1534 default:
1535 abort ();
1538 def_cfa_1 (label, &cfa);
1539 break;
1541 case MEM:
1542 if (GET_CODE (src) != REG)
1543 abort ();
1545 /* Saving a register to the stack. Make sure dest is relative to the
1546 CFA register. */
1547 switch (GET_CODE (XEXP (dest, 0)))
1549 /* Rule 10 */
1550 /* With a push. */
1551 case PRE_MODIFY:
1552 /* We can't handle variable size modifications. */
1553 if (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1)) != CONST_INT)
1554 abort ();
1555 offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1557 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1558 || cfa_store.reg != STACK_POINTER_REGNUM)
1559 abort ();
1561 cfa_store.offset += offset;
1562 if (cfa.reg == STACK_POINTER_REGNUM)
1563 cfa.offset = cfa_store.offset;
1565 offset = -cfa_store.offset;
1566 break;
1568 /* Rule 11 */
1569 case PRE_INC:
1570 case PRE_DEC:
1571 offset = GET_MODE_SIZE (GET_MODE (dest));
1572 if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1573 offset = -offset;
1575 if (REGNO (XEXP (XEXP (dest, 0), 0)) != STACK_POINTER_REGNUM
1576 || cfa_store.reg != STACK_POINTER_REGNUM)
1577 abort ();
1579 cfa_store.offset += offset;
1580 if (cfa.reg == STACK_POINTER_REGNUM)
1581 cfa.offset = cfa_store.offset;
1583 offset = -cfa_store.offset;
1584 break;
1586 /* Rule 12 */
1587 /* With an offset. */
1588 case PLUS:
1589 case MINUS:
1590 case LO_SUM:
1591 if (GET_CODE (XEXP (XEXP (dest, 0), 1)) != CONST_INT)
1592 abort ();
1593 offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1594 if (GET_CODE (XEXP (dest, 0)) == MINUS)
1595 offset = -offset;
1597 if (cfa_store.reg == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1598 offset -= cfa_store.offset;
1599 else if (cfa_temp.reg == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1600 offset -= cfa_temp.offset;
1601 else
1602 abort ();
1603 break;
1605 /* Rule 13 */
1606 /* Without an offset. */
1607 case REG:
1608 if (cfa_store.reg == (unsigned) REGNO (XEXP (dest, 0)))
1609 offset = -cfa_store.offset;
1610 else if (cfa_temp.reg == (unsigned) REGNO (XEXP (dest, 0)))
1611 offset = -cfa_temp.offset;
1612 else
1613 abort ();
1614 break;
1616 /* Rule 14 */
1617 case POST_INC:
1618 if (cfa_temp.reg != (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)))
1619 abort ();
1620 offset = -cfa_temp.offset;
1621 cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1622 break;
1624 default:
1625 abort ();
1628 if (REGNO (src) != STACK_POINTER_REGNUM
1629 && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1630 && (unsigned) REGNO (src) == cfa.reg)
1632 /* We're storing the current CFA reg into the stack. */
1634 if (cfa.offset == 0)
1636 /* If the source register is exactly the CFA, assume
1637 we're saving SP like any other register; this happens
1638 on the ARM. */
1639 def_cfa_1 (label, &cfa);
1640 queue_reg_save (label, stack_pointer_rtx, offset);
1641 break;
1643 else
1645 /* Otherwise, we'll need to look in the stack to
1646 calculate the CFA. */
1647 rtx x = XEXP (dest, 0);
1649 if (GET_CODE (x) != REG)
1650 x = XEXP (x, 0);
1651 if (GET_CODE (x) != REG)
1652 abort ();
1654 cfa.reg = REGNO (x);
1655 cfa.base_offset = offset;
1656 cfa.indirect = 1;
1657 def_cfa_1 (label, &cfa);
1658 break;
1662 def_cfa_1 (label, &cfa);
1663 queue_reg_save (label, src, offset);
1664 break;
1666 default:
1667 abort ();
1671 /* Record call frame debugging information for INSN, which either
1672 sets SP or FP (adjusting how we calculate the frame address) or saves a
1673 register to the stack. If INSN is NULL_RTX, initialize our state. */
1675 void
1676 dwarf2out_frame_debug (rtx insn)
1678 const char *label;
1679 rtx src;
1681 if (insn == NULL_RTX)
1683 /* Flush any queued register saves. */
1684 flush_queued_reg_saves ();
1686 /* Set up state for generating call frame debug info. */
1687 lookup_cfa (&cfa);
1688 if (cfa.reg != (unsigned long) DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM))
1689 abort ();
1691 cfa.reg = STACK_POINTER_REGNUM;
1692 cfa_store = cfa;
1693 cfa_temp.reg = -1;
1694 cfa_temp.offset = 0;
1695 return;
1698 if (GET_CODE (insn) != INSN || clobbers_queued_reg_save (insn))
1699 flush_queued_reg_saves ();
1701 if (! RTX_FRAME_RELATED_P (insn))
1703 if (!ACCUMULATE_OUTGOING_ARGS)
1704 dwarf2out_stack_adjust (insn);
1706 return;
1709 label = dwarf2out_cfi_label ();
1710 src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1711 if (src)
1712 insn = XEXP (src, 0);
1713 else
1714 insn = PATTERN (insn);
1716 dwarf2out_frame_debug_expr (insn, label);
1719 #endif
1721 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used. */
1722 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1723 (enum dwarf_call_frame_info cfi);
1725 static enum dw_cfi_oprnd_type
1726 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1728 switch (cfi)
1730 case DW_CFA_nop:
1731 case DW_CFA_GNU_window_save:
1732 return dw_cfi_oprnd_unused;
1734 case DW_CFA_set_loc:
1735 case DW_CFA_advance_loc1:
1736 case DW_CFA_advance_loc2:
1737 case DW_CFA_advance_loc4:
1738 case DW_CFA_MIPS_advance_loc8:
1739 return dw_cfi_oprnd_addr;
1741 case DW_CFA_offset:
1742 case DW_CFA_offset_extended:
1743 case DW_CFA_def_cfa:
1744 case DW_CFA_offset_extended_sf:
1745 case DW_CFA_def_cfa_sf:
1746 case DW_CFA_restore_extended:
1747 case DW_CFA_undefined:
1748 case DW_CFA_same_value:
1749 case DW_CFA_def_cfa_register:
1750 case DW_CFA_register:
1751 return dw_cfi_oprnd_reg_num;
1753 case DW_CFA_def_cfa_offset:
1754 case DW_CFA_GNU_args_size:
1755 case DW_CFA_def_cfa_offset_sf:
1756 return dw_cfi_oprnd_offset;
1758 case DW_CFA_def_cfa_expression:
1759 case DW_CFA_expression:
1760 return dw_cfi_oprnd_loc;
1762 default:
1763 abort ();
1767 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used. */
1768 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1769 (enum dwarf_call_frame_info cfi);
1771 static enum dw_cfi_oprnd_type
1772 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1774 switch (cfi)
1776 case DW_CFA_def_cfa:
1777 case DW_CFA_def_cfa_sf:
1778 case DW_CFA_offset:
1779 case DW_CFA_offset_extended_sf:
1780 case DW_CFA_offset_extended:
1781 return dw_cfi_oprnd_offset;
1783 case DW_CFA_register:
1784 return dw_cfi_oprnd_reg_num;
1786 default:
1787 return dw_cfi_oprnd_unused;
1791 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1793 /* Map register numbers held in the call frame info that gcc has
1794 collected using DWARF_FRAME_REGNUM to those that should be output in
1795 .debug_frame and .eh_frame. */
1796 #ifndef DWARF2_FRAME_REG_OUT
1797 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
1798 #endif
1800 /* Output a Call Frame Information opcode and its operand(s). */
1802 static void
1803 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
1805 unsigned long r;
1806 if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
1807 dw2_asm_output_data (1, (cfi->dw_cfi_opc
1808 | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
1809 "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
1810 cfi->dw_cfi_oprnd1.dw_cfi_offset);
1811 else if (cfi->dw_cfi_opc == DW_CFA_offset)
1813 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1814 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1815 "DW_CFA_offset, column 0x%lx", r);
1816 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1818 else if (cfi->dw_cfi_opc == DW_CFA_restore)
1820 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1821 dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
1822 "DW_CFA_restore, column 0x%lx", r);
1824 else
1826 dw2_asm_output_data (1, cfi->dw_cfi_opc,
1827 "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
1829 switch (cfi->dw_cfi_opc)
1831 case DW_CFA_set_loc:
1832 if (for_eh)
1833 dw2_asm_output_encoded_addr_rtx (
1834 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
1835 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
1836 NULL);
1837 else
1838 dw2_asm_output_addr (DWARF2_ADDR_SIZE,
1839 cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
1840 break;
1842 case DW_CFA_advance_loc1:
1843 dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1844 fde->dw_fde_current_label, NULL);
1845 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1846 break;
1848 case DW_CFA_advance_loc2:
1849 dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1850 fde->dw_fde_current_label, NULL);
1851 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1852 break;
1854 case DW_CFA_advance_loc4:
1855 dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1856 fde->dw_fde_current_label, NULL);
1857 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1858 break;
1860 case DW_CFA_MIPS_advance_loc8:
1861 dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
1862 fde->dw_fde_current_label, NULL);
1863 fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
1864 break;
1866 case DW_CFA_offset_extended:
1867 case DW_CFA_def_cfa:
1868 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1869 dw2_asm_output_data_uleb128 (r, NULL);
1870 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1871 break;
1873 case DW_CFA_offset_extended_sf:
1874 case DW_CFA_def_cfa_sf:
1875 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1876 dw2_asm_output_data_uleb128 (r, NULL);
1877 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
1878 break;
1880 case DW_CFA_restore_extended:
1881 case DW_CFA_undefined:
1882 case DW_CFA_same_value:
1883 case DW_CFA_def_cfa_register:
1884 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1885 dw2_asm_output_data_uleb128 (r, NULL);
1886 break;
1888 case DW_CFA_register:
1889 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
1890 dw2_asm_output_data_uleb128 (r, NULL);
1891 r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
1892 dw2_asm_output_data_uleb128 (r, NULL);
1893 break;
1895 case DW_CFA_def_cfa_offset:
1896 case DW_CFA_GNU_args_size:
1897 dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
1898 break;
1900 case DW_CFA_def_cfa_offset_sf:
1901 dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
1902 break;
1904 case DW_CFA_GNU_window_save:
1905 break;
1907 case DW_CFA_def_cfa_expression:
1908 case DW_CFA_expression:
1909 output_cfa_loc (cfi);
1910 break;
1912 case DW_CFA_GNU_negative_offset_extended:
1913 /* Obsoleted by DW_CFA_offset_extended_sf. */
1914 abort ();
1916 default:
1917 break;
1922 /* Output the call frame information used to record information
1923 that relates to calculating the frame pointer, and records the
1924 location of saved registers. */
1926 static void
1927 output_call_frame_info (int for_eh)
1929 unsigned int i;
1930 dw_fde_ref fde;
1931 dw_cfi_ref cfi;
1932 char l1[20], l2[20], section_start_label[20];
1933 bool any_lsda_needed = false;
1934 char augmentation[6];
1935 int augmentation_size;
1936 int fde_encoding = DW_EH_PE_absptr;
1937 int per_encoding = DW_EH_PE_absptr;
1938 int lsda_encoding = DW_EH_PE_absptr;
1940 /* Don't emit a CIE if there won't be any FDEs. */
1941 if (fde_table_in_use == 0)
1942 return;
1944 /* If we don't have any functions we'll want to unwind out of, don't
1945 emit any EH unwind information. Note that if exceptions aren't
1946 enabled, we won't have collected nothrow information, and if we
1947 asked for asynchronous tables, we always want this info. */
1948 if (for_eh)
1950 bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
1952 for (i = 0; i < fde_table_in_use; i++)
1953 if (fde_table[i].uses_eh_lsda)
1954 any_eh_needed = any_lsda_needed = true;
1955 else if (! fde_table[i].nothrow
1956 && ! fde_table[i].all_throwers_are_sibcalls)
1957 any_eh_needed = true;
1959 if (! any_eh_needed)
1960 return;
1963 /* We're going to be generating comments, so turn on app. */
1964 if (flag_debug_asm)
1965 app_enable ();
1967 if (for_eh)
1968 (*targetm.asm_out.eh_frame_section) ();
1969 else
1970 named_section_flags (DEBUG_FRAME_SECTION, SECTION_DEBUG);
1972 ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
1973 ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
1975 /* Output the CIE. */
1976 ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
1977 ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
1978 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
1979 "Length of Common Information Entry");
1980 ASM_OUTPUT_LABEL (asm_out_file, l1);
1982 /* Now that the CIE pointer is PC-relative for EH,
1983 use 0 to identify the CIE. */
1984 dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
1985 (for_eh ? 0 : DW_CIE_ID),
1986 "CIE Identifier Tag");
1988 dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
1990 augmentation[0] = 0;
1991 augmentation_size = 0;
1992 if (for_eh)
1994 char *p;
1996 /* Augmentation:
1997 z Indicates that a uleb128 is present to size the
1998 augmentation section.
1999 L Indicates the encoding (and thus presence) of
2000 an LSDA pointer in the FDE augmentation.
2001 R Indicates a non-default pointer encoding for
2002 FDE code pointers.
2003 P Indicates the presence of an encoding + language
2004 personality routine in the CIE augmentation. */
2006 fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2007 per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2008 lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2010 p = augmentation + 1;
2011 if (eh_personality_libfunc)
2013 *p++ = 'P';
2014 augmentation_size += 1 + size_of_encoded_value (per_encoding);
2016 if (any_lsda_needed)
2018 *p++ = 'L';
2019 augmentation_size += 1;
2021 if (fde_encoding != DW_EH_PE_absptr)
2023 *p++ = 'R';
2024 augmentation_size += 1;
2026 if (p > augmentation + 1)
2028 augmentation[0] = 'z';
2029 *p = '\0';
2032 /* Ug. Some platforms can't do unaligned dynamic relocations at all. */
2033 if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2035 int offset = ( 4 /* Length */
2036 + 4 /* CIE Id */
2037 + 1 /* CIE version */
2038 + strlen (augmentation) + 1 /* Augmentation */
2039 + size_of_uleb128 (1) /* Code alignment */
2040 + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2041 + 1 /* RA column */
2042 + 1 /* Augmentation size */
2043 + 1 /* Personality encoding */ );
2044 int pad = -offset & (PTR_SIZE - 1);
2046 augmentation_size += pad;
2048 /* Augmentations should be small, so there's scarce need to
2049 iterate for a solution. Die if we exceed one uleb128 byte. */
2050 if (size_of_uleb128 (augmentation_size) != 1)
2051 abort ();
2055 dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2056 dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2057 dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2058 "CIE Data Alignment Factor");
2059 dw2_asm_output_data (1, DWARF_FRAME_RETURN_COLUMN, "CIE RA Column");
2061 if (augmentation[0])
2063 dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2064 if (eh_personality_libfunc)
2066 dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2067 eh_data_format_name (per_encoding));
2068 dw2_asm_output_encoded_addr_rtx (per_encoding,
2069 eh_personality_libfunc, NULL);
2072 if (any_lsda_needed)
2073 dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2074 eh_data_format_name (lsda_encoding));
2076 if (fde_encoding != DW_EH_PE_absptr)
2077 dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2078 eh_data_format_name (fde_encoding));
2081 for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2082 output_cfi (cfi, NULL, for_eh);
2084 /* Pad the CIE out to an address sized boundary. */
2085 ASM_OUTPUT_ALIGN (asm_out_file,
2086 floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2087 ASM_OUTPUT_LABEL (asm_out_file, l2);
2089 /* Loop through all of the FDE's. */
2090 for (i = 0; i < fde_table_in_use; i++)
2092 fde = &fde_table[i];
2094 /* Don't emit EH unwind info for leaf functions that don't need it. */
2095 if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2096 && (fde->nothrow || fde->all_throwers_are_sibcalls)
2097 && !fde->uses_eh_lsda)
2098 continue;
2100 (*targetm.asm_out.internal_label) (asm_out_file, FDE_LABEL, for_eh + i * 2);
2101 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2102 ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2103 dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2104 "FDE Length");
2105 ASM_OUTPUT_LABEL (asm_out_file, l1);
2107 if (for_eh)
2108 dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2109 else
2110 dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2111 "FDE CIE offset");
2113 if (for_eh)
2115 dw2_asm_output_encoded_addr_rtx (fde_encoding,
2116 gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin),
2117 "FDE initial location");
2118 dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2119 fde->dw_fde_end, fde->dw_fde_begin,
2120 "FDE address range");
2122 else
2124 dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2125 "FDE initial location");
2126 dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2127 fde->dw_fde_end, fde->dw_fde_begin,
2128 "FDE address range");
2131 if (augmentation[0])
2133 if (any_lsda_needed)
2135 int size = size_of_encoded_value (lsda_encoding);
2137 if (lsda_encoding == DW_EH_PE_aligned)
2139 int offset = ( 4 /* Length */
2140 + 4 /* CIE offset */
2141 + 2 * size_of_encoded_value (fde_encoding)
2142 + 1 /* Augmentation size */ );
2143 int pad = -offset & (PTR_SIZE - 1);
2145 size += pad;
2146 if (size_of_uleb128 (size) != 1)
2147 abort ();
2150 dw2_asm_output_data_uleb128 (size, "Augmentation size");
2152 if (fde->uses_eh_lsda)
2154 ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2155 fde->funcdef_number);
2156 dw2_asm_output_encoded_addr_rtx (
2157 lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2158 "Language Specific Data Area");
2160 else
2162 if (lsda_encoding == DW_EH_PE_aligned)
2163 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2164 dw2_asm_output_data
2165 (size_of_encoded_value (lsda_encoding), 0,
2166 "Language Specific Data Area (none)");
2169 else
2170 dw2_asm_output_data_uleb128 (0, "Augmentation size");
2173 /* Loop through the Call Frame Instructions associated with
2174 this FDE. */
2175 fde->dw_fde_current_label = fde->dw_fde_begin;
2176 for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2177 output_cfi (cfi, fde, for_eh);
2179 /* Pad the FDE out to an address sized boundary. */
2180 ASM_OUTPUT_ALIGN (asm_out_file,
2181 floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2182 ASM_OUTPUT_LABEL (asm_out_file, l2);
2185 if (for_eh && targetm.terminate_dw2_eh_frame_info)
2186 dw2_asm_output_data (4, 0, "End of Table");
2187 #ifdef MIPS_DEBUGGING_INFO
2188 /* Work around Irix 6 assembler bug whereby labels at the end of a section
2189 get a value of 0. Putting .align 0 after the label fixes it. */
2190 ASM_OUTPUT_ALIGN (asm_out_file, 0);
2191 #endif
2193 /* Turn off app to make assembly quicker. */
2194 if (flag_debug_asm)
2195 app_disable ();
2198 /* Output a marker (i.e. a label) for the beginning of a function, before
2199 the prologue. */
2201 void
2202 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2203 const char *file ATTRIBUTE_UNUSED)
2205 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2206 dw_fde_ref fde;
2208 current_function_func_begin_label = 0;
2210 #ifdef IA64_UNWIND_INFO
2211 /* ??? current_function_func_begin_label is also used by except.c
2212 for call-site information. We must emit this label if it might
2213 be used. */
2214 if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2215 && ! dwarf2out_do_frame ())
2216 return;
2217 #else
2218 if (! dwarf2out_do_frame ())
2219 return;
2220 #endif
2222 function_section (current_function_decl);
2223 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2224 current_function_funcdef_no);
2225 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2226 current_function_funcdef_no);
2227 current_function_func_begin_label = get_identifier (label);
2229 #ifdef IA64_UNWIND_INFO
2230 /* We can elide the fde allocation if we're not emitting debug info. */
2231 if (! dwarf2out_do_frame ())
2232 return;
2233 #endif
2235 /* Expand the fde table if necessary. */
2236 if (fde_table_in_use == fde_table_allocated)
2238 fde_table_allocated += FDE_TABLE_INCREMENT;
2239 fde_table = ggc_realloc (fde_table,
2240 fde_table_allocated * sizeof (dw_fde_node));
2241 memset (fde_table + fde_table_in_use, 0,
2242 FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2245 /* Record the FDE associated with this function. */
2246 current_funcdef_fde = fde_table_in_use;
2248 /* Add the new FDE at the end of the fde_table. */
2249 fde = &fde_table[fde_table_in_use++];
2250 fde->dw_fde_begin = xstrdup (label);
2251 fde->dw_fde_current_label = NULL;
2252 fde->dw_fde_end = NULL;
2253 fde->dw_fde_cfi = NULL;
2254 fde->funcdef_number = current_function_funcdef_no;
2255 fde->nothrow = current_function_nothrow;
2256 fde->uses_eh_lsda = cfun->uses_eh_lsda;
2257 fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2259 args_size = old_args_size = 0;
2261 /* We only want to output line number information for the genuine dwarf2
2262 prologue case, not the eh frame case. */
2263 #ifdef DWARF2_DEBUGGING_INFO
2264 if (file)
2265 dwarf2out_source_line (line, file);
2266 #endif
2269 /* Output a marker (i.e. a label) for the absolute end of the generated code
2270 for a function definition. This gets called *after* the epilogue code has
2271 been generated. */
2273 void
2274 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2275 const char *file ATTRIBUTE_UNUSED)
2277 dw_fde_ref fde;
2278 char label[MAX_ARTIFICIAL_LABEL_BYTES];
2280 /* Output a label to mark the endpoint of the code generated for this
2281 function. */
2282 ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2283 current_function_funcdef_no);
2284 ASM_OUTPUT_LABEL (asm_out_file, label);
2285 fde = &fde_table[fde_table_in_use - 1];
2286 fde->dw_fde_end = xstrdup (label);
2289 void
2290 dwarf2out_frame_init (void)
2292 /* Allocate the initial hunk of the fde_table. */
2293 fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2294 fde_table_allocated = FDE_TABLE_INCREMENT;
2295 fde_table_in_use = 0;
2297 /* Generate the CFA instructions common to all FDE's. Do it now for the
2298 sake of lookup_cfa. */
2300 #ifdef DWARF2_UNWIND_INFO
2301 /* On entry, the Canonical Frame Address is at SP. */
2302 dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2303 initial_return_save (INCOMING_RETURN_ADDR_RTX);
2304 #endif
2307 void
2308 dwarf2out_frame_finish (void)
2310 /* Output call frame information. */
2311 if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
2312 output_call_frame_info (0);
2314 if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2315 output_call_frame_info (1);
2317 #endif
2319 /* And now, the subset of the debugging information support code necessary
2320 for emitting location expressions. */
2322 /* We need some way to distinguish DW_OP_addr with a direct symbol
2323 relocation from DW_OP_addr with a dtp-relative symbol relocation. */
2324 #define INTERNAL_DW_OP_tls_addr (0x100 + DW_OP_addr)
2327 typedef struct dw_val_struct *dw_val_ref;
2328 typedef struct die_struct *dw_die_ref;
2329 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2330 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2332 /* Each DIE may have a series of attribute/value pairs. Values
2333 can take on several forms. The forms that are used in this
2334 implementation are listed below. */
2336 enum dw_val_class
2338 dw_val_class_addr,
2339 dw_val_class_offset,
2340 dw_val_class_loc,
2341 dw_val_class_loc_list,
2342 dw_val_class_range_list,
2343 dw_val_class_const,
2344 dw_val_class_unsigned_const,
2345 dw_val_class_long_long,
2346 dw_val_class_vec,
2347 dw_val_class_flag,
2348 dw_val_class_die_ref,
2349 dw_val_class_fde_ref,
2350 dw_val_class_lbl_id,
2351 dw_val_class_lbl_offset,
2352 dw_val_class_str
2355 /* Describe a double word constant value. */
2356 /* ??? Every instance of long_long in the code really means CONST_DOUBLE. */
2358 typedef struct dw_long_long_struct GTY(())
2360 unsigned long hi;
2361 unsigned long low;
2363 dw_long_long_const;
2365 /* Describe a floating point constant value, or a vector constant value. */
2367 typedef struct dw_vec_struct GTY(())
2369 unsigned char * GTY((length ("%h.length"))) array;
2370 unsigned length;
2371 unsigned elt_size;
2373 dw_vec_const;
2375 /* The dw_val_node describes an attribute's value, as it is
2376 represented internally. */
2378 typedef struct dw_val_struct GTY(())
2380 enum dw_val_class val_class;
2381 union dw_val_struct_union
2383 rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2384 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2385 dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2386 dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2387 HOST_WIDE_INT GTY ((default (""))) val_int;
2388 unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2389 dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2390 dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2391 struct dw_val_die_union
2393 dw_die_ref die;
2394 int external;
2395 } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2396 unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2397 struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2398 char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2399 unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2401 GTY ((desc ("%1.val_class"))) v;
2403 dw_val_node;
2405 /* Locations in memory are described using a sequence of stack machine
2406 operations. */
2408 typedef struct dw_loc_descr_struct GTY(())
2410 dw_loc_descr_ref dw_loc_next;
2411 enum dwarf_location_atom dw_loc_opc;
2412 dw_val_node dw_loc_oprnd1;
2413 dw_val_node dw_loc_oprnd2;
2414 int dw_loc_addr;
2416 dw_loc_descr_node;
2418 /* Location lists are ranges + location descriptions for that range,
2419 so you can track variables that are in different places over
2420 their entire life. */
2421 typedef struct dw_loc_list_struct GTY(())
2423 dw_loc_list_ref dw_loc_next;
2424 const char *begin; /* Label for begin address of range */
2425 const char *end; /* Label for end address of range */
2426 char *ll_symbol; /* Label for beginning of location list.
2427 Only on head of list */
2428 const char *section; /* Section this loclist is relative to */
2429 dw_loc_descr_ref expr;
2430 } dw_loc_list_node;
2432 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2434 static const char *dwarf_stack_op_name (unsigned);
2435 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2436 unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2437 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2438 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2439 static unsigned long size_of_locs (dw_loc_descr_ref);
2440 static void output_loc_operands (dw_loc_descr_ref);
2441 static void output_loc_sequence (dw_loc_descr_ref);
2443 /* Convert a DWARF stack opcode into its string name. */
2445 static const char *
2446 dwarf_stack_op_name (unsigned int op)
2448 switch (op)
2450 case DW_OP_addr:
2451 case INTERNAL_DW_OP_tls_addr:
2452 return "DW_OP_addr";
2453 case DW_OP_deref:
2454 return "DW_OP_deref";
2455 case DW_OP_const1u:
2456 return "DW_OP_const1u";
2457 case DW_OP_const1s:
2458 return "DW_OP_const1s";
2459 case DW_OP_const2u:
2460 return "DW_OP_const2u";
2461 case DW_OP_const2s:
2462 return "DW_OP_const2s";
2463 case DW_OP_const4u:
2464 return "DW_OP_const4u";
2465 case DW_OP_const4s:
2466 return "DW_OP_const4s";
2467 case DW_OP_const8u:
2468 return "DW_OP_const8u";
2469 case DW_OP_const8s:
2470 return "DW_OP_const8s";
2471 case DW_OP_constu:
2472 return "DW_OP_constu";
2473 case DW_OP_consts:
2474 return "DW_OP_consts";
2475 case DW_OP_dup:
2476 return "DW_OP_dup";
2477 case DW_OP_drop:
2478 return "DW_OP_drop";
2479 case DW_OP_over:
2480 return "DW_OP_over";
2481 case DW_OP_pick:
2482 return "DW_OP_pick";
2483 case DW_OP_swap:
2484 return "DW_OP_swap";
2485 case DW_OP_rot:
2486 return "DW_OP_rot";
2487 case DW_OP_xderef:
2488 return "DW_OP_xderef";
2489 case DW_OP_abs:
2490 return "DW_OP_abs";
2491 case DW_OP_and:
2492 return "DW_OP_and";
2493 case DW_OP_div:
2494 return "DW_OP_div";
2495 case DW_OP_minus:
2496 return "DW_OP_minus";
2497 case DW_OP_mod:
2498 return "DW_OP_mod";
2499 case DW_OP_mul:
2500 return "DW_OP_mul";
2501 case DW_OP_neg:
2502 return "DW_OP_neg";
2503 case DW_OP_not:
2504 return "DW_OP_not";
2505 case DW_OP_or:
2506 return "DW_OP_or";
2507 case DW_OP_plus:
2508 return "DW_OP_plus";
2509 case DW_OP_plus_uconst:
2510 return "DW_OP_plus_uconst";
2511 case DW_OP_shl:
2512 return "DW_OP_shl";
2513 case DW_OP_shr:
2514 return "DW_OP_shr";
2515 case DW_OP_shra:
2516 return "DW_OP_shra";
2517 case DW_OP_xor:
2518 return "DW_OP_xor";
2519 case DW_OP_bra:
2520 return "DW_OP_bra";
2521 case DW_OP_eq:
2522 return "DW_OP_eq";
2523 case DW_OP_ge:
2524 return "DW_OP_ge";
2525 case DW_OP_gt:
2526 return "DW_OP_gt";
2527 case DW_OP_le:
2528 return "DW_OP_le";
2529 case DW_OP_lt:
2530 return "DW_OP_lt";
2531 case DW_OP_ne:
2532 return "DW_OP_ne";
2533 case DW_OP_skip:
2534 return "DW_OP_skip";
2535 case DW_OP_lit0:
2536 return "DW_OP_lit0";
2537 case DW_OP_lit1:
2538 return "DW_OP_lit1";
2539 case DW_OP_lit2:
2540 return "DW_OP_lit2";
2541 case DW_OP_lit3:
2542 return "DW_OP_lit3";
2543 case DW_OP_lit4:
2544 return "DW_OP_lit4";
2545 case DW_OP_lit5:
2546 return "DW_OP_lit5";
2547 case DW_OP_lit6:
2548 return "DW_OP_lit6";
2549 case DW_OP_lit7:
2550 return "DW_OP_lit7";
2551 case DW_OP_lit8:
2552 return "DW_OP_lit8";
2553 case DW_OP_lit9:
2554 return "DW_OP_lit9";
2555 case DW_OP_lit10:
2556 return "DW_OP_lit10";
2557 case DW_OP_lit11:
2558 return "DW_OP_lit11";
2559 case DW_OP_lit12:
2560 return "DW_OP_lit12";
2561 case DW_OP_lit13:
2562 return "DW_OP_lit13";
2563 case DW_OP_lit14:
2564 return "DW_OP_lit14";
2565 case DW_OP_lit15:
2566 return "DW_OP_lit15";
2567 case DW_OP_lit16:
2568 return "DW_OP_lit16";
2569 case DW_OP_lit17:
2570 return "DW_OP_lit17";
2571 case DW_OP_lit18:
2572 return "DW_OP_lit18";
2573 case DW_OP_lit19:
2574 return "DW_OP_lit19";
2575 case DW_OP_lit20:
2576 return "DW_OP_lit20";
2577 case DW_OP_lit21:
2578 return "DW_OP_lit21";
2579 case DW_OP_lit22:
2580 return "DW_OP_lit22";
2581 case DW_OP_lit23:
2582 return "DW_OP_lit23";
2583 case DW_OP_lit24:
2584 return "DW_OP_lit24";
2585 case DW_OP_lit25:
2586 return "DW_OP_lit25";
2587 case DW_OP_lit26:
2588 return "DW_OP_lit26";
2589 case DW_OP_lit27:
2590 return "DW_OP_lit27";
2591 case DW_OP_lit28:
2592 return "DW_OP_lit28";
2593 case DW_OP_lit29:
2594 return "DW_OP_lit29";
2595 case DW_OP_lit30:
2596 return "DW_OP_lit30";
2597 case DW_OP_lit31:
2598 return "DW_OP_lit31";
2599 case DW_OP_reg0:
2600 return "DW_OP_reg0";
2601 case DW_OP_reg1:
2602 return "DW_OP_reg1";
2603 case DW_OP_reg2:
2604 return "DW_OP_reg2";
2605 case DW_OP_reg3:
2606 return "DW_OP_reg3";
2607 case DW_OP_reg4:
2608 return "DW_OP_reg4";
2609 case DW_OP_reg5:
2610 return "DW_OP_reg5";
2611 case DW_OP_reg6:
2612 return "DW_OP_reg6";
2613 case DW_OP_reg7:
2614 return "DW_OP_reg7";
2615 case DW_OP_reg8:
2616 return "DW_OP_reg8";
2617 case DW_OP_reg9:
2618 return "DW_OP_reg9";
2619 case DW_OP_reg10:
2620 return "DW_OP_reg10";
2621 case DW_OP_reg11:
2622 return "DW_OP_reg11";
2623 case DW_OP_reg12:
2624 return "DW_OP_reg12";
2625 case DW_OP_reg13:
2626 return "DW_OP_reg13";
2627 case DW_OP_reg14:
2628 return "DW_OP_reg14";
2629 case DW_OP_reg15:
2630 return "DW_OP_reg15";
2631 case DW_OP_reg16:
2632 return "DW_OP_reg16";
2633 case DW_OP_reg17:
2634 return "DW_OP_reg17";
2635 case DW_OP_reg18:
2636 return "DW_OP_reg18";
2637 case DW_OP_reg19:
2638 return "DW_OP_reg19";
2639 case DW_OP_reg20:
2640 return "DW_OP_reg20";
2641 case DW_OP_reg21:
2642 return "DW_OP_reg21";
2643 case DW_OP_reg22:
2644 return "DW_OP_reg22";
2645 case DW_OP_reg23:
2646 return "DW_OP_reg23";
2647 case DW_OP_reg24:
2648 return "DW_OP_reg24";
2649 case DW_OP_reg25:
2650 return "DW_OP_reg25";
2651 case DW_OP_reg26:
2652 return "DW_OP_reg26";
2653 case DW_OP_reg27:
2654 return "DW_OP_reg27";
2655 case DW_OP_reg28:
2656 return "DW_OP_reg28";
2657 case DW_OP_reg29:
2658 return "DW_OP_reg29";
2659 case DW_OP_reg30:
2660 return "DW_OP_reg30";
2661 case DW_OP_reg31:
2662 return "DW_OP_reg31";
2663 case DW_OP_breg0:
2664 return "DW_OP_breg0";
2665 case DW_OP_breg1:
2666 return "DW_OP_breg1";
2667 case DW_OP_breg2:
2668 return "DW_OP_breg2";
2669 case DW_OP_breg3:
2670 return "DW_OP_breg3";
2671 case DW_OP_breg4:
2672 return "DW_OP_breg4";
2673 case DW_OP_breg5:
2674 return "DW_OP_breg5";
2675 case DW_OP_breg6:
2676 return "DW_OP_breg6";
2677 case DW_OP_breg7:
2678 return "DW_OP_breg7";
2679 case DW_OP_breg8:
2680 return "DW_OP_breg8";
2681 case DW_OP_breg9:
2682 return "DW_OP_breg9";
2683 case DW_OP_breg10:
2684 return "DW_OP_breg10";
2685 case DW_OP_breg11:
2686 return "DW_OP_breg11";
2687 case DW_OP_breg12:
2688 return "DW_OP_breg12";
2689 case DW_OP_breg13:
2690 return "DW_OP_breg13";
2691 case DW_OP_breg14:
2692 return "DW_OP_breg14";
2693 case DW_OP_breg15:
2694 return "DW_OP_breg15";
2695 case DW_OP_breg16:
2696 return "DW_OP_breg16";
2697 case DW_OP_breg17:
2698 return "DW_OP_breg17";
2699 case DW_OP_breg18:
2700 return "DW_OP_breg18";
2701 case DW_OP_breg19:
2702 return "DW_OP_breg19";
2703 case DW_OP_breg20:
2704 return "DW_OP_breg20";
2705 case DW_OP_breg21:
2706 return "DW_OP_breg21";
2707 case DW_OP_breg22:
2708 return "DW_OP_breg22";
2709 case DW_OP_breg23:
2710 return "DW_OP_breg23";
2711 case DW_OP_breg24:
2712 return "DW_OP_breg24";
2713 case DW_OP_breg25:
2714 return "DW_OP_breg25";
2715 case DW_OP_breg26:
2716 return "DW_OP_breg26";
2717 case DW_OP_breg27:
2718 return "DW_OP_breg27";
2719 case DW_OP_breg28:
2720 return "DW_OP_breg28";
2721 case DW_OP_breg29:
2722 return "DW_OP_breg29";
2723 case DW_OP_breg30:
2724 return "DW_OP_breg30";
2725 case DW_OP_breg31:
2726 return "DW_OP_breg31";
2727 case DW_OP_regx:
2728 return "DW_OP_regx";
2729 case DW_OP_fbreg:
2730 return "DW_OP_fbreg";
2731 case DW_OP_bregx:
2732 return "DW_OP_bregx";
2733 case DW_OP_piece:
2734 return "DW_OP_piece";
2735 case DW_OP_deref_size:
2736 return "DW_OP_deref_size";
2737 case DW_OP_xderef_size:
2738 return "DW_OP_xderef_size";
2739 case DW_OP_nop:
2740 return "DW_OP_nop";
2741 case DW_OP_push_object_address:
2742 return "DW_OP_push_object_address";
2743 case DW_OP_call2:
2744 return "DW_OP_call2";
2745 case DW_OP_call4:
2746 return "DW_OP_call4";
2747 case DW_OP_call_ref:
2748 return "DW_OP_call_ref";
2749 case DW_OP_GNU_push_tls_address:
2750 return "DW_OP_GNU_push_tls_address";
2751 default:
2752 return "OP_<unknown>";
2756 /* Return a pointer to a newly allocated location description. Location
2757 descriptions are simple expression terms that can be strung
2758 together to form more complicated location (address) descriptions. */
2760 static inline dw_loc_descr_ref
2761 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
2762 unsigned HOST_WIDE_INT oprnd2)
2764 dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
2766 descr->dw_loc_opc = op;
2767 descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
2768 descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
2769 descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
2770 descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
2772 return descr;
2776 /* Add a location description term to a location description expression. */
2778 static inline void
2779 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
2781 dw_loc_descr_ref *d;
2783 /* Find the end of the chain. */
2784 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
2787 *d = descr;
2790 /* Return the size of a location descriptor. */
2792 static unsigned long
2793 size_of_loc_descr (dw_loc_descr_ref loc)
2795 unsigned long size = 1;
2797 switch (loc->dw_loc_opc)
2799 case DW_OP_addr:
2800 case INTERNAL_DW_OP_tls_addr:
2801 size += DWARF2_ADDR_SIZE;
2802 break;
2803 case DW_OP_const1u:
2804 case DW_OP_const1s:
2805 size += 1;
2806 break;
2807 case DW_OP_const2u:
2808 case DW_OP_const2s:
2809 size += 2;
2810 break;
2811 case DW_OP_const4u:
2812 case DW_OP_const4s:
2813 size += 4;
2814 break;
2815 case DW_OP_const8u:
2816 case DW_OP_const8s:
2817 size += 8;
2818 break;
2819 case DW_OP_constu:
2820 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2821 break;
2822 case DW_OP_consts:
2823 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2824 break;
2825 case DW_OP_pick:
2826 size += 1;
2827 break;
2828 case DW_OP_plus_uconst:
2829 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2830 break;
2831 case DW_OP_skip:
2832 case DW_OP_bra:
2833 size += 2;
2834 break;
2835 case DW_OP_breg0:
2836 case DW_OP_breg1:
2837 case DW_OP_breg2:
2838 case DW_OP_breg3:
2839 case DW_OP_breg4:
2840 case DW_OP_breg5:
2841 case DW_OP_breg6:
2842 case DW_OP_breg7:
2843 case DW_OP_breg8:
2844 case DW_OP_breg9:
2845 case DW_OP_breg10:
2846 case DW_OP_breg11:
2847 case DW_OP_breg12:
2848 case DW_OP_breg13:
2849 case DW_OP_breg14:
2850 case DW_OP_breg15:
2851 case DW_OP_breg16:
2852 case DW_OP_breg17:
2853 case DW_OP_breg18:
2854 case DW_OP_breg19:
2855 case DW_OP_breg20:
2856 case DW_OP_breg21:
2857 case DW_OP_breg22:
2858 case DW_OP_breg23:
2859 case DW_OP_breg24:
2860 case DW_OP_breg25:
2861 case DW_OP_breg26:
2862 case DW_OP_breg27:
2863 case DW_OP_breg28:
2864 case DW_OP_breg29:
2865 case DW_OP_breg30:
2866 case DW_OP_breg31:
2867 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2868 break;
2869 case DW_OP_regx:
2870 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2871 break;
2872 case DW_OP_fbreg:
2873 size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
2874 break;
2875 case DW_OP_bregx:
2876 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2877 size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
2878 break;
2879 case DW_OP_piece:
2880 size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
2881 break;
2882 case DW_OP_deref_size:
2883 case DW_OP_xderef_size:
2884 size += 1;
2885 break;
2886 case DW_OP_call2:
2887 size += 2;
2888 break;
2889 case DW_OP_call4:
2890 size += 4;
2891 break;
2892 case DW_OP_call_ref:
2893 size += DWARF2_ADDR_SIZE;
2894 break;
2895 default:
2896 break;
2899 return size;
2902 /* Return the size of a series of location descriptors. */
2904 static unsigned long
2905 size_of_locs (dw_loc_descr_ref loc)
2907 unsigned long size;
2909 for (size = 0; loc != NULL; loc = loc->dw_loc_next)
2911 loc->dw_loc_addr = size;
2912 size += size_of_loc_descr (loc);
2915 return size;
2918 /* Output location description stack opcode's operands (if any). */
2920 static void
2921 output_loc_operands (dw_loc_descr_ref loc)
2923 dw_val_ref val1 = &loc->dw_loc_oprnd1;
2924 dw_val_ref val2 = &loc->dw_loc_oprnd2;
2926 switch (loc->dw_loc_opc)
2928 #ifdef DWARF2_DEBUGGING_INFO
2929 case DW_OP_addr:
2930 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
2931 break;
2932 case DW_OP_const2u:
2933 case DW_OP_const2s:
2934 dw2_asm_output_data (2, val1->v.val_int, NULL);
2935 break;
2936 case DW_OP_const4u:
2937 case DW_OP_const4s:
2938 dw2_asm_output_data (4, val1->v.val_int, NULL);
2939 break;
2940 case DW_OP_const8u:
2941 case DW_OP_const8s:
2942 if (HOST_BITS_PER_LONG < 64)
2943 abort ();
2944 dw2_asm_output_data (8, val1->v.val_int, NULL);
2945 break;
2946 case DW_OP_skip:
2947 case DW_OP_bra:
2949 int offset;
2951 if (val1->val_class == dw_val_class_loc)
2952 offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
2953 else
2954 abort ();
2956 dw2_asm_output_data (2, offset, NULL);
2958 break;
2959 #else
2960 case DW_OP_addr:
2961 case DW_OP_const2u:
2962 case DW_OP_const2s:
2963 case DW_OP_const4u:
2964 case DW_OP_const4s:
2965 case DW_OP_const8u:
2966 case DW_OP_const8s:
2967 case DW_OP_skip:
2968 case DW_OP_bra:
2969 /* We currently don't make any attempt to make sure these are
2970 aligned properly like we do for the main unwind info, so
2971 don't support emitting things larger than a byte if we're
2972 only doing unwinding. */
2973 abort ();
2974 #endif
2975 case DW_OP_const1u:
2976 case DW_OP_const1s:
2977 dw2_asm_output_data (1, val1->v.val_int, NULL);
2978 break;
2979 case DW_OP_constu:
2980 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2981 break;
2982 case DW_OP_consts:
2983 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
2984 break;
2985 case DW_OP_pick:
2986 dw2_asm_output_data (1, val1->v.val_int, NULL);
2987 break;
2988 case DW_OP_plus_uconst:
2989 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
2990 break;
2991 case DW_OP_breg0:
2992 case DW_OP_breg1:
2993 case DW_OP_breg2:
2994 case DW_OP_breg3:
2995 case DW_OP_breg4:
2996 case DW_OP_breg5:
2997 case DW_OP_breg6:
2998 case DW_OP_breg7:
2999 case DW_OP_breg8:
3000 case DW_OP_breg9:
3001 case DW_OP_breg10:
3002 case DW_OP_breg11:
3003 case DW_OP_breg12:
3004 case DW_OP_breg13:
3005 case DW_OP_breg14:
3006 case DW_OP_breg15:
3007 case DW_OP_breg16:
3008 case DW_OP_breg17:
3009 case DW_OP_breg18:
3010 case DW_OP_breg19:
3011 case DW_OP_breg20:
3012 case DW_OP_breg21:
3013 case DW_OP_breg22:
3014 case DW_OP_breg23:
3015 case DW_OP_breg24:
3016 case DW_OP_breg25:
3017 case DW_OP_breg26:
3018 case DW_OP_breg27:
3019 case DW_OP_breg28:
3020 case DW_OP_breg29:
3021 case DW_OP_breg30:
3022 case DW_OP_breg31:
3023 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3024 break;
3025 case DW_OP_regx:
3026 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3027 break;
3028 case DW_OP_fbreg:
3029 dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3030 break;
3031 case DW_OP_bregx:
3032 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3033 dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3034 break;
3035 case DW_OP_piece:
3036 dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3037 break;
3038 case DW_OP_deref_size:
3039 case DW_OP_xderef_size:
3040 dw2_asm_output_data (1, val1->v.val_int, NULL);
3041 break;
3043 case INTERNAL_DW_OP_tls_addr:
3044 #ifdef ASM_OUTPUT_DWARF_DTPREL
3045 ASM_OUTPUT_DWARF_DTPREL (asm_out_file, DWARF2_ADDR_SIZE,
3046 val1->v.val_addr);
3047 fputc ('\n', asm_out_file);
3048 #else
3049 abort ();
3050 #endif
3051 break;
3053 default:
3054 /* Other codes have no operands. */
3055 break;
3059 /* Output a sequence of location operations. */
3061 static void
3062 output_loc_sequence (dw_loc_descr_ref loc)
3064 for (; loc != NULL; loc = loc->dw_loc_next)
3066 /* Output the opcode. */
3067 dw2_asm_output_data (1, loc->dw_loc_opc,
3068 "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3070 /* Output the operand(s) (if any). */
3071 output_loc_operands (loc);
3075 /* This routine will generate the correct assembly data for a location
3076 description based on a cfi entry with a complex address. */
3078 static void
3079 output_cfa_loc (dw_cfi_ref cfi)
3081 dw_loc_descr_ref loc;
3082 unsigned long size;
3084 /* Output the size of the block. */
3085 loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3086 size = size_of_locs (loc);
3087 dw2_asm_output_data_uleb128 (size, NULL);
3089 /* Now output the operations themselves. */
3090 output_loc_sequence (loc);
3093 /* This function builds a dwarf location descriptor sequence from
3094 a dw_cfa_location. */
3096 static struct dw_loc_descr_struct *
3097 build_cfa_loc (dw_cfa_location *cfa)
3099 struct dw_loc_descr_struct *head, *tmp;
3101 if (cfa->indirect == 0)
3102 abort ();
3104 if (cfa->base_offset)
3106 if (cfa->reg <= 31)
3107 head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3108 else
3109 head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3111 else if (cfa->reg <= 31)
3112 head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3113 else
3114 head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3116 head->dw_loc_oprnd1.val_class = dw_val_class_const;
3117 tmp = new_loc_descr (DW_OP_deref, 0, 0);
3118 add_loc_descr (&head, tmp);
3119 if (cfa->offset != 0)
3121 tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3122 add_loc_descr (&head, tmp);
3125 return head;
3128 /* This function fills in aa dw_cfa_location structure from a dwarf location
3129 descriptor sequence. */
3131 static void
3132 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3134 struct dw_loc_descr_struct *ptr;
3135 cfa->offset = 0;
3136 cfa->base_offset = 0;
3137 cfa->indirect = 0;
3138 cfa->reg = -1;
3140 for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3142 enum dwarf_location_atom op = ptr->dw_loc_opc;
3144 switch (op)
3146 case DW_OP_reg0:
3147 case DW_OP_reg1:
3148 case DW_OP_reg2:
3149 case DW_OP_reg3:
3150 case DW_OP_reg4:
3151 case DW_OP_reg5:
3152 case DW_OP_reg6:
3153 case DW_OP_reg7:
3154 case DW_OP_reg8:
3155 case DW_OP_reg9:
3156 case DW_OP_reg10:
3157 case DW_OP_reg11:
3158 case DW_OP_reg12:
3159 case DW_OP_reg13:
3160 case DW_OP_reg14:
3161 case DW_OP_reg15:
3162 case DW_OP_reg16:
3163 case DW_OP_reg17:
3164 case DW_OP_reg18:
3165 case DW_OP_reg19:
3166 case DW_OP_reg20:
3167 case DW_OP_reg21:
3168 case DW_OP_reg22:
3169 case DW_OP_reg23:
3170 case DW_OP_reg24:
3171 case DW_OP_reg25:
3172 case DW_OP_reg26:
3173 case DW_OP_reg27:
3174 case DW_OP_reg28:
3175 case DW_OP_reg29:
3176 case DW_OP_reg30:
3177 case DW_OP_reg31:
3178 cfa->reg = op - DW_OP_reg0;
3179 break;
3180 case DW_OP_regx:
3181 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3182 break;
3183 case DW_OP_breg0:
3184 case DW_OP_breg1:
3185 case DW_OP_breg2:
3186 case DW_OP_breg3:
3187 case DW_OP_breg4:
3188 case DW_OP_breg5:
3189 case DW_OP_breg6:
3190 case DW_OP_breg7:
3191 case DW_OP_breg8:
3192 case DW_OP_breg9:
3193 case DW_OP_breg10:
3194 case DW_OP_breg11:
3195 case DW_OP_breg12:
3196 case DW_OP_breg13:
3197 case DW_OP_breg14:
3198 case DW_OP_breg15:
3199 case DW_OP_breg16:
3200 case DW_OP_breg17:
3201 case DW_OP_breg18:
3202 case DW_OP_breg19:
3203 case DW_OP_breg20:
3204 case DW_OP_breg21:
3205 case DW_OP_breg22:
3206 case DW_OP_breg23:
3207 case DW_OP_breg24:
3208 case DW_OP_breg25:
3209 case DW_OP_breg26:
3210 case DW_OP_breg27:
3211 case DW_OP_breg28:
3212 case DW_OP_breg29:
3213 case DW_OP_breg30:
3214 case DW_OP_breg31:
3215 cfa->reg = op - DW_OP_breg0;
3216 cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3217 break;
3218 case DW_OP_bregx:
3219 cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3220 cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3221 break;
3222 case DW_OP_deref:
3223 cfa->indirect = 1;
3224 break;
3225 case DW_OP_plus_uconst:
3226 cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3227 break;
3228 default:
3229 internal_error ("DW_LOC_OP %s not implemented\n",
3230 dwarf_stack_op_name (ptr->dw_loc_opc));
3234 #endif /* .debug_frame support */
3236 /* And now, the support for symbolic debugging information. */
3237 #ifdef DWARF2_DEBUGGING_INFO
3239 /* .debug_str support. */
3240 static int output_indirect_string (void **, void *);
3242 static void dwarf2out_init (const char *);
3243 static void dwarf2out_finish (const char *);
3244 static void dwarf2out_define (unsigned int, const char *);
3245 static void dwarf2out_undef (unsigned int, const char *);
3246 static void dwarf2out_start_source_file (unsigned, const char *);
3247 static void dwarf2out_end_source_file (unsigned);
3248 static void dwarf2out_begin_block (unsigned, unsigned);
3249 static void dwarf2out_end_block (unsigned, unsigned);
3250 static bool dwarf2out_ignore_block (tree);
3251 static void dwarf2out_global_decl (tree);
3252 static void dwarf2out_abstract_function (tree);
3253 static void dwarf2out_var_location (rtx);
3254 static void dwarf2out_begin_function (tree);
3256 /* The debug hooks structure. */
3258 const struct gcc_debug_hooks dwarf2_debug_hooks =
3260 dwarf2out_init,
3261 dwarf2out_finish,
3262 dwarf2out_define,
3263 dwarf2out_undef,
3264 dwarf2out_start_source_file,
3265 dwarf2out_end_source_file,
3266 dwarf2out_begin_block,
3267 dwarf2out_end_block,
3268 dwarf2out_ignore_block,
3269 dwarf2out_source_line,
3270 dwarf2out_begin_prologue,
3271 debug_nothing_int_charstar, /* end_prologue */
3272 dwarf2out_end_epilogue,
3273 dwarf2out_begin_function,
3274 debug_nothing_int, /* end_function */
3275 dwarf2out_decl, /* function_decl */
3276 dwarf2out_global_decl,
3277 debug_nothing_tree, /* deferred_inline_function */
3278 /* The DWARF 2 backend tries to reduce debugging bloat by not
3279 emitting the abstract description of inline functions until
3280 something tries to reference them. */
3281 dwarf2out_abstract_function, /* outlining_inline_function */
3282 debug_nothing_rtx, /* label */
3283 debug_nothing_int, /* handle_pch */
3284 dwarf2out_var_location
3286 #endif
3288 /* NOTE: In the comments in this file, many references are made to
3289 "Debugging Information Entries". This term is abbreviated as `DIE'
3290 throughout the remainder of this file. */
3292 /* An internal representation of the DWARF output is built, and then
3293 walked to generate the DWARF debugging info. The walk of the internal
3294 representation is done after the entire program has been compiled.
3295 The types below are used to describe the internal representation. */
3297 /* Various DIE's use offsets relative to the beginning of the
3298 .debug_info section to refer to each other. */
3300 typedef long int dw_offset;
3302 /* Define typedefs here to avoid circular dependencies. */
3304 typedef struct dw_attr_struct *dw_attr_ref;
3305 typedef struct dw_line_info_struct *dw_line_info_ref;
3306 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3307 typedef struct pubname_struct *pubname_ref;
3308 typedef struct dw_ranges_struct *dw_ranges_ref;
3310 /* Each entry in the line_info_table maintains the file and
3311 line number associated with the label generated for that
3312 entry. The label gives the PC value associated with
3313 the line number entry. */
3315 typedef struct dw_line_info_struct GTY(())
3317 unsigned long dw_file_num;
3318 unsigned long dw_line_num;
3320 dw_line_info_entry;
3322 /* Line information for functions in separate sections; each one gets its
3323 own sequence. */
3324 typedef struct dw_separate_line_info_struct GTY(())
3326 unsigned long dw_file_num;
3327 unsigned long dw_line_num;
3328 unsigned long function;
3330 dw_separate_line_info_entry;
3332 /* Each DIE attribute has a field specifying the attribute kind,
3333 a link to the next attribute in the chain, and an attribute value.
3334 Attributes are typically linked below the DIE they modify. */
3336 typedef struct dw_attr_struct GTY(())
3338 enum dwarf_attribute dw_attr;
3339 dw_attr_ref dw_attr_next;
3340 dw_val_node dw_attr_val;
3342 dw_attr_node;
3344 /* The Debugging Information Entry (DIE) structure */
3346 typedef struct die_struct GTY(())
3348 enum dwarf_tag die_tag;
3349 char *die_symbol;
3350 dw_attr_ref die_attr;
3351 dw_die_ref die_parent;
3352 dw_die_ref die_child;
3353 dw_die_ref die_sib;
3354 dw_die_ref die_definition; /* ref from a specification to its definition */
3355 dw_offset die_offset;
3356 unsigned long die_abbrev;
3357 int die_mark;
3358 unsigned int decl_id;
3360 die_node;
3362 /* The pubname structure */
3364 typedef struct pubname_struct GTY(())
3366 dw_die_ref die;
3367 char *name;
3369 pubname_entry;
3371 struct dw_ranges_struct GTY(())
3373 int block_num;
3376 /* The limbo die list structure. */
3377 typedef struct limbo_die_struct GTY(())
3379 dw_die_ref die;
3380 tree created_for;
3381 struct limbo_die_struct *next;
3383 limbo_die_node;
3385 /* How to start an assembler comment. */
3386 #ifndef ASM_COMMENT_START
3387 #define ASM_COMMENT_START ";#"
3388 #endif
3390 /* Define a macro which returns nonzero for a TYPE_DECL which was
3391 implicitly generated for a tagged type.
3393 Note that unlike the gcc front end (which generates a NULL named
3394 TYPE_DECL node for each complete tagged type, each array type, and
3395 each function type node created) the g++ front end generates a
3396 _named_ TYPE_DECL node for each tagged type node created.
3397 These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3398 generate a DW_TAG_typedef DIE for them. */
3400 #define TYPE_DECL_IS_STUB(decl) \
3401 (DECL_NAME (decl) == NULL_TREE \
3402 || (DECL_ARTIFICIAL (decl) \
3403 && is_tagged_type (TREE_TYPE (decl)) \
3404 && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl))) \
3405 /* This is necessary for stub decls that \
3406 appear in nested inline functions. */ \
3407 || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3408 && (decl_ultimate_origin (decl) \
3409 == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3411 /* Information concerning the compilation unit's programming
3412 language, and compiler version. */
3414 /* Fixed size portion of the DWARF compilation unit header. */
3415 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3416 (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3418 /* Fixed size portion of public names info. */
3419 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3421 /* Fixed size portion of the address range info. */
3422 #define DWARF_ARANGES_HEADER_SIZE \
3423 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3424 DWARF2_ADDR_SIZE * 2) \
3425 - DWARF_INITIAL_LENGTH_SIZE)
3427 /* Size of padding portion in the address range info. It must be
3428 aligned to twice the pointer size. */
3429 #define DWARF_ARANGES_PAD_SIZE \
3430 (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3431 DWARF2_ADDR_SIZE * 2) \
3432 - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3434 /* Use assembler line directives if available. */
3435 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3436 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3437 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3438 #else
3439 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3440 #endif
3441 #endif
3443 /* Minimum line offset in a special line info. opcode.
3444 This value was chosen to give a reasonable range of values. */
3445 #define DWARF_LINE_BASE -10
3447 /* First special line opcode - leave room for the standard opcodes. */
3448 #define DWARF_LINE_OPCODE_BASE 10
3450 /* Range of line offsets in a special line info. opcode. */
3451 #define DWARF_LINE_RANGE (254-DWARF_LINE_OPCODE_BASE+1)
3453 /* Flag that indicates the initial value of the is_stmt_start flag.
3454 In the present implementation, we do not mark any lines as
3455 the beginning of a source statement, because that information
3456 is not made available by the GCC front-end. */
3457 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3459 #ifdef DWARF2_DEBUGGING_INFO
3460 /* This location is used by calc_die_sizes() to keep track
3461 the offset of each DIE within the .debug_info section. */
3462 static unsigned long next_die_offset;
3463 #endif
3465 /* Record the root of the DIE's built for the current compilation unit. */
3466 static GTY(()) dw_die_ref comp_unit_die;
3468 /* A list of DIEs with a NULL parent waiting to be relocated. */
3469 static GTY(()) limbo_die_node *limbo_die_list;
3471 /* Filenames referenced by this compilation unit. */
3472 static GTY(()) varray_type file_table;
3473 static GTY(()) varray_type file_table_emitted;
3474 static GTY(()) size_t file_table_last_lookup_index;
3476 /* A hash table of references to DIE's that describe declarations.
3477 The key is a DECL_UID() which is a unique number identifying each decl. */
3478 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3480 /* Node of the variable location list. */
3481 struct var_loc_node GTY ((chain_next ("%h.next")))
3483 rtx GTY (()) var_loc_note;
3484 const char * GTY (()) label;
3485 struct var_loc_node * GTY (()) next;
3488 /* Variable location list. */
3489 struct var_loc_list_def GTY (())
3491 struct var_loc_node * GTY (()) first;
3493 /* Do not mark the last element of the chained list because
3494 it is marked through the chain. */
3495 struct var_loc_node * GTY ((skip ("%h"))) last;
3497 /* DECL_UID of the variable decl. */
3498 unsigned int decl_id;
3500 typedef struct var_loc_list_def var_loc_list;
3503 /* Table of decl location linked lists. */
3504 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3506 /* A pointer to the base of a list of references to DIE's that
3507 are uniquely identified by their tag, presence/absence of
3508 children DIE's, and list of attribute/value pairs. */
3509 static GTY((length ("abbrev_die_table_allocated")))
3510 dw_die_ref *abbrev_die_table;
3512 /* Number of elements currently allocated for abbrev_die_table. */
3513 static GTY(()) unsigned abbrev_die_table_allocated;
3515 /* Number of elements in type_die_table currently in use. */
3516 static GTY(()) unsigned abbrev_die_table_in_use;
3518 /* Size (in elements) of increments by which we may expand the
3519 abbrev_die_table. */
3520 #define ABBREV_DIE_TABLE_INCREMENT 256
3522 /* A pointer to the base of a table that contains line information
3523 for each source code line in .text in the compilation unit. */
3524 static GTY((length ("line_info_table_allocated")))
3525 dw_line_info_ref line_info_table;
3527 /* Number of elements currently allocated for line_info_table. */
3528 static GTY(()) unsigned line_info_table_allocated;
3530 /* Number of elements in line_info_table currently in use. */
3531 static GTY(()) unsigned line_info_table_in_use;
3533 /* A pointer to the base of a table that contains line information
3534 for each source code line outside of .text in the compilation unit. */
3535 static GTY ((length ("separate_line_info_table_allocated")))
3536 dw_separate_line_info_ref separate_line_info_table;
3538 /* Number of elements currently allocated for separate_line_info_table. */
3539 static GTY(()) unsigned separate_line_info_table_allocated;
3541 /* Number of elements in separate_line_info_table currently in use. */
3542 static GTY(()) unsigned separate_line_info_table_in_use;
3544 /* Size (in elements) of increments by which we may expand the
3545 line_info_table. */
3546 #define LINE_INFO_TABLE_INCREMENT 1024
3548 /* A pointer to the base of a table that contains a list of publicly
3549 accessible names. */
3550 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3552 /* Number of elements currently allocated for pubname_table. */
3553 static GTY(()) unsigned pubname_table_allocated;
3555 /* Number of elements in pubname_table currently in use. */
3556 static GTY(()) unsigned pubname_table_in_use;
3558 /* Size (in elements) of increments by which we may expand the
3559 pubname_table. */
3560 #define PUBNAME_TABLE_INCREMENT 64
3562 /* Array of dies for which we should generate .debug_arange info. */
3563 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3565 /* Number of elements currently allocated for arange_table. */
3566 static GTY(()) unsigned arange_table_allocated;
3568 /* Number of elements in arange_table currently in use. */
3569 static GTY(()) unsigned arange_table_in_use;
3571 /* Size (in elements) of increments by which we may expand the
3572 arange_table. */
3573 #define ARANGE_TABLE_INCREMENT 64
3575 /* Array of dies for which we should generate .debug_ranges info. */
3576 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3578 /* Number of elements currently allocated for ranges_table. */
3579 static GTY(()) unsigned ranges_table_allocated;
3581 /* Number of elements in ranges_table currently in use. */
3582 static GTY(()) unsigned ranges_table_in_use;
3584 /* Size (in elements) of increments by which we may expand the
3585 ranges_table. */
3586 #define RANGES_TABLE_INCREMENT 64
3588 /* Whether we have location lists that need outputting */
3589 static GTY(()) unsigned have_location_lists;
3591 /* Unique label counter. */
3592 static GTY(()) unsigned int loclabel_num;
3594 #ifdef DWARF2_DEBUGGING_INFO
3595 /* Record whether the function being analyzed contains inlined functions. */
3596 static int current_function_has_inlines;
3597 #endif
3598 #if 0 && defined (MIPS_DEBUGGING_INFO)
3599 static int comp_unit_has_inlines;
3600 #endif
3602 /* Number of file tables emitted in maybe_emit_file(). */
3603 static GTY(()) int emitcount = 0;
3605 /* Number of internal labels generated by gen_internal_sym(). */
3606 static GTY(()) int label_num;
3608 #ifdef DWARF2_DEBUGGING_INFO
3610 /* Forward declarations for functions defined in this file. */
3612 static int is_pseudo_reg (rtx);
3613 static tree type_main_variant (tree);
3614 static int is_tagged_type (tree);
3615 static const char *dwarf_tag_name (unsigned);
3616 static const char *dwarf_attr_name (unsigned);
3617 static const char *dwarf_form_name (unsigned);
3618 #if 0
3619 static const char *dwarf_type_encoding_name (unsigned);
3620 #endif
3621 static tree decl_ultimate_origin (tree);
3622 static tree block_ultimate_origin (tree);
3623 static tree decl_class_context (tree);
3624 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3625 static inline enum dw_val_class AT_class (dw_attr_ref);
3626 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3627 static inline unsigned AT_flag (dw_attr_ref);
3628 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3629 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3630 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3631 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3632 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
3633 unsigned long);
3634 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3635 unsigned int, unsigned char *);
3636 static hashval_t debug_str_do_hash (const void *);
3637 static int debug_str_eq (const void *, const void *);
3638 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3639 static inline const char *AT_string (dw_attr_ref);
3640 static int AT_string_form (dw_attr_ref);
3641 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3642 static void add_AT_specification (dw_die_ref, dw_die_ref);
3643 static inline dw_die_ref AT_ref (dw_attr_ref);
3644 static inline int AT_ref_external (dw_attr_ref);
3645 static inline void set_AT_ref_external (dw_attr_ref, int);
3646 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3647 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3648 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3649 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3650 dw_loc_list_ref);
3651 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3652 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3653 static inline rtx AT_addr (dw_attr_ref);
3654 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3655 static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
3656 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3657 unsigned HOST_WIDE_INT);
3658 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3659 unsigned long);
3660 static inline const char *AT_lbl (dw_attr_ref);
3661 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3662 static const char *get_AT_low_pc (dw_die_ref);
3663 static const char *get_AT_hi_pc (dw_die_ref);
3664 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3665 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
3666 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
3667 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
3668 static bool is_c_family (void);
3669 static bool is_cxx (void);
3670 static bool is_java (void);
3671 static bool is_fortran (void);
3672 static bool is_ada (void);
3673 static void remove_AT (dw_die_ref, enum dwarf_attribute);
3674 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
3675 static inline void free_die (dw_die_ref);
3676 static void remove_children (dw_die_ref);
3677 static void add_child_die (dw_die_ref, dw_die_ref);
3678 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
3679 static dw_die_ref lookup_type_die (tree);
3680 static void equate_type_number_to_die (tree, dw_die_ref);
3681 static hashval_t decl_die_table_hash (const void *);
3682 static int decl_die_table_eq (const void *, const void *);
3683 static dw_die_ref lookup_decl_die (tree);
3684 static hashval_t decl_loc_table_hash (const void *);
3685 static int decl_loc_table_eq (const void *, const void *);
3686 static var_loc_list *lookup_decl_loc (tree);
3687 static void equate_decl_number_to_die (tree, dw_die_ref);
3688 static void add_var_loc_to_decl (tree, struct var_loc_node *);
3689 static void print_spaces (FILE *);
3690 static void print_die (dw_die_ref, FILE *);
3691 static void print_dwarf_line_table (FILE *);
3692 static void reverse_die_lists (dw_die_ref);
3693 static void reverse_all_dies (dw_die_ref);
3694 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
3695 static dw_die_ref pop_compile_unit (dw_die_ref);
3696 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
3697 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
3698 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
3699 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
3700 static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
3701 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
3702 static int same_die_p (dw_die_ref, dw_die_ref, int *);
3703 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
3704 static void compute_section_prefix (dw_die_ref);
3705 static int is_type_die (dw_die_ref);
3706 static int is_comdat_die (dw_die_ref);
3707 static int is_symbol_die (dw_die_ref);
3708 static void assign_symbol_names (dw_die_ref);
3709 static void break_out_includes (dw_die_ref);
3710 static hashval_t htab_cu_hash (const void *);
3711 static int htab_cu_eq (const void *, const void *);
3712 static void htab_cu_del (void *);
3713 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
3714 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
3715 static void add_sibling_attributes (dw_die_ref);
3716 static void build_abbrev_table (dw_die_ref);
3717 static void output_location_lists (dw_die_ref);
3718 static int constant_size (long unsigned);
3719 static unsigned long size_of_die (dw_die_ref);
3720 static void calc_die_sizes (dw_die_ref);
3721 static void mark_dies (dw_die_ref);
3722 static void unmark_dies (dw_die_ref);
3723 static void unmark_all_dies (dw_die_ref);
3724 static unsigned long size_of_pubnames (void);
3725 static unsigned long size_of_aranges (void);
3726 static enum dwarf_form value_format (dw_attr_ref);
3727 static void output_value_format (dw_attr_ref);
3728 static void output_abbrev_section (void);
3729 static void output_die_symbol (dw_die_ref);
3730 static void output_die (dw_die_ref);
3731 static void output_compilation_unit_header (void);
3732 static void output_comp_unit (dw_die_ref, int);
3733 static const char *dwarf2_name (tree, int);
3734 static void add_pubname (tree, dw_die_ref);
3735 static void output_pubnames (void);
3736 static void add_arange (tree, dw_die_ref);
3737 static void output_aranges (void);
3738 static unsigned int add_ranges (tree);
3739 static void output_ranges (void);
3740 static void output_line_info (void);
3741 static void output_file_names (void);
3742 static dw_die_ref base_type_die (tree);
3743 static tree root_type (tree);
3744 static int is_base_type (tree);
3745 static bool is_subrange_type (tree);
3746 static dw_die_ref subrange_type_die (tree, dw_die_ref);
3747 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
3748 static int type_is_enum (tree);
3749 static unsigned int dbx_reg_number (rtx);
3750 static dw_loc_descr_ref reg_loc_descriptor (rtx);
3751 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
3752 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
3753 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
3754 static dw_loc_descr_ref based_loc_descr (unsigned, HOST_WIDE_INT, bool);
3755 static int is_based_loc (rtx);
3756 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode, bool);
3757 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
3758 static dw_loc_descr_ref loc_descriptor (rtx, bool);
3759 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
3760 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
3761 static tree field_type (tree);
3762 static unsigned int simple_type_align_in_bits (tree);
3763 static unsigned int simple_decl_align_in_bits (tree);
3764 static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
3765 static HOST_WIDE_INT field_byte_offset (tree);
3766 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
3767 dw_loc_descr_ref);
3768 static void add_data_member_location_attribute (dw_die_ref, tree);
3769 static void add_const_value_attribute (dw_die_ref, rtx);
3770 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
3771 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
3772 static void insert_float (rtx, unsigned char *);
3773 static rtx rtl_for_decl_location (tree);
3774 static void add_location_or_const_value_attribute (dw_die_ref, tree,
3775 enum dwarf_attribute);
3776 static void tree_add_const_value_attribute (dw_die_ref, tree);
3777 static void add_name_attribute (dw_die_ref, const char *);
3778 static void add_comp_dir_attribute (dw_die_ref);
3779 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
3780 static void add_subscript_info (dw_die_ref, tree);
3781 static void add_byte_size_attribute (dw_die_ref, tree);
3782 static void add_bit_offset_attribute (dw_die_ref, tree);
3783 static void add_bit_size_attribute (dw_die_ref, tree);
3784 static void add_prototyped_attribute (dw_die_ref, tree);
3785 static void add_abstract_origin_attribute (dw_die_ref, tree);
3786 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
3787 static void add_src_coords_attributes (dw_die_ref, tree);
3788 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
3789 static void push_decl_scope (tree);
3790 static void pop_decl_scope (void);
3791 static dw_die_ref scope_die_for (tree, dw_die_ref);
3792 static inline int local_scope_p (dw_die_ref);
3793 static inline int class_or_namespace_scope_p (dw_die_ref);
3794 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
3795 static const char *type_tag (tree);
3796 static tree member_declared_type (tree);
3797 #if 0
3798 static const char *decl_start_label (tree);
3799 #endif
3800 static void gen_array_type_die (tree, dw_die_ref);
3801 static void gen_set_type_die (tree, dw_die_ref);
3802 #if 0
3803 static void gen_entry_point_die (tree, dw_die_ref);
3804 #endif
3805 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
3806 static void gen_inlined_structure_type_die (tree, dw_die_ref);
3807 static void gen_inlined_union_type_die (tree, dw_die_ref);
3808 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
3809 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
3810 static void gen_unspecified_parameters_die (tree, dw_die_ref);
3811 static void gen_formal_types_die (tree, dw_die_ref);
3812 static void gen_subprogram_die (tree, dw_die_ref);
3813 static void gen_variable_die (tree, dw_die_ref);
3814 static void gen_label_die (tree, dw_die_ref);
3815 static void gen_lexical_block_die (tree, dw_die_ref, int);
3816 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
3817 static void gen_field_die (tree, dw_die_ref);
3818 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
3819 static dw_die_ref gen_compile_unit_die (const char *);
3820 static void gen_string_type_die (tree, dw_die_ref);
3821 static void gen_inheritance_die (tree, tree, dw_die_ref);
3822 static void gen_member_die (tree, dw_die_ref);
3823 static void gen_struct_or_union_type_die (tree, dw_die_ref);
3824 static void gen_subroutine_type_die (tree, dw_die_ref);
3825 static void gen_typedef_die (tree, dw_die_ref);
3826 static void gen_type_die (tree, dw_die_ref);
3827 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
3828 static void gen_block_die (tree, dw_die_ref, int);
3829 static void decls_for_scope (tree, dw_die_ref, int);
3830 static int is_redundant_typedef (tree);
3831 static void gen_namespace_die (tree);
3832 static void gen_decl_die (tree, dw_die_ref);
3833 static dw_die_ref force_namespace_die (tree);
3834 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
3835 static void declare_in_namespace (tree, dw_die_ref);
3836 static unsigned lookup_filename (const char *);
3837 static void init_file_table (void);
3838 static void retry_incomplete_types (void);
3839 static void gen_type_die_for_member (tree, tree, dw_die_ref);
3840 static void splice_child_die (dw_die_ref, dw_die_ref);
3841 static int file_info_cmp (const void *, const void *);
3842 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
3843 const char *, const char *, unsigned);
3844 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
3845 const char *, const char *,
3846 const char *);
3847 static void output_loc_list (dw_loc_list_ref);
3848 static char *gen_internal_sym (const char *);
3850 static void prune_unmark_dies (dw_die_ref);
3851 static void prune_unused_types_mark (dw_die_ref, int);
3852 static void prune_unused_types_walk (dw_die_ref);
3853 static void prune_unused_types_walk_attribs (dw_die_ref);
3854 static void prune_unused_types_prune (dw_die_ref);
3855 static void prune_unused_types (void);
3856 static int maybe_emit_file (int);
3858 /* Section names used to hold DWARF debugging information. */
3859 #ifndef DEBUG_INFO_SECTION
3860 #define DEBUG_INFO_SECTION ".debug_info"
3861 #endif
3862 #ifndef DEBUG_ABBREV_SECTION
3863 #define DEBUG_ABBREV_SECTION ".debug_abbrev"
3864 #endif
3865 #ifndef DEBUG_ARANGES_SECTION
3866 #define DEBUG_ARANGES_SECTION ".debug_aranges"
3867 #endif
3868 #ifndef DEBUG_MACINFO_SECTION
3869 #define DEBUG_MACINFO_SECTION ".debug_macinfo"
3870 #endif
3871 #ifndef DEBUG_LINE_SECTION
3872 #define DEBUG_LINE_SECTION ".debug_line"
3873 #endif
3874 #ifndef DEBUG_LOC_SECTION
3875 #define DEBUG_LOC_SECTION ".debug_loc"
3876 #endif
3877 #ifndef DEBUG_PUBNAMES_SECTION
3878 #define DEBUG_PUBNAMES_SECTION ".debug_pubnames"
3879 #endif
3880 #ifndef DEBUG_STR_SECTION
3881 #define DEBUG_STR_SECTION ".debug_str"
3882 #endif
3883 #ifndef DEBUG_RANGES_SECTION
3884 #define DEBUG_RANGES_SECTION ".debug_ranges"
3885 #endif
3887 /* Standard ELF section names for compiled code and data. */
3888 #ifndef TEXT_SECTION_NAME
3889 #define TEXT_SECTION_NAME ".text"
3890 #endif
3892 /* Section flags for .debug_str section. */
3893 #define DEBUG_STR_SECTION_FLAGS \
3894 (HAVE_GAS_SHF_MERGE && flag_merge_constants \
3895 ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1 \
3896 : SECTION_DEBUG)
3898 /* Labels we insert at beginning sections we can reference instead of
3899 the section names themselves. */
3901 #ifndef TEXT_SECTION_LABEL
3902 #define TEXT_SECTION_LABEL "Ltext"
3903 #endif
3904 #ifndef DEBUG_LINE_SECTION_LABEL
3905 #define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
3906 #endif
3907 #ifndef DEBUG_INFO_SECTION_LABEL
3908 #define DEBUG_INFO_SECTION_LABEL "Ldebug_info"
3909 #endif
3910 #ifndef DEBUG_ABBREV_SECTION_LABEL
3911 #define DEBUG_ABBREV_SECTION_LABEL "Ldebug_abbrev"
3912 #endif
3913 #ifndef DEBUG_LOC_SECTION_LABEL
3914 #define DEBUG_LOC_SECTION_LABEL "Ldebug_loc"
3915 #endif
3916 #ifndef DEBUG_RANGES_SECTION_LABEL
3917 #define DEBUG_RANGES_SECTION_LABEL "Ldebug_ranges"
3918 #endif
3919 #ifndef DEBUG_MACINFO_SECTION_LABEL
3920 #define DEBUG_MACINFO_SECTION_LABEL "Ldebug_macinfo"
3921 #endif
3923 /* Definitions of defaults for formats and names of various special
3924 (artificial) labels which may be generated within this file (when the -g
3925 options is used and DWARF2_DEBUGGING_INFO is in effect.
3926 If necessary, these may be overridden from within the tm.h file, but
3927 typically, overriding these defaults is unnecessary. */
3929 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
3930 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3931 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3932 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3933 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3934 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3935 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
3936 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
3938 #ifndef TEXT_END_LABEL
3939 #define TEXT_END_LABEL "Letext"
3940 #endif
3941 #ifndef BLOCK_BEGIN_LABEL
3942 #define BLOCK_BEGIN_LABEL "LBB"
3943 #endif
3944 #ifndef BLOCK_END_LABEL
3945 #define BLOCK_END_LABEL "LBE"
3946 #endif
3947 #ifndef LINE_CODE_LABEL
3948 #define LINE_CODE_LABEL "LM"
3949 #endif
3950 #ifndef SEPARATE_LINE_CODE_LABEL
3951 #define SEPARATE_LINE_CODE_LABEL "LSM"
3952 #endif
3954 /* We allow a language front-end to designate a function that is to be
3955 called to "demangle" any name before it it put into a DIE. */
3957 static const char *(*demangle_name_func) (const char *);
3959 void
3960 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
3962 demangle_name_func = func;
3965 /* Test if rtl node points to a pseudo register. */
3967 static inline int
3968 is_pseudo_reg (rtx rtl)
3970 return ((GET_CODE (rtl) == REG && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
3971 || (GET_CODE (rtl) == SUBREG
3972 && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
3975 /* Return a reference to a type, with its const and volatile qualifiers
3976 removed. */
3978 static inline tree
3979 type_main_variant (tree type)
3981 type = TYPE_MAIN_VARIANT (type);
3983 /* ??? There really should be only one main variant among any group of
3984 variants of a given type (and all of the MAIN_VARIANT values for all
3985 members of the group should point to that one type) but sometimes the C
3986 front-end messes this up for array types, so we work around that bug
3987 here. */
3988 if (TREE_CODE (type) == ARRAY_TYPE)
3989 while (type != TYPE_MAIN_VARIANT (type))
3990 type = TYPE_MAIN_VARIANT (type);
3992 return type;
3995 /* Return nonzero if the given type node represents a tagged type. */
3997 static inline int
3998 is_tagged_type (tree type)
4000 enum tree_code code = TREE_CODE (type);
4002 return (code == RECORD_TYPE || code == UNION_TYPE
4003 || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4006 /* Convert a DIE tag into its string name. */
4008 static const char *
4009 dwarf_tag_name (unsigned int tag)
4011 switch (tag)
4013 case DW_TAG_padding:
4014 return "DW_TAG_padding";
4015 case DW_TAG_array_type:
4016 return "DW_TAG_array_type";
4017 case DW_TAG_class_type:
4018 return "DW_TAG_class_type";
4019 case DW_TAG_entry_point:
4020 return "DW_TAG_entry_point";
4021 case DW_TAG_enumeration_type:
4022 return "DW_TAG_enumeration_type";
4023 case DW_TAG_formal_parameter:
4024 return "DW_TAG_formal_parameter";
4025 case DW_TAG_imported_declaration:
4026 return "DW_TAG_imported_declaration";
4027 case DW_TAG_label:
4028 return "DW_TAG_label";
4029 case DW_TAG_lexical_block:
4030 return "DW_TAG_lexical_block";
4031 case DW_TAG_member:
4032 return "DW_TAG_member";
4033 case DW_TAG_pointer_type:
4034 return "DW_TAG_pointer_type";
4035 case DW_TAG_reference_type:
4036 return "DW_TAG_reference_type";
4037 case DW_TAG_compile_unit:
4038 return "DW_TAG_compile_unit";
4039 case DW_TAG_string_type:
4040 return "DW_TAG_string_type";
4041 case DW_TAG_structure_type:
4042 return "DW_TAG_structure_type";
4043 case DW_TAG_subroutine_type:
4044 return "DW_TAG_subroutine_type";
4045 case DW_TAG_typedef:
4046 return "DW_TAG_typedef";
4047 case DW_TAG_union_type:
4048 return "DW_TAG_union_type";
4049 case DW_TAG_unspecified_parameters:
4050 return "DW_TAG_unspecified_parameters";
4051 case DW_TAG_variant:
4052 return "DW_TAG_variant";
4053 case DW_TAG_common_block:
4054 return "DW_TAG_common_block";
4055 case DW_TAG_common_inclusion:
4056 return "DW_TAG_common_inclusion";
4057 case DW_TAG_inheritance:
4058 return "DW_TAG_inheritance";
4059 case DW_TAG_inlined_subroutine:
4060 return "DW_TAG_inlined_subroutine";
4061 case DW_TAG_module:
4062 return "DW_TAG_module";
4063 case DW_TAG_ptr_to_member_type:
4064 return "DW_TAG_ptr_to_member_type";
4065 case DW_TAG_set_type:
4066 return "DW_TAG_set_type";
4067 case DW_TAG_subrange_type:
4068 return "DW_TAG_subrange_type";
4069 case DW_TAG_with_stmt:
4070 return "DW_TAG_with_stmt";
4071 case DW_TAG_access_declaration:
4072 return "DW_TAG_access_declaration";
4073 case DW_TAG_base_type:
4074 return "DW_TAG_base_type";
4075 case DW_TAG_catch_block:
4076 return "DW_TAG_catch_block";
4077 case DW_TAG_const_type:
4078 return "DW_TAG_const_type";
4079 case DW_TAG_constant:
4080 return "DW_TAG_constant";
4081 case DW_TAG_enumerator:
4082 return "DW_TAG_enumerator";
4083 case DW_TAG_file_type:
4084 return "DW_TAG_file_type";
4085 case DW_TAG_friend:
4086 return "DW_TAG_friend";
4087 case DW_TAG_namelist:
4088 return "DW_TAG_namelist";
4089 case DW_TAG_namelist_item:
4090 return "DW_TAG_namelist_item";
4091 case DW_TAG_namespace:
4092 return "DW_TAG_namespace";
4093 case DW_TAG_packed_type:
4094 return "DW_TAG_packed_type";
4095 case DW_TAG_subprogram:
4096 return "DW_TAG_subprogram";
4097 case DW_TAG_template_type_param:
4098 return "DW_TAG_template_type_param";
4099 case DW_TAG_template_value_param:
4100 return "DW_TAG_template_value_param";
4101 case DW_TAG_thrown_type:
4102 return "DW_TAG_thrown_type";
4103 case DW_TAG_try_block:
4104 return "DW_TAG_try_block";
4105 case DW_TAG_variant_part:
4106 return "DW_TAG_variant_part";
4107 case DW_TAG_variable:
4108 return "DW_TAG_variable";
4109 case DW_TAG_volatile_type:
4110 return "DW_TAG_volatile_type";
4111 case DW_TAG_MIPS_loop:
4112 return "DW_TAG_MIPS_loop";
4113 case DW_TAG_format_label:
4114 return "DW_TAG_format_label";
4115 case DW_TAG_function_template:
4116 return "DW_TAG_function_template";
4117 case DW_TAG_class_template:
4118 return "DW_TAG_class_template";
4119 case DW_TAG_GNU_BINCL:
4120 return "DW_TAG_GNU_BINCL";
4121 case DW_TAG_GNU_EINCL:
4122 return "DW_TAG_GNU_EINCL";
4123 default:
4124 return "DW_TAG_<unknown>";
4128 /* Convert a DWARF attribute code into its string name. */
4130 static const char *
4131 dwarf_attr_name (unsigned int attr)
4133 switch (attr)
4135 case DW_AT_sibling:
4136 return "DW_AT_sibling";
4137 case DW_AT_location:
4138 return "DW_AT_location";
4139 case DW_AT_name:
4140 return "DW_AT_name";
4141 case DW_AT_ordering:
4142 return "DW_AT_ordering";
4143 case DW_AT_subscr_data:
4144 return "DW_AT_subscr_data";
4145 case DW_AT_byte_size:
4146 return "DW_AT_byte_size";
4147 case DW_AT_bit_offset:
4148 return "DW_AT_bit_offset";
4149 case DW_AT_bit_size:
4150 return "DW_AT_bit_size";
4151 case DW_AT_element_list:
4152 return "DW_AT_element_list";
4153 case DW_AT_stmt_list:
4154 return "DW_AT_stmt_list";
4155 case DW_AT_low_pc:
4156 return "DW_AT_low_pc";
4157 case DW_AT_high_pc:
4158 return "DW_AT_high_pc";
4159 case DW_AT_language:
4160 return "DW_AT_language";
4161 case DW_AT_member:
4162 return "DW_AT_member";
4163 case DW_AT_discr:
4164 return "DW_AT_discr";
4165 case DW_AT_discr_value:
4166 return "DW_AT_discr_value";
4167 case DW_AT_visibility:
4168 return "DW_AT_visibility";
4169 case DW_AT_import:
4170 return "DW_AT_import";
4171 case DW_AT_string_length:
4172 return "DW_AT_string_length";
4173 case DW_AT_common_reference:
4174 return "DW_AT_common_reference";
4175 case DW_AT_comp_dir:
4176 return "DW_AT_comp_dir";
4177 case DW_AT_const_value:
4178 return "DW_AT_const_value";
4179 case DW_AT_containing_type:
4180 return "DW_AT_containing_type";
4181 case DW_AT_default_value:
4182 return "DW_AT_default_value";
4183 case DW_AT_inline:
4184 return "DW_AT_inline";
4185 case DW_AT_is_optional:
4186 return "DW_AT_is_optional";
4187 case DW_AT_lower_bound:
4188 return "DW_AT_lower_bound";
4189 case DW_AT_producer:
4190 return "DW_AT_producer";
4191 case DW_AT_prototyped:
4192 return "DW_AT_prototyped";
4193 case DW_AT_return_addr:
4194 return "DW_AT_return_addr";
4195 case DW_AT_start_scope:
4196 return "DW_AT_start_scope";
4197 case DW_AT_stride_size:
4198 return "DW_AT_stride_size";
4199 case DW_AT_upper_bound:
4200 return "DW_AT_upper_bound";
4201 case DW_AT_abstract_origin:
4202 return "DW_AT_abstract_origin";
4203 case DW_AT_accessibility:
4204 return "DW_AT_accessibility";
4205 case DW_AT_address_class:
4206 return "DW_AT_address_class";
4207 case DW_AT_artificial:
4208 return "DW_AT_artificial";
4209 case DW_AT_base_types:
4210 return "DW_AT_base_types";
4211 case DW_AT_calling_convention:
4212 return "DW_AT_calling_convention";
4213 case DW_AT_count:
4214 return "DW_AT_count";
4215 case DW_AT_data_member_location:
4216 return "DW_AT_data_member_location";
4217 case DW_AT_decl_column:
4218 return "DW_AT_decl_column";
4219 case DW_AT_decl_file:
4220 return "DW_AT_decl_file";
4221 case DW_AT_decl_line:
4222 return "DW_AT_decl_line";
4223 case DW_AT_declaration:
4224 return "DW_AT_declaration";
4225 case DW_AT_discr_list:
4226 return "DW_AT_discr_list";
4227 case DW_AT_encoding:
4228 return "DW_AT_encoding";
4229 case DW_AT_external:
4230 return "DW_AT_external";
4231 case DW_AT_frame_base:
4232 return "DW_AT_frame_base";
4233 case DW_AT_friend:
4234 return "DW_AT_friend";
4235 case DW_AT_identifier_case:
4236 return "DW_AT_identifier_case";
4237 case DW_AT_macro_info:
4238 return "DW_AT_macro_info";
4239 case DW_AT_namelist_items:
4240 return "DW_AT_namelist_items";
4241 case DW_AT_priority:
4242 return "DW_AT_priority";
4243 case DW_AT_segment:
4244 return "DW_AT_segment";
4245 case DW_AT_specification:
4246 return "DW_AT_specification";
4247 case DW_AT_static_link:
4248 return "DW_AT_static_link";
4249 case DW_AT_type:
4250 return "DW_AT_type";
4251 case DW_AT_use_location:
4252 return "DW_AT_use_location";
4253 case DW_AT_variable_parameter:
4254 return "DW_AT_variable_parameter";
4255 case DW_AT_virtuality:
4256 return "DW_AT_virtuality";
4257 case DW_AT_vtable_elem_location:
4258 return "DW_AT_vtable_elem_location";
4260 case DW_AT_allocated:
4261 return "DW_AT_allocated";
4262 case DW_AT_associated:
4263 return "DW_AT_associated";
4264 case DW_AT_data_location:
4265 return "DW_AT_data_location";
4266 case DW_AT_stride:
4267 return "DW_AT_stride";
4268 case DW_AT_entry_pc:
4269 return "DW_AT_entry_pc";
4270 case DW_AT_use_UTF8:
4271 return "DW_AT_use_UTF8";
4272 case DW_AT_extension:
4273 return "DW_AT_extension";
4274 case DW_AT_ranges:
4275 return "DW_AT_ranges";
4276 case DW_AT_trampoline:
4277 return "DW_AT_trampoline";
4278 case DW_AT_call_column:
4279 return "DW_AT_call_column";
4280 case DW_AT_call_file:
4281 return "DW_AT_call_file";
4282 case DW_AT_call_line:
4283 return "DW_AT_call_line";
4285 case DW_AT_MIPS_fde:
4286 return "DW_AT_MIPS_fde";
4287 case DW_AT_MIPS_loop_begin:
4288 return "DW_AT_MIPS_loop_begin";
4289 case DW_AT_MIPS_tail_loop_begin:
4290 return "DW_AT_MIPS_tail_loop_begin";
4291 case DW_AT_MIPS_epilog_begin:
4292 return "DW_AT_MIPS_epilog_begin";
4293 case DW_AT_MIPS_loop_unroll_factor:
4294 return "DW_AT_MIPS_loop_unroll_factor";
4295 case DW_AT_MIPS_software_pipeline_depth:
4296 return "DW_AT_MIPS_software_pipeline_depth";
4297 case DW_AT_MIPS_linkage_name:
4298 return "DW_AT_MIPS_linkage_name";
4299 case DW_AT_MIPS_stride:
4300 return "DW_AT_MIPS_stride";
4301 case DW_AT_MIPS_abstract_name:
4302 return "DW_AT_MIPS_abstract_name";
4303 case DW_AT_MIPS_clone_origin:
4304 return "DW_AT_MIPS_clone_origin";
4305 case DW_AT_MIPS_has_inlines:
4306 return "DW_AT_MIPS_has_inlines";
4308 case DW_AT_sf_names:
4309 return "DW_AT_sf_names";
4310 case DW_AT_src_info:
4311 return "DW_AT_src_info";
4312 case DW_AT_mac_info:
4313 return "DW_AT_mac_info";
4314 case DW_AT_src_coords:
4315 return "DW_AT_src_coords";
4316 case DW_AT_body_begin:
4317 return "DW_AT_body_begin";
4318 case DW_AT_body_end:
4319 return "DW_AT_body_end";
4320 case DW_AT_GNU_vector:
4321 return "DW_AT_GNU_vector";
4323 case DW_AT_VMS_rtnbeg_pd_address:
4324 return "DW_AT_VMS_rtnbeg_pd_address";
4326 default:
4327 return "DW_AT_<unknown>";
4331 /* Convert a DWARF value form code into its string name. */
4333 static const char *
4334 dwarf_form_name (unsigned int form)
4336 switch (form)
4338 case DW_FORM_addr:
4339 return "DW_FORM_addr";
4340 case DW_FORM_block2:
4341 return "DW_FORM_block2";
4342 case DW_FORM_block4:
4343 return "DW_FORM_block4";
4344 case DW_FORM_data2:
4345 return "DW_FORM_data2";
4346 case DW_FORM_data4:
4347 return "DW_FORM_data4";
4348 case DW_FORM_data8:
4349 return "DW_FORM_data8";
4350 case DW_FORM_string:
4351 return "DW_FORM_string";
4352 case DW_FORM_block:
4353 return "DW_FORM_block";
4354 case DW_FORM_block1:
4355 return "DW_FORM_block1";
4356 case DW_FORM_data1:
4357 return "DW_FORM_data1";
4358 case DW_FORM_flag:
4359 return "DW_FORM_flag";
4360 case DW_FORM_sdata:
4361 return "DW_FORM_sdata";
4362 case DW_FORM_strp:
4363 return "DW_FORM_strp";
4364 case DW_FORM_udata:
4365 return "DW_FORM_udata";
4366 case DW_FORM_ref_addr:
4367 return "DW_FORM_ref_addr";
4368 case DW_FORM_ref1:
4369 return "DW_FORM_ref1";
4370 case DW_FORM_ref2:
4371 return "DW_FORM_ref2";
4372 case DW_FORM_ref4:
4373 return "DW_FORM_ref4";
4374 case DW_FORM_ref8:
4375 return "DW_FORM_ref8";
4376 case DW_FORM_ref_udata:
4377 return "DW_FORM_ref_udata";
4378 case DW_FORM_indirect:
4379 return "DW_FORM_indirect";
4380 default:
4381 return "DW_FORM_<unknown>";
4385 /* Convert a DWARF type code into its string name. */
4387 #if 0
4388 static const char *
4389 dwarf_type_encoding_name (unsigned enc)
4391 switch (enc)
4393 case DW_ATE_address:
4394 return "DW_ATE_address";
4395 case DW_ATE_boolean:
4396 return "DW_ATE_boolean";
4397 case DW_ATE_complex_float:
4398 return "DW_ATE_complex_float";
4399 case DW_ATE_float:
4400 return "DW_ATE_float";
4401 case DW_ATE_signed:
4402 return "DW_ATE_signed";
4403 case DW_ATE_signed_char:
4404 return "DW_ATE_signed_char";
4405 case DW_ATE_unsigned:
4406 return "DW_ATE_unsigned";
4407 case DW_ATE_unsigned_char:
4408 return "DW_ATE_unsigned_char";
4409 default:
4410 return "DW_ATE_<unknown>";
4413 #endif
4415 /* Determine the "ultimate origin" of a decl. The decl may be an inlined
4416 instance of an inlined instance of a decl which is local to an inline
4417 function, so we have to trace all of the way back through the origin chain
4418 to find out what sort of node actually served as the original seed for the
4419 given block. */
4421 static tree
4422 decl_ultimate_origin (tree decl)
4424 /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4425 nodes in the function to point to themselves; ignore that if
4426 we're trying to output the abstract instance of this function. */
4427 if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4428 return NULL_TREE;
4430 #ifdef ENABLE_CHECKING
4431 if (DECL_FROM_INLINE (DECL_ORIGIN (decl)))
4432 /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4433 most distant ancestor, this should never happen. */
4434 abort ();
4435 #endif
4437 return DECL_ABSTRACT_ORIGIN (decl);
4440 /* Determine the "ultimate origin" of a block. The block may be an inlined
4441 instance of an inlined instance of a block which is local to an inline
4442 function, so we have to trace all of the way back through the origin chain
4443 to find out what sort of node actually served as the original seed for the
4444 given block. */
4446 static tree
4447 block_ultimate_origin (tree block)
4449 tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4451 /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4452 nodes in the function to point to themselves; ignore that if
4453 we're trying to output the abstract instance of this function. */
4454 if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4455 return NULL_TREE;
4457 if (immediate_origin == NULL_TREE)
4458 return NULL_TREE;
4459 else
4461 tree ret_val;
4462 tree lookahead = immediate_origin;
4466 ret_val = lookahead;
4467 lookahead = (TREE_CODE (ret_val) == BLOCK
4468 ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4470 while (lookahead != NULL && lookahead != ret_val);
4472 return ret_val;
4476 /* Get the class to which DECL belongs, if any. In g++, the DECL_CONTEXT
4477 of a virtual function may refer to a base class, so we check the 'this'
4478 parameter. */
4480 static tree
4481 decl_class_context (tree decl)
4483 tree context = NULL_TREE;
4485 if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4486 context = DECL_CONTEXT (decl);
4487 else
4488 context = TYPE_MAIN_VARIANT
4489 (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4491 if (context && !TYPE_P (context))
4492 context = NULL_TREE;
4494 return context;
4497 /* Add an attribute/value pair to a DIE. We build the lists up in reverse
4498 addition order, and correct that in reverse_all_dies. */
4500 static inline void
4501 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4503 if (die != NULL && attr != NULL)
4505 attr->dw_attr_next = die->die_attr;
4506 die->die_attr = attr;
4510 static inline enum dw_val_class
4511 AT_class (dw_attr_ref a)
4513 return a->dw_attr_val.val_class;
4516 /* Add a flag value attribute to a DIE. */
4518 static inline void
4519 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4521 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4523 attr->dw_attr_next = NULL;
4524 attr->dw_attr = attr_kind;
4525 attr->dw_attr_val.val_class = dw_val_class_flag;
4526 attr->dw_attr_val.v.val_flag = flag;
4527 add_dwarf_attr (die, attr);
4530 static inline unsigned
4531 AT_flag (dw_attr_ref a)
4533 if (a && AT_class (a) == dw_val_class_flag)
4534 return a->dw_attr_val.v.val_flag;
4536 abort ();
4539 /* Add a signed integer attribute value to a DIE. */
4541 static inline void
4542 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4544 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4546 attr->dw_attr_next = NULL;
4547 attr->dw_attr = attr_kind;
4548 attr->dw_attr_val.val_class = dw_val_class_const;
4549 attr->dw_attr_val.v.val_int = int_val;
4550 add_dwarf_attr (die, attr);
4553 static inline HOST_WIDE_INT
4554 AT_int (dw_attr_ref a)
4556 if (a && AT_class (a) == dw_val_class_const)
4557 return a->dw_attr_val.v.val_int;
4559 abort ();
4562 /* Add an unsigned integer attribute value to a DIE. */
4564 static inline void
4565 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4566 unsigned HOST_WIDE_INT unsigned_val)
4568 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4570 attr->dw_attr_next = NULL;
4571 attr->dw_attr = attr_kind;
4572 attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4573 attr->dw_attr_val.v.val_unsigned = unsigned_val;
4574 add_dwarf_attr (die, attr);
4577 static inline unsigned HOST_WIDE_INT
4578 AT_unsigned (dw_attr_ref a)
4580 if (a && AT_class (a) == dw_val_class_unsigned_const)
4581 return a->dw_attr_val.v.val_unsigned;
4583 abort ();
4586 /* Add an unsigned double integer attribute value to a DIE. */
4588 static inline void
4589 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4590 long unsigned int val_hi, long unsigned int val_low)
4592 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4594 attr->dw_attr_next = NULL;
4595 attr->dw_attr = attr_kind;
4596 attr->dw_attr_val.val_class = dw_val_class_long_long;
4597 attr->dw_attr_val.v.val_long_long.hi = val_hi;
4598 attr->dw_attr_val.v.val_long_long.low = val_low;
4599 add_dwarf_attr (die, attr);
4602 /* Add a floating point attribute value to a DIE and return it. */
4604 static inline void
4605 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4606 unsigned int length, unsigned int elt_size, unsigned char *array)
4608 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4610 attr->dw_attr_next = NULL;
4611 attr->dw_attr = attr_kind;
4612 attr->dw_attr_val.val_class = dw_val_class_vec;
4613 attr->dw_attr_val.v.val_vec.length = length;
4614 attr->dw_attr_val.v.val_vec.elt_size = elt_size;
4615 attr->dw_attr_val.v.val_vec.array = array;
4616 add_dwarf_attr (die, attr);
4619 /* Hash and equality functions for debug_str_hash. */
4621 static hashval_t
4622 debug_str_do_hash (const void *x)
4624 return htab_hash_string (((const struct indirect_string_node *)x)->str);
4627 static int
4628 debug_str_eq (const void *x1, const void *x2)
4630 return strcmp ((((const struct indirect_string_node *)x1)->str),
4631 (const char *)x2) == 0;
4634 /* Add a string attribute value to a DIE. */
4636 static inline void
4637 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4639 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4640 struct indirect_string_node *node;
4641 void **slot;
4643 if (! debug_str_hash)
4644 debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4645 debug_str_eq, NULL);
4647 slot = htab_find_slot_with_hash (debug_str_hash, str,
4648 htab_hash_string (str), INSERT);
4649 if (*slot == NULL)
4650 *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
4651 node = (struct indirect_string_node *) *slot;
4652 node->str = ggc_strdup (str);
4653 node->refcount++;
4655 attr->dw_attr_next = NULL;
4656 attr->dw_attr = attr_kind;
4657 attr->dw_attr_val.val_class = dw_val_class_str;
4658 attr->dw_attr_val.v.val_str = node;
4659 add_dwarf_attr (die, attr);
4662 static inline const char *
4663 AT_string (dw_attr_ref a)
4665 if (a && AT_class (a) == dw_val_class_str)
4666 return a->dw_attr_val.v.val_str->str;
4668 abort ();
4671 /* Find out whether a string should be output inline in DIE
4672 or out-of-line in .debug_str section. */
4674 static int
4675 AT_string_form (dw_attr_ref a)
4677 if (a && AT_class (a) == dw_val_class_str)
4679 struct indirect_string_node *node;
4680 unsigned int len;
4681 char label[32];
4683 node = a->dw_attr_val.v.val_str;
4684 if (node->form)
4685 return node->form;
4687 len = strlen (node->str) + 1;
4689 /* If the string is shorter or equal to the size of the reference, it is
4690 always better to put it inline. */
4691 if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
4692 return node->form = DW_FORM_string;
4694 /* If we cannot expect the linker to merge strings in .debug_str
4695 section, only put it into .debug_str if it is worth even in this
4696 single module. */
4697 if ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) == 0
4698 && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
4699 return node->form = DW_FORM_string;
4701 ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
4702 ++dw2_string_counter;
4703 node->label = xstrdup (label);
4705 return node->form = DW_FORM_strp;
4708 abort ();
4711 /* Add a DIE reference attribute value to a DIE. */
4713 static inline void
4714 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
4716 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4718 attr->dw_attr_next = NULL;
4719 attr->dw_attr = attr_kind;
4720 attr->dw_attr_val.val_class = dw_val_class_die_ref;
4721 attr->dw_attr_val.v.val_die_ref.die = targ_die;
4722 attr->dw_attr_val.v.val_die_ref.external = 0;
4723 add_dwarf_attr (die, attr);
4726 /* Add an AT_specification attribute to a DIE, and also make the back
4727 pointer from the specification to the definition. */
4729 static inline void
4730 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
4732 add_AT_die_ref (die, DW_AT_specification, targ_die);
4733 if (targ_die->die_definition)
4734 abort ();
4735 targ_die->die_definition = die;
4738 static inline dw_die_ref
4739 AT_ref (dw_attr_ref a)
4741 if (a && AT_class (a) == dw_val_class_die_ref)
4742 return a->dw_attr_val.v.val_die_ref.die;
4744 abort ();
4747 static inline int
4748 AT_ref_external (dw_attr_ref a)
4750 if (a && AT_class (a) == dw_val_class_die_ref)
4751 return a->dw_attr_val.v.val_die_ref.external;
4753 return 0;
4756 static inline void
4757 set_AT_ref_external (dw_attr_ref a, int i)
4759 if (a && AT_class (a) == dw_val_class_die_ref)
4760 a->dw_attr_val.v.val_die_ref.external = i;
4761 else
4762 abort ();
4765 /* Add an FDE reference attribute value to a DIE. */
4767 static inline void
4768 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
4770 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4772 attr->dw_attr_next = NULL;
4773 attr->dw_attr = attr_kind;
4774 attr->dw_attr_val.val_class = dw_val_class_fde_ref;
4775 attr->dw_attr_val.v.val_fde_index = targ_fde;
4776 add_dwarf_attr (die, attr);
4779 /* Add a location description attribute value to a DIE. */
4781 static inline void
4782 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
4784 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4786 attr->dw_attr_next = NULL;
4787 attr->dw_attr = attr_kind;
4788 attr->dw_attr_val.val_class = dw_val_class_loc;
4789 attr->dw_attr_val.v.val_loc = loc;
4790 add_dwarf_attr (die, attr);
4793 static inline dw_loc_descr_ref
4794 AT_loc (dw_attr_ref a)
4796 if (a && AT_class (a) == dw_val_class_loc)
4797 return a->dw_attr_val.v.val_loc;
4799 abort ();
4802 static inline void
4803 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
4805 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4807 attr->dw_attr_next = NULL;
4808 attr->dw_attr = attr_kind;
4809 attr->dw_attr_val.val_class = dw_val_class_loc_list;
4810 attr->dw_attr_val.v.val_loc_list = loc_list;
4811 add_dwarf_attr (die, attr);
4812 have_location_lists = 1;
4815 static inline dw_loc_list_ref
4816 AT_loc_list (dw_attr_ref a)
4818 if (a && AT_class (a) == dw_val_class_loc_list)
4819 return a->dw_attr_val.v.val_loc_list;
4821 abort ();
4824 /* Add an address constant attribute value to a DIE. */
4826 static inline void
4827 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
4829 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4831 attr->dw_attr_next = NULL;
4832 attr->dw_attr = attr_kind;
4833 attr->dw_attr_val.val_class = dw_val_class_addr;
4834 attr->dw_attr_val.v.val_addr = addr;
4835 add_dwarf_attr (die, attr);
4838 static inline rtx
4839 AT_addr (dw_attr_ref a)
4841 if (a && AT_class (a) == dw_val_class_addr)
4842 return a->dw_attr_val.v.val_addr;
4844 abort ();
4847 /* Add a label identifier attribute value to a DIE. */
4849 static inline void
4850 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
4852 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4854 attr->dw_attr_next = NULL;
4855 attr->dw_attr = attr_kind;
4856 attr->dw_attr_val.val_class = dw_val_class_lbl_id;
4857 attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
4858 add_dwarf_attr (die, attr);
4861 /* Add a section offset attribute value to a DIE. */
4863 static inline void
4864 add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
4866 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4868 attr->dw_attr_next = NULL;
4869 attr->dw_attr = attr_kind;
4870 attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
4871 attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
4872 add_dwarf_attr (die, attr);
4875 /* Add an offset attribute value to a DIE. */
4877 static inline void
4878 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
4879 unsigned HOST_WIDE_INT offset)
4881 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4883 attr->dw_attr_next = NULL;
4884 attr->dw_attr = attr_kind;
4885 attr->dw_attr_val.val_class = dw_val_class_offset;
4886 attr->dw_attr_val.v.val_offset = offset;
4887 add_dwarf_attr (die, attr);
4890 /* Add an range_list attribute value to a DIE. */
4892 static void
4893 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
4894 long unsigned int offset)
4896 dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4898 attr->dw_attr_next = NULL;
4899 attr->dw_attr = attr_kind;
4900 attr->dw_attr_val.val_class = dw_val_class_range_list;
4901 attr->dw_attr_val.v.val_offset = offset;
4902 add_dwarf_attr (die, attr);
4905 static inline const char *
4906 AT_lbl (dw_attr_ref a)
4908 if (a && (AT_class (a) == dw_val_class_lbl_id
4909 || AT_class (a) == dw_val_class_lbl_offset))
4910 return a->dw_attr_val.v.val_lbl_id;
4912 abort ();
4915 /* Get the attribute of type attr_kind. */
4917 static dw_attr_ref
4918 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
4920 dw_attr_ref a;
4921 dw_die_ref spec = NULL;
4923 if (die != NULL)
4925 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
4926 if (a->dw_attr == attr_kind)
4927 return a;
4928 else if (a->dw_attr == DW_AT_specification
4929 || a->dw_attr == DW_AT_abstract_origin)
4930 spec = AT_ref (a);
4932 if (spec)
4933 return get_AT (spec, attr_kind);
4936 return NULL;
4939 /* Return the "low pc" attribute value, typically associated with a subprogram
4940 DIE. Return null if the "low pc" attribute is either not present, or if it
4941 cannot be represented as an assembler label identifier. */
4943 static inline const char *
4944 get_AT_low_pc (dw_die_ref die)
4946 dw_attr_ref a = get_AT (die, DW_AT_low_pc);
4948 return a ? AT_lbl (a) : NULL;
4951 /* Return the "high pc" attribute value, typically associated with a subprogram
4952 DIE. Return null if the "high pc" attribute is either not present, or if it
4953 cannot be represented as an assembler label identifier. */
4955 static inline const char *
4956 get_AT_hi_pc (dw_die_ref die)
4958 dw_attr_ref a = get_AT (die, DW_AT_high_pc);
4960 return a ? AT_lbl (a) : NULL;
4963 /* Return the value of the string attribute designated by ATTR_KIND, or
4964 NULL if it is not present. */
4966 static inline const char *
4967 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
4969 dw_attr_ref a = get_AT (die, attr_kind);
4971 return a ? AT_string (a) : NULL;
4974 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
4975 if it is not present. */
4977 static inline int
4978 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
4980 dw_attr_ref a = get_AT (die, attr_kind);
4982 return a ? AT_flag (a) : 0;
4985 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
4986 if it is not present. */
4988 static inline unsigned
4989 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
4991 dw_attr_ref a = get_AT (die, attr_kind);
4993 return a ? AT_unsigned (a) : 0;
4996 static inline dw_die_ref
4997 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
4999 dw_attr_ref a = get_AT (die, attr_kind);
5001 return a ? AT_ref (a) : NULL;
5004 /* Return TRUE if the language is C or C++. */
5006 static inline bool
5007 is_c_family (void)
5009 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5011 return (lang == DW_LANG_C || lang == DW_LANG_C89
5012 || lang == DW_LANG_C_plus_plus);
5015 /* Return TRUE if the language is C++. */
5017 static inline bool
5018 is_cxx (void)
5020 return (get_AT_unsigned (comp_unit_die, DW_AT_language)
5021 == DW_LANG_C_plus_plus);
5024 /* Return TRUE if the language is Fortran. */
5026 static inline bool
5027 is_fortran (void)
5029 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5031 return lang == DW_LANG_Fortran77 || lang == DW_LANG_Fortran90;
5034 /* Return TRUE if the language is Java. */
5036 static inline bool
5037 is_java (void)
5039 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5041 return lang == DW_LANG_Java;
5044 /* Return TRUE if the language is Ada. */
5046 static inline bool
5047 is_ada (void)
5049 unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5051 return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5054 /* Free up the memory used by A. */
5056 static inline void free_AT (dw_attr_ref);
5057 static inline void
5058 free_AT (dw_attr_ref a)
5060 if (AT_class (a) == dw_val_class_str)
5061 if (a->dw_attr_val.v.val_str->refcount)
5062 a->dw_attr_val.v.val_str->refcount--;
5065 /* Remove the specified attribute if present. */
5067 static void
5068 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5070 dw_attr_ref *p;
5071 dw_attr_ref removed = NULL;
5073 if (die != NULL)
5075 for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
5076 if ((*p)->dw_attr == attr_kind)
5078 removed = *p;
5079 *p = (*p)->dw_attr_next;
5080 break;
5083 if (removed != 0)
5084 free_AT (removed);
5088 /* Remove child die whose die_tag is specified tag. */
5090 static void
5091 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5093 dw_die_ref current, prev, next;
5094 current = die->die_child;
5095 prev = NULL;
5096 while (current != NULL)
5098 if (current->die_tag == tag)
5100 next = current->die_sib;
5101 if (prev == NULL)
5102 die->die_child = next;
5103 else
5104 prev->die_sib = next;
5105 free_die (current);
5106 current = next;
5108 else
5110 prev = current;
5111 current = current->die_sib;
5116 /* Free up the memory used by DIE. */
5118 static inline void
5119 free_die (dw_die_ref die)
5121 remove_children (die);
5124 /* Discard the children of this DIE. */
5126 static void
5127 remove_children (dw_die_ref die)
5129 dw_die_ref child_die = die->die_child;
5131 die->die_child = NULL;
5133 while (child_die != NULL)
5135 dw_die_ref tmp_die = child_die;
5136 dw_attr_ref a;
5138 child_die = child_die->die_sib;
5140 for (a = tmp_die->die_attr; a != NULL;)
5142 dw_attr_ref tmp_a = a;
5144 a = a->dw_attr_next;
5145 free_AT (tmp_a);
5148 free_die (tmp_die);
5152 /* Add a child DIE below its parent. We build the lists up in reverse
5153 addition order, and correct that in reverse_all_dies. */
5155 static inline void
5156 add_child_die (dw_die_ref die, dw_die_ref child_die)
5158 if (die != NULL && child_die != NULL)
5160 if (die == child_die)
5161 abort ();
5163 child_die->die_parent = die;
5164 child_die->die_sib = die->die_child;
5165 die->die_child = child_die;
5169 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5170 is the specification, to the front of PARENT's list of children. */
5172 static void
5173 splice_child_die (dw_die_ref parent, dw_die_ref child)
5175 dw_die_ref *p;
5177 /* We want the declaration DIE from inside the class, not the
5178 specification DIE at toplevel. */
5179 if (child->die_parent != parent)
5181 dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5183 if (tmp)
5184 child = tmp;
5187 if (child->die_parent != parent
5188 && child->die_parent != get_AT_ref (parent, DW_AT_specification))
5189 abort ();
5191 for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
5192 if (*p == child)
5194 *p = child->die_sib;
5195 break;
5198 child->die_parent = parent;
5199 child->die_sib = parent->die_child;
5200 parent->die_child = child;
5203 /* Return a pointer to a newly created DIE node. */
5205 static inline dw_die_ref
5206 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5208 dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5210 die->die_tag = tag_value;
5212 if (parent_die != NULL)
5213 add_child_die (parent_die, die);
5214 else
5216 limbo_die_node *limbo_node;
5218 limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5219 limbo_node->die = die;
5220 limbo_node->created_for = t;
5221 limbo_node->next = limbo_die_list;
5222 limbo_die_list = limbo_node;
5225 return die;
5228 /* Return the DIE associated with the given type specifier. */
5230 static inline dw_die_ref
5231 lookup_type_die (tree type)
5233 return TYPE_SYMTAB_DIE (type);
5236 /* Equate a DIE to a given type specifier. */
5238 static inline void
5239 equate_type_number_to_die (tree type, dw_die_ref type_die)
5241 TYPE_SYMTAB_DIE (type) = type_die;
5244 /* Returns a hash value for X (which really is a die_struct). */
5246 static hashval_t
5247 decl_die_table_hash (const void *x)
5249 return (hashval_t) ((const dw_die_ref) x)->decl_id;
5252 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y. */
5254 static int
5255 decl_die_table_eq (const void *x, const void *y)
5257 return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5260 /* Return the DIE associated with a given declaration. */
5262 static inline dw_die_ref
5263 lookup_decl_die (tree decl)
5265 return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5268 /* Returns a hash value for X (which really is a var_loc_list). */
5270 static hashval_t
5271 decl_loc_table_hash (const void *x)
5273 return (hashval_t) ((const var_loc_list *) x)->decl_id;
5276 /* Return nonzero if decl_id of var_loc_list X is the same as
5277 UID of decl *Y. */
5279 static int
5280 decl_loc_table_eq (const void *x, const void *y)
5282 return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5285 /* Return the var_loc list associated with a given declaration. */
5287 static inline var_loc_list *
5288 lookup_decl_loc (tree decl)
5290 return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5293 /* Equate a DIE to a particular declaration. */
5295 static void
5296 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5298 unsigned int decl_id = DECL_UID (decl);
5299 void **slot;
5301 slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5302 *slot = decl_die;
5303 decl_die->decl_id = decl_id;
5306 /* Add a variable location node to the linked list for DECL. */
5308 static void
5309 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5311 unsigned int decl_id = DECL_UID (decl);
5312 var_loc_list *temp;
5313 void **slot;
5315 slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5316 if (*slot == NULL)
5318 temp = ggc_alloc_cleared (sizeof (var_loc_list));
5319 temp->decl_id = decl_id;
5320 *slot = temp;
5322 else
5323 temp = *slot;
5325 if (temp->last)
5327 /* If the current location is the same as the end of the list,
5328 we have nothing to do. */
5329 if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5330 NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5332 /* Add LOC to the end of list and update LAST. */
5333 temp->last->next = loc;
5334 temp->last = loc;
5337 /* Do not add empty location to the beginning of the list. */
5338 else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5340 temp->first = loc;
5341 temp->last = loc;
5345 /* Keep track of the number of spaces used to indent the
5346 output of the debugging routines that print the structure of
5347 the DIE internal representation. */
5348 static int print_indent;
5350 /* Indent the line the number of spaces given by print_indent. */
5352 static inline void
5353 print_spaces (FILE *outfile)
5355 fprintf (outfile, "%*s", print_indent, "");
5358 /* Print the information associated with a given DIE, and its children.
5359 This routine is a debugging aid only. */
5361 static void
5362 print_die (dw_die_ref die, FILE *outfile)
5364 dw_attr_ref a;
5365 dw_die_ref c;
5367 print_spaces (outfile);
5368 fprintf (outfile, "DIE %4lu: %s\n",
5369 die->die_offset, dwarf_tag_name (die->die_tag));
5370 print_spaces (outfile);
5371 fprintf (outfile, " abbrev id: %lu", die->die_abbrev);
5372 fprintf (outfile, " offset: %lu\n", die->die_offset);
5374 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5376 print_spaces (outfile);
5377 fprintf (outfile, " %s: ", dwarf_attr_name (a->dw_attr));
5379 switch (AT_class (a))
5381 case dw_val_class_addr:
5382 fprintf (outfile, "address");
5383 break;
5384 case dw_val_class_offset:
5385 fprintf (outfile, "offset");
5386 break;
5387 case dw_val_class_loc:
5388 fprintf (outfile, "location descriptor");
5389 break;
5390 case dw_val_class_loc_list:
5391 fprintf (outfile, "location list -> label:%s",
5392 AT_loc_list (a)->ll_symbol);
5393 break;
5394 case dw_val_class_range_list:
5395 fprintf (outfile, "range list");
5396 break;
5397 case dw_val_class_const:
5398 fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5399 break;
5400 case dw_val_class_unsigned_const:
5401 fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5402 break;
5403 case dw_val_class_long_long:
5404 fprintf (outfile, "constant (%lu,%lu)",
5405 a->dw_attr_val.v.val_long_long.hi,
5406 a->dw_attr_val.v.val_long_long.low);
5407 break;
5408 case dw_val_class_vec:
5409 fprintf (outfile, "floating-point or vector constant");
5410 break;
5411 case dw_val_class_flag:
5412 fprintf (outfile, "%u", AT_flag (a));
5413 break;
5414 case dw_val_class_die_ref:
5415 if (AT_ref (a) != NULL)
5417 if (AT_ref (a)->die_symbol)
5418 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5419 else
5420 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5422 else
5423 fprintf (outfile, "die -> <null>");
5424 break;
5425 case dw_val_class_lbl_id:
5426 case dw_val_class_lbl_offset:
5427 fprintf (outfile, "label: %s", AT_lbl (a));
5428 break;
5429 case dw_val_class_str:
5430 if (AT_string (a) != NULL)
5431 fprintf (outfile, "\"%s\"", AT_string (a));
5432 else
5433 fprintf (outfile, "<null>");
5434 break;
5435 default:
5436 break;
5439 fprintf (outfile, "\n");
5442 if (die->die_child != NULL)
5444 print_indent += 4;
5445 for (c = die->die_child; c != NULL; c = c->die_sib)
5446 print_die (c, outfile);
5448 print_indent -= 4;
5450 if (print_indent == 0)
5451 fprintf (outfile, "\n");
5454 /* Print the contents of the source code line number correspondence table.
5455 This routine is a debugging aid only. */
5457 static void
5458 print_dwarf_line_table (FILE *outfile)
5460 unsigned i;
5461 dw_line_info_ref line_info;
5463 fprintf (outfile, "\n\nDWARF source line information\n");
5464 for (i = 1; i < line_info_table_in_use; i++)
5466 line_info = &line_info_table[i];
5467 fprintf (outfile, "%5d: ", i);
5468 fprintf (outfile, "%-20s",
5469 VARRAY_CHAR_PTR (file_table, line_info->dw_file_num));
5470 fprintf (outfile, "%6ld", line_info->dw_line_num);
5471 fprintf (outfile, "\n");
5474 fprintf (outfile, "\n\n");
5477 /* Print the information collected for a given DIE. */
5479 void
5480 debug_dwarf_die (dw_die_ref die)
5482 print_die (die, stderr);
5485 /* Print all DWARF information collected for the compilation unit.
5486 This routine is a debugging aid only. */
5488 void
5489 debug_dwarf (void)
5491 print_indent = 0;
5492 print_die (comp_unit_die, stderr);
5493 if (! DWARF2_ASM_LINE_DEBUG_INFO)
5494 print_dwarf_line_table (stderr);
5497 /* We build up the lists of children and attributes by pushing new ones
5498 onto the beginning of the list. Reverse the lists for DIE so that
5499 they are in order of addition. */
5501 static void
5502 reverse_die_lists (dw_die_ref die)
5504 dw_die_ref c, cp, cn;
5505 dw_attr_ref a, ap, an;
5507 for (a = die->die_attr, ap = 0; a; a = an)
5509 an = a->dw_attr_next;
5510 a->dw_attr_next = ap;
5511 ap = a;
5514 die->die_attr = ap;
5516 for (c = die->die_child, cp = 0; c; c = cn)
5518 cn = c->die_sib;
5519 c->die_sib = cp;
5520 cp = c;
5523 die->die_child = cp;
5526 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5527 reverse all dies in add_sibling_attributes, which runs through all the dies,
5528 it would reverse all the dies. Now, however, since we don't call
5529 reverse_die_lists in add_sibling_attributes, we need a routine to
5530 recursively reverse all the dies. This is that routine. */
5532 static void
5533 reverse_all_dies (dw_die_ref die)
5535 dw_die_ref c;
5537 reverse_die_lists (die);
5539 for (c = die->die_child; c; c = c->die_sib)
5540 reverse_all_dies (c);
5543 /* Start a new compilation unit DIE for an include file. OLD_UNIT is the CU
5544 for the enclosing include file, if any. BINCL_DIE is the DW_TAG_GNU_BINCL
5545 DIE that marks the start of the DIEs for this include file. */
5547 static dw_die_ref
5548 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5550 const char *filename = get_AT_string (bincl_die, DW_AT_name);
5551 dw_die_ref new_unit = gen_compile_unit_die (filename);
5553 new_unit->die_sib = old_unit;
5554 return new_unit;
5557 /* Close an include-file CU and reopen the enclosing one. */
5559 static dw_die_ref
5560 pop_compile_unit (dw_die_ref old_unit)
5562 dw_die_ref new_unit = old_unit->die_sib;
5564 old_unit->die_sib = NULL;
5565 return new_unit;
5568 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5569 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5571 /* Calculate the checksum of a location expression. */
5573 static inline void
5574 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5576 CHECKSUM (loc->dw_loc_opc);
5577 CHECKSUM (loc->dw_loc_oprnd1);
5578 CHECKSUM (loc->dw_loc_oprnd2);
5581 /* Calculate the checksum of an attribute. */
5583 static void
5584 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5586 dw_loc_descr_ref loc;
5587 rtx r;
5589 CHECKSUM (at->dw_attr);
5591 /* We don't care about differences in file numbering. */
5592 if (at->dw_attr == DW_AT_decl_file
5593 /* Or that this was compiled with a different compiler snapshot; if
5594 the output is the same, that's what matters. */
5595 || at->dw_attr == DW_AT_producer)
5596 return;
5598 switch (AT_class (at))
5600 case dw_val_class_const:
5601 CHECKSUM (at->dw_attr_val.v.val_int);
5602 break;
5603 case dw_val_class_unsigned_const:
5604 CHECKSUM (at->dw_attr_val.v.val_unsigned);
5605 break;
5606 case dw_val_class_long_long:
5607 CHECKSUM (at->dw_attr_val.v.val_long_long);
5608 break;
5609 case dw_val_class_vec:
5610 CHECKSUM (at->dw_attr_val.v.val_vec);
5611 break;
5612 case dw_val_class_flag:
5613 CHECKSUM (at->dw_attr_val.v.val_flag);
5614 break;
5615 case dw_val_class_str:
5616 CHECKSUM_STRING (AT_string (at));
5617 break;
5619 case dw_val_class_addr:
5620 r = AT_addr (at);
5621 switch (GET_CODE (r))
5623 case SYMBOL_REF:
5624 CHECKSUM_STRING (XSTR (r, 0));
5625 break;
5627 default:
5628 abort ();
5630 break;
5632 case dw_val_class_offset:
5633 CHECKSUM (at->dw_attr_val.v.val_offset);
5634 break;
5636 case dw_val_class_loc:
5637 for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5638 loc_checksum (loc, ctx);
5639 break;
5641 case dw_val_class_die_ref:
5642 die_checksum (AT_ref (at), ctx, mark);
5643 break;
5645 case dw_val_class_fde_ref:
5646 case dw_val_class_lbl_id:
5647 case dw_val_class_lbl_offset:
5648 break;
5650 default:
5651 break;
5655 /* Calculate the checksum of a DIE. */
5657 static void
5658 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5660 dw_die_ref c;
5661 dw_attr_ref a;
5663 /* To avoid infinite recursion. */
5664 if (die->die_mark)
5666 CHECKSUM (die->die_mark);
5667 return;
5669 die->die_mark = ++(*mark);
5671 CHECKSUM (die->die_tag);
5673 for (a = die->die_attr; a; a = a->dw_attr_next)
5674 attr_checksum (a, ctx, mark);
5676 for (c = die->die_child; c; c = c->die_sib)
5677 die_checksum (c, ctx, mark);
5680 #undef CHECKSUM
5681 #undef CHECKSUM_STRING
5683 /* Do the location expressions look same? */
5684 static inline int
5685 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
5687 return loc1->dw_loc_opc == loc2->dw_loc_opc
5688 && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
5689 && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
5692 /* Do the values look the same? */
5693 static int
5694 same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
5696 dw_loc_descr_ref loc1, loc2;
5697 rtx r1, r2;
5699 if (v1->val_class != v2->val_class)
5700 return 0;
5702 switch (v1->val_class)
5704 case dw_val_class_const:
5705 return v1->v.val_int == v2->v.val_int;
5706 case dw_val_class_unsigned_const:
5707 return v1->v.val_unsigned == v2->v.val_unsigned;
5708 case dw_val_class_long_long:
5709 return v1->v.val_long_long.hi == v2->v.val_long_long.hi
5710 && v1->v.val_long_long.low == v2->v.val_long_long.low;
5711 case dw_val_class_vec:
5712 if (v1->v.val_vec.length != v2->v.val_vec.length
5713 || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
5714 return 0;
5715 if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
5716 v1->v.val_vec.length * v1->v.val_vec.elt_size))
5717 return 0;
5718 return 1;
5719 case dw_val_class_flag:
5720 return v1->v.val_flag == v2->v.val_flag;
5721 case dw_val_class_str:
5722 return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
5724 case dw_val_class_addr:
5725 r1 = v1->v.val_addr;
5726 r2 = v2->v.val_addr;
5727 if (GET_CODE (r1) != GET_CODE (r2))
5728 return 0;
5729 switch (GET_CODE (r1))
5731 case SYMBOL_REF:
5732 return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
5734 default:
5735 abort ();
5738 case dw_val_class_offset:
5739 return v1->v.val_offset == v2->v.val_offset;
5741 case dw_val_class_loc:
5742 for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
5743 loc1 && loc2;
5744 loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
5745 if (!same_loc_p (loc1, loc2, mark))
5746 return 0;
5747 return !loc1 && !loc2;
5749 case dw_val_class_die_ref:
5750 return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
5752 case dw_val_class_fde_ref:
5753 case dw_val_class_lbl_id:
5754 case dw_val_class_lbl_offset:
5755 return 1;
5757 default:
5758 return 1;
5762 /* Do the attributes look the same? */
5764 static int
5765 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
5767 if (at1->dw_attr != at2->dw_attr)
5768 return 0;
5770 /* We don't care about differences in file numbering. */
5771 if (at1->dw_attr == DW_AT_decl_file
5772 /* Or that this was compiled with a different compiler snapshot; if
5773 the output is the same, that's what matters. */
5774 || at1->dw_attr == DW_AT_producer)
5775 return 1;
5777 return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
5780 /* Do the dies look the same? */
5782 static int
5783 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
5785 dw_die_ref c1, c2;
5786 dw_attr_ref a1, a2;
5788 /* To avoid infinite recursion. */
5789 if (die1->die_mark)
5790 return die1->die_mark == die2->die_mark;
5791 die1->die_mark = die2->die_mark = ++(*mark);
5793 if (die1->die_tag != die2->die_tag)
5794 return 0;
5796 for (a1 = die1->die_attr, a2 = die2->die_attr;
5797 a1 && a2;
5798 a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
5799 if (!same_attr_p (a1, a2, mark))
5800 return 0;
5801 if (a1 || a2)
5802 return 0;
5804 for (c1 = die1->die_child, c2 = die2->die_child;
5805 c1 && c2;
5806 c1 = c1->die_sib, c2 = c2->die_sib)
5807 if (!same_die_p (c1, c2, mark))
5808 return 0;
5809 if (c1 || c2)
5810 return 0;
5812 return 1;
5815 /* Do the dies look the same? Wrapper around same_die_p. */
5817 static int
5818 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
5820 int mark = 0;
5821 int ret = same_die_p (die1, die2, &mark);
5823 unmark_all_dies (die1);
5824 unmark_all_dies (die2);
5826 return ret;
5829 /* The prefix to attach to symbols on DIEs in the current comdat debug
5830 info section. */
5831 static char *comdat_symbol_id;
5833 /* The index of the current symbol within the current comdat CU. */
5834 static unsigned int comdat_symbol_number;
5836 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
5837 children, and set comdat_symbol_id accordingly. */
5839 static void
5840 compute_section_prefix (dw_die_ref unit_die)
5842 const char *die_name = get_AT_string (unit_die, DW_AT_name);
5843 const char *base = die_name ? lbasename (die_name) : "anonymous";
5844 char *name = alloca (strlen (base) + 64);
5845 char *p;
5846 int i, mark;
5847 unsigned char checksum[16];
5848 struct md5_ctx ctx;
5850 /* Compute the checksum of the DIE, then append part of it as hex digits to
5851 the name filename of the unit. */
5853 md5_init_ctx (&ctx);
5854 mark = 0;
5855 die_checksum (unit_die, &ctx, &mark);
5856 unmark_all_dies (unit_die);
5857 md5_finish_ctx (&ctx, checksum);
5859 sprintf (name, "%s.", base);
5860 clean_symbol_name (name);
5862 p = name + strlen (name);
5863 for (i = 0; i < 4; i++)
5865 sprintf (p, "%.2x", checksum[i]);
5866 p += 2;
5869 comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
5870 comdat_symbol_number = 0;
5873 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P. */
5875 static int
5876 is_type_die (dw_die_ref die)
5878 switch (die->die_tag)
5880 case DW_TAG_array_type:
5881 case DW_TAG_class_type:
5882 case DW_TAG_enumeration_type:
5883 case DW_TAG_pointer_type:
5884 case DW_TAG_reference_type:
5885 case DW_TAG_string_type:
5886 case DW_TAG_structure_type:
5887 case DW_TAG_subroutine_type:
5888 case DW_TAG_union_type:
5889 case DW_TAG_ptr_to_member_type:
5890 case DW_TAG_set_type:
5891 case DW_TAG_subrange_type:
5892 case DW_TAG_base_type:
5893 case DW_TAG_const_type:
5894 case DW_TAG_file_type:
5895 case DW_TAG_packed_type:
5896 case DW_TAG_volatile_type:
5897 case DW_TAG_typedef:
5898 return 1;
5899 default:
5900 return 0;
5904 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
5905 Basically, we want to choose the bits that are likely to be shared between
5906 compilations (types) and leave out the bits that are specific to individual
5907 compilations (functions). */
5909 static int
5910 is_comdat_die (dw_die_ref c)
5912 /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
5913 we do for stabs. The advantage is a greater likelihood of sharing between
5914 objects that don't include headers in the same order (and therefore would
5915 put the base types in a different comdat). jason 8/28/00 */
5917 if (c->die_tag == DW_TAG_base_type)
5918 return 0;
5920 if (c->die_tag == DW_TAG_pointer_type
5921 || c->die_tag == DW_TAG_reference_type
5922 || c->die_tag == DW_TAG_const_type
5923 || c->die_tag == DW_TAG_volatile_type)
5925 dw_die_ref t = get_AT_ref (c, DW_AT_type);
5927 return t ? is_comdat_die (t) : 0;
5930 return is_type_die (c);
5933 /* Returns 1 iff C is the sort of DIE that might be referred to from another
5934 compilation unit. */
5936 static int
5937 is_symbol_die (dw_die_ref c)
5939 return (is_type_die (c)
5940 || (get_AT (c, DW_AT_declaration)
5941 && !get_AT (c, DW_AT_specification)));
5944 static char *
5945 gen_internal_sym (const char *prefix)
5947 char buf[256];
5949 ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
5950 return xstrdup (buf);
5953 /* Assign symbols to all worthy DIEs under DIE. */
5955 static void
5956 assign_symbol_names (dw_die_ref die)
5958 dw_die_ref c;
5960 if (is_symbol_die (die))
5962 if (comdat_symbol_id)
5964 char *p = alloca (strlen (comdat_symbol_id) + 64);
5966 sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
5967 comdat_symbol_id, comdat_symbol_number++);
5968 die->die_symbol = xstrdup (p);
5970 else
5971 die->die_symbol = gen_internal_sym ("LDIE");
5974 for (c = die->die_child; c != NULL; c = c->die_sib)
5975 assign_symbol_names (c);
5978 struct cu_hash_table_entry
5980 dw_die_ref cu;
5981 unsigned min_comdat_num, max_comdat_num;
5982 struct cu_hash_table_entry *next;
5985 /* Routines to manipulate hash table of CUs. */
5986 static hashval_t
5987 htab_cu_hash (const void *of)
5989 const struct cu_hash_table_entry *entry = of;
5991 return htab_hash_string (entry->cu->die_symbol);
5994 static int
5995 htab_cu_eq (const void *of1, const void *of2)
5997 const struct cu_hash_table_entry *entry1 = of1;
5998 const struct die_struct *entry2 = of2;
6000 return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6003 static void
6004 htab_cu_del (void *what)
6006 struct cu_hash_table_entry *next, *entry = what;
6008 while (entry)
6010 next = entry->next;
6011 free (entry);
6012 entry = next;
6016 /* Check whether we have already seen this CU and set up SYM_NUM
6017 accordingly. */
6018 static int
6019 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6021 struct cu_hash_table_entry dummy;
6022 struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6024 dummy.max_comdat_num = 0;
6026 slot = (struct cu_hash_table_entry **)
6027 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6028 INSERT);
6029 entry = *slot;
6031 for (; entry; last = entry, entry = entry->next)
6033 if (same_die_p_wrap (cu, entry->cu))
6034 break;
6037 if (entry)
6039 *sym_num = entry->min_comdat_num;
6040 return 1;
6043 entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
6044 entry->cu = cu;
6045 entry->min_comdat_num = *sym_num = last->max_comdat_num;
6046 entry->next = *slot;
6047 *slot = entry;
6049 return 0;
6052 /* Record SYM_NUM to record of CU in HTABLE. */
6053 static void
6054 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6056 struct cu_hash_table_entry **slot, *entry;
6058 slot = (struct cu_hash_table_entry **)
6059 htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6060 NO_INSERT);
6061 entry = *slot;
6063 entry->max_comdat_num = sym_num;
6066 /* Traverse the DIE (which is always comp_unit_die), and set up
6067 additional compilation units for each of the include files we see
6068 bracketed by BINCL/EINCL. */
6070 static void
6071 break_out_includes (dw_die_ref die)
6073 dw_die_ref *ptr;
6074 dw_die_ref unit = NULL;
6075 limbo_die_node *node, **pnode;
6076 htab_t cu_hash_table;
6078 for (ptr = &(die->die_child); *ptr;)
6080 dw_die_ref c = *ptr;
6082 if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6083 || (unit && is_comdat_die (c)))
6085 /* This DIE is for a secondary CU; remove it from the main one. */
6086 *ptr = c->die_sib;
6088 if (c->die_tag == DW_TAG_GNU_BINCL)
6090 unit = push_new_compile_unit (unit, c);
6091 free_die (c);
6093 else if (c->die_tag == DW_TAG_GNU_EINCL)
6095 unit = pop_compile_unit (unit);
6096 free_die (c);
6098 else
6099 add_child_die (unit, c);
6101 else
6103 /* Leave this DIE in the main CU. */
6104 ptr = &(c->die_sib);
6105 continue;
6109 #if 0
6110 /* We can only use this in debugging, since the frontend doesn't check
6111 to make sure that we leave every include file we enter. */
6112 if (unit != NULL)
6113 abort ();
6114 #endif
6116 assign_symbol_names (die);
6117 cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6118 for (node = limbo_die_list, pnode = &limbo_die_list;
6119 node;
6120 node = node->next)
6122 int is_dupl;
6124 compute_section_prefix (node->die);
6125 is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6126 &comdat_symbol_number);
6127 assign_symbol_names (node->die);
6128 if (is_dupl)
6129 *pnode = node->next;
6130 else
6132 pnode = &node->next;
6133 record_comdat_symbol_number (node->die, cu_hash_table,
6134 comdat_symbol_number);
6137 htab_delete (cu_hash_table);
6140 /* Traverse the DIE and add a sibling attribute if it may have the
6141 effect of speeding up access to siblings. To save some space,
6142 avoid generating sibling attributes for DIE's without children. */
6144 static void
6145 add_sibling_attributes (dw_die_ref die)
6147 dw_die_ref c;
6149 if (die->die_tag != DW_TAG_compile_unit
6150 && die->die_sib && die->die_child != NULL)
6151 /* Add the sibling link to the front of the attribute list. */
6152 add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6154 for (c = die->die_child; c != NULL; c = c->die_sib)
6155 add_sibling_attributes (c);
6158 /* Output all location lists for the DIE and its children. */
6160 static void
6161 output_location_lists (dw_die_ref die)
6163 dw_die_ref c;
6164 dw_attr_ref d_attr;
6166 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6167 if (AT_class (d_attr) == dw_val_class_loc_list)
6168 output_loc_list (AT_loc_list (d_attr));
6170 for (c = die->die_child; c != NULL; c = c->die_sib)
6171 output_location_lists (c);
6175 /* The format of each DIE (and its attribute value pairs) is encoded in an
6176 abbreviation table. This routine builds the abbreviation table and assigns
6177 a unique abbreviation id for each abbreviation entry. The children of each
6178 die are visited recursively. */
6180 static void
6181 build_abbrev_table (dw_die_ref die)
6183 unsigned long abbrev_id;
6184 unsigned int n_alloc;
6185 dw_die_ref c;
6186 dw_attr_ref d_attr, a_attr;
6188 /* Scan the DIE references, and mark as external any that refer to
6189 DIEs from other CUs (i.e. those which are not marked). */
6190 for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6191 if (AT_class (d_attr) == dw_val_class_die_ref
6192 && AT_ref (d_attr)->die_mark == 0)
6194 if (AT_ref (d_attr)->die_symbol == 0)
6195 abort ();
6197 set_AT_ref_external (d_attr, 1);
6200 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6202 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6204 if (abbrev->die_tag == die->die_tag)
6206 if ((abbrev->die_child != NULL) == (die->die_child != NULL))
6208 a_attr = abbrev->die_attr;
6209 d_attr = die->die_attr;
6211 while (a_attr != NULL && d_attr != NULL)
6213 if ((a_attr->dw_attr != d_attr->dw_attr)
6214 || (value_format (a_attr) != value_format (d_attr)))
6215 break;
6217 a_attr = a_attr->dw_attr_next;
6218 d_attr = d_attr->dw_attr_next;
6221 if (a_attr == NULL && d_attr == NULL)
6222 break;
6227 if (abbrev_id >= abbrev_die_table_in_use)
6229 if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6231 n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6232 abbrev_die_table = ggc_realloc (abbrev_die_table,
6233 sizeof (dw_die_ref) * n_alloc);
6235 memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6236 (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6237 abbrev_die_table_allocated = n_alloc;
6240 ++abbrev_die_table_in_use;
6241 abbrev_die_table[abbrev_id] = die;
6244 die->die_abbrev = abbrev_id;
6245 for (c = die->die_child; c != NULL; c = c->die_sib)
6246 build_abbrev_table (c);
6249 /* Return the power-of-two number of bytes necessary to represent VALUE. */
6251 static int
6252 constant_size (long unsigned int value)
6254 int log;
6256 if (value == 0)
6257 log = 0;
6258 else
6259 log = floor_log2 (value);
6261 log = log / 8;
6262 log = 1 << (floor_log2 (log) + 1);
6264 return log;
6267 /* Return the size of a DIE as it is represented in the
6268 .debug_info section. */
6270 static unsigned long
6271 size_of_die (dw_die_ref die)
6273 unsigned long size = 0;
6274 dw_attr_ref a;
6276 size += size_of_uleb128 (die->die_abbrev);
6277 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6279 switch (AT_class (a))
6281 case dw_val_class_addr:
6282 size += DWARF2_ADDR_SIZE;
6283 break;
6284 case dw_val_class_offset:
6285 size += DWARF_OFFSET_SIZE;
6286 break;
6287 case dw_val_class_loc:
6289 unsigned long lsize = size_of_locs (AT_loc (a));
6291 /* Block length. */
6292 size += constant_size (lsize);
6293 size += lsize;
6295 break;
6296 case dw_val_class_loc_list:
6297 size += DWARF_OFFSET_SIZE;
6298 break;
6299 case dw_val_class_range_list:
6300 size += DWARF_OFFSET_SIZE;
6301 break;
6302 case dw_val_class_const:
6303 size += size_of_sleb128 (AT_int (a));
6304 break;
6305 case dw_val_class_unsigned_const:
6306 size += constant_size (AT_unsigned (a));
6307 break;
6308 case dw_val_class_long_long:
6309 size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6310 break;
6311 case dw_val_class_vec:
6312 size += 1 + (a->dw_attr_val.v.val_vec.length
6313 * a->dw_attr_val.v.val_vec.elt_size); /* block */
6314 break;
6315 case dw_val_class_flag:
6316 size += 1;
6317 break;
6318 case dw_val_class_die_ref:
6319 if (AT_ref_external (a))
6320 size += DWARF2_ADDR_SIZE;
6321 else
6322 size += DWARF_OFFSET_SIZE;
6323 break;
6324 case dw_val_class_fde_ref:
6325 size += DWARF_OFFSET_SIZE;
6326 break;
6327 case dw_val_class_lbl_id:
6328 size += DWARF2_ADDR_SIZE;
6329 break;
6330 case dw_val_class_lbl_offset:
6331 size += DWARF_OFFSET_SIZE;
6332 break;
6333 case dw_val_class_str:
6334 if (AT_string_form (a) == DW_FORM_strp)
6335 size += DWARF_OFFSET_SIZE;
6336 else
6337 size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6338 break;
6339 default:
6340 abort ();
6344 return size;
6347 /* Size the debugging information associated with a given DIE. Visits the
6348 DIE's children recursively. Updates the global variable next_die_offset, on
6349 each time through. Uses the current value of next_die_offset to update the
6350 die_offset field in each DIE. */
6352 static void
6353 calc_die_sizes (dw_die_ref die)
6355 dw_die_ref c;
6357 die->die_offset = next_die_offset;
6358 next_die_offset += size_of_die (die);
6360 for (c = die->die_child; c != NULL; c = c->die_sib)
6361 calc_die_sizes (c);
6363 if (die->die_child != NULL)
6364 /* Count the null byte used to terminate sibling lists. */
6365 next_die_offset += 1;
6368 /* Set the marks for a die and its children. We do this so
6369 that we know whether or not a reference needs to use FORM_ref_addr; only
6370 DIEs in the same CU will be marked. We used to clear out the offset
6371 and use that as the flag, but ran into ordering problems. */
6373 static void
6374 mark_dies (dw_die_ref die)
6376 dw_die_ref c;
6378 if (die->die_mark)
6379 abort ();
6381 die->die_mark = 1;
6382 for (c = die->die_child; c; c = c->die_sib)
6383 mark_dies (c);
6386 /* Clear the marks for a die and its children. */
6388 static void
6389 unmark_dies (dw_die_ref die)
6391 dw_die_ref c;
6393 if (!die->die_mark)
6394 abort ();
6396 die->die_mark = 0;
6397 for (c = die->die_child; c; c = c->die_sib)
6398 unmark_dies (c);
6401 /* Clear the marks for a die, its children and referred dies. */
6403 static void
6404 unmark_all_dies (dw_die_ref die)
6406 dw_die_ref c;
6407 dw_attr_ref a;
6409 if (!die->die_mark)
6410 return;
6411 die->die_mark = 0;
6413 for (c = die->die_child; c; c = c->die_sib)
6414 unmark_all_dies (c);
6416 for (a = die->die_attr; a; a = a->dw_attr_next)
6417 if (AT_class (a) == dw_val_class_die_ref)
6418 unmark_all_dies (AT_ref (a));
6421 /* Return the size of the .debug_pubnames table generated for the
6422 compilation unit. */
6424 static unsigned long
6425 size_of_pubnames (void)
6427 unsigned long size;
6428 unsigned i;
6430 size = DWARF_PUBNAMES_HEADER_SIZE;
6431 for (i = 0; i < pubname_table_in_use; i++)
6433 pubname_ref p = &pubname_table[i];
6434 size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6437 size += DWARF_OFFSET_SIZE;
6438 return size;
6441 /* Return the size of the information in the .debug_aranges section. */
6443 static unsigned long
6444 size_of_aranges (void)
6446 unsigned long size;
6448 size = DWARF_ARANGES_HEADER_SIZE;
6450 /* Count the address/length pair for this compilation unit. */
6451 size += 2 * DWARF2_ADDR_SIZE;
6452 size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6454 /* Count the two zero words used to terminated the address range table. */
6455 size += 2 * DWARF2_ADDR_SIZE;
6456 return size;
6459 /* Select the encoding of an attribute value. */
6461 static enum dwarf_form
6462 value_format (dw_attr_ref a)
6464 switch (a->dw_attr_val.val_class)
6466 case dw_val_class_addr:
6467 return DW_FORM_addr;
6468 case dw_val_class_range_list:
6469 case dw_val_class_offset:
6470 if (DWARF_OFFSET_SIZE == 4)
6471 return DW_FORM_data4;
6472 if (DWARF_OFFSET_SIZE == 8)
6473 return DW_FORM_data8;
6474 abort ();
6475 case dw_val_class_loc_list:
6476 /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6477 .debug_loc section */
6478 return DW_FORM_data4;
6479 case dw_val_class_loc:
6480 switch (constant_size (size_of_locs (AT_loc (a))))
6482 case 1:
6483 return DW_FORM_block1;
6484 case 2:
6485 return DW_FORM_block2;
6486 default:
6487 abort ();
6489 case dw_val_class_const:
6490 return DW_FORM_sdata;
6491 case dw_val_class_unsigned_const:
6492 switch (constant_size (AT_unsigned (a)))
6494 case 1:
6495 return DW_FORM_data1;
6496 case 2:
6497 return DW_FORM_data2;
6498 case 4:
6499 return DW_FORM_data4;
6500 case 8:
6501 return DW_FORM_data8;
6502 default:
6503 abort ();
6505 case dw_val_class_long_long:
6506 return DW_FORM_block1;
6507 case dw_val_class_vec:
6508 return DW_FORM_block1;
6509 case dw_val_class_flag:
6510 return DW_FORM_flag;
6511 case dw_val_class_die_ref:
6512 if (AT_ref_external (a))
6513 return DW_FORM_ref_addr;
6514 else
6515 return DW_FORM_ref;
6516 case dw_val_class_fde_ref:
6517 return DW_FORM_data;
6518 case dw_val_class_lbl_id:
6519 return DW_FORM_addr;
6520 case dw_val_class_lbl_offset:
6521 return DW_FORM_data;
6522 case dw_val_class_str:
6523 return AT_string_form (a);
6525 default:
6526 abort ();
6530 /* Output the encoding of an attribute value. */
6532 static void
6533 output_value_format (dw_attr_ref a)
6535 enum dwarf_form form = value_format (a);
6537 dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6540 /* Output the .debug_abbrev section which defines the DIE abbreviation
6541 table. */
6543 static void
6544 output_abbrev_section (void)
6546 unsigned long abbrev_id;
6548 dw_attr_ref a_attr;
6550 for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6552 dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6554 dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6555 dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6556 dwarf_tag_name (abbrev->die_tag));
6558 if (abbrev->die_child != NULL)
6559 dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6560 else
6561 dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6563 for (a_attr = abbrev->die_attr; a_attr != NULL;
6564 a_attr = a_attr->dw_attr_next)
6566 dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6567 dwarf_attr_name (a_attr->dw_attr));
6568 output_value_format (a_attr);
6571 dw2_asm_output_data (1, 0, NULL);
6572 dw2_asm_output_data (1, 0, NULL);
6575 /* Terminate the table. */
6576 dw2_asm_output_data (1, 0, NULL);
6579 /* Output a symbol we can use to refer to this DIE from another CU. */
6581 static inline void
6582 output_die_symbol (dw_die_ref die)
6584 char *sym = die->die_symbol;
6586 if (sym == 0)
6587 return;
6589 if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6590 /* We make these global, not weak; if the target doesn't support
6591 .linkonce, it doesn't support combining the sections, so debugging
6592 will break. */
6593 (*targetm.asm_out.globalize_label) (asm_out_file, sym);
6595 ASM_OUTPUT_LABEL (asm_out_file, sym);
6598 /* Return a new location list, given the begin and end range, and the
6599 expression. gensym tells us whether to generate a new internal symbol for
6600 this location list node, which is done for the head of the list only. */
6602 static inline dw_loc_list_ref
6603 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6604 const char *section, unsigned int gensym)
6606 dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6608 retlist->begin = begin;
6609 retlist->end = end;
6610 retlist->expr = expr;
6611 retlist->section = section;
6612 if (gensym)
6613 retlist->ll_symbol = gen_internal_sym ("LLST");
6615 return retlist;
6618 /* Add a location description expression to a location list. */
6620 static inline void
6621 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6622 const char *begin, const char *end,
6623 const char *section)
6625 dw_loc_list_ref *d;
6627 /* Find the end of the chain. */
6628 for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6631 /* Add a new location list node to the list. */
6632 *d = new_loc_list (descr, begin, end, section, 0);
6635 /* Output the location list given to us. */
6637 static void
6638 output_loc_list (dw_loc_list_ref list_head)
6640 dw_loc_list_ref curr = list_head;
6642 ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
6644 /* Walk the location list, and output each range + expression. */
6645 for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
6647 unsigned long size;
6648 if (separate_line_info_table_in_use == 0)
6650 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
6651 "Location list begin address (%s)",
6652 list_head->ll_symbol);
6653 dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
6654 "Location list end address (%s)",
6655 list_head->ll_symbol);
6657 else
6659 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
6660 "Location list begin address (%s)",
6661 list_head->ll_symbol);
6662 dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
6663 "Location list end address (%s)",
6664 list_head->ll_symbol);
6666 size = size_of_locs (curr->expr);
6668 /* Output the block length for this list of location operations. */
6669 if (size > 0xffff)
6670 abort ();
6671 dw2_asm_output_data (2, size, "%s", "Location expression size");
6673 output_loc_sequence (curr->expr);
6676 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6677 "Location list terminator begin (%s)",
6678 list_head->ll_symbol);
6679 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6680 "Location list terminator end (%s)",
6681 list_head->ll_symbol);
6684 /* Output the DIE and its attributes. Called recursively to generate
6685 the definitions of each child DIE. */
6687 static void
6688 output_die (dw_die_ref die)
6690 dw_attr_ref a;
6691 dw_die_ref c;
6692 unsigned long size;
6694 /* If someone in another CU might refer to us, set up a symbol for
6695 them to point to. */
6696 if (die->die_symbol)
6697 output_die_symbol (die);
6699 dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
6700 die->die_offset, dwarf_tag_name (die->die_tag));
6702 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6704 const char *name = dwarf_attr_name (a->dw_attr);
6706 switch (AT_class (a))
6708 case dw_val_class_addr:
6709 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
6710 break;
6712 case dw_val_class_offset:
6713 dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
6714 "%s", name);
6715 break;
6717 case dw_val_class_range_list:
6719 char *p = strchr (ranges_section_label, '\0');
6721 sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
6722 a->dw_attr_val.v.val_offset);
6723 dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
6724 "%s", name);
6725 *p = '\0';
6727 break;
6729 case dw_val_class_loc:
6730 size = size_of_locs (AT_loc (a));
6732 /* Output the block length for this list of location operations. */
6733 dw2_asm_output_data (constant_size (size), size, "%s", name);
6735 output_loc_sequence (AT_loc (a));
6736 break;
6738 case dw_val_class_const:
6739 /* ??? It would be slightly more efficient to use a scheme like is
6740 used for unsigned constants below, but gdb 4.x does not sign
6741 extend. Gdb 5.x does sign extend. */
6742 dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
6743 break;
6745 case dw_val_class_unsigned_const:
6746 dw2_asm_output_data (constant_size (AT_unsigned (a)),
6747 AT_unsigned (a), "%s", name);
6748 break;
6750 case dw_val_class_long_long:
6752 unsigned HOST_WIDE_INT first, second;
6754 dw2_asm_output_data (1,
6755 2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6756 "%s", name);
6758 if (WORDS_BIG_ENDIAN)
6760 first = a->dw_attr_val.v.val_long_long.hi;
6761 second = a->dw_attr_val.v.val_long_long.low;
6763 else
6765 first = a->dw_attr_val.v.val_long_long.low;
6766 second = a->dw_attr_val.v.val_long_long.hi;
6769 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6770 first, "long long constant");
6771 dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
6772 second, NULL);
6774 break;
6776 case dw_val_class_vec:
6778 unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
6779 unsigned int len = a->dw_attr_val.v.val_vec.length;
6780 unsigned int i;
6781 unsigned char *p;
6783 dw2_asm_output_data (1, len * elt_size, "%s", name);
6784 if (elt_size > sizeof (HOST_WIDE_INT))
6786 elt_size /= 2;
6787 len *= 2;
6789 for (i = 0, p = a->dw_attr_val.v.val_vec.array;
6790 i < len;
6791 i++, p += elt_size)
6792 dw2_asm_output_data (elt_size, extract_int (p, elt_size),
6793 "fp or vector constant word %u", i);
6794 break;
6797 case dw_val_class_flag:
6798 dw2_asm_output_data (1, AT_flag (a), "%s", name);
6799 break;
6801 case dw_val_class_loc_list:
6803 char *sym = AT_loc_list (a)->ll_symbol;
6805 if (sym == 0)
6806 abort ();
6807 dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
6809 break;
6811 case dw_val_class_die_ref:
6812 if (AT_ref_external (a))
6814 char *sym = AT_ref (a)->die_symbol;
6816 if (sym == 0)
6817 abort ();
6818 dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name);
6820 else if (AT_ref (a)->die_offset == 0)
6821 abort ();
6822 else
6823 dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
6824 "%s", name);
6825 break;
6827 case dw_val_class_fde_ref:
6829 char l1[20];
6831 ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
6832 a->dw_attr_val.v.val_fde_index * 2);
6833 dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name);
6835 break;
6837 case dw_val_class_lbl_id:
6838 dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
6839 break;
6841 case dw_val_class_lbl_offset:
6842 dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), "%s", name);
6843 break;
6845 case dw_val_class_str:
6846 if (AT_string_form (a) == DW_FORM_strp)
6847 dw2_asm_output_offset (DWARF_OFFSET_SIZE,
6848 a->dw_attr_val.v.val_str->label,
6849 "%s: \"%s\"", name, AT_string (a));
6850 else
6851 dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
6852 break;
6854 default:
6855 abort ();
6859 for (c = die->die_child; c != NULL; c = c->die_sib)
6860 output_die (c);
6862 /* Add null byte to terminate sibling list. */
6863 if (die->die_child != NULL)
6864 dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
6865 die->die_offset);
6868 /* Output the compilation unit that appears at the beginning of the
6869 .debug_info section, and precedes the DIE descriptions. */
6871 static void
6872 output_compilation_unit_header (void)
6874 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
6875 dw2_asm_output_data (4, 0xffffffff,
6876 "Initial length escape value indicating 64-bit DWARF extension");
6877 dw2_asm_output_data (DWARF_OFFSET_SIZE,
6878 next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
6879 "Length of Compilation Unit Info");
6880 dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
6881 dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
6882 "Offset Into Abbrev. Section");
6883 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
6886 /* Output the compilation unit DIE and its children. */
6888 static void
6889 output_comp_unit (dw_die_ref die, int output_if_empty)
6891 const char *secname;
6892 char *oldsym, *tmp;
6894 /* Unless we are outputting main CU, we may throw away empty ones. */
6895 if (!output_if_empty && die->die_child == NULL)
6896 return;
6898 /* Even if there are no children of this DIE, we must output the information
6899 about the compilation unit. Otherwise, on an empty translation unit, we
6900 will generate a present, but empty, .debug_info section. IRIX 6.5 `nm'
6901 will then complain when examining the file. First mark all the DIEs in
6902 this CU so we know which get local refs. */
6903 mark_dies (die);
6905 build_abbrev_table (die);
6907 /* Initialize the beginning DIE offset - and calculate sizes/offsets. */
6908 next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
6909 calc_die_sizes (die);
6911 oldsym = die->die_symbol;
6912 if (oldsym)
6914 tmp = alloca (strlen (oldsym) + 24);
6916 sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
6917 secname = tmp;
6918 die->die_symbol = NULL;
6920 else
6921 secname = (const char *) DEBUG_INFO_SECTION;
6923 /* Output debugging information. */
6924 named_section_flags (secname, SECTION_DEBUG);
6925 output_compilation_unit_header ();
6926 output_die (die);
6928 /* Leave the marks on the main CU, so we can check them in
6929 output_pubnames. */
6930 if (oldsym)
6932 unmark_dies (die);
6933 die->die_symbol = oldsym;
6937 /* The DWARF2 pubname for a nested thingy looks like "A::f". The
6938 output of lang_hooks.decl_printable_name for C++ looks like
6939 "A::f(int)". Let's drop the argument list, and maybe the scope. */
6941 static const char *
6942 dwarf2_name (tree decl, int scope)
6944 return (*lang_hooks.decl_printable_name) (decl, scope ? 1 : 0);
6947 /* Add a new entry to .debug_pubnames if appropriate. */
6949 static void
6950 add_pubname (tree decl, dw_die_ref die)
6952 pubname_ref p;
6954 if (! TREE_PUBLIC (decl))
6955 return;
6957 if (pubname_table_in_use == pubname_table_allocated)
6959 pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
6960 pubname_table
6961 = ggc_realloc (pubname_table,
6962 (pubname_table_allocated * sizeof (pubname_entry)));
6963 memset (pubname_table + pubname_table_in_use, 0,
6964 PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
6967 p = &pubname_table[pubname_table_in_use++];
6968 p->die = die;
6969 p->name = xstrdup (dwarf2_name (decl, 1));
6972 /* Output the public names table used to speed up access to externally
6973 visible names. For now, only generate entries for externally
6974 visible procedures. */
6976 static void
6977 output_pubnames (void)
6979 unsigned i;
6980 unsigned long pubnames_length = size_of_pubnames ();
6982 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
6983 dw2_asm_output_data (4, 0xffffffff,
6984 "Initial length escape value indicating 64-bit DWARF extension");
6985 dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
6986 "Length of Public Names Info");
6987 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
6988 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
6989 "Offset of Compilation Unit Info");
6990 dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
6991 "Compilation Unit Length");
6993 for (i = 0; i < pubname_table_in_use; i++)
6995 pubname_ref pub = &pubname_table[i];
6997 /* We shouldn't see pubnames for DIEs outside of the main CU. */
6998 if (pub->die->die_mark == 0)
6999 abort ();
7001 dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7002 "DIE offset");
7004 dw2_asm_output_nstring (pub->name, -1, "external name");
7007 dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7010 /* Add a new entry to .debug_aranges if appropriate. */
7012 static void
7013 add_arange (tree decl, dw_die_ref die)
7015 if (! DECL_SECTION_NAME (decl))
7016 return;
7018 if (arange_table_in_use == arange_table_allocated)
7020 arange_table_allocated += ARANGE_TABLE_INCREMENT;
7021 arange_table = ggc_realloc (arange_table,
7022 (arange_table_allocated
7023 * sizeof (dw_die_ref)));
7024 memset (arange_table + arange_table_in_use, 0,
7025 ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7028 arange_table[arange_table_in_use++] = die;
7031 /* Output the information that goes into the .debug_aranges table.
7032 Namely, define the beginning and ending address range of the
7033 text section generated for this compilation unit. */
7035 static void
7036 output_aranges (void)
7038 unsigned i;
7039 unsigned long aranges_length = size_of_aranges ();
7041 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7042 dw2_asm_output_data (4, 0xffffffff,
7043 "Initial length escape value indicating 64-bit DWARF extension");
7044 dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7045 "Length of Address Ranges Info");
7046 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7047 dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7048 "Offset of Compilation Unit Info");
7049 dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7050 dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7052 /* We need to align to twice the pointer size here. */
7053 if (DWARF_ARANGES_PAD_SIZE)
7055 /* Pad using a 2 byte words so that padding is correct for any
7056 pointer size. */
7057 dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7058 2 * DWARF2_ADDR_SIZE);
7059 for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7060 dw2_asm_output_data (2, 0, NULL);
7063 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7064 dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7065 text_section_label, "Length");
7067 for (i = 0; i < arange_table_in_use; i++)
7069 dw_die_ref die = arange_table[i];
7071 /* We shouldn't see aranges for DIEs outside of the main CU. */
7072 if (die->die_mark == 0)
7073 abort ();
7075 if (die->die_tag == DW_TAG_subprogram)
7077 dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7078 "Address");
7079 dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7080 get_AT_low_pc (die), "Length");
7082 else
7084 /* A static variable; extract the symbol from DW_AT_location.
7085 Note that this code isn't currently hit, as we only emit
7086 aranges for functions (jason 9/23/99). */
7087 dw_attr_ref a = get_AT (die, DW_AT_location);
7088 dw_loc_descr_ref loc;
7090 if (! a || AT_class (a) != dw_val_class_loc)
7091 abort ();
7093 loc = AT_loc (a);
7094 if (loc->dw_loc_opc != DW_OP_addr)
7095 abort ();
7097 dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7098 loc->dw_loc_oprnd1.v.val_addr, "Address");
7099 dw2_asm_output_data (DWARF2_ADDR_SIZE,
7100 get_AT_unsigned (die, DW_AT_byte_size),
7101 "Length");
7105 /* Output the terminator words. */
7106 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7107 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7110 /* Add a new entry to .debug_ranges. Return the offset at which it
7111 was placed. */
7113 static unsigned int
7114 add_ranges (tree block)
7116 unsigned int in_use = ranges_table_in_use;
7118 if (in_use == ranges_table_allocated)
7120 ranges_table_allocated += RANGES_TABLE_INCREMENT;
7121 ranges_table
7122 = ggc_realloc (ranges_table, (ranges_table_allocated
7123 * sizeof (struct dw_ranges_struct)));
7124 memset (ranges_table + ranges_table_in_use, 0,
7125 RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7128 ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7129 ranges_table_in_use = in_use + 1;
7131 return in_use * 2 * DWARF2_ADDR_SIZE;
7134 static void
7135 output_ranges (void)
7137 unsigned i;
7138 static const char *const start_fmt = "Offset 0x%x";
7139 const char *fmt = start_fmt;
7141 for (i = 0; i < ranges_table_in_use; i++)
7143 int block_num = ranges_table[i].block_num;
7145 if (block_num)
7147 char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7148 char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7150 ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7151 ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7153 /* If all code is in the text section, then the compilation
7154 unit base address defaults to DW_AT_low_pc, which is the
7155 base of the text section. */
7156 if (separate_line_info_table_in_use == 0)
7158 dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7159 text_section_label,
7160 fmt, i * 2 * DWARF2_ADDR_SIZE);
7161 dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7162 text_section_label, NULL);
7165 /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7166 compilation unit base address to zero, which allows us to
7167 use absolute addresses, and not worry about whether the
7168 target supports cross-section arithmetic. */
7169 else
7171 dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7172 fmt, i * 2 * DWARF2_ADDR_SIZE);
7173 dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7176 fmt = NULL;
7178 else
7180 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7181 dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7182 fmt = start_fmt;
7187 /* Data structure containing information about input files. */
7188 struct file_info
7190 char *path; /* Complete file name. */
7191 char *fname; /* File name part. */
7192 int length; /* Length of entire string. */
7193 int file_idx; /* Index in input file table. */
7194 int dir_idx; /* Index in directory table. */
7197 /* Data structure containing information about directories with source
7198 files. */
7199 struct dir_info
7201 char *path; /* Path including directory name. */
7202 int length; /* Path length. */
7203 int prefix; /* Index of directory entry which is a prefix. */
7204 int count; /* Number of files in this directory. */
7205 int dir_idx; /* Index of directory used as base. */
7206 int used; /* Used in the end? */
7209 /* Callback function for file_info comparison. We sort by looking at
7210 the directories in the path. */
7212 static int
7213 file_info_cmp (const void *p1, const void *p2)
7215 const struct file_info *s1 = p1;
7216 const struct file_info *s2 = p2;
7217 unsigned char *cp1;
7218 unsigned char *cp2;
7220 /* Take care of file names without directories. We need to make sure that
7221 we return consistent values to qsort since some will get confused if
7222 we return the same value when identical operands are passed in opposite
7223 orders. So if neither has a directory, return 0 and otherwise return
7224 1 or -1 depending on which one has the directory. */
7225 if ((s1->path == s1->fname || s2->path == s2->fname))
7226 return (s2->path == s2->fname) - (s1->path == s1->fname);
7228 cp1 = (unsigned char *) s1->path;
7229 cp2 = (unsigned char *) s2->path;
7231 while (1)
7233 ++cp1;
7234 ++cp2;
7235 /* Reached the end of the first path? If so, handle like above. */
7236 if ((cp1 == (unsigned char *) s1->fname)
7237 || (cp2 == (unsigned char *) s2->fname))
7238 return ((cp2 == (unsigned char *) s2->fname)
7239 - (cp1 == (unsigned char *) s1->fname));
7241 /* Character of current path component the same? */
7242 else if (*cp1 != *cp2)
7243 return *cp1 - *cp2;
7247 /* Output the directory table and the file name table. We try to minimize
7248 the total amount of memory needed. A heuristic is used to avoid large
7249 slowdowns with many input files. */
7251 static void
7252 output_file_names (void)
7254 struct file_info *files;
7255 struct dir_info *dirs;
7256 int *saved;
7257 int *savehere;
7258 int *backmap;
7259 size_t ndirs;
7260 int idx_offset;
7261 size_t i;
7262 int idx;
7264 /* Handle the case where file_table is empty. */
7265 if (VARRAY_ACTIVE_SIZE (file_table) <= 1)
7267 dw2_asm_output_data (1, 0, "End directory table");
7268 dw2_asm_output_data (1, 0, "End file name table");
7269 return;
7272 /* Allocate the various arrays we need. */
7273 files = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct file_info));
7274 dirs = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct dir_info));
7276 /* Sort the file names. */
7277 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7279 char *f;
7281 /* Skip all leading "./". */
7282 f = VARRAY_CHAR_PTR (file_table, i);
7283 while (f[0] == '.' && f[1] == '/')
7284 f += 2;
7286 /* Create a new array entry. */
7287 files[i].path = f;
7288 files[i].length = strlen (f);
7289 files[i].file_idx = i;
7291 /* Search for the file name part. */
7292 f = strrchr (f, '/');
7293 files[i].fname = f == NULL ? files[i].path : f + 1;
7296 qsort (files + 1, VARRAY_ACTIVE_SIZE (file_table) - 1,
7297 sizeof (files[0]), file_info_cmp);
7299 /* Find all the different directories used. */
7300 dirs[0].path = files[1].path;
7301 dirs[0].length = files[1].fname - files[1].path;
7302 dirs[0].prefix = -1;
7303 dirs[0].count = 1;
7304 dirs[0].dir_idx = 0;
7305 dirs[0].used = 0;
7306 files[1].dir_idx = 0;
7307 ndirs = 1;
7309 for (i = 2; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7310 if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7311 && memcmp (dirs[ndirs - 1].path, files[i].path,
7312 dirs[ndirs - 1].length) == 0)
7314 /* Same directory as last entry. */
7315 files[i].dir_idx = ndirs - 1;
7316 ++dirs[ndirs - 1].count;
7318 else
7320 size_t j;
7322 /* This is a new directory. */
7323 dirs[ndirs].path = files[i].path;
7324 dirs[ndirs].length = files[i].fname - files[i].path;
7325 dirs[ndirs].count = 1;
7326 dirs[ndirs].dir_idx = ndirs;
7327 dirs[ndirs].used = 0;
7328 files[i].dir_idx = ndirs;
7330 /* Search for a prefix. */
7331 dirs[ndirs].prefix = -1;
7332 for (j = 0; j < ndirs; j++)
7333 if (dirs[j].length < dirs[ndirs].length
7334 && dirs[j].length > 1
7335 && (dirs[ndirs].prefix == -1
7336 || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7337 && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7338 dirs[ndirs].prefix = j;
7340 ++ndirs;
7343 /* Now to the actual work. We have to find a subset of the directories which
7344 allow expressing the file name using references to the directory table
7345 with the least amount of characters. We do not do an exhaustive search
7346 where we would have to check out every combination of every single
7347 possible prefix. Instead we use a heuristic which provides nearly optimal
7348 results in most cases and never is much off. */
7349 saved = alloca (ndirs * sizeof (int));
7350 savehere = alloca (ndirs * sizeof (int));
7352 memset (saved, '\0', ndirs * sizeof (saved[0]));
7353 for (i = 0; i < ndirs; i++)
7355 size_t j;
7356 int total;
7358 /* We can always save some space for the current directory. But this
7359 does not mean it will be enough to justify adding the directory. */
7360 savehere[i] = dirs[i].length;
7361 total = (savehere[i] - saved[i]) * dirs[i].count;
7363 for (j = i + 1; j < ndirs; j++)
7365 savehere[j] = 0;
7366 if (saved[j] < dirs[i].length)
7368 /* Determine whether the dirs[i] path is a prefix of the
7369 dirs[j] path. */
7370 int k;
7372 k = dirs[j].prefix;
7373 while (k != -1 && k != (int) i)
7374 k = dirs[k].prefix;
7376 if (k == (int) i)
7378 /* Yes it is. We can possibly safe some memory but
7379 writing the filenames in dirs[j] relative to
7380 dirs[i]. */
7381 savehere[j] = dirs[i].length;
7382 total += (savehere[j] - saved[j]) * dirs[j].count;
7387 /* Check whether we can safe enough to justify adding the dirs[i]
7388 directory. */
7389 if (total > dirs[i].length + 1)
7391 /* It's worthwhile adding. */
7392 for (j = i; j < ndirs; j++)
7393 if (savehere[j] > 0)
7395 /* Remember how much we saved for this directory so far. */
7396 saved[j] = savehere[j];
7398 /* Remember the prefix directory. */
7399 dirs[j].dir_idx = i;
7404 /* We have to emit them in the order they appear in the file_table array
7405 since the index is used in the debug info generation. To do this
7406 efficiently we generate a back-mapping of the indices first. */
7407 backmap = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (int));
7408 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7410 backmap[files[i].file_idx] = i;
7412 /* Mark this directory as used. */
7413 dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
7416 /* That was it. We are ready to emit the information. First emit the
7417 directory name table. We have to make sure the first actually emitted
7418 directory name has index one; zero is reserved for the current working
7419 directory. Make sure we do not confuse these indices with the one for the
7420 constructed table (even though most of the time they are identical). */
7421 idx = 1;
7422 idx_offset = dirs[0].length > 0 ? 1 : 0;
7423 for (i = 1 - idx_offset; i < ndirs; i++)
7424 if (dirs[i].used != 0)
7426 dirs[i].used = idx++;
7427 dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7428 "Directory Entry: 0x%x", dirs[i].used);
7431 dw2_asm_output_data (1, 0, "End directory table");
7433 /* Correct the index for the current working directory entry if it
7434 exists. */
7435 if (idx_offset == 0)
7436 dirs[0].used = 0;
7438 /* Now write all the file names. */
7439 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7441 int file_idx = backmap[i];
7442 int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7444 dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7445 "File Entry: 0x%lx", (unsigned long) i);
7447 /* Include directory index. */
7448 dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
7450 /* Modification time. */
7451 dw2_asm_output_data_uleb128 (0, NULL);
7453 /* File length in bytes. */
7454 dw2_asm_output_data_uleb128 (0, NULL);
7457 dw2_asm_output_data (1, 0, "End file name table");
7461 /* Output the source line number correspondence information. This
7462 information goes into the .debug_line section. */
7464 static void
7465 output_line_info (void)
7467 char l1[20], l2[20], p1[20], p2[20];
7468 char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7469 char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7470 unsigned opc;
7471 unsigned n_op_args;
7472 unsigned long lt_index;
7473 unsigned long current_line;
7474 long line_offset;
7475 long line_delta;
7476 unsigned long current_file;
7477 unsigned long function;
7479 ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7480 ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7481 ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7482 ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7484 if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7485 dw2_asm_output_data (4, 0xffffffff,
7486 "Initial length escape value indicating 64-bit DWARF extension");
7487 dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7488 "Length of Source Line Info");
7489 ASM_OUTPUT_LABEL (asm_out_file, l1);
7491 dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7492 dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7493 ASM_OUTPUT_LABEL (asm_out_file, p1);
7495 /* Define the architecture-dependent minimum instruction length (in
7496 bytes). In this implementation of DWARF, this field is used for
7497 information purposes only. Since GCC generates assembly language,
7498 we have no a priori knowledge of how many instruction bytes are
7499 generated for each source line, and therefore can use only the
7500 DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7501 commands. Accordingly, we fix this as `1', which is "correct
7502 enough" for all architectures, and don't let the target override. */
7503 dw2_asm_output_data (1, 1,
7504 "Minimum Instruction Length");
7506 dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7507 "Default is_stmt_start flag");
7508 dw2_asm_output_data (1, DWARF_LINE_BASE,
7509 "Line Base Value (Special Opcodes)");
7510 dw2_asm_output_data (1, DWARF_LINE_RANGE,
7511 "Line Range Value (Special Opcodes)");
7512 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7513 "Special Opcode Base");
7515 for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7517 switch (opc)
7519 case DW_LNS_advance_pc:
7520 case DW_LNS_advance_line:
7521 case DW_LNS_set_file:
7522 case DW_LNS_set_column:
7523 case DW_LNS_fixed_advance_pc:
7524 n_op_args = 1;
7525 break;
7526 default:
7527 n_op_args = 0;
7528 break;
7531 dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7532 opc, n_op_args);
7535 /* Write out the information about the files we use. */
7536 output_file_names ();
7537 ASM_OUTPUT_LABEL (asm_out_file, p2);
7539 /* We used to set the address register to the first location in the text
7540 section here, but that didn't accomplish anything since we already
7541 have a line note for the opening brace of the first function. */
7543 /* Generate the line number to PC correspondence table, encoded as
7544 a series of state machine operations. */
7545 current_file = 1;
7546 current_line = 1;
7547 strcpy (prev_line_label, text_section_label);
7548 for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7550 dw_line_info_ref line_info = &line_info_table[lt_index];
7552 #if 0
7553 /* Disable this optimization for now; GDB wants to see two line notes
7554 at the beginning of a function so it can find the end of the
7555 prologue. */
7557 /* Don't emit anything for redundant notes. Just updating the
7558 address doesn't accomplish anything, because we already assume
7559 that anything after the last address is this line. */
7560 if (line_info->dw_line_num == current_line
7561 && line_info->dw_file_num == current_file)
7562 continue;
7563 #endif
7565 /* Emit debug info for the address of the current line.
7567 Unfortunately, we have little choice here currently, and must always
7568 use the most general form. GCC does not know the address delta
7569 itself, so we can't use DW_LNS_advance_pc. Many ports do have length
7570 attributes which will give an upper bound on the address range. We
7571 could perhaps use length attributes to determine when it is safe to
7572 use DW_LNS_fixed_advance_pc. */
7574 ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7575 if (0)
7577 /* This can handle deltas up to 0xffff. This takes 3 bytes. */
7578 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7579 "DW_LNS_fixed_advance_pc");
7580 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7582 else
7584 /* This can handle any delta. This takes
7585 4+DWARF2_ADDR_SIZE bytes. */
7586 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7587 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7588 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7589 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7592 strcpy (prev_line_label, line_label);
7594 /* Emit debug info for the source file of the current line, if
7595 different from the previous line. */
7596 if (line_info->dw_file_num != current_file)
7598 current_file = line_info->dw_file_num;
7599 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7600 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7601 VARRAY_CHAR_PTR (file_table,
7602 current_file));
7605 /* Emit debug info for the current line number, choosing the encoding
7606 that uses the least amount of space. */
7607 if (line_info->dw_line_num != current_line)
7609 line_offset = line_info->dw_line_num - current_line;
7610 line_delta = line_offset - DWARF_LINE_BASE;
7611 current_line = line_info->dw_line_num;
7612 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7613 /* This can handle deltas from -10 to 234, using the current
7614 definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE. This
7615 takes 1 byte. */
7616 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7617 "line %lu", current_line);
7618 else
7620 /* This can handle any delta. This takes at least 4 bytes,
7621 depending on the value being encoded. */
7622 dw2_asm_output_data (1, DW_LNS_advance_line,
7623 "advance to line %lu", current_line);
7624 dw2_asm_output_data_sleb128 (line_offset, NULL);
7625 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7628 else
7629 /* We still need to start a new row, so output a copy insn. */
7630 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7633 /* Emit debug info for the address of the end of the function. */
7634 if (0)
7636 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7637 "DW_LNS_fixed_advance_pc");
7638 dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
7640 else
7642 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7643 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7644 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7645 dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
7648 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7649 dw2_asm_output_data_uleb128 (1, NULL);
7650 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7652 function = 0;
7653 current_file = 1;
7654 current_line = 1;
7655 for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
7657 dw_separate_line_info_ref line_info
7658 = &separate_line_info_table[lt_index];
7660 #if 0
7661 /* Don't emit anything for redundant notes. */
7662 if (line_info->dw_line_num == current_line
7663 && line_info->dw_file_num == current_file
7664 && line_info->function == function)
7665 goto cont;
7666 #endif
7668 /* Emit debug info for the address of the current line. If this is
7669 a new function, or the first line of a function, then we need
7670 to handle it differently. */
7671 ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
7672 lt_index);
7673 if (function != line_info->function)
7675 function = line_info->function;
7677 /* Set the address register to the first line in the function. */
7678 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7679 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7680 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7681 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7683 else
7685 /* ??? See the DW_LNS_advance_pc comment above. */
7686 if (0)
7688 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7689 "DW_LNS_fixed_advance_pc");
7690 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7692 else
7694 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7695 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7696 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7697 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7701 strcpy (prev_line_label, line_label);
7703 /* Emit debug info for the source file of the current line, if
7704 different from the previous line. */
7705 if (line_info->dw_file_num != current_file)
7707 current_file = line_info->dw_file_num;
7708 dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7709 dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7710 VARRAY_CHAR_PTR (file_table,
7711 current_file));
7714 /* Emit debug info for the current line number, choosing the encoding
7715 that uses the least amount of space. */
7716 if (line_info->dw_line_num != current_line)
7718 line_offset = line_info->dw_line_num - current_line;
7719 line_delta = line_offset - DWARF_LINE_BASE;
7720 current_line = line_info->dw_line_num;
7721 if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7722 dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7723 "line %lu", current_line);
7724 else
7726 dw2_asm_output_data (1, DW_LNS_advance_line,
7727 "advance to line %lu", current_line);
7728 dw2_asm_output_data_sleb128 (line_offset, NULL);
7729 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7732 else
7733 dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7735 #if 0
7736 cont:
7737 #endif
7739 lt_index++;
7741 /* If we're done with a function, end its sequence. */
7742 if (lt_index == separate_line_info_table_in_use
7743 || separate_line_info_table[lt_index].function != function)
7745 current_file = 1;
7746 current_line = 1;
7748 /* Emit debug info for the address of the end of the function. */
7749 ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
7750 if (0)
7752 dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7753 "DW_LNS_fixed_advance_pc");
7754 dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7756 else
7758 dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7759 dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7760 dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7761 dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7764 /* Output the marker for the end of this sequence. */
7765 dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7766 dw2_asm_output_data_uleb128 (1, NULL);
7767 dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7771 /* Output the marker for the end of the line number info. */
7772 ASM_OUTPUT_LABEL (asm_out_file, l2);
7775 /* Given a pointer to a tree node for some base type, return a pointer to
7776 a DIE that describes the given type.
7778 This routine must only be called for GCC type nodes that correspond to
7779 Dwarf base (fundamental) types. */
7781 static dw_die_ref
7782 base_type_die (tree type)
7784 dw_die_ref base_type_result;
7785 const char *type_name;
7786 enum dwarf_type encoding;
7787 tree name = TYPE_NAME (type);
7789 if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
7790 return 0;
7792 if (name)
7794 if (TREE_CODE (name) == TYPE_DECL)
7795 name = DECL_NAME (name);
7797 type_name = IDENTIFIER_POINTER (name);
7799 else
7800 type_name = "__unknown__";
7802 switch (TREE_CODE (type))
7804 case INTEGER_TYPE:
7805 /* Carefully distinguish the C character types, without messing
7806 up if the language is not C. Note that we check only for the names
7807 that contain spaces; other names might occur by coincidence in other
7808 languages, so we only check if main variant is char_type_node. */
7809 if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
7810 && (type == char_type_node
7811 || (TYPE_MAIN_VARIANT (type) == char_type_node
7812 && ! strcmp (type_name, "char"))
7813 || ! strcmp (type_name, "signed char")
7814 || ! strcmp (type_name, "unsigned char"))))
7816 if (TREE_UNSIGNED (type))
7817 encoding = DW_ATE_unsigned;
7818 else
7819 encoding = DW_ATE_signed;
7820 break;
7822 /* else fall through. */
7824 case CHAR_TYPE:
7825 /* GNU Pascal/Ada CHAR type. Not used in C. */
7826 if (TREE_UNSIGNED (type))
7827 encoding = DW_ATE_unsigned_char;
7828 else
7829 encoding = DW_ATE_signed_char;
7830 break;
7832 case REAL_TYPE:
7833 encoding = DW_ATE_float;
7834 break;
7836 /* Dwarf2 doesn't know anything about complex ints, so use
7837 a user defined type for it. */
7838 case COMPLEX_TYPE:
7839 if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
7840 encoding = DW_ATE_complex_float;
7841 else
7842 encoding = DW_ATE_lo_user;
7843 break;
7845 case BOOLEAN_TYPE:
7846 /* GNU FORTRAN/Ada/C++ BOOLEAN type. */
7847 encoding = DW_ATE_boolean;
7848 break;
7850 default:
7851 /* No other TREE_CODEs are Dwarf fundamental types. */
7852 abort ();
7855 base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
7856 if (demangle_name_func)
7857 type_name = (*demangle_name_func) (type_name);
7859 add_AT_string (base_type_result, DW_AT_name, type_name);
7860 add_AT_unsigned (base_type_result, DW_AT_byte_size,
7861 int_size_in_bytes (type));
7862 add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
7864 return base_type_result;
7867 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
7868 the Dwarf "root" type for the given input type. The Dwarf "root" type of
7869 a given type is generally the same as the given type, except that if the
7870 given type is a pointer or reference type, then the root type of the given
7871 type is the root type of the "basis" type for the pointer or reference
7872 type. (This definition of the "root" type is recursive.) Also, the root
7873 type of a `const' qualified type or a `volatile' qualified type is the
7874 root type of the given type without the qualifiers. */
7876 static tree
7877 root_type (tree type)
7879 if (TREE_CODE (type) == ERROR_MARK)
7880 return error_mark_node;
7882 switch (TREE_CODE (type))
7884 case ERROR_MARK:
7885 return error_mark_node;
7887 case POINTER_TYPE:
7888 case REFERENCE_TYPE:
7889 return type_main_variant (root_type (TREE_TYPE (type)));
7891 default:
7892 return type_main_variant (type);
7896 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
7897 given input type is a Dwarf "fundamental" type. Otherwise return null. */
7899 static inline int
7900 is_base_type (tree type)
7902 switch (TREE_CODE (type))
7904 case ERROR_MARK:
7905 case VOID_TYPE:
7906 case INTEGER_TYPE:
7907 case REAL_TYPE:
7908 case COMPLEX_TYPE:
7909 case BOOLEAN_TYPE:
7910 case CHAR_TYPE:
7911 return 1;
7913 case SET_TYPE:
7914 case ARRAY_TYPE:
7915 case RECORD_TYPE:
7916 case UNION_TYPE:
7917 case QUAL_UNION_TYPE:
7918 case ENUMERAL_TYPE:
7919 case FUNCTION_TYPE:
7920 case METHOD_TYPE:
7921 case POINTER_TYPE:
7922 case REFERENCE_TYPE:
7923 case FILE_TYPE:
7924 case OFFSET_TYPE:
7925 case LANG_TYPE:
7926 case VECTOR_TYPE:
7927 return 0;
7929 default:
7930 abort ();
7933 return 0;
7936 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
7937 node, return the size in bits for the type if it is a constant, or else
7938 return the alignment for the type if the type's size is not constant, or
7939 else return BITS_PER_WORD if the type actually turns out to be an
7940 ERROR_MARK node. */
7942 static inline unsigned HOST_WIDE_INT
7943 simple_type_size_in_bits (tree type)
7945 if (TREE_CODE (type) == ERROR_MARK)
7946 return BITS_PER_WORD;
7947 else if (TYPE_SIZE (type) == NULL_TREE)
7948 return 0;
7949 else if (host_integerp (TYPE_SIZE (type), 1))
7950 return tree_low_cst (TYPE_SIZE (type), 1);
7951 else
7952 return TYPE_ALIGN (type);
7955 /* Return true if the debug information for the given type should be
7956 emitted as a subrange type. */
7958 static inline bool
7959 is_subrange_type (tree type)
7961 tree subtype = TREE_TYPE (type);
7963 if (TREE_CODE (type) == INTEGER_TYPE
7964 && subtype != NULL_TREE)
7966 if (TREE_CODE (subtype) == INTEGER_TYPE)
7967 return true;
7968 if (TREE_CODE (subtype) == ENUMERAL_TYPE)
7969 return true;
7971 return false;
7974 /* Given a pointer to a tree node for a subrange type, return a pointer
7975 to a DIE that describes the given type. */
7977 static dw_die_ref
7978 subrange_type_die (tree type, dw_die_ref context_die)
7980 dw_die_ref subtype_die;
7981 dw_die_ref subrange_die;
7982 tree name = TYPE_NAME (type);
7983 const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
7985 if (context_die == NULL)
7986 context_die = comp_unit_die;
7988 if (TREE_CODE (TREE_TYPE (type)) == ENUMERAL_TYPE)
7989 subtype_die = gen_enumeration_type_die (TREE_TYPE (type), context_die);
7990 else
7991 subtype_die = base_type_die (TREE_TYPE (type));
7993 subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
7995 if (name != NULL)
7997 if (TREE_CODE (name) == TYPE_DECL)
7998 name = DECL_NAME (name);
7999 add_name_attribute (subrange_die, IDENTIFIER_POINTER (name));
8002 if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
8004 /* The size of the subrange type and its base type do not match,
8005 so we need to generate a size attribute for the subrange type. */
8006 add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8009 if (TYPE_MIN_VALUE (type) != NULL)
8010 add_bound_info (subrange_die, DW_AT_lower_bound,
8011 TYPE_MIN_VALUE (type));
8012 if (TYPE_MAX_VALUE (type) != NULL)
8013 add_bound_info (subrange_die, DW_AT_upper_bound,
8014 TYPE_MAX_VALUE (type));
8015 add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
8017 return subrange_die;
8020 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8021 entry that chains various modifiers in front of the given type. */
8023 static dw_die_ref
8024 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8025 dw_die_ref context_die)
8027 enum tree_code code = TREE_CODE (type);
8028 dw_die_ref mod_type_die = NULL;
8029 dw_die_ref sub_die = NULL;
8030 tree item_type = NULL;
8032 if (code != ERROR_MARK)
8034 tree qualified_type;
8036 /* See if we already have the appropriately qualified variant of
8037 this type. */
8038 qualified_type
8039 = get_qualified_type (type,
8040 ((is_const_type ? TYPE_QUAL_CONST : 0)
8041 | (is_volatile_type
8042 ? TYPE_QUAL_VOLATILE : 0)));
8044 /* If we do, then we can just use its DIE, if it exists. */
8045 if (qualified_type)
8047 mod_type_die = lookup_type_die (qualified_type);
8048 if (mod_type_die)
8049 return mod_type_die;
8052 /* Handle C typedef types. */
8053 if (qualified_type && TYPE_NAME (qualified_type)
8054 && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL
8055 && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type)))
8057 tree type_name = TYPE_NAME (qualified_type);
8058 tree dtype = TREE_TYPE (type_name);
8060 if (qualified_type == dtype)
8062 /* For a named type, use the typedef. */
8063 gen_type_die (qualified_type, context_die);
8064 mod_type_die = lookup_type_die (qualified_type);
8066 else if (is_const_type < TYPE_READONLY (dtype)
8067 || is_volatile_type < TYPE_VOLATILE (dtype))
8068 /* cv-unqualified version of named type. Just use the unnamed
8069 type to which it refers. */
8070 mod_type_die
8071 = modified_type_die (DECL_ORIGINAL_TYPE (type_name),
8072 is_const_type, is_volatile_type,
8073 context_die);
8075 /* Else cv-qualified version of named type; fall through. */
8078 if (mod_type_die)
8079 /* OK. */
8081 else if (is_const_type)
8083 mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8084 sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8086 else if (is_volatile_type)
8088 mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8089 sub_die = modified_type_die (type, 0, 0, context_die);
8091 else if (code == POINTER_TYPE)
8093 mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8094 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8095 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8096 #if 0
8097 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8098 #endif
8099 item_type = TREE_TYPE (type);
8101 else if (code == REFERENCE_TYPE)
8103 mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8104 add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8105 simple_type_size_in_bits (type) / BITS_PER_UNIT);
8106 #if 0
8107 add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8108 #endif
8109 item_type = TREE_TYPE (type);
8111 else if (is_subrange_type (type))
8112 mod_type_die = subrange_type_die (type, context_die);
8113 else if (is_base_type (type))
8114 mod_type_die = base_type_die (type);
8115 else
8117 gen_type_die (type, context_die);
8119 /* We have to get the type_main_variant here (and pass that to the
8120 `lookup_type_die' routine) because the ..._TYPE node we have
8121 might simply be a *copy* of some original type node (where the
8122 copy was created to help us keep track of typedef names) and
8123 that copy might have a different TYPE_UID from the original
8124 ..._TYPE node. */
8125 if (TREE_CODE (type) != VECTOR_TYPE)
8126 mod_type_die = lookup_type_die (type_main_variant (type));
8127 else
8128 /* Vectors have the debugging information in the type,
8129 not the main variant. */
8130 mod_type_die = lookup_type_die (type);
8131 if (mod_type_die == NULL)
8132 abort ();
8135 /* We want to equate the qualified type to the die below. */
8136 type = qualified_type;
8139 if (type)
8140 equate_type_number_to_die (type, mod_type_die);
8141 if (item_type)
8142 /* We must do this after the equate_type_number_to_die call, in case
8143 this is a recursive type. This ensures that the modified_type_die
8144 recursion will terminate even if the type is recursive. Recursive
8145 types are possible in Ada. */
8146 sub_die = modified_type_die (item_type,
8147 TYPE_READONLY (item_type),
8148 TYPE_VOLATILE (item_type),
8149 context_die);
8151 if (sub_die != NULL)
8152 add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8154 return mod_type_die;
8157 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8158 an enumerated type. */
8160 static inline int
8161 type_is_enum (tree type)
8163 return TREE_CODE (type) == ENUMERAL_TYPE;
8166 /* Return the DBX register number described by a given RTL node. */
8168 static unsigned int
8169 dbx_reg_number (rtx rtl)
8171 unsigned regno = REGNO (rtl);
8173 if (regno >= FIRST_PSEUDO_REGISTER)
8174 abort ();
8176 return DBX_REGISTER_NUMBER (regno);
8179 /* Return a location descriptor that designates a machine register or
8180 zero if there is none. */
8182 static dw_loc_descr_ref
8183 reg_loc_descriptor (rtx rtl)
8185 unsigned reg;
8186 rtx regs;
8188 if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8189 return 0;
8191 reg = dbx_reg_number (rtl);
8192 regs = (*targetm.dwarf_register_span) (rtl);
8194 if (HARD_REGNO_NREGS (REGNO (rtl), GET_MODE (rtl)) > 1
8195 || regs)
8196 return multiple_reg_loc_descriptor (rtl, regs);
8197 else
8198 return one_reg_loc_descriptor (reg);
8201 /* Return a location descriptor that designates a machine register for
8202 a given hard register number. */
8204 static dw_loc_descr_ref
8205 one_reg_loc_descriptor (unsigned int regno)
8207 if (regno <= 31)
8208 return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8209 else
8210 return new_loc_descr (DW_OP_regx, regno, 0);
8213 /* Given an RTL of a register, return a location descriptor that
8214 designates a value that spans more than one register. */
8216 static dw_loc_descr_ref
8217 multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8219 int nregs, size, i;
8220 unsigned reg;
8221 dw_loc_descr_ref loc_result = NULL;
8223 reg = dbx_reg_number (rtl);
8224 nregs = HARD_REGNO_NREGS (REGNO (rtl), GET_MODE (rtl));
8226 /* Simple, contiguous registers. */
8227 if (regs == NULL_RTX)
8229 size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8231 loc_result = NULL;
8232 while (nregs--)
8234 dw_loc_descr_ref t;
8236 t = one_reg_loc_descriptor (reg);
8237 add_loc_descr (&loc_result, t);
8238 add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
8239 ++reg;
8241 return loc_result;
8244 /* Now onto stupid register sets in non contiguous locations. */
8246 if (GET_CODE (regs) != PARALLEL)
8247 abort ();
8249 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8250 loc_result = NULL;
8252 for (i = 0; i < XVECLEN (regs, 0); ++i)
8254 dw_loc_descr_ref t;
8256 t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8257 add_loc_descr (&loc_result, t);
8258 size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8259 add_loc_descr (&loc_result, new_loc_descr (DW_OP_piece, size, 0));
8261 return loc_result;
8264 /* Return a location descriptor that designates a constant. */
8266 static dw_loc_descr_ref
8267 int_loc_descriptor (HOST_WIDE_INT i)
8269 enum dwarf_location_atom op;
8271 /* Pick the smallest representation of a constant, rather than just
8272 defaulting to the LEB encoding. */
8273 if (i >= 0)
8275 if (i <= 31)
8276 op = DW_OP_lit0 + i;
8277 else if (i <= 0xff)
8278 op = DW_OP_const1u;
8279 else if (i <= 0xffff)
8280 op = DW_OP_const2u;
8281 else if (HOST_BITS_PER_WIDE_INT == 32
8282 || i <= 0xffffffff)
8283 op = DW_OP_const4u;
8284 else
8285 op = DW_OP_constu;
8287 else
8289 if (i >= -0x80)
8290 op = DW_OP_const1s;
8291 else if (i >= -0x8000)
8292 op = DW_OP_const2s;
8293 else if (HOST_BITS_PER_WIDE_INT == 32
8294 || i >= -0x80000000)
8295 op = DW_OP_const4s;
8296 else
8297 op = DW_OP_consts;
8300 return new_loc_descr (op, i, 0);
8303 /* Return a location descriptor that designates a base+offset location. */
8305 static dw_loc_descr_ref
8306 based_loc_descr (unsigned int reg, HOST_WIDE_INT offset, bool can_use_fbreg)
8308 dw_loc_descr_ref loc_result;
8309 /* For the "frame base", we use the frame pointer or stack pointer
8310 registers, since the RTL for local variables is relative to one of
8311 them. */
8312 unsigned fp_reg = DBX_REGISTER_NUMBER (frame_pointer_needed
8313 ? HARD_FRAME_POINTER_REGNUM
8314 : STACK_POINTER_REGNUM);
8316 if (reg == fp_reg && can_use_fbreg)
8317 loc_result = new_loc_descr (DW_OP_fbreg, offset, 0);
8318 else if (reg <= 31)
8319 loc_result = new_loc_descr (DW_OP_breg0 + reg, offset, 0);
8320 else
8321 loc_result = new_loc_descr (DW_OP_bregx, reg, offset);
8323 return loc_result;
8326 /* Return true if this RTL expression describes a base+offset calculation. */
8328 static inline int
8329 is_based_loc (rtx rtl)
8331 return (GET_CODE (rtl) == PLUS
8332 && ((GET_CODE (XEXP (rtl, 0)) == REG
8333 && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8334 && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8337 /* The following routine converts the RTL for a variable or parameter
8338 (resident in memory) into an equivalent Dwarf representation of a
8339 mechanism for getting the address of that same variable onto the top of a
8340 hypothetical "address evaluation" stack.
8342 When creating memory location descriptors, we are effectively transforming
8343 the RTL for a memory-resident object into its Dwarf postfix expression
8344 equivalent. This routine recursively descends an RTL tree, turning
8345 it into Dwarf postfix code as it goes.
8347 MODE is the mode of the memory reference, needed to handle some
8348 autoincrement addressing modes.
8350 CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the location
8351 list for RTL. We can't use it when we are emitting location list for
8352 virtual variable frame_base_decl (i.e. a location list for DW_AT_frame_base)
8353 which describes how frame base changes when !frame_pointer_needed.
8355 Return 0 if we can't represent the location. */
8357 static dw_loc_descr_ref
8358 mem_loc_descriptor (rtx rtl, enum machine_mode mode, bool can_use_fbreg)
8360 dw_loc_descr_ref mem_loc_result = NULL;
8362 /* Note that for a dynamically sized array, the location we will generate a
8363 description of here will be the lowest numbered location which is
8364 actually within the array. That's *not* necessarily the same as the
8365 zeroth element of the array. */
8367 rtl = (*targetm.delegitimize_address) (rtl);
8369 switch (GET_CODE (rtl))
8371 case POST_INC:
8372 case POST_DEC:
8373 case POST_MODIFY:
8374 /* POST_INC and POST_DEC can be handled just like a SUBREG. So we
8375 just fall into the SUBREG code. */
8377 /* ... fall through ... */
8379 case SUBREG:
8380 /* The case of a subreg may arise when we have a local (register)
8381 variable or a formal (register) parameter which doesn't quite fill
8382 up an entire register. For now, just assume that it is
8383 legitimate to make the Dwarf info refer to the whole register which
8384 contains the given subreg. */
8385 rtl = SUBREG_REG (rtl);
8387 /* ... fall through ... */
8389 case REG:
8390 /* Whenever a register number forms a part of the description of the
8391 method for calculating the (dynamic) address of a memory resident
8392 object, DWARF rules require the register number be referred to as
8393 a "base register". This distinction is not based in any way upon
8394 what category of register the hardware believes the given register
8395 belongs to. This is strictly DWARF terminology we're dealing with
8396 here. Note that in cases where the location of a memory-resident
8397 data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8398 OP_CONST (0)) the actual DWARF location descriptor that we generate
8399 may just be OP_BASEREG (basereg). This may look deceptively like
8400 the object in question was allocated to a register (rather than in
8401 memory) so DWARF consumers need to be aware of the subtle
8402 distinction between OP_REG and OP_BASEREG. */
8403 if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8404 mem_loc_result = based_loc_descr (dbx_reg_number (rtl), 0,
8405 can_use_fbreg);
8406 break;
8408 case MEM:
8409 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
8410 can_use_fbreg);
8411 if (mem_loc_result != 0)
8412 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8413 break;
8415 case LO_SUM:
8416 rtl = XEXP (rtl, 1);
8418 /* ... fall through ... */
8420 case LABEL_REF:
8421 /* Some ports can transform a symbol ref into a label ref, because
8422 the symbol ref is too far away and has to be dumped into a constant
8423 pool. */
8424 case CONST:
8425 case SYMBOL_REF:
8426 /* Alternatively, the symbol in the constant pool might be referenced
8427 by a different symbol. */
8428 if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8430 bool marked;
8431 rtx tmp = get_pool_constant_mark (rtl, &marked);
8433 if (GET_CODE (tmp) == SYMBOL_REF)
8435 rtl = tmp;
8436 if (CONSTANT_POOL_ADDRESS_P (tmp))
8437 get_pool_constant_mark (tmp, &marked);
8438 else
8439 marked = true;
8442 /* If all references to this pool constant were optimized away,
8443 it was not output and thus we can't represent it.
8444 FIXME: might try to use DW_OP_const_value here, though
8445 DW_OP_piece complicates it. */
8446 if (!marked)
8447 return 0;
8450 mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8451 mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8452 mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8453 VARRAY_PUSH_RTX (used_rtx_varray, rtl);
8454 break;
8456 case PRE_MODIFY:
8457 /* Extract the PLUS expression nested inside and fall into
8458 PLUS code below. */
8459 rtl = XEXP (rtl, 1);
8460 goto plus;
8462 case PRE_INC:
8463 case PRE_DEC:
8464 /* Turn these into a PLUS expression and fall into the PLUS code
8465 below. */
8466 rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8467 GEN_INT (GET_CODE (rtl) == PRE_INC
8468 ? GET_MODE_UNIT_SIZE (mode)
8469 : -GET_MODE_UNIT_SIZE (mode)));
8471 /* ... fall through ... */
8473 case PLUS:
8474 plus:
8475 if (is_based_loc (rtl))
8476 mem_loc_result = based_loc_descr (dbx_reg_number (XEXP (rtl, 0)),
8477 INTVAL (XEXP (rtl, 1)),
8478 can_use_fbreg);
8479 else
8481 mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
8482 can_use_fbreg);
8483 if (mem_loc_result == 0)
8484 break;
8486 if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8487 && INTVAL (XEXP (rtl, 1)) >= 0)
8488 add_loc_descr (&mem_loc_result,
8489 new_loc_descr (DW_OP_plus_uconst,
8490 INTVAL (XEXP (rtl, 1)), 0));
8491 else
8493 add_loc_descr (&mem_loc_result,
8494 mem_loc_descriptor (XEXP (rtl, 1), mode,
8495 can_use_fbreg));
8496 add_loc_descr (&mem_loc_result,
8497 new_loc_descr (DW_OP_plus, 0, 0));
8500 break;
8502 case MULT:
8504 /* If a pseudo-reg is optimized away, it is possible for it to
8505 be replaced with a MEM containing a multiply. */
8506 dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
8507 can_use_fbreg);
8508 dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
8509 can_use_fbreg);
8511 if (op0 == 0 || op1 == 0)
8512 break;
8514 mem_loc_result = op0;
8515 add_loc_descr (&mem_loc_result, op1);
8516 add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
8517 break;
8520 case CONST_INT:
8521 mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8522 break;
8524 case ADDRESSOF:
8525 /* If this is a MEM, return its address. Otherwise, we can't
8526 represent this. */
8527 if (GET_CODE (XEXP (rtl, 0)) == MEM)
8528 return mem_loc_descriptor (XEXP (XEXP (rtl, 0), 0), mode,
8529 can_use_fbreg);
8530 else
8531 return 0;
8533 default:
8534 abort ();
8537 return mem_loc_result;
8540 /* Return a descriptor that describes the concatenation of two locations.
8541 This is typically a complex variable. */
8543 static dw_loc_descr_ref
8544 concat_loc_descriptor (rtx x0, rtx x1)
8546 dw_loc_descr_ref cc_loc_result = NULL;
8547 dw_loc_descr_ref x0_ref = loc_descriptor (x0, true);
8548 dw_loc_descr_ref x1_ref = loc_descriptor (x1, true);
8550 if (x0_ref == 0 || x1_ref == 0)
8551 return 0;
8553 cc_loc_result = x0_ref;
8554 add_loc_descr (&cc_loc_result,
8555 new_loc_descr (DW_OP_piece,
8556 GET_MODE_SIZE (GET_MODE (x0)), 0));
8558 add_loc_descr (&cc_loc_result, x1_ref);
8559 add_loc_descr (&cc_loc_result,
8560 new_loc_descr (DW_OP_piece,
8561 GET_MODE_SIZE (GET_MODE (x1)), 0));
8563 return cc_loc_result;
8566 /* Output a proper Dwarf location descriptor for a variable or parameter
8567 which is either allocated in a register or in a memory location. For a
8568 register, we just generate an OP_REG and the register number. For a
8569 memory location we provide a Dwarf postfix expression describing how to
8570 generate the (dynamic) address of the object onto the address stack.
8572 If we don't know how to describe it, return 0. */
8574 static dw_loc_descr_ref
8575 loc_descriptor (rtx rtl, bool can_use_fbreg)
8577 dw_loc_descr_ref loc_result = NULL;
8579 switch (GET_CODE (rtl))
8581 case SUBREG:
8582 /* The case of a subreg may arise when we have a local (register)
8583 variable or a formal (register) parameter which doesn't quite fill
8584 up an entire register. For now, just assume that it is
8585 legitimate to make the Dwarf info refer to the whole register which
8586 contains the given subreg. */
8587 rtl = SUBREG_REG (rtl);
8589 /* ... fall through ... */
8591 case REG:
8592 loc_result = reg_loc_descriptor (rtl);
8593 break;
8595 case MEM:
8596 loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
8597 can_use_fbreg);
8598 break;
8600 case CONCAT:
8601 loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
8602 break;
8604 case VAR_LOCATION:
8605 /* Single part. */
8606 if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
8608 loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), can_use_fbreg);
8610 /* Multiple parts. */
8611 else
8613 rtvec par_elems = XVEC (XEXP (rtl, 1), 0);
8614 int num_elem = GET_NUM_ELEM (par_elems);
8615 enum machine_mode mode;
8616 int i;
8618 /* Create the first one, so we have something to add to. */
8619 loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
8620 can_use_fbreg);
8621 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
8622 add_loc_descr (&loc_result,
8623 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
8624 for (i = 1; i < num_elem; i++)
8626 dw_loc_descr_ref temp;
8628 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
8629 can_use_fbreg);
8630 add_loc_descr (&loc_result, temp);
8631 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
8632 add_loc_descr (&loc_result,
8633 new_loc_descr (DW_OP_piece,
8634 GET_MODE_SIZE (mode), 0));
8637 break;
8639 default:
8640 abort ();
8643 return loc_result;
8646 /* Similar, but generate the descriptor from trees instead of rtl. This comes
8647 up particularly with variable length arrays. If ADDRESSP is nonzero, we are
8648 looking for an address. Otherwise, we return a value. If we can't make a
8649 descriptor, return 0. */
8651 static dw_loc_descr_ref
8652 loc_descriptor_from_tree (tree loc, int addressp)
8654 dw_loc_descr_ref ret, ret1;
8655 int indirect_p = 0;
8656 int unsignedp = TREE_UNSIGNED (TREE_TYPE (loc));
8657 enum dwarf_location_atom op;
8659 /* ??? Most of the time we do not take proper care for sign/zero
8660 extending the values properly. Hopefully this won't be a real
8661 problem... */
8663 switch (TREE_CODE (loc))
8665 case ERROR_MARK:
8666 return 0;
8668 case WITH_RECORD_EXPR:
8669 case PLACEHOLDER_EXPR:
8670 /* This case involves extracting fields from an object to determine the
8671 position of other fields. We don't try to encode this here. The
8672 only user of this is Ada, which encodes the needed information using
8673 the names of types. */
8674 return 0;
8676 case CALL_EXPR:
8677 return 0;
8679 case PREINCREMENT_EXPR:
8680 case PREDECREMENT_EXPR:
8681 case POSTINCREMENT_EXPR:
8682 case POSTDECREMENT_EXPR:
8683 /* There are no opcodes for these operations. */
8684 return 0;
8686 case ADDR_EXPR:
8687 /* We can support this only if we can look through conversions and
8688 find an INDIRECT_EXPR. */
8689 for (loc = TREE_OPERAND (loc, 0);
8690 TREE_CODE (loc) == CONVERT_EXPR || TREE_CODE (loc) == NOP_EXPR
8691 || TREE_CODE (loc) == NON_LVALUE_EXPR
8692 || TREE_CODE (loc) == VIEW_CONVERT_EXPR
8693 || TREE_CODE (loc) == SAVE_EXPR;
8694 loc = TREE_OPERAND (loc, 0))
8697 return (TREE_CODE (loc) == INDIRECT_REF
8698 ? loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp)
8699 : 0);
8701 case VAR_DECL:
8702 if (DECL_THREAD_LOCAL (loc))
8704 rtx rtl;
8706 #ifndef ASM_OUTPUT_DWARF_DTPREL
8707 /* If this is not defined, we have no way to emit the data. */
8708 return 0;
8709 #endif
8711 /* The way DW_OP_GNU_push_tls_address is specified, we can only
8712 look up addresses of objects in the current module. */
8713 if (DECL_EXTERNAL (loc))
8714 return 0;
8716 rtl = rtl_for_decl_location (loc);
8717 if (rtl == NULL_RTX)
8718 return 0;
8720 if (GET_CODE (rtl) != MEM)
8721 return 0;
8722 rtl = XEXP (rtl, 0);
8723 if (! CONSTANT_P (rtl))
8724 return 0;
8726 ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
8727 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
8728 ret->dw_loc_oprnd1.v.val_addr = rtl;
8730 ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
8731 add_loc_descr (&ret, ret1);
8733 indirect_p = 1;
8734 break;
8736 /* Fall through. */
8738 case PARM_DECL:
8740 rtx rtl = rtl_for_decl_location (loc);
8742 if (rtl == NULL_RTX)
8743 return 0;
8744 else if (CONSTANT_P (rtl))
8746 ret = new_loc_descr (DW_OP_addr, 0, 0);
8747 ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
8748 ret->dw_loc_oprnd1.v.val_addr = rtl;
8749 indirect_p = 1;
8751 else
8753 enum machine_mode mode = GET_MODE (rtl);
8755 if (GET_CODE (rtl) == MEM)
8757 indirect_p = 1;
8758 rtl = XEXP (rtl, 0);
8761 ret = mem_loc_descriptor (rtl, mode, true);
8764 break;
8766 case INDIRECT_REF:
8767 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8768 indirect_p = 1;
8769 break;
8771 case COMPOUND_EXPR:
8772 return loc_descriptor_from_tree (TREE_OPERAND (loc, 1), addressp);
8774 case NOP_EXPR:
8775 case CONVERT_EXPR:
8776 case NON_LVALUE_EXPR:
8777 case VIEW_CONVERT_EXPR:
8778 case SAVE_EXPR:
8779 case MODIFY_EXPR:
8780 return loc_descriptor_from_tree (TREE_OPERAND (loc, 0), addressp);
8782 case COMPONENT_REF:
8783 case BIT_FIELD_REF:
8784 case ARRAY_REF:
8785 case ARRAY_RANGE_REF:
8787 tree obj, offset;
8788 HOST_WIDE_INT bitsize, bitpos, bytepos;
8789 enum machine_mode mode;
8790 int volatilep;
8792 obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
8793 &unsignedp, &volatilep);
8795 if (obj == loc)
8796 return 0;
8798 ret = loc_descriptor_from_tree (obj, 1);
8799 if (ret == 0
8800 || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
8801 return 0;
8803 if (offset != NULL_TREE)
8805 /* Variable offset. */
8806 add_loc_descr (&ret, loc_descriptor_from_tree (offset, 0));
8807 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
8810 if (!addressp)
8811 indirect_p = 1;
8813 bytepos = bitpos / BITS_PER_UNIT;
8814 if (bytepos > 0)
8815 add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
8816 else if (bytepos < 0)
8818 add_loc_descr (&ret, int_loc_descriptor (bytepos));
8819 add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
8821 break;
8824 case INTEGER_CST:
8825 if (host_integerp (loc, 0))
8826 ret = int_loc_descriptor (tree_low_cst (loc, 0));
8827 else
8828 return 0;
8829 break;
8831 case CONSTRUCTOR:
8833 /* Get an RTL for this, if something has been emitted. */
8834 rtx rtl = lookup_constant_def (loc);
8835 enum machine_mode mode;
8837 if (GET_CODE (rtl) != MEM)
8838 return 0;
8839 mode = GET_MODE (rtl);
8840 rtl = XEXP (rtl, 0);
8842 rtl = (*targetm.delegitimize_address) (rtl);
8844 indirect_p = 1;
8845 ret = mem_loc_descriptor (rtl, mode, true);
8846 break;
8849 case TRUTH_AND_EXPR:
8850 case TRUTH_ANDIF_EXPR:
8851 case BIT_AND_EXPR:
8852 op = DW_OP_and;
8853 goto do_binop;
8855 case TRUTH_XOR_EXPR:
8856 case BIT_XOR_EXPR:
8857 op = DW_OP_xor;
8858 goto do_binop;
8860 case TRUTH_OR_EXPR:
8861 case TRUTH_ORIF_EXPR:
8862 case BIT_IOR_EXPR:
8863 op = DW_OP_or;
8864 goto do_binop;
8866 case FLOOR_DIV_EXPR:
8867 case CEIL_DIV_EXPR:
8868 case ROUND_DIV_EXPR:
8869 case TRUNC_DIV_EXPR:
8870 op = DW_OP_div;
8871 goto do_binop;
8873 case MINUS_EXPR:
8874 op = DW_OP_minus;
8875 goto do_binop;
8877 case FLOOR_MOD_EXPR:
8878 case CEIL_MOD_EXPR:
8879 case ROUND_MOD_EXPR:
8880 case TRUNC_MOD_EXPR:
8881 op = DW_OP_mod;
8882 goto do_binop;
8884 case MULT_EXPR:
8885 op = DW_OP_mul;
8886 goto do_binop;
8888 case LSHIFT_EXPR:
8889 op = DW_OP_shl;
8890 goto do_binop;
8892 case RSHIFT_EXPR:
8893 op = (unsignedp ? DW_OP_shr : DW_OP_shra);
8894 goto do_binop;
8896 case PLUS_EXPR:
8897 if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
8898 && host_integerp (TREE_OPERAND (loc, 1), 0))
8900 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8901 if (ret == 0)
8902 return 0;
8904 add_loc_descr (&ret,
8905 new_loc_descr (DW_OP_plus_uconst,
8906 tree_low_cst (TREE_OPERAND (loc, 1),
8908 0));
8909 break;
8912 op = DW_OP_plus;
8913 goto do_binop;
8915 case LE_EXPR:
8916 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8917 return 0;
8919 op = DW_OP_le;
8920 goto do_binop;
8922 case GE_EXPR:
8923 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8924 return 0;
8926 op = DW_OP_ge;
8927 goto do_binop;
8929 case LT_EXPR:
8930 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8931 return 0;
8933 op = DW_OP_lt;
8934 goto do_binop;
8936 case GT_EXPR:
8937 if (TREE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
8938 return 0;
8940 op = DW_OP_gt;
8941 goto do_binop;
8943 case EQ_EXPR:
8944 op = DW_OP_eq;
8945 goto do_binop;
8947 case NE_EXPR:
8948 op = DW_OP_ne;
8949 goto do_binop;
8951 do_binop:
8952 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8953 ret1 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
8954 if (ret == 0 || ret1 == 0)
8955 return 0;
8957 add_loc_descr (&ret, ret1);
8958 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
8959 break;
8961 case TRUTH_NOT_EXPR:
8962 case BIT_NOT_EXPR:
8963 op = DW_OP_not;
8964 goto do_unop;
8966 case ABS_EXPR:
8967 op = DW_OP_abs;
8968 goto do_unop;
8970 case NEGATE_EXPR:
8971 op = DW_OP_neg;
8972 goto do_unop;
8974 do_unop:
8975 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8976 if (ret == 0)
8977 return 0;
8979 add_loc_descr (&ret, new_loc_descr (op, 0, 0));
8980 break;
8982 case MAX_EXPR:
8983 loc = build (COND_EXPR, TREE_TYPE (loc),
8984 build (LT_EXPR, integer_type_node,
8985 TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
8986 TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
8988 /* ... fall through ... */
8990 case COND_EXPR:
8992 dw_loc_descr_ref lhs
8993 = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
8994 dw_loc_descr_ref rhs
8995 = loc_descriptor_from_tree (TREE_OPERAND (loc, 2), 0);
8996 dw_loc_descr_ref bra_node, jump_node, tmp;
8998 ret = loc_descriptor_from_tree (TREE_OPERAND (loc, 0), 0);
8999 if (ret == 0 || lhs == 0 || rhs == 0)
9000 return 0;
9002 bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9003 add_loc_descr (&ret, bra_node);
9005 add_loc_descr (&ret, rhs);
9006 jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9007 add_loc_descr (&ret, jump_node);
9009 add_loc_descr (&ret, lhs);
9010 bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9011 bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9013 /* ??? Need a node to point the skip at. Use a nop. */
9014 tmp = new_loc_descr (DW_OP_nop, 0, 0);
9015 add_loc_descr (&ret, tmp);
9016 jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9017 jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9019 break;
9021 case EXPR_WITH_FILE_LOCATION:
9022 return loc_descriptor_from_tree (EXPR_WFL_NODE (loc), addressp);
9024 case FIX_TRUNC_EXPR:
9025 case FIX_CEIL_EXPR:
9026 case FIX_FLOOR_EXPR:
9027 case FIX_ROUND_EXPR:
9028 return 0;
9030 default:
9031 /* Leave front-end specific codes as simply unknown. This comes
9032 up, for instance, with the C STMT_EXPR. */
9033 if ((unsigned int) TREE_CODE (loc)
9034 >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9035 return 0;
9037 #ifdef ENABLE_CHECKING
9038 /* Otherwise this is a generic code; we should just lists all of
9039 these explicitly. Aborting means we forgot one. */
9040 abort ();
9041 #else
9042 /* In a release build, we want to degrade gracefully: better to
9043 generate incomplete debugging information than to crash. */
9044 return NULL;
9045 #endif
9048 /* Show if we can't fill the request for an address. */
9049 if (addressp && indirect_p == 0)
9050 return 0;
9052 /* If we've got an address and don't want one, dereference. */
9053 if (!addressp && indirect_p > 0)
9055 HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9057 if (size > DWARF2_ADDR_SIZE || size == -1)
9058 return 0;
9059 else if (size == DWARF2_ADDR_SIZE)
9060 op = DW_OP_deref;
9061 else
9062 op = DW_OP_deref_size;
9064 add_loc_descr (&ret, new_loc_descr (op, size, 0));
9067 return ret;
9070 /* Given a value, round it up to the lowest multiple of `boundary'
9071 which is not less than the value itself. */
9073 static inline HOST_WIDE_INT
9074 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9076 return (((value + boundary - 1) / boundary) * boundary);
9079 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9080 pointer to the declared type for the relevant field variable, or return
9081 `integer_type_node' if the given node turns out to be an
9082 ERROR_MARK node. */
9084 static inline tree
9085 field_type (tree decl)
9087 tree type;
9089 if (TREE_CODE (decl) == ERROR_MARK)
9090 return integer_type_node;
9092 type = DECL_BIT_FIELD_TYPE (decl);
9093 if (type == NULL_TREE)
9094 type = TREE_TYPE (decl);
9096 return type;
9099 /* Given a pointer to a tree node, return the alignment in bits for
9100 it, or else return BITS_PER_WORD if the node actually turns out to
9101 be an ERROR_MARK node. */
9103 static inline unsigned
9104 simple_type_align_in_bits (tree type)
9106 return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9109 static inline unsigned
9110 simple_decl_align_in_bits (tree decl)
9112 return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9115 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9116 lowest addressed byte of the "containing object" for the given FIELD_DECL,
9117 or return 0 if we are unable to determine what that offset is, either
9118 because the argument turns out to be a pointer to an ERROR_MARK node, or
9119 because the offset is actually variable. (We can't handle the latter case
9120 just yet). */
9122 static HOST_WIDE_INT
9123 field_byte_offset (tree decl)
9125 unsigned int type_align_in_bits;
9126 unsigned int decl_align_in_bits;
9127 unsigned HOST_WIDE_INT type_size_in_bits;
9128 HOST_WIDE_INT object_offset_in_bits;
9129 tree type;
9130 tree field_size_tree;
9131 HOST_WIDE_INT bitpos_int;
9132 HOST_WIDE_INT deepest_bitpos;
9133 unsigned HOST_WIDE_INT field_size_in_bits;
9135 if (TREE_CODE (decl) == ERROR_MARK)
9136 return 0;
9137 else if (TREE_CODE (decl) != FIELD_DECL)
9138 abort ();
9140 type = field_type (decl);
9141 field_size_tree = DECL_SIZE (decl);
9143 /* The size could be unspecified if there was an error, or for
9144 a flexible array member. */
9145 if (! field_size_tree)
9146 field_size_tree = bitsize_zero_node;
9148 /* We cannot yet cope with fields whose positions are variable, so
9149 for now, when we see such things, we simply return 0. Someday, we may
9150 be able to handle such cases, but it will be damn difficult. */
9151 if (! host_integerp (bit_position (decl), 0))
9152 return 0;
9154 bitpos_int = int_bit_position (decl);
9156 /* If we don't know the size of the field, pretend it's a full word. */
9157 if (host_integerp (field_size_tree, 1))
9158 field_size_in_bits = tree_low_cst (field_size_tree, 1);
9159 else
9160 field_size_in_bits = BITS_PER_WORD;
9162 type_size_in_bits = simple_type_size_in_bits (type);
9163 type_align_in_bits = simple_type_align_in_bits (type);
9164 decl_align_in_bits = simple_decl_align_in_bits (decl);
9166 /* The GCC front-end doesn't make any attempt to keep track of the starting
9167 bit offset (relative to the start of the containing structure type) of the
9168 hypothetical "containing object" for a bit-field. Thus, when computing
9169 the byte offset value for the start of the "containing object" of a
9170 bit-field, we must deduce this information on our own. This can be rather
9171 tricky to do in some cases. For example, handling the following structure
9172 type definition when compiling for an i386/i486 target (which only aligns
9173 long long's to 32-bit boundaries) can be very tricky:
9175 struct S { int field1; long long field2:31; };
9177 Fortunately, there is a simple rule-of-thumb which can be used in such
9178 cases. When compiling for an i386/i486, GCC will allocate 8 bytes for the
9179 structure shown above. It decides to do this based upon one simple rule
9180 for bit-field allocation. GCC allocates each "containing object" for each
9181 bit-field at the first (i.e. lowest addressed) legitimate alignment
9182 boundary (based upon the required minimum alignment for the declared type
9183 of the field) which it can possibly use, subject to the condition that
9184 there is still enough available space remaining in the containing object
9185 (when allocated at the selected point) to fully accommodate all of the
9186 bits of the bit-field itself.
9188 This simple rule makes it obvious why GCC allocates 8 bytes for each
9189 object of the structure type shown above. When looking for a place to
9190 allocate the "containing object" for `field2', the compiler simply tries
9191 to allocate a 64-bit "containing object" at each successive 32-bit
9192 boundary (starting at zero) until it finds a place to allocate that 64-
9193 bit field such that at least 31 contiguous (and previously unallocated)
9194 bits remain within that selected 64 bit field. (As it turns out, for the
9195 example above, the compiler finds it is OK to allocate the "containing
9196 object" 64-bit field at bit-offset zero within the structure type.)
9198 Here we attempt to work backwards from the limited set of facts we're
9199 given, and we try to deduce from those facts, where GCC must have believed
9200 that the containing object started (within the structure type). The value
9201 we deduce is then used (by the callers of this routine) to generate
9202 DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9203 and, in the case of DW_AT_location, regular fields as well). */
9205 /* Figure out the bit-distance from the start of the structure to the
9206 "deepest" bit of the bit-field. */
9207 deepest_bitpos = bitpos_int + field_size_in_bits;
9209 /* This is the tricky part. Use some fancy footwork to deduce where the
9210 lowest addressed bit of the containing object must be. */
9211 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9213 /* Round up to type_align by default. This works best for bitfields. */
9214 object_offset_in_bits += type_align_in_bits - 1;
9215 object_offset_in_bits /= type_align_in_bits;
9216 object_offset_in_bits *= type_align_in_bits;
9218 if (object_offset_in_bits > bitpos_int)
9220 /* Sigh, the decl must be packed. */
9221 object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9223 /* Round up to decl_align instead. */
9224 object_offset_in_bits += decl_align_in_bits - 1;
9225 object_offset_in_bits /= decl_align_in_bits;
9226 object_offset_in_bits *= decl_align_in_bits;
9229 return object_offset_in_bits / BITS_PER_UNIT;
9232 /* The following routines define various Dwarf attributes and any data
9233 associated with them. */
9235 /* Add a location description attribute value to a DIE.
9237 This emits location attributes suitable for whole variables and
9238 whole parameters. Note that the location attributes for struct fields are
9239 generated by the routine `data_member_location_attribute' below. */
9241 static inline void
9242 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9243 dw_loc_descr_ref descr)
9245 if (descr != 0)
9246 add_AT_loc (die, attr_kind, descr);
9249 /* Attach the specialized form of location attribute used for data members of
9250 struct and union types. In the special case of a FIELD_DECL node which
9251 represents a bit-field, the "offset" part of this special location
9252 descriptor must indicate the distance in bytes from the lowest-addressed
9253 byte of the containing struct or union type to the lowest-addressed byte of
9254 the "containing object" for the bit-field. (See the `field_byte_offset'
9255 function above).
9257 For any given bit-field, the "containing object" is a hypothetical object
9258 (of some integral or enum type) within which the given bit-field lives. The
9259 type of this hypothetical "containing object" is always the same as the
9260 declared type of the individual bit-field itself (for GCC anyway... the
9261 DWARF spec doesn't actually mandate this). Note that it is the size (in
9262 bytes) of the hypothetical "containing object" which will be given in the
9263 DW_AT_byte_size attribute for this bit-field. (See the
9264 `byte_size_attribute' function below.) It is also used when calculating the
9265 value of the DW_AT_bit_offset attribute. (See the `bit_offset_attribute'
9266 function below.) */
9268 static void
9269 add_data_member_location_attribute (dw_die_ref die, tree decl)
9271 HOST_WIDE_INT offset;
9272 dw_loc_descr_ref loc_descr = 0;
9274 if (TREE_CODE (decl) == TREE_VEC)
9276 /* We're working on the TAG_inheritance for a base class. */
9277 if (TREE_VIA_VIRTUAL (decl) && is_cxx ())
9279 /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9280 aren't at a fixed offset from all (sub)objects of the same
9281 type. We need to extract the appropriate offset from our
9282 vtable. The following dwarf expression means
9284 BaseAddr = ObAddr + *((*ObAddr) - Offset)
9286 This is specific to the V3 ABI, of course. */
9288 dw_loc_descr_ref tmp;
9290 /* Make a copy of the object address. */
9291 tmp = new_loc_descr (DW_OP_dup, 0, 0);
9292 add_loc_descr (&loc_descr, tmp);
9294 /* Extract the vtable address. */
9295 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9296 add_loc_descr (&loc_descr, tmp);
9298 /* Calculate the address of the offset. */
9299 offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9300 if (offset >= 0)
9301 abort ();
9303 tmp = int_loc_descriptor (-offset);
9304 add_loc_descr (&loc_descr, tmp);
9305 tmp = new_loc_descr (DW_OP_minus, 0, 0);
9306 add_loc_descr (&loc_descr, tmp);
9308 /* Extract the offset. */
9309 tmp = new_loc_descr (DW_OP_deref, 0, 0);
9310 add_loc_descr (&loc_descr, tmp);
9312 /* Add it to the object address. */
9313 tmp = new_loc_descr (DW_OP_plus, 0, 0);
9314 add_loc_descr (&loc_descr, tmp);
9316 else
9317 offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9319 else
9320 offset = field_byte_offset (decl);
9322 if (! loc_descr)
9324 enum dwarf_location_atom op;
9326 /* The DWARF2 standard says that we should assume that the structure
9327 address is already on the stack, so we can specify a structure field
9328 address by using DW_OP_plus_uconst. */
9330 #ifdef MIPS_DEBUGGING_INFO
9331 /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9332 operator correctly. It works only if we leave the offset on the
9333 stack. */
9334 op = DW_OP_constu;
9335 #else
9336 op = DW_OP_plus_uconst;
9337 #endif
9339 loc_descr = new_loc_descr (op, offset, 0);
9342 add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9345 /* Writes integer values to dw_vec_const array. */
9347 static void
9348 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9350 while (size != 0)
9352 *dest++ = val & 0xff;
9353 val >>= 8;
9354 --size;
9358 /* Reads integers from dw_vec_const array. Inverse of insert_int. */
9360 static HOST_WIDE_INT
9361 extract_int (const unsigned char *src, unsigned int size)
9363 HOST_WIDE_INT val = 0;
9365 src += size;
9366 while (size != 0)
9368 val <<= 8;
9369 val |= *--src & 0xff;
9370 --size;
9372 return val;
9375 /* Writes floating point values to dw_vec_const array. */
9377 static void
9378 insert_float (rtx rtl, unsigned char *array)
9380 REAL_VALUE_TYPE rv;
9381 long val[4];
9382 int i;
9384 REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9385 real_to_target (val, &rv, GET_MODE (rtl));
9387 /* real_to_target puts 32-bit pieces in each long. Pack them. */
9388 for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9390 insert_int (val[i], 4, array);
9391 array += 4;
9395 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
9396 does not have a "location" either in memory or in a register. These
9397 things can arise in GNU C when a constant is passed as an actual parameter
9398 to an inlined function. They can also arise in C++ where declared
9399 constants do not necessarily get memory "homes". */
9401 static void
9402 add_const_value_attribute (dw_die_ref die, rtx rtl)
9404 switch (GET_CODE (rtl))
9406 case CONST_INT:
9408 HOST_WIDE_INT val = INTVAL (rtl);
9410 if (val < 0)
9411 add_AT_int (die, DW_AT_const_value, val);
9412 else
9413 add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9415 break;
9417 case CONST_DOUBLE:
9418 /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9419 floating-point constant. A CONST_DOUBLE is used whenever the
9420 constant requires more than one word in order to be adequately
9421 represented. We output CONST_DOUBLEs as blocks. */
9423 enum machine_mode mode = GET_MODE (rtl);
9425 if (GET_MODE_CLASS (mode) == MODE_FLOAT)
9427 unsigned int length = GET_MODE_SIZE (mode);
9428 unsigned char *array = ggc_alloc (length);
9430 insert_float (rtl, array);
9431 add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9433 else
9435 /* ??? We really should be using HOST_WIDE_INT throughout. */
9436 if (HOST_BITS_PER_LONG != HOST_BITS_PER_WIDE_INT)
9437 abort ();
9439 add_AT_long_long (die, DW_AT_const_value,
9440 CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9443 break;
9445 case CONST_VECTOR:
9447 enum machine_mode mode = GET_MODE (rtl);
9448 unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9449 unsigned int length = CONST_VECTOR_NUNITS (rtl);
9450 unsigned char *array = ggc_alloc (length * elt_size);
9451 unsigned int i;
9452 unsigned char *p;
9454 if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT)
9456 for (i = 0, p = array; i < length; i++, p += elt_size)
9458 rtx elt = CONST_VECTOR_ELT (rtl, i);
9459 HOST_WIDE_INT lo, hi;
9460 if (GET_CODE (elt) == CONST_INT)
9462 lo = INTVAL (elt);
9463 hi = -(lo < 0);
9465 else if (GET_CODE (elt) == CONST_DOUBLE)
9467 lo = CONST_DOUBLE_LOW (elt);
9468 hi = CONST_DOUBLE_HIGH (elt);
9470 else
9471 abort ();
9473 if (elt_size <= sizeof (HOST_WIDE_INT))
9474 insert_int (lo, elt_size, p);
9475 else if (elt_size == 2 * sizeof (HOST_WIDE_INT))
9477 unsigned char *p0 = p;
9478 unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9480 if (WORDS_BIG_ENDIAN)
9482 p0 = p1;
9483 p1 = p;
9485 insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9486 insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9488 else
9489 abort ();
9492 else if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
9494 for (i = 0, p = array; i < length; i++, p += elt_size)
9496 rtx elt = CONST_VECTOR_ELT (rtl, i);
9497 insert_float (elt, p);
9500 else
9501 abort ();
9503 add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9505 break;
9507 case CONST_STRING:
9508 add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9509 break;
9511 case SYMBOL_REF:
9512 case LABEL_REF:
9513 case CONST:
9514 add_AT_addr (die, DW_AT_const_value, rtl);
9515 VARRAY_PUSH_RTX (used_rtx_varray, rtl);
9516 break;
9518 case PLUS:
9519 /* In cases where an inlined instance of an inline function is passed
9520 the address of an `auto' variable (which is local to the caller) we
9521 can get a situation where the DECL_RTL of the artificial local
9522 variable (for the inlining) which acts as a stand-in for the
9523 corresponding formal parameter (of the inline function) will look
9524 like (plus:SI (reg:SI FRAME_PTR) (const_int ...)). This is not
9525 exactly a compile-time constant expression, but it isn't the address
9526 of the (artificial) local variable either. Rather, it represents the
9527 *value* which the artificial local variable always has during its
9528 lifetime. We currently have no way to represent such quasi-constant
9529 values in Dwarf, so for now we just punt and generate nothing. */
9530 break;
9532 default:
9533 /* No other kinds of rtx should be possible here. */
9534 abort ();
9539 static rtx
9540 rtl_for_decl_location (tree decl)
9542 rtx rtl;
9544 /* Here we have to decide where we are going to say the parameter "lives"
9545 (as far as the debugger is concerned). We only have a couple of
9546 choices. GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9548 DECL_RTL normally indicates where the parameter lives during most of the
9549 activation of the function. If optimization is enabled however, this
9550 could be either NULL or else a pseudo-reg. Both of those cases indicate
9551 that the parameter doesn't really live anywhere (as far as the code
9552 generation parts of GCC are concerned) during most of the function's
9553 activation. That will happen (for example) if the parameter is never
9554 referenced within the function.
9556 We could just generate a location descriptor here for all non-NULL
9557 non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9558 a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9559 where DECL_RTL is NULL or is a pseudo-reg.
9561 Note however that we can only get away with using DECL_INCOMING_RTL as
9562 a backup substitute for DECL_RTL in certain limited cases. In cases
9563 where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9564 we can be sure that the parameter was passed using the same type as it is
9565 declared to have within the function, and that its DECL_INCOMING_RTL
9566 points us to a place where a value of that type is passed.
9568 In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9569 we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9570 because in these cases DECL_INCOMING_RTL points us to a value of some
9571 type which is *different* from the type of the parameter itself. Thus,
9572 if we tried to use DECL_INCOMING_RTL to generate a location attribute in
9573 such cases, the debugger would end up (for example) trying to fetch a
9574 `float' from a place which actually contains the first part of a
9575 `double'. That would lead to really incorrect and confusing
9576 output at debug-time.
9578 So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
9579 in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl). There
9580 are a couple of exceptions however. On little-endian machines we can
9581 get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
9582 not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
9583 an integral type that is smaller than TREE_TYPE (decl). These cases arise
9584 when (on a little-endian machine) a non-prototyped function has a
9585 parameter declared to be of type `short' or `char'. In such cases,
9586 TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
9587 be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
9588 passed `int' value. If the debugger then uses that address to fetch
9589 a `short' or a `char' (on a little-endian machine) the result will be
9590 the correct data, so we allow for such exceptional cases below.
9592 Note that our goal here is to describe the place where the given formal
9593 parameter lives during most of the function's activation (i.e. between the
9594 end of the prologue and the start of the epilogue). We'll do that as best
9595 as we can. Note however that if the given formal parameter is modified
9596 sometime during the execution of the function, then a stack backtrace (at
9597 debug-time) will show the function as having been called with the *new*
9598 value rather than the value which was originally passed in. This happens
9599 rarely enough that it is not a major problem, but it *is* a problem, and
9600 I'd like to fix it.
9602 A future version of dwarf2out.c may generate two additional attributes for
9603 any given DW_TAG_formal_parameter DIE which will describe the "passed
9604 type" and the "passed location" for the given formal parameter in addition
9605 to the attributes we now generate to indicate the "declared type" and the
9606 "active location" for each parameter. This additional set of attributes
9607 could be used by debuggers for stack backtraces. Separately, note that
9608 sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
9609 This happens (for example) for inlined-instances of inline function formal
9610 parameters which are never referenced. This really shouldn't be
9611 happening. All PARM_DECL nodes should get valid non-NULL
9612 DECL_INCOMING_RTL values, but integrate.c doesn't currently generate these
9613 values for inlined instances of inline function parameters, so when we see
9614 such cases, we are just out-of-luck for the time being (until integrate.c
9615 gets fixed). */
9617 /* Use DECL_RTL as the "location" unless we find something better. */
9618 rtl = DECL_RTL_IF_SET (decl);
9620 /* When generating abstract instances, ignore everything except
9621 constants, symbols living in memory, and symbols living in
9622 fixed registers. */
9623 if (! reload_completed)
9625 if (rtl
9626 && (CONSTANT_P (rtl)
9627 || (GET_CODE (rtl) == MEM
9628 && CONSTANT_P (XEXP (rtl, 0)))
9629 || (GET_CODE (rtl) == REG
9630 && TREE_CODE (decl) == VAR_DECL
9631 && TREE_STATIC (decl))))
9633 rtl = (*targetm.delegitimize_address) (rtl);
9634 return rtl;
9636 rtl = NULL_RTX;
9638 else if (TREE_CODE (decl) == PARM_DECL)
9640 if (rtl == NULL_RTX || is_pseudo_reg (rtl))
9642 tree declared_type = TREE_TYPE (decl);
9643 tree passed_type = DECL_ARG_TYPE (decl);
9644 enum machine_mode dmode = TYPE_MODE (declared_type);
9645 enum machine_mode pmode = TYPE_MODE (passed_type);
9647 /* This decl represents a formal parameter which was optimized out.
9648 Note that DECL_INCOMING_RTL may be NULL in here, but we handle
9649 all cases where (rtl == NULL_RTX) just below. */
9650 if (dmode == pmode)
9651 rtl = DECL_INCOMING_RTL (decl);
9652 else if (SCALAR_INT_MODE_P (dmode)
9653 && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
9654 && DECL_INCOMING_RTL (decl))
9656 rtx inc = DECL_INCOMING_RTL (decl);
9657 if (REG_P (inc))
9658 rtl = inc;
9659 else if (GET_CODE (inc) == MEM)
9661 if (BYTES_BIG_ENDIAN)
9662 rtl = adjust_address_nv (inc, dmode,
9663 GET_MODE_SIZE (pmode)
9664 - GET_MODE_SIZE (dmode));
9665 else
9666 rtl = inc;
9671 /* If the parm was passed in registers, but lives on the stack, then
9672 make a big endian correction if the mode of the type of the
9673 parameter is not the same as the mode of the rtl. */
9674 /* ??? This is the same series of checks that are made in dbxout.c before
9675 we reach the big endian correction code there. It isn't clear if all
9676 of these checks are necessary here, but keeping them all is the safe
9677 thing to do. */
9678 else if (GET_CODE (rtl) == MEM
9679 && XEXP (rtl, 0) != const0_rtx
9680 && ! CONSTANT_P (XEXP (rtl, 0))
9681 /* Not passed in memory. */
9682 && GET_CODE (DECL_INCOMING_RTL (decl)) != MEM
9683 /* Not passed by invisible reference. */
9684 && (GET_CODE (XEXP (rtl, 0)) != REG
9685 || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
9686 || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
9687 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
9688 || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
9689 #endif
9691 /* Big endian correction check. */
9692 && BYTES_BIG_ENDIAN
9693 && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
9694 && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
9695 < UNITS_PER_WORD))
9697 int offset = (UNITS_PER_WORD
9698 - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
9700 rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
9701 plus_constant (XEXP (rtl, 0), offset));
9705 if (rtl != NULL_RTX)
9707 rtl = eliminate_regs (rtl, 0, NULL_RTX);
9708 #ifdef LEAF_REG_REMAP
9709 if (current_function_uses_only_leaf_regs)
9710 leaf_renumber_regs_insn (rtl);
9711 #endif
9714 /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
9715 and will have been substituted directly into all expressions that use it.
9716 C does not have such a concept, but C++ and other languages do. */
9717 else if (TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
9719 /* If a variable is initialized with a string constant without embedded
9720 zeros, build CONST_STRING. */
9721 if (TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
9722 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
9724 tree arrtype = TREE_TYPE (decl);
9725 tree enttype = TREE_TYPE (arrtype);
9726 tree domain = TYPE_DOMAIN (arrtype);
9727 tree init = DECL_INITIAL (decl);
9728 enum machine_mode mode = TYPE_MODE (enttype);
9730 if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
9731 && domain
9732 && integer_zerop (TYPE_MIN_VALUE (domain))
9733 && compare_tree_int (TYPE_MAX_VALUE (domain),
9734 TREE_STRING_LENGTH (init) - 1) == 0
9735 && ((size_t) TREE_STRING_LENGTH (init)
9736 == strlen (TREE_STRING_POINTER (init)) + 1))
9737 rtl = gen_rtx_CONST_STRING (VOIDmode, TREE_STRING_POINTER (init));
9739 /* If the initializer is something that we know will expand into an
9740 immediate RTL constant, expand it now. Expanding anything else
9741 tends to produce unresolved symbols; see debug/5770 and c++/6381. */
9742 else if (TREE_CODE (DECL_INITIAL (decl)) == INTEGER_CST
9743 || TREE_CODE (DECL_INITIAL (decl)) == REAL_CST)
9745 rtl = expand_expr (DECL_INITIAL (decl), NULL_RTX, VOIDmode,
9746 EXPAND_INITIALIZER);
9747 /* If expand_expr returns a MEM, it wasn't immediate. */
9748 if (rtl && GET_CODE (rtl) == MEM)
9749 abort ();
9753 if (rtl)
9754 rtl = (*targetm.delegitimize_address) (rtl);
9756 /* If we don't look past the constant pool, we risk emitting a
9757 reference to a constant pool entry that isn't referenced from
9758 code, and thus is not emitted. */
9759 if (rtl)
9760 rtl = avoid_constant_pool_reference (rtl);
9762 return rtl;
9765 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
9766 data attribute for a variable or a parameter. We generate the
9767 DW_AT_const_value attribute only in those cases where the given variable
9768 or parameter does not have a true "location" either in memory or in a
9769 register. This can happen (for example) when a constant is passed as an
9770 actual argument in a call to an inline function. (It's possible that
9771 these things can crop up in other ways also.) Note that one type of
9772 constant value which can be passed into an inlined function is a constant
9773 pointer. This can happen for example if an actual argument in an inlined
9774 function call evaluates to a compile-time constant address. */
9776 static void
9777 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
9778 enum dwarf_attribute attr)
9780 rtx rtl;
9781 dw_loc_descr_ref descr;
9782 var_loc_list *loc_list;
9784 if (TREE_CODE (decl) == ERROR_MARK)
9785 return;
9786 else if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != PARM_DECL)
9787 abort ();
9789 /* See if we possibly have multiple locations for this variable. */
9790 loc_list = lookup_decl_loc (decl);
9792 /* If it truly has multiple locations, the first and last node will
9793 differ. */
9794 if (loc_list && loc_list->first != loc_list->last)
9796 const char *secname;
9797 const char *endname;
9798 dw_loc_list_ref list;
9799 rtx varloc;
9800 struct var_loc_node *node;
9802 /* We need to figure out what section we should use as the base
9803 for the address ranges where a given location is valid.
9804 1. If this particular DECL has a section associated with it,
9805 use that.
9806 2. If this function has a section associated with it, use
9807 that.
9808 3. Otherwise, use the text section.
9809 XXX: If you split a variable across multiple sections, this
9810 won't notice. */
9812 if (DECL_SECTION_NAME (decl))
9814 tree sectree = DECL_SECTION_NAME (decl);
9815 secname = TREE_STRING_POINTER (sectree);
9817 else if (current_function_decl
9818 && DECL_SECTION_NAME (current_function_decl))
9820 tree sectree = DECL_SECTION_NAME (current_function_decl);
9821 secname = TREE_STRING_POINTER (sectree);
9823 else
9824 secname = text_section_label;
9826 /* Now that we know what section we are using for a base,
9827 actually construct the list of locations.
9828 The first location information is what is passed to the
9829 function that creates the location list, and the remaining
9830 locations just get added on to that list.
9831 Note that we only know the start address for a location
9832 (IE location changes), so to build the range, we use
9833 the range [current location start, next location start].
9834 This means we have to special case the last node, and generate
9835 a range of [last location start, end of function label]. */
9837 node = loc_list->first;
9838 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9839 list = new_loc_list (loc_descriptor (varloc, attr != DW_AT_frame_base),
9840 node->label, node->next->label, secname, 1);
9841 node = node->next;
9843 for (; node->next; node = node->next)
9844 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
9846 /* The variable has a location between NODE->LABEL and
9847 NODE->NEXT->LABEL. */
9848 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9849 add_loc_descr_to_loc_list (&list,
9850 loc_descriptor (varloc,
9851 attr != DW_AT_frame_base),
9852 node->label, node->next->label, secname);
9855 /* If the variable has a location at the last label
9856 it keeps its location until the end of function. */
9857 if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
9859 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
9861 varloc = NOTE_VAR_LOCATION (node->var_loc_note);
9862 if (!current_function_decl)
9863 endname = text_end_label;
9864 else
9866 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
9867 current_function_funcdef_no);
9868 endname = ggc_strdup (label_id);
9870 add_loc_descr_to_loc_list (&list,
9871 loc_descriptor (varloc,
9872 attr != DW_AT_frame_base),
9873 node->label, endname, secname);
9876 /* Finally, add the location list to the DIE, and we are done. */
9877 add_AT_loc_list (die, attr, list);
9878 return;
9881 rtl = rtl_for_decl_location (decl);
9882 if (rtl == NULL_RTX)
9883 return;
9885 switch (GET_CODE (rtl))
9887 case ADDRESSOF:
9888 /* The address of a variable that was optimized away;
9889 don't emit anything. */
9890 break;
9892 case CONST_INT:
9893 case CONST_DOUBLE:
9894 case CONST_VECTOR:
9895 case CONST_STRING:
9896 case SYMBOL_REF:
9897 case LABEL_REF:
9898 case CONST:
9899 case PLUS:
9900 /* DECL_RTL could be (plus (reg ...) (const_int ...)) */
9901 add_const_value_attribute (die, rtl);
9902 break;
9904 case MEM:
9905 if (TREE_CODE (decl) == VAR_DECL && DECL_THREAD_LOCAL (decl))
9907 /* Need loc_descriptor_from_tree since that's where we know
9908 how to handle TLS variables. Want the object's address
9909 since the top-level DW_AT_location assumes such. See
9910 the confusion in loc_descriptor for reference. */
9911 descr = loc_descriptor_from_tree (decl, 1);
9913 else
9915 case REG:
9916 case SUBREG:
9917 case CONCAT:
9918 descr = loc_descriptor (rtl, true);
9920 add_AT_location_description (die, attr, descr);
9921 break;
9923 case PARALLEL:
9925 rtvec par_elems = XVEC (rtl, 0);
9926 int num_elem = GET_NUM_ELEM (par_elems);
9927 enum machine_mode mode;
9928 int i;
9930 /* Create the first one, so we have something to add to. */
9931 descr = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0), true);
9932 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
9933 add_loc_descr (&descr,
9934 new_loc_descr (DW_OP_piece, GET_MODE_SIZE (mode), 0));
9935 for (i = 1; i < num_elem; i++)
9937 dw_loc_descr_ref temp;
9939 temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0), true);
9940 add_loc_descr (&descr, temp);
9941 mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
9942 add_loc_descr (&descr,
9943 new_loc_descr (DW_OP_piece,
9944 GET_MODE_SIZE (mode), 0));
9947 add_AT_location_description (die, DW_AT_location, descr);
9948 break;
9950 default:
9951 abort ();
9955 /* If we don't have a copy of this variable in memory for some reason (such
9956 as a C++ member constant that doesn't have an out-of-line definition),
9957 we should tell the debugger about the constant value. */
9959 static void
9960 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
9962 tree init = DECL_INITIAL (decl);
9963 tree type = TREE_TYPE (decl);
9965 if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init
9966 && initializer_constant_valid_p (init, type) == null_pointer_node)
9967 /* OK */;
9968 else
9969 return;
9971 switch (TREE_CODE (type))
9973 case INTEGER_TYPE:
9974 if (host_integerp (init, 0))
9975 add_AT_unsigned (var_die, DW_AT_const_value,
9976 tree_low_cst (init, 0));
9977 else
9978 add_AT_long_long (var_die, DW_AT_const_value,
9979 TREE_INT_CST_HIGH (init),
9980 TREE_INT_CST_LOW (init));
9981 break;
9983 default:;
9987 /* Generate a DW_AT_name attribute given some string value to be included as
9988 the value of the attribute. */
9990 static void
9991 add_name_attribute (dw_die_ref die, const char *name_string)
9993 if (name_string != NULL && *name_string != 0)
9995 if (demangle_name_func)
9996 name_string = (*demangle_name_func) (name_string);
9998 add_AT_string (die, DW_AT_name, name_string);
10002 /* Generate a DW_AT_comp_dir attribute for DIE. */
10004 static void
10005 add_comp_dir_attribute (dw_die_ref die)
10007 const char *wd = get_src_pwd ();
10008 if (wd != NULL)
10009 add_AT_string (die, DW_AT_comp_dir, wd);
10012 /* Given a tree node describing an array bound (either lower or upper) output
10013 a representation for that bound. */
10015 static void
10016 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10018 switch (TREE_CODE (bound))
10020 case ERROR_MARK:
10021 return;
10023 /* All fixed-bounds are represented by INTEGER_CST nodes. */
10024 case INTEGER_CST:
10025 if (! host_integerp (bound, 0)
10026 || (bound_attr == DW_AT_lower_bound
10027 && (((is_c_family () || is_java ()) && integer_zerop (bound))
10028 || (is_fortran () && integer_onep (bound)))))
10029 /* use the default */
10031 else
10032 add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10033 break;
10035 case CONVERT_EXPR:
10036 case NOP_EXPR:
10037 case NON_LVALUE_EXPR:
10038 case VIEW_CONVERT_EXPR:
10039 add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10040 break;
10042 case SAVE_EXPR:
10043 /* If optimization is turned on, the SAVE_EXPRs that describe how to
10044 access the upper bound values may be bogus. If they refer to a
10045 register, they may only describe how to get at these values at the
10046 points in the generated code right after they have just been
10047 computed. Worse yet, in the typical case, the upper bound values
10048 will not even *be* computed in the optimized code (though the
10049 number of elements will), so these SAVE_EXPRs are entirely
10050 bogus. In order to compensate for this fact, we check here to see
10051 if optimization is enabled, and if so, we don't add an attribute
10052 for the (unknown and unknowable) upper bound. This should not
10053 cause too much trouble for existing (stupid?) debuggers because
10054 they have to deal with empty upper bounds location descriptions
10055 anyway in order to be able to deal with incomplete array types.
10056 Of course an intelligent debugger (GDB?) should be able to
10057 comprehend that a missing upper bound specification in an array
10058 type used for a storage class `auto' local array variable
10059 indicates that the upper bound is both unknown (at compile- time)
10060 and unknowable (at run-time) due to optimization.
10062 We assume that a MEM rtx is safe because gcc wouldn't put the
10063 value there unless it was going to be used repeatedly in the
10064 function, i.e. for cleanups. */
10065 if (SAVE_EXPR_RTL (bound)
10066 && (! optimize || GET_CODE (SAVE_EXPR_RTL (bound)) == MEM))
10068 dw_die_ref ctx = lookup_decl_die (current_function_decl);
10069 dw_die_ref decl_die = new_die (DW_TAG_variable, ctx, bound);
10070 rtx loc = SAVE_EXPR_RTL (bound);
10072 /* If the RTL for the SAVE_EXPR is memory, handle the case where
10073 it references an outer function's frame. */
10074 if (GET_CODE (loc) == MEM)
10076 rtx new_addr = fix_lexical_addr (XEXP (loc, 0), bound);
10078 if (XEXP (loc, 0) != new_addr)
10079 loc = gen_rtx_MEM (GET_MODE (loc), new_addr);
10082 add_AT_flag (decl_die, DW_AT_artificial, 1);
10083 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10084 add_AT_location_description (decl_die, DW_AT_location,
10085 loc_descriptor (loc, true));
10086 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10089 /* Else leave out the attribute. */
10090 break;
10092 case VAR_DECL:
10093 case PARM_DECL:
10095 dw_die_ref decl_die = lookup_decl_die (bound);
10097 /* ??? Can this happen, or should the variable have been bound
10098 first? Probably it can, since I imagine that we try to create
10099 the types of parameters in the order in which they exist in
10100 the list, and won't have created a forward reference to a
10101 later parameter. */
10102 if (decl_die != NULL)
10103 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10104 break;
10107 default:
10109 /* Otherwise try to create a stack operation procedure to
10110 evaluate the value of the array bound. */
10112 dw_die_ref ctx, decl_die;
10113 dw_loc_descr_ref loc;
10115 loc = loc_descriptor_from_tree (bound, 0);
10116 if (loc == NULL)
10117 break;
10119 if (current_function_decl == 0)
10120 ctx = comp_unit_die;
10121 else
10122 ctx = lookup_decl_die (current_function_decl);
10124 /* If we weren't able to find a context, it's most likely the case
10125 that we are processing the return type of the function. So
10126 make a SAVE_EXPR to point to it and have the limbo DIE code
10127 find the proper die. The save_expr function doesn't always
10128 make a SAVE_EXPR, so do it ourselves. */
10129 if (ctx == 0)
10130 bound = build (SAVE_EXPR, TREE_TYPE (bound), bound,
10131 current_function_decl, NULL_TREE);
10133 decl_die = new_die (DW_TAG_variable, ctx, bound);
10134 add_AT_flag (decl_die, DW_AT_artificial, 1);
10135 add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10136 add_AT_loc (decl_die, DW_AT_location, loc);
10138 add_AT_die_ref (subrange_die, bound_attr, decl_die);
10139 break;
10144 /* Note that the block of subscript information for an array type also
10145 includes information about the element type of type given array type. */
10147 static void
10148 add_subscript_info (dw_die_ref type_die, tree type)
10150 #ifndef MIPS_DEBUGGING_INFO
10151 unsigned dimension_number;
10152 #endif
10153 tree lower, upper;
10154 dw_die_ref subrange_die;
10156 /* The GNU compilers represent multidimensional array types as sequences of
10157 one dimensional array types whose element types are themselves array
10158 types. Here we squish that down, so that each multidimensional array
10159 type gets only one array_type DIE in the Dwarf debugging info. The draft
10160 Dwarf specification say that we are allowed to do this kind of
10161 compression in C (because there is no difference between an array or
10162 arrays and a multidimensional array in C) but for other source languages
10163 (e.g. Ada) we probably shouldn't do this. */
10165 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10166 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10167 We work around this by disabling this feature. See also
10168 gen_array_type_die. */
10169 #ifndef MIPS_DEBUGGING_INFO
10170 for (dimension_number = 0;
10171 TREE_CODE (type) == ARRAY_TYPE;
10172 type = TREE_TYPE (type), dimension_number++)
10173 #endif
10175 tree domain = TYPE_DOMAIN (type);
10177 /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10178 and (in GNU C only) variable bounds. Handle all three forms
10179 here. */
10180 subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10181 if (domain)
10183 /* We have an array type with specified bounds. */
10184 lower = TYPE_MIN_VALUE (domain);
10185 upper = TYPE_MAX_VALUE (domain);
10187 /* Define the index type. */
10188 if (TREE_TYPE (domain))
10190 /* ??? This is probably an Ada unnamed subrange type. Ignore the
10191 TREE_TYPE field. We can't emit debug info for this
10192 because it is an unnamed integral type. */
10193 if (TREE_CODE (domain) == INTEGER_TYPE
10194 && TYPE_NAME (domain) == NULL_TREE
10195 && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10196 && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10198 else
10199 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10200 type_die);
10203 /* ??? If upper is NULL, the array has unspecified length,
10204 but it does have a lower bound. This happens with Fortran
10205 dimension arr(N:*)
10206 Since the debugger is definitely going to need to know N
10207 to produce useful results, go ahead and output the lower
10208 bound solo, and hope the debugger can cope. */
10210 add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10211 if (upper)
10212 add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10215 /* Otherwise we have an array type with an unspecified length. The
10216 DWARF-2 spec does not say how to handle this; let's just leave out the
10217 bounds. */
10221 static void
10222 add_byte_size_attribute (dw_die_ref die, tree tree_node)
10224 unsigned size;
10226 switch (TREE_CODE (tree_node))
10228 case ERROR_MARK:
10229 size = 0;
10230 break;
10231 case ENUMERAL_TYPE:
10232 case RECORD_TYPE:
10233 case UNION_TYPE:
10234 case QUAL_UNION_TYPE:
10235 size = int_size_in_bytes (tree_node);
10236 break;
10237 case FIELD_DECL:
10238 /* For a data member of a struct or union, the DW_AT_byte_size is
10239 generally given as the number of bytes normally allocated for an
10240 object of the *declared* type of the member itself. This is true
10241 even for bit-fields. */
10242 size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10243 break;
10244 default:
10245 abort ();
10248 /* Note that `size' might be -1 when we get to this point. If it is, that
10249 indicates that the byte size of the entity in question is variable. We
10250 have no good way of expressing this fact in Dwarf at the present time,
10251 so just let the -1 pass on through. */
10252 add_AT_unsigned (die, DW_AT_byte_size, size);
10255 /* For a FIELD_DECL node which represents a bit-field, output an attribute
10256 which specifies the distance in bits from the highest order bit of the
10257 "containing object" for the bit-field to the highest order bit of the
10258 bit-field itself.
10260 For any given bit-field, the "containing object" is a hypothetical object
10261 (of some integral or enum type) within which the given bit-field lives. The
10262 type of this hypothetical "containing object" is always the same as the
10263 declared type of the individual bit-field itself. The determination of the
10264 exact location of the "containing object" for a bit-field is rather
10265 complicated. It's handled by the `field_byte_offset' function (above).
10267 Note that it is the size (in bytes) of the hypothetical "containing object"
10268 which will be given in the DW_AT_byte_size attribute for this bit-field.
10269 (See `byte_size_attribute' above). */
10271 static inline void
10272 add_bit_offset_attribute (dw_die_ref die, tree decl)
10274 HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10275 tree type = DECL_BIT_FIELD_TYPE (decl);
10276 HOST_WIDE_INT bitpos_int;
10277 HOST_WIDE_INT highest_order_object_bit_offset;
10278 HOST_WIDE_INT highest_order_field_bit_offset;
10279 HOST_WIDE_INT unsigned bit_offset;
10281 /* Must be a field and a bit field. */
10282 if (!type
10283 || TREE_CODE (decl) != FIELD_DECL)
10284 abort ();
10286 /* We can't yet handle bit-fields whose offsets are variable, so if we
10287 encounter such things, just return without generating any attribute
10288 whatsoever. Likewise for variable or too large size. */
10289 if (! host_integerp (bit_position (decl), 0)
10290 || ! host_integerp (DECL_SIZE (decl), 1))
10291 return;
10293 bitpos_int = int_bit_position (decl);
10295 /* Note that the bit offset is always the distance (in bits) from the
10296 highest-order bit of the "containing object" to the highest-order bit of
10297 the bit-field itself. Since the "high-order end" of any object or field
10298 is different on big-endian and little-endian machines, the computation
10299 below must take account of these differences. */
10300 highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10301 highest_order_field_bit_offset = bitpos_int;
10303 if (! BYTES_BIG_ENDIAN)
10305 highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10306 highest_order_object_bit_offset += simple_type_size_in_bits (type);
10309 bit_offset
10310 = (! BYTES_BIG_ENDIAN
10311 ? highest_order_object_bit_offset - highest_order_field_bit_offset
10312 : highest_order_field_bit_offset - highest_order_object_bit_offset);
10314 add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10317 /* For a FIELD_DECL node which represents a bit field, output an attribute
10318 which specifies the length in bits of the given field. */
10320 static inline void
10321 add_bit_size_attribute (dw_die_ref die, tree decl)
10323 /* Must be a field and a bit field. */
10324 if (TREE_CODE (decl) != FIELD_DECL
10325 || ! DECL_BIT_FIELD_TYPE (decl))
10326 abort ();
10328 if (host_integerp (DECL_SIZE (decl), 1))
10329 add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10332 /* If the compiled language is ANSI C, then add a 'prototyped'
10333 attribute, if arg types are given for the parameters of a function. */
10335 static inline void
10336 add_prototyped_attribute (dw_die_ref die, tree func_type)
10338 if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10339 && TYPE_ARG_TYPES (func_type) != NULL)
10340 add_AT_flag (die, DW_AT_prototyped, 1);
10343 /* Add an 'abstract_origin' attribute below a given DIE. The DIE is found
10344 by looking in either the type declaration or object declaration
10345 equate table. */
10347 static inline void
10348 add_abstract_origin_attribute (dw_die_ref die, tree origin)
10350 dw_die_ref origin_die = NULL;
10352 if (TREE_CODE (origin) != FUNCTION_DECL)
10354 /* We may have gotten separated from the block for the inlined
10355 function, if we're in an exception handler or some such; make
10356 sure that the abstract function has been written out.
10358 Doing this for nested functions is wrong, however; functions are
10359 distinct units, and our context might not even be inline. */
10360 tree fn = origin;
10362 if (TYPE_P (fn))
10363 fn = TYPE_STUB_DECL (fn);
10365 fn = decl_function_context (fn);
10366 if (fn)
10367 dwarf2out_abstract_function (fn);
10370 if (DECL_P (origin))
10371 origin_die = lookup_decl_die (origin);
10372 else if (TYPE_P (origin))
10373 origin_die = lookup_type_die (origin);
10375 if (origin_die == NULL)
10376 abort ();
10378 add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10381 /* We do not currently support the pure_virtual attribute. */
10383 static inline void
10384 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10386 if (DECL_VINDEX (func_decl))
10388 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10390 if (host_integerp (DECL_VINDEX (func_decl), 0))
10391 add_AT_loc (die, DW_AT_vtable_elem_location,
10392 new_loc_descr (DW_OP_constu,
10393 tree_low_cst (DECL_VINDEX (func_decl), 0),
10394 0));
10396 /* GNU extension: Record what type this method came from originally. */
10397 if (debug_info_level > DINFO_LEVEL_TERSE)
10398 add_AT_die_ref (die, DW_AT_containing_type,
10399 lookup_type_die (DECL_CONTEXT (func_decl)));
10403 /* Add source coordinate attributes for the given decl. */
10405 static void
10406 add_src_coords_attributes (dw_die_ref die, tree decl)
10408 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
10410 add_AT_unsigned (die, DW_AT_decl_file, file_index);
10411 add_AT_unsigned (die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
10414 /* Add a DW_AT_name attribute and source coordinate attribute for the
10415 given decl, but only if it actually has a name. */
10417 static void
10418 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10420 tree decl_name;
10422 decl_name = DECL_NAME (decl);
10423 if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10425 add_name_attribute (die, dwarf2_name (decl, 0));
10426 if (! DECL_ARTIFICIAL (decl))
10427 add_src_coords_attributes (die, decl);
10429 if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10430 && TREE_PUBLIC (decl)
10431 && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
10432 && !DECL_ABSTRACT (decl))
10433 add_AT_string (die, DW_AT_MIPS_linkage_name,
10434 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
10437 #ifdef VMS_DEBUGGING_INFO
10438 /* Get the function's name, as described by its RTL. This may be different
10439 from the DECL_NAME name used in the source file. */
10440 if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
10442 add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
10443 XEXP (DECL_RTL (decl), 0));
10444 VARRAY_PUSH_RTX (used_rtx_varray, XEXP (DECL_RTL (decl), 0));
10446 #endif
10449 /* Push a new declaration scope. */
10451 static void
10452 push_decl_scope (tree scope)
10454 VARRAY_PUSH_TREE (decl_scope_table, scope);
10457 /* Pop a declaration scope. */
10459 static inline void
10460 pop_decl_scope (void)
10462 if (VARRAY_ACTIVE_SIZE (decl_scope_table) <= 0)
10463 abort ();
10465 VARRAY_POP (decl_scope_table);
10468 /* Return the DIE for the scope that immediately contains this type.
10469 Non-named types get global scope. Named types nested in other
10470 types get their containing scope if it's open, or global scope
10471 otherwise. All other types (i.e. function-local named types) get
10472 the current active scope. */
10474 static dw_die_ref
10475 scope_die_for (tree t, dw_die_ref context_die)
10477 dw_die_ref scope_die = NULL;
10478 tree containing_scope;
10479 int i;
10481 /* Non-types always go in the current scope. */
10482 if (! TYPE_P (t))
10483 abort ();
10485 containing_scope = TYPE_CONTEXT (t);
10487 /* Use the containing namespace if it was passed in (for a declaration). */
10488 if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
10490 if (context_die == lookup_decl_die (containing_scope))
10491 /* OK */;
10492 else
10493 containing_scope = NULL_TREE;
10496 /* Ignore function type "scopes" from the C frontend. They mean that
10497 a tagged type is local to a parmlist of a function declarator, but
10498 that isn't useful to DWARF. */
10499 if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
10500 containing_scope = NULL_TREE;
10502 if (containing_scope == NULL_TREE
10503 || TREE_CODE (containing_scope) == TRANSLATION_UNIT_DECL)
10504 scope_die = comp_unit_die;
10505 else if (TYPE_P (containing_scope))
10507 /* For types, we can just look up the appropriate DIE. But
10508 first we check to see if we're in the middle of emitting it
10509 so we know where the new DIE should go. */
10510 for (i = VARRAY_ACTIVE_SIZE (decl_scope_table) - 1; i >= 0; --i)
10511 if (VARRAY_TREE (decl_scope_table, i) == containing_scope)
10512 break;
10514 if (i < 0)
10516 if (debug_info_level > DINFO_LEVEL_TERSE
10517 && !TREE_ASM_WRITTEN (containing_scope))
10518 abort ();
10520 /* If none of the current dies are suitable, we get file scope. */
10521 scope_die = comp_unit_die;
10523 else
10524 scope_die = lookup_type_die (containing_scope);
10526 else
10527 scope_die = context_die;
10529 return scope_die;
10532 /* Returns nonzero if CONTEXT_DIE is internal to a function. */
10534 static inline int
10535 local_scope_p (dw_die_ref context_die)
10537 for (; context_die; context_die = context_die->die_parent)
10538 if (context_die->die_tag == DW_TAG_inlined_subroutine
10539 || context_die->die_tag == DW_TAG_subprogram)
10540 return 1;
10542 return 0;
10545 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
10546 whether or not to treat a DIE in this context as a declaration. */
10548 static inline int
10549 class_or_namespace_scope_p (dw_die_ref context_die)
10551 return (context_die
10552 && (context_die->die_tag == DW_TAG_structure_type
10553 || context_die->die_tag == DW_TAG_union_type
10554 || context_die->die_tag == DW_TAG_namespace));
10557 /* Many forms of DIEs require a "type description" attribute. This
10558 routine locates the proper "type descriptor" die for the type given
10559 by 'type', and adds a DW_AT_type attribute below the given die. */
10561 static void
10562 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
10563 int decl_volatile, dw_die_ref context_die)
10565 enum tree_code code = TREE_CODE (type);
10566 dw_die_ref type_die = NULL;
10568 /* ??? If this type is an unnamed subrange type of an integral or
10569 floating-point type, use the inner type. This is because we have no
10570 support for unnamed types in base_type_die. This can happen if this is
10571 an Ada subrange type. Correct solution is emit a subrange type die. */
10572 if ((code == INTEGER_TYPE || code == REAL_TYPE)
10573 && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
10574 type = TREE_TYPE (type), code = TREE_CODE (type);
10576 if (code == ERROR_MARK
10577 /* Handle a special case. For functions whose return type is void, we
10578 generate *no* type attribute. (Note that no object may have type
10579 `void', so this only applies to function return types). */
10580 || code == VOID_TYPE)
10581 return;
10583 type_die = modified_type_die (type,
10584 decl_const || TYPE_READONLY (type),
10585 decl_volatile || TYPE_VOLATILE (type),
10586 context_die);
10588 if (type_die != NULL)
10589 add_AT_die_ref (object_die, DW_AT_type, type_die);
10592 /* Given a tree pointer to a struct, class, union, or enum type node, return
10593 a pointer to the (string) tag name for the given type, or zero if the type
10594 was declared without a tag. */
10596 static const char *
10597 type_tag (tree type)
10599 const char *name = 0;
10601 if (TYPE_NAME (type) != 0)
10603 tree t = 0;
10605 /* Find the IDENTIFIER_NODE for the type name. */
10606 if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
10607 t = TYPE_NAME (type);
10609 /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
10610 a TYPE_DECL node, regardless of whether or not a `typedef' was
10611 involved. */
10612 else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
10613 && ! DECL_IGNORED_P (TYPE_NAME (type)))
10614 t = DECL_NAME (TYPE_NAME (type));
10616 /* Now get the name as a string, or invent one. */
10617 if (t != 0)
10618 name = IDENTIFIER_POINTER (t);
10621 return (name == 0 || *name == '\0') ? 0 : name;
10624 /* Return the type associated with a data member, make a special check
10625 for bit field types. */
10627 static inline tree
10628 member_declared_type (tree member)
10630 return (DECL_BIT_FIELD_TYPE (member)
10631 ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
10634 /* Get the decl's label, as described by its RTL. This may be different
10635 from the DECL_NAME name used in the source file. */
10637 #if 0
10638 static const char *
10639 decl_start_label (tree decl)
10641 rtx x;
10642 const char *fnname;
10644 x = DECL_RTL (decl);
10645 if (GET_CODE (x) != MEM)
10646 abort ();
10648 x = XEXP (x, 0);
10649 if (GET_CODE (x) != SYMBOL_REF)
10650 abort ();
10652 fnname = XSTR (x, 0);
10653 return fnname;
10655 #endif
10657 /* These routines generate the internal representation of the DIE's for
10658 the compilation unit. Debugging information is collected by walking
10659 the declaration trees passed in from dwarf2out_decl(). */
10661 static void
10662 gen_array_type_die (tree type, dw_die_ref context_die)
10664 dw_die_ref scope_die = scope_die_for (type, context_die);
10665 dw_die_ref array_die;
10666 tree element_type;
10668 /* ??? The SGI dwarf reader fails for array of array of enum types unless
10669 the inner array type comes before the outer array type. Thus we must
10670 call gen_type_die before we call new_die. See below also. */
10671 #ifdef MIPS_DEBUGGING_INFO
10672 gen_type_die (TREE_TYPE (type), context_die);
10673 #endif
10675 array_die = new_die (DW_TAG_array_type, scope_die, type);
10676 add_name_attribute (array_die, type_tag (type));
10677 equate_type_number_to_die (type, array_die);
10679 if (TREE_CODE (type) == VECTOR_TYPE)
10681 /* The frontend feeds us a representation for the vector as a struct
10682 containing an array. Pull out the array type. */
10683 type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
10684 add_AT_flag (array_die, DW_AT_GNU_vector, 1);
10687 #if 0
10688 /* We default the array ordering. SDB will probably do
10689 the right things even if DW_AT_ordering is not present. It's not even
10690 an issue until we start to get into multidimensional arrays anyway. If
10691 SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
10692 then we'll have to put the DW_AT_ordering attribute back in. (But if
10693 and when we find out that we need to put these in, we will only do so
10694 for multidimensional arrays. */
10695 add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
10696 #endif
10698 #ifdef MIPS_DEBUGGING_INFO
10699 /* The SGI compilers handle arrays of unknown bound by setting
10700 AT_declaration and not emitting any subrange DIEs. */
10701 if (! TYPE_DOMAIN (type))
10702 add_AT_flag (array_die, DW_AT_declaration, 1);
10703 else
10704 #endif
10705 add_subscript_info (array_die, type);
10707 /* Add representation of the type of the elements of this array type. */
10708 element_type = TREE_TYPE (type);
10710 /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10711 const enum type. E.g. const enum machine_mode insn_operand_mode[2][10].
10712 We work around this by disabling this feature. See also
10713 add_subscript_info. */
10714 #ifndef MIPS_DEBUGGING_INFO
10715 while (TREE_CODE (element_type) == ARRAY_TYPE)
10716 element_type = TREE_TYPE (element_type);
10718 gen_type_die (element_type, context_die);
10719 #endif
10721 add_type_attribute (array_die, element_type, 0, 0, context_die);
10724 static void
10725 gen_set_type_die (tree type, dw_die_ref context_die)
10727 dw_die_ref type_die
10728 = new_die (DW_TAG_set_type, scope_die_for (type, context_die), type);
10730 equate_type_number_to_die (type, type_die);
10731 add_type_attribute (type_die, TREE_TYPE (type), 0, 0, context_die);
10734 #if 0
10735 static void
10736 gen_entry_point_die (tree decl, dw_die_ref context_die)
10738 tree origin = decl_ultimate_origin (decl);
10739 dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
10741 if (origin != NULL)
10742 add_abstract_origin_attribute (decl_die, origin);
10743 else
10745 add_name_and_src_coords_attributes (decl_die, decl);
10746 add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
10747 0, 0, context_die);
10750 if (DECL_ABSTRACT (decl))
10751 equate_decl_number_to_die (decl, decl_die);
10752 else
10753 add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
10755 #endif
10757 /* Walk through the list of incomplete types again, trying once more to
10758 emit full debugging info for them. */
10760 static void
10761 retry_incomplete_types (void)
10763 int i;
10765 for (i = VARRAY_ACTIVE_SIZE (incomplete_types) - 1; i >= 0; i--)
10766 gen_type_die (VARRAY_TREE (incomplete_types, i), comp_unit_die);
10769 /* Generate a DIE to represent an inlined instance of an enumeration type. */
10771 static void
10772 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
10774 dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
10776 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10777 be incomplete and such types are not marked. */
10778 add_abstract_origin_attribute (type_die, type);
10781 /* Generate a DIE to represent an inlined instance of a structure type. */
10783 static void
10784 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
10786 dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
10788 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10789 be incomplete and such types are not marked. */
10790 add_abstract_origin_attribute (type_die, type);
10793 /* Generate a DIE to represent an inlined instance of a union type. */
10795 static void
10796 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
10798 dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
10800 /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
10801 be incomplete and such types are not marked. */
10802 add_abstract_origin_attribute (type_die, type);
10805 /* Generate a DIE to represent an enumeration type. Note that these DIEs
10806 include all of the information about the enumeration values also. Each
10807 enumerated type name/value is listed as a child of the enumerated type
10808 DIE. */
10810 static dw_die_ref
10811 gen_enumeration_type_die (tree type, dw_die_ref context_die)
10813 dw_die_ref type_die = lookup_type_die (type);
10815 if (type_die == NULL)
10817 type_die = new_die (DW_TAG_enumeration_type,
10818 scope_die_for (type, context_die), type);
10819 equate_type_number_to_die (type, type_die);
10820 add_name_attribute (type_die, type_tag (type));
10822 else if (! TYPE_SIZE (type))
10823 return type_die;
10824 else
10825 remove_AT (type_die, DW_AT_declaration);
10827 /* Handle a GNU C/C++ extension, i.e. incomplete enum types. If the
10828 given enum type is incomplete, do not generate the DW_AT_byte_size
10829 attribute or the DW_AT_element_list attribute. */
10830 if (TYPE_SIZE (type))
10832 tree link;
10834 TREE_ASM_WRITTEN (type) = 1;
10835 add_byte_size_attribute (type_die, type);
10836 if (TYPE_STUB_DECL (type) != NULL_TREE)
10837 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
10839 /* If the first reference to this type was as the return type of an
10840 inline function, then it may not have a parent. Fix this now. */
10841 if (type_die->die_parent == NULL)
10842 add_child_die (scope_die_for (type, context_die), type_die);
10844 for (link = TYPE_FIELDS (type);
10845 link != NULL; link = TREE_CHAIN (link))
10847 dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
10848 tree value = TREE_VALUE (link);
10850 add_name_attribute (enum_die,
10851 IDENTIFIER_POINTER (TREE_PURPOSE (link)));
10853 if (host_integerp (value, TREE_UNSIGNED (TREE_TYPE (value))))
10854 /* DWARF2 does not provide a way of indicating whether or
10855 not enumeration constants are signed or unsigned. GDB
10856 always assumes the values are signed, so we output all
10857 values as if they were signed. That means that
10858 enumeration constants with very large unsigned values
10859 will appear to have negative values in the debugger. */
10860 add_AT_int (enum_die, DW_AT_const_value,
10861 tree_low_cst (value, tree_int_cst_sgn (value) > 0));
10864 else
10865 add_AT_flag (type_die, DW_AT_declaration, 1);
10867 return type_die;
10870 /* Generate a DIE to represent either a real live formal parameter decl or to
10871 represent just the type of some formal parameter position in some function
10872 type.
10874 Note that this routine is a bit unusual because its argument may be a
10875 ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
10876 represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
10877 node. If it's the former then this function is being called to output a
10878 DIE to represent a formal parameter object (or some inlining thereof). If
10879 it's the latter, then this function is only being called to output a
10880 DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
10881 argument type of some subprogram type. */
10883 static dw_die_ref
10884 gen_formal_parameter_die (tree node, dw_die_ref context_die)
10886 dw_die_ref parm_die
10887 = new_die (DW_TAG_formal_parameter, context_die, node);
10888 tree origin;
10890 switch (TREE_CODE_CLASS (TREE_CODE (node)))
10892 case 'd':
10893 origin = decl_ultimate_origin (node);
10894 if (origin != NULL)
10895 add_abstract_origin_attribute (parm_die, origin);
10896 else
10898 add_name_and_src_coords_attributes (parm_die, node);
10899 add_type_attribute (parm_die, TREE_TYPE (node),
10900 TREE_READONLY (node),
10901 TREE_THIS_VOLATILE (node),
10902 context_die);
10903 if (DECL_ARTIFICIAL (node))
10904 add_AT_flag (parm_die, DW_AT_artificial, 1);
10907 equate_decl_number_to_die (node, parm_die);
10908 if (! DECL_ABSTRACT (node))
10909 add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
10911 break;
10913 case 't':
10914 /* We were called with some kind of a ..._TYPE node. */
10915 add_type_attribute (parm_die, node, 0, 0, context_die);
10916 break;
10918 default:
10919 abort ();
10922 return parm_die;
10925 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
10926 at the end of an (ANSI prototyped) formal parameters list. */
10928 static void
10929 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
10931 new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
10934 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
10935 DW_TAG_unspecified_parameters DIE) to represent the types of the formal
10936 parameters as specified in some function type specification (except for
10937 those which appear as part of a function *definition*). */
10939 static void
10940 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
10942 tree link;
10943 tree formal_type = NULL;
10944 tree first_parm_type;
10945 tree arg;
10947 if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
10949 arg = DECL_ARGUMENTS (function_or_method_type);
10950 function_or_method_type = TREE_TYPE (function_or_method_type);
10952 else
10953 arg = NULL_TREE;
10955 first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
10957 /* Make our first pass over the list of formal parameter types and output a
10958 DW_TAG_formal_parameter DIE for each one. */
10959 for (link = first_parm_type; link; )
10961 dw_die_ref parm_die;
10963 formal_type = TREE_VALUE (link);
10964 if (formal_type == void_type_node)
10965 break;
10967 /* Output a (nameless) DIE to represent the formal parameter itself. */
10968 parm_die = gen_formal_parameter_die (formal_type, context_die);
10969 if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
10970 && link == first_parm_type)
10971 || (arg && DECL_ARTIFICIAL (arg)))
10972 add_AT_flag (parm_die, DW_AT_artificial, 1);
10974 link = TREE_CHAIN (link);
10975 if (arg)
10976 arg = TREE_CHAIN (arg);
10979 /* If this function type has an ellipsis, add a
10980 DW_TAG_unspecified_parameters DIE to the end of the parameter list. */
10981 if (formal_type != void_type_node)
10982 gen_unspecified_parameters_die (function_or_method_type, context_die);
10984 /* Make our second (and final) pass over the list of formal parameter types
10985 and output DIEs to represent those types (as necessary). */
10986 for (link = TYPE_ARG_TYPES (function_or_method_type);
10987 link && TREE_VALUE (link);
10988 link = TREE_CHAIN (link))
10989 gen_type_die (TREE_VALUE (link), context_die);
10992 /* We want to generate the DIE for TYPE so that we can generate the
10993 die for MEMBER, which has been defined; we will need to refer back
10994 to the member declaration nested within TYPE. If we're trying to
10995 generate minimal debug info for TYPE, processing TYPE won't do the
10996 trick; we need to attach the member declaration by hand. */
10998 static void
10999 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
11001 gen_type_die (type, context_die);
11003 /* If we're trying to avoid duplicate debug info, we may not have
11004 emitted the member decl for this function. Emit it now. */
11005 if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
11006 && ! lookup_decl_die (member))
11008 if (decl_ultimate_origin (member))
11009 abort ();
11011 push_decl_scope (type);
11012 if (TREE_CODE (member) == FUNCTION_DECL)
11013 gen_subprogram_die (member, lookup_type_die (type));
11014 else
11015 gen_variable_die (member, lookup_type_die (type));
11017 pop_decl_scope ();
11021 /* Generate the DWARF2 info for the "abstract" instance of a function which we
11022 may later generate inlined and/or out-of-line instances of. */
11024 static void
11025 dwarf2out_abstract_function (tree decl)
11027 dw_die_ref old_die;
11028 tree save_fn;
11029 tree context;
11030 int was_abstract = DECL_ABSTRACT (decl);
11032 /* Make sure we have the actual abstract inline, not a clone. */
11033 decl = DECL_ORIGIN (decl);
11035 old_die = lookup_decl_die (decl);
11036 if (old_die && get_AT (old_die, DW_AT_inline))
11037 /* We've already generated the abstract instance. */
11038 return;
11040 /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11041 we don't get confused by DECL_ABSTRACT. */
11042 if (debug_info_level > DINFO_LEVEL_TERSE)
11044 context = decl_class_context (decl);
11045 if (context)
11046 gen_type_die_for_member
11047 (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11050 /* Pretend we've just finished compiling this function. */
11051 save_fn = current_function_decl;
11052 current_function_decl = decl;
11054 set_decl_abstract_flags (decl, 1);
11055 dwarf2out_decl (decl);
11056 if (! was_abstract)
11057 set_decl_abstract_flags (decl, 0);
11059 current_function_decl = save_fn;
11062 /* Generate a DIE to represent a declared function (either file-scope or
11063 block-local). */
11065 static void
11066 gen_subprogram_die (tree decl, dw_die_ref context_die)
11068 char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11069 tree origin = decl_ultimate_origin (decl);
11070 dw_die_ref subr_die;
11071 rtx fp_reg;
11072 tree fn_arg_types;
11073 tree outer_scope;
11074 dw_die_ref old_die = lookup_decl_die (decl);
11075 int declaration = (current_function_decl != decl
11076 || class_or_namespace_scope_p (context_die));
11078 /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11079 started to generate the abstract instance of an inline, decided to output
11080 its containing class, and proceeded to emit the declaration of the inline
11081 from the member list for the class. If so, DECLARATION takes priority;
11082 we'll get back to the abstract instance when done with the class. */
11084 /* The class-scope declaration DIE must be the primary DIE. */
11085 if (origin && declaration && class_or_namespace_scope_p (context_die))
11087 origin = NULL;
11088 if (old_die)
11089 abort ();
11092 if (origin != NULL)
11094 if (declaration && ! local_scope_p (context_die))
11095 abort ();
11097 /* Fixup die_parent for the abstract instance of a nested
11098 inline function. */
11099 if (old_die && old_die->die_parent == NULL)
11100 add_child_die (context_die, old_die);
11102 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11103 add_abstract_origin_attribute (subr_die, origin);
11105 else if (old_die)
11107 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
11109 if (!get_AT_flag (old_die, DW_AT_declaration)
11110 /* We can have a normal definition following an inline one in the
11111 case of redefinition of GNU C extern inlines.
11112 It seems reasonable to use AT_specification in this case. */
11113 && !get_AT (old_die, DW_AT_inline))
11115 /* ??? This can happen if there is a bug in the program, for
11116 instance, if it has duplicate function definitions. Ideally,
11117 we should detect this case and ignore it. For now, if we have
11118 already reported an error, any error at all, then assume that
11119 we got here because of an input error, not a dwarf2 bug. */
11120 if (errorcount)
11121 return;
11122 abort ();
11125 /* If the definition comes from the same place as the declaration,
11126 maybe use the old DIE. We always want the DIE for this function
11127 that has the *_pc attributes to be under comp_unit_die so the
11128 debugger can find it. We also need to do this for abstract
11129 instances of inlines, since the spec requires the out-of-line copy
11130 to have the same parent. For local class methods, this doesn't
11131 apply; we just use the old DIE. */
11132 if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11133 && (DECL_ARTIFICIAL (decl)
11134 || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11135 && (get_AT_unsigned (old_die, DW_AT_decl_line)
11136 == (unsigned) DECL_SOURCE_LINE (decl)))))
11138 subr_die = old_die;
11140 /* Clear out the declaration attribute and the formal parameters. */
11141 remove_AT (subr_die, DW_AT_declaration);
11142 remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11144 else
11146 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11147 add_AT_specification (subr_die, old_die);
11148 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11149 add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11150 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11151 != (unsigned) DECL_SOURCE_LINE (decl))
11152 add_AT_unsigned
11153 (subr_die, DW_AT_decl_line, DECL_SOURCE_LINE (decl));
11156 else
11158 subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11160 if (TREE_PUBLIC (decl))
11161 add_AT_flag (subr_die, DW_AT_external, 1);
11163 add_name_and_src_coords_attributes (subr_die, decl);
11164 if (debug_info_level > DINFO_LEVEL_TERSE)
11166 add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11167 add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11168 0, 0, context_die);
11171 add_pure_or_virtual_attribute (subr_die, decl);
11172 if (DECL_ARTIFICIAL (decl))
11173 add_AT_flag (subr_die, DW_AT_artificial, 1);
11175 if (TREE_PROTECTED (decl))
11176 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11177 else if (TREE_PRIVATE (decl))
11178 add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11181 if (declaration)
11183 if (!old_die || !get_AT (old_die, DW_AT_inline))
11185 add_AT_flag (subr_die, DW_AT_declaration, 1);
11187 /* The first time we see a member function, it is in the context of
11188 the class to which it belongs. We make sure of this by emitting
11189 the class first. The next time is the definition, which is
11190 handled above. The two may come from the same source text. */
11191 if (DECL_CONTEXT (decl) || DECL_ABSTRACT (decl))
11192 equate_decl_number_to_die (decl, subr_die);
11195 else if (DECL_ABSTRACT (decl))
11197 if (DECL_DECLARED_INLINE_P (decl))
11199 if (cgraph_function_possibly_inlined_p (decl))
11200 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11201 else
11202 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11204 else
11206 if (cgraph_function_possibly_inlined_p (decl))
11207 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11208 else
11209 add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11212 equate_decl_number_to_die (decl, subr_die);
11214 else if (!DECL_EXTERNAL (decl))
11216 if (!old_die || !get_AT (old_die, DW_AT_inline))
11217 equate_decl_number_to_die (decl, subr_die);
11219 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11220 current_function_funcdef_no);
11221 add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11222 ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11223 current_function_funcdef_no);
11224 add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11226 add_pubname (decl, subr_die);
11227 add_arange (decl, subr_die);
11229 #ifdef MIPS_DEBUGGING_INFO
11230 /* Add a reference to the FDE for this routine. */
11231 add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11232 #endif
11234 /* Define the "frame base" location for this routine. We use the
11235 frame pointer or stack pointer registers, since the RTL for local
11236 variables is relative to one of them. */
11237 if (frame_base_decl && lookup_decl_loc (frame_base_decl) != NULL)
11239 add_location_or_const_value_attribute (subr_die, frame_base_decl,
11240 DW_AT_frame_base);
11242 else
11244 fp_reg
11245 = frame_pointer_needed ? hard_frame_pointer_rtx : stack_pointer_rtx;
11246 add_AT_loc (subr_die, DW_AT_frame_base, reg_loc_descriptor (fp_reg));
11249 #if 0
11250 /* ??? This fails for nested inline functions, because context_display
11251 is not part of the state saved/restored for inline functions. */
11252 if (current_function_needs_context)
11253 add_AT_location_description (subr_die, DW_AT_static_link,
11254 loc_descriptor (lookup_static_chain (decl)));
11255 #endif
11258 /* Now output descriptions of the arguments for this function. This gets
11259 (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11260 for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11261 `...' at the end of the formal parameter list. In order to find out if
11262 there was a trailing ellipsis or not, we must instead look at the type
11263 associated with the FUNCTION_DECL. This will be a node of type
11264 FUNCTION_TYPE. If the chain of type nodes hanging off of this
11265 FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11266 an ellipsis at the end. */
11268 /* In the case where we are describing a mere function declaration, all we
11269 need to do here (and all we *can* do here) is to describe the *types* of
11270 its formal parameters. */
11271 if (debug_info_level <= DINFO_LEVEL_TERSE)
11273 else if (declaration)
11274 gen_formal_types_die (decl, subr_die);
11275 else
11277 /* Generate DIEs to represent all known formal parameters. */
11278 tree arg_decls = DECL_ARGUMENTS (decl);
11279 tree parm;
11281 /* When generating DIEs, generate the unspecified_parameters DIE
11282 instead if we come across the arg "__builtin_va_alist" */
11283 for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11284 if (TREE_CODE (parm) == PARM_DECL)
11286 if (DECL_NAME (parm)
11287 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11288 "__builtin_va_alist"))
11289 gen_unspecified_parameters_die (parm, subr_die);
11290 else
11291 gen_decl_die (parm, subr_die);
11294 /* Decide whether we need an unspecified_parameters DIE at the end.
11295 There are 2 more cases to do this for: 1) the ansi ... declaration -
11296 this is detectable when the end of the arg list is not a
11297 void_type_node 2) an unprototyped function declaration (not a
11298 definition). This just means that we have no info about the
11299 parameters at all. */
11300 fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11301 if (fn_arg_types != NULL)
11303 /* This is the prototyped case, check for.... */
11304 if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11305 gen_unspecified_parameters_die (decl, subr_die);
11307 else if (DECL_INITIAL (decl) == NULL_TREE)
11308 gen_unspecified_parameters_die (decl, subr_die);
11311 /* Output Dwarf info for all of the stuff within the body of the function
11312 (if it has one - it may be just a declaration). */
11313 outer_scope = DECL_INITIAL (decl);
11315 /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11316 a function. This BLOCK actually represents the outermost binding contour
11317 for the function, i.e. the contour in which the function's formal
11318 parameters and labels get declared. Curiously, it appears that the front
11319 end doesn't actually put the PARM_DECL nodes for the current function onto
11320 the BLOCK_VARS list for this outer scope, but are strung off of the
11321 DECL_ARGUMENTS list for the function instead.
11323 The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11324 the LABEL_DECL nodes for the function however, and we output DWARF info
11325 for those in decls_for_scope. Just within the `outer_scope' there will be
11326 a BLOCK node representing the function's outermost pair of curly braces,
11327 and any blocks used for the base and member initializers of a C++
11328 constructor function. */
11329 if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11331 current_function_has_inlines = 0;
11332 decls_for_scope (outer_scope, subr_die, 0);
11334 #if 0 && defined (MIPS_DEBUGGING_INFO)
11335 if (current_function_has_inlines)
11337 add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11338 if (! comp_unit_has_inlines)
11340 add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11341 comp_unit_has_inlines = 1;
11344 #endif
11348 /* Generate a DIE to represent a declared data object. */
11350 static void
11351 gen_variable_die (tree decl, dw_die_ref context_die)
11353 tree origin = decl_ultimate_origin (decl);
11354 dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11356 dw_die_ref old_die = lookup_decl_die (decl);
11357 int declaration = (DECL_EXTERNAL (decl)
11358 || class_or_namespace_scope_p (context_die));
11360 if (origin != NULL)
11361 add_abstract_origin_attribute (var_die, origin);
11363 /* Loop unrolling can create multiple blocks that refer to the same
11364 static variable, so we must test for the DW_AT_declaration flag.
11366 ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11367 copy decls and set the DECL_ABSTRACT flag on them instead of
11368 sharing them.
11370 ??? Duplicated blocks have been rewritten to use .debug_ranges. */
11371 else if (old_die && TREE_STATIC (decl)
11372 && get_AT_flag (old_die, DW_AT_declaration) == 1)
11374 /* This is a definition of a C++ class level static. */
11375 add_AT_specification (var_die, old_die);
11376 if (DECL_NAME (decl))
11378 unsigned file_index = lookup_filename (DECL_SOURCE_FILE (decl));
11380 if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11381 add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11383 if (get_AT_unsigned (old_die, DW_AT_decl_line)
11384 != (unsigned) DECL_SOURCE_LINE (decl))
11386 add_AT_unsigned (var_die, DW_AT_decl_line,
11387 DECL_SOURCE_LINE (decl));
11390 else
11392 add_name_and_src_coords_attributes (var_die, decl);
11393 add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11394 TREE_THIS_VOLATILE (decl), context_die);
11396 if (TREE_PUBLIC (decl))
11397 add_AT_flag (var_die, DW_AT_external, 1);
11399 if (DECL_ARTIFICIAL (decl))
11400 add_AT_flag (var_die, DW_AT_artificial, 1);
11402 if (TREE_PROTECTED (decl))
11403 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11404 else if (TREE_PRIVATE (decl))
11405 add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11408 if (declaration)
11409 add_AT_flag (var_die, DW_AT_declaration, 1);
11411 if (class_or_namespace_scope_p (context_die) || DECL_ABSTRACT (decl))
11412 equate_decl_number_to_die (decl, var_die);
11414 if (! declaration && ! DECL_ABSTRACT (decl))
11416 add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11417 add_pubname (decl, var_die);
11419 else
11420 tree_add_const_value_attribute (var_die, decl);
11423 /* Generate a DIE to represent a label identifier. */
11425 static void
11426 gen_label_die (tree decl, dw_die_ref context_die)
11428 tree origin = decl_ultimate_origin (decl);
11429 dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11430 rtx insn;
11431 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11433 if (origin != NULL)
11434 add_abstract_origin_attribute (lbl_die, origin);
11435 else
11436 add_name_and_src_coords_attributes (lbl_die, decl);
11438 if (DECL_ABSTRACT (decl))
11439 equate_decl_number_to_die (decl, lbl_die);
11440 else
11442 insn = DECL_RTL_IF_SET (decl);
11444 /* Deleted labels are programmer specified labels which have been
11445 eliminated because of various optimizations. We still emit them
11446 here so that it is possible to put breakpoints on them. */
11447 if (insn
11448 && (GET_CODE (insn) == CODE_LABEL
11449 || ((GET_CODE (insn) == NOTE
11450 && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11452 /* When optimization is enabled (via -O) some parts of the compiler
11453 (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11454 represent source-level labels which were explicitly declared by
11455 the user. This really shouldn't be happening though, so catch
11456 it if it ever does happen. */
11457 if (INSN_DELETED_P (insn))
11458 abort ();
11460 ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11461 add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11466 /* Generate a DIE for a lexical block. */
11468 static void
11469 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
11471 dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
11472 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11474 if (! BLOCK_ABSTRACT (stmt))
11476 if (BLOCK_FRAGMENT_CHAIN (stmt))
11478 tree chain;
11480 add_AT_range_list (stmt_die, DW_AT_ranges, add_ranges (stmt));
11482 chain = BLOCK_FRAGMENT_CHAIN (stmt);
11485 add_ranges (chain);
11486 chain = BLOCK_FRAGMENT_CHAIN (chain);
11488 while (chain);
11489 add_ranges (NULL);
11491 else
11493 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
11494 BLOCK_NUMBER (stmt));
11495 add_AT_lbl_id (stmt_die, DW_AT_low_pc, label);
11496 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
11497 BLOCK_NUMBER (stmt));
11498 add_AT_lbl_id (stmt_die, DW_AT_high_pc, label);
11502 decls_for_scope (stmt, stmt_die, depth);
11505 /* Generate a DIE for an inlined subprogram. */
11507 static void
11508 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
11510 tree decl = block_ultimate_origin (stmt);
11512 /* Emit info for the abstract instance first, if we haven't yet. We
11513 must emit this even if the block is abstract, otherwise when we
11514 emit the block below (or elsewhere), we may end up trying to emit
11515 a die whose origin die hasn't been emitted, and crashing. */
11516 dwarf2out_abstract_function (decl);
11518 if (! BLOCK_ABSTRACT (stmt))
11520 dw_die_ref subr_die
11521 = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
11522 char label[MAX_ARTIFICIAL_LABEL_BYTES];
11524 add_abstract_origin_attribute (subr_die, decl);
11525 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
11526 BLOCK_NUMBER (stmt));
11527 add_AT_lbl_id (subr_die, DW_AT_low_pc, label);
11528 ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
11529 BLOCK_NUMBER (stmt));
11530 add_AT_lbl_id (subr_die, DW_AT_high_pc, label);
11531 decls_for_scope (stmt, subr_die, depth);
11532 current_function_has_inlines = 1;
11534 else
11535 /* We may get here if we're the outer block of function A that was
11536 inlined into function B that was inlined into function C. When
11537 generating debugging info for C, dwarf2out_abstract_function(B)
11538 would mark all inlined blocks as abstract, including this one.
11539 So, we wouldn't (and shouldn't) expect labels to be generated
11540 for this one. Instead, just emit debugging info for
11541 declarations within the block. This is particularly important
11542 in the case of initializers of arguments passed from B to us:
11543 if they're statement expressions containing declarations, we
11544 wouldn't generate dies for their abstract variables, and then,
11545 when generating dies for the real variables, we'd die (pun
11546 intended :-) */
11547 gen_lexical_block_die (stmt, context_die, depth);
11550 /* Generate a DIE for a field in a record, or structure. */
11552 static void
11553 gen_field_die (tree decl, dw_die_ref context_die)
11555 dw_die_ref decl_die;
11557 if (TREE_TYPE (decl) == error_mark_node)
11558 return;
11560 decl_die = new_die (DW_TAG_member, context_die, decl);
11561 add_name_and_src_coords_attributes (decl_die, decl);
11562 add_type_attribute (decl_die, member_declared_type (decl),
11563 TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
11564 context_die);
11566 if (DECL_BIT_FIELD_TYPE (decl))
11568 add_byte_size_attribute (decl_die, decl);
11569 add_bit_size_attribute (decl_die, decl);
11570 add_bit_offset_attribute (decl_die, decl);
11573 if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
11574 add_data_member_location_attribute (decl_die, decl);
11576 if (DECL_ARTIFICIAL (decl))
11577 add_AT_flag (decl_die, DW_AT_artificial, 1);
11579 if (TREE_PROTECTED (decl))
11580 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
11581 else if (TREE_PRIVATE (decl))
11582 add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
11585 #if 0
11586 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11587 Use modified_type_die instead.
11588 We keep this code here just in case these types of DIEs may be needed to
11589 represent certain things in other languages (e.g. Pascal) someday. */
11591 static void
11592 gen_pointer_type_die (tree type, dw_die_ref context_die)
11594 dw_die_ref ptr_die
11595 = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
11597 equate_type_number_to_die (type, ptr_die);
11598 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
11599 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
11602 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
11603 Use modified_type_die instead.
11604 We keep this code here just in case these types of DIEs may be needed to
11605 represent certain things in other languages (e.g. Pascal) someday. */
11607 static void
11608 gen_reference_type_die (tree type, dw_die_ref context_die)
11610 dw_die_ref ref_die
11611 = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
11613 equate_type_number_to_die (type, ref_die);
11614 add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
11615 add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
11617 #endif
11619 /* Generate a DIE for a pointer to a member type. */
11621 static void
11622 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
11624 dw_die_ref ptr_die
11625 = new_die (DW_TAG_ptr_to_member_type,
11626 scope_die_for (type, context_die), type);
11628 equate_type_number_to_die (type, ptr_die);
11629 add_AT_die_ref (ptr_die, DW_AT_containing_type,
11630 lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
11631 add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
11634 /* Generate the DIE for the compilation unit. */
11636 static dw_die_ref
11637 gen_compile_unit_die (const char *filename)
11639 dw_die_ref die;
11640 char producer[250];
11641 const char *language_string = lang_hooks.name;
11642 int language;
11644 die = new_die (DW_TAG_compile_unit, NULL, NULL);
11646 if (filename)
11648 add_name_attribute (die, filename);
11649 /* Don't add cwd for <built-in>. */
11650 if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
11651 add_comp_dir_attribute (die);
11654 sprintf (producer, "%s %s", language_string, version_string);
11656 #ifdef MIPS_DEBUGGING_INFO
11657 /* The MIPS/SGI compilers place the 'cc' command line options in the producer
11658 string. The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
11659 not appear in the producer string, the debugger reaches the conclusion
11660 that the object file is stripped and has no debugging information.
11661 To get the MIPS/SGI debugger to believe that there is debugging
11662 information in the object file, we add a -g to the producer string. */
11663 if (debug_info_level > DINFO_LEVEL_TERSE)
11664 strcat (producer, " -g");
11665 #endif
11667 add_AT_string (die, DW_AT_producer, producer);
11669 if (strcmp (language_string, "GNU C++") == 0)
11670 language = DW_LANG_C_plus_plus;
11671 else if (strcmp (language_string, "GNU Ada") == 0)
11672 language = DW_LANG_Ada95;
11673 else if (strcmp (language_string, "GNU F77") == 0)
11674 language = DW_LANG_Fortran77;
11675 else if (strcmp (language_string, "GNU Pascal") == 0)
11676 language = DW_LANG_Pascal83;
11677 else if (strcmp (language_string, "GNU Java") == 0)
11678 language = DW_LANG_Java;
11679 else
11680 language = DW_LANG_C89;
11682 add_AT_unsigned (die, DW_AT_language, language);
11683 return die;
11686 /* Generate a DIE for a string type. */
11688 static void
11689 gen_string_type_die (tree type, dw_die_ref context_die)
11691 dw_die_ref type_die
11692 = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
11694 equate_type_number_to_die (type, type_die);
11696 /* ??? Fudge the string length attribute for now.
11697 TODO: add string length info. */
11698 #if 0
11699 string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
11700 bound_representation (upper_bound, 0, 'u');
11701 #endif
11704 /* Generate the DIE for a base class. */
11706 static void
11707 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
11709 dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
11711 add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
11712 add_data_member_location_attribute (die, binfo);
11714 if (TREE_VIA_VIRTUAL (binfo))
11715 add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
11717 if (access == access_public_node)
11718 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
11719 else if (access == access_protected_node)
11720 add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
11723 /* Generate a DIE for a class member. */
11725 static void
11726 gen_member_die (tree type, dw_die_ref context_die)
11728 tree member;
11729 tree binfo = TYPE_BINFO (type);
11730 dw_die_ref child;
11732 /* If this is not an incomplete type, output descriptions of each of its
11733 members. Note that as we output the DIEs necessary to represent the
11734 members of this record or union type, we will also be trying to output
11735 DIEs to represent the *types* of those members. However the `type'
11736 function (above) will specifically avoid generating type DIEs for member
11737 types *within* the list of member DIEs for this (containing) type except
11738 for those types (of members) which are explicitly marked as also being
11739 members of this (containing) type themselves. The g++ front- end can
11740 force any given type to be treated as a member of some other (containing)
11741 type by setting the TYPE_CONTEXT of the given (member) type to point to
11742 the TREE node representing the appropriate (containing) type. */
11744 /* First output info about the base classes. */
11745 if (binfo && BINFO_BASETYPES (binfo))
11747 tree bases = BINFO_BASETYPES (binfo);
11748 tree accesses = BINFO_BASEACCESSES (binfo);
11749 int n_bases = TREE_VEC_LENGTH (bases);
11750 int i;
11752 for (i = 0; i < n_bases; i++)
11753 gen_inheritance_die (TREE_VEC_ELT (bases, i),
11754 (accesses ? TREE_VEC_ELT (accesses, i)
11755 : access_public_node), context_die);
11758 /* Now output info about the data members and type members. */
11759 for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
11761 /* If we thought we were generating minimal debug info for TYPE
11762 and then changed our minds, some of the member declarations
11763 may have already been defined. Don't define them again, but
11764 do put them in the right order. */
11766 child = lookup_decl_die (member);
11767 if (child)
11768 splice_child_die (context_die, child);
11769 else
11770 gen_decl_die (member, context_die);
11773 /* Now output info about the function members (if any). */
11774 for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
11776 /* Don't include clones in the member list. */
11777 if (DECL_ABSTRACT_ORIGIN (member))
11778 continue;
11780 child = lookup_decl_die (member);
11781 if (child)
11782 splice_child_die (context_die, child);
11783 else
11784 gen_decl_die (member, context_die);
11788 /* Generate a DIE for a structure or union type. If TYPE_DECL_SUPPRESS_DEBUG
11789 is set, we pretend that the type was never defined, so we only get the
11790 member DIEs needed by later specification DIEs. */
11792 static void
11793 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
11795 dw_die_ref type_die = lookup_type_die (type);
11796 dw_die_ref scope_die = 0;
11797 int nested = 0;
11798 int complete = (TYPE_SIZE (type)
11799 && (! TYPE_STUB_DECL (type)
11800 || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
11801 int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
11803 if (type_die && ! complete)
11804 return;
11806 if (TYPE_CONTEXT (type) != NULL_TREE
11807 && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
11808 || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
11809 nested = 1;
11811 scope_die = scope_die_for (type, context_die);
11813 if (! type_die || (nested && scope_die == comp_unit_die))
11814 /* First occurrence of type or toplevel definition of nested class. */
11816 dw_die_ref old_die = type_die;
11818 type_die = new_die (TREE_CODE (type) == RECORD_TYPE
11819 ? DW_TAG_structure_type : DW_TAG_union_type,
11820 scope_die, type);
11821 equate_type_number_to_die (type, type_die);
11822 if (old_die)
11823 add_AT_specification (type_die, old_die);
11824 else
11825 add_name_attribute (type_die, type_tag (type));
11827 else
11828 remove_AT (type_die, DW_AT_declaration);
11830 /* If this type has been completed, then give it a byte_size attribute and
11831 then give a list of members. */
11832 if (complete && !ns_decl)
11834 /* Prevent infinite recursion in cases where the type of some member of
11835 this type is expressed in terms of this type itself. */
11836 TREE_ASM_WRITTEN (type) = 1;
11837 add_byte_size_attribute (type_die, type);
11838 if (TYPE_STUB_DECL (type) != NULL_TREE)
11839 add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11841 /* If the first reference to this type was as the return type of an
11842 inline function, then it may not have a parent. Fix this now. */
11843 if (type_die->die_parent == NULL)
11844 add_child_die (scope_die, type_die);
11846 push_decl_scope (type);
11847 gen_member_die (type, type_die);
11848 pop_decl_scope ();
11850 /* GNU extension: Record what type our vtable lives in. */
11851 if (TYPE_VFIELD (type))
11853 tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
11855 gen_type_die (vtype, context_die);
11856 add_AT_die_ref (type_die, DW_AT_containing_type,
11857 lookup_type_die (vtype));
11860 else
11862 add_AT_flag (type_die, DW_AT_declaration, 1);
11864 /* We don't need to do this for function-local types. */
11865 if (TYPE_STUB_DECL (type)
11866 && ! decl_function_context (TYPE_STUB_DECL (type)))
11867 VARRAY_PUSH_TREE (incomplete_types, type);
11871 /* Generate a DIE for a subroutine _type_. */
11873 static void
11874 gen_subroutine_type_die (tree type, dw_die_ref context_die)
11876 tree return_type = TREE_TYPE (type);
11877 dw_die_ref subr_die
11878 = new_die (DW_TAG_subroutine_type,
11879 scope_die_for (type, context_die), type);
11881 equate_type_number_to_die (type, subr_die);
11882 add_prototyped_attribute (subr_die, type);
11883 add_type_attribute (subr_die, return_type, 0, 0, context_die);
11884 gen_formal_types_die (type, subr_die);
11887 /* Generate a DIE for a type definition. */
11889 static void
11890 gen_typedef_die (tree decl, dw_die_ref context_die)
11892 dw_die_ref type_die;
11893 tree origin;
11895 if (TREE_ASM_WRITTEN (decl))
11896 return;
11898 TREE_ASM_WRITTEN (decl) = 1;
11899 type_die = new_die (DW_TAG_typedef, context_die, decl);
11900 origin = decl_ultimate_origin (decl);
11901 if (origin != NULL)
11902 add_abstract_origin_attribute (type_die, origin);
11903 else
11905 tree type;
11907 add_name_and_src_coords_attributes (type_die, decl);
11908 if (DECL_ORIGINAL_TYPE (decl))
11910 type = DECL_ORIGINAL_TYPE (decl);
11912 if (type == TREE_TYPE (decl))
11913 abort ();
11914 else
11915 equate_type_number_to_die (TREE_TYPE (decl), type_die);
11917 else
11918 type = TREE_TYPE (decl);
11920 add_type_attribute (type_die, type, TREE_READONLY (decl),
11921 TREE_THIS_VOLATILE (decl), context_die);
11924 if (DECL_ABSTRACT (decl))
11925 equate_decl_number_to_die (decl, type_die);
11928 /* Generate a type description DIE. */
11930 static void
11931 gen_type_die (tree type, dw_die_ref context_die)
11933 int need_pop;
11935 if (type == NULL_TREE || type == error_mark_node)
11936 return;
11938 if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11939 && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
11941 if (TREE_ASM_WRITTEN (type))
11942 return;
11944 /* Prevent broken recursion; we can't hand off to the same type. */
11945 if (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) == type)
11946 abort ();
11948 TREE_ASM_WRITTEN (type) = 1;
11949 gen_decl_die (TYPE_NAME (type), context_die);
11950 return;
11953 /* We are going to output a DIE to represent the unqualified version
11954 of this type (i.e. without any const or volatile qualifiers) so
11955 get the main variant (i.e. the unqualified version) of this type
11956 now. (Vectors are special because the debugging info is in the
11957 cloned type itself). */
11958 if (TREE_CODE (type) != VECTOR_TYPE)
11959 type = type_main_variant (type);
11961 if (TREE_ASM_WRITTEN (type))
11962 return;
11964 switch (TREE_CODE (type))
11966 case ERROR_MARK:
11967 break;
11969 case POINTER_TYPE:
11970 case REFERENCE_TYPE:
11971 /* We must set TREE_ASM_WRITTEN in case this is a recursive type. This
11972 ensures that the gen_type_die recursion will terminate even if the
11973 type is recursive. Recursive types are possible in Ada. */
11974 /* ??? We could perhaps do this for all types before the switch
11975 statement. */
11976 TREE_ASM_WRITTEN (type) = 1;
11978 /* For these types, all that is required is that we output a DIE (or a
11979 set of DIEs) to represent the "basis" type. */
11980 gen_type_die (TREE_TYPE (type), context_die);
11981 break;
11983 case OFFSET_TYPE:
11984 /* This code is used for C++ pointer-to-data-member types.
11985 Output a description of the relevant class type. */
11986 gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
11988 /* Output a description of the type of the object pointed to. */
11989 gen_type_die (TREE_TYPE (type), context_die);
11991 /* Now output a DIE to represent this pointer-to-data-member type
11992 itself. */
11993 gen_ptr_to_mbr_type_die (type, context_die);
11994 break;
11996 case SET_TYPE:
11997 gen_type_die (TYPE_DOMAIN (type), context_die);
11998 gen_set_type_die (type, context_die);
11999 break;
12001 case FILE_TYPE:
12002 gen_type_die (TREE_TYPE (type), context_die);
12003 abort (); /* No way to represent these in Dwarf yet! */
12004 break;
12006 case FUNCTION_TYPE:
12007 /* Force out return type (in case it wasn't forced out already). */
12008 gen_type_die (TREE_TYPE (type), context_die);
12009 gen_subroutine_type_die (type, context_die);
12010 break;
12012 case METHOD_TYPE:
12013 /* Force out return type (in case it wasn't forced out already). */
12014 gen_type_die (TREE_TYPE (type), context_die);
12015 gen_subroutine_type_die (type, context_die);
12016 break;
12018 case ARRAY_TYPE:
12019 if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
12021 gen_type_die (TREE_TYPE (type), context_die);
12022 gen_string_type_die (type, context_die);
12024 else
12025 gen_array_type_die (type, context_die);
12026 break;
12028 case VECTOR_TYPE:
12029 gen_array_type_die (type, context_die);
12030 break;
12032 case ENUMERAL_TYPE:
12033 case RECORD_TYPE:
12034 case UNION_TYPE:
12035 case QUAL_UNION_TYPE:
12036 /* If this is a nested type whose containing class hasn't been written
12037 out yet, writing it out will cover this one, too. This does not apply
12038 to instantiations of member class templates; they need to be added to
12039 the containing class as they are generated. FIXME: This hurts the
12040 idea of combining type decls from multiple TUs, since we can't predict
12041 what set of template instantiations we'll get. */
12042 if (TYPE_CONTEXT (type)
12043 && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12044 && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12046 gen_type_die (TYPE_CONTEXT (type), context_die);
12048 if (TREE_ASM_WRITTEN (type))
12049 return;
12051 /* If that failed, attach ourselves to the stub. */
12052 push_decl_scope (TYPE_CONTEXT (type));
12053 context_die = lookup_type_die (TYPE_CONTEXT (type));
12054 need_pop = 1;
12056 else
12058 declare_in_namespace (type, context_die);
12059 need_pop = 0;
12062 if (TREE_CODE (type) == ENUMERAL_TYPE)
12063 gen_enumeration_type_die (type, context_die);
12064 else
12065 gen_struct_or_union_type_die (type, context_die);
12067 if (need_pop)
12068 pop_decl_scope ();
12070 /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12071 it up if it is ever completed. gen_*_type_die will set it for us
12072 when appropriate. */
12073 return;
12075 case VOID_TYPE:
12076 case INTEGER_TYPE:
12077 case REAL_TYPE:
12078 case COMPLEX_TYPE:
12079 case BOOLEAN_TYPE:
12080 case CHAR_TYPE:
12081 /* No DIEs needed for fundamental types. */
12082 break;
12084 case LANG_TYPE:
12085 /* No Dwarf representation currently defined. */
12086 break;
12088 default:
12089 abort ();
12092 TREE_ASM_WRITTEN (type) = 1;
12095 /* Generate a DIE for a tagged type instantiation. */
12097 static void
12098 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12100 if (type == NULL_TREE || type == error_mark_node)
12101 return;
12103 /* We are going to output a DIE to represent the unqualified version of
12104 this type (i.e. without any const or volatile qualifiers) so make sure
12105 that we have the main variant (i.e. the unqualified version) of this
12106 type now. */
12107 if (type != type_main_variant (type))
12108 abort ();
12110 /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12111 an instance of an unresolved type. */
12113 switch (TREE_CODE (type))
12115 case ERROR_MARK:
12116 break;
12118 case ENUMERAL_TYPE:
12119 gen_inlined_enumeration_type_die (type, context_die);
12120 break;
12122 case RECORD_TYPE:
12123 gen_inlined_structure_type_die (type, context_die);
12124 break;
12126 case UNION_TYPE:
12127 case QUAL_UNION_TYPE:
12128 gen_inlined_union_type_die (type, context_die);
12129 break;
12131 default:
12132 abort ();
12136 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12137 things which are local to the given block. */
12139 static void
12140 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12142 int must_output_die = 0;
12143 tree origin;
12144 tree decl;
12145 enum tree_code origin_code;
12147 /* Ignore blocks never really used to make RTL. */
12148 if (stmt == NULL_TREE || !TREE_USED (stmt)
12149 || (!TREE_ASM_WRITTEN (stmt) && !BLOCK_ABSTRACT (stmt)))
12150 return;
12152 /* If the block is one fragment of a non-contiguous block, do not
12153 process the variables, since they will have been done by the
12154 origin block. Do process subblocks. */
12155 if (BLOCK_FRAGMENT_ORIGIN (stmt))
12157 tree sub;
12159 for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12160 gen_block_die (sub, context_die, depth + 1);
12162 return;
12165 /* Determine the "ultimate origin" of this block. This block may be an
12166 inlined instance of an inlined instance of inline function, so we have
12167 to trace all of the way back through the origin chain to find out what
12168 sort of node actually served as the original seed for the creation of
12169 the current block. */
12170 origin = block_ultimate_origin (stmt);
12171 origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12173 /* Determine if we need to output any Dwarf DIEs at all to represent this
12174 block. */
12175 if (origin_code == FUNCTION_DECL)
12176 /* The outer scopes for inlinings *must* always be represented. We
12177 generate DW_TAG_inlined_subroutine DIEs for them. (See below.) */
12178 must_output_die = 1;
12179 else
12181 /* In the case where the current block represents an inlining of the
12182 "body block" of an inline function, we must *NOT* output any DIE for
12183 this block because we have already output a DIE to represent the whole
12184 inlined function scope and the "body block" of any function doesn't
12185 really represent a different scope according to ANSI C rules. So we
12186 check here to make sure that this block does not represent a "body
12187 block inlining" before trying to set the MUST_OUTPUT_DIE flag. */
12188 if (! is_body_block (origin ? origin : stmt))
12190 /* Determine if this block directly contains any "significant"
12191 local declarations which we will need to output DIEs for. */
12192 if (debug_info_level > DINFO_LEVEL_TERSE)
12193 /* We are not in terse mode so *any* local declaration counts
12194 as being a "significant" one. */
12195 must_output_die = (BLOCK_VARS (stmt) != NULL);
12196 else
12197 /* We are in terse mode, so only local (nested) function
12198 definitions count as "significant" local declarations. */
12199 for (decl = BLOCK_VARS (stmt);
12200 decl != NULL; decl = TREE_CHAIN (decl))
12201 if (TREE_CODE (decl) == FUNCTION_DECL
12202 && DECL_INITIAL (decl))
12204 must_output_die = 1;
12205 break;
12210 /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12211 DIE for any block which contains no significant local declarations at
12212 all. Rather, in such cases we just call `decls_for_scope' so that any
12213 needed Dwarf info for any sub-blocks will get properly generated. Note
12214 that in terse mode, our definition of what constitutes a "significant"
12215 local declaration gets restricted to include only inlined function
12216 instances and local (nested) function definitions. */
12217 if (must_output_die)
12219 if (origin_code == FUNCTION_DECL)
12220 gen_inlined_subroutine_die (stmt, context_die, depth);
12221 else
12222 gen_lexical_block_die (stmt, context_die, depth);
12224 else
12225 decls_for_scope (stmt, context_die, depth);
12228 /* Generate all of the decls declared within a given scope and (recursively)
12229 all of its sub-blocks. */
12231 static void
12232 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12234 tree decl;
12235 tree subblocks;
12237 /* Ignore blocks never really used to make RTL. */
12238 if (stmt == NULL_TREE || ! TREE_USED (stmt))
12239 return;
12241 /* Output the DIEs to represent all of the data objects and typedefs
12242 declared directly within this block but not within any nested
12243 sub-blocks. Also, nested function and tag DIEs have been
12244 generated with a parent of NULL; fix that up now. */
12245 for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12247 dw_die_ref die;
12249 if (TREE_CODE (decl) == FUNCTION_DECL)
12250 die = lookup_decl_die (decl);
12251 else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12252 die = lookup_type_die (TREE_TYPE (decl));
12253 else
12254 die = NULL;
12256 if (die != NULL && die->die_parent == NULL)
12257 add_child_die (context_die, die);
12258 else
12259 gen_decl_die (decl, context_die);
12262 /* If we're at -g1, we're not interested in subblocks. */
12263 if (debug_info_level <= DINFO_LEVEL_TERSE)
12264 return;
12266 /* Output the DIEs to represent all sub-blocks (and the items declared
12267 therein) of this block. */
12268 for (subblocks = BLOCK_SUBBLOCKS (stmt);
12269 subblocks != NULL;
12270 subblocks = BLOCK_CHAIN (subblocks))
12271 gen_block_die (subblocks, context_die, depth + 1);
12274 /* Is this a typedef we can avoid emitting? */
12276 static inline int
12277 is_redundant_typedef (tree decl)
12279 if (TYPE_DECL_IS_STUB (decl))
12280 return 1;
12282 if (DECL_ARTIFICIAL (decl)
12283 && DECL_CONTEXT (decl)
12284 && is_tagged_type (DECL_CONTEXT (decl))
12285 && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12286 && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12287 /* Also ignore the artificial member typedef for the class name. */
12288 return 1;
12290 return 0;
12293 /* Returns the DIE for namespace NS or aborts.
12295 Note that namespaces don't really have a lexical context, so there's no
12296 need to pass in a context_die. They always go inside their containing
12297 namespace, or comp_unit_die if none. */
12299 static dw_die_ref
12300 force_namespace_die (tree ns)
12302 dw_die_ref ns_die;
12304 dwarf2out_decl (ns);
12305 ns_die = lookup_decl_die (ns);
12306 if (!ns_die)
12307 abort();
12309 return ns_die;
12312 /* Force out any required namespaces to be able to output DECL,
12313 and return the new context_die for it, if it's changed. */
12315 static dw_die_ref
12316 setup_namespace_context (tree thing, dw_die_ref context_die)
12318 tree context = DECL_P (thing) ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing);
12319 if (context && TREE_CODE (context) == NAMESPACE_DECL)
12320 /* Force out the namespace. */
12321 context_die = force_namespace_die (context);
12323 return context_die;
12326 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12327 type) within its namespace, if appropriate.
12329 For compatibility with older debuggers, namespace DIEs only contain
12330 declarations; all definitions are emitted at CU scope. */
12332 static void
12333 declare_in_namespace (tree thing, dw_die_ref context_die)
12335 dw_die_ref ns_context;
12337 if (debug_info_level <= DINFO_LEVEL_TERSE)
12338 return;
12340 ns_context = setup_namespace_context (thing, context_die);
12342 if (ns_context != context_die)
12344 if (DECL_P (thing))
12345 gen_decl_die (thing, ns_context);
12346 else
12347 gen_type_die (thing, ns_context);
12351 /* Generate a DIE for a namespace or namespace alias. */
12353 static void
12354 gen_namespace_die (tree decl)
12356 dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12358 /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12359 they are an alias of. */
12360 if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12362 /* Output a real namespace. */
12363 dw_die_ref namespace_die
12364 = new_die (DW_TAG_namespace, context_die, decl);
12365 add_name_and_src_coords_attributes (namespace_die, decl);
12366 equate_decl_number_to_die (decl, namespace_die);
12368 else
12370 /* Output a namespace alias. */
12372 /* Force out the namespace we are an alias of, if necessary. */
12373 dw_die_ref origin_die
12374 = force_namespace_die (DECL_ABSTRACT_ORIGIN (decl));
12376 /* Now create the namespace alias DIE. */
12377 dw_die_ref namespace_die
12378 = new_die (DW_TAG_imported_declaration, context_die, decl);
12379 add_name_and_src_coords_attributes (namespace_die, decl);
12380 add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12381 equate_decl_number_to_die (decl, namespace_die);
12385 /* Generate Dwarf debug information for a decl described by DECL. */
12387 static void
12388 gen_decl_die (tree decl, dw_die_ref context_die)
12390 tree origin;
12392 if (DECL_P (decl) && DECL_IGNORED_P (decl))
12393 return;
12395 switch (TREE_CODE (decl))
12397 case ERROR_MARK:
12398 break;
12400 case CONST_DECL:
12401 /* The individual enumerators of an enum type get output when we output
12402 the Dwarf representation of the relevant enum type itself. */
12403 break;
12405 case FUNCTION_DECL:
12406 /* Don't output any DIEs to represent mere function declarations,
12407 unless they are class members or explicit block externs. */
12408 if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
12409 && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
12410 break;
12412 /* If we're emitting a clone, emit info for the abstract instance. */
12413 if (DECL_ORIGIN (decl) != decl)
12414 dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
12416 /* If we're emitting an out-of-line copy of an inline function,
12417 emit info for the abstract instance and set up to refer to it. */
12418 else if (cgraph_function_possibly_inlined_p (decl)
12419 && ! DECL_ABSTRACT (decl)
12420 && ! class_or_namespace_scope_p (context_die)
12421 /* dwarf2out_abstract_function won't emit a die if this is just
12422 a declaration. We must avoid setting DECL_ABSTRACT_ORIGIN in
12423 that case, because that works only if we have a die. */
12424 && DECL_INITIAL (decl) != NULL_TREE)
12426 dwarf2out_abstract_function (decl);
12427 set_decl_origin_self (decl);
12430 /* Otherwise we're emitting the primary DIE for this decl. */
12431 else if (debug_info_level > DINFO_LEVEL_TERSE)
12433 /* Before we describe the FUNCTION_DECL itself, make sure that we
12434 have described its return type. */
12435 gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
12437 /* And its virtual context. */
12438 if (DECL_VINDEX (decl) != NULL_TREE)
12439 gen_type_die (DECL_CONTEXT (decl), context_die);
12441 /* And its containing type. */
12442 origin = decl_class_context (decl);
12443 if (origin != NULL_TREE)
12444 gen_type_die_for_member (origin, decl, context_die);
12446 /* And its containing namespace. */
12447 declare_in_namespace (decl, context_die);
12450 /* Now output a DIE to represent the function itself. */
12451 gen_subprogram_die (decl, context_die);
12452 break;
12454 case TYPE_DECL:
12455 /* If we are in terse mode, don't generate any DIEs to represent any
12456 actual typedefs. */
12457 if (debug_info_level <= DINFO_LEVEL_TERSE)
12458 break;
12460 /* In the special case of a TYPE_DECL node representing the declaration
12461 of some type tag, if the given TYPE_DECL is marked as having been
12462 instantiated from some other (original) TYPE_DECL node (e.g. one which
12463 was generated within the original definition of an inline function) we
12464 have to generate a special (abbreviated) DW_TAG_structure_type,
12465 DW_TAG_union_type, or DW_TAG_enumeration_type DIE here. */
12466 if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
12468 gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
12469 break;
12472 if (is_redundant_typedef (decl))
12473 gen_type_die (TREE_TYPE (decl), context_die);
12474 else
12475 /* Output a DIE to represent the typedef itself. */
12476 gen_typedef_die (decl, context_die);
12477 break;
12479 case LABEL_DECL:
12480 if (debug_info_level >= DINFO_LEVEL_NORMAL)
12481 gen_label_die (decl, context_die);
12482 break;
12484 case VAR_DECL:
12485 /* If we are in terse mode, don't generate any DIEs to represent any
12486 variable declarations or definitions. */
12487 if (debug_info_level <= DINFO_LEVEL_TERSE)
12488 break;
12490 /* Output any DIEs that are needed to specify the type of this data
12491 object. */
12492 gen_type_die (TREE_TYPE (decl), context_die);
12494 /* And its containing type. */
12495 origin = decl_class_context (decl);
12496 if (origin != NULL_TREE)
12497 gen_type_die_for_member (origin, decl, context_die);
12499 /* And its containing namespace. */
12500 declare_in_namespace (decl, context_die);
12502 /* Now output the DIE to represent the data object itself. This gets
12503 complicated because of the possibility that the VAR_DECL really
12504 represents an inlined instance of a formal parameter for an inline
12505 function. */
12506 origin = decl_ultimate_origin (decl);
12507 if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
12508 gen_formal_parameter_die (decl, context_die);
12509 else
12510 gen_variable_die (decl, context_die);
12511 break;
12513 case FIELD_DECL:
12514 /* Ignore the nameless fields that are used to skip bits but handle C++
12515 anonymous unions. */
12516 if (DECL_NAME (decl) != NULL_TREE
12517 || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE)
12519 gen_type_die (member_declared_type (decl), context_die);
12520 gen_field_die (decl, context_die);
12522 break;
12524 case PARM_DECL:
12525 gen_type_die (TREE_TYPE (decl), context_die);
12526 gen_formal_parameter_die (decl, context_die);
12527 break;
12529 case NAMESPACE_DECL:
12530 gen_namespace_die (decl);
12531 break;
12533 default:
12534 if ((int)TREE_CODE (decl) > NUM_TREE_CODES)
12535 /* Probably some frontend-internal decl. Assume we don't care. */
12536 break;
12537 abort ();
12541 /* Add Ada "use" clause information for SGI Workshop debugger. */
12543 void
12544 dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
12546 unsigned int file_index;
12548 if (filename != NULL)
12550 dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL);
12551 tree context_list_decl
12552 = build_decl (LABEL_DECL, get_identifier (context_list),
12553 void_type_node);
12555 TREE_PUBLIC (context_list_decl) = TRUE;
12556 add_name_attribute (unit_die, context_list);
12557 file_index = lookup_filename (filename);
12558 add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
12559 add_pubname (context_list_decl, unit_die);
12563 /* Output debug information for global decl DECL. Called from toplev.c after
12564 compilation proper has finished. */
12566 static void
12567 dwarf2out_global_decl (tree decl)
12569 /* Output DWARF2 information for file-scope tentative data object
12570 declarations, file-scope (extern) function declarations (which had no
12571 corresponding body) and file-scope tagged type declarations and
12572 definitions which have not yet been forced out. */
12573 if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
12574 dwarf2out_decl (decl);
12577 /* Write the debugging output for DECL. */
12579 void
12580 dwarf2out_decl (tree decl)
12582 dw_die_ref context_die = comp_unit_die;
12584 switch (TREE_CODE (decl))
12586 case ERROR_MARK:
12587 return;
12589 case FUNCTION_DECL:
12590 /* What we would really like to do here is to filter out all mere
12591 file-scope declarations of file-scope functions which are never
12592 referenced later within this translation unit (and keep all of ones
12593 that *are* referenced later on) but we aren't clairvoyant, so we have
12594 no idea which functions will be referenced in the future (i.e. later
12595 on within the current translation unit). So here we just ignore all
12596 file-scope function declarations which are not also definitions. If
12597 and when the debugger needs to know something about these functions,
12598 it will have to hunt around and find the DWARF information associated
12599 with the definition of the function.
12601 We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
12602 nodes represent definitions and which ones represent mere
12603 declarations. We have to check DECL_INITIAL instead. That's because
12604 the C front-end supports some weird semantics for "extern inline"
12605 function definitions. These can get inlined within the current
12606 translation unit (an thus, we need to generate Dwarf info for their
12607 abstract instances so that the Dwarf info for the concrete inlined
12608 instances can have something to refer to) but the compiler never
12609 generates any out-of-lines instances of such things (despite the fact
12610 that they *are* definitions).
12612 The important point is that the C front-end marks these "extern
12613 inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
12614 them anyway. Note that the C++ front-end also plays some similar games
12615 for inline function definitions appearing within include files which
12616 also contain `#pragma interface' pragmas. */
12617 if (DECL_INITIAL (decl) == NULL_TREE)
12618 return;
12620 /* If we're a nested function, initially use a parent of NULL; if we're
12621 a plain function, this will be fixed up in decls_for_scope. If
12622 we're a method, it will be ignored, since we already have a DIE. */
12623 if (decl_function_context (decl)
12624 /* But if we're in terse mode, we don't care about scope. */
12625 && debug_info_level > DINFO_LEVEL_TERSE)
12626 context_die = NULL;
12627 break;
12629 case VAR_DECL:
12630 /* Ignore this VAR_DECL if it refers to a file-scope extern data object
12631 declaration and if the declaration was never even referenced from
12632 within this entire compilation unit. We suppress these DIEs in
12633 order to save space in the .debug section (by eliminating entries
12634 which are probably useless). Note that we must not suppress
12635 block-local extern declarations (whether used or not) because that
12636 would screw-up the debugger's name lookup mechanism and cause it to
12637 miss things which really ought to be in scope at a given point. */
12638 if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
12639 return;
12641 /* If we are in terse mode, don't generate any DIEs to represent any
12642 variable declarations or definitions. */
12643 if (debug_info_level <= DINFO_LEVEL_TERSE)
12644 return;
12645 break;
12647 case NAMESPACE_DECL:
12648 if (debug_info_level <= DINFO_LEVEL_TERSE)
12649 return;
12650 if (lookup_decl_die (decl) != NULL)
12651 return;
12652 break;
12654 case TYPE_DECL:
12655 /* Don't emit stubs for types unless they are needed by other DIEs. */
12656 if (TYPE_DECL_SUPPRESS_DEBUG (decl))
12657 return;
12659 /* Don't bother trying to generate any DIEs to represent any of the
12660 normal built-in types for the language we are compiling. */
12661 if (DECL_SOURCE_LINE (decl) == 0)
12663 /* OK, we need to generate one for `bool' so GDB knows what type
12664 comparisons have. */
12665 if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
12666 == DW_LANG_C_plus_plus)
12667 && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
12668 && ! DECL_IGNORED_P (decl))
12669 modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
12671 return;
12674 /* If we are in terse mode, don't generate any DIEs for types. */
12675 if (debug_info_level <= DINFO_LEVEL_TERSE)
12676 return;
12678 /* If we're a function-scope tag, initially use a parent of NULL;
12679 this will be fixed up in decls_for_scope. */
12680 if (decl_function_context (decl))
12681 context_die = NULL;
12683 break;
12685 default:
12686 return;
12689 gen_decl_die (decl, context_die);
12692 /* Output a marker (i.e. a label) for the beginning of the generated code for
12693 a lexical block. */
12695 static void
12696 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
12697 unsigned int blocknum)
12699 function_section (current_function_decl);
12700 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
12703 /* Output a marker (i.e. a label) for the end of the generated code for a
12704 lexical block. */
12706 static void
12707 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
12709 function_section (current_function_decl);
12710 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
12713 /* Returns nonzero if it is appropriate not to emit any debugging
12714 information for BLOCK, because it doesn't contain any instructions.
12716 Don't allow this for blocks with nested functions or local classes
12717 as we would end up with orphans, and in the presence of scheduling
12718 we may end up calling them anyway. */
12720 static bool
12721 dwarf2out_ignore_block (tree block)
12723 tree decl;
12725 for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
12726 if (TREE_CODE (decl) == FUNCTION_DECL
12727 || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
12728 return 0;
12730 return 1;
12733 /* Lookup FILE_NAME (in the list of filenames that we know about here in
12734 dwarf2out.c) and return its "index". The index of each (known) filename is
12735 just a unique number which is associated with only that one filename. We
12736 need such numbers for the sake of generating labels (in the .debug_sfnames
12737 section) and references to those files numbers (in the .debug_srcinfo
12738 and.debug_macinfo sections). If the filename given as an argument is not
12739 found in our current list, add it to the list and assign it the next
12740 available unique index number. In order to speed up searches, we remember
12741 the index of the filename was looked up last. This handles the majority of
12742 all searches. */
12744 static unsigned
12745 lookup_filename (const char *file_name)
12747 size_t i, n;
12748 char *save_file_name;
12750 /* Check to see if the file name that was searched on the previous
12751 call matches this file name. If so, return the index. */
12752 if (file_table_last_lookup_index != 0)
12754 const char *last
12755 = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
12756 if (strcmp (file_name, last) == 0)
12757 return file_table_last_lookup_index;
12760 /* Didn't match the previous lookup, search the table */
12761 n = VARRAY_ACTIVE_SIZE (file_table);
12762 for (i = 1; i < n; i++)
12763 if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
12765 file_table_last_lookup_index = i;
12766 return i;
12769 /* Add the new entry to the end of the filename table. */
12770 file_table_last_lookup_index = n;
12771 save_file_name = (char *) ggc_strdup (file_name);
12772 VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
12773 VARRAY_PUSH_UINT (file_table_emitted, 0);
12775 return i;
12778 static int
12779 maybe_emit_file (int fileno)
12781 if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
12783 if (!VARRAY_UINT (file_table_emitted, fileno))
12785 VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
12786 fprintf (asm_out_file, "\t.file %u ",
12787 VARRAY_UINT (file_table_emitted, fileno));
12788 output_quoted_string (asm_out_file,
12789 VARRAY_CHAR_PTR (file_table, fileno));
12790 fputc ('\n', asm_out_file);
12792 return VARRAY_UINT (file_table_emitted, fileno);
12794 else
12795 return fileno;
12798 static void
12799 init_file_table (void)
12801 /* Allocate the initial hunk of the file_table. */
12802 VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
12803 VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
12805 /* Skip the first entry - file numbers begin at 1. */
12806 VARRAY_PUSH_CHAR_PTR (file_table, NULL);
12807 VARRAY_PUSH_UINT (file_table_emitted, 0);
12808 file_table_last_lookup_index = 0;
12811 /* Called by the final INSN scan whenever we see a var location. We
12812 use it to drop labels in the right places, and throw the location in
12813 our lookup table. */
12815 static void
12816 dwarf2out_var_location (rtx loc_note)
12818 char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
12819 struct var_loc_node *newloc;
12820 rtx prev_insn;
12821 static rtx last_insn;
12822 static const char *last_label;
12824 if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
12825 return;
12826 prev_insn = PREV_INSN (loc_note);
12828 newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
12829 /* If the insn we processed last time is the previous insn
12830 and it is also a var location note, use the label we emitted
12831 last time. */
12832 if (last_insn != NULL_RTX
12833 && last_insn == prev_insn
12834 && GET_CODE (prev_insn) == NOTE
12835 && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
12837 newloc->label = last_label;
12839 else
12841 ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
12842 ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
12843 loclabel_num++;
12844 newloc->label = ggc_strdup (loclabel);
12846 newloc->var_loc_note = loc_note;
12847 newloc->next = NULL;
12849 last_insn = loc_note;
12850 last_label = newloc->label;
12852 add_var_loc_to_decl (NOTE_VAR_LOCATION_DECL (loc_note), newloc);
12855 /* We need to reset the locations at the beginning of each
12856 function. We can't do this in the end_function hook, because the
12857 declarations that use the locations won't have been outputted when
12858 that hook is called. */
12860 static void
12861 dwarf2out_begin_function (tree unused ATTRIBUTE_UNUSED)
12863 htab_empty (decl_loc_table);
12866 /* Output a label to mark the beginning of a source code line entry
12867 and record information relating to this source line, in
12868 'line_info_table' for later output of the .debug_line section. */
12870 static void
12871 dwarf2out_source_line (unsigned int line, const char *filename)
12873 if (debug_info_level >= DINFO_LEVEL_NORMAL
12874 && line != 0)
12876 function_section (current_function_decl);
12878 /* If requested, emit something human-readable. */
12879 if (flag_debug_asm)
12880 fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
12881 filename, line);
12883 if (DWARF2_ASM_LINE_DEBUG_INFO)
12885 unsigned file_num = lookup_filename (filename);
12887 file_num = maybe_emit_file (file_num);
12889 /* Emit the .loc directive understood by GNU as. */
12890 fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
12892 /* Indicate that line number info exists. */
12893 line_info_table_in_use++;
12895 /* Indicate that multiple line number tables exist. */
12896 if (DECL_SECTION_NAME (current_function_decl))
12897 separate_line_info_table_in_use++;
12899 else if (DECL_SECTION_NAME (current_function_decl))
12901 dw_separate_line_info_ref line_info;
12902 (*targetm.asm_out.internal_label) (asm_out_file, SEPARATE_LINE_CODE_LABEL,
12903 separate_line_info_table_in_use);
12905 /* expand the line info table if necessary */
12906 if (separate_line_info_table_in_use
12907 == separate_line_info_table_allocated)
12909 separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
12910 separate_line_info_table
12911 = ggc_realloc (separate_line_info_table,
12912 separate_line_info_table_allocated
12913 * sizeof (dw_separate_line_info_entry));
12914 memset (separate_line_info_table
12915 + separate_line_info_table_in_use,
12917 (LINE_INFO_TABLE_INCREMENT
12918 * sizeof (dw_separate_line_info_entry)));
12921 /* Add the new entry at the end of the line_info_table. */
12922 line_info
12923 = &separate_line_info_table[separate_line_info_table_in_use++];
12924 line_info->dw_file_num = lookup_filename (filename);
12925 line_info->dw_line_num = line;
12926 line_info->function = current_function_funcdef_no;
12928 else
12930 dw_line_info_ref line_info;
12932 (*targetm.asm_out.internal_label) (asm_out_file, LINE_CODE_LABEL,
12933 line_info_table_in_use);
12935 /* Expand the line info table if necessary. */
12936 if (line_info_table_in_use == line_info_table_allocated)
12938 line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
12939 line_info_table
12940 = ggc_realloc (line_info_table,
12941 (line_info_table_allocated
12942 * sizeof (dw_line_info_entry)));
12943 memset (line_info_table + line_info_table_in_use, 0,
12944 LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
12947 /* Add the new entry at the end of the line_info_table. */
12948 line_info = &line_info_table[line_info_table_in_use++];
12949 line_info->dw_file_num = lookup_filename (filename);
12950 line_info->dw_line_num = line;
12955 /* Record the beginning of a new source file. */
12957 static void
12958 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
12960 if (flag_eliminate_dwarf2_dups)
12962 /* Record the beginning of the file for break_out_includes. */
12963 dw_die_ref bincl_die;
12965 bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
12966 add_AT_string (bincl_die, DW_AT_name, filename);
12969 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
12971 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
12972 dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
12973 dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
12974 lineno);
12975 maybe_emit_file (lookup_filename (filename));
12976 dw2_asm_output_data_uleb128 (lookup_filename (filename),
12977 "Filename we just started");
12981 /* Record the end of a source file. */
12983 static void
12984 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
12986 if (flag_eliminate_dwarf2_dups)
12987 /* Record the end of the file for break_out_includes. */
12988 new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
12990 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
12992 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
12993 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
12997 /* Called from debug_define in toplev.c. The `buffer' parameter contains
12998 the tail part of the directive line, i.e. the part which is past the
12999 initial whitespace, #, whitespace, directive-name, whitespace part. */
13001 static void
13002 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13003 const char *buffer ATTRIBUTE_UNUSED)
13005 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13007 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13008 dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13009 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13010 dw2_asm_output_nstring (buffer, -1, "The macro");
13014 /* Called from debug_undef in toplev.c. The `buffer' parameter contains
13015 the tail part of the directive line, i.e. the part which is past the
13016 initial whitespace, #, whitespace, directive-name, whitespace part. */
13018 static void
13019 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13020 const char *buffer ATTRIBUTE_UNUSED)
13022 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13024 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13025 dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13026 dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13027 dw2_asm_output_nstring (buffer, -1, "The macro");
13031 /* Set up for Dwarf output at the start of compilation. */
13033 static void
13034 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13036 init_file_table ();
13038 /* Allocate the decl_die_table. */
13039 decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13040 decl_die_table_eq, NULL);
13042 /* Allocate the decl_loc_table. */
13043 decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13044 decl_loc_table_eq, NULL);
13046 /* Allocate the initial hunk of the decl_scope_table. */
13047 VARRAY_TREE_INIT (decl_scope_table, 256, "decl_scope_table");
13049 /* Allocate the initial hunk of the abbrev_die_table. */
13050 abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13051 * sizeof (dw_die_ref));
13052 abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13053 /* Zero-th entry is allocated, but unused */
13054 abbrev_die_table_in_use = 1;
13056 /* Allocate the initial hunk of the line_info_table. */
13057 line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13058 * sizeof (dw_line_info_entry));
13059 line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13061 /* Zero-th entry is allocated, but unused */
13062 line_info_table_in_use = 1;
13064 /* Generate the initial DIE for the .debug section. Note that the (string)
13065 value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13066 will (typically) be a relative pathname and that this pathname should be
13067 taken as being relative to the directory from which the compiler was
13068 invoked when the given (base) source file was compiled. We will fill
13069 in this value in dwarf2out_finish. */
13070 comp_unit_die = gen_compile_unit_die (NULL);
13072 VARRAY_TREE_INIT (incomplete_types, 64, "incomplete_types");
13074 VARRAY_RTX_INIT (used_rtx_varray, 32, "used_rtx_varray");
13076 ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13077 ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13078 DEBUG_ABBREV_SECTION_LABEL, 0);
13079 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
13080 ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13081 else
13082 strcpy (text_section_label, stripattributes (TEXT_SECTION_NAME));
13084 ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13085 DEBUG_INFO_SECTION_LABEL, 0);
13086 ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13087 DEBUG_LINE_SECTION_LABEL, 0);
13088 ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13089 DEBUG_RANGES_SECTION_LABEL, 0);
13090 named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
13091 ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13092 named_section_flags (DEBUG_INFO_SECTION, SECTION_DEBUG);
13093 ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13094 named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
13095 ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13097 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13099 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13100 ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13101 DEBUG_MACINFO_SECTION_LABEL, 0);
13102 ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13105 if (DWARF2_GENERATE_TEXT_SECTION_LABEL)
13107 text_section ();
13108 ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13112 /* A helper function for dwarf2out_finish called through
13113 ht_forall. Emit one queued .debug_str string. */
13115 static int
13116 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13118 struct indirect_string_node *node = (struct indirect_string_node *) *h;
13120 if (node->form == DW_FORM_strp)
13122 named_section_flags (DEBUG_STR_SECTION, DEBUG_STR_SECTION_FLAGS);
13123 ASM_OUTPUT_LABEL (asm_out_file, node->label);
13124 assemble_string (node->str, strlen (node->str) + 1);
13127 return 1;
13132 /* Clear the marks for a die and its children.
13133 Be cool if the mark isn't set. */
13135 static void
13136 prune_unmark_dies (dw_die_ref die)
13138 dw_die_ref c;
13139 die->die_mark = 0;
13140 for (c = die->die_child; c; c = c->die_sib)
13141 prune_unmark_dies (c);
13145 /* Given DIE that we're marking as used, find any other dies
13146 it references as attributes and mark them as used. */
13148 static void
13149 prune_unused_types_walk_attribs (dw_die_ref die)
13151 dw_attr_ref a;
13153 for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
13155 if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13157 /* A reference to another DIE.
13158 Make sure that it will get emitted. */
13159 prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13161 else if (a->dw_attr == DW_AT_decl_file)
13163 /* A reference to a file. Make sure the file name is emitted. */
13164 a->dw_attr_val.v.val_unsigned =
13165 maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13171 /* Mark DIE as being used. If DOKIDS is true, then walk down
13172 to DIE's children. */
13174 static void
13175 prune_unused_types_mark (dw_die_ref die, int dokids)
13177 dw_die_ref c;
13179 if (die->die_mark == 0)
13181 /* We haven't done this node yet. Mark it as used. */
13182 die->die_mark = 1;
13184 /* We also have to mark its parents as used.
13185 (But we don't want to mark our parents' kids due to this.) */
13186 if (die->die_parent)
13187 prune_unused_types_mark (die->die_parent, 0);
13189 /* Mark any referenced nodes. */
13190 prune_unused_types_walk_attribs (die);
13192 /* If this node is a specification,
13193 also mark the definition, if it exists. */
13194 if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13195 prune_unused_types_mark (die->die_definition, 1);
13198 if (dokids && die->die_mark != 2)
13200 /* We need to walk the children, but haven't done so yet.
13201 Remember that we've walked the kids. */
13202 die->die_mark = 2;
13204 /* Walk them. */
13205 for (c = die->die_child; c; c = c->die_sib)
13207 /* If this is an array type, we need to make sure our
13208 kids get marked, even if they're types. */
13209 if (die->die_tag == DW_TAG_array_type)
13210 prune_unused_types_mark (c, 1);
13211 else
13212 prune_unused_types_walk (c);
13218 /* Walk the tree DIE and mark types that we actually use. */
13220 static void
13221 prune_unused_types_walk (dw_die_ref die)
13223 dw_die_ref c;
13225 /* Don't do anything if this node is already marked. */
13226 if (die->die_mark)
13227 return;
13229 switch (die->die_tag) {
13230 case DW_TAG_const_type:
13231 case DW_TAG_packed_type:
13232 case DW_TAG_pointer_type:
13233 case DW_TAG_reference_type:
13234 case DW_TAG_volatile_type:
13235 case DW_TAG_typedef:
13236 case DW_TAG_array_type:
13237 case DW_TAG_structure_type:
13238 case DW_TAG_union_type:
13239 case DW_TAG_class_type:
13240 case DW_TAG_friend:
13241 case DW_TAG_variant_part:
13242 case DW_TAG_enumeration_type:
13243 case DW_TAG_subroutine_type:
13244 case DW_TAG_string_type:
13245 case DW_TAG_set_type:
13246 case DW_TAG_subrange_type:
13247 case DW_TAG_ptr_to_member_type:
13248 case DW_TAG_file_type:
13249 /* It's a type node --- don't mark it. */
13250 return;
13252 default:
13253 /* Mark everything else. */
13254 break;
13257 die->die_mark = 1;
13259 /* Now, mark any dies referenced from here. */
13260 prune_unused_types_walk_attribs (die);
13262 /* Mark children. */
13263 for (c = die->die_child; c; c = c->die_sib)
13264 prune_unused_types_walk (c);
13268 /* Remove from the tree DIE any dies that aren't marked. */
13270 static void
13271 prune_unused_types_prune (dw_die_ref die)
13273 dw_die_ref c, p, n;
13274 if (!die->die_mark)
13275 abort();
13277 p = NULL;
13278 for (c = die->die_child; c; c = n)
13280 n = c->die_sib;
13281 if (c->die_mark)
13283 prune_unused_types_prune (c);
13284 p = c;
13286 else
13288 if (p)
13289 p->die_sib = n;
13290 else
13291 die->die_child = n;
13292 free_die (c);
13298 /* Remove dies representing declarations that we never use. */
13300 static void
13301 prune_unused_types (void)
13303 unsigned int i;
13304 limbo_die_node *node;
13306 /* Clear all the marks. */
13307 prune_unmark_dies (comp_unit_die);
13308 for (node = limbo_die_list; node; node = node->next)
13309 prune_unmark_dies (node->die);
13311 /* Set the mark on nodes that are actually used. */
13312 prune_unused_types_walk (comp_unit_die);
13313 for (node = limbo_die_list; node; node = node->next)
13314 prune_unused_types_walk (node->die);
13316 /* Also set the mark on nodes referenced from the
13317 pubname_table or arange_table. */
13318 for (i = 0; i < pubname_table_in_use; i++)
13319 prune_unused_types_mark (pubname_table[i].die, 1);
13320 for (i = 0; i < arange_table_in_use; i++)
13321 prune_unused_types_mark (arange_table[i], 1);
13323 /* Get rid of nodes that aren't marked. */
13324 prune_unused_types_prune (comp_unit_die);
13325 for (node = limbo_die_list; node; node = node->next)
13326 prune_unused_types_prune (node->die);
13328 /* Leave the marks clear. */
13329 prune_unmark_dies (comp_unit_die);
13330 for (node = limbo_die_list; node; node = node->next)
13331 prune_unmark_dies (node->die);
13334 /* Output stuff that dwarf requires at the end of every file,
13335 and generate the DWARF-2 debugging info. */
13337 static void
13338 dwarf2out_finish (const char *filename)
13340 limbo_die_node *node, *next_node;
13341 dw_die_ref die = 0;
13343 /* Add the name for the main input file now. We delayed this from
13344 dwarf2out_init to avoid complications with PCH. */
13345 add_name_attribute (comp_unit_die, filename);
13346 if (filename[0] != DIR_SEPARATOR)
13347 add_comp_dir_attribute (comp_unit_die);
13348 else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
13350 size_t i;
13351 for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
13352 if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
13353 /* Don't add cwd for <built-in>. */
13354 && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
13356 add_comp_dir_attribute (comp_unit_die);
13357 break;
13361 /* Traverse the limbo die list, and add parent/child links. The only
13362 dies without parents that should be here are concrete instances of
13363 inline functions, and the comp_unit_die. We can ignore the comp_unit_die.
13364 For concrete instances, we can get the parent die from the abstract
13365 instance. */
13366 for (node = limbo_die_list; node; node = next_node)
13368 next_node = node->next;
13369 die = node->die;
13371 if (die->die_parent == NULL)
13373 dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
13374 tree context;
13376 if (origin)
13377 add_child_die (origin->die_parent, die);
13378 else if (die == comp_unit_die)
13380 /* If this was an expression for a bound involved in a function
13381 return type, it may be a SAVE_EXPR for which we weren't able
13382 to find a DIE previously. So try now. */
13383 else if (node->created_for
13384 && TREE_CODE (node->created_for) == SAVE_EXPR
13385 && 0 != (origin = (lookup_decl_die
13386 (SAVE_EXPR_CONTEXT
13387 (node->created_for)))))
13388 add_child_die (origin, die);
13389 else if (errorcount > 0 || sorrycount > 0)
13390 /* It's OK to be confused by errors in the input. */
13391 add_child_die (comp_unit_die, die);
13392 else if (node->created_for
13393 && ((DECL_P (node->created_for)
13394 && (context = DECL_CONTEXT (node->created_for)))
13395 || (TYPE_P (node->created_for)
13396 && (context = TYPE_CONTEXT (node->created_for))))
13397 && TREE_CODE (context) == FUNCTION_DECL)
13399 /* In certain situations, the lexical block containing a
13400 nested function can be optimized away, which results
13401 in the nested function die being orphaned. Likewise
13402 with the return type of that nested function. Force
13403 this to be a child of the containing function. */
13404 origin = lookup_decl_die (context);
13405 if (! origin)
13406 abort ();
13407 add_child_die (origin, die);
13409 else
13410 abort ();
13414 limbo_die_list = NULL;
13416 /* Walk through the list of incomplete types again, trying once more to
13417 emit full debugging info for them. */
13418 retry_incomplete_types ();
13420 /* We need to reverse all the dies before break_out_includes, or
13421 we'll see the end of an include file before the beginning. */
13422 reverse_all_dies (comp_unit_die);
13424 if (flag_eliminate_unused_debug_types)
13425 prune_unused_types ();
13427 /* Generate separate CUs for each of the include files we've seen.
13428 They will go into limbo_die_list. */
13429 if (flag_eliminate_dwarf2_dups)
13430 break_out_includes (comp_unit_die);
13432 /* Traverse the DIE's and add add sibling attributes to those DIE's
13433 that have children. */
13434 add_sibling_attributes (comp_unit_die);
13435 for (node = limbo_die_list; node; node = node->next)
13436 add_sibling_attributes (node->die);
13438 /* Output a terminator label for the .text section. */
13439 text_section ();
13440 (*targetm.asm_out.internal_label) (asm_out_file, TEXT_END_LABEL, 0);
13442 /* Output the source line correspondence table. We must do this
13443 even if there is no line information. Otherwise, on an empty
13444 translation unit, we will generate a present, but empty,
13445 .debug_info section. IRIX 6.5 `nm' will then complain when
13446 examining the file. */
13447 if (! DWARF2_ASM_LINE_DEBUG_INFO)
13449 named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
13450 output_line_info ();
13453 /* Output location list section if necessary. */
13454 if (have_location_lists)
13456 /* Output the location lists info. */
13457 named_section_flags (DEBUG_LOC_SECTION, SECTION_DEBUG);
13458 ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
13459 DEBUG_LOC_SECTION_LABEL, 0);
13460 ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
13461 output_location_lists (die);
13462 have_location_lists = 0;
13465 /* We can only use the low/high_pc attributes if all of the code was
13466 in .text. */
13467 if (separate_line_info_table_in_use == 0)
13469 add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
13470 add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
13473 /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
13474 "base address". Use zero so that these addresses become absolute. */
13475 else if (have_location_lists || ranges_table_in_use)
13476 add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
13478 if (debug_info_level >= DINFO_LEVEL_NORMAL)
13479 add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
13480 debug_line_section_label);
13482 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13483 add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
13485 /* Output all of the compilation units. We put the main one last so that
13486 the offsets are available to output_pubnames. */
13487 for (node = limbo_die_list; node; node = node->next)
13488 output_comp_unit (node->die, 0);
13490 output_comp_unit (comp_unit_die, 0);
13492 /* Output the abbreviation table. */
13493 named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
13494 output_abbrev_section ();
13496 /* Output public names table if necessary. */
13497 if (pubname_table_in_use)
13499 named_section_flags (DEBUG_PUBNAMES_SECTION, SECTION_DEBUG);
13500 output_pubnames ();
13503 /* Output the address range information. We only put functions in the arange
13504 table, so don't write it out if we don't have any. */
13505 if (fde_table_in_use)
13507 named_section_flags (DEBUG_ARANGES_SECTION, SECTION_DEBUG);
13508 output_aranges ();
13511 /* Output ranges section if necessary. */
13512 if (ranges_table_in_use)
13514 named_section_flags (DEBUG_RANGES_SECTION, SECTION_DEBUG);
13515 ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
13516 output_ranges ();
13519 /* Have to end the primary source file. */
13520 if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13522 named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13523 dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13524 dw2_asm_output_data (1, 0, "End compilation unit");
13527 /* If we emitted any DW_FORM_strp form attribute, output the string
13528 table too. */
13529 if (debug_str_hash)
13530 htab_traverse (debug_str_hash, output_indirect_string, NULL);
13532 #else
13534 /* This should never be used, but its address is needed for comparisons. */
13535 const struct gcc_debug_hooks dwarf2_debug_hooks;
13537 #endif /* DWARF2_DEBUGGING_INFO */
13539 #include "gt-dwarf2out.h"