Merge from vendor branch GCC:
[dragonfly.git] / contrib / gcc-4.1 / gcc / dwarf2out.c
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, 2006 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).
7
8 This file is part of GCC.
9
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.
14
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.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING.  If not, write to the Free
22 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 02110-1301, USA.  */
24
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.  */
30
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.  */
36
37 #include "config.h"
38 #include "system.h"
39 #include "coretypes.h"
40 #include "tm.h"
41 #include "tree.h"
42 #include "version.h"
43 #include "flags.h"
44 #include "real.h"
45 #include "rtl.h"
46 #include "hard-reg-set.h"
47 #include "regs.h"
48 #include "insn-config.h"
49 #include "reload.h"
50 #include "function.h"
51 #include "output.h"
52 #include "expr.h"
53 #include "libfuncs.h"
54 #include "except.h"
55 #include "dwarf2.h"
56 #include "dwarf2out.h"
57 #include "dwarf2asm.h"
58 #include "toplev.h"
59 #include "varray.h"
60 #include "ggc.h"
61 #include "md5.h"
62 #include "tm_p.h"
63 #include "diagnostic.h"
64 #include "debug.h"
65 #include "target.h"
66 #include "langhooks.h"
67 #include "hashtab.h"
68 #include "cgraph.h"
69 #include "input.h"
70
71 #ifdef DWARF2_DEBUGGING_INFO
72 static void dwarf2out_source_line (unsigned int, const char *);
73 #endif
74
75 /* DWARF2 Abbreviation Glossary:
76    CFA = Canonical Frame Address
77            a fixed address on the stack which identifies a call frame.
78            We define it to be the value of SP just before the call insn.
79            The CFA register and offset, which may change during the course
80            of the function, are used to calculate its value at runtime.
81    CFI = Call Frame Instruction
82            an instruction for the DWARF2 abstract machine
83    CIE = Common Information Entry
84            information describing information common to one or more FDEs
85    DIE = Debugging Information Entry
86    FDE = Frame Description Entry
87            information describing the stack call frame, in particular,
88            how to restore registers
89
90    DW_CFA_... = DWARF2 CFA call frame instruction
91    DW_TAG_... = DWARF2 DIE tag */
92
93 #ifndef DWARF2_FRAME_INFO
94 # ifdef DWARF2_DEBUGGING_INFO
95 #  define DWARF2_FRAME_INFO \
96   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
97 # else
98 #  define DWARF2_FRAME_INFO 0
99 # endif
100 #endif
101
102 /* Decide whether we want to emit frame unwind information for the current
103    translation unit.  */
104
105 int
106 dwarf2out_do_frame (void)
107 {
108   /* We want to emit correct CFA location expressions or lists, so we
109      have to return true if we're going to output debug info, even if
110      we're not going to output frame or unwind info.  */
111   return (write_symbols == DWARF2_DEBUG
112           || write_symbols == VMS_AND_DWARF2_DEBUG
113           || DWARF2_FRAME_INFO
114 #ifdef DWARF2_UNWIND_INFO
115           || (DWARF2_UNWIND_INFO
116               && (flag_unwind_tables
117                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
118 #endif
119           );
120 }
121
122 /* The size of the target's pointer type.  */
123 #ifndef PTR_SIZE
124 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
125 #endif
126
127 /* Various versions of targetm.eh_frame_section.  Note these must appear
128    outside the DWARF2_DEBUGGING_INFO || DWARF2_UNWIND_INFO macro guards.  */
129
130 /* Version of targetm.eh_frame_section for systems with named sections.  */
131 void
132 named_section_eh_frame_section (void)
133 {
134 #ifdef EH_FRAME_SECTION_NAME
135   int flags;
136
137   if (EH_TABLES_CAN_BE_READ_ONLY)
138     {
139       int fde_encoding;
140       int per_encoding;
141       int lsda_encoding;
142
143       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
144       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
145       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
146       flags = (! flag_pic
147                || ((fde_encoding & 0x70) != DW_EH_PE_absptr
148                    && (fde_encoding & 0x70) != DW_EH_PE_aligned
149                    && (per_encoding & 0x70) != DW_EH_PE_absptr
150                    && (per_encoding & 0x70) != DW_EH_PE_aligned
151                    && (lsda_encoding & 0x70) != DW_EH_PE_absptr
152                    && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
153               ? 0 : SECTION_WRITE;
154     }
155   else
156     flags = SECTION_WRITE;
157   named_section_flags (EH_FRAME_SECTION_NAME, flags);
158 #endif
159 }
160
161 /* Version of targetm.eh_frame_section for systems using collect2.  */
162 void
163 collect2_eh_frame_section (void)
164 {
165   tree label = get_file_function_name ('F');
166
167   data_section ();
168   ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
169   targetm.asm_out.globalize_label (asm_out_file, IDENTIFIER_POINTER (label));
170   ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
171 }
172
173 /* Default version of targetm.eh_frame_section.  */
174 void
175 default_eh_frame_section (void)
176 {
177 #ifdef EH_FRAME_SECTION_NAME
178   named_section_eh_frame_section ();
179 #else
180   collect2_eh_frame_section ();
181 #endif
182 }
183
184 DEF_VEC_P(rtx);
185 DEF_VEC_ALLOC_P(rtx,gc);
186
187 /* Array of RTXes referenced by the debugging information, which therefore
188    must be kept around forever.  */
189 static GTY(()) VEC(rtx,gc) *used_rtx_array;
190
191 /* A pointer to the base of a list of incomplete types which might be
192    completed at some later time.  incomplete_types_list needs to be a
193    VEC(tree,gc) because we want to tell the garbage collector about
194    it.  */
195 static GTY(()) VEC(tree,gc) *incomplete_types;
196
197 /* A pointer to the base of a table of references to declaration
198    scopes.  This table is a display which tracks the nesting
199    of declaration scopes at the current scope and containing
200    scopes.  This table is used to find the proper place to
201    define type declaration DIE's.  */
202 static GTY(()) VEC(tree,gc) *decl_scope_table;
203
204 /* How to start an assembler comment.  */
205 #ifndef ASM_COMMENT_START
206 #define ASM_COMMENT_START ";#"
207 #endif
208
209 typedef struct dw_cfi_struct *dw_cfi_ref;
210 typedef struct dw_fde_struct *dw_fde_ref;
211 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
212
213 /* Call frames are described using a sequence of Call Frame
214    Information instructions.  The register number, offset
215    and address fields are provided as possible operands;
216    their use is selected by the opcode field.  */
217
218 enum dw_cfi_oprnd_type {
219   dw_cfi_oprnd_unused,
220   dw_cfi_oprnd_reg_num,
221   dw_cfi_oprnd_offset,
222   dw_cfi_oprnd_addr,
223   dw_cfi_oprnd_loc
224 };
225
226 typedef union dw_cfi_oprnd_struct GTY(())
227 {
228   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
229   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
230   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
231   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
232 }
233 dw_cfi_oprnd;
234
235 typedef struct dw_cfi_struct GTY(())
236 {
237   dw_cfi_ref dw_cfi_next;
238   enum dwarf_call_frame_info dw_cfi_opc;
239   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
240     dw_cfi_oprnd1;
241   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
242     dw_cfi_oprnd2;
243 }
244 dw_cfi_node;
245
246 /* This is how we define the location of the CFA. We use to handle it
247    as REG + OFFSET all the time,  but now it can be more complex.
248    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
249    Instead of passing around REG and OFFSET, we pass a copy
250    of this structure.  */
251 typedef struct cfa_loc GTY(())
252 {
253   HOST_WIDE_INT offset;
254   HOST_WIDE_INT base_offset;
255   unsigned int reg;
256   int indirect;            /* 1 if CFA is accessed via a dereference.  */
257 } dw_cfa_location;
258
259 /* All call frame descriptions (FDE's) in the GCC generated DWARF
260    refer to a single Common Information Entry (CIE), defined at
261    the beginning of the .debug_frame section.  This use of a single
262    CIE obviates the need to keep track of multiple CIE's
263    in the DWARF generation routines below.  */
264
265 typedef struct dw_fde_struct GTY(())
266 {
267   tree decl;
268   const char *dw_fde_begin;
269   const char *dw_fde_current_label;
270   const char *dw_fde_end;
271   const char *dw_fde_hot_section_label;
272   const char *dw_fde_hot_section_end_label;
273   const char *dw_fde_unlikely_section_label;
274   const char *dw_fde_unlikely_section_end_label;
275   bool dw_fde_switched_sections;
276   dw_cfi_ref dw_fde_cfi;
277   unsigned funcdef_number;
278   unsigned all_throwers_are_sibcalls : 1;
279   unsigned nothrow : 1;
280   unsigned uses_eh_lsda : 1;
281 }
282 dw_fde_node;
283
284 /* Maximum size (in bytes) of an artificially generated label.  */
285 #define MAX_ARTIFICIAL_LABEL_BYTES      30
286
287 /* The size of addresses as they appear in the Dwarf 2 data.
288    Some architectures use word addresses to refer to code locations,
289    but Dwarf 2 info always uses byte addresses.  On such machines,
290    Dwarf 2 addresses need to be larger than the architecture's
291    pointers.  */
292 #ifndef DWARF2_ADDR_SIZE
293 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
294 #endif
295
296 /* The size in bytes of a DWARF field indicating an offset or length
297    relative to a debug info section, specified to be 4 bytes in the
298    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
299    as PTR_SIZE.  */
300
301 #ifndef DWARF_OFFSET_SIZE
302 #define DWARF_OFFSET_SIZE 4
303 #endif
304
305 /* According to the (draft) DWARF 3 specification, the initial length
306    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
307    bytes are 0xffffffff, followed by the length stored in the next 8
308    bytes.
309
310    However, the SGI/MIPS ABI uses an initial length which is equal to
311    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
312
313 #ifndef DWARF_INITIAL_LENGTH_SIZE
314 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
315 #endif
316
317 #define DWARF_VERSION 2
318
319 /* Round SIZE up to the nearest BOUNDARY.  */
320 #define DWARF_ROUND(SIZE,BOUNDARY) \
321   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
322
323 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
324 #ifndef DWARF_CIE_DATA_ALIGNMENT
325 #ifdef STACK_GROWS_DOWNWARD
326 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
327 #else
328 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
329 #endif
330 #endif
331
332 /* A pointer to the base of a table that contains frame description
333    information for each routine.  */
334 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
335
336 /* Number of elements currently allocated for fde_table.  */
337 static GTY(()) unsigned fde_table_allocated;
338
339 /* Number of elements in fde_table currently in use.  */
340 static GTY(()) unsigned fde_table_in_use;
341
342 /* Size (in elements) of increments by which we may expand the
343    fde_table.  */
344 #define FDE_TABLE_INCREMENT 256
345
346 /* A list of call frame insns for the CIE.  */
347 static GTY(()) dw_cfi_ref cie_cfi_head;
348
349 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
350 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
351    attribute that accelerates the lookup of the FDE associated
352    with the subprogram.  This variable holds the table index of the FDE
353    associated with the current function (body) definition.  */
354 static unsigned current_funcdef_fde;
355 #endif
356
357 struct indirect_string_node GTY(())
358 {
359   const char *str;
360   unsigned int refcount;
361   unsigned int form;
362   char *label;
363 };
364
365 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
366
367 static GTY(()) int dw2_string_counter;
368 static GTY(()) unsigned long dwarf2out_cfi_label_num;
369
370 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
371
372 /* Forward declarations for functions defined in this file.  */
373
374 static char *stripattributes (const char *);
375 static const char *dwarf_cfi_name (unsigned);
376 static dw_cfi_ref new_cfi (void);
377 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
378 static void add_fde_cfi (const char *, dw_cfi_ref);
379 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
380 static void lookup_cfa (dw_cfa_location *);
381 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
382 static void initial_return_save (rtx);
383 static HOST_WIDE_INT stack_adjust_offset (rtx);
384 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
385 static void output_call_frame_info (int);
386 static void dwarf2out_stack_adjust (rtx, bool);
387 static void flush_queued_reg_saves (void);
388 static bool clobbers_queued_reg_save (rtx);
389 static void dwarf2out_frame_debug_expr (rtx, const char *);
390
391 /* Support for complex CFA locations.  */
392 static void output_cfa_loc (dw_cfi_ref);
393 static void get_cfa_from_loc_descr (dw_cfa_location *,
394                                     struct dw_loc_descr_struct *);
395 static struct dw_loc_descr_struct *build_cfa_loc
396  (dw_cfa_location *);
397 static void def_cfa_1 (const char *, dw_cfa_location *);
398
399 /* How to start an assembler comment.  */
400 #ifndef ASM_COMMENT_START
401 #define ASM_COMMENT_START ";#"
402 #endif
403
404 /* Data and reference forms for relocatable data.  */
405 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
406 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
407
408 #ifndef DEBUG_FRAME_SECTION
409 #define DEBUG_FRAME_SECTION     ".debug_frame"
410 #endif
411
412 #ifndef FUNC_BEGIN_LABEL
413 #define FUNC_BEGIN_LABEL        "LFB"
414 #endif
415
416 #ifndef FUNC_END_LABEL
417 #define FUNC_END_LABEL          "LFE"
418 #endif
419
420 #ifndef FRAME_BEGIN_LABEL
421 #define FRAME_BEGIN_LABEL       "Lframe"
422 #endif
423 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
424 #define CIE_END_LABEL           "LECIE"
425 #define FDE_LABEL               "LSFDE"
426 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
427 #define FDE_END_LABEL           "LEFDE"
428 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
429 #define LINE_NUMBER_END_LABEL   "LELT"
430 #define LN_PROLOG_AS_LABEL      "LASLTP"
431 #define LN_PROLOG_END_LABEL     "LELTP"
432 #define DIE_LABEL_PREFIX        "DW"
433
434 /* The DWARF 2 CFA column which tracks the return address.  Normally this
435    is the column for PC, or the first column after all of the hard
436    registers.  */
437 #ifndef DWARF_FRAME_RETURN_COLUMN
438 #ifdef PC_REGNUM
439 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
440 #else
441 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
442 #endif
443 #endif
444
445 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
446    default, we just provide columns for all registers.  */
447 #ifndef DWARF_FRAME_REGNUM
448 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
449 #endif
450 \f
451 /* Hook used by __throw.  */
452
453 rtx
454 expand_builtin_dwarf_sp_column (void)
455 {
456   return GEN_INT (DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
457 }
458
459 /* Return a pointer to a copy of the section string name S with all
460    attributes stripped off, and an asterisk prepended (for assemble_name).  */
461
462 static inline char *
463 stripattributes (const char *s)
464 {
465   char *stripped = xmalloc (strlen (s) + 2);
466   char *p = stripped;
467
468   *p++ = '*';
469
470   while (*s && *s != ',')
471     *p++ = *s++;
472
473   *p = '\0';
474   return stripped;
475 }
476
477 /* Generate code to initialize the register size table.  */
478
479 void
480 expand_builtin_init_dwarf_reg_sizes (tree address)
481 {
482   int i;
483   enum machine_mode mode = TYPE_MODE (char_type_node);
484   rtx addr = expand_expr (address, NULL_RTX, VOIDmode, 0);
485   rtx mem = gen_rtx_MEM (BLKmode, addr);
486   bool wrote_return_column = false;
487
488   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
489     if (DWARF_FRAME_REGNUM (i) < DWARF_FRAME_REGISTERS)
490       {
491         HOST_WIDE_INT offset = DWARF_FRAME_REGNUM (i) * GET_MODE_SIZE (mode);
492         enum machine_mode save_mode = reg_raw_mode[i];
493         HOST_WIDE_INT size;
494
495         if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
496           save_mode = choose_hard_reg_mode (i, 1, true);
497         if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
498           {
499             if (save_mode == VOIDmode)
500               continue;
501             wrote_return_column = true;
502           }
503         size = GET_MODE_SIZE (save_mode);
504         if (offset < 0)
505           continue;
506
507         emit_move_insn (adjust_address (mem, mode, offset),
508                         gen_int_mode (size, mode));
509       }
510
511 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
512   gcc_assert (wrote_return_column);
513   i = DWARF_ALT_FRAME_RETURN_COLUMN;
514   wrote_return_column = false;
515 #else
516   i = DWARF_FRAME_RETURN_COLUMN;
517 #endif
518
519   if (! wrote_return_column)
520     {
521       enum machine_mode save_mode = Pmode;
522       HOST_WIDE_INT offset = i * GET_MODE_SIZE (mode);
523       HOST_WIDE_INT size = GET_MODE_SIZE (save_mode);
524       emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
525     }
526 }
527
528 /* Convert a DWARF call frame info. operation to its string name */
529
530 static const char *
531 dwarf_cfi_name (unsigned int cfi_opc)
532 {
533   switch (cfi_opc)
534     {
535     case DW_CFA_advance_loc:
536       return "DW_CFA_advance_loc";
537     case DW_CFA_offset:
538       return "DW_CFA_offset";
539     case DW_CFA_restore:
540       return "DW_CFA_restore";
541     case DW_CFA_nop:
542       return "DW_CFA_nop";
543     case DW_CFA_set_loc:
544       return "DW_CFA_set_loc";
545     case DW_CFA_advance_loc1:
546       return "DW_CFA_advance_loc1";
547     case DW_CFA_advance_loc2:
548       return "DW_CFA_advance_loc2";
549     case DW_CFA_advance_loc4:
550       return "DW_CFA_advance_loc4";
551     case DW_CFA_offset_extended:
552       return "DW_CFA_offset_extended";
553     case DW_CFA_restore_extended:
554       return "DW_CFA_restore_extended";
555     case DW_CFA_undefined:
556       return "DW_CFA_undefined";
557     case DW_CFA_same_value:
558       return "DW_CFA_same_value";
559     case DW_CFA_register:
560       return "DW_CFA_register";
561     case DW_CFA_remember_state:
562       return "DW_CFA_remember_state";
563     case DW_CFA_restore_state:
564       return "DW_CFA_restore_state";
565     case DW_CFA_def_cfa:
566       return "DW_CFA_def_cfa";
567     case DW_CFA_def_cfa_register:
568       return "DW_CFA_def_cfa_register";
569     case DW_CFA_def_cfa_offset:
570       return "DW_CFA_def_cfa_offset";
571
572     /* DWARF 3 */
573     case DW_CFA_def_cfa_expression:
574       return "DW_CFA_def_cfa_expression";
575     case DW_CFA_expression:
576       return "DW_CFA_expression";
577     case DW_CFA_offset_extended_sf:
578       return "DW_CFA_offset_extended_sf";
579     case DW_CFA_def_cfa_sf:
580       return "DW_CFA_def_cfa_sf";
581     case DW_CFA_def_cfa_offset_sf:
582       return "DW_CFA_def_cfa_offset_sf";
583
584     /* SGI/MIPS specific */
585     case DW_CFA_MIPS_advance_loc8:
586       return "DW_CFA_MIPS_advance_loc8";
587
588     /* GNU extensions */
589     case DW_CFA_GNU_window_save:
590       return "DW_CFA_GNU_window_save";
591     case DW_CFA_GNU_args_size:
592       return "DW_CFA_GNU_args_size";
593     case DW_CFA_GNU_negative_offset_extended:
594       return "DW_CFA_GNU_negative_offset_extended";
595
596     default:
597       return "DW_CFA_<unknown>";
598     }
599 }
600
601 /* Return a pointer to a newly allocated Call Frame Instruction.  */
602
603 static inline dw_cfi_ref
604 new_cfi (void)
605 {
606   dw_cfi_ref cfi = ggc_alloc (sizeof (dw_cfi_node));
607
608   cfi->dw_cfi_next = NULL;
609   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
610   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
611
612   return cfi;
613 }
614
615 /* Add a Call Frame Instruction to list of instructions.  */
616
617 static inline void
618 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
619 {
620   dw_cfi_ref *p;
621
622   /* Find the end of the chain.  */
623   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
624     ;
625
626   *p = cfi;
627 }
628
629 /* Generate a new label for the CFI info to refer to.  */
630
631 char *
632 dwarf2out_cfi_label (void)
633 {
634   static char label[20];
635
636   ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
637   ASM_OUTPUT_LABEL (asm_out_file, label);
638   return label;
639 }
640
641 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
642    or to the CIE if LABEL is NULL.  */
643
644 static void
645 add_fde_cfi (const char *label, dw_cfi_ref cfi)
646 {
647   if (label)
648     {
649       dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
650
651       if (*label == 0)
652         label = dwarf2out_cfi_label ();
653
654       if (fde->dw_fde_current_label == NULL
655           || strcmp (label, fde->dw_fde_current_label) != 0)
656         {
657           dw_cfi_ref xcfi;
658
659           fde->dw_fde_current_label = label = xstrdup (label);
660
661           /* Set the location counter to the new label.  */
662           xcfi = new_cfi ();
663           xcfi->dw_cfi_opc = DW_CFA_advance_loc4;
664           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
665           add_cfi (&fde->dw_fde_cfi, xcfi);
666         }
667
668       add_cfi (&fde->dw_fde_cfi, cfi);
669     }
670
671   else
672     add_cfi (&cie_cfi_head, cfi);
673 }
674
675 /* Subroutine of lookup_cfa.  */
676
677 static void
678 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
679 {
680   switch (cfi->dw_cfi_opc)
681     {
682     case DW_CFA_def_cfa_offset:
683       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
684       break;
685     case DW_CFA_def_cfa_offset_sf:
686       loc->offset
687         = cfi->dw_cfi_oprnd1.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
688       break;
689     case DW_CFA_def_cfa_register:
690       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
691       break;
692     case DW_CFA_def_cfa:
693       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
694       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
695       break;
696     case DW_CFA_def_cfa_sf:
697       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
698       loc->offset
699         = cfi->dw_cfi_oprnd2.dw_cfi_offset * DWARF_CIE_DATA_ALIGNMENT;
700       break;
701     case DW_CFA_def_cfa_expression:
702       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
703       break;
704     default:
705       break;
706     }
707 }
708
709 /* Find the previous value for the CFA.  */
710
711 static void
712 lookup_cfa (dw_cfa_location *loc)
713 {
714   dw_cfi_ref cfi;
715
716   loc->reg = INVALID_REGNUM;
717   loc->offset = 0;
718   loc->indirect = 0;
719   loc->base_offset = 0;
720
721   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
722     lookup_cfa_1 (cfi, loc);
723
724   if (fde_table_in_use)
725     {
726       dw_fde_ref fde = &fde_table[fde_table_in_use - 1];
727       for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
728         lookup_cfa_1 (cfi, loc);
729     }
730 }
731
732 /* The current rule for calculating the DWARF2 canonical frame address.  */
733 static dw_cfa_location cfa;
734
735 /* The register used for saving registers to the stack, and its offset
736    from the CFA.  */
737 static dw_cfa_location cfa_store;
738
739 /* The running total of the size of arguments pushed onto the stack.  */
740 static HOST_WIDE_INT args_size;
741
742 /* The last args_size we actually output.  */
743 static HOST_WIDE_INT old_args_size;
744
745 /* Entry point to update the canonical frame address (CFA).
746    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
747    calculated from REG+OFFSET.  */
748
749 void
750 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
751 {
752   dw_cfa_location loc;
753   loc.indirect = 0;
754   loc.base_offset = 0;
755   loc.reg = reg;
756   loc.offset = offset;
757   def_cfa_1 (label, &loc);
758 }
759
760 /* Determine if two dw_cfa_location structures define the same data.  */
761
762 static bool
763 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
764 {
765   return (loc1->reg == loc2->reg
766           && loc1->offset == loc2->offset
767           && loc1->indirect == loc2->indirect
768           && (loc1->indirect == 0
769               || loc1->base_offset == loc2->base_offset));
770 }
771
772 /* This routine does the actual work.  The CFA is now calculated from
773    the dw_cfa_location structure.  */
774
775 static void
776 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
777 {
778   dw_cfi_ref cfi;
779   dw_cfa_location old_cfa, loc;
780
781   cfa = *loc_p;
782   loc = *loc_p;
783
784   if (cfa_store.reg == loc.reg && loc.indirect == 0)
785     cfa_store.offset = loc.offset;
786
787   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
788   lookup_cfa (&old_cfa);
789
790   /* If nothing changed, no need to issue any call frame instructions.  */
791   if (cfa_equal_p (&loc, &old_cfa))
792     return;
793
794   cfi = new_cfi ();
795
796   if (loc.reg == old_cfa.reg && !loc.indirect)
797     {
798       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
799          the CFA register did not change but the offset did.  */
800       if (loc.offset < 0)
801         {
802           HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
803           gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
804
805           cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
806           cfi->dw_cfi_oprnd1.dw_cfi_offset = f_offset;
807         }
808       else
809         {
810           cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
811           cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
812         }
813     }
814
815 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
816   else if (loc.offset == old_cfa.offset
817            && old_cfa.reg != INVALID_REGNUM
818            && !loc.indirect)
819     {
820       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
821          indicating the CFA register has changed to <register> but the
822          offset has not changed.  */
823       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
824       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
825     }
826 #endif
827
828   else if (loc.indirect == 0)
829     {
830       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
831          indicating the CFA register has changed to <register> with
832          the specified offset.  */
833       if (loc.offset < 0)
834         {
835           HOST_WIDE_INT f_offset = loc.offset / DWARF_CIE_DATA_ALIGNMENT;
836           gcc_assert (f_offset * DWARF_CIE_DATA_ALIGNMENT == loc.offset);
837
838           cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
839           cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
840           cfi->dw_cfi_oprnd2.dw_cfi_offset = f_offset;
841         }
842       else
843         {
844           cfi->dw_cfi_opc = DW_CFA_def_cfa;
845           cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
846           cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
847         }
848     }
849   else
850     {
851       /* Construct a DW_CFA_def_cfa_expression instruction to
852          calculate the CFA using a full location expression since no
853          register-offset pair is available.  */
854       struct dw_loc_descr_struct *loc_list;
855
856       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
857       loc_list = build_cfa_loc (&loc);
858       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
859     }
860
861   add_fde_cfi (label, cfi);
862 }
863
864 /* Add the CFI for saving a register.  REG is the CFA column number.
865    LABEL is passed to add_fde_cfi.
866    If SREG is -1, the register is saved at OFFSET from the CFA;
867    otherwise it is saved in SREG.  */
868
869 static void
870 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
871 {
872   dw_cfi_ref cfi = new_cfi ();
873
874   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
875
876   if (sreg == INVALID_REGNUM)
877     {
878       if (reg & ~0x3f)
879         /* The register number won't fit in 6 bits, so we have to use
880            the long form.  */
881         cfi->dw_cfi_opc = DW_CFA_offset_extended;
882       else
883         cfi->dw_cfi_opc = DW_CFA_offset;
884
885 #ifdef ENABLE_CHECKING
886       {
887         /* If we get an offset that is not a multiple of
888            DWARF_CIE_DATA_ALIGNMENT, there is either a bug in the
889            definition of DWARF_CIE_DATA_ALIGNMENT, or a bug in the machine
890            description.  */
891         HOST_WIDE_INT check_offset = offset / DWARF_CIE_DATA_ALIGNMENT;
892
893         gcc_assert (check_offset * DWARF_CIE_DATA_ALIGNMENT == offset);
894       }
895 #endif
896       offset /= DWARF_CIE_DATA_ALIGNMENT;
897       if (offset < 0)
898         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
899
900       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
901     }
902   else if (sreg == reg)
903     cfi->dw_cfi_opc = DW_CFA_same_value;
904   else
905     {
906       cfi->dw_cfi_opc = DW_CFA_register;
907       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
908     }
909
910   add_fde_cfi (label, cfi);
911 }
912
913 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
914    This CFI tells the unwinder that it needs to restore the window registers
915    from the previous frame's window save area.
916
917    ??? Perhaps we should note in the CIE where windows are saved (instead of
918    assuming 0(cfa)) and what registers are in the window.  */
919
920 void
921 dwarf2out_window_save (const char *label)
922 {
923   dw_cfi_ref cfi = new_cfi ();
924
925   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
926   add_fde_cfi (label, cfi);
927 }
928
929 /* Add a CFI to update the running total of the size of arguments
930    pushed onto the stack.  */
931
932 void
933 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
934 {
935   dw_cfi_ref cfi;
936
937   if (size == old_args_size)
938     return;
939
940   old_args_size = size;
941
942   cfi = new_cfi ();
943   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
944   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
945   add_fde_cfi (label, cfi);
946 }
947
948 /* Entry point for saving a register to the stack.  REG is the GCC register
949    number.  LABEL and OFFSET are passed to reg_save.  */
950
951 void
952 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
953 {
954   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
955 }
956
957 /* Entry point for saving the return address in the stack.
958    LABEL and OFFSET are passed to reg_save.  */
959
960 void
961 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
962 {
963   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
964 }
965
966 /* Entry point for saving the return address in a register.
967    LABEL and SREG are passed to reg_save.  */
968
969 void
970 dwarf2out_return_reg (const char *label, unsigned int sreg)
971 {
972   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
973 }
974
975 /* Record the initial position of the return address.  RTL is
976    INCOMING_RETURN_ADDR_RTX.  */
977
978 static void
979 initial_return_save (rtx rtl)
980 {
981   unsigned int reg = INVALID_REGNUM;
982   HOST_WIDE_INT offset = 0;
983
984   switch (GET_CODE (rtl))
985     {
986     case REG:
987       /* RA is in a register.  */
988       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
989       break;
990
991     case MEM:
992       /* RA is on the stack.  */
993       rtl = XEXP (rtl, 0);
994       switch (GET_CODE (rtl))
995         {
996         case REG:
997           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
998           offset = 0;
999           break;
1000
1001         case PLUS:
1002           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1003           offset = INTVAL (XEXP (rtl, 1));
1004           break;
1005
1006         case MINUS:
1007           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1008           offset = -INTVAL (XEXP (rtl, 1));
1009           break;
1010
1011         default:
1012           gcc_unreachable ();
1013         }
1014
1015       break;
1016
1017     case PLUS:
1018       /* The return address is at some offset from any value we can
1019          actually load.  For instance, on the SPARC it is in %i7+8. Just
1020          ignore the offset for now; it doesn't matter for unwinding frames.  */
1021       gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
1022       initial_return_save (XEXP (rtl, 0));
1023       return;
1024
1025     default:
1026       gcc_unreachable ();
1027     }
1028
1029   if (reg != DWARF_FRAME_RETURN_COLUMN)
1030     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1031 }
1032
1033 /* Given a SET, calculate the amount of stack adjustment it
1034    contains.  */
1035
1036 static HOST_WIDE_INT
1037 stack_adjust_offset (rtx pattern)
1038 {
1039   rtx src = SET_SRC (pattern);
1040   rtx dest = SET_DEST (pattern);
1041   HOST_WIDE_INT offset = 0;
1042   enum rtx_code code;
1043
1044   if (dest == stack_pointer_rtx)
1045     {
1046       /* (set (reg sp) (plus (reg sp) (const_int))) */
1047       code = GET_CODE (src);
1048       if (! (code == PLUS || code == MINUS)
1049           || XEXP (src, 0) != stack_pointer_rtx
1050           || GET_CODE (XEXP (src, 1)) != CONST_INT)
1051         return 0;
1052
1053       offset = INTVAL (XEXP (src, 1));
1054       if (code == PLUS)
1055         offset = -offset;
1056     }
1057   else if (MEM_P (dest))
1058     {
1059       /* (set (mem (pre_dec (reg sp))) (foo)) */
1060       src = XEXP (dest, 0);
1061       code = GET_CODE (src);
1062
1063       switch (code)
1064         {
1065         case PRE_MODIFY:
1066         case POST_MODIFY:
1067           if (XEXP (src, 0) == stack_pointer_rtx)
1068             {
1069               rtx val = XEXP (XEXP (src, 1), 1);
1070               /* We handle only adjustments by constant amount.  */
1071               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1072                           && GET_CODE (val) == CONST_INT);
1073               offset = -INTVAL (val);
1074               break;
1075             }
1076           return 0;
1077
1078         case PRE_DEC:
1079         case POST_DEC:
1080           if (XEXP (src, 0) == stack_pointer_rtx)
1081             {
1082               offset = GET_MODE_SIZE (GET_MODE (dest));
1083               break;
1084             }
1085           return 0;
1086
1087         case PRE_INC:
1088         case POST_INC:
1089           if (XEXP (src, 0) == stack_pointer_rtx)
1090             {
1091               offset = -GET_MODE_SIZE (GET_MODE (dest));
1092               break;
1093             }
1094           return 0;
1095
1096         default:
1097           return 0;
1098         }
1099     }
1100   else
1101     return 0;
1102
1103   return offset;
1104 }
1105
1106 /* Check INSN to see if it looks like a push or a stack adjustment, and
1107    make a note of it if it does.  EH uses this information to find out how
1108    much extra space it needs to pop off the stack.  */
1109
1110 static void
1111 dwarf2out_stack_adjust (rtx insn, bool after_p)
1112 {
1113   HOST_WIDE_INT offset;
1114   const char *label;
1115   int i;
1116
1117   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1118      with this function.  Proper support would require all frame-related
1119      insns to be marked, and to be able to handle saving state around
1120      epilogues textually in the middle of the function.  */
1121   if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1122     return;
1123
1124   /* If only calls can throw, and we have a frame pointer,
1125      save up adjustments until we see the CALL_INSN.  */
1126   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1127     {
1128       if (CALL_P (insn) && !after_p)
1129         {
1130           /* Extract the size of the args from the CALL rtx itself.  */
1131           insn = PATTERN (insn);
1132           if (GET_CODE (insn) == PARALLEL)
1133             insn = XVECEXP (insn, 0, 0);
1134           if (GET_CODE (insn) == SET)
1135             insn = SET_SRC (insn);
1136           gcc_assert (GET_CODE (insn) == CALL);
1137           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1138         }
1139       return;
1140     }
1141
1142   if (CALL_P (insn) && !after_p)
1143     {
1144       if (!flag_asynchronous_unwind_tables)
1145         dwarf2out_args_size ("", args_size);
1146       return;
1147     }
1148   else if (BARRIER_P (insn))
1149     {
1150       /* When we see a BARRIER, we know to reset args_size to 0.  Usually
1151          the compiler will have already emitted a stack adjustment, but
1152          doesn't bother for calls to noreturn functions.  */
1153 #ifdef STACK_GROWS_DOWNWARD
1154       offset = -args_size;
1155 #else
1156       offset = args_size;
1157 #endif
1158     }
1159   else if (GET_CODE (PATTERN (insn)) == SET)
1160     offset = stack_adjust_offset (PATTERN (insn));
1161   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1162            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1163     {
1164       /* There may be stack adjustments inside compound insns.  Search
1165          for them.  */
1166       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1167         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1168           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i));
1169     }
1170   else
1171     return;
1172
1173   if (offset == 0)
1174     return;
1175
1176   if (cfa.reg == STACK_POINTER_REGNUM)
1177     cfa.offset += offset;
1178
1179 #ifndef STACK_GROWS_DOWNWARD
1180   offset = -offset;
1181 #endif
1182
1183   args_size += offset;
1184   if (args_size < 0)
1185     args_size = 0;
1186
1187   label = dwarf2out_cfi_label ();
1188   def_cfa_1 (label, &cfa);
1189   if (flag_asynchronous_unwind_tables)
1190     dwarf2out_args_size (label, args_size);
1191 }
1192
1193 #endif
1194
1195 /* We delay emitting a register save until either (a) we reach the end
1196    of the prologue or (b) the register is clobbered.  This clusters
1197    register saves so that there are fewer pc advances.  */
1198
1199 struct queued_reg_save GTY(())
1200 {
1201   struct queued_reg_save *next;
1202   rtx reg;
1203   HOST_WIDE_INT cfa_offset;
1204   rtx saved_reg;
1205 };
1206
1207 static GTY(()) struct queued_reg_save *queued_reg_saves;
1208
1209 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1210 struct reg_saved_in_data GTY(()) {
1211   rtx orig_reg;
1212   rtx saved_in_reg;
1213 };
1214
1215 /* A list of registers saved in other registers.
1216    The list intentionally has a small maximum capacity of 4; if your
1217    port needs more than that, you might consider implementing a
1218    more efficient data structure.  */
1219 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1220 static GTY(()) size_t num_regs_saved_in_regs;
1221
1222 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1223 static const char *last_reg_save_label;
1224
1225 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1226    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1227
1228 static void
1229 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1230 {
1231   struct queued_reg_save *q;
1232
1233   /* Duplicates waste space, but it's also necessary to remove them
1234      for correctness, since the queue gets output in reverse
1235      order.  */
1236   for (q = queued_reg_saves; q != NULL; q = q->next)
1237     if (REGNO (q->reg) == REGNO (reg))
1238       break;
1239
1240   if (q == NULL)
1241     {
1242       q = ggc_alloc (sizeof (*q));
1243       q->next = queued_reg_saves;
1244       queued_reg_saves = q;
1245     }
1246
1247   q->reg = reg;
1248   q->cfa_offset = offset;
1249   q->saved_reg = sreg;
1250
1251   last_reg_save_label = label;
1252 }
1253
1254 /* Output all the entries in QUEUED_REG_SAVES.  */
1255
1256 static void
1257 flush_queued_reg_saves (void)
1258 {
1259   struct queued_reg_save *q;
1260
1261   for (q = queued_reg_saves; q; q = q->next)
1262     {
1263       size_t i;
1264       unsigned int reg, sreg;
1265
1266       for (i = 0; i < num_regs_saved_in_regs; i++)
1267         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1268           break;
1269       if (q->saved_reg && i == num_regs_saved_in_regs)
1270         {
1271           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1272           num_regs_saved_in_regs++;
1273         }
1274       if (i != num_regs_saved_in_regs)
1275         {
1276           regs_saved_in_regs[i].orig_reg = q->reg;
1277           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1278         }
1279
1280       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1281       if (q->saved_reg)
1282         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1283       else
1284         sreg = INVALID_REGNUM;
1285       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1286     }
1287
1288   queued_reg_saves = NULL;
1289   last_reg_save_label = NULL;
1290 }
1291
1292 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1293    location for?  Or, does it clobber a register which we've previously
1294    said that some other register is saved in, and for which we now
1295    have a new location for?  */
1296
1297 static bool
1298 clobbers_queued_reg_save (rtx insn)
1299 {
1300   struct queued_reg_save *q;
1301
1302   for (q = queued_reg_saves; q; q = q->next)
1303     {
1304       size_t i;
1305       if (modified_in_p (q->reg, insn))
1306         return true;
1307       for (i = 0; i < num_regs_saved_in_regs; i++)
1308         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1309             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1310           return true;
1311     }
1312
1313   return false;
1314 }
1315
1316 /* Entry point for saving the first register into the second.  */
1317
1318 void
1319 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1320 {
1321   size_t i;
1322   unsigned int regno, sregno;
1323
1324   for (i = 0; i < num_regs_saved_in_regs; i++)
1325     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1326       break;
1327   if (i == num_regs_saved_in_regs)
1328     {
1329       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1330       num_regs_saved_in_regs++;
1331     }
1332   regs_saved_in_regs[i].orig_reg = reg;
1333   regs_saved_in_regs[i].saved_in_reg = sreg;
1334
1335   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1336   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1337   reg_save (label, regno, sregno, 0);
1338 }
1339
1340 /* What register, if any, is currently saved in REG?  */
1341
1342 static rtx
1343 reg_saved_in (rtx reg)
1344 {
1345   unsigned int regn = REGNO (reg);
1346   size_t i;
1347   struct queued_reg_save *q;
1348
1349   for (q = queued_reg_saves; q; q = q->next)
1350     if (q->saved_reg && regn == REGNO (q->saved_reg))
1351       return q->reg;
1352
1353   for (i = 0; i < num_regs_saved_in_regs; i++)
1354     if (regs_saved_in_regs[i].saved_in_reg
1355         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1356       return regs_saved_in_regs[i].orig_reg;
1357
1358   return NULL_RTX;
1359 }
1360
1361
1362 /* A temporary register holding an integral value used in adjusting SP
1363    or setting up the store_reg.  The "offset" field holds the integer
1364    value, not an offset.  */
1365 static dw_cfa_location cfa_temp;
1366
1367 /* Record call frame debugging information for an expression EXPR,
1368    which either sets SP or FP (adjusting how we calculate the frame
1369    address) or saves a register to the stack or another register.
1370    LABEL indicates the address of EXPR.
1371
1372    This function encodes a state machine mapping rtxes to actions on
1373    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1374    users need not read the source code.
1375
1376   The High-Level Picture
1377
1378   Changes in the register we use to calculate the CFA: Currently we
1379   assume that if you copy the CFA register into another register, we
1380   should take the other one as the new CFA register; this seems to
1381   work pretty well.  If it's wrong for some target, it's simple
1382   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1383
1384   Changes in the register we use for saving registers to the stack:
1385   This is usually SP, but not always.  Again, we deduce that if you
1386   copy SP into another register (and SP is not the CFA register),
1387   then the new register is the one we will be using for register
1388   saves.  This also seems to work.
1389
1390   Register saves: There's not much guesswork about this one; if
1391   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1392   register save, and the register used to calculate the destination
1393   had better be the one we think we're using for this purpose.
1394   It's also assumed that a copy from a call-saved register to another
1395   register is saving that register if RTX_FRAME_RELATED_P is set on
1396   that instruction.  If the copy is from a call-saved register to
1397   the *same* register, that means that the register is now the same
1398   value as in the caller.
1399
1400   Except: If the register being saved is the CFA register, and the
1401   offset is nonzero, we are saving the CFA, so we assume we have to
1402   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
1403   the intent is to save the value of SP from the previous frame.
1404
1405   In addition, if a register has previously been saved to a different
1406   register,
1407
1408   Invariants / Summaries of Rules
1409
1410   cfa          current rule for calculating the CFA.  It usually
1411                consists of a register and an offset.
1412   cfa_store    register used by prologue code to save things to the stack
1413                cfa_store.offset is the offset from the value of
1414                cfa_store.reg to the actual CFA
1415   cfa_temp     register holding an integral value.  cfa_temp.offset
1416                stores the value, which will be used to adjust the
1417                stack pointer.  cfa_temp is also used like cfa_store,
1418                to track stores to the stack via fp or a temp reg.
1419
1420   Rules  1- 4: Setting a register's value to cfa.reg or an expression
1421                with cfa.reg as the first operand changes the cfa.reg and its
1422                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
1423                cfa_temp.offset.
1424
1425   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
1426                expression yielding a constant.  This sets cfa_temp.reg
1427                and cfa_temp.offset.
1428
1429   Rule 5:      Create a new register cfa_store used to save items to the
1430                stack.
1431
1432   Rules 10-14: Save a register to the stack.  Define offset as the
1433                difference of the original location and cfa_store's
1434                location (or cfa_temp's location if cfa_temp is used).
1435
1436   The Rules
1437
1438   "{a,b}" indicates a choice of a xor b.
1439   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1440
1441   Rule 1:
1442   (set <reg1> <reg2>:cfa.reg)
1443   effects: cfa.reg = <reg1>
1444            cfa.offset unchanged
1445            cfa_temp.reg = <reg1>
1446            cfa_temp.offset = cfa.offset
1447
1448   Rule 2:
1449   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1450                               {<const_int>,<reg>:cfa_temp.reg}))
1451   effects: cfa.reg = sp if fp used
1452            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1453            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1454              if cfa_store.reg==sp
1455
1456   Rule 3:
1457   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1458   effects: cfa.reg = fp
1459            cfa_offset += +/- <const_int>
1460
1461   Rule 4:
1462   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1463   constraints: <reg1> != fp
1464                <reg1> != sp
1465   effects: cfa.reg = <reg1>
1466            cfa_temp.reg = <reg1>
1467            cfa_temp.offset = cfa.offset
1468
1469   Rule 5:
1470   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1471   constraints: <reg1> != fp
1472                <reg1> != sp
1473   effects: cfa_store.reg = <reg1>
1474            cfa_store.offset = cfa.offset - cfa_temp.offset
1475
1476   Rule 6:
1477   (set <reg> <const_int>)
1478   effects: cfa_temp.reg = <reg>
1479            cfa_temp.offset = <const_int>
1480
1481   Rule 7:
1482   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1483   effects: cfa_temp.reg = <reg1>
1484            cfa_temp.offset |= <const_int>
1485
1486   Rule 8:
1487   (set <reg> (high <exp>))
1488   effects: none
1489
1490   Rule 9:
1491   (set <reg> (lo_sum <exp> <const_int>))
1492   effects: cfa_temp.reg = <reg>
1493            cfa_temp.offset = <const_int>
1494
1495   Rule 10:
1496   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1497   effects: cfa_store.offset -= <const_int>
1498            cfa.offset = cfa_store.offset if cfa.reg == sp
1499            cfa.reg = sp
1500            cfa.base_offset = -cfa_store.offset
1501
1502   Rule 11:
1503   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1504   effects: cfa_store.offset += -/+ mode_size(mem)
1505            cfa.offset = cfa_store.offset if cfa.reg == sp
1506            cfa.reg = sp
1507            cfa.base_offset = -cfa_store.offset
1508
1509   Rule 12:
1510   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1511
1512        <reg2>)
1513   effects: cfa.reg = <reg1>
1514            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1515
1516   Rule 13:
1517   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1518   effects: cfa.reg = <reg1>
1519            cfa.base_offset = -{cfa_store,cfa_temp}.offset
1520
1521   Rule 14:
1522   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1523   effects: cfa.reg = <reg1>
1524            cfa.base_offset = -cfa_temp.offset
1525            cfa_temp.offset -= mode_size(mem)
1526
1527   Rule 15:
1528   (set <reg> {unspec, unspec_volatile})
1529   effects: target-dependent  */
1530
1531 static void
1532 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1533 {
1534   rtx src, dest;
1535   HOST_WIDE_INT offset;
1536
1537   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1538      the PARALLEL independently. The first element is always processed if
1539      it is a SET. This is for backward compatibility.   Other elements
1540      are processed only if they are SETs and the RTX_FRAME_RELATED_P
1541      flag is set in them.  */
1542   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1543     {
1544       int par_index;
1545       int limit = XVECLEN (expr, 0);
1546
1547       for (par_index = 0; par_index < limit; par_index++)
1548         if (GET_CODE (XVECEXP (expr, 0, par_index)) == SET
1549             && (RTX_FRAME_RELATED_P (XVECEXP (expr, 0, par_index))
1550                 || par_index == 0))
1551           dwarf2out_frame_debug_expr (XVECEXP (expr, 0, par_index), label);
1552
1553       return;
1554     }
1555
1556   gcc_assert (GET_CODE (expr) == SET);
1557
1558   src = SET_SRC (expr);
1559   dest = SET_DEST (expr);
1560
1561   if (REG_P (src))
1562     {
1563       rtx rsi = reg_saved_in (src);
1564       if (rsi)
1565         src = rsi;
1566     }
1567
1568   switch (GET_CODE (dest))
1569     {
1570     case REG:
1571       switch (GET_CODE (src))
1572         {
1573           /* Setting FP from SP.  */
1574         case REG:
1575           if (cfa.reg == (unsigned) REGNO (src))
1576             {
1577               /* Rule 1 */
1578               /* Update the CFA rule wrt SP or FP.  Make sure src is
1579                  relative to the current CFA register.
1580
1581                  We used to require that dest be either SP or FP, but the
1582                  ARM copies SP to a temporary register, and from there to
1583                  FP.  So we just rely on the backends to only set
1584                  RTX_FRAME_RELATED_P on appropriate insns.  */
1585               cfa.reg = REGNO (dest);
1586               cfa_temp.reg = cfa.reg;
1587               cfa_temp.offset = cfa.offset;
1588             }
1589           else
1590             {
1591               /* Saving a register in a register.  */
1592               gcc_assert (!fixed_regs [REGNO (dest)]
1593                           /* For the SPARC and its register window.  */
1594                           || (DWARF_FRAME_REGNUM (REGNO (src))
1595                               == DWARF_FRAME_RETURN_COLUMN));
1596               queue_reg_save (label, src, dest, 0);
1597             }
1598           break;
1599
1600         case PLUS:
1601         case MINUS:
1602         case LO_SUM:
1603           if (dest == stack_pointer_rtx)
1604             {
1605               /* Rule 2 */
1606               /* Adjusting SP.  */
1607               switch (GET_CODE (XEXP (src, 1)))
1608                 {
1609                 case CONST_INT:
1610                   offset = INTVAL (XEXP (src, 1));
1611                   break;
1612                 case REG:
1613                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
1614                               == cfa_temp.reg);
1615                   offset = cfa_temp.offset;
1616                   break;
1617                 default:
1618                   gcc_unreachable ();
1619                 }
1620
1621               if (XEXP (src, 0) == hard_frame_pointer_rtx)
1622                 {
1623                   /* Restoring SP from FP in the epilogue.  */
1624                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
1625                   cfa.reg = STACK_POINTER_REGNUM;
1626                 }
1627               else if (GET_CODE (src) == LO_SUM)
1628                 /* Assume we've set the source reg of the LO_SUM from sp.  */
1629                 ;
1630               else
1631                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
1632
1633               if (GET_CODE (src) != MINUS)
1634                 offset = -offset;
1635               if (cfa.reg == STACK_POINTER_REGNUM)
1636                 cfa.offset += offset;
1637               if (cfa_store.reg == STACK_POINTER_REGNUM)
1638                 cfa_store.offset += offset;
1639             }
1640           else if (dest == hard_frame_pointer_rtx)
1641             {
1642               /* Rule 3 */
1643               /* Either setting the FP from an offset of the SP,
1644                  or adjusting the FP */
1645               gcc_assert (frame_pointer_needed);
1646
1647               gcc_assert (REG_P (XEXP (src, 0))
1648                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
1649                           && GET_CODE (XEXP (src, 1)) == CONST_INT);
1650               offset = INTVAL (XEXP (src, 1));
1651               if (GET_CODE (src) != MINUS)
1652                 offset = -offset;
1653               cfa.offset += offset;
1654               cfa.reg = HARD_FRAME_POINTER_REGNUM;
1655             }
1656           else
1657             {
1658               gcc_assert (GET_CODE (src) != MINUS);
1659
1660               /* Rule 4 */
1661               if (REG_P (XEXP (src, 0))
1662                   && REGNO (XEXP (src, 0)) == cfa.reg
1663                   && GET_CODE (XEXP (src, 1)) == CONST_INT)
1664                 {
1665                   /* Setting a temporary CFA register that will be copied
1666                      into the FP later on.  */
1667                   offset = - INTVAL (XEXP (src, 1));
1668                   cfa.offset += offset;
1669                   cfa.reg = REGNO (dest);
1670                   /* Or used to save regs to the stack.  */
1671                   cfa_temp.reg = cfa.reg;
1672                   cfa_temp.offset = cfa.offset;
1673                 }
1674
1675               /* Rule 5 */
1676               else if (REG_P (XEXP (src, 0))
1677                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
1678                        && XEXP (src, 1) == stack_pointer_rtx)
1679                 {
1680                   /* Setting a scratch register that we will use instead
1681                      of SP for saving registers to the stack.  */
1682                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
1683                   cfa_store.reg = REGNO (dest);
1684                   cfa_store.offset = cfa.offset - cfa_temp.offset;
1685                 }
1686
1687               /* Rule 9 */
1688               else if (GET_CODE (src) == LO_SUM
1689                        && GET_CODE (XEXP (src, 1)) == CONST_INT)
1690                 {
1691                   cfa_temp.reg = REGNO (dest);
1692                   cfa_temp.offset = INTVAL (XEXP (src, 1));
1693                 }
1694               else
1695                 gcc_unreachable ();
1696             }
1697           break;
1698
1699           /* Rule 6 */
1700         case CONST_INT:
1701           cfa_temp.reg = REGNO (dest);
1702           cfa_temp.offset = INTVAL (src);
1703           break;
1704
1705           /* Rule 7 */
1706         case IOR:
1707           gcc_assert (REG_P (XEXP (src, 0))
1708                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
1709                       && GET_CODE (XEXP (src, 1)) == CONST_INT);
1710
1711           if ((unsigned) REGNO (dest) != cfa_temp.reg)
1712             cfa_temp.reg = REGNO (dest);
1713           cfa_temp.offset |= INTVAL (XEXP (src, 1));
1714           break;
1715
1716           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
1717              which will fill in all of the bits.  */
1718           /* Rule 8 */
1719         case HIGH:
1720           break;
1721
1722           /* Rule 15 */
1723         case UNSPEC:
1724         case UNSPEC_VOLATILE:
1725           gcc_assert (targetm.dwarf_handle_frame_unspec);
1726           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
1727           return;
1728
1729         default:
1730           gcc_unreachable ();
1731         }
1732
1733       def_cfa_1 (label, &cfa);
1734       break;
1735
1736     case MEM:
1737       gcc_assert (REG_P (src));
1738
1739       /* Saving a register to the stack.  Make sure dest is relative to the
1740          CFA register.  */
1741       switch (GET_CODE (XEXP (dest, 0)))
1742         {
1743           /* Rule 10 */
1744           /* With a push.  */
1745         case PRE_MODIFY:
1746           /* We can't handle variable size modifications.  */
1747           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
1748                       == CONST_INT);
1749           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
1750
1751           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1752                       && cfa_store.reg == STACK_POINTER_REGNUM);
1753
1754           cfa_store.offset += offset;
1755           if (cfa.reg == STACK_POINTER_REGNUM)
1756             cfa.offset = cfa_store.offset;
1757
1758           offset = -cfa_store.offset;
1759           break;
1760
1761           /* Rule 11 */
1762         case PRE_INC:
1763         case PRE_DEC:
1764           offset = GET_MODE_SIZE (GET_MODE (dest));
1765           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
1766             offset = -offset;
1767
1768           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
1769                       && cfa_store.reg == STACK_POINTER_REGNUM);
1770
1771           cfa_store.offset += offset;
1772           if (cfa.reg == STACK_POINTER_REGNUM)
1773             cfa.offset = cfa_store.offset;
1774
1775           offset = -cfa_store.offset;
1776           break;
1777
1778           /* Rule 12 */
1779           /* With an offset.  */
1780         case PLUS:
1781         case MINUS:
1782         case LO_SUM:
1783           {
1784             int regno;
1785
1786             gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT);
1787             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
1788             if (GET_CODE (XEXP (dest, 0)) == MINUS)
1789               offset = -offset;
1790
1791             regno = REGNO (XEXP (XEXP (dest, 0), 0));
1792
1793             if (cfa_store.reg == (unsigned) regno)
1794               offset -= cfa_store.offset;
1795             else
1796               {
1797                 gcc_assert (cfa_temp.reg == (unsigned) regno);
1798                 offset -= cfa_temp.offset;
1799               }
1800           }
1801           break;
1802
1803           /* Rule 13 */
1804           /* Without an offset.  */
1805         case REG:
1806           {
1807             int regno = REGNO (XEXP (dest, 0));
1808
1809             if (cfa_store.reg == (unsigned) regno)
1810               offset = -cfa_store.offset;
1811             else
1812               {
1813                 gcc_assert (cfa_temp.reg == (unsigned) regno);
1814                 offset = -cfa_temp.offset;
1815               }
1816           }
1817           break;
1818
1819           /* Rule 14 */
1820         case POST_INC:
1821           gcc_assert (cfa_temp.reg
1822                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
1823           offset = -cfa_temp.offset;
1824           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
1825           break;
1826
1827         default:
1828           gcc_unreachable ();
1829         }
1830
1831       if (REGNO (src) != STACK_POINTER_REGNUM
1832           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
1833           && (unsigned) REGNO (src) == cfa.reg)
1834         {
1835           /* We're storing the current CFA reg into the stack.  */
1836
1837           if (cfa.offset == 0)
1838             {
1839               /* If the source register is exactly the CFA, assume
1840                  we're saving SP like any other register; this happens
1841                  on the ARM.  */
1842               def_cfa_1 (label, &cfa);
1843               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
1844               break;
1845             }
1846           else
1847             {
1848               /* Otherwise, we'll need to look in the stack to
1849                  calculate the CFA.  */
1850               rtx x = XEXP (dest, 0);
1851
1852               if (!REG_P (x))
1853                 x = XEXP (x, 0);
1854               gcc_assert (REG_P (x));
1855
1856               cfa.reg = REGNO (x);
1857               cfa.base_offset = offset;
1858               cfa.indirect = 1;
1859               def_cfa_1 (label, &cfa);
1860               break;
1861             }
1862         }
1863
1864       def_cfa_1 (label, &cfa);
1865       queue_reg_save (label, src, NULL_RTX, offset);
1866       break;
1867
1868     default:
1869       gcc_unreachable ();
1870     }
1871 }
1872
1873 /* Record call frame debugging information for INSN, which either
1874    sets SP or FP (adjusting how we calculate the frame address) or saves a
1875    register to the stack.  If INSN is NULL_RTX, initialize our state.
1876
1877    If AFTER_P is false, we're being called before the insn is emitted,
1878    otherwise after.  Call instructions get invoked twice.  */
1879
1880 void
1881 dwarf2out_frame_debug (rtx insn, bool after_p)
1882 {
1883   const char *label;
1884   rtx src;
1885
1886   if (insn == NULL_RTX)
1887     {
1888       size_t i;
1889
1890       /* Flush any queued register saves.  */
1891       flush_queued_reg_saves ();
1892
1893       /* Set up state for generating call frame debug info.  */
1894       lookup_cfa (&cfa);
1895       gcc_assert (cfa.reg
1896                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
1897
1898       cfa.reg = STACK_POINTER_REGNUM;
1899       cfa_store = cfa;
1900       cfa_temp.reg = -1;
1901       cfa_temp.offset = 0;
1902
1903       for (i = 0; i < num_regs_saved_in_regs; i++)
1904         {
1905           regs_saved_in_regs[i].orig_reg = NULL_RTX;
1906           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
1907         }
1908       num_regs_saved_in_regs = 0;
1909       return;
1910     }
1911
1912   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
1913     flush_queued_reg_saves ();
1914
1915   if (! RTX_FRAME_RELATED_P (insn))
1916     {
1917       if (!ACCUMULATE_OUTGOING_ARGS)
1918         dwarf2out_stack_adjust (insn, after_p);
1919       return;
1920     }
1921
1922   label = dwarf2out_cfi_label ();
1923   src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1924   if (src)
1925     insn = XEXP (src, 0);
1926   else
1927     insn = PATTERN (insn);
1928
1929   dwarf2out_frame_debug_expr (insn, label);
1930 }
1931
1932 #endif
1933
1934 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
1935 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
1936  (enum dwarf_call_frame_info cfi);
1937
1938 static enum dw_cfi_oprnd_type
1939 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
1940 {
1941   switch (cfi)
1942     {
1943     case DW_CFA_nop:
1944     case DW_CFA_GNU_window_save:
1945       return dw_cfi_oprnd_unused;
1946
1947     case DW_CFA_set_loc:
1948     case DW_CFA_advance_loc1:
1949     case DW_CFA_advance_loc2:
1950     case DW_CFA_advance_loc4:
1951     case DW_CFA_MIPS_advance_loc8:
1952       return dw_cfi_oprnd_addr;
1953
1954     case DW_CFA_offset:
1955     case DW_CFA_offset_extended:
1956     case DW_CFA_def_cfa:
1957     case DW_CFA_offset_extended_sf:
1958     case DW_CFA_def_cfa_sf:
1959     case DW_CFA_restore_extended:
1960     case DW_CFA_undefined:
1961     case DW_CFA_same_value:
1962     case DW_CFA_def_cfa_register:
1963     case DW_CFA_register:
1964       return dw_cfi_oprnd_reg_num;
1965
1966     case DW_CFA_def_cfa_offset:
1967     case DW_CFA_GNU_args_size:
1968     case DW_CFA_def_cfa_offset_sf:
1969       return dw_cfi_oprnd_offset;
1970
1971     case DW_CFA_def_cfa_expression:
1972     case DW_CFA_expression:
1973       return dw_cfi_oprnd_loc;
1974
1975     default:
1976       gcc_unreachable ();
1977     }
1978 }
1979
1980 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
1981 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
1982  (enum dwarf_call_frame_info cfi);
1983
1984 static enum dw_cfi_oprnd_type
1985 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
1986 {
1987   switch (cfi)
1988     {
1989     case DW_CFA_def_cfa:
1990     case DW_CFA_def_cfa_sf:
1991     case DW_CFA_offset:
1992     case DW_CFA_offset_extended_sf:
1993     case DW_CFA_offset_extended:
1994       return dw_cfi_oprnd_offset;
1995
1996     case DW_CFA_register:
1997       return dw_cfi_oprnd_reg_num;
1998
1999     default:
2000       return dw_cfi_oprnd_unused;
2001     }
2002 }
2003
2004 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2005
2006 /* Map register numbers held in the call frame info that gcc has
2007    collected using DWARF_FRAME_REGNUM to those that should be output in
2008    .debug_frame and .eh_frame.  */
2009 #ifndef DWARF2_FRAME_REG_OUT
2010 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
2011 #endif
2012
2013 /* Output a Call Frame Information opcode and its operand(s).  */
2014
2015 static void
2016 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2017 {
2018   unsigned long r;
2019   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2020     dw2_asm_output_data (1, (cfi->dw_cfi_opc
2021                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2022                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2023                          cfi->dw_cfi_oprnd1.dw_cfi_offset);
2024   else if (cfi->dw_cfi_opc == DW_CFA_offset)
2025     {
2026       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2027       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2028                            "DW_CFA_offset, column 0x%lx", r);
2029       dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2030     }
2031   else if (cfi->dw_cfi_opc == DW_CFA_restore)
2032     {
2033       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2034       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2035                            "DW_CFA_restore, column 0x%lx", r);
2036     }
2037   else
2038     {
2039       dw2_asm_output_data (1, cfi->dw_cfi_opc,
2040                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2041
2042       switch (cfi->dw_cfi_opc)
2043         {
2044         case DW_CFA_set_loc:
2045           if (for_eh)
2046             dw2_asm_output_encoded_addr_rtx (
2047                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2048                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2049                 false, NULL);
2050           else
2051             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2052                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2053           break;
2054
2055         case DW_CFA_advance_loc1:
2056           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2057                                 fde->dw_fde_current_label, NULL);
2058           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2059           break;
2060
2061         case DW_CFA_advance_loc2:
2062           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2063                                 fde->dw_fde_current_label, NULL);
2064           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2065           break;
2066
2067         case DW_CFA_advance_loc4:
2068           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2069                                 fde->dw_fde_current_label, NULL);
2070           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2071           break;
2072
2073         case DW_CFA_MIPS_advance_loc8:
2074           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2075                                 fde->dw_fde_current_label, NULL);
2076           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2077           break;
2078
2079         case DW_CFA_offset_extended:
2080         case DW_CFA_def_cfa:
2081           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2082           dw2_asm_output_data_uleb128 (r, NULL);
2083           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2084           break;
2085
2086         case DW_CFA_offset_extended_sf:
2087         case DW_CFA_def_cfa_sf:
2088           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2089           dw2_asm_output_data_uleb128 (r, NULL);
2090           dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2091           break;
2092
2093         case DW_CFA_restore_extended:
2094         case DW_CFA_undefined:
2095         case DW_CFA_same_value:
2096         case DW_CFA_def_cfa_register:
2097           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2098           dw2_asm_output_data_uleb128 (r, NULL);
2099           break;
2100
2101         case DW_CFA_register:
2102           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2103           dw2_asm_output_data_uleb128 (r, NULL);
2104           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2105           dw2_asm_output_data_uleb128 (r, NULL);
2106           break;
2107
2108         case DW_CFA_def_cfa_offset:
2109         case DW_CFA_GNU_args_size:
2110           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2111           break;
2112
2113         case DW_CFA_def_cfa_offset_sf:
2114           dw2_asm_output_data_sleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2115           break;
2116
2117         case DW_CFA_GNU_window_save:
2118           break;
2119
2120         case DW_CFA_def_cfa_expression:
2121         case DW_CFA_expression:
2122           output_cfa_loc (cfi);
2123           break;
2124
2125         case DW_CFA_GNU_negative_offset_extended:
2126           /* Obsoleted by DW_CFA_offset_extended_sf.  */
2127           gcc_unreachable ();
2128
2129         default:
2130           break;
2131         }
2132     }
2133 }
2134
2135 /* Output the call frame information used to record information
2136    that relates to calculating the frame pointer, and records the
2137    location of saved registers.  */
2138
2139 static void
2140 output_call_frame_info (int for_eh)
2141 {
2142   unsigned int i;
2143   dw_fde_ref fde;
2144   dw_cfi_ref cfi;
2145   char l1[20], l2[20], section_start_label[20];
2146   bool any_lsda_needed = false;
2147   char augmentation[6];
2148   int augmentation_size;
2149   int fde_encoding = DW_EH_PE_absptr;
2150   int per_encoding = DW_EH_PE_absptr;
2151   int lsda_encoding = DW_EH_PE_absptr;
2152   int return_reg;
2153
2154   /* Don't emit a CIE if there won't be any FDEs.  */
2155   if (fde_table_in_use == 0)
2156     return;
2157
2158   /* If we make FDEs linkonce, we may have to emit an empty label for
2159      an FDE that wouldn't otherwise be emitted.  We want to avoid
2160      having an FDE kept around when the function it refers to is
2161      discarded.  Example where this matters: a primary function
2162      template in C++ requires EH information, but an explicit
2163      specialization doesn't.  */
2164   if (TARGET_USES_WEAK_UNWIND_INFO
2165       && ! flag_asynchronous_unwind_tables
2166       && for_eh)
2167     for (i = 0; i < fde_table_in_use; i++)
2168       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2169           && !fde_table[i].uses_eh_lsda
2170           && ! DECL_WEAK (fde_table[i].decl))
2171         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2172                                       for_eh, /* empty */ 1);
2173
2174   /* If we don't have any functions we'll want to unwind out of, don't
2175      emit any EH unwind information.  Note that if exceptions aren't
2176      enabled, we won't have collected nothrow information, and if we
2177      asked for asynchronous tables, we always want this info.  */
2178   if (for_eh)
2179     {
2180       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2181
2182       for (i = 0; i < fde_table_in_use; i++)
2183         if (fde_table[i].uses_eh_lsda)
2184           any_eh_needed = any_lsda_needed = true;
2185         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2186           any_eh_needed = true;
2187         else if (! fde_table[i].nothrow
2188                  && ! fde_table[i].all_throwers_are_sibcalls)
2189           any_eh_needed = true;
2190
2191       if (! any_eh_needed)
2192         return;
2193     }
2194
2195   /* We're going to be generating comments, so turn on app.  */
2196   if (flag_debug_asm)
2197     app_enable ();
2198
2199   if (for_eh)
2200     targetm.asm_out.eh_frame_section ();
2201   else
2202     named_section_flags (DEBUG_FRAME_SECTION, SECTION_DEBUG);
2203
2204   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2205   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2206
2207   /* Output the CIE.  */
2208   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2209   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2210   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2211                         "Length of Common Information Entry");
2212   ASM_OUTPUT_LABEL (asm_out_file, l1);
2213
2214   /* Now that the CIE pointer is PC-relative for EH,
2215      use 0 to identify the CIE.  */
2216   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2217                        (for_eh ? 0 : DW_CIE_ID),
2218                        "CIE Identifier Tag");
2219
2220   dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2221
2222   augmentation[0] = 0;
2223   augmentation_size = 0;
2224   if (for_eh)
2225     {
2226       char *p;
2227
2228       /* Augmentation:
2229          z      Indicates that a uleb128 is present to size the
2230                 augmentation section.
2231          L      Indicates the encoding (and thus presence) of
2232                 an LSDA pointer in the FDE augmentation.
2233          R      Indicates a non-default pointer encoding for
2234                 FDE code pointers.
2235          P      Indicates the presence of an encoding + language
2236                 personality routine in the CIE augmentation.  */
2237
2238       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2239       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2240       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2241
2242       p = augmentation + 1;
2243       if (eh_personality_libfunc)
2244         {
2245           *p++ = 'P';
2246           augmentation_size += 1 + size_of_encoded_value (per_encoding);
2247         }
2248       if (any_lsda_needed)
2249         {
2250           *p++ = 'L';
2251           augmentation_size += 1;
2252         }
2253       if (fde_encoding != DW_EH_PE_absptr)
2254         {
2255           *p++ = 'R';
2256           augmentation_size += 1;
2257         }
2258       if (p > augmentation + 1)
2259         {
2260           augmentation[0] = 'z';
2261           *p = '\0';
2262         }
2263
2264       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
2265       if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2266         {
2267           int offset = (  4             /* Length */
2268                         + 4             /* CIE Id */
2269                         + 1             /* CIE version */
2270                         + strlen (augmentation) + 1     /* Augmentation */
2271                         + size_of_uleb128 (1)           /* Code alignment */
2272                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2273                         + 1             /* RA column */
2274                         + 1             /* Augmentation size */
2275                         + 1             /* Personality encoding */ );
2276           int pad = -offset & (PTR_SIZE - 1);
2277
2278           augmentation_size += pad;
2279
2280           /* Augmentations should be small, so there's scarce need to
2281              iterate for a solution.  Die if we exceed one uleb128 byte.  */
2282           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2283         }
2284     }
2285
2286   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2287   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2288   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2289                                "CIE Data Alignment Factor");
2290
2291   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2292   if (DW_CIE_VERSION == 1)
2293     dw2_asm_output_data (1, return_reg, "CIE RA Column");
2294   else
2295     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2296
2297   if (augmentation[0])
2298     {
2299       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2300       if (eh_personality_libfunc)
2301         {
2302           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2303                                eh_data_format_name (per_encoding));
2304           dw2_asm_output_encoded_addr_rtx (per_encoding,
2305                                            eh_personality_libfunc,
2306                                            true, NULL);
2307         }
2308
2309       if (any_lsda_needed)
2310         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2311                              eh_data_format_name (lsda_encoding));
2312
2313       if (fde_encoding != DW_EH_PE_absptr)
2314         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2315                              eh_data_format_name (fde_encoding));
2316     }
2317
2318   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
2319     output_cfi (cfi, NULL, for_eh);
2320
2321   /* Pad the CIE out to an address sized boundary.  */
2322   ASM_OUTPUT_ALIGN (asm_out_file,
2323                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
2324   ASM_OUTPUT_LABEL (asm_out_file, l2);
2325
2326   /* Loop through all of the FDE's.  */
2327   for (i = 0; i < fde_table_in_use; i++)
2328     {
2329       fde = &fde_table[i];
2330
2331       /* Don't emit EH unwind info for leaf functions that don't need it.  */
2332       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
2333           && (fde->nothrow || fde->all_throwers_are_sibcalls)
2334           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2335           && !fde->uses_eh_lsda)
2336         continue;
2337
2338       targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
2339       targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
2340       ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
2341       ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
2342       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2343                             "FDE Length");
2344       ASM_OUTPUT_LABEL (asm_out_file, l1);
2345
2346       if (for_eh)
2347         dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
2348       else
2349         dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
2350                                "FDE CIE offset");
2351
2352       if (for_eh)
2353         {
2354           rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
2355           SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
2356           dw2_asm_output_encoded_addr_rtx (fde_encoding,
2357                                            sym_ref,
2358                                            false,
2359                                            "FDE initial location");
2360           if (fde->dw_fde_switched_sections)
2361             {
2362               rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode, 
2363                                       fde->dw_fde_unlikely_section_label);
2364               rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode, 
2365                                       fde->dw_fde_hot_section_label);
2366               SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
2367               SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
2368               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
2369                                                "FDE initial location");
2370               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2371                                     fde->dw_fde_hot_section_end_label,
2372                                     fde->dw_fde_hot_section_label,
2373                                     "FDE address range");
2374               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
2375                                                "FDE initial location");
2376               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2377                                     fde->dw_fde_unlikely_section_end_label,
2378                                     fde->dw_fde_unlikely_section_label,
2379                                     "FDE address range");
2380             }
2381           else
2382             dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
2383                                   fde->dw_fde_end, fde->dw_fde_begin,
2384                                   "FDE address range");
2385         }
2386       else
2387         {
2388           dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
2389                                "FDE initial location");
2390           if (fde->dw_fde_switched_sections)
2391             {
2392               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2393                                    fde->dw_fde_hot_section_label,
2394                                    "FDE initial location");
2395               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2396                                     fde->dw_fde_hot_section_end_label,
2397                                     fde->dw_fde_hot_section_label,
2398                                     "FDE address range");
2399               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2400                                    fde->dw_fde_unlikely_section_label,
2401                                    "FDE initial location");
2402               dw2_asm_output_delta (DWARF2_ADDR_SIZE, 
2403                                     fde->dw_fde_unlikely_section_end_label,
2404                                     fde->dw_fde_unlikely_section_label,
2405                                     "FDE address range");
2406             }
2407           else
2408             dw2_asm_output_delta (DWARF2_ADDR_SIZE,
2409                                   fde->dw_fde_end, fde->dw_fde_begin,
2410                                   "FDE address range");
2411         }
2412
2413       if (augmentation[0])
2414         {
2415           if (any_lsda_needed)
2416             {
2417               int size = size_of_encoded_value (lsda_encoding);
2418
2419               if (lsda_encoding == DW_EH_PE_aligned)
2420                 {
2421                   int offset = (  4             /* Length */
2422                                 + 4             /* CIE offset */
2423                                 + 2 * size_of_encoded_value (fde_encoding)
2424                                 + 1             /* Augmentation size */ );
2425                   int pad = -offset & (PTR_SIZE - 1);
2426
2427                   size += pad;
2428                   gcc_assert (size_of_uleb128 (size) == 1);
2429                 }
2430
2431               dw2_asm_output_data_uleb128 (size, "Augmentation size");
2432
2433               if (fde->uses_eh_lsda)
2434                 {
2435                   ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
2436                                                fde->funcdef_number);
2437                   dw2_asm_output_encoded_addr_rtx (
2438                         lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
2439                         false, "Language Specific Data Area");
2440                 }
2441               else
2442                 {
2443                   if (lsda_encoding == DW_EH_PE_aligned)
2444                     ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2445                   dw2_asm_output_data
2446                     (size_of_encoded_value (lsda_encoding), 0,
2447                      "Language Specific Data Area (none)");
2448                 }
2449             }
2450           else
2451             dw2_asm_output_data_uleb128 (0, "Augmentation size");
2452         }
2453
2454       /* Loop through the Call Frame Instructions associated with
2455          this FDE.  */
2456       fde->dw_fde_current_label = fde->dw_fde_begin;
2457       for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
2458         output_cfi (cfi, fde, for_eh);
2459
2460       /* Pad the FDE out to an address sized boundary.  */
2461       ASM_OUTPUT_ALIGN (asm_out_file,
2462                         floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
2463       ASM_OUTPUT_LABEL (asm_out_file, l2);
2464     }
2465
2466   if (for_eh && targetm.terminate_dw2_eh_frame_info)
2467     dw2_asm_output_data (4, 0, "End of Table");
2468 #ifdef MIPS_DEBUGGING_INFO
2469   /* Work around Irix 6 assembler bug whereby labels at the end of a section
2470      get a value of 0.  Putting .align 0 after the label fixes it.  */
2471   ASM_OUTPUT_ALIGN (asm_out_file, 0);
2472 #endif
2473
2474   /* Turn off app to make assembly quicker.  */
2475   if (flag_debug_asm)
2476     app_disable ();
2477 }
2478
2479 /* Output a marker (i.e. a label) for the beginning of a function, before
2480    the prologue.  */
2481
2482 void
2483 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
2484                           const char *file ATTRIBUTE_UNUSED)
2485 {
2486   char label[MAX_ARTIFICIAL_LABEL_BYTES];
2487   char * dup_label;
2488   dw_fde_ref fde;
2489
2490   current_function_func_begin_label = NULL;
2491
2492 #ifdef TARGET_UNWIND_INFO
2493   /* ??? current_function_func_begin_label is also used by except.c
2494      for call-site information.  We must emit this label if it might
2495      be used.  */
2496   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
2497       && ! dwarf2out_do_frame ())
2498     return;
2499 #else
2500   if (! dwarf2out_do_frame ())
2501     return;
2502 #endif
2503
2504   function_section (current_function_decl);
2505   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
2506                                current_function_funcdef_no);
2507   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
2508                           current_function_funcdef_no);
2509   dup_label = xstrdup (label);
2510   current_function_func_begin_label = dup_label;
2511
2512 #ifdef TARGET_UNWIND_INFO
2513   /* We can elide the fde allocation if we're not emitting debug info.  */
2514   if (! dwarf2out_do_frame ())
2515     return;
2516 #endif
2517
2518   /* Expand the fde table if necessary.  */
2519   if (fde_table_in_use == fde_table_allocated)
2520     {
2521       fde_table_allocated += FDE_TABLE_INCREMENT;
2522       fde_table = ggc_realloc (fde_table,
2523                                fde_table_allocated * sizeof (dw_fde_node));
2524       memset (fde_table + fde_table_in_use, 0,
2525               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2526     }
2527
2528   /* Record the FDE associated with this function.  */
2529   current_funcdef_fde = fde_table_in_use;
2530
2531   /* Add the new FDE at the end of the fde_table.  */
2532   fde = &fde_table[fde_table_in_use++];
2533   fde->decl = current_function_decl;
2534   fde->dw_fde_begin = dup_label;
2535   fde->dw_fde_current_label = NULL;
2536   fde->dw_fde_hot_section_label = NULL;
2537   fde->dw_fde_hot_section_end_label = NULL;
2538   fde->dw_fde_unlikely_section_label = NULL;
2539   fde->dw_fde_unlikely_section_end_label = NULL;
2540   fde->dw_fde_switched_sections = false;
2541   fde->dw_fde_end = NULL;
2542   fde->dw_fde_cfi = NULL;
2543   fde->funcdef_number = current_function_funcdef_no;
2544   fde->nothrow = TREE_NOTHROW (current_function_decl);
2545   fde->uses_eh_lsda = cfun->uses_eh_lsda;
2546   fde->all_throwers_are_sibcalls = cfun->all_throwers_are_sibcalls;
2547
2548   args_size = old_args_size = 0;
2549
2550   /* We only want to output line number information for the genuine dwarf2
2551      prologue case, not the eh frame case.  */
2552 #ifdef DWARF2_DEBUGGING_INFO
2553   if (file)
2554     dwarf2out_source_line (line, file);
2555 #endif
2556 }
2557
2558 /* Output a marker (i.e. a label) for the absolute end of the generated code
2559    for a function definition.  This gets called *after* the epilogue code has
2560    been generated.  */
2561
2562 void
2563 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
2564                         const char *file ATTRIBUTE_UNUSED)
2565 {
2566   dw_fde_ref fde;
2567   char label[MAX_ARTIFICIAL_LABEL_BYTES];
2568
2569   /* Output a label to mark the endpoint of the code generated for this
2570      function.  */
2571   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
2572                                current_function_funcdef_no);
2573   ASM_OUTPUT_LABEL (asm_out_file, label);
2574   fde = &fde_table[fde_table_in_use - 1];
2575   fde->dw_fde_end = xstrdup (label);
2576 }
2577
2578 void
2579 dwarf2out_frame_init (void)
2580 {
2581   /* Allocate the initial hunk of the fde_table.  */
2582   fde_table = ggc_alloc_cleared (FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
2583   fde_table_allocated = FDE_TABLE_INCREMENT;
2584   fde_table_in_use = 0;
2585
2586   /* Generate the CFA instructions common to all FDE's.  Do it now for the
2587      sake of lookup_cfa.  */
2588
2589   /* On entry, the Canonical Frame Address is at SP.  */
2590   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
2591
2592 #ifdef DWARF2_UNWIND_INFO
2593   if (DWARF2_UNWIND_INFO)
2594     initial_return_save (INCOMING_RETURN_ADDR_RTX);
2595 #endif
2596 }
2597
2598 void
2599 dwarf2out_frame_finish (void)
2600 {
2601   /* Output call frame information.  */
2602   if (DWARF2_FRAME_INFO)
2603     output_call_frame_info (0);
2604
2605 #ifndef TARGET_UNWIND_INFO
2606   /* Output another copy for the unwinder.  */
2607   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
2608     output_call_frame_info (1);
2609 #endif
2610 }
2611 #endif
2612 \f
2613 /* And now, the subset of the debugging information support code necessary
2614    for emitting location expressions.  */
2615
2616 /* We need some way to distinguish DW_OP_addr with a direct symbol
2617    relocation from DW_OP_addr with a dtp-relative symbol relocation.  */
2618 #define INTERNAL_DW_OP_tls_addr         (0x100 + DW_OP_addr)
2619
2620
2621 typedef struct dw_val_struct *dw_val_ref;
2622 typedef struct die_struct *dw_die_ref;
2623 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
2624 typedef struct dw_loc_list_struct *dw_loc_list_ref;
2625
2626 /* Each DIE may have a series of attribute/value pairs.  Values
2627    can take on several forms.  The forms that are used in this
2628    implementation are listed below.  */
2629
2630 enum dw_val_class
2631 {
2632   dw_val_class_addr,
2633   dw_val_class_offset,
2634   dw_val_class_loc,
2635   dw_val_class_loc_list,
2636   dw_val_class_range_list,
2637   dw_val_class_const,
2638   dw_val_class_unsigned_const,
2639   dw_val_class_long_long,
2640   dw_val_class_vec,
2641   dw_val_class_flag,
2642   dw_val_class_die_ref,
2643   dw_val_class_fde_ref,
2644   dw_val_class_lbl_id,
2645   dw_val_class_lbl_offset,
2646   dw_val_class_str
2647 };
2648
2649 /* Describe a double word constant value.  */
2650 /* ??? Every instance of long_long in the code really means CONST_DOUBLE.  */
2651
2652 typedef struct dw_long_long_struct GTY(())
2653 {
2654   unsigned long hi;
2655   unsigned long low;
2656 }
2657 dw_long_long_const;
2658
2659 /* Describe a floating point constant value, or a vector constant value.  */
2660
2661 typedef struct dw_vec_struct GTY(())
2662 {
2663   unsigned char * GTY((length ("%h.length"))) array;
2664   unsigned length;
2665   unsigned elt_size;
2666 }
2667 dw_vec_const;
2668
2669 /* The dw_val_node describes an attribute's value, as it is
2670    represented internally.  */
2671
2672 typedef struct dw_val_struct GTY(())
2673 {
2674   enum dw_val_class val_class;
2675   union dw_val_struct_union
2676     {
2677       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
2678       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
2679       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
2680       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
2681       HOST_WIDE_INT GTY ((default)) val_int;
2682       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
2683       dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
2684       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
2685       struct dw_val_die_union
2686         {
2687           dw_die_ref die;
2688           int external;
2689         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
2690       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
2691       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
2692       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
2693       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
2694     }
2695   GTY ((desc ("%1.val_class"))) v;
2696 }
2697 dw_val_node;
2698
2699 /* Locations in memory are described using a sequence of stack machine
2700    operations.  */
2701
2702 typedef struct dw_loc_descr_struct GTY(())
2703 {
2704   dw_loc_descr_ref dw_loc_next;
2705   enum dwarf_location_atom dw_loc_opc;
2706   dw_val_node dw_loc_oprnd1;
2707   dw_val_node dw_loc_oprnd2;
2708   int dw_loc_addr;
2709 }
2710 dw_loc_descr_node;
2711
2712 /* Location lists are ranges + location descriptions for that range,
2713    so you can track variables that are in different places over
2714    their entire life.  */
2715 typedef struct dw_loc_list_struct GTY(())
2716 {
2717   dw_loc_list_ref dw_loc_next;
2718   const char *begin; /* Label for begin address of range */
2719   const char *end;  /* Label for end address of range */
2720   char *ll_symbol; /* Label for beginning of location list.
2721                       Only on head of list */
2722   const char *section; /* Section this loclist is relative to */
2723   dw_loc_descr_ref expr;
2724 } dw_loc_list_node;
2725
2726 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2727
2728 static const char *dwarf_stack_op_name (unsigned);
2729 static dw_loc_descr_ref new_loc_descr (enum dwarf_location_atom,
2730                                        unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT);
2731 static void add_loc_descr (dw_loc_descr_ref *, dw_loc_descr_ref);
2732 static unsigned long size_of_loc_descr (dw_loc_descr_ref);
2733 static unsigned long size_of_locs (dw_loc_descr_ref);
2734 static void output_loc_operands (dw_loc_descr_ref);
2735 static void output_loc_sequence (dw_loc_descr_ref);
2736
2737 /* Convert a DWARF stack opcode into its string name.  */
2738
2739 static const char *
2740 dwarf_stack_op_name (unsigned int op)
2741 {
2742   switch (op)
2743     {
2744     case DW_OP_addr:
2745     case INTERNAL_DW_OP_tls_addr:
2746       return "DW_OP_addr";
2747     case DW_OP_deref:
2748       return "DW_OP_deref";
2749     case DW_OP_const1u:
2750       return "DW_OP_const1u";
2751     case DW_OP_const1s:
2752       return "DW_OP_const1s";
2753     case DW_OP_const2u:
2754       return "DW_OP_const2u";
2755     case DW_OP_const2s:
2756       return "DW_OP_const2s";
2757     case DW_OP_const4u:
2758       return "DW_OP_const4u";
2759     case DW_OP_const4s:
2760       return "DW_OP_const4s";
2761     case DW_OP_const8u:
2762       return "DW_OP_const8u";
2763     case DW_OP_const8s:
2764       return "DW_OP_const8s";
2765     case DW_OP_constu:
2766       return "DW_OP_constu";
2767     case DW_OP_consts:
2768       return "DW_OP_consts";
2769     case DW_OP_dup:
2770       return "DW_OP_dup";
2771     case DW_OP_drop:
2772       return "DW_OP_drop";
2773     case DW_OP_over:
2774       return "DW_OP_over";
2775     case DW_OP_pick:
2776       return "DW_OP_pick";
2777     case DW_OP_swap:
2778       return "DW_OP_swap";
2779     case DW_OP_rot:
2780       return "DW_OP_rot";
2781     case DW_OP_xderef:
2782       return "DW_OP_xderef";
2783     case DW_OP_abs:
2784       return "DW_OP_abs";
2785     case DW_OP_and:
2786       return "DW_OP_and";
2787     case DW_OP_div:
2788       return "DW_OP_div";
2789     case DW_OP_minus:
2790       return "DW_OP_minus";
2791     case DW_OP_mod:
2792       return "DW_OP_mod";
2793     case DW_OP_mul:
2794       return "DW_OP_mul";
2795     case DW_OP_neg:
2796       return "DW_OP_neg";
2797     case DW_OP_not:
2798       return "DW_OP_not";
2799     case DW_OP_or:
2800       return "DW_OP_or";
2801     case DW_OP_plus:
2802       return "DW_OP_plus";
2803     case DW_OP_plus_uconst:
2804       return "DW_OP_plus_uconst";
2805     case DW_OP_shl:
2806       return "DW_OP_shl";
2807     case DW_OP_shr:
2808       return "DW_OP_shr";
2809     case DW_OP_shra:
2810       return "DW_OP_shra";
2811     case DW_OP_xor:
2812       return "DW_OP_xor";
2813     case DW_OP_bra:
2814       return "DW_OP_bra";
2815     case DW_OP_eq:
2816       return "DW_OP_eq";
2817     case DW_OP_ge:
2818       return "DW_OP_ge";
2819     case DW_OP_gt:
2820       return "DW_OP_gt";
2821     case DW_OP_le:
2822       return "DW_OP_le";
2823     case DW_OP_lt:
2824       return "DW_OP_lt";
2825     case DW_OP_ne:
2826       return "DW_OP_ne";
2827     case DW_OP_skip:
2828       return "DW_OP_skip";
2829     case DW_OP_lit0:
2830       return "DW_OP_lit0";
2831     case DW_OP_lit1:
2832       return "DW_OP_lit1";
2833     case DW_OP_lit2:
2834       return "DW_OP_lit2";
2835     case DW_OP_lit3:
2836       return "DW_OP_lit3";
2837     case DW_OP_lit4:
2838       return "DW_OP_lit4";
2839     case DW_OP_lit5:
2840       return "DW_OP_lit5";
2841     case DW_OP_lit6:
2842       return "DW_OP_lit6";
2843     case DW_OP_lit7:
2844       return "DW_OP_lit7";
2845     case DW_OP_lit8:
2846       return "DW_OP_lit8";
2847     case DW_OP_lit9:
2848       return "DW_OP_lit9";
2849     case DW_OP_lit10:
2850       return "DW_OP_lit10";
2851     case DW_OP_lit11:
2852       return "DW_OP_lit11";
2853     case DW_OP_lit12:
2854       return "DW_OP_lit12";
2855     case DW_OP_lit13:
2856       return "DW_OP_lit13";
2857     case DW_OP_lit14:
2858       return "DW_OP_lit14";
2859     case DW_OP_lit15:
2860       return "DW_OP_lit15";
2861     case DW_OP_lit16:
2862       return "DW_OP_lit16";
2863     case DW_OP_lit17:
2864       return "DW_OP_lit17";
2865     case DW_OP_lit18:
2866       return "DW_OP_lit18";
2867     case DW_OP_lit19:
2868       return "DW_OP_lit19";
2869     case DW_OP_lit20:
2870       return "DW_OP_lit20";
2871     case DW_OP_lit21:
2872       return "DW_OP_lit21";
2873     case DW_OP_lit22:
2874       return "DW_OP_lit22";
2875     case DW_OP_lit23:
2876       return "DW_OP_lit23";
2877     case DW_OP_lit24:
2878       return "DW_OP_lit24";
2879     case DW_OP_lit25:
2880       return "DW_OP_lit25";
2881     case DW_OP_lit26:
2882       return "DW_OP_lit26";
2883     case DW_OP_lit27:
2884       return "DW_OP_lit27";
2885     case DW_OP_lit28:
2886       return "DW_OP_lit28";
2887     case DW_OP_lit29:
2888       return "DW_OP_lit29";
2889     case DW_OP_lit30:
2890       return "DW_OP_lit30";
2891     case DW_OP_lit31:
2892       return "DW_OP_lit31";
2893     case DW_OP_reg0:
2894       return "DW_OP_reg0";
2895     case DW_OP_reg1:
2896       return "DW_OP_reg1";
2897     case DW_OP_reg2:
2898       return "DW_OP_reg2";
2899     case DW_OP_reg3:
2900       return "DW_OP_reg3";
2901     case DW_OP_reg4:
2902       return "DW_OP_reg4";
2903     case DW_OP_reg5:
2904       return "DW_OP_reg5";
2905     case DW_OP_reg6:
2906       return "DW_OP_reg6";
2907     case DW_OP_reg7:
2908       return "DW_OP_reg7";
2909     case DW_OP_reg8:
2910       return "DW_OP_reg8";
2911     case DW_OP_reg9:
2912       return "DW_OP_reg9";
2913     case DW_OP_reg10:
2914       return "DW_OP_reg10";
2915     case DW_OP_reg11:
2916       return "DW_OP_reg11";
2917     case DW_OP_reg12:
2918       return "DW_OP_reg12";
2919     case DW_OP_reg13:
2920       return "DW_OP_reg13";
2921     case DW_OP_reg14:
2922       return "DW_OP_reg14";
2923     case DW_OP_reg15:
2924       return "DW_OP_reg15";
2925     case DW_OP_reg16:
2926       return "DW_OP_reg16";
2927     case DW_OP_reg17:
2928       return "DW_OP_reg17";
2929     case DW_OP_reg18:
2930       return "DW_OP_reg18";
2931     case DW_OP_reg19:
2932       return "DW_OP_reg19";
2933     case DW_OP_reg20:
2934       return "DW_OP_reg20";
2935     case DW_OP_reg21:
2936       return "DW_OP_reg21";
2937     case DW_OP_reg22:
2938       return "DW_OP_reg22";
2939     case DW_OP_reg23:
2940       return "DW_OP_reg23";
2941     case DW_OP_reg24:
2942       return "DW_OP_reg24";
2943     case DW_OP_reg25:
2944       return "DW_OP_reg25";
2945     case DW_OP_reg26:
2946       return "DW_OP_reg26";
2947     case DW_OP_reg27:
2948       return "DW_OP_reg27";
2949     case DW_OP_reg28:
2950       return "DW_OP_reg28";
2951     case DW_OP_reg29:
2952       return "DW_OP_reg29";
2953     case DW_OP_reg30:
2954       return "DW_OP_reg30";
2955     case DW_OP_reg31:
2956       return "DW_OP_reg31";
2957     case DW_OP_breg0:
2958       return "DW_OP_breg0";
2959     case DW_OP_breg1:
2960       return "DW_OP_breg1";
2961     case DW_OP_breg2:
2962       return "DW_OP_breg2";
2963     case DW_OP_breg3:
2964       return "DW_OP_breg3";
2965     case DW_OP_breg4:
2966       return "DW_OP_breg4";
2967     case DW_OP_breg5:
2968       return "DW_OP_breg5";
2969     case DW_OP_breg6:
2970       return "DW_OP_breg6";
2971     case DW_OP_breg7:
2972       return "DW_OP_breg7";
2973     case DW_OP_breg8:
2974       return "DW_OP_breg8";
2975     case DW_OP_breg9:
2976       return "DW_OP_breg9";
2977     case DW_OP_breg10:
2978       return "DW_OP_breg10";
2979     case DW_OP_breg11:
2980       return "DW_OP_breg11";
2981     case DW_OP_breg12:
2982       return "DW_OP_breg12";
2983     case DW_OP_breg13:
2984       return "DW_OP_breg13";
2985     case DW_OP_breg14:
2986       return "DW_OP_breg14";
2987     case DW_OP_breg15:
2988       return "DW_OP_breg15";
2989     case DW_OP_breg16:
2990       return "DW_OP_breg16";
2991     case DW_OP_breg17:
2992       return "DW_OP_breg17";
2993     case DW_OP_breg18:
2994       return "DW_OP_breg18";
2995     case DW_OP_breg19:
2996       return "DW_OP_breg19";
2997     case DW_OP_breg20:
2998       return "DW_OP_breg20";
2999     case DW_OP_breg21:
3000       return "DW_OP_breg21";
3001     case DW_OP_breg22:
3002       return "DW_OP_breg22";
3003     case DW_OP_breg23:
3004       return "DW_OP_breg23";
3005     case DW_OP_breg24:
3006       return "DW_OP_breg24";
3007     case DW_OP_breg25:
3008       return "DW_OP_breg25";
3009     case DW_OP_breg26:
3010       return "DW_OP_breg26";
3011     case DW_OP_breg27:
3012       return "DW_OP_breg27";
3013     case DW_OP_breg28:
3014       return "DW_OP_breg28";
3015     case DW_OP_breg29:
3016       return "DW_OP_breg29";
3017     case DW_OP_breg30:
3018       return "DW_OP_breg30";
3019     case DW_OP_breg31:
3020       return "DW_OP_breg31";
3021     case DW_OP_regx:
3022       return "DW_OP_regx";
3023     case DW_OP_fbreg:
3024       return "DW_OP_fbreg";
3025     case DW_OP_bregx:
3026       return "DW_OP_bregx";
3027     case DW_OP_piece:
3028       return "DW_OP_piece";
3029     case DW_OP_deref_size:
3030       return "DW_OP_deref_size";
3031     case DW_OP_xderef_size:
3032       return "DW_OP_xderef_size";
3033     case DW_OP_nop:
3034       return "DW_OP_nop";
3035     case DW_OP_push_object_address:
3036       return "DW_OP_push_object_address";
3037     case DW_OP_call2:
3038       return "DW_OP_call2";
3039     case DW_OP_call4:
3040       return "DW_OP_call4";
3041     case DW_OP_call_ref:
3042       return "DW_OP_call_ref";
3043     case DW_OP_GNU_push_tls_address:
3044       return "DW_OP_GNU_push_tls_address";
3045     default:
3046       return "OP_<unknown>";
3047     }
3048 }
3049
3050 /* Return a pointer to a newly allocated location description.  Location
3051    descriptions are simple expression terms that can be strung
3052    together to form more complicated location (address) descriptions.  */
3053
3054 static inline dw_loc_descr_ref
3055 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3056                unsigned HOST_WIDE_INT oprnd2)
3057 {
3058   dw_loc_descr_ref descr = ggc_alloc_cleared (sizeof (dw_loc_descr_node));
3059
3060   descr->dw_loc_opc = op;
3061   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3062   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3063   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3064   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3065
3066   return descr;
3067 }
3068
3069 /* Add a location description term to a location description expression.  */
3070
3071 static inline void
3072 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3073 {
3074   dw_loc_descr_ref *d;
3075
3076   /* Find the end of the chain.  */
3077   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3078     ;
3079
3080   *d = descr;
3081 }
3082
3083 /* Return the size of a location descriptor.  */
3084
3085 static unsigned long
3086 size_of_loc_descr (dw_loc_descr_ref loc)
3087 {
3088   unsigned long size = 1;
3089
3090   switch (loc->dw_loc_opc)
3091     {
3092     case DW_OP_addr:
3093     case INTERNAL_DW_OP_tls_addr:
3094       size += DWARF2_ADDR_SIZE;
3095       break;
3096     case DW_OP_const1u:
3097     case DW_OP_const1s:
3098       size += 1;
3099       break;
3100     case DW_OP_const2u:
3101     case DW_OP_const2s:
3102       size += 2;
3103       break;
3104     case DW_OP_const4u:
3105     case DW_OP_const4s:
3106       size += 4;
3107       break;
3108     case DW_OP_const8u:
3109     case DW_OP_const8s:
3110       size += 8;
3111       break;
3112     case DW_OP_constu:
3113       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3114       break;
3115     case DW_OP_consts:
3116       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3117       break;
3118     case DW_OP_pick:
3119       size += 1;
3120       break;
3121     case DW_OP_plus_uconst:
3122       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3123       break;
3124     case DW_OP_skip:
3125     case DW_OP_bra:
3126       size += 2;
3127       break;
3128     case DW_OP_breg0:
3129     case DW_OP_breg1:
3130     case DW_OP_breg2:
3131     case DW_OP_breg3:
3132     case DW_OP_breg4:
3133     case DW_OP_breg5:
3134     case DW_OP_breg6:
3135     case DW_OP_breg7:
3136     case DW_OP_breg8:
3137     case DW_OP_breg9:
3138     case DW_OP_breg10:
3139     case DW_OP_breg11:
3140     case DW_OP_breg12:
3141     case DW_OP_breg13:
3142     case DW_OP_breg14:
3143     case DW_OP_breg15:
3144     case DW_OP_breg16:
3145     case DW_OP_breg17:
3146     case DW_OP_breg18:
3147     case DW_OP_breg19:
3148     case DW_OP_breg20:
3149     case DW_OP_breg21:
3150     case DW_OP_breg22:
3151     case DW_OP_breg23:
3152     case DW_OP_breg24:
3153     case DW_OP_breg25:
3154     case DW_OP_breg26:
3155     case DW_OP_breg27:
3156     case DW_OP_breg28:
3157     case DW_OP_breg29:
3158     case DW_OP_breg30:
3159     case DW_OP_breg31:
3160       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3161       break;
3162     case DW_OP_regx:
3163       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3164       break;
3165     case DW_OP_fbreg:
3166       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3167       break;
3168     case DW_OP_bregx:
3169       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3170       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3171       break;
3172     case DW_OP_piece:
3173       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3174       break;
3175     case DW_OP_deref_size:
3176     case DW_OP_xderef_size:
3177       size += 1;
3178       break;
3179     case DW_OP_call2:
3180       size += 2;
3181       break;
3182     case DW_OP_call4:
3183       size += 4;
3184       break;
3185     case DW_OP_call_ref:
3186       size += DWARF2_ADDR_SIZE;
3187       break;
3188     default:
3189       break;
3190     }
3191
3192   return size;
3193 }
3194
3195 /* Return the size of a series of location descriptors.  */
3196
3197 static unsigned long
3198 size_of_locs (dw_loc_descr_ref loc)
3199 {
3200   unsigned long size;
3201
3202   for (size = 0; loc != NULL; loc = loc->dw_loc_next)
3203     {
3204       loc->dw_loc_addr = size;
3205       size += size_of_loc_descr (loc);
3206     }
3207
3208   return size;
3209 }
3210
3211 /* Output location description stack opcode's operands (if any).  */
3212
3213 static void
3214 output_loc_operands (dw_loc_descr_ref loc)
3215 {
3216   dw_val_ref val1 = &loc->dw_loc_oprnd1;
3217   dw_val_ref val2 = &loc->dw_loc_oprnd2;
3218
3219   switch (loc->dw_loc_opc)
3220     {
3221 #ifdef DWARF2_DEBUGGING_INFO
3222     case DW_OP_addr:
3223       dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
3224       break;
3225     case DW_OP_const2u:
3226     case DW_OP_const2s:
3227       dw2_asm_output_data (2, val1->v.val_int, NULL);
3228       break;
3229     case DW_OP_const4u:
3230     case DW_OP_const4s:
3231       dw2_asm_output_data (4, val1->v.val_int, NULL);
3232       break;
3233     case DW_OP_const8u:
3234     case DW_OP_const8s:
3235       gcc_assert (HOST_BITS_PER_LONG >= 64);
3236       dw2_asm_output_data (8, val1->v.val_int, NULL);
3237       break;
3238     case DW_OP_skip:
3239     case DW_OP_bra:
3240       {
3241         int offset;
3242
3243         gcc_assert (val1->val_class == dw_val_class_loc);
3244         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
3245
3246         dw2_asm_output_data (2, offset, NULL);
3247       }
3248       break;
3249 #else
3250     case DW_OP_addr:
3251     case DW_OP_const2u:
3252     case DW_OP_const2s:
3253     case DW_OP_const4u:
3254     case DW_OP_const4s:
3255     case DW_OP_const8u:
3256     case DW_OP_const8s:
3257     case DW_OP_skip:
3258     case DW_OP_bra:
3259       /* We currently don't make any attempt to make sure these are
3260          aligned properly like we do for the main unwind info, so
3261          don't support emitting things larger than a byte if we're
3262          only doing unwinding.  */
3263       gcc_unreachable ();
3264 #endif
3265     case DW_OP_const1u:
3266     case DW_OP_const1s:
3267       dw2_asm_output_data (1, val1->v.val_int, NULL);
3268       break;
3269     case DW_OP_constu:
3270       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3271       break;
3272     case DW_OP_consts:
3273       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3274       break;
3275     case DW_OP_pick:
3276       dw2_asm_output_data (1, val1->v.val_int, NULL);
3277       break;
3278     case DW_OP_plus_uconst:
3279       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3280       break;
3281     case DW_OP_breg0:
3282     case DW_OP_breg1:
3283     case DW_OP_breg2:
3284     case DW_OP_breg3:
3285     case DW_OP_breg4:
3286     case DW_OP_breg5:
3287     case DW_OP_breg6:
3288     case DW_OP_breg7:
3289     case DW_OP_breg8:
3290     case DW_OP_breg9:
3291     case DW_OP_breg10:
3292     case DW_OP_breg11:
3293     case DW_OP_breg12:
3294     case DW_OP_breg13:
3295     case DW_OP_breg14:
3296     case DW_OP_breg15:
3297     case DW_OP_breg16:
3298     case DW_OP_breg17:
3299     case DW_OP_breg18:
3300     case DW_OP_breg19:
3301     case DW_OP_breg20:
3302     case DW_OP_breg21:
3303     case DW_OP_breg22:
3304     case DW_OP_breg23:
3305     case DW_OP_breg24:
3306     case DW_OP_breg25:
3307     case DW_OP_breg26:
3308     case DW_OP_breg27:
3309     case DW_OP_breg28:
3310     case DW_OP_breg29:
3311     case DW_OP_breg30:
3312     case DW_OP_breg31:
3313       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3314       break;
3315     case DW_OP_regx:
3316       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3317       break;
3318     case DW_OP_fbreg:
3319       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
3320       break;
3321     case DW_OP_bregx:
3322       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3323       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
3324       break;
3325     case DW_OP_piece:
3326       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
3327       break;
3328     case DW_OP_deref_size:
3329     case DW_OP_xderef_size:
3330       dw2_asm_output_data (1, val1->v.val_int, NULL);
3331       break;
3332
3333     case INTERNAL_DW_OP_tls_addr:
3334       if (targetm.asm_out.output_dwarf_dtprel)
3335         {
3336           targetm.asm_out.output_dwarf_dtprel (asm_out_file,
3337                                                DWARF2_ADDR_SIZE,
3338                                                val1->v.val_addr);
3339           fputc ('\n', asm_out_file);
3340         }
3341       else
3342         gcc_unreachable ();
3343       break;
3344
3345     default:
3346       /* Other codes have no operands.  */
3347       break;
3348     }
3349 }
3350
3351 /* Output a sequence of location operations.  */
3352
3353 static void
3354 output_loc_sequence (dw_loc_descr_ref loc)
3355 {
3356   for (; loc != NULL; loc = loc->dw_loc_next)
3357     {
3358       /* Output the opcode.  */
3359       dw2_asm_output_data (1, loc->dw_loc_opc,
3360                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
3361
3362       /* Output the operand(s) (if any).  */
3363       output_loc_operands (loc);
3364     }
3365 }
3366
3367 /* This routine will generate the correct assembly data for a location
3368    description based on a cfi entry with a complex address.  */
3369
3370 static void
3371 output_cfa_loc (dw_cfi_ref cfi)
3372 {
3373   dw_loc_descr_ref loc;
3374   unsigned long size;
3375
3376   /* Output the size of the block.  */
3377   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
3378   size = size_of_locs (loc);
3379   dw2_asm_output_data_uleb128 (size, NULL);
3380
3381   /* Now output the operations themselves.  */
3382   output_loc_sequence (loc);
3383 }
3384
3385 /* This function builds a dwarf location descriptor sequence from
3386    a dw_cfa_location.  */
3387
3388 static struct dw_loc_descr_struct *
3389 build_cfa_loc (dw_cfa_location *cfa)
3390 {
3391   struct dw_loc_descr_struct *head, *tmp;
3392
3393   if (cfa->indirect)
3394     {
3395       if (cfa->base_offset)
3396         {
3397           if (cfa->reg <= 31)
3398             head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->base_offset, 0);
3399           else
3400             head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->base_offset);
3401         }
3402       else if (cfa->reg <= 31)
3403         head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3404       else
3405         head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3406
3407       head->dw_loc_oprnd1.val_class = dw_val_class_const;
3408       tmp = new_loc_descr (DW_OP_deref, 0, 0);
3409       add_loc_descr (&head, tmp);
3410       if (cfa->offset != 0)
3411         {
3412           tmp = new_loc_descr (DW_OP_plus_uconst, cfa->offset, 0);
3413           add_loc_descr (&head, tmp);
3414         }
3415     }
3416   else
3417     {
3418       if (cfa->offset == 0)
3419         if (cfa->reg <= 31)
3420           head = new_loc_descr (DW_OP_reg0 + cfa->reg, 0, 0);
3421         else
3422           head = new_loc_descr (DW_OP_regx, cfa->reg, 0);
3423       else if (cfa->reg <= 31)
3424         head = new_loc_descr (DW_OP_breg0 + cfa->reg, cfa->offset, 0);
3425       else
3426         head = new_loc_descr (DW_OP_bregx, cfa->reg, cfa->offset);
3427     }
3428
3429   return head;
3430 }
3431
3432 /* This function fills in aa dw_cfa_location structure from a dwarf location
3433    descriptor sequence.  */
3434
3435 static void
3436 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
3437 {
3438   struct dw_loc_descr_struct *ptr;
3439   cfa->offset = 0;
3440   cfa->base_offset = 0;
3441   cfa->indirect = 0;
3442   cfa->reg = -1;
3443
3444   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
3445     {
3446       enum dwarf_location_atom op = ptr->dw_loc_opc;
3447
3448       switch (op)
3449         {
3450         case DW_OP_reg0:
3451         case DW_OP_reg1:
3452         case DW_OP_reg2:
3453         case DW_OP_reg3:
3454         case DW_OP_reg4:
3455         case DW_OP_reg5:
3456         case DW_OP_reg6:
3457         case DW_OP_reg7:
3458         case DW_OP_reg8:
3459         case DW_OP_reg9:
3460         case DW_OP_reg10:
3461         case DW_OP_reg11:
3462         case DW_OP_reg12:
3463         case DW_OP_reg13:
3464         case DW_OP_reg14:
3465         case DW_OP_reg15:
3466         case DW_OP_reg16:
3467         case DW_OP_reg17:
3468         case DW_OP_reg18:
3469         case DW_OP_reg19:
3470         case DW_OP_reg20:
3471         case DW_OP_reg21:
3472         case DW_OP_reg22:
3473         case DW_OP_reg23:
3474         case DW_OP_reg24:
3475         case DW_OP_reg25:
3476         case DW_OP_reg26:
3477         case DW_OP_reg27:
3478         case DW_OP_reg28:
3479         case DW_OP_reg29:
3480         case DW_OP_reg30:
3481         case DW_OP_reg31:
3482           cfa->reg = op - DW_OP_reg0;
3483           break;
3484         case DW_OP_regx:
3485           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3486           break;
3487         case DW_OP_breg0:
3488         case DW_OP_breg1:
3489         case DW_OP_breg2:
3490         case DW_OP_breg3:
3491         case DW_OP_breg4:
3492         case DW_OP_breg5:
3493         case DW_OP_breg6:
3494         case DW_OP_breg7:
3495         case DW_OP_breg8:
3496         case DW_OP_breg9:
3497         case DW_OP_breg10:
3498         case DW_OP_breg11:
3499         case DW_OP_breg12:
3500         case DW_OP_breg13:
3501         case DW_OP_breg14:
3502         case DW_OP_breg15:
3503         case DW_OP_breg16:
3504         case DW_OP_breg17:
3505         case DW_OP_breg18:
3506         case DW_OP_breg19:
3507         case DW_OP_breg20:
3508         case DW_OP_breg21:
3509         case DW_OP_breg22:
3510         case DW_OP_breg23:
3511         case DW_OP_breg24:
3512         case DW_OP_breg25:
3513         case DW_OP_breg26:
3514         case DW_OP_breg27:
3515         case DW_OP_breg28:
3516         case DW_OP_breg29:
3517         case DW_OP_breg30:
3518         case DW_OP_breg31:
3519           cfa->reg = op - DW_OP_breg0;
3520           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
3521           break;
3522         case DW_OP_bregx:
3523           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
3524           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
3525           break;
3526         case DW_OP_deref:
3527           cfa->indirect = 1;
3528           break;
3529         case DW_OP_plus_uconst:
3530           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
3531           break;
3532         default:
3533           internal_error ("DW_LOC_OP %s not implemented",
3534                           dwarf_stack_op_name (ptr->dw_loc_opc));
3535         }
3536     }
3537 }
3538 #endif /* .debug_frame support */
3539 \f
3540 /* And now, the support for symbolic debugging information.  */
3541 #ifdef DWARF2_DEBUGGING_INFO
3542
3543 /* .debug_str support.  */
3544 static int output_indirect_string (void **, void *);
3545
3546 static void dwarf2out_init (const char *);
3547 static void dwarf2out_finish (const char *);
3548 static void dwarf2out_define (unsigned int, const char *);
3549 static void dwarf2out_undef (unsigned int, const char *);
3550 static void dwarf2out_start_source_file (unsigned, const char *);
3551 static void dwarf2out_end_source_file (unsigned);
3552 static void dwarf2out_begin_block (unsigned, unsigned);
3553 static void dwarf2out_end_block (unsigned, unsigned);
3554 static bool dwarf2out_ignore_block (tree);
3555 static void dwarf2out_global_decl (tree);
3556 static void dwarf2out_type_decl (tree, int);
3557 static void dwarf2out_imported_module_or_decl (tree, tree);
3558 static void dwarf2out_abstract_function (tree);
3559 static void dwarf2out_var_location (rtx);
3560 static void dwarf2out_begin_function (tree);
3561
3562 /* The debug hooks structure.  */
3563
3564 const struct gcc_debug_hooks dwarf2_debug_hooks =
3565 {
3566   dwarf2out_init,
3567   dwarf2out_finish,
3568   dwarf2out_define,
3569   dwarf2out_undef,
3570   dwarf2out_start_source_file,
3571   dwarf2out_end_source_file,
3572   dwarf2out_begin_block,
3573   dwarf2out_end_block,
3574   dwarf2out_ignore_block,
3575   dwarf2out_source_line,
3576   dwarf2out_begin_prologue,
3577   debug_nothing_int_charstar,   /* end_prologue */
3578   dwarf2out_end_epilogue,
3579   dwarf2out_begin_function,
3580   debug_nothing_int,            /* end_function */
3581   dwarf2out_decl,               /* function_decl */
3582   dwarf2out_global_decl,
3583   dwarf2out_type_decl,          /* type_decl */
3584   dwarf2out_imported_module_or_decl,
3585   debug_nothing_tree,           /* deferred_inline_function */
3586   /* The DWARF 2 backend tries to reduce debugging bloat by not
3587      emitting the abstract description of inline functions until
3588      something tries to reference them.  */
3589   dwarf2out_abstract_function,  /* outlining_inline_function */
3590   debug_nothing_rtx,            /* label */
3591   debug_nothing_int,            /* handle_pch */
3592   dwarf2out_var_location,
3593   dwarf2out_switch_text_section,
3594   1                             /* start_end_main_source_file */
3595 };
3596 #endif
3597 \f
3598 /* NOTE: In the comments in this file, many references are made to
3599    "Debugging Information Entries".  This term is abbreviated as `DIE'
3600    throughout the remainder of this file.  */
3601
3602 /* An internal representation of the DWARF output is built, and then
3603    walked to generate the DWARF debugging info.  The walk of the internal
3604    representation is done after the entire program has been compiled.
3605    The types below are used to describe the internal representation.  */
3606
3607 /* Various DIE's use offsets relative to the beginning of the
3608    .debug_info section to refer to each other.  */
3609
3610 typedef long int dw_offset;
3611
3612 /* Define typedefs here to avoid circular dependencies.  */
3613
3614 typedef struct dw_attr_struct *dw_attr_ref;
3615 typedef struct dw_line_info_struct *dw_line_info_ref;
3616 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
3617 typedef struct pubname_struct *pubname_ref;
3618 typedef struct dw_ranges_struct *dw_ranges_ref;
3619
3620 /* Each entry in the line_info_table maintains the file and
3621    line number associated with the label generated for that
3622    entry.  The label gives the PC value associated with
3623    the line number entry.  */
3624
3625 typedef struct dw_line_info_struct GTY(())
3626 {
3627   unsigned long dw_file_num;
3628   unsigned long dw_line_num;
3629 }
3630 dw_line_info_entry;
3631
3632 /* Line information for functions in separate sections; each one gets its
3633    own sequence.  */
3634 typedef struct dw_separate_line_info_struct GTY(())
3635 {
3636   unsigned long dw_file_num;
3637   unsigned long dw_line_num;
3638   unsigned long function;
3639 }
3640 dw_separate_line_info_entry;
3641
3642 /* Each DIE attribute has a field specifying the attribute kind,
3643    a link to the next attribute in the chain, and an attribute value.
3644    Attributes are typically linked below the DIE they modify.  */
3645
3646 typedef struct dw_attr_struct GTY(())
3647 {
3648   enum dwarf_attribute dw_attr;
3649   dw_attr_ref dw_attr_next;
3650   dw_val_node dw_attr_val;
3651 }
3652 dw_attr_node;
3653
3654 /* The Debugging Information Entry (DIE) structure */
3655
3656 typedef struct die_struct GTY(())
3657 {
3658   enum dwarf_tag die_tag;
3659   char *die_symbol;
3660   dw_attr_ref die_attr;
3661   dw_die_ref die_parent;
3662   dw_die_ref die_child;
3663   dw_die_ref die_sib;
3664   dw_die_ref die_definition; /* ref from a specification to its definition */
3665   dw_offset die_offset;
3666   unsigned long die_abbrev;
3667   int die_mark;
3668   unsigned int decl_id;
3669 }
3670 die_node;
3671
3672 /* The pubname structure */
3673
3674 typedef struct pubname_struct GTY(())
3675 {
3676   dw_die_ref die;
3677   char *name;
3678 }
3679 pubname_entry;
3680
3681 struct dw_ranges_struct GTY(())
3682 {
3683   int block_num;
3684 };
3685
3686 /* The limbo die list structure.  */
3687 typedef struct limbo_die_struct GTY(())
3688 {
3689   dw_die_ref die;
3690   tree created_for;
3691   struct limbo_die_struct *next;
3692 }
3693 limbo_die_node;
3694
3695 /* How to start an assembler comment.  */
3696 #ifndef ASM_COMMENT_START
3697 #define ASM_COMMENT_START ";#"
3698 #endif
3699
3700 /* Define a macro which returns nonzero for a TYPE_DECL which was
3701    implicitly generated for a tagged type.
3702
3703    Note that unlike the gcc front end (which generates a NULL named
3704    TYPE_DECL node for each complete tagged type, each array type, and
3705    each function type node created) the g++ front end generates a
3706    _named_ TYPE_DECL node for each tagged type node created.
3707    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
3708    generate a DW_TAG_typedef DIE for them.  */
3709
3710 #define TYPE_DECL_IS_STUB(decl)                         \
3711   (DECL_NAME (decl) == NULL_TREE                        \
3712    || (DECL_ARTIFICIAL (decl)                           \
3713        && is_tagged_type (TREE_TYPE (decl))             \
3714        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
3715            /* This is necessary for stub decls that     \
3716               appear in nested inline functions.  */    \
3717            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
3718                && (decl_ultimate_origin (decl)          \
3719                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
3720
3721 /* Information concerning the compilation unit's programming
3722    language, and compiler version.  */
3723
3724 /* Fixed size portion of the DWARF compilation unit header.  */
3725 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
3726   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
3727
3728 /* Fixed size portion of public names info.  */
3729 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
3730
3731 /* Fixed size portion of the address range info.  */
3732 #define DWARF_ARANGES_HEADER_SIZE                                       \
3733   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
3734                 DWARF2_ADDR_SIZE * 2)                                   \
3735    - DWARF_INITIAL_LENGTH_SIZE)
3736
3737 /* Size of padding portion in the address range info.  It must be
3738    aligned to twice the pointer size.  */
3739 #define DWARF_ARANGES_PAD_SIZE \
3740   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
3741                 DWARF2_ADDR_SIZE * 2) \
3742    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
3743
3744 /* Use assembler line directives if available.  */
3745 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
3746 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
3747 #define DWARF2_ASM_LINE_DEBUG_INFO 1
3748 #else
3749 #define DWARF2_ASM_LINE_DEBUG_INFO 0
3750 #endif
3751 #endif
3752
3753 /* Minimum line offset in a special line info. opcode.
3754    This value was chosen to give a reasonable range of values.  */
3755 #define DWARF_LINE_BASE  -10
3756
3757 /* First special line opcode - leave room for the standard opcodes.  */
3758 #define DWARF_LINE_OPCODE_BASE  10
3759
3760 /* Range of line offsets in a special line info. opcode.  */
3761 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
3762
3763 /* Flag that indicates the initial value of the is_stmt_start flag.
3764    In the present implementation, we do not mark any lines as
3765    the beginning of a source statement, because that information
3766    is not made available by the GCC front-end.  */
3767 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
3768
3769 #ifdef DWARF2_DEBUGGING_INFO
3770 /* This location is used by calc_die_sizes() to keep track
3771    the offset of each DIE within the .debug_info section.  */
3772 static unsigned long next_die_offset;
3773 #endif
3774
3775 /* Record the root of the DIE's built for the current compilation unit.  */
3776 static GTY(()) dw_die_ref comp_unit_die;
3777
3778 /* A list of DIEs with a NULL parent waiting to be relocated.  */
3779 static GTY(()) limbo_die_node *limbo_die_list;
3780
3781 /* Filenames referenced by this compilation unit.  */
3782 static GTY(()) varray_type file_table;
3783 static GTY(()) varray_type file_table_emitted;
3784 static GTY(()) size_t file_table_last_lookup_index;
3785
3786 /* A hash table of references to DIE's that describe declarations.
3787    The key is a DECL_UID() which is a unique number identifying each decl.  */
3788 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
3789
3790 /* Node of the variable location list.  */
3791 struct var_loc_node GTY ((chain_next ("%h.next")))
3792 {
3793   rtx GTY (()) var_loc_note;
3794   const char * GTY (()) label;
3795   const char * GTY (()) section_label;
3796   struct var_loc_node * GTY (()) next;
3797 };
3798
3799 /* Variable location list.  */
3800 struct var_loc_list_def GTY (())
3801 {
3802   struct var_loc_node * GTY (()) first;
3803
3804   /* Do not mark the last element of the chained list because
3805      it is marked through the chain.  */
3806   struct var_loc_node * GTY ((skip ("%h"))) last;
3807
3808   /* DECL_UID of the variable decl.  */
3809   unsigned int decl_id;
3810 };
3811 typedef struct var_loc_list_def var_loc_list;
3812
3813
3814 /* Table of decl location linked lists.  */
3815 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
3816
3817 /* A pointer to the base of a list of references to DIE's that
3818    are uniquely identified by their tag, presence/absence of
3819    children DIE's, and list of attribute/value pairs.  */
3820 static GTY((length ("abbrev_die_table_allocated")))
3821   dw_die_ref *abbrev_die_table;
3822
3823 /* Number of elements currently allocated for abbrev_die_table.  */
3824 static GTY(()) unsigned abbrev_die_table_allocated;
3825
3826 /* Number of elements in type_die_table currently in use.  */
3827 static GTY(()) unsigned abbrev_die_table_in_use;
3828
3829 /* Size (in elements) of increments by which we may expand the
3830    abbrev_die_table.  */
3831 #define ABBREV_DIE_TABLE_INCREMENT 256
3832
3833 /* A pointer to the base of a table that contains line information
3834    for each source code line in .text in the compilation unit.  */
3835 static GTY((length ("line_info_table_allocated")))
3836      dw_line_info_ref line_info_table;
3837
3838 /* Number of elements currently allocated for line_info_table.  */
3839 static GTY(()) unsigned line_info_table_allocated;
3840
3841 /* Number of elements in line_info_table currently in use.  */
3842 static GTY(()) unsigned line_info_table_in_use;
3843
3844 /* True if the compilation unit contains more than one .text section.  */
3845 static GTY(()) bool have_switched_text_section = false;
3846
3847 /* A pointer to the base of a table that contains line information
3848    for each source code line outside of .text in the compilation unit.  */
3849 static GTY ((length ("separate_line_info_table_allocated")))
3850      dw_separate_line_info_ref separate_line_info_table;
3851
3852 /* Number of elements currently allocated for separate_line_info_table.  */
3853 static GTY(()) unsigned separate_line_info_table_allocated;
3854
3855 /* Number of elements in separate_line_info_table currently in use.  */
3856 static GTY(()) unsigned separate_line_info_table_in_use;
3857
3858 /* Size (in elements) of increments by which we may expand the
3859    line_info_table.  */
3860 #define LINE_INFO_TABLE_INCREMENT 1024
3861
3862 /* A pointer to the base of a table that contains a list of publicly
3863    accessible names.  */
3864 static GTY ((length ("pubname_table_allocated"))) pubname_ref pubname_table;
3865
3866 /* Number of elements currently allocated for pubname_table.  */
3867 static GTY(()) unsigned pubname_table_allocated;
3868
3869 /* Number of elements in pubname_table currently in use.  */
3870 static GTY(()) unsigned pubname_table_in_use;
3871
3872 /* Size (in elements) of increments by which we may expand the
3873    pubname_table.  */
3874 #define PUBNAME_TABLE_INCREMENT 64
3875
3876 /* Array of dies for which we should generate .debug_arange info.  */
3877 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
3878
3879 /* Number of elements currently allocated for arange_table.  */
3880 static GTY(()) unsigned arange_table_allocated;
3881
3882 /* Number of elements in arange_table currently in use.  */
3883 static GTY(()) unsigned arange_table_in_use;
3884
3885 /* Size (in elements) of increments by which we may expand the
3886    arange_table.  */
3887 #define ARANGE_TABLE_INCREMENT 64
3888
3889 /* Array of dies for which we should generate .debug_ranges info.  */
3890 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
3891
3892 /* Number of elements currently allocated for ranges_table.  */
3893 static GTY(()) unsigned ranges_table_allocated;
3894
3895 /* Number of elements in ranges_table currently in use.  */
3896 static GTY(()) unsigned ranges_table_in_use;
3897
3898 /* Size (in elements) of increments by which we may expand the
3899    ranges_table.  */
3900 #define RANGES_TABLE_INCREMENT 64
3901
3902 /* Whether we have location lists that need outputting */
3903 static GTY(()) unsigned have_location_lists;
3904
3905 /* Unique label counter.  */
3906 static GTY(()) unsigned int loclabel_num;
3907
3908 #ifdef DWARF2_DEBUGGING_INFO
3909 /* Record whether the function being analyzed contains inlined functions.  */
3910 static int current_function_has_inlines;
3911 #endif
3912 #if 0 && defined (MIPS_DEBUGGING_INFO)
3913 static int comp_unit_has_inlines;
3914 #endif
3915
3916 /* Number of file tables emitted in maybe_emit_file().  */
3917 static GTY(()) int emitcount = 0;
3918
3919 /* Number of internal labels generated by gen_internal_sym().  */
3920 static GTY(()) int label_num;
3921
3922 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
3923 void
3924 dwarf2out_switch_text_section (void)
3925 {
3926   dw_fde_ref fde;
3927
3928   gcc_assert (cfun);
3929
3930   fde = &fde_table[fde_table_in_use - 1];
3931   fde->dw_fde_switched_sections = true;
3932   fde->dw_fde_hot_section_label = cfun->hot_section_label;
3933   fde->dw_fde_hot_section_end_label = cfun->hot_section_end_label;
3934   fde->dw_fde_unlikely_section_label = cfun->cold_section_label;
3935   fde->dw_fde_unlikely_section_end_label = cfun->cold_section_end_label;
3936   have_switched_text_section = true;
3937 }
3938
3939 #endif
3940
3941 #ifdef DWARF2_DEBUGGING_INFO
3942
3943 /* Offset from the "steady-state frame pointer" to the CFA,
3944    within the current function.  */
3945 static HOST_WIDE_INT frame_pointer_cfa_offset;
3946
3947 /* Forward declarations for functions defined in this file.  */
3948
3949 static int is_pseudo_reg (rtx);
3950 static tree type_main_variant (tree);
3951 static int is_tagged_type (tree);
3952 static const char *dwarf_tag_name (unsigned);
3953 static const char *dwarf_attr_name (unsigned);
3954 static const char *dwarf_form_name (unsigned);
3955 static tree decl_ultimate_origin (tree);
3956 static tree block_ultimate_origin (tree);
3957 static tree decl_class_context (tree);
3958 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
3959 static inline enum dw_val_class AT_class (dw_attr_ref);
3960 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
3961 static inline unsigned AT_flag (dw_attr_ref);
3962 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
3963 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
3964 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
3965 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
3966 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
3967                               unsigned long);
3968 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
3969                                unsigned int, unsigned char *);
3970 static hashval_t debug_str_do_hash (const void *);
3971 static int debug_str_eq (const void *, const void *);
3972 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
3973 static inline const char *AT_string (dw_attr_ref);
3974 static int AT_string_form (dw_attr_ref);
3975 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
3976 static void add_AT_specification (dw_die_ref, dw_die_ref);
3977 static inline dw_die_ref AT_ref (dw_attr_ref);
3978 static inline int AT_ref_external (dw_attr_ref);
3979 static inline void set_AT_ref_external (dw_attr_ref, int);
3980 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
3981 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
3982 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
3983 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
3984                              dw_loc_list_ref);
3985 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
3986 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
3987 static inline rtx AT_addr (dw_attr_ref);
3988 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
3989 static void add_AT_lbl_offset (dw_die_ref, enum dwarf_attribute, const char *);
3990 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
3991                            unsigned HOST_WIDE_INT);
3992 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
3993                                unsigned long);
3994 static inline const char *AT_lbl (dw_attr_ref);
3995 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
3996 static const char *get_AT_low_pc (dw_die_ref);
3997 static const char *get_AT_hi_pc (dw_die_ref);
3998 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
3999 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
4000 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
4001 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
4002 static bool is_c_family (void);
4003 static bool is_cxx (void);
4004 static bool is_java (void);
4005 static bool is_fortran (void);
4006 static bool is_ada (void);
4007 static void remove_AT (dw_die_ref, enum dwarf_attribute);
4008 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
4009 static inline void free_die (dw_die_ref);
4010 static void remove_children (dw_die_ref);
4011 static void add_child_die (dw_die_ref, dw_die_ref);
4012 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
4013 static dw_die_ref lookup_type_die (tree);
4014 static void equate_type_number_to_die (tree, dw_die_ref);
4015 static hashval_t decl_die_table_hash (const void *);
4016 static int decl_die_table_eq (const void *, const void *);
4017 static dw_die_ref lookup_decl_die (tree);
4018 static hashval_t decl_loc_table_hash (const void *);
4019 static int decl_loc_table_eq (const void *, const void *);
4020 static var_loc_list *lookup_decl_loc (tree);
4021 static void equate_decl_number_to_die (tree, dw_die_ref);
4022 static void add_var_loc_to_decl (tree, struct var_loc_node *);
4023 static void print_spaces (FILE *);
4024 static void print_die (dw_die_ref, FILE *);
4025 static void print_dwarf_line_table (FILE *);
4026 static void reverse_die_lists (dw_die_ref);
4027 static void reverse_all_dies (dw_die_ref);
4028 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
4029 static dw_die_ref pop_compile_unit (dw_die_ref);
4030 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
4031 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
4032 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
4033 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
4034 static int same_dw_val_p (dw_val_node *, dw_val_node *, int *);
4035 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
4036 static int same_die_p (dw_die_ref, dw_die_ref, int *);
4037 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
4038 static void compute_section_prefix (dw_die_ref);
4039 static int is_type_die (dw_die_ref);
4040 static int is_comdat_die (dw_die_ref);
4041 static int is_symbol_die (dw_die_ref);
4042 static void assign_symbol_names (dw_die_ref);
4043 static void break_out_includes (dw_die_ref);
4044 static hashval_t htab_cu_hash (const void *);
4045 static int htab_cu_eq (const void *, const void *);
4046 static void htab_cu_del (void *);
4047 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
4048 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
4049 static void add_sibling_attributes (dw_die_ref);
4050 static void build_abbrev_table (dw_die_ref);
4051 static void output_location_lists (dw_die_ref);
4052 static int constant_size (long unsigned);
4053 static unsigned long size_of_die (dw_die_ref);
4054 static void calc_die_sizes (dw_die_ref);
4055 static void mark_dies (dw_die_ref);
4056 static void unmark_dies (dw_die_ref);
4057 static void unmark_all_dies (dw_die_ref);
4058 static unsigned long size_of_pubnames (void);
4059 static unsigned long size_of_aranges (void);
4060 static enum dwarf_form value_format (dw_attr_ref);
4061 static void output_value_format (dw_attr_ref);
4062 static void output_abbrev_section (void);
4063 static void output_die_symbol (dw_die_ref);
4064 static void output_die (dw_die_ref);
4065 static void output_compilation_unit_header (void);
4066 static void output_comp_unit (dw_die_ref, int);
4067 static const char *dwarf2_name (tree, int);
4068 static void add_pubname (tree, dw_die_ref);
4069 static void output_pubnames (void);
4070 static void add_arange (tree, dw_die_ref);
4071 static void output_aranges (void);
4072 static unsigned int add_ranges (tree);
4073 static void output_ranges (void);
4074 static void output_line_info (void);
4075 static void output_file_names (void);
4076 static dw_die_ref base_type_die (tree);
4077 static tree root_type (tree);
4078 static int is_base_type (tree);
4079 static bool is_subrange_type (tree);
4080 static dw_die_ref subrange_type_die (tree, dw_die_ref);
4081 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
4082 static int type_is_enum (tree);
4083 static unsigned int dbx_reg_number (rtx);
4084 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
4085 static dw_loc_descr_ref reg_loc_descriptor (rtx);
4086 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int);
4087 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx);
4088 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4089 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT);
4090 static int is_based_loc (rtx);
4091 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode);
4092 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx);
4093 static dw_loc_descr_ref loc_descriptor (rtx);
4094 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
4095 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
4096 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
4097 static tree field_type (tree);
4098 static unsigned int simple_type_align_in_bits (tree);
4099 static unsigned int simple_decl_align_in_bits (tree);
4100 static unsigned HOST_WIDE_INT simple_type_size_in_bits (tree);
4101 static HOST_WIDE_INT field_byte_offset (tree);
4102 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
4103                                          dw_loc_descr_ref);
4104 static void add_data_member_location_attribute (dw_die_ref, tree);
4105 static void add_const_value_attribute (dw_die_ref, rtx);
4106 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
4107 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4108 static void insert_float (rtx, unsigned char *);
4109 static rtx rtl_for_decl_location (tree);
4110 static void add_location_or_const_value_attribute (dw_die_ref, tree,
4111                                                    enum dwarf_attribute);
4112 static void tree_add_const_value_attribute (dw_die_ref, tree);
4113 static void add_name_attribute (dw_die_ref, const char *);
4114 static void add_comp_dir_attribute (dw_die_ref);
4115 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
4116 static void add_subscript_info (dw_die_ref, tree);
4117 static void add_byte_size_attribute (dw_die_ref, tree);
4118 static void add_bit_offset_attribute (dw_die_ref, tree);
4119 static void add_bit_size_attribute (dw_die_ref, tree);
4120 static void add_prototyped_attribute (dw_die_ref, tree);
4121 static void add_abstract_origin_attribute (dw_die_ref, tree);
4122 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
4123 static void add_src_coords_attributes (dw_die_ref, tree);
4124 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
4125 static void push_decl_scope (tree);
4126 static void pop_decl_scope (void);
4127 static dw_die_ref scope_die_for (tree, dw_die_ref);
4128 static inline int local_scope_p (dw_die_ref);
4129 static inline int class_or_namespace_scope_p (dw_die_ref);
4130 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
4131 static void add_calling_convention_attribute (dw_die_ref, tree);
4132 static const char *type_tag (tree);
4133 static tree member_declared_type (tree);
4134 #if 0
4135 static const char *decl_start_label (tree);
4136 #endif
4137 static void gen_array_type_die (tree, dw_die_ref);
4138 #if 0
4139 static void gen_entry_point_die (tree, dw_die_ref);
4140 #endif
4141 static void gen_inlined_enumeration_type_die (tree, dw_die_ref);
4142 static void gen_inlined_structure_type_die (tree, dw_die_ref);
4143 static void gen_inlined_union_type_die (tree, dw_die_ref);
4144 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
4145 static dw_die_ref gen_formal_parameter_die (tree, dw_die_ref);
4146 static void gen_unspecified_parameters_die (tree, dw_die_ref);
4147 static void gen_formal_types_die (tree, dw_die_ref);
4148 static void gen_subprogram_die (tree, dw_die_ref);
4149 static void gen_variable_die (tree, dw_die_ref);
4150 static void gen_label_die (tree, dw_die_ref);
4151 static void gen_lexical_block_die (tree, dw_die_ref, int);
4152 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
4153 static void gen_field_die (tree, dw_die_ref);
4154 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
4155 static dw_die_ref gen_compile_unit_die (const char *);
4156 static void gen_string_type_die (tree, dw_die_ref);
4157 static void gen_inheritance_die (tree, tree, dw_die_ref);
4158 static void gen_member_die (tree, dw_die_ref);
4159 static void gen_struct_or_union_type_die (tree, dw_die_ref);
4160 static void gen_subroutine_type_die (tree, dw_die_ref);
4161 static void gen_typedef_die (tree, dw_die_ref);
4162 static void gen_type_die (tree, dw_die_ref);
4163 static void gen_tagged_type_instantiation_die (tree, dw_die_ref);
4164 static void gen_block_die (tree, dw_die_ref, int);
4165 static void decls_for_scope (tree, dw_die_ref, int);
4166 static int is_redundant_typedef (tree);
4167 static void gen_namespace_die (tree);
4168 static void gen_decl_die (tree, dw_die_ref);
4169 static dw_die_ref force_decl_die (tree);
4170 static dw_die_ref force_type_die (tree);
4171 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
4172 static void declare_in_namespace (tree, dw_die_ref);
4173 static unsigned lookup_filename (const char *);
4174 static void init_file_table (void);
4175 static void retry_incomplete_types (void);
4176 static void gen_type_die_for_member (tree, tree, dw_die_ref);
4177 static void splice_child_die (dw_die_ref, dw_die_ref);
4178 static int file_info_cmp (const void *, const void *);
4179 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
4180                                      const char *, const char *, unsigned);
4181 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
4182                                        const char *, const char *,
4183                                        const char *);
4184 static void output_loc_list (dw_loc_list_ref);
4185 static char *gen_internal_sym (const char *);
4186
4187 static void prune_unmark_dies (dw_die_ref);
4188 static void prune_unused_types_mark (dw_die_ref, int);
4189 static void prune_unused_types_walk (dw_die_ref);
4190 static void prune_unused_types_walk_attribs (dw_die_ref);
4191 static void prune_unused_types_prune (dw_die_ref);
4192 static void prune_unused_types (void);
4193 static int maybe_emit_file (int);
4194
4195 /* Section names used to hold DWARF debugging information.  */
4196 #ifndef DEBUG_INFO_SECTION
4197 #define DEBUG_INFO_SECTION      ".debug_info"
4198 #endif
4199 #ifndef DEBUG_ABBREV_SECTION
4200 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
4201 #endif
4202 #ifndef DEBUG_ARANGES_SECTION
4203 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
4204 #endif
4205 #ifndef DEBUG_MACINFO_SECTION
4206 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
4207 #endif
4208 #ifndef DEBUG_LINE_SECTION
4209 #define DEBUG_LINE_SECTION      ".debug_line"
4210 #endif
4211 #ifndef DEBUG_LOC_SECTION
4212 #define DEBUG_LOC_SECTION       ".debug_loc"
4213 #endif
4214 #ifndef DEBUG_PUBNAMES_SECTION
4215 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
4216 #endif
4217 #ifndef DEBUG_STR_SECTION
4218 #define DEBUG_STR_SECTION       ".debug_str"
4219 #endif
4220 #ifndef DEBUG_RANGES_SECTION
4221 #define DEBUG_RANGES_SECTION    ".debug_ranges"
4222 #endif
4223
4224 /* Standard ELF section names for compiled code and data.  */
4225 #ifndef TEXT_SECTION_NAME
4226 #define TEXT_SECTION_NAME       ".text"
4227 #endif
4228
4229 /* Section flags for .debug_str section.  */
4230 #define DEBUG_STR_SECTION_FLAGS \
4231   (HAVE_GAS_SHF_MERGE && flag_merge_constants                   \
4232    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
4233    : SECTION_DEBUG)
4234
4235 /* Labels we insert at beginning sections we can reference instead of
4236    the section names themselves.  */
4237
4238 #ifndef TEXT_SECTION_LABEL
4239 #define TEXT_SECTION_LABEL              "Ltext"
4240 #endif
4241 #ifndef COLD_TEXT_SECTION_LABEL
4242 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
4243 #endif
4244 #ifndef DEBUG_LINE_SECTION_LABEL
4245 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
4246 #endif
4247 #ifndef DEBUG_INFO_SECTION_LABEL
4248 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
4249 #endif
4250 #ifndef DEBUG_ABBREV_SECTION_LABEL
4251 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
4252 #endif
4253 #ifndef DEBUG_LOC_SECTION_LABEL
4254 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
4255 #endif
4256 #ifndef DEBUG_RANGES_SECTION_LABEL
4257 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
4258 #endif
4259 #ifndef DEBUG_MACINFO_SECTION_LABEL
4260 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
4261 #endif
4262
4263 /* Definitions of defaults for formats and names of various special
4264    (artificial) labels which may be generated within this file (when the -g
4265    options is used and DWARF2_DEBUGGING_INFO is in effect.
4266    If necessary, these may be overridden from within the tm.h file, but
4267    typically, overriding these defaults is unnecessary.  */
4268
4269 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
4270 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4271 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4272 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES]; 
4273 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4274 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4275 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4276 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4277 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
4278 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
4279
4280 #ifndef TEXT_END_LABEL
4281 #define TEXT_END_LABEL          "Letext"
4282 #endif
4283 #ifndef COLD_END_LABEL
4284 #define COLD_END_LABEL          "Letext_cold"
4285 #endif
4286 #ifndef BLOCK_BEGIN_LABEL
4287 #define BLOCK_BEGIN_LABEL       "LBB"
4288 #endif
4289 #ifndef BLOCK_END_LABEL
4290 #define BLOCK_END_LABEL         "LBE"
4291 #endif
4292 #ifndef LINE_CODE_LABEL
4293 #define LINE_CODE_LABEL         "LM"
4294 #endif
4295 #ifndef SEPARATE_LINE_CODE_LABEL
4296 #define SEPARATE_LINE_CODE_LABEL        "LSM"
4297 #endif
4298 \f
4299 /* We allow a language front-end to designate a function that is to be
4300    called to "demangle" any name before it is put into a DIE.  */
4301
4302 static const char *(*demangle_name_func) (const char *);
4303
4304 void
4305 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
4306 {
4307   demangle_name_func = func;
4308 }
4309
4310 /* Test if rtl node points to a pseudo register.  */
4311
4312 static inline int
4313 is_pseudo_reg (rtx rtl)
4314 {
4315   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
4316           || (GET_CODE (rtl) == SUBREG
4317               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
4318 }
4319
4320 /* Return a reference to a type, with its const and volatile qualifiers
4321    removed.  */
4322
4323 static inline tree
4324 type_main_variant (tree type)
4325 {
4326   type = TYPE_MAIN_VARIANT (type);
4327
4328   /* ??? There really should be only one main variant among any group of
4329      variants of a given type (and all of the MAIN_VARIANT values for all
4330      members of the group should point to that one type) but sometimes the C
4331      front-end messes this up for array types, so we work around that bug
4332      here.  */
4333   if (TREE_CODE (type) == ARRAY_TYPE)
4334     while (type != TYPE_MAIN_VARIANT (type))
4335       type = TYPE_MAIN_VARIANT (type);
4336
4337   return type;
4338 }
4339
4340 /* Return nonzero if the given type node represents a tagged type.  */
4341
4342 static inline int
4343 is_tagged_type (tree type)
4344 {
4345   enum tree_code code = TREE_CODE (type);
4346
4347   return (code == RECORD_TYPE || code == UNION_TYPE
4348           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
4349 }
4350
4351 /* Convert a DIE tag into its string name.  */
4352
4353 static const char *
4354 dwarf_tag_name (unsigned int tag)
4355 {
4356   switch (tag)
4357     {
4358     case DW_TAG_padding:
4359       return "DW_TAG_padding";
4360     case DW_TAG_array_type:
4361       return "DW_TAG_array_type";
4362     case DW_TAG_class_type:
4363       return "DW_TAG_class_type";
4364     case DW_TAG_entry_point:
4365       return "DW_TAG_entry_point";
4366     case DW_TAG_enumeration_type:
4367       return "DW_TAG_enumeration_type";
4368     case DW_TAG_formal_parameter:
4369       return "DW_TAG_formal_parameter";
4370     case DW_TAG_imported_declaration:
4371       return "DW_TAG_imported_declaration";
4372     case DW_TAG_label:
4373       return "DW_TAG_label";
4374     case DW_TAG_lexical_block:
4375       return "DW_TAG_lexical_block";
4376     case DW_TAG_member:
4377       return "DW_TAG_member";
4378     case DW_TAG_pointer_type:
4379       return "DW_TAG_pointer_type";
4380     case DW_TAG_reference_type:
4381       return "DW_TAG_reference_type";
4382     case DW_TAG_compile_unit:
4383       return "DW_TAG_compile_unit";
4384     case DW_TAG_string_type:
4385       return "DW_TAG_string_type";
4386     case DW_TAG_structure_type:
4387       return "DW_TAG_structure_type";
4388     case DW_TAG_subroutine_type:
4389       return "DW_TAG_subroutine_type";
4390     case DW_TAG_typedef:
4391       return "DW_TAG_typedef";
4392     case DW_TAG_union_type:
4393       return "DW_TAG_union_type";
4394     case DW_TAG_unspecified_parameters:
4395       return "DW_TAG_unspecified_parameters";
4396     case DW_TAG_variant:
4397       return "DW_TAG_variant";
4398     case DW_TAG_common_block:
4399       return "DW_TAG_common_block";
4400     case DW_TAG_common_inclusion:
4401       return "DW_TAG_common_inclusion";
4402     case DW_TAG_inheritance:
4403       return "DW_TAG_inheritance";
4404     case DW_TAG_inlined_subroutine:
4405       return "DW_TAG_inlined_subroutine";
4406     case DW_TAG_module:
4407       return "DW_TAG_module";
4408     case DW_TAG_ptr_to_member_type:
4409       return "DW_TAG_ptr_to_member_type";
4410     case DW_TAG_set_type:
4411       return "DW_TAG_set_type";
4412     case DW_TAG_subrange_type:
4413       return "DW_TAG_subrange_type";
4414     case DW_TAG_with_stmt:
4415       return "DW_TAG_with_stmt";
4416     case DW_TAG_access_declaration:
4417       return "DW_TAG_access_declaration";
4418     case DW_TAG_base_type:
4419       return "DW_TAG_base_type";
4420     case DW_TAG_catch_block:
4421       return "DW_TAG_catch_block";
4422     case DW_TAG_const_type:
4423       return "DW_TAG_const_type";
4424     case DW_TAG_constant:
4425       return "DW_TAG_constant";
4426     case DW_TAG_enumerator:
4427       return "DW_TAG_enumerator";
4428     case DW_TAG_file_type:
4429       return "DW_TAG_file_type";
4430     case DW_TAG_friend:
4431       return "DW_TAG_friend";
4432     case DW_TAG_namelist:
4433       return "DW_TAG_namelist";
4434     case DW_TAG_namelist_item:
4435       return "DW_TAG_namelist_item";
4436     case DW_TAG_namespace:
4437       return "DW_TAG_namespace";
4438     case DW_TAG_packed_type:
4439       return "DW_TAG_packed_type";
4440     case DW_TAG_subprogram:
4441       return "DW_TAG_subprogram";
4442     case DW_TAG_template_type_param:
4443       return "DW_TAG_template_type_param";
4444     case DW_TAG_template_value_param:
4445       return "DW_TAG_template_value_param";
4446     case DW_TAG_thrown_type:
4447       return "DW_TAG_thrown_type";
4448     case DW_TAG_try_block:
4449       return "DW_TAG_try_block";
4450     case DW_TAG_variant_part:
4451       return "DW_TAG_variant_part";
4452     case DW_TAG_variable:
4453       return "DW_TAG_variable";
4454     case DW_TAG_volatile_type:
4455       return "DW_TAG_volatile_type";
4456     case DW_TAG_imported_module:
4457       return "DW_TAG_imported_module";
4458     case DW_TAG_MIPS_loop:
4459       return "DW_TAG_MIPS_loop";
4460     case DW_TAG_format_label:
4461       return "DW_TAG_format_label";
4462     case DW_TAG_function_template:
4463       return "DW_TAG_function_template";
4464     case DW_TAG_class_template:
4465       return "DW_TAG_class_template";
4466     case DW_TAG_GNU_BINCL:
4467       return "DW_TAG_GNU_BINCL";
4468     case DW_TAG_GNU_EINCL:
4469       return "DW_TAG_GNU_EINCL";
4470     default:
4471       return "DW_TAG_<unknown>";
4472     }
4473 }
4474
4475 /* Convert a DWARF attribute code into its string name.  */
4476
4477 static const char *
4478 dwarf_attr_name (unsigned int attr)
4479 {
4480   switch (attr)
4481     {
4482     case DW_AT_sibling:
4483       return "DW_AT_sibling";
4484     case DW_AT_location:
4485       return "DW_AT_location";
4486     case DW_AT_name:
4487       return "DW_AT_name";
4488     case DW_AT_ordering:
4489       return "DW_AT_ordering";
4490     case DW_AT_subscr_data:
4491       return "DW_AT_subscr_data";
4492     case DW_AT_byte_size:
4493       return "DW_AT_byte_size";
4494     case DW_AT_bit_offset:
4495       return "DW_AT_bit_offset";
4496     case DW_AT_bit_size:
4497       return "DW_AT_bit_size";
4498     case DW_AT_element_list:
4499       return "DW_AT_element_list";
4500     case DW_AT_stmt_list:
4501       return "DW_AT_stmt_list";
4502     case DW_AT_low_pc:
4503       return "DW_AT_low_pc";
4504     case DW_AT_high_pc:
4505       return "DW_AT_high_pc";
4506     case DW_AT_language:
4507       return "DW_AT_language";
4508     case DW_AT_member:
4509       return "DW_AT_member";
4510     case DW_AT_discr:
4511       return "DW_AT_discr";
4512     case DW_AT_discr_value:
4513       return "DW_AT_discr_value";
4514     case DW_AT_visibility:
4515       return "DW_AT_visibility";
4516     case DW_AT_import:
4517       return "DW_AT_import";
4518     case DW_AT_string_length:
4519       return "DW_AT_string_length";
4520     case DW_AT_common_reference:
4521       return "DW_AT_common_reference";
4522     case DW_AT_comp_dir:
4523       return "DW_AT_comp_dir";
4524     case DW_AT_const_value:
4525       return "DW_AT_const_value";
4526     case DW_AT_containing_type:
4527       return "DW_AT_containing_type";
4528     case DW_AT_default_value:
4529       return "DW_AT_default_value";
4530     case DW_AT_inline:
4531       return "DW_AT_inline";
4532     case DW_AT_is_optional:
4533       return "DW_AT_is_optional";
4534     case DW_AT_lower_bound:
4535       return "DW_AT_lower_bound";
4536     case DW_AT_producer:
4537       return "DW_AT_producer";
4538     case DW_AT_prototyped:
4539       return "DW_AT_prototyped";
4540     case DW_AT_return_addr:
4541       return "DW_AT_return_addr";
4542     case DW_AT_start_scope:
4543       return "DW_AT_start_scope";
4544     case DW_AT_stride_size:
4545       return "DW_AT_stride_size";
4546     case DW_AT_upper_bound:
4547       return "DW_AT_upper_bound";
4548     case DW_AT_abstract_origin:
4549       return "DW_AT_abstract_origin";
4550     case DW_AT_accessibility:
4551       return "DW_AT_accessibility";
4552     case DW_AT_address_class:
4553       return "DW_AT_address_class";
4554     case DW_AT_artificial:
4555       return "DW_AT_artificial";
4556     case DW_AT_base_types:
4557       return "DW_AT_base_types";
4558     case DW_AT_calling_convention:
4559       return "DW_AT_calling_convention";
4560     case DW_AT_count:
4561       return "DW_AT_count";
4562     case DW_AT_data_member_location:
4563       return "DW_AT_data_member_location";
4564     case DW_AT_decl_column:
4565       return "DW_AT_decl_column";
4566     case DW_AT_decl_file:
4567       return "DW_AT_decl_file";
4568     case DW_AT_decl_line:
4569       return "DW_AT_decl_line";
4570     case DW_AT_declaration:
4571       return "DW_AT_declaration";
4572     case DW_AT_discr_list:
4573       return "DW_AT_discr_list";
4574     case DW_AT_encoding:
4575       return "DW_AT_encoding";
4576     case DW_AT_external:
4577       return "DW_AT_external";
4578     case DW_AT_frame_base:
4579       return "DW_AT_frame_base";
4580     case DW_AT_friend:
4581       return "DW_AT_friend";
4582     case DW_AT_identifier_case:
4583       return "DW_AT_identifier_case";
4584     case DW_AT_macro_info:
4585       return "DW_AT_macro_info";
4586     case DW_AT_namelist_items:
4587       return "DW_AT_namelist_items";
4588     case DW_AT_priority:
4589       return "DW_AT_priority";
4590     case DW_AT_segment:
4591       return "DW_AT_segment";
4592     case DW_AT_specification:
4593       return "DW_AT_specification";
4594     case DW_AT_static_link:
4595       return "DW_AT_static_link";
4596     case DW_AT_type:
4597       return "DW_AT_type";
4598     case DW_AT_use_location:
4599       return "DW_AT_use_location";
4600     case DW_AT_variable_parameter:
4601       return "DW_AT_variable_parameter";
4602     case DW_AT_virtuality:
4603       return "DW_AT_virtuality";
4604     case DW_AT_vtable_elem_location:
4605       return "DW_AT_vtable_elem_location";
4606
4607     case DW_AT_allocated:
4608       return "DW_AT_allocated";
4609     case DW_AT_associated:
4610       return "DW_AT_associated";
4611     case DW_AT_data_location:
4612       return "DW_AT_data_location";
4613     case DW_AT_stride:
4614       return "DW_AT_stride";
4615     case DW_AT_entry_pc:
4616       return "DW_AT_entry_pc";
4617     case DW_AT_use_UTF8:
4618       return "DW_AT_use_UTF8";
4619     case DW_AT_extension:
4620       return "DW_AT_extension";
4621     case DW_AT_ranges:
4622       return "DW_AT_ranges";
4623     case DW_AT_trampoline:
4624       return "DW_AT_trampoline";
4625     case DW_AT_call_column:
4626       return "DW_AT_call_column";
4627     case DW_AT_call_file:
4628       return "DW_AT_call_file";
4629     case DW_AT_call_line:
4630       return "DW_AT_call_line";
4631
4632     case DW_AT_MIPS_fde:
4633       return "DW_AT_MIPS_fde";
4634     case DW_AT_MIPS_loop_begin:
4635       return "DW_AT_MIPS_loop_begin";
4636     case DW_AT_MIPS_tail_loop_begin:
4637       return "DW_AT_MIPS_tail_loop_begin";
4638     case DW_AT_MIPS_epilog_begin:
4639       return "DW_AT_MIPS_epilog_begin";
4640     case DW_AT_MIPS_loop_unroll_factor:
4641       return "DW_AT_MIPS_loop_unroll_factor";
4642     case DW_AT_MIPS_software_pipeline_depth:
4643       return "DW_AT_MIPS_software_pipeline_depth";
4644     case DW_AT_MIPS_linkage_name:
4645       return "DW_AT_MIPS_linkage_name";
4646     case DW_AT_MIPS_stride:
4647       return "DW_AT_MIPS_stride";
4648     case DW_AT_MIPS_abstract_name:
4649       return "DW_AT_MIPS_abstract_name";
4650     case DW_AT_MIPS_clone_origin:
4651       return "DW_AT_MIPS_clone_origin";
4652     case DW_AT_MIPS_has_inlines:
4653       return "DW_AT_MIPS_has_inlines";
4654
4655     case DW_AT_sf_names:
4656       return "DW_AT_sf_names";
4657     case DW_AT_src_info:
4658       return "DW_AT_src_info";
4659     case DW_AT_mac_info:
4660       return "DW_AT_mac_info";
4661     case DW_AT_src_coords:
4662       return "DW_AT_src_coords";
4663     case DW_AT_body_begin:
4664       return "DW_AT_body_begin";
4665     case DW_AT_body_end:
4666       return "DW_AT_body_end";
4667     case DW_AT_GNU_vector:
4668       return "DW_AT_GNU_vector";
4669
4670     case DW_AT_VMS_rtnbeg_pd_address:
4671       return "DW_AT_VMS_rtnbeg_pd_address";
4672
4673     default:
4674       return "DW_AT_<unknown>";
4675     }
4676 }
4677
4678 /* Convert a DWARF value form code into its string name.  */
4679
4680 static const char *
4681 dwarf_form_name (unsigned int form)
4682 {
4683   switch (form)
4684     {
4685     case DW_FORM_addr:
4686       return "DW_FORM_addr";
4687     case DW_FORM_block2:
4688       return "DW_FORM_block2";
4689     case DW_FORM_block4:
4690       return "DW_FORM_block4";
4691     case DW_FORM_data2:
4692       return "DW_FORM_data2";
4693     case DW_FORM_data4:
4694       return "DW_FORM_data4";
4695     case DW_FORM_data8:
4696       return "DW_FORM_data8";
4697     case DW_FORM_string:
4698       return "DW_FORM_string";
4699     case DW_FORM_block:
4700       return "DW_FORM_block";
4701     case DW_FORM_block1:
4702       return "DW_FORM_block1";
4703     case DW_FORM_data1:
4704       return "DW_FORM_data1";
4705     case DW_FORM_flag:
4706       return "DW_FORM_flag";
4707     case DW_FORM_sdata:
4708       return "DW_FORM_sdata";
4709     case DW_FORM_strp:
4710       return "DW_FORM_strp";
4711     case DW_FORM_udata:
4712       return "DW_FORM_udata";
4713     case DW_FORM_ref_addr:
4714       return "DW_FORM_ref_addr";
4715     case DW_FORM_ref1:
4716       return "DW_FORM_ref1";
4717     case DW_FORM_ref2:
4718       return "DW_FORM_ref2";
4719     case DW_FORM_ref4:
4720       return "DW_FORM_ref4";
4721     case DW_FORM_ref8:
4722       return "DW_FORM_ref8";
4723     case DW_FORM_ref_udata:
4724       return "DW_FORM_ref_udata";
4725     case DW_FORM_indirect:
4726       return "DW_FORM_indirect";
4727     default:
4728       return "DW_FORM_<unknown>";
4729     }
4730 }
4731 \f
4732 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
4733    instance of an inlined instance of a decl which is local to an inline
4734    function, so we have to trace all of the way back through the origin chain
4735    to find out what sort of node actually served as the original seed for the
4736    given block.  */
4737
4738 static tree
4739 decl_ultimate_origin (tree decl)
4740 {
4741   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
4742     return NULL_TREE;
4743
4744   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
4745      nodes in the function to point to themselves; ignore that if
4746      we're trying to output the abstract instance of this function.  */
4747   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
4748     return NULL_TREE;
4749
4750   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
4751      most distant ancestor, this should never happen.  */
4752   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
4753
4754   return DECL_ABSTRACT_ORIGIN (decl);
4755 }
4756
4757 /* Determine the "ultimate origin" of a block.  The block may be an inlined
4758    instance of an inlined instance of a block which is local to an inline
4759    function, so we have to trace all of the way back through the origin chain
4760    to find out what sort of node actually served as the original seed for the
4761    given block.  */
4762
4763 static tree
4764 block_ultimate_origin (tree block)
4765 {
4766   tree immediate_origin = BLOCK_ABSTRACT_ORIGIN (block);
4767
4768   /* output_inline_function sets BLOCK_ABSTRACT_ORIGIN for all the
4769      nodes in the function to point to themselves; ignore that if
4770      we're trying to output the abstract instance of this function.  */
4771   if (BLOCK_ABSTRACT (block) && immediate_origin == block)
4772     return NULL_TREE;
4773
4774   if (immediate_origin == NULL_TREE)
4775     return NULL_TREE;
4776   else
4777     {
4778       tree ret_val;
4779       tree lookahead = immediate_origin;
4780
4781       do
4782         {
4783           ret_val = lookahead;
4784           lookahead = (TREE_CODE (ret_val) == BLOCK
4785                        ? BLOCK_ABSTRACT_ORIGIN (ret_val) : NULL);
4786         }
4787       while (lookahead != NULL && lookahead != ret_val);
4788       
4789       /* The block's abstract origin chain may not be the *ultimate* origin of
4790          the block. It could lead to a DECL that has an abstract origin set.
4791          If so, we want that DECL's abstract origin (which is what DECL_ORIGIN
4792          will give us if it has one).  Note that DECL's abstract origins are
4793          supposed to be the most distant ancestor (or so decl_ultimate_origin
4794          claims), so we don't need to loop following the DECL origins.  */
4795       if (DECL_P (ret_val))
4796         return DECL_ORIGIN (ret_val);
4797
4798       return ret_val;
4799     }
4800 }
4801
4802 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
4803    of a virtual function may refer to a base class, so we check the 'this'
4804    parameter.  */
4805
4806 static tree
4807 decl_class_context (tree decl)
4808 {
4809   tree context = NULL_TREE;
4810
4811   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
4812     context = DECL_CONTEXT (decl);
4813   else
4814     context = TYPE_MAIN_VARIANT
4815       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
4816
4817   if (context && !TYPE_P (context))
4818     context = NULL_TREE;
4819
4820   return context;
4821 }
4822 \f
4823 /* Add an attribute/value pair to a DIE.  We build the lists up in reverse
4824    addition order, and correct that in reverse_all_dies.  */
4825
4826 static inline void
4827 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
4828 {
4829   if (die != NULL && attr != NULL)
4830     {
4831       attr->dw_attr_next = die->die_attr;
4832       die->die_attr = attr;
4833     }
4834 }
4835
4836 static inline enum dw_val_class
4837 AT_class (dw_attr_ref a)
4838 {
4839   return a->dw_attr_val.val_class;
4840 }
4841
4842 /* Add a flag value attribute to a DIE.  */
4843
4844 static inline void
4845 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
4846 {
4847   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4848
4849   attr->dw_attr_next = NULL;
4850   attr->dw_attr = attr_kind;
4851   attr->dw_attr_val.val_class = dw_val_class_flag;
4852   attr->dw_attr_val.v.val_flag = flag;
4853   add_dwarf_attr (die, attr);
4854 }
4855
4856 static inline unsigned
4857 AT_flag (dw_attr_ref a)
4858 {
4859   gcc_assert (a && AT_class (a) == dw_val_class_flag);
4860   return a->dw_attr_val.v.val_flag;
4861 }
4862
4863 /* Add a signed integer attribute value to a DIE.  */
4864
4865 static inline void
4866 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
4867 {
4868   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4869
4870   attr->dw_attr_next = NULL;
4871   attr->dw_attr = attr_kind;
4872   attr->dw_attr_val.val_class = dw_val_class_const;
4873   attr->dw_attr_val.v.val_int = int_val;
4874   add_dwarf_attr (die, attr);
4875 }
4876
4877 static inline HOST_WIDE_INT
4878 AT_int (dw_attr_ref a)
4879 {
4880   gcc_assert (a && AT_class (a) == dw_val_class_const);
4881   return a->dw_attr_val.v.val_int;
4882 }
4883
4884 /* Add an unsigned integer attribute value to a DIE.  */
4885
4886 static inline void
4887 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
4888                  unsigned HOST_WIDE_INT unsigned_val)
4889 {
4890   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4891
4892   attr->dw_attr_next = NULL;
4893   attr->dw_attr = attr_kind;
4894   attr->dw_attr_val.val_class = dw_val_class_unsigned_const;
4895   attr->dw_attr_val.v.val_unsigned = unsigned_val;
4896   add_dwarf_attr (die, attr);
4897 }
4898
4899 static inline unsigned HOST_WIDE_INT
4900 AT_unsigned (dw_attr_ref a)
4901 {
4902   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
4903   return a->dw_attr_val.v.val_unsigned;
4904 }
4905
4906 /* Add an unsigned double integer attribute value to a DIE.  */
4907
4908 static inline void
4909 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
4910                   long unsigned int val_hi, long unsigned int val_low)
4911 {
4912   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4913
4914   attr->dw_attr_next = NULL;
4915   attr->dw_attr = attr_kind;
4916   attr->dw_attr_val.val_class = dw_val_class_long_long;
4917   attr->dw_attr_val.v.val_long_long.hi = val_hi;
4918   attr->dw_attr_val.v.val_long_long.low = val_low;
4919   add_dwarf_attr (die, attr);
4920 }
4921
4922 /* Add a floating point attribute value to a DIE and return it.  */
4923
4924 static inline void
4925 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
4926             unsigned int length, unsigned int elt_size, unsigned char *array)
4927 {
4928   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4929
4930   attr->dw_attr_next = NULL;
4931   attr->dw_attr = attr_kind;
4932   attr->dw_attr_val.val_class = dw_val_class_vec;
4933   attr->dw_attr_val.v.val_vec.length = length;
4934   attr->dw_attr_val.v.val_vec.elt_size = elt_size;
4935   attr->dw_attr_val.v.val_vec.array = array;
4936   add_dwarf_attr (die, attr);
4937 }
4938
4939 /* Hash and equality functions for debug_str_hash.  */
4940
4941 static hashval_t
4942 debug_str_do_hash (const void *x)
4943 {
4944   return htab_hash_string (((const struct indirect_string_node *)x)->str);
4945 }
4946
4947 static int
4948 debug_str_eq (const void *x1, const void *x2)
4949 {
4950   return strcmp ((((const struct indirect_string_node *)x1)->str),
4951                  (const char *)x2) == 0;
4952 }
4953
4954 /* Add a string attribute value to a DIE.  */
4955
4956 static inline void
4957 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
4958 {
4959   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
4960   struct indirect_string_node *node;
4961   void **slot;
4962
4963   if (! debug_str_hash)
4964     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
4965                                       debug_str_eq, NULL);
4966
4967   slot = htab_find_slot_with_hash (debug_str_hash, str,
4968                                    htab_hash_string (str), INSERT);
4969   if (*slot == NULL)
4970     *slot = ggc_alloc_cleared (sizeof (struct indirect_string_node));
4971   node = (struct indirect_string_node *) *slot;
4972   node->str = ggc_strdup (str);
4973   node->refcount++;
4974
4975   attr->dw_attr_next = NULL;
4976   attr->dw_attr = attr_kind;
4977   attr->dw_attr_val.val_class = dw_val_class_str;
4978   attr->dw_attr_val.v.val_str = node;
4979   add_dwarf_attr (die, attr);
4980 }
4981
4982 static inline const char *
4983 AT_string (dw_attr_ref a)
4984 {
4985   gcc_assert (a && AT_class (a) == dw_val_class_str);
4986   return a->dw_attr_val.v.val_str->str;
4987 }
4988
4989 /* Find out whether a string should be output inline in DIE
4990    or out-of-line in .debug_str section.  */
4991
4992 static int
4993 AT_string_form (dw_attr_ref a)
4994 {
4995   struct indirect_string_node *node;
4996   unsigned int len;
4997   char label[32];
4998
4999   gcc_assert (a && AT_class (a) == dw_val_class_str);
5000
5001   node = a->dw_attr_val.v.val_str;
5002   if (node->form)
5003     return node->form;
5004
5005   len = strlen (node->str) + 1;
5006
5007   /* If the string is shorter or equal to the size of the reference, it is
5008      always better to put it inline.  */
5009   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
5010     return node->form = DW_FORM_string;
5011
5012   /* If we cannot expect the linker to merge strings in .debug_str
5013      section, only put it into .debug_str if it is worth even in this
5014      single module.  */
5015   if ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) == 0
5016       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5017     return node->form = DW_FORM_string;
5018
5019   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
5020   ++dw2_string_counter;
5021   node->label = xstrdup (label);
5022
5023   return node->form = DW_FORM_strp;
5024 }
5025
5026 /* Add a DIE reference attribute value to a DIE.  */
5027
5028 static inline void
5029 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
5030 {
5031   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5032
5033   attr->dw_attr_next = NULL;
5034   attr->dw_attr = attr_kind;
5035   attr->dw_attr_val.val_class = dw_val_class_die_ref;
5036   attr->dw_attr_val.v.val_die_ref.die = targ_die;
5037   attr->dw_attr_val.v.val_die_ref.external = 0;
5038   add_dwarf_attr (die, attr);
5039 }
5040
5041 /* Add an AT_specification attribute to a DIE, and also make the back
5042    pointer from the specification to the definition.  */
5043
5044 static inline void
5045 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
5046 {
5047   add_AT_die_ref (die, DW_AT_specification, targ_die);
5048   gcc_assert (!targ_die->die_definition);
5049   targ_die->die_definition = die;
5050 }
5051
5052 static inline dw_die_ref
5053 AT_ref (dw_attr_ref a)
5054 {
5055   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5056   return a->dw_attr_val.v.val_die_ref.die;
5057 }
5058
5059 static inline int
5060 AT_ref_external (dw_attr_ref a)
5061 {
5062   if (a && AT_class (a) == dw_val_class_die_ref)
5063     return a->dw_attr_val.v.val_die_ref.external;
5064
5065   return 0;
5066 }
5067
5068 static inline void
5069 set_AT_ref_external (dw_attr_ref a, int i)
5070 {
5071   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
5072   a->dw_attr_val.v.val_die_ref.external = i;
5073 }
5074
5075 /* Add an FDE reference attribute value to a DIE.  */
5076
5077 static inline void
5078 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
5079 {
5080   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5081
5082   attr->dw_attr_next = NULL;
5083   attr->dw_attr = attr_kind;
5084   attr->dw_attr_val.val_class = dw_val_class_fde_ref;
5085   attr->dw_attr_val.v.val_fde_index = targ_fde;
5086   add_dwarf_attr (die, attr);
5087 }
5088
5089 /* Add a location description attribute value to a DIE.  */
5090
5091 static inline void
5092 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
5093 {
5094   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5095
5096   attr->dw_attr_next = NULL;
5097   attr->dw_attr = attr_kind;
5098   attr->dw_attr_val.val_class = dw_val_class_loc;
5099   attr->dw_attr_val.v.val_loc = loc;
5100   add_dwarf_attr (die, attr);
5101 }
5102
5103 static inline dw_loc_descr_ref
5104 AT_loc (dw_attr_ref a)
5105 {
5106   gcc_assert (a && AT_class (a) == dw_val_class_loc);
5107   return a->dw_attr_val.v.val_loc;
5108 }
5109
5110 static inline void
5111 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
5112 {
5113   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5114
5115   attr->dw_attr_next = NULL;
5116   attr->dw_attr = attr_kind;
5117   attr->dw_attr_val.val_class = dw_val_class_loc_list;
5118   attr->dw_attr_val.v.val_loc_list = loc_list;
5119   add_dwarf_attr (die, attr);
5120   have_location_lists = 1;
5121 }
5122
5123 static inline dw_loc_list_ref
5124 AT_loc_list (dw_attr_ref a)
5125 {
5126   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
5127   return a->dw_attr_val.v.val_loc_list;
5128 }
5129
5130 /* Add an address constant attribute value to a DIE.  */
5131
5132 static inline void
5133 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
5134 {
5135   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5136
5137   attr->dw_attr_next = NULL;
5138   attr->dw_attr = attr_kind;
5139   attr->dw_attr_val.val_class = dw_val_class_addr;
5140   attr->dw_attr_val.v.val_addr = addr;
5141   add_dwarf_attr (die, attr);
5142 }
5143
5144 static inline rtx
5145 AT_addr (dw_attr_ref a)
5146 {
5147   gcc_assert (a && AT_class (a) == dw_val_class_addr);
5148   return a->dw_attr_val.v.val_addr;
5149 }
5150
5151 /* Add a label identifier attribute value to a DIE.  */
5152
5153 static inline void
5154 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
5155 {
5156   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5157
5158   attr->dw_attr_next = NULL;
5159   attr->dw_attr = attr_kind;
5160   attr->dw_attr_val.val_class = dw_val_class_lbl_id;
5161   attr->dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
5162   add_dwarf_attr (die, attr);
5163 }
5164
5165 /* Add a section offset attribute value to a DIE.  */
5166
5167 static inline void
5168 add_AT_lbl_offset (dw_die_ref die, enum dwarf_attribute attr_kind, const char *label)
5169 {
5170   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5171
5172   attr->dw_attr_next = NULL;
5173   attr->dw_attr = attr_kind;
5174   attr->dw_attr_val.val_class = dw_val_class_lbl_offset;
5175   attr->dw_attr_val.v.val_lbl_id = xstrdup (label);
5176   add_dwarf_attr (die, attr);
5177 }
5178
5179 /* Add an offset attribute value to a DIE.  */
5180
5181 static inline void
5182 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
5183                unsigned HOST_WIDE_INT offset)
5184 {
5185   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5186
5187   attr->dw_attr_next = NULL;
5188   attr->dw_attr = attr_kind;
5189   attr->dw_attr_val.val_class = dw_val_class_offset;
5190   attr->dw_attr_val.v.val_offset = offset;
5191   add_dwarf_attr (die, attr);
5192 }
5193
5194 /* Add an range_list attribute value to a DIE.  */
5195
5196 static void
5197 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
5198                    long unsigned int offset)
5199 {
5200   dw_attr_ref attr = ggc_alloc (sizeof (dw_attr_node));
5201
5202   attr->dw_attr_next = NULL;
5203   attr->dw_attr = attr_kind;
5204   attr->dw_attr_val.val_class = dw_val_class_range_list;
5205   attr->dw_attr_val.v.val_offset = offset;
5206   add_dwarf_attr (die, attr);
5207 }
5208
5209 static inline const char *
5210 AT_lbl (dw_attr_ref a)
5211 {
5212   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
5213                     || AT_class (a) == dw_val_class_lbl_offset));
5214   return a->dw_attr_val.v.val_lbl_id;
5215 }
5216
5217 /* Get the attribute of type attr_kind.  */
5218
5219 static dw_attr_ref
5220 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5221 {
5222   dw_attr_ref a;
5223   dw_die_ref spec = NULL;
5224
5225   if (die != NULL)
5226     {
5227       for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5228         if (a->dw_attr == attr_kind)
5229           return a;
5230         else if (a->dw_attr == DW_AT_specification
5231                  || a->dw_attr == DW_AT_abstract_origin)
5232           spec = AT_ref (a);
5233
5234       if (spec)
5235         return get_AT (spec, attr_kind);
5236     }
5237
5238   return NULL;
5239 }
5240
5241 /* Return the "low pc" attribute value, typically associated with a subprogram
5242    DIE.  Return null if the "low pc" attribute is either not present, or if it
5243    cannot be represented as an assembler label identifier.  */
5244
5245 static inline const char *
5246 get_AT_low_pc (dw_die_ref die)
5247 {
5248   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
5249
5250   return a ? AT_lbl (a) : NULL;
5251 }
5252
5253 /* Return the "high pc" attribute value, typically associated with a subprogram
5254    DIE.  Return null if the "high pc" attribute is either not present, or if it
5255    cannot be represented as an assembler label identifier.  */
5256
5257 static inline const char *
5258 get_AT_hi_pc (dw_die_ref die)
5259 {
5260   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
5261
5262   return a ? AT_lbl (a) : NULL;
5263 }
5264
5265 /* Return the value of the string attribute designated by ATTR_KIND, or
5266    NULL if it is not present.  */
5267
5268 static inline const char *
5269 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
5270 {
5271   dw_attr_ref a = get_AT (die, attr_kind);
5272
5273   return a ? AT_string (a) : NULL;
5274 }
5275
5276 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
5277    if it is not present.  */
5278
5279 static inline int
5280 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
5281 {
5282   dw_attr_ref a = get_AT (die, attr_kind);
5283
5284   return a ? AT_flag (a) : 0;
5285 }
5286
5287 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
5288    if it is not present.  */
5289
5290 static inline unsigned
5291 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
5292 {
5293   dw_attr_ref a = get_AT (die, attr_kind);
5294
5295   return a ? AT_unsigned (a) : 0;
5296 }
5297
5298 static inline dw_die_ref
5299 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
5300 {
5301   dw_attr_ref a = get_AT (die, attr_kind);
5302
5303   return a ? AT_ref (a) : NULL;
5304 }
5305
5306 /* Return TRUE if the language is C or C++.  */
5307
5308 static inline bool
5309 is_c_family (void)
5310 {
5311   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5312
5313   return (lang == DW_LANG_C || lang == DW_LANG_C89
5314           || lang == DW_LANG_C_plus_plus);
5315 }
5316
5317 /* Return TRUE if the language is C++.  */
5318
5319 static inline bool
5320 is_cxx (void)
5321 {
5322   return (get_AT_unsigned (comp_unit_die, DW_AT_language)
5323           == DW_LANG_C_plus_plus);
5324 }
5325
5326 /* Return TRUE if the language is Fortran.  */
5327
5328 static inline bool
5329 is_fortran (void)
5330 {
5331   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5332
5333   return (lang == DW_LANG_Fortran77
5334           || lang == DW_LANG_Fortran90
5335           || lang == DW_LANG_Fortran95);
5336 }
5337
5338 /* Return TRUE if the language is Java.  */
5339
5340 static inline bool
5341 is_java (void)
5342 {
5343   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5344
5345   return lang == DW_LANG_Java;
5346 }
5347
5348 /* Return TRUE if the language is Ada.  */
5349
5350 static inline bool
5351 is_ada (void)
5352 {
5353   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
5354
5355   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
5356 }
5357
5358 /* Free up the memory used by A.  */
5359
5360 static inline void free_AT (dw_attr_ref);
5361 static inline void
5362 free_AT (dw_attr_ref a)
5363 {
5364   if (AT_class (a) == dw_val_class_str)
5365     if (a->dw_attr_val.v.val_str->refcount)
5366       a->dw_attr_val.v.val_str->refcount--;
5367 }
5368
5369 /* Remove the specified attribute if present.  */
5370
5371 static void
5372 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
5373 {
5374   dw_attr_ref *p;
5375   dw_attr_ref removed = NULL;
5376
5377   if (die != NULL)
5378     {
5379       for (p = &(die->die_attr); *p; p = &((*p)->dw_attr_next))
5380         if ((*p)->dw_attr == attr_kind)
5381           {
5382             removed = *p;
5383             *p = (*p)->dw_attr_next;
5384             break;
5385           }
5386
5387       if (removed != 0)
5388         free_AT (removed);
5389     }
5390 }
5391
5392 /* Remove child die whose die_tag is specified tag.  */
5393
5394 static void
5395 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
5396 {
5397   dw_die_ref current, prev, next;
5398   current = die->die_child;
5399   prev = NULL;
5400   while (current != NULL)
5401     {
5402       if (current->die_tag == tag)
5403         {
5404           next = current->die_sib;
5405           if (prev == NULL)
5406             die->die_child = next;
5407           else
5408             prev->die_sib = next;
5409           free_die (current);
5410           current = next;
5411         }
5412       else
5413         {
5414           prev = current;
5415           current = current->die_sib;
5416         }
5417     }
5418 }
5419
5420 /* Free up the memory used by DIE.  */
5421
5422 static inline void
5423 free_die (dw_die_ref die)
5424 {
5425   remove_children (die);
5426 }
5427
5428 /* Discard the children of this DIE.  */
5429
5430 static void
5431 remove_children (dw_die_ref die)
5432 {
5433   dw_die_ref child_die = die->die_child;
5434
5435   die->die_child = NULL;
5436
5437   while (child_die != NULL)
5438     {
5439       dw_die_ref tmp_die = child_die;
5440       dw_attr_ref a;
5441
5442       child_die = child_die->die_sib;
5443
5444       for (a = tmp_die->die_attr; a != NULL;)
5445         {
5446           dw_attr_ref tmp_a = a;
5447
5448           a = a->dw_attr_next;
5449           free_AT (tmp_a);
5450         }
5451
5452       free_die (tmp_die);
5453     }
5454 }
5455
5456 /* Add a child DIE below its parent.  We build the lists up in reverse
5457    addition order, and correct that in reverse_all_dies.  */
5458
5459 static inline void
5460 add_child_die (dw_die_ref die, dw_die_ref child_die)
5461 {
5462   if (die != NULL && child_die != NULL)
5463     {
5464       gcc_assert (die != child_die);
5465
5466       child_die->die_parent = die;
5467       child_die->die_sib = die->die_child;
5468       die->die_child = child_die;
5469     }
5470 }
5471
5472 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
5473    is the specification, to the front of PARENT's list of children.  */
5474
5475 static void
5476 splice_child_die (dw_die_ref parent, dw_die_ref child)
5477 {
5478   dw_die_ref *p;
5479
5480   /* We want the declaration DIE from inside the class, not the
5481      specification DIE at toplevel.  */
5482   if (child->die_parent != parent)
5483     {
5484       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
5485
5486       if (tmp)
5487         child = tmp;
5488     }
5489
5490   gcc_assert (child->die_parent == parent
5491               || (child->die_parent
5492                   == get_AT_ref (parent, DW_AT_specification)));
5493
5494   for (p = &(child->die_parent->die_child); *p; p = &((*p)->die_sib))
5495     if (*p == child)
5496       {
5497         *p = child->die_sib;
5498         break;
5499       }
5500
5501   child->die_parent = parent;
5502   child->die_sib = parent->die_child;
5503   parent->die_child = child;
5504 }
5505
5506 /* Return a pointer to a newly created DIE node.  */
5507
5508 static inline dw_die_ref
5509 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
5510 {
5511   dw_die_ref die = ggc_alloc_cleared (sizeof (die_node));
5512
5513   die->die_tag = tag_value;
5514
5515   if (parent_die != NULL)
5516     add_child_die (parent_die, die);
5517   else
5518     {
5519       limbo_die_node *limbo_node;
5520
5521       limbo_node = ggc_alloc_cleared (sizeof (limbo_die_node));
5522       limbo_node->die = die;
5523       limbo_node->created_for = t;
5524       limbo_node->next = limbo_die_list;
5525       limbo_die_list = limbo_node;
5526     }
5527
5528   return die;
5529 }
5530
5531 /* Return the DIE associated with the given type specifier.  */
5532
5533 static inline dw_die_ref
5534 lookup_type_die (tree type)
5535 {
5536   return TYPE_SYMTAB_DIE (type);
5537 }
5538
5539 /* Equate a DIE to a given type specifier.  */
5540
5541 static inline void
5542 equate_type_number_to_die (tree type, dw_die_ref type_die)
5543 {
5544   TYPE_SYMTAB_DIE (type) = type_die;
5545 }
5546
5547 /* Returns a hash value for X (which really is a die_struct).  */
5548
5549 static hashval_t
5550 decl_die_table_hash (const void *x)
5551 {
5552   return (hashval_t) ((const dw_die_ref) x)->decl_id;
5553 }
5554
5555 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
5556
5557 static int
5558 decl_die_table_eq (const void *x, const void *y)
5559 {
5560   return (((const dw_die_ref) x)->decl_id == DECL_UID ((const tree) y));
5561 }
5562
5563 /* Return the DIE associated with a given declaration.  */
5564
5565 static inline dw_die_ref
5566 lookup_decl_die (tree decl)
5567 {
5568   return htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
5569 }
5570
5571 /* Returns a hash value for X (which really is a var_loc_list).  */
5572
5573 static hashval_t
5574 decl_loc_table_hash (const void *x)
5575 {
5576   return (hashval_t) ((const var_loc_list *) x)->decl_id;
5577 }
5578
5579 /* Return nonzero if decl_id of var_loc_list X is the same as
5580    UID of decl *Y.  */
5581
5582 static int
5583 decl_loc_table_eq (const void *x, const void *y)
5584 {
5585   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const tree) y));
5586 }
5587
5588 /* Return the var_loc list associated with a given declaration.  */
5589
5590 static inline var_loc_list *
5591 lookup_decl_loc (tree decl)
5592 {
5593   return htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
5594 }
5595
5596 /* Equate a DIE to a particular declaration.  */
5597
5598 static void
5599 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
5600 {
5601   unsigned int decl_id = DECL_UID (decl);
5602   void **slot;
5603
5604   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
5605   *slot = decl_die;
5606   decl_die->decl_id = decl_id;
5607 }
5608
5609 /* Add a variable location node to the linked list for DECL.  */
5610
5611 static void
5612 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
5613 {
5614   unsigned int decl_id = DECL_UID (decl);
5615   var_loc_list *temp;
5616   void **slot;
5617
5618   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
5619   if (*slot == NULL)
5620     {
5621       temp = ggc_alloc_cleared (sizeof (var_loc_list));
5622       temp->decl_id = decl_id;
5623       *slot = temp;
5624     }
5625   else
5626     temp = *slot;
5627
5628   if (temp->last)
5629     {
5630       /* If the current location is the same as the end of the list,
5631          we have nothing to do.  */
5632       if (!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
5633                         NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
5634         {
5635           /* Add LOC to the end of list and update LAST.  */
5636           temp->last->next = loc;
5637           temp->last = loc;
5638         }
5639     }
5640   /* Do not add empty location to the beginning of the list.  */
5641   else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
5642     {
5643       temp->first = loc;
5644       temp->last = loc;
5645     }
5646 }
5647 \f
5648 /* Keep track of the number of spaces used to indent the
5649    output of the debugging routines that print the structure of
5650    the DIE internal representation.  */
5651 static int print_indent;
5652
5653 /* Indent the line the number of spaces given by print_indent.  */
5654
5655 static inline void
5656 print_spaces (FILE *outfile)
5657 {
5658   fprintf (outfile, "%*s", print_indent, "");
5659 }
5660
5661 /* Print the information associated with a given DIE, and its children.
5662    This routine is a debugging aid only.  */
5663
5664 static void
5665 print_die (dw_die_ref die, FILE *outfile)
5666 {
5667   dw_attr_ref a;
5668   dw_die_ref c;
5669
5670   print_spaces (outfile);
5671   fprintf (outfile, "DIE %4lu: %s\n",
5672            die->die_offset, dwarf_tag_name (die->die_tag));
5673   print_spaces (outfile);
5674   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
5675   fprintf (outfile, " offset: %lu\n", die->die_offset);
5676
5677   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
5678     {
5679       print_spaces (outfile);
5680       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
5681
5682       switch (AT_class (a))
5683         {
5684         case dw_val_class_addr:
5685           fprintf (outfile, "address");
5686           break;
5687         case dw_val_class_offset:
5688           fprintf (outfile, "offset");
5689           break;
5690         case dw_val_class_loc:
5691           fprintf (outfile, "location descriptor");
5692           break;
5693         case dw_val_class_loc_list:
5694           fprintf (outfile, "location list -> label:%s",
5695                    AT_loc_list (a)->ll_symbol);
5696           break;
5697         case dw_val_class_range_list:
5698           fprintf (outfile, "range list");
5699           break;
5700         case dw_val_class_const:
5701           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
5702           break;
5703         case dw_val_class_unsigned_const:
5704           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
5705           break;
5706         case dw_val_class_long_long:
5707           fprintf (outfile, "constant (%lu,%lu)",
5708                    a->dw_attr_val.v.val_long_long.hi,
5709                    a->dw_attr_val.v.val_long_long.low);
5710           break;
5711         case dw_val_class_vec:
5712           fprintf (outfile, "floating-point or vector constant");
5713           break;
5714         case dw_val_class_flag:
5715           fprintf (outfile, "%u", AT_flag (a));
5716           break;
5717         case dw_val_class_die_ref:
5718           if (AT_ref (a) != NULL)
5719             {
5720               if (AT_ref (a)->die_symbol)
5721                 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
5722               else
5723                 fprintf (outfile, "die -> %lu", AT_ref (a)->die_offset);
5724             }
5725           else
5726             fprintf (outfile, "die -> <null>");
5727           break;
5728         case dw_val_class_lbl_id:
5729         case dw_val_class_lbl_offset:
5730           fprintf (outfile, "label: %s", AT_lbl (a));
5731           break;
5732         case dw_val_class_str:
5733           if (AT_string (a) != NULL)
5734             fprintf (outfile, "\"%s\"", AT_string (a));
5735           else
5736             fprintf (outfile, "<null>");
5737           break;
5738         default:
5739           break;
5740         }
5741
5742       fprintf (outfile, "\n");
5743     }
5744
5745   if (die->die_child != NULL)
5746     {
5747       print_indent += 4;
5748       for (c = die->die_child; c != NULL; c = c->die_sib)
5749         print_die (c, outfile);
5750
5751       print_indent -= 4;
5752     }
5753   if (print_indent == 0)
5754     fprintf (outfile, "\n");
5755 }
5756
5757 /* Print the contents of the source code line number correspondence table.
5758    This routine is a debugging aid only.  */
5759
5760 static void
5761 print_dwarf_line_table (FILE *outfile)
5762 {
5763   unsigned i;
5764   dw_line_info_ref line_info;
5765
5766   fprintf (outfile, "\n\nDWARF source line information\n");
5767   for (i = 1; i < line_info_table_in_use; i++)
5768     {
5769       line_info = &line_info_table[i];
5770       fprintf (outfile, "%5d: ", i);
5771       fprintf (outfile, "%-20s",
5772                VARRAY_CHAR_PTR (file_table, line_info->dw_file_num));
5773       fprintf (outfile, "%6ld", line_info->dw_line_num);
5774       fprintf (outfile, "\n");
5775     }
5776
5777   fprintf (outfile, "\n\n");
5778 }
5779
5780 /* Print the information collected for a given DIE.  */
5781
5782 void
5783 debug_dwarf_die (dw_die_ref die)
5784 {
5785   print_die (die, stderr);
5786 }
5787
5788 /* Print all DWARF information collected for the compilation unit.
5789    This routine is a debugging aid only.  */
5790
5791 void
5792 debug_dwarf (void)
5793 {
5794   print_indent = 0;
5795   print_die (comp_unit_die, stderr);
5796   if (! DWARF2_ASM_LINE_DEBUG_INFO)
5797     print_dwarf_line_table (stderr);
5798 }
5799 \f
5800 /* We build up the lists of children and attributes by pushing new ones
5801    onto the beginning of the list.  Reverse the lists for DIE so that
5802    they are in order of addition.  */
5803
5804 static void
5805 reverse_die_lists (dw_die_ref die)
5806 {
5807   dw_die_ref c, cp, cn;
5808   dw_attr_ref a, ap, an;
5809
5810   for (a = die->die_attr, ap = 0; a; a = an)
5811     {
5812       an = a->dw_attr_next;
5813       a->dw_attr_next = ap;
5814       ap = a;
5815     }
5816
5817   die->die_attr = ap;
5818
5819   for (c = die->die_child, cp = 0; c; c = cn)
5820     {
5821       cn = c->die_sib;
5822       c->die_sib = cp;
5823       cp = c;
5824     }
5825
5826   die->die_child = cp;
5827 }
5828
5829 /* reverse_die_lists only reverses the single die you pass it. Since we used to
5830    reverse all dies in add_sibling_attributes, which runs through all the dies,
5831    it would reverse all the dies.  Now, however, since we don't call
5832    reverse_die_lists in add_sibling_attributes, we need a routine to
5833    recursively reverse all the dies. This is that routine.  */
5834
5835 static void
5836 reverse_all_dies (dw_die_ref die)
5837 {
5838   dw_die_ref c;
5839
5840   reverse_die_lists (die);
5841
5842   for (c = die->die_child; c; c = c->die_sib)
5843     reverse_all_dies (c);
5844 }
5845
5846 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
5847    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
5848    DIE that marks the start of the DIEs for this include file.  */
5849
5850 static dw_die_ref
5851 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
5852 {
5853   const char *filename = get_AT_string (bincl_die, DW_AT_name);
5854   dw_die_ref new_unit = gen_compile_unit_die (filename);
5855
5856   new_unit->die_sib = old_unit;
5857   return new_unit;
5858 }
5859
5860 /* Close an include-file CU and reopen the enclosing one.  */
5861
5862 static dw_die_ref
5863 pop_compile_unit (dw_die_ref old_unit)
5864 {
5865   dw_die_ref new_unit = old_unit->die_sib;
5866
5867   old_unit->die_sib = NULL;
5868   return new_unit;
5869 }
5870
5871 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
5872 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
5873
5874 /* Calculate the checksum of a location expression.  */
5875
5876 static inline void
5877 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
5878 {
5879   CHECKSUM (loc->dw_loc_opc);
5880   CHECKSUM (loc->dw_loc_oprnd1);
5881   CHECKSUM (loc->dw_loc_oprnd2);
5882 }
5883
5884 /* Calculate the checksum of an attribute.  */
5885
5886 static void
5887 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
5888 {
5889   dw_loc_descr_ref loc;
5890   rtx r;
5891
5892   CHECKSUM (at->dw_attr);
5893
5894   /* We don't care about differences in file numbering.  */
5895   if (at->dw_attr == DW_AT_decl_file
5896       /* Or that this was compiled with a different compiler snapshot; if
5897          the output is the same, that's what matters.  */
5898       || at->dw_attr == DW_AT_producer)
5899     return;
5900
5901   switch (AT_class (at))
5902     {
5903     case dw_val_class_const:
5904       CHECKSUM (at->dw_attr_val.v.val_int);
5905       break;
5906     case dw_val_class_unsigned_const:
5907       CHECKSUM (at->dw_attr_val.v.val_unsigned);
5908       break;
5909     case dw_val_class_long_long:
5910       CHECKSUM (at->dw_attr_val.v.val_long_long);
5911       break;
5912     case dw_val_class_vec:
5913       CHECKSUM (at->dw_attr_val.v.val_vec);
5914       break;
5915     case dw_val_class_flag:
5916       CHECKSUM (at->dw_attr_val.v.val_flag);
5917       break;
5918     case dw_val_class_str:
5919       CHECKSUM_STRING (AT_string (at));
5920       break;
5921
5922     case dw_val_class_addr:
5923       r = AT_addr (at);
5924       gcc_assert (GET_CODE (r) == SYMBOL_REF);
5925       CHECKSUM_STRING (XSTR (r, 0));
5926       break;
5927
5928     case dw_val_class_offset:
5929       CHECKSUM (at->dw_attr_val.v.val_offset);
5930       break;
5931
5932     case dw_val_class_loc:
5933       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
5934         loc_checksum (loc, ctx);
5935       break;
5936
5937     case dw_val_class_die_ref:
5938       die_checksum (AT_ref (at), ctx, mark);
5939       break;
5940
5941     case dw_val_class_fde_ref:
5942     case dw_val_class_lbl_id:
5943     case dw_val_class_lbl_offset:
5944       break;
5945
5946     default:
5947       break;
5948     }
5949 }
5950
5951 /* Calculate the checksum of a DIE.  */
5952
5953 static void
5954 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
5955 {
5956   dw_die_ref c;
5957   dw_attr_ref a;
5958
5959   /* To avoid infinite recursion.  */
5960   if (die->die_mark)
5961     {
5962       CHECKSUM (die->die_mark);
5963       return;
5964     }
5965   die->die_mark = ++(*mark);
5966
5967   CHECKSUM (die->die_tag);
5968
5969   for (a = die->die_attr; a; a = a->dw_attr_next)
5970     attr_checksum (a, ctx, mark);
5971
5972   for (c = die->die_child; c; c = c->die_sib)
5973     die_checksum (c, ctx, mark);
5974 }
5975
5976 #undef CHECKSUM
5977 #undef CHECKSUM_STRING
5978
5979 /* Do the location expressions look same?  */
5980 static inline int
5981 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
5982 {
5983   return loc1->dw_loc_opc == loc2->dw_loc_opc
5984          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
5985          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
5986 }
5987
5988 /* Do the values look the same?  */
5989 static int
5990 same_dw_val_p (dw_val_node *v1, dw_val_node *v2, int *mark)
5991 {
5992   dw_loc_descr_ref loc1, loc2;
5993   rtx r1, r2;
5994
5995   if (v1->val_class != v2->val_class)
5996     return 0;
5997
5998   switch (v1->val_class)
5999     {
6000     case dw_val_class_const:
6001       return v1->v.val_int == v2->v.val_int;
6002     case dw_val_class_unsigned_const:
6003       return v1->v.val_unsigned == v2->v.val_unsigned;
6004     case dw_val_class_long_long:
6005       return v1->v.val_long_long.hi == v2->v.val_long_long.hi
6006              && v1->v.val_long_long.low == v2->v.val_long_long.low;
6007     case dw_val_class_vec:
6008       if (v1->v.val_vec.length != v2->v.val_vec.length
6009           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6010         return 0;
6011       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6012                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6013         return 0;
6014       return 1;
6015     case dw_val_class_flag:
6016       return v1->v.val_flag == v2->v.val_flag;
6017     case dw_val_class_str:
6018       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6019
6020     case dw_val_class_addr:
6021       r1 = v1->v.val_addr;
6022       r2 = v2->v.val_addr;
6023       if (GET_CODE (r1) != GET_CODE (r2))
6024         return 0;
6025       gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6026       return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6027
6028     case dw_val_class_offset:
6029       return v1->v.val_offset == v2->v.val_offset;
6030
6031     case dw_val_class_loc:
6032       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6033            loc1 && loc2;
6034            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
6035         if (!same_loc_p (loc1, loc2, mark))
6036           return 0;
6037       return !loc1 && !loc2;
6038
6039     case dw_val_class_die_ref:
6040       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
6041
6042     case dw_val_class_fde_ref:
6043     case dw_val_class_lbl_id:
6044     case dw_val_class_lbl_offset:
6045       return 1;
6046
6047     default:
6048       return 1;
6049     }
6050 }
6051
6052 /* Do the attributes look the same?  */
6053
6054 static int
6055 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
6056 {
6057   if (at1->dw_attr != at2->dw_attr)
6058     return 0;
6059
6060   /* We don't care about differences in file numbering.  */
6061   if (at1->dw_attr == DW_AT_decl_file
6062       /* Or that this was compiled with a different compiler snapshot; if
6063          the output is the same, that's what matters.  */
6064       || at1->dw_attr == DW_AT_producer)
6065     return 1;
6066
6067   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
6068 }
6069
6070 /* Do the dies look the same?  */
6071
6072 static int
6073 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
6074 {
6075   dw_die_ref c1, c2;
6076   dw_attr_ref a1, a2;
6077
6078   /* To avoid infinite recursion.  */
6079   if (die1->die_mark)
6080     return die1->die_mark == die2->die_mark;
6081   die1->die_mark = die2->die_mark = ++(*mark);
6082
6083   if (die1->die_tag != die2->die_tag)
6084     return 0;
6085
6086   for (a1 = die1->die_attr, a2 = die2->die_attr;
6087        a1 && a2;
6088        a1 = a1->dw_attr_next, a2 = a2->dw_attr_next)
6089     if (!same_attr_p (a1, a2, mark))
6090       return 0;
6091   if (a1 || a2)
6092     return 0;
6093
6094   for (c1 = die1->die_child, c2 = die2->die_child;
6095        c1 && c2;
6096        c1 = c1->die_sib, c2 = c2->die_sib)
6097     if (!same_die_p (c1, c2, mark))
6098       return 0;
6099   if (c1 || c2)
6100     return 0;
6101
6102   return 1;
6103 }
6104
6105 /* Do the dies look the same?  Wrapper around same_die_p.  */
6106
6107 static int
6108 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
6109 {
6110   int mark = 0;
6111   int ret = same_die_p (die1, die2, &mark);
6112
6113   unmark_all_dies (die1);
6114   unmark_all_dies (die2);
6115
6116   return ret;
6117 }
6118
6119 /* The prefix to attach to symbols on DIEs in the current comdat debug
6120    info section.  */
6121 static char *comdat_symbol_id;
6122
6123 /* The index of the current symbol within the current comdat CU.  */
6124 static unsigned int comdat_symbol_number;
6125
6126 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
6127    children, and set comdat_symbol_id accordingly.  */
6128
6129 static void
6130 compute_section_prefix (dw_die_ref unit_die)
6131 {
6132   const char *die_name = get_AT_string (unit_die, DW_AT_name);
6133   const char *base = die_name ? lbasename (die_name) : "anonymous";
6134   char *name = alloca (strlen (base) + 64);
6135   char *p;
6136   int i, mark;
6137   unsigned char checksum[16];
6138   struct md5_ctx ctx;
6139
6140   /* Compute the checksum of the DIE, then append part of it as hex digits to
6141      the name filename of the unit.  */
6142
6143   md5_init_ctx (&ctx);
6144   mark = 0;
6145   die_checksum (unit_die, &ctx, &mark);
6146   unmark_all_dies (unit_die);
6147   md5_finish_ctx (&ctx, checksum);
6148
6149   sprintf (name, "%s.", base);
6150   clean_symbol_name (name);
6151
6152   p = name + strlen (name);
6153   for (i = 0; i < 4; i++)
6154     {
6155       sprintf (p, "%.2x", checksum[i]);
6156       p += 2;
6157     }
6158
6159   comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
6160   comdat_symbol_number = 0;
6161 }
6162
6163 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
6164
6165 static int
6166 is_type_die (dw_die_ref die)
6167 {
6168   switch (die->die_tag)
6169     {
6170     case DW_TAG_array_type:
6171     case DW_TAG_class_type:
6172     case DW_TAG_enumeration_type:
6173     case DW_TAG_pointer_type:
6174     case DW_TAG_reference_type:
6175     case DW_TAG_string_type:
6176     case DW_TAG_structure_type:
6177     case DW_TAG_subroutine_type:
6178     case DW_TAG_union_type:
6179     case DW_TAG_ptr_to_member_type:
6180     case DW_TAG_set_type:
6181     case DW_TAG_subrange_type:
6182     case DW_TAG_base_type:
6183     case DW_TAG_const_type:
6184     case DW_TAG_file_type:
6185     case DW_TAG_packed_type:
6186     case DW_TAG_volatile_type:
6187     case DW_TAG_typedef:
6188       return 1;
6189     default:
6190       return 0;
6191     }
6192 }
6193
6194 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
6195    Basically, we want to choose the bits that are likely to be shared between
6196    compilations (types) and leave out the bits that are specific to individual
6197    compilations (functions).  */
6198
6199 static int
6200 is_comdat_die (dw_die_ref c)
6201 {
6202   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
6203      we do for stabs.  The advantage is a greater likelihood of sharing between
6204      objects that don't include headers in the same order (and therefore would
6205      put the base types in a different comdat).  jason 8/28/00 */
6206
6207   if (c->die_tag == DW_TAG_base_type)
6208     return 0;
6209
6210   if (c->die_tag == DW_TAG_pointer_type
6211       || c->die_tag == DW_TAG_reference_type
6212       || c->die_tag == DW_TAG_const_type
6213       || c->die_tag == DW_TAG_volatile_type)
6214     {
6215       dw_die_ref t = get_AT_ref (c, DW_AT_type);
6216
6217       return t ? is_comdat_die (t) : 0;
6218     }
6219
6220   return is_type_die (c);
6221 }
6222
6223 /* Returns 1 iff C is the sort of DIE that might be referred to from another
6224    compilation unit.  */
6225
6226 static int
6227 is_symbol_die (dw_die_ref c)
6228 {
6229   return (is_type_die (c)
6230           || (get_AT (c, DW_AT_declaration)
6231               && !get_AT (c, DW_AT_specification))
6232           || c->die_tag == DW_TAG_namespace);
6233 }
6234
6235 static char *
6236 gen_internal_sym (const char *prefix)
6237 {
6238   char buf[256];
6239
6240   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
6241   return xstrdup (buf);
6242 }
6243
6244 /* Assign symbols to all worthy DIEs under DIE.  */
6245
6246 static void
6247 assign_symbol_names (dw_die_ref die)
6248 {
6249   dw_die_ref c;
6250
6251   if (is_symbol_die (die))
6252     {
6253       if (comdat_symbol_id)
6254         {
6255           char *p = alloca (strlen (comdat_symbol_id) + 64);
6256
6257           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
6258                    comdat_symbol_id, comdat_symbol_number++);
6259           die->die_symbol = xstrdup (p);
6260         }
6261       else
6262         die->die_symbol = gen_internal_sym ("LDIE");
6263     }
6264
6265   for (c = die->die_child; c != NULL; c = c->die_sib)
6266     assign_symbol_names (c);
6267 }
6268
6269 struct cu_hash_table_entry
6270 {
6271   dw_die_ref cu;
6272   unsigned min_comdat_num, max_comdat_num;
6273   struct cu_hash_table_entry *next;
6274 };
6275
6276 /* Routines to manipulate hash table of CUs.  */
6277 static hashval_t
6278 htab_cu_hash (const void *of)
6279 {
6280   const struct cu_hash_table_entry *entry = of;
6281
6282   return htab_hash_string (entry->cu->die_symbol);
6283 }
6284
6285 static int
6286 htab_cu_eq (const void *of1, const void *of2)
6287 {
6288   const struct cu_hash_table_entry *entry1 = of1;
6289   const struct die_struct *entry2 = of2;
6290
6291   return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
6292 }
6293
6294 static void
6295 htab_cu_del (void *what)
6296 {
6297   struct cu_hash_table_entry *next, *entry = what;
6298
6299   while (entry)
6300     {
6301       next = entry->next;
6302       free (entry);
6303       entry = next;
6304     }
6305 }
6306
6307 /* Check whether we have already seen this CU and set up SYM_NUM
6308    accordingly.  */
6309 static int
6310 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
6311 {
6312   struct cu_hash_table_entry dummy;
6313   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
6314
6315   dummy.max_comdat_num = 0;
6316
6317   slot = (struct cu_hash_table_entry **)
6318     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6319         INSERT);
6320   entry = *slot;
6321
6322   for (; entry; last = entry, entry = entry->next)
6323     {
6324       if (same_die_p_wrap (cu, entry->cu))
6325         break;
6326     }
6327
6328   if (entry)
6329     {
6330       *sym_num = entry->min_comdat_num;
6331       return 1;
6332     }
6333
6334   entry = xcalloc (1, sizeof (struct cu_hash_table_entry));
6335   entry->cu = cu;
6336   entry->min_comdat_num = *sym_num = last->max_comdat_num;
6337   entry->next = *slot;
6338   *slot = entry;
6339
6340   return 0;
6341 }
6342
6343 /* Record SYM_NUM to record of CU in HTABLE.  */
6344 static void
6345 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
6346 {
6347   struct cu_hash_table_entry **slot, *entry;
6348
6349   slot = (struct cu_hash_table_entry **)
6350     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
6351         NO_INSERT);
6352   entry = *slot;
6353
6354   entry->max_comdat_num = sym_num;
6355 }
6356
6357 /* Traverse the DIE (which is always comp_unit_die), and set up
6358    additional compilation units for each of the include files we see
6359    bracketed by BINCL/EINCL.  */
6360
6361 static void
6362 break_out_includes (dw_die_ref die)
6363 {
6364   dw_die_ref *ptr;
6365   dw_die_ref unit = NULL;
6366   limbo_die_node *node, **pnode;
6367   htab_t cu_hash_table;
6368
6369   for (ptr = &(die->die_child); *ptr;)
6370     {
6371       dw_die_ref c = *ptr;
6372
6373       if (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
6374           || (unit && is_comdat_die (c)))
6375         {
6376           /* This DIE is for a secondary CU; remove it from the main one.  */
6377           *ptr = c->die_sib;
6378
6379           if (c->die_tag == DW_TAG_GNU_BINCL)
6380             {
6381               unit = push_new_compile_unit (unit, c);
6382               free_die (c);
6383             }
6384           else if (c->die_tag == DW_TAG_GNU_EINCL)
6385             {
6386               unit = pop_compile_unit (unit);
6387               free_die (c);
6388             }
6389           else
6390             add_child_die (unit, c);
6391         }
6392       else
6393         {
6394           /* Leave this DIE in the main CU.  */
6395           ptr = &(c->die_sib);
6396           continue;
6397         }
6398     }
6399
6400 #if 0
6401   /* We can only use this in debugging, since the frontend doesn't check
6402      to make sure that we leave every include file we enter.  */
6403   gcc_assert (!unit);
6404 #endif
6405
6406   assign_symbol_names (die);
6407   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
6408   for (node = limbo_die_list, pnode = &limbo_die_list;
6409        node;
6410        node = node->next)
6411     {
6412       int is_dupl;
6413
6414       compute_section_prefix (node->die);
6415       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
6416                         &comdat_symbol_number);
6417       assign_symbol_names (node->die);
6418       if (is_dupl)
6419         *pnode = node->next;
6420       else
6421         {
6422           pnode = &node->next;
6423           record_comdat_symbol_number (node->die, cu_hash_table,
6424                 comdat_symbol_number);
6425         }
6426     }
6427   htab_delete (cu_hash_table);
6428 }
6429
6430 /* Traverse the DIE and add a sibling attribute if it may have the
6431    effect of speeding up access to siblings.  To save some space,
6432    avoid generating sibling attributes for DIE's without children.  */
6433
6434 static void
6435 add_sibling_attributes (dw_die_ref die)
6436 {
6437   dw_die_ref c;
6438
6439   if (die->die_tag != DW_TAG_compile_unit
6440       && die->die_sib && die->die_child != NULL)
6441     /* Add the sibling link to the front of the attribute list.  */
6442     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
6443
6444   for (c = die->die_child; c != NULL; c = c->die_sib)
6445     add_sibling_attributes (c);
6446 }
6447
6448 /* Output all location lists for the DIE and its children.  */
6449
6450 static void
6451 output_location_lists (dw_die_ref die)
6452 {
6453   dw_die_ref c;
6454   dw_attr_ref d_attr;
6455
6456   for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6457     if (AT_class (d_attr) == dw_val_class_loc_list)
6458       output_loc_list (AT_loc_list (d_attr));
6459
6460   for (c = die->die_child; c != NULL; c = c->die_sib)
6461     output_location_lists (c);
6462
6463 }
6464
6465 /* The format of each DIE (and its attribute value pairs) is encoded in an
6466    abbreviation table.  This routine builds the abbreviation table and assigns
6467    a unique abbreviation id for each abbreviation entry.  The children of each
6468    die are visited recursively.  */
6469
6470 static void
6471 build_abbrev_table (dw_die_ref die)
6472 {
6473   unsigned long abbrev_id;
6474   unsigned int n_alloc;
6475   dw_die_ref c;
6476   dw_attr_ref d_attr, a_attr;
6477
6478   /* Scan the DIE references, and mark as external any that refer to
6479      DIEs from other CUs (i.e. those which are not marked).  */
6480   for (d_attr = die->die_attr; d_attr; d_attr = d_attr->dw_attr_next)
6481     if (AT_class (d_attr) == dw_val_class_die_ref
6482         && AT_ref (d_attr)->die_mark == 0)
6483       {
6484         gcc_assert (AT_ref (d_attr)->die_symbol);
6485
6486         set_AT_ref_external (d_attr, 1);
6487       }
6488
6489   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6490     {
6491       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6492
6493       if (abbrev->die_tag == die->die_tag)
6494         {
6495           if ((abbrev->die_child != NULL) == (die->die_child != NULL))
6496             {
6497               a_attr = abbrev->die_attr;
6498               d_attr = die->die_attr;
6499
6500               while (a_attr != NULL && d_attr != NULL)
6501                 {
6502                   if ((a_attr->dw_attr != d_attr->dw_attr)
6503                       || (value_format (a_attr) != value_format (d_attr)))
6504                     break;
6505
6506                   a_attr = a_attr->dw_attr_next;
6507                   d_attr = d_attr->dw_attr_next;
6508                 }
6509
6510               if (a_attr == NULL && d_attr == NULL)
6511                 break;
6512             }
6513         }
6514     }
6515
6516   if (abbrev_id >= abbrev_die_table_in_use)
6517     {
6518       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
6519         {
6520           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
6521           abbrev_die_table = ggc_realloc (abbrev_die_table,
6522                                           sizeof (dw_die_ref) * n_alloc);
6523
6524           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
6525                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
6526           abbrev_die_table_allocated = n_alloc;
6527         }
6528
6529       ++abbrev_die_table_in_use;
6530       abbrev_die_table[abbrev_id] = die;
6531     }
6532
6533   die->die_abbrev = abbrev_id;
6534   for (c = die->die_child; c != NULL; c = c->die_sib)
6535     build_abbrev_table (c);
6536 }
6537 \f
6538 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
6539
6540 static int
6541 constant_size (long unsigned int value)
6542 {
6543   int log;
6544
6545   if (value == 0)
6546     log = 0;
6547   else
6548     log = floor_log2 (value);
6549
6550   log = log / 8;
6551   log = 1 << (floor_log2 (log) + 1);
6552
6553   return log;
6554 }
6555
6556 /* Return the size of a DIE as it is represented in the
6557    .debug_info section.  */
6558
6559 static unsigned long
6560 size_of_die (dw_die_ref die)
6561 {
6562   unsigned long size = 0;
6563   dw_attr_ref a;
6564
6565   size += size_of_uleb128 (die->die_abbrev);
6566   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6567     {
6568       switch (AT_class (a))
6569         {
6570         case dw_val_class_addr:
6571           size += DWARF2_ADDR_SIZE;
6572           break;
6573         case dw_val_class_offset:
6574           size += DWARF_OFFSET_SIZE;
6575           break;
6576         case dw_val_class_loc:
6577           {
6578             unsigned long lsize = size_of_locs (AT_loc (a));
6579
6580             /* Block length.  */
6581             size += constant_size (lsize);
6582             size += lsize;
6583           }
6584           break;
6585         case dw_val_class_loc_list:
6586           size += DWARF_OFFSET_SIZE;
6587           break;
6588         case dw_val_class_range_list:
6589           size += DWARF_OFFSET_SIZE;
6590           break;
6591         case dw_val_class_const:
6592           size += size_of_sleb128 (AT_int (a));
6593           break;
6594         case dw_val_class_unsigned_const:
6595           size += constant_size (AT_unsigned (a));
6596           break;
6597         case dw_val_class_long_long:
6598           size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
6599           break;
6600         case dw_val_class_vec:
6601           size += 1 + (a->dw_attr_val.v.val_vec.length
6602                        * a->dw_attr_val.v.val_vec.elt_size); /* block */
6603           break;
6604         case dw_val_class_flag:
6605           size += 1;
6606           break;
6607         case dw_val_class_die_ref:
6608           if (AT_ref_external (a))
6609             size += DWARF2_ADDR_SIZE;
6610           else
6611             size += DWARF_OFFSET_SIZE;
6612           break;
6613         case dw_val_class_fde_ref:
6614           size += DWARF_OFFSET_SIZE;
6615           break;
6616         case dw_val_class_lbl_id:
6617           size += DWARF2_ADDR_SIZE;
6618           break;
6619         case dw_val_class_lbl_offset:
6620           size += DWARF_OFFSET_SIZE;
6621           break;
6622         case dw_val_class_str:
6623           if (AT_string_form (a) == DW_FORM_strp)
6624             size += DWARF_OFFSET_SIZE;
6625           else
6626             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
6627           break;
6628         default:
6629           gcc_unreachable ();
6630         }
6631     }
6632
6633   return size;
6634 }
6635
6636 /* Size the debugging information associated with a given DIE.  Visits the
6637    DIE's children recursively.  Updates the global variable next_die_offset, on
6638    each time through.  Uses the current value of next_die_offset to update the
6639    die_offset field in each DIE.  */
6640
6641 static void
6642 calc_die_sizes (dw_die_ref die)
6643 {
6644   dw_die_ref c;
6645
6646   die->die_offset = next_die_offset;
6647   next_die_offset += size_of_die (die);
6648
6649   for (c = die->die_child; c != NULL; c = c->die_sib)
6650     calc_die_sizes (c);
6651
6652   if (die->die_child != NULL)
6653     /* Count the null byte used to terminate sibling lists.  */
6654     next_die_offset += 1;
6655 }
6656
6657 /* Set the marks for a die and its children.  We do this so
6658    that we know whether or not a reference needs to use FORM_ref_addr; only
6659    DIEs in the same CU will be marked.  We used to clear out the offset
6660    and use that as the flag, but ran into ordering problems.  */
6661
6662 static void
6663 mark_dies (dw_die_ref die)
6664 {
6665   dw_die_ref c;
6666
6667   gcc_assert (!die->die_mark);
6668
6669   die->die_mark = 1;
6670   for (c = die->die_child; c; c = c->die_sib)
6671     mark_dies (c);
6672 }
6673
6674 /* Clear the marks for a die and its children.  */
6675
6676 static void
6677 unmark_dies (dw_die_ref die)
6678 {
6679   dw_die_ref c;
6680
6681   gcc_assert (die->die_mark);
6682
6683   die->die_mark = 0;
6684   for (c = die->die_child; c; c = c->die_sib)
6685     unmark_dies (c);
6686 }
6687
6688 /* Clear the marks for a die, its children and referred dies.  */
6689
6690 static void
6691 unmark_all_dies (dw_die_ref die)
6692 {
6693   dw_die_ref c;
6694   dw_attr_ref a;
6695
6696   if (!die->die_mark)
6697     return;
6698   die->die_mark = 0;
6699
6700   for (c = die->die_child; c; c = c->die_sib)
6701     unmark_all_dies (c);
6702
6703   for (a = die->die_attr; a; a = a->dw_attr_next)
6704     if (AT_class (a) == dw_val_class_die_ref)
6705       unmark_all_dies (AT_ref (a));
6706 }
6707
6708 /* Return the size of the .debug_pubnames table  generated for the
6709    compilation unit.  */
6710
6711 static unsigned long
6712 size_of_pubnames (void)
6713 {
6714   unsigned long size;
6715   unsigned i;
6716
6717   size = DWARF_PUBNAMES_HEADER_SIZE;
6718   for (i = 0; i < pubname_table_in_use; i++)
6719     {
6720       pubname_ref p = &pubname_table[i];
6721       size += DWARF_OFFSET_SIZE + strlen (p->name) + 1;
6722     }
6723
6724   size += DWARF_OFFSET_SIZE;
6725   return size;
6726 }
6727
6728 /* Return the size of the information in the .debug_aranges section.  */
6729
6730 static unsigned long
6731 size_of_aranges (void)
6732 {
6733   unsigned long size;
6734
6735   size = DWARF_ARANGES_HEADER_SIZE;
6736
6737   /* Count the address/length pair for this compilation unit.  */
6738   size += 2 * DWARF2_ADDR_SIZE;
6739   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
6740
6741   /* Count the two zero words used to terminated the address range table.  */
6742   size += 2 * DWARF2_ADDR_SIZE;
6743   return size;
6744 }
6745 \f
6746 /* Select the encoding of an attribute value.  */
6747
6748 static enum dwarf_form
6749 value_format (dw_attr_ref a)
6750 {
6751   switch (a->dw_attr_val.val_class)
6752     {
6753     case dw_val_class_addr:
6754       return DW_FORM_addr;
6755     case dw_val_class_range_list:
6756     case dw_val_class_offset:
6757       switch (DWARF_OFFSET_SIZE)
6758         {
6759         case 4:
6760           return DW_FORM_data4;
6761         case 8:
6762           return DW_FORM_data8;
6763         default:
6764           gcc_unreachable ();
6765         }
6766     case dw_val_class_loc_list:
6767       /* FIXME: Could be DW_FORM_data8, with a > 32 bit size
6768          .debug_loc section */
6769       return DW_FORM_data4;
6770     case dw_val_class_loc:
6771       switch (constant_size (size_of_locs (AT_loc (a))))
6772         {
6773         case 1:
6774           return DW_FORM_block1;
6775         case 2:
6776           return DW_FORM_block2;
6777         default:
6778           gcc_unreachable ();
6779         }
6780     case dw_val_class_const:
6781       return DW_FORM_sdata;
6782     case dw_val_class_unsigned_const:
6783       switch (constant_size (AT_unsigned (a)))
6784         {
6785         case 1:
6786           return DW_FORM_data1;
6787         case 2:
6788           return DW_FORM_data2;
6789         case 4:
6790           return DW_FORM_data4;
6791         case 8:
6792           return DW_FORM_data8;
6793         default:
6794           gcc_unreachable ();
6795         }
6796     case dw_val_class_long_long:
6797       return DW_FORM_block1;
6798     case dw_val_class_vec:
6799       return DW_FORM_block1;
6800     case dw_val_class_flag:
6801       return DW_FORM_flag;
6802     case dw_val_class_die_ref:
6803       if (AT_ref_external (a))
6804         return DW_FORM_ref_addr;
6805       else
6806         return DW_FORM_ref;
6807     case dw_val_class_fde_ref:
6808       return DW_FORM_data;
6809     case dw_val_class_lbl_id:
6810       return DW_FORM_addr;
6811     case dw_val_class_lbl_offset:
6812       return DW_FORM_data;
6813     case dw_val_class_str:
6814       return AT_string_form (a);
6815
6816     default:
6817       gcc_unreachable ();
6818     }
6819 }
6820
6821 /* Output the encoding of an attribute value.  */
6822
6823 static void
6824 output_value_format (dw_attr_ref a)
6825 {
6826   enum dwarf_form form = value_format (a);
6827
6828   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
6829 }
6830
6831 /* Output the .debug_abbrev section which defines the DIE abbreviation
6832    table.  */
6833
6834 static void
6835 output_abbrev_section (void)
6836 {
6837   unsigned long abbrev_id;
6838
6839   dw_attr_ref a_attr;
6840
6841   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
6842     {
6843       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
6844
6845       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
6846       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
6847                                    dwarf_tag_name (abbrev->die_tag));
6848
6849       if (abbrev->die_child != NULL)
6850         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
6851       else
6852         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
6853
6854       for (a_attr = abbrev->die_attr; a_attr != NULL;
6855            a_attr = a_attr->dw_attr_next)
6856         {
6857           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
6858                                        dwarf_attr_name (a_attr->dw_attr));
6859           output_value_format (a_attr);
6860         }
6861
6862       dw2_asm_output_data (1, 0, NULL);
6863       dw2_asm_output_data (1, 0, NULL);
6864     }
6865
6866   /* Terminate the table.  */
6867   dw2_asm_output_data (1, 0, NULL);
6868 }
6869
6870 /* Output a symbol we can use to refer to this DIE from another CU.  */
6871
6872 static inline void
6873 output_die_symbol (dw_die_ref die)
6874 {
6875   char *sym = die->die_symbol;
6876
6877   if (sym == 0)
6878     return;
6879
6880   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
6881     /* We make these global, not weak; if the target doesn't support
6882        .linkonce, it doesn't support combining the sections, so debugging
6883        will break.  */
6884     targetm.asm_out.globalize_label (asm_out_file, sym);
6885
6886   ASM_OUTPUT_LABEL (asm_out_file, sym);
6887 }
6888
6889 /* Return a new location list, given the begin and end range, and the
6890    expression. gensym tells us whether to generate a new internal symbol for
6891    this location list node, which is done for the head of the list only.  */
6892
6893 static inline dw_loc_list_ref
6894 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
6895               const char *section, unsigned int gensym)
6896 {
6897   dw_loc_list_ref retlist = ggc_alloc_cleared (sizeof (dw_loc_list_node));
6898
6899   retlist->begin = begin;
6900   retlist->end = end;
6901   retlist->expr = expr;
6902   retlist->section = section;
6903   if (gensym)
6904     retlist->ll_symbol = gen_internal_sym ("LLST");
6905
6906   return retlist;
6907 }
6908
6909 /* Add a location description expression to a location list.  */
6910
6911 static inline void
6912 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
6913                            const char *begin, const char *end,
6914                            const char *section)
6915 {
6916   dw_loc_list_ref *d;
6917
6918   /* Find the end of the chain.  */
6919   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
6920     ;
6921
6922   /* Add a new location list node to the list.  */
6923   *d = new_loc_list (descr, begin, end, section, 0);
6924 }
6925
6926 /* Output the location list given to us.  */
6927
6928 static void
6929 output_loc_list (dw_loc_list_ref list_head)
6930 {
6931   dw_loc_list_ref curr = list_head;
6932
6933   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
6934
6935   /* Walk the location list, and output each range + expression.  */
6936   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
6937     {
6938       unsigned long size;
6939       if (!separate_line_info_table_in_use && !have_switched_text_section)
6940         {
6941           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
6942                                 "Location list begin address (%s)",
6943                                 list_head->ll_symbol);
6944           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
6945                                 "Location list end address (%s)",
6946                                 list_head->ll_symbol);
6947         }
6948       else
6949         {
6950           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
6951                                "Location list begin address (%s)",
6952                                list_head->ll_symbol);
6953           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
6954                                "Location list end address (%s)",
6955                                list_head->ll_symbol);
6956         }
6957       size = size_of_locs (curr->expr);
6958
6959       /* Output the block length for this list of location operations.  */
6960       gcc_assert (size <= 0xffff);
6961       dw2_asm_output_data (2, size, "%s", "Location expression size");
6962
6963       output_loc_sequence (curr->expr);
6964     }
6965
6966   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6967                        "Location list terminator begin (%s)",
6968                        list_head->ll_symbol);
6969   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
6970                        "Location list terminator end (%s)",
6971                        list_head->ll_symbol);
6972 }
6973
6974 /* Output the DIE and its attributes.  Called recursively to generate
6975    the definitions of each child DIE.  */
6976
6977 static void
6978 output_die (dw_die_ref die)
6979 {
6980   dw_attr_ref a;
6981   dw_die_ref c;
6982   unsigned long size;
6983
6984   /* If someone in another CU might refer to us, set up a symbol for
6985      them to point to.  */
6986   if (die->die_symbol)
6987     output_die_symbol (die);
6988
6989   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
6990                                die->die_offset, dwarf_tag_name (die->die_tag));
6991
6992   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
6993     {
6994       const char *name = dwarf_attr_name (a->dw_attr);
6995
6996       switch (AT_class (a))
6997         {
6998         case dw_val_class_addr:
6999           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
7000           break;
7001
7002         case dw_val_class_offset:
7003           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
7004                                "%s", name);
7005           break;
7006
7007         case dw_val_class_range_list:
7008           {
7009             char *p = strchr (ranges_section_label, '\0');
7010
7011             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
7012                      a->dw_attr_val.v.val_offset);
7013             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
7014                                    "%s", name);
7015             *p = '\0';
7016           }
7017           break;
7018
7019         case dw_val_class_loc:
7020           size = size_of_locs (AT_loc (a));
7021
7022           /* Output the block length for this list of location operations.  */
7023           dw2_asm_output_data (constant_size (size), size, "%s", name);
7024
7025           output_loc_sequence (AT_loc (a));
7026           break;
7027
7028         case dw_val_class_const:
7029           /* ??? It would be slightly more efficient to use a scheme like is
7030              used for unsigned constants below, but gdb 4.x does not sign
7031              extend.  Gdb 5.x does sign extend.  */
7032           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
7033           break;
7034
7035         case dw_val_class_unsigned_const:
7036           dw2_asm_output_data (constant_size (AT_unsigned (a)),
7037                                AT_unsigned (a), "%s", name);
7038           break;
7039
7040         case dw_val_class_long_long:
7041           {
7042             unsigned HOST_WIDE_INT first, second;
7043
7044             dw2_asm_output_data (1,
7045                                  2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7046                                  "%s", name);
7047
7048             if (WORDS_BIG_ENDIAN)
7049               {
7050                 first = a->dw_attr_val.v.val_long_long.hi;
7051                 second = a->dw_attr_val.v.val_long_long.low;
7052               }
7053             else
7054               {
7055                 first = a->dw_attr_val.v.val_long_long.low;
7056                 second = a->dw_attr_val.v.val_long_long.hi;
7057               }
7058
7059             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7060                                  first, "long long constant");
7061             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
7062                                  second, NULL);
7063           }
7064           break;
7065
7066         case dw_val_class_vec:
7067           {
7068             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
7069             unsigned int len = a->dw_attr_val.v.val_vec.length;
7070             unsigned int i;
7071             unsigned char *p;
7072
7073             dw2_asm_output_data (1, len * elt_size, "%s", name);
7074             if (elt_size > sizeof (HOST_WIDE_INT))
7075               {
7076                 elt_size /= 2;
7077                 len *= 2;
7078               }
7079             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
7080                  i < len;
7081                  i++, p += elt_size)
7082               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
7083                                    "fp or vector constant word %u", i);
7084             break;
7085           }
7086
7087         case dw_val_class_flag:
7088           dw2_asm_output_data (1, AT_flag (a), "%s", name);
7089           break;
7090
7091         case dw_val_class_loc_list:
7092           {
7093             char *sym = AT_loc_list (a)->ll_symbol;
7094
7095             gcc_assert (sym);
7096             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, "%s", name);
7097           }
7098           break;
7099
7100         case dw_val_class_die_ref:
7101           if (AT_ref_external (a))
7102             {
7103               char *sym = AT_ref (a)->die_symbol;
7104
7105               gcc_assert (sym);
7106               dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, "%s", name);
7107             }
7108           else
7109             {
7110               gcc_assert (AT_ref (a)->die_offset);
7111               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
7112                                    "%s", name);
7113             }
7114           break;
7115
7116         case dw_val_class_fde_ref:
7117           {
7118             char l1[20];
7119
7120             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
7121                                          a->dw_attr_val.v.val_fde_index * 2);
7122             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, "%s", name);
7123           }
7124           break;
7125
7126         case dw_val_class_lbl_id:
7127           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
7128           break;
7129
7130         case dw_val_class_lbl_offset:
7131           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a), "%s", name);
7132           break;
7133
7134         case dw_val_class_str:
7135           if (AT_string_form (a) == DW_FORM_strp)
7136             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
7137                                    a->dw_attr_val.v.val_str->label,
7138                                    "%s: \"%s\"", name, AT_string (a));
7139           else
7140             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
7141           break;
7142
7143         default:
7144           gcc_unreachable ();
7145         }
7146     }
7147
7148   for (c = die->die_child; c != NULL; c = c->die_sib)
7149     output_die (c);
7150
7151   /* Add null byte to terminate sibling list.  */
7152   if (die->die_child != NULL)
7153     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
7154                          die->die_offset);
7155 }
7156
7157 /* Output the compilation unit that appears at the beginning of the
7158    .debug_info section, and precedes the DIE descriptions.  */
7159
7160 static void
7161 output_compilation_unit_header (void)
7162 {
7163   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7164     dw2_asm_output_data (4, 0xffffffff,
7165       "Initial length escape value indicating 64-bit DWARF extension");
7166   dw2_asm_output_data (DWARF_OFFSET_SIZE,
7167                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
7168                        "Length of Compilation Unit Info");
7169   dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
7170   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
7171                          "Offset Into Abbrev. Section");
7172   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
7173 }
7174
7175 /* Output the compilation unit DIE and its children.  */
7176
7177 static void
7178 output_comp_unit (dw_die_ref die, int output_if_empty)
7179 {
7180   const char *secname;
7181   char *oldsym, *tmp;
7182
7183   /* Unless we are outputting main CU, we may throw away empty ones.  */
7184   if (!output_if_empty && die->die_child == NULL)
7185     return;
7186
7187   /* Even if there are no children of this DIE, we must output the information
7188      about the compilation unit.  Otherwise, on an empty translation unit, we
7189      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
7190      will then complain when examining the file.  First mark all the DIEs in
7191      this CU so we know which get local refs.  */
7192   mark_dies (die);
7193
7194   build_abbrev_table (die);
7195
7196   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
7197   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
7198   calc_die_sizes (die);
7199
7200   oldsym = die->die_symbol;
7201   if (oldsym)
7202     {
7203       tmp = alloca (strlen (oldsym) + 24);
7204
7205       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
7206       secname = tmp;
7207       die->die_symbol = NULL;
7208     }
7209   else
7210     secname = (const char *) DEBUG_INFO_SECTION;
7211
7212   /* Output debugging information.  */
7213   named_section_flags (secname, SECTION_DEBUG);
7214   output_compilation_unit_header ();
7215   output_die (die);
7216
7217   /* Leave the marks on the main CU, so we can check them in
7218      output_pubnames.  */
7219   if (oldsym)
7220     {
7221       unmark_dies (die);
7222       die->die_symbol = oldsym;
7223     }
7224 }
7225
7226 /* The DWARF2 pubname for a nested thingy looks like "A::f".  The
7227    output of lang_hooks.decl_printable_name for C++ looks like
7228    "A::f(int)".  Let's drop the argument list, and maybe the scope.  */
7229
7230 static const char *
7231 dwarf2_name (tree decl, int scope)
7232 {
7233   return lang_hooks.decl_printable_name (decl, scope ? 1 : 0);
7234 }
7235
7236 /* Add a new entry to .debug_pubnames if appropriate.  */
7237
7238 static void
7239 add_pubname (tree decl, dw_die_ref die)
7240 {
7241   pubname_ref p;
7242
7243   if (! TREE_PUBLIC (decl))
7244     return;
7245
7246   if (pubname_table_in_use == pubname_table_allocated)
7247     {
7248       pubname_table_allocated += PUBNAME_TABLE_INCREMENT;
7249       pubname_table
7250         = ggc_realloc (pubname_table,
7251                        (pubname_table_allocated * sizeof (pubname_entry)));
7252       memset (pubname_table + pubname_table_in_use, 0,
7253               PUBNAME_TABLE_INCREMENT * sizeof (pubname_entry));
7254     }
7255
7256   p = &pubname_table[pubname_table_in_use++];
7257   p->die = die;
7258   p->name = xstrdup (dwarf2_name (decl, 1));
7259 }
7260
7261 /* Output the public names table used to speed up access to externally
7262    visible names.  For now, only generate entries for externally
7263    visible procedures.  */
7264
7265 static void
7266 output_pubnames (void)
7267 {
7268   unsigned i;
7269   unsigned long pubnames_length = size_of_pubnames ();
7270
7271   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7272     dw2_asm_output_data (4, 0xffffffff,
7273       "Initial length escape value indicating 64-bit DWARF extension");
7274   dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
7275                        "Length of Public Names Info");
7276   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7277   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7278                          "Offset of Compilation Unit Info");
7279   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
7280                        "Compilation Unit Length");
7281
7282   for (i = 0; i < pubname_table_in_use; i++)
7283     {
7284       pubname_ref pub = &pubname_table[i];
7285
7286       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
7287       gcc_assert (pub->die->die_mark);
7288
7289       dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
7290                            "DIE offset");
7291
7292       dw2_asm_output_nstring (pub->name, -1, "external name");
7293     }
7294
7295   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
7296 }
7297
7298 /* Add a new entry to .debug_aranges if appropriate.  */
7299
7300 static void
7301 add_arange (tree decl, dw_die_ref die)
7302 {
7303   if (! DECL_SECTION_NAME (decl))
7304     return;
7305
7306   if (arange_table_in_use == arange_table_allocated)
7307     {
7308       arange_table_allocated += ARANGE_TABLE_INCREMENT;
7309       arange_table = ggc_realloc (arange_table,
7310                                   (arange_table_allocated
7311                                    * sizeof (dw_die_ref)));
7312       memset (arange_table + arange_table_in_use, 0,
7313               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
7314     }
7315
7316   arange_table[arange_table_in_use++] = die;
7317 }
7318
7319 /* Output the information that goes into the .debug_aranges table.
7320    Namely, define the beginning and ending address range of the
7321    text section generated for this compilation unit.  */
7322
7323 static void
7324 output_aranges (void)
7325 {
7326   unsigned i;
7327   unsigned long aranges_length = size_of_aranges ();
7328
7329   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7330     dw2_asm_output_data (4, 0xffffffff,
7331       "Initial length escape value indicating 64-bit DWARF extension");
7332   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
7333                        "Length of Address Ranges Info");
7334   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7335   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
7336                          "Offset of Compilation Unit Info");
7337   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
7338   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
7339
7340   /* We need to align to twice the pointer size here.  */
7341   if (DWARF_ARANGES_PAD_SIZE)
7342     {
7343       /* Pad using a 2 byte words so that padding is correct for any
7344          pointer size.  */
7345       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
7346                            2 * DWARF2_ADDR_SIZE);
7347       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
7348         dw2_asm_output_data (2, 0, NULL);
7349     }
7350
7351   dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
7352   dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
7353                         text_section_label, "Length");
7354   if (flag_reorder_blocks_and_partition)
7355     {
7356       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label, 
7357                            "Address");
7358       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
7359                             cold_text_section_label, "Length");
7360     }
7361
7362   for (i = 0; i < arange_table_in_use; i++)
7363     {
7364       dw_die_ref die = arange_table[i];
7365
7366       /* We shouldn't see aranges for DIEs outside of the main CU.  */
7367       gcc_assert (die->die_mark);
7368
7369       if (die->die_tag == DW_TAG_subprogram)
7370         {
7371           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
7372                                "Address");
7373           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
7374                                 get_AT_low_pc (die), "Length");
7375         }
7376       else
7377         {
7378           /* A static variable; extract the symbol from DW_AT_location.
7379              Note that this code isn't currently hit, as we only emit
7380              aranges for functions (jason 9/23/99).  */
7381           dw_attr_ref a = get_AT (die, DW_AT_location);
7382           dw_loc_descr_ref loc;
7383
7384           gcc_assert (a && AT_class (a) == dw_val_class_loc);
7385
7386           loc = AT_loc (a);
7387           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
7388
7389           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
7390                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
7391           dw2_asm_output_data (DWARF2_ADDR_SIZE,
7392                                get_AT_unsigned (die, DW_AT_byte_size),
7393                                "Length");
7394         }
7395     }
7396
7397   /* Output the terminator words.  */
7398   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7399   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7400 }
7401
7402 /* Add a new entry to .debug_ranges.  Return the offset at which it
7403    was placed.  */
7404
7405 static unsigned int
7406 add_ranges (tree block)
7407 {
7408   unsigned int in_use = ranges_table_in_use;
7409
7410   if (in_use == ranges_table_allocated)
7411     {
7412       ranges_table_allocated += RANGES_TABLE_INCREMENT;
7413       ranges_table
7414         = ggc_realloc (ranges_table, (ranges_table_allocated
7415                                       * sizeof (struct dw_ranges_struct)));
7416       memset (ranges_table + ranges_table_in_use, 0,
7417               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
7418     }
7419
7420   ranges_table[in_use].block_num = (block ? BLOCK_NUMBER (block) : 0);
7421   ranges_table_in_use = in_use + 1;
7422
7423   return in_use * 2 * DWARF2_ADDR_SIZE;
7424 }
7425
7426 static void
7427 output_ranges (void)
7428 {
7429   unsigned i;
7430   static const char *const start_fmt = "Offset 0x%x";
7431   const char *fmt = start_fmt;
7432
7433   for (i = 0; i < ranges_table_in_use; i++)
7434     {
7435       int block_num = ranges_table[i].block_num;
7436
7437       if (block_num)
7438         {
7439           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
7440           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
7441
7442           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
7443           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
7444
7445           /* If all code is in the text section, then the compilation
7446              unit base address defaults to DW_AT_low_pc, which is the
7447              base of the text section.  */
7448           if (!separate_line_info_table_in_use && !have_switched_text_section)
7449             {
7450               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
7451                                     text_section_label,
7452                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
7453               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
7454                                     text_section_label, NULL);
7455             }
7456
7457           /* Otherwise, we add a DW_AT_entry_pc attribute to force the
7458              compilation unit base address to zero, which allows us to
7459              use absolute addresses, and not worry about whether the
7460              target supports cross-section arithmetic.  */
7461           else
7462             {
7463               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
7464                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
7465               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
7466             }
7467
7468           fmt = NULL;
7469         }
7470       else
7471         {
7472           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7473           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
7474           fmt = start_fmt;
7475         }
7476     }
7477 }
7478
7479 /* Data structure containing information about input files.  */
7480 struct file_info
7481 {
7482   char *path;           /* Complete file name.  */
7483   char *fname;          /* File name part.  */
7484   int length;           /* Length of entire string.  */
7485   int file_idx;         /* Index in input file table.  */
7486   int dir_idx;          /* Index in directory table.  */
7487 };
7488
7489 /* Data structure containing information about directories with source
7490    files.  */
7491 struct dir_info
7492 {
7493   char *path;           /* Path including directory name.  */
7494   int length;           /* Path length.  */
7495   int prefix;           /* Index of directory entry which is a prefix.  */
7496   int count;            /* Number of files in this directory.  */
7497   int dir_idx;          /* Index of directory used as base.  */
7498   int used;             /* Used in the end?  */
7499 };
7500
7501 /* Callback function for file_info comparison.  We sort by looking at
7502    the directories in the path.  */
7503
7504 static int
7505 file_info_cmp (const void *p1, const void *p2)
7506 {
7507   const struct file_info *s1 = p1;
7508   const struct file_info *s2 = p2;
7509   unsigned char *cp1;
7510   unsigned char *cp2;
7511
7512   /* Take care of file names without directories.  We need to make sure that
7513      we return consistent values to qsort since some will get confused if
7514      we return the same value when identical operands are passed in opposite
7515      orders.  So if neither has a directory, return 0 and otherwise return
7516      1 or -1 depending on which one has the directory.  */
7517   if ((s1->path == s1->fname || s2->path == s2->fname))
7518     return (s2->path == s2->fname) - (s1->path == s1->fname);
7519
7520   cp1 = (unsigned char *) s1->path;
7521   cp2 = (unsigned char *) s2->path;
7522
7523   while (1)
7524     {
7525       ++cp1;
7526       ++cp2;
7527       /* Reached the end of the first path?  If so, handle like above.  */
7528       if ((cp1 == (unsigned char *) s1->fname)
7529           || (cp2 == (unsigned char *) s2->fname))
7530         return ((cp2 == (unsigned char *) s2->fname)
7531                 - (cp1 == (unsigned char *) s1->fname));
7532
7533       /* Character of current path component the same?  */
7534       else if (*cp1 != *cp2)
7535         return *cp1 - *cp2;
7536     }
7537 }
7538
7539 /* Output the directory table and the file name table.  We try to minimize
7540    the total amount of memory needed.  A heuristic is used to avoid large
7541    slowdowns with many input files.  */
7542
7543 static void
7544 output_file_names (void)
7545 {
7546   struct file_info *files;
7547   struct dir_info *dirs;
7548   int *saved;
7549   int *savehere;
7550   int *backmap;
7551   size_t ndirs;
7552   int idx_offset;
7553   size_t i;
7554   int idx;
7555
7556   /* Handle the case where file_table is empty.  */
7557   if (VARRAY_ACTIVE_SIZE (file_table) <= 1)
7558     {
7559       dw2_asm_output_data (1, 0, "End directory table");
7560       dw2_asm_output_data (1, 0, "End file name table");
7561       return;
7562     }
7563
7564   /* Allocate the various arrays we need.  */
7565   files = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct file_info));
7566   dirs = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (struct dir_info));
7567
7568   /* Sort the file names.  */
7569   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7570     {
7571       char *f;
7572
7573       /* Skip all leading "./".  */
7574       f = VARRAY_CHAR_PTR (file_table, i);
7575       while (f[0] == '.' && f[1] == '/')
7576         f += 2;
7577
7578       /* Create a new array entry.  */
7579       files[i].path = f;
7580       files[i].length = strlen (f);
7581       files[i].file_idx = i;
7582
7583       /* Search for the file name part.  */
7584       f = strrchr (f, '/');
7585       files[i].fname = f == NULL ? files[i].path : f + 1;
7586     }
7587
7588   qsort (files + 1, VARRAY_ACTIVE_SIZE (file_table) - 1,
7589          sizeof (files[0]), file_info_cmp);
7590
7591   /* Find all the different directories used.  */
7592   dirs[0].path = files[1].path;
7593   dirs[0].length = files[1].fname - files[1].path;
7594   dirs[0].prefix = -1;
7595   dirs[0].count = 1;
7596   dirs[0].dir_idx = 0;
7597   dirs[0].used = 0;
7598   files[1].dir_idx = 0;
7599   ndirs = 1;
7600
7601   for (i = 2; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7602     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
7603         && memcmp (dirs[ndirs - 1].path, files[i].path,
7604                    dirs[ndirs - 1].length) == 0)
7605       {
7606         /* Same directory as last entry.  */
7607         files[i].dir_idx = ndirs - 1;
7608         ++dirs[ndirs - 1].count;
7609       }
7610     else
7611       {
7612         size_t j;
7613
7614         /* This is a new directory.  */
7615         dirs[ndirs].path = files[i].path;
7616         dirs[ndirs].length = files[i].fname - files[i].path;
7617         dirs[ndirs].count = 1;
7618         dirs[ndirs].dir_idx = ndirs;
7619         dirs[ndirs].used = 0;
7620         files[i].dir_idx = ndirs;
7621
7622         /* Search for a prefix.  */
7623         dirs[ndirs].prefix = -1;
7624         for (j = 0; j < ndirs; j++)
7625           if (dirs[j].length < dirs[ndirs].length
7626               && dirs[j].length > 1
7627               && (dirs[ndirs].prefix == -1
7628                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
7629               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
7630             dirs[ndirs].prefix = j;
7631
7632         ++ndirs;
7633       }
7634
7635   /* Now to the actual work.  We have to find a subset of the directories which
7636      allow expressing the file name using references to the directory table
7637      with the least amount of characters.  We do not do an exhaustive search
7638      where we would have to check out every combination of every single
7639      possible prefix.  Instead we use a heuristic which provides nearly optimal
7640      results in most cases and never is much off.  */
7641   saved = alloca (ndirs * sizeof (int));
7642   savehere = alloca (ndirs * sizeof (int));
7643
7644   memset (saved, '\0', ndirs * sizeof (saved[0]));
7645   for (i = 0; i < ndirs; i++)
7646     {
7647       size_t j;
7648       int total;
7649
7650       /* We can always save some space for the current directory.  But this
7651          does not mean it will be enough to justify adding the directory.  */
7652       savehere[i] = dirs[i].length;
7653       total = (savehere[i] - saved[i]) * dirs[i].count;
7654
7655       for (j = i + 1; j < ndirs; j++)
7656         {
7657           savehere[j] = 0;
7658           if (saved[j] < dirs[i].length)
7659             {
7660               /* Determine whether the dirs[i] path is a prefix of the
7661                  dirs[j] path.  */
7662               int k;
7663
7664               k = dirs[j].prefix;
7665               while (k != -1 && k != (int) i)
7666                 k = dirs[k].prefix;
7667
7668               if (k == (int) i)
7669                 {
7670                   /* Yes it is.  We can possibly safe some memory but
7671                      writing the filenames in dirs[j] relative to
7672                      dirs[i].  */
7673                   savehere[j] = dirs[i].length;
7674                   total += (savehere[j] - saved[j]) * dirs[j].count;
7675                 }
7676             }
7677         }
7678
7679       /* Check whether we can safe enough to justify adding the dirs[i]
7680          directory.  */
7681       if (total > dirs[i].length + 1)
7682         {
7683           /* It's worthwhile adding.  */
7684           for (j = i; j < ndirs; j++)
7685             if (savehere[j] > 0)
7686               {
7687                 /* Remember how much we saved for this directory so far.  */
7688                 saved[j] = savehere[j];
7689
7690                 /* Remember the prefix directory.  */
7691                 dirs[j].dir_idx = i;
7692               }
7693         }
7694     }
7695
7696   /* We have to emit them in the order they appear in the file_table array
7697      since the index is used in the debug info generation.  To do this
7698      efficiently we generate a back-mapping of the indices first.  */
7699   backmap = alloca (VARRAY_ACTIVE_SIZE (file_table) * sizeof (int));
7700   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7701     {
7702       backmap[files[i].file_idx] = i;
7703
7704       /* Mark this directory as used.  */
7705       dirs[dirs[files[i].dir_idx].dir_idx].used = 1;
7706     }
7707
7708   /* That was it.  We are ready to emit the information.  First emit the
7709      directory name table.  We have to make sure the first actually emitted
7710      directory name has index one; zero is reserved for the current working
7711      directory.  Make sure we do not confuse these indices with the one for the
7712      constructed table (even though most of the time they are identical).  */
7713   idx = 1;
7714   idx_offset = dirs[0].length > 0 ? 1 : 0;
7715   for (i = 1 - idx_offset; i < ndirs; i++)
7716     if (dirs[i].used != 0)
7717       {
7718         dirs[i].used = idx++;
7719         dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
7720                                 "Directory Entry: 0x%x", dirs[i].used);
7721       }
7722
7723   dw2_asm_output_data (1, 0, "End directory table");
7724
7725   /* Correct the index for the current working directory entry if it
7726      exists.  */
7727   if (idx_offset == 0)
7728     dirs[0].used = 0;
7729
7730   /* Now write all the file names.  */
7731   for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
7732     {
7733       int file_idx = backmap[i];
7734       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
7735
7736       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
7737                               "File Entry: 0x%lx", (unsigned long) i);
7738
7739       /* Include directory index.  */
7740       dw2_asm_output_data_uleb128 (dirs[dir_idx].used, NULL);
7741
7742       /* Modification time.  */
7743       dw2_asm_output_data_uleb128 (0, NULL);
7744
7745       /* File length in bytes.  */
7746       dw2_asm_output_data_uleb128 (0, NULL);
7747     }
7748
7749   dw2_asm_output_data (1, 0, "End file name table");
7750 }
7751
7752
7753 /* Output the source line number correspondence information.  This
7754    information goes into the .debug_line section.  */
7755
7756 static void
7757 output_line_info (void)
7758 {
7759   char l1[20], l2[20], p1[20], p2[20];
7760   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7761   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
7762   unsigned opc;
7763   unsigned n_op_args;
7764   unsigned long lt_index;
7765   unsigned long current_line;
7766   long line_offset;
7767   long line_delta;
7768   unsigned long current_file;
7769   unsigned long function;
7770
7771   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
7772   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
7773   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
7774   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
7775
7776   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
7777     dw2_asm_output_data (4, 0xffffffff,
7778       "Initial length escape value indicating 64-bit DWARF extension");
7779   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
7780                         "Length of Source Line Info");
7781   ASM_OUTPUT_LABEL (asm_out_file, l1);
7782
7783   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
7784   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
7785   ASM_OUTPUT_LABEL (asm_out_file, p1);
7786
7787   /* Define the architecture-dependent minimum instruction length (in
7788    bytes).  In this implementation of DWARF, this field is used for
7789    information purposes only.  Since GCC generates assembly language,
7790    we have no a priori knowledge of how many instruction bytes are
7791    generated for each source line, and therefore can use only the
7792    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
7793    commands.  Accordingly, we fix this as `1', which is "correct
7794    enough" for all architectures, and don't let the target override.  */
7795   dw2_asm_output_data (1, 1,
7796                        "Minimum Instruction Length");
7797
7798   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
7799                        "Default is_stmt_start flag");
7800   dw2_asm_output_data (1, DWARF_LINE_BASE,
7801                        "Line Base Value (Special Opcodes)");
7802   dw2_asm_output_data (1, DWARF_LINE_RANGE,
7803                        "Line Range Value (Special Opcodes)");
7804   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
7805                        "Special Opcode Base");
7806
7807   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
7808     {
7809       switch (opc)
7810         {
7811         case DW_LNS_advance_pc:
7812         case DW_LNS_advance_line:
7813         case DW_LNS_set_file:
7814         case DW_LNS_set_column:
7815         case DW_LNS_fixed_advance_pc:
7816           n_op_args = 1;
7817           break;
7818         default:
7819           n_op_args = 0;
7820           break;
7821         }
7822
7823       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
7824                            opc, n_op_args);
7825     }
7826
7827   /* Write out the information about the files we use.  */
7828   output_file_names ();
7829   ASM_OUTPUT_LABEL (asm_out_file, p2);
7830
7831   /* We used to set the address register to the first location in the text
7832      section here, but that didn't accomplish anything since we already
7833      have a line note for the opening brace of the first function.  */
7834
7835   /* Generate the line number to PC correspondence table, encoded as
7836      a series of state machine operations.  */
7837   current_file = 1;
7838   current_line = 1;
7839
7840   if (cfun
7841       && (last_text_section == in_unlikely_executed_text
7842           || (last_text_section == in_named
7843               && last_text_section_name == cfun->unlikely_text_section_name)))
7844     strcpy (prev_line_label, cfun->cold_section_label);
7845   else
7846     strcpy (prev_line_label, text_section_label);
7847   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
7848     {
7849       dw_line_info_ref line_info = &line_info_table[lt_index];
7850
7851 #if 0
7852       /* Disable this optimization for now; GDB wants to see two line notes
7853          at the beginning of a function so it can find the end of the
7854          prologue.  */
7855
7856       /* Don't emit anything for redundant notes.  Just updating the
7857          address doesn't accomplish anything, because we already assume
7858          that anything after the last address is this line.  */
7859       if (line_info->dw_line_num == current_line
7860           && line_info->dw_file_num == current_file)
7861         continue;
7862 #endif
7863
7864       /* Emit debug info for the address of the current line.
7865
7866          Unfortunately, we have little choice here currently, and must always
7867          use the most general form.  GCC does not know the address delta
7868          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
7869          attributes which will give an upper bound on the address range.  We
7870          could perhaps use length attributes to determine when it is safe to
7871          use DW_LNS_fixed_advance_pc.  */
7872
7873       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
7874       if (0)
7875         {
7876           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
7877           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7878                                "DW_LNS_fixed_advance_pc");
7879           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7880         }
7881       else
7882         {
7883           /* This can handle any delta.  This takes
7884              4+DWARF2_ADDR_SIZE bytes.  */
7885           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7886           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7887           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7888           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7889         }
7890
7891       strcpy (prev_line_label, line_label);
7892
7893       /* Emit debug info for the source file of the current line, if
7894          different from the previous line.  */
7895       if (line_info->dw_file_num != current_file)
7896         {
7897           current_file = line_info->dw_file_num;
7898           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
7899           dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
7900                                        VARRAY_CHAR_PTR (file_table,
7901                                                         current_file));
7902         }
7903
7904       /* Emit debug info for the current line number, choosing the encoding
7905          that uses the least amount of space.  */
7906       if (line_info->dw_line_num != current_line)
7907         {
7908           line_offset = line_info->dw_line_num - current_line;
7909           line_delta = line_offset - DWARF_LINE_BASE;
7910           current_line = line_info->dw_line_num;
7911           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
7912             /* This can handle deltas from -10 to 234, using the current
7913                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
7914                takes 1 byte.  */
7915             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
7916                                  "line %lu", current_line);
7917           else
7918             {
7919               /* This can handle any delta.  This takes at least 4 bytes,
7920                  depending on the value being encoded.  */
7921               dw2_asm_output_data (1, DW_LNS_advance_line,
7922                                    "advance to line %lu", current_line);
7923               dw2_asm_output_data_sleb128 (line_offset, NULL);
7924               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7925             }
7926         }
7927       else
7928         /* We still need to start a new row, so output a copy insn.  */
7929         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
7930     }
7931
7932   /* Emit debug info for the address of the end of the function.  */
7933   if (0)
7934     {
7935       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7936                            "DW_LNS_fixed_advance_pc");
7937       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
7938     }
7939   else
7940     {
7941       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7942       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7943       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7944       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
7945     }
7946
7947   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
7948   dw2_asm_output_data_uleb128 (1, NULL);
7949   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
7950
7951   function = 0;
7952   current_file = 1;
7953   current_line = 1;
7954   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
7955     {
7956       dw_separate_line_info_ref line_info
7957         = &separate_line_info_table[lt_index];
7958
7959 #if 0
7960       /* Don't emit anything for redundant notes.  */
7961       if (line_info->dw_line_num == current_line
7962           && line_info->dw_file_num == current_file
7963           && line_info->function == function)
7964         goto cont;
7965 #endif
7966
7967       /* Emit debug info for the address of the current line.  If this is
7968          a new function, or the first line of a function, then we need
7969          to handle it differently.  */
7970       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
7971                                    lt_index);
7972       if (function != line_info->function)
7973         {
7974           function = line_info->function;
7975
7976           /* Set the address register to the first line in the function.  */
7977           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7978           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7979           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7980           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7981         }
7982       else
7983         {
7984           /* ??? See the DW_LNS_advance_pc comment above.  */
7985           if (0)
7986             {
7987               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
7988                                    "DW_LNS_fixed_advance_pc");
7989               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
7990             }
7991           else
7992             {
7993               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
7994               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
7995               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
7996               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
7997             }
7998         }
7999
8000       strcpy (prev_line_label, line_label);
8001
8002       /* Emit debug info for the source file of the current line, if
8003          different from the previous line.  */
8004       if (line_info->dw_file_num != current_file)
8005         {
8006           current_file = line_info->dw_file_num;
8007           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
8008           dw2_asm_output_data_uleb128 (current_file, "(\"%s\")",
8009                                        VARRAY_CHAR_PTR (file_table,
8010                                                         current_file));
8011         }
8012
8013       /* Emit debug info for the current line number, choosing the encoding
8014          that uses the least amount of space.  */
8015       if (line_info->dw_line_num != current_line)
8016         {
8017           line_offset = line_info->dw_line_num - current_line;
8018           line_delta = line_offset - DWARF_LINE_BASE;
8019           current_line = line_info->dw_line_num;
8020           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
8021             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
8022                                  "line %lu", current_line);
8023           else
8024             {
8025               dw2_asm_output_data (1, DW_LNS_advance_line,
8026                                    "advance to line %lu", current_line);
8027               dw2_asm_output_data_sleb128 (line_offset, NULL);
8028               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8029             }
8030         }
8031       else
8032         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
8033
8034 #if 0
8035     cont:
8036 #endif
8037
8038       lt_index++;
8039
8040       /* If we're done with a function, end its sequence.  */
8041       if (lt_index == separate_line_info_table_in_use
8042           || separate_line_info_table[lt_index].function != function)
8043         {
8044           current_file = 1;
8045           current_line = 1;
8046
8047           /* Emit debug info for the address of the end of the function.  */
8048           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
8049           if (0)
8050             {
8051               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
8052                                    "DW_LNS_fixed_advance_pc");
8053               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
8054             }
8055           else
8056             {
8057               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
8058               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
8059               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
8060               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
8061             }
8062
8063           /* Output the marker for the end of this sequence.  */
8064           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
8065           dw2_asm_output_data_uleb128 (1, NULL);
8066           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
8067         }
8068     }
8069
8070   /* Output the marker for the end of the line number info.  */
8071   ASM_OUTPUT_LABEL (asm_out_file, l2);
8072 }
8073 \f
8074 /* Given a pointer to a tree node for some base type, return a pointer to
8075    a DIE that describes the given type.
8076
8077    This routine must only be called for GCC type nodes that correspond to
8078    Dwarf base (fundamental) types.  */
8079
8080 static dw_die_ref
8081 base_type_die (tree type)
8082 {
8083   dw_die_ref base_type_result;
8084   const char *type_name;
8085   enum dwarf_type encoding;
8086   tree name = TYPE_NAME (type);
8087
8088   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
8089     return 0;
8090
8091   if (name)
8092     {
8093       if (TREE_CODE (name) == TYPE_DECL)
8094         name = DECL_NAME (name);
8095
8096       type_name = IDENTIFIER_POINTER (name);
8097     }
8098   else
8099     type_name = "__unknown__";
8100
8101   switch (TREE_CODE (type))
8102     {
8103     case INTEGER_TYPE:
8104       /* Carefully distinguish the C character types, without messing
8105          up if the language is not C. Note that we check only for the names
8106          that contain spaces; other names might occur by coincidence in other
8107          languages.  */
8108       if (! (TYPE_PRECISION (type) == CHAR_TYPE_SIZE
8109              && (TYPE_MAIN_VARIANT (type) == char_type_node
8110                  || ! strcmp (type_name, "signed char")
8111                  || ! strcmp (type_name, "unsigned char"))))
8112         {
8113           if (TYPE_UNSIGNED (type))
8114             encoding = DW_ATE_unsigned;
8115           else
8116             encoding = DW_ATE_signed;
8117           break;
8118         }
8119       /* else fall through.  */
8120
8121     case CHAR_TYPE:
8122       /* GNU Pascal/Ada CHAR type.  Not used in C.  */
8123       if (TYPE_UNSIGNED (type))
8124         encoding = DW_ATE_unsigned_char;
8125       else
8126         encoding = DW_ATE_signed_char;
8127       break;
8128
8129     case REAL_TYPE:
8130       encoding = DW_ATE_float;
8131       break;
8132
8133       /* Dwarf2 doesn't know anything about complex ints, so use
8134          a user defined type for it.  */
8135     case COMPLEX_TYPE:
8136       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
8137         encoding = DW_ATE_complex_float;
8138       else
8139         encoding = DW_ATE_lo_user;
8140       break;
8141
8142     case BOOLEAN_TYPE:
8143       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
8144       encoding = DW_ATE_boolean;
8145       break;
8146
8147     default:
8148       /* No other TREE_CODEs are Dwarf fundamental types.  */
8149       gcc_unreachable ();
8150     }
8151
8152   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
8153   if (demangle_name_func)
8154     type_name = (*demangle_name_func) (type_name);
8155
8156   add_AT_string (base_type_result, DW_AT_name, type_name);
8157   add_AT_unsigned (base_type_result, DW_AT_byte_size,
8158                    int_size_in_bytes (type));
8159   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
8160
8161   return base_type_result;
8162 }
8163
8164 /* Given a pointer to an arbitrary ..._TYPE tree node, return a pointer to
8165    the Dwarf "root" type for the given input type.  The Dwarf "root" type of
8166    a given type is generally the same as the given type, except that if the
8167    given type is a pointer or reference type, then the root type of the given
8168    type is the root type of the "basis" type for the pointer or reference
8169    type.  (This definition of the "root" type is recursive.) Also, the root
8170    type of a `const' qualified type or a `volatile' qualified type is the
8171    root type of the given type without the qualifiers.  */
8172
8173 static tree
8174 root_type (tree type)
8175 {
8176   if (TREE_CODE (type) == ERROR_MARK)
8177     return error_mark_node;
8178
8179   switch (TREE_CODE (type))
8180     {
8181     case ERROR_MARK:
8182       return error_mark_node;
8183
8184     case POINTER_TYPE:
8185     case REFERENCE_TYPE:
8186       return type_main_variant (root_type (TREE_TYPE (type)));
8187
8188     default:
8189       return type_main_variant (type);
8190     }
8191 }
8192
8193 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
8194    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
8195
8196 static inline int
8197 is_base_type (tree type)
8198 {
8199   switch (TREE_CODE (type))
8200     {
8201     case ERROR_MARK:
8202     case VOID_TYPE:
8203     case INTEGER_TYPE:
8204     case REAL_TYPE:
8205     case COMPLEX_TYPE:
8206     case BOOLEAN_TYPE:
8207     case CHAR_TYPE:
8208       return 1;
8209
8210     case ARRAY_TYPE:
8211     case RECORD_TYPE:
8212     case UNION_TYPE:
8213     case QUAL_UNION_TYPE:
8214     case ENUMERAL_TYPE:
8215     case FUNCTION_TYPE:
8216     case METHOD_TYPE:
8217     case POINTER_TYPE:
8218     case REFERENCE_TYPE:
8219     case OFFSET_TYPE:
8220     case LANG_TYPE:
8221     case VECTOR_TYPE:
8222       return 0;
8223
8224     default:
8225       gcc_unreachable ();
8226     }
8227
8228   return 0;
8229 }
8230
8231 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
8232    node, return the size in bits for the type if it is a constant, or else
8233    return the alignment for the type if the type's size is not constant, or
8234    else return BITS_PER_WORD if the type actually turns out to be an
8235    ERROR_MARK node.  */
8236
8237 static inline unsigned HOST_WIDE_INT
8238 simple_type_size_in_bits (tree type)
8239 {
8240   if (TREE_CODE (type) == ERROR_MARK)
8241     return BITS_PER_WORD;
8242   else if (TYPE_SIZE (type) == NULL_TREE)
8243     return 0;
8244   else if (host_integerp (TYPE_SIZE (type), 1))
8245     return tree_low_cst (TYPE_SIZE (type), 1);
8246   else
8247     return TYPE_ALIGN (type);
8248 }
8249
8250 /* Return true if the debug information for the given type should be
8251    emitted as a subrange type.  */
8252
8253 static inline bool
8254 is_subrange_type (tree type)
8255 {
8256   tree subtype = TREE_TYPE (type);
8257
8258   /* Subrange types are identified by the fact that they are integer
8259      types, and that they have a subtype which is either an integer type
8260      or an enumeral type.  */
8261
8262   if (TREE_CODE (type) != INTEGER_TYPE
8263       || subtype == NULL_TREE)
8264     return false;
8265
8266   if (TREE_CODE (subtype) != INTEGER_TYPE
8267       && TREE_CODE (subtype) != ENUMERAL_TYPE)
8268     return false;
8269
8270   if (TREE_CODE (type) == TREE_CODE (subtype)
8271       && int_size_in_bytes (type) == int_size_in_bytes (subtype)
8272       && TYPE_MIN_VALUE (type) != NULL
8273       && TYPE_MIN_VALUE (subtype) != NULL
8274       && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
8275       && TYPE_MAX_VALUE (type) != NULL
8276       && TYPE_MAX_VALUE (subtype) != NULL
8277       && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
8278     {
8279       /* The type and its subtype have the same representation.  If in
8280          addition the two types also have the same name, then the given
8281          type is not a subrange type, but rather a plain base type.  */
8282       /* FIXME: brobecker/2004-03-22:
8283          Sizetype INTEGER_CSTs nodes are canonicalized.  It should
8284          therefore be sufficient to check the TYPE_SIZE node pointers
8285          rather than checking the actual size.  Unfortunately, we have
8286          found some cases, such as in the Ada "integer" type, where
8287          this is not the case.  Until this problem is solved, we need to
8288          keep checking the actual size.  */
8289       tree type_name = TYPE_NAME (type);
8290       tree subtype_name = TYPE_NAME (subtype);
8291
8292       if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
8293         type_name = DECL_NAME (type_name);
8294
8295       if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
8296         subtype_name = DECL_NAME (subtype_name);
8297
8298       if (type_name == subtype_name)
8299         return false;
8300     }
8301
8302   return true;
8303 }
8304
8305 /*  Given a pointer to a tree node for a subrange type, return a pointer
8306     to a DIE that describes the given type.  */
8307
8308 static dw_die_ref
8309 subrange_type_die (tree type, dw_die_ref context_die)
8310 {
8311   dw_die_ref subtype_die;
8312   dw_die_ref subrange_die;
8313   tree name = TYPE_NAME (type);
8314   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
8315   tree subtype = TREE_TYPE (type);
8316
8317   if (context_die == NULL)
8318     context_die = comp_unit_die;
8319
8320   if (TREE_CODE (subtype) == ENUMERAL_TYPE)
8321     subtype_die = gen_enumeration_type_die (subtype, context_die);
8322   else
8323     subtype_die = base_type_die (subtype);
8324
8325   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
8326
8327   if (name != NULL)
8328     {
8329       if (TREE_CODE (name) == TYPE_DECL)
8330         name = DECL_NAME (name);
8331       add_name_attribute (subrange_die, IDENTIFIER_POINTER (name));
8332     }
8333
8334   if (int_size_in_bytes (subtype) != size_in_bytes)
8335     {
8336       /* The size of the subrange type and its base type do not match,
8337          so we need to generate a size attribute for the subrange type.  */
8338       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
8339     }
8340
8341   if (TYPE_MIN_VALUE (type) != NULL)
8342     add_bound_info (subrange_die, DW_AT_lower_bound,
8343                     TYPE_MIN_VALUE (type));
8344   if (TYPE_MAX_VALUE (type) != NULL)
8345     add_bound_info (subrange_die, DW_AT_upper_bound,
8346                     TYPE_MAX_VALUE (type));
8347   add_AT_die_ref (subrange_die, DW_AT_type, subtype_die);
8348
8349   return subrange_die;
8350 }
8351
8352 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
8353    entry that chains various modifiers in front of the given type.  */
8354
8355 static dw_die_ref
8356 modified_type_die (tree type, int is_const_type, int is_volatile_type,
8357                    dw_die_ref context_die)
8358 {
8359   enum tree_code code = TREE_CODE (type);
8360   dw_die_ref mod_type_die = NULL;
8361   dw_die_ref sub_die = NULL;
8362   tree item_type = NULL;
8363
8364   if (code != ERROR_MARK)
8365     {
8366       tree qualified_type;
8367
8368       /* See if we already have the appropriately qualified variant of
8369          this type.  */
8370       qualified_type
8371         = get_qualified_type (type,
8372                               ((is_const_type ? TYPE_QUAL_CONST : 0)
8373                                | (is_volatile_type
8374                                   ? TYPE_QUAL_VOLATILE : 0)));
8375
8376       /* If we do, then we can just use its DIE, if it exists.  */
8377       if (qualified_type)
8378         {
8379           mod_type_die = lookup_type_die (qualified_type);
8380           if (mod_type_die)
8381             return mod_type_die;
8382         }
8383
8384       /* Handle C typedef types.  */
8385       if (qualified_type && TYPE_NAME (qualified_type)
8386           && TREE_CODE (TYPE_NAME (qualified_type)) == TYPE_DECL
8387           && DECL_ORIGINAL_TYPE (TYPE_NAME (qualified_type)))
8388         {
8389           tree type_name = TYPE_NAME (qualified_type);
8390           tree dtype = TREE_TYPE (type_name);
8391
8392           if (qualified_type == dtype)
8393             {
8394               /* For a named type, use the typedef.  */
8395               gen_type_die (qualified_type, context_die);
8396               mod_type_die = lookup_type_die (qualified_type);
8397             }
8398           else if (is_const_type < TYPE_READONLY (dtype)
8399                    || is_volatile_type < TYPE_VOLATILE (dtype))
8400             /* cv-unqualified version of named type.  Just use the unnamed
8401                type to which it refers.  */
8402             mod_type_die
8403               = modified_type_die (DECL_ORIGINAL_TYPE (type_name),
8404                                    is_const_type, is_volatile_type,
8405                                    context_die);
8406
8407           /* Else cv-qualified version of named type; fall through.  */
8408         }
8409
8410       if (mod_type_die)
8411         /* OK.  */
8412         ;
8413       else if (is_const_type)
8414         {
8415           mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
8416           sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
8417         }
8418       else if (is_volatile_type)
8419         {
8420           mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
8421           sub_die = modified_type_die (type, 0, 0, context_die);
8422         }
8423       else if (code == POINTER_TYPE)
8424         {
8425           mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
8426           add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8427                            simple_type_size_in_bits (type) / BITS_PER_UNIT);
8428 #if 0
8429           add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8430 #endif
8431           item_type = TREE_TYPE (type);
8432         }
8433       else if (code == REFERENCE_TYPE)
8434         {
8435           mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
8436           add_AT_unsigned (mod_type_die, DW_AT_byte_size,
8437                            simple_type_size_in_bits (type) / BITS_PER_UNIT);
8438 #if 0
8439           add_AT_unsigned (mod_type_die, DW_AT_address_class, 0);
8440 #endif
8441           item_type = TREE_TYPE (type);
8442         }
8443       else if (is_subrange_type (type))
8444         mod_type_die = subrange_type_die (type, context_die);
8445       else if (is_base_type (type))
8446         mod_type_die = base_type_die (type);
8447       else
8448         {
8449           gen_type_die (type, context_die);
8450
8451           /* We have to get the type_main_variant here (and pass that to the
8452              `lookup_type_die' routine) because the ..._TYPE node we have
8453              might simply be a *copy* of some original type node (where the
8454              copy was created to help us keep track of typedef names) and
8455              that copy might have a different TYPE_UID from the original
8456              ..._TYPE node.  */
8457           if (TREE_CODE (type) != VECTOR_TYPE)
8458             mod_type_die = lookup_type_die (type_main_variant (type));
8459           else
8460             /* Vectors have the debugging information in the type,
8461                not the main variant.  */
8462             mod_type_die = lookup_type_die (type);
8463           gcc_assert (mod_type_die);
8464         }
8465
8466       /* We want to equate the qualified type to the die below.  */
8467       type = qualified_type;
8468     }
8469
8470   if (type)
8471     equate_type_number_to_die (type, mod_type_die);
8472   if (item_type)
8473     /* We must do this after the equate_type_number_to_die call, in case
8474        this is a recursive type.  This ensures that the modified_type_die
8475        recursion will terminate even if the type is recursive.  Recursive
8476        types are possible in Ada.  */
8477     sub_die = modified_type_die (item_type,
8478                                  TYPE_READONLY (item_type),
8479                                  TYPE_VOLATILE (item_type),
8480                                  context_die);
8481
8482   if (sub_die != NULL)
8483     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
8484
8485   return mod_type_die;
8486 }
8487
8488 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
8489    an enumerated type.  */
8490
8491 static inline int
8492 type_is_enum (tree type)
8493 {
8494   return TREE_CODE (type) == ENUMERAL_TYPE;
8495 }
8496
8497 /* Return the DBX register number described by a given RTL node.  */
8498
8499 static unsigned int
8500 dbx_reg_number (rtx rtl)
8501 {
8502   unsigned regno = REGNO (rtl);
8503
8504   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
8505
8506 #ifdef LEAF_REG_REMAP
8507   regno = LEAF_REG_REMAP (regno);
8508 #endif
8509
8510   return DBX_REGISTER_NUMBER (regno);
8511 }
8512
8513 /* Optionally add a DW_OP_piece term to a location description expression.
8514    DW_OP_piece is only added if the location description expression already
8515    doesn't end with DW_OP_piece.  */
8516
8517 static void
8518 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
8519 {
8520   dw_loc_descr_ref loc;
8521
8522   if (*list_head != NULL)
8523     {
8524       /* Find the end of the chain.  */
8525       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
8526         ;
8527
8528       if (loc->dw_loc_opc != DW_OP_piece)
8529         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
8530     }
8531 }
8532
8533 /* Return a location descriptor that designates a machine register or
8534    zero if there is none.  */
8535
8536 static dw_loc_descr_ref
8537 reg_loc_descriptor (rtx rtl)
8538 {
8539   rtx regs;
8540
8541   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
8542     return 0;
8543
8544   regs = targetm.dwarf_register_span (rtl);
8545
8546   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
8547     return multiple_reg_loc_descriptor (rtl, regs);
8548   else
8549     return one_reg_loc_descriptor (dbx_reg_number (rtl));
8550 }
8551
8552 /* Return a location descriptor that designates a machine register for
8553    a given hard register number.  */
8554
8555 static dw_loc_descr_ref
8556 one_reg_loc_descriptor (unsigned int regno)
8557 {
8558   if (regno <= 31)
8559     return new_loc_descr (DW_OP_reg0 + regno, 0, 0);
8560   else
8561     return new_loc_descr (DW_OP_regx, regno, 0);
8562 }
8563
8564 /* Given an RTL of a register, return a location descriptor that
8565    designates a value that spans more than one register.  */
8566
8567 static dw_loc_descr_ref
8568 multiple_reg_loc_descriptor (rtx rtl, rtx regs)
8569 {
8570   int nregs, size, i;
8571   unsigned reg;
8572   dw_loc_descr_ref loc_result = NULL;
8573
8574   reg = REGNO (rtl);
8575 #ifdef LEAF_REG_REMAP
8576   reg = LEAF_REG_REMAP (reg);
8577 #endif
8578   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
8579   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
8580
8581   /* Simple, contiguous registers.  */
8582   if (regs == NULL_RTX)
8583     {
8584       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
8585
8586       loc_result = NULL;
8587       while (nregs--)
8588         {
8589           dw_loc_descr_ref t;
8590
8591           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg));
8592           add_loc_descr (&loc_result, t);
8593           add_loc_descr_op_piece (&loc_result, size);
8594           ++reg;
8595         }
8596       return loc_result;
8597     }
8598
8599   /* Now onto stupid register sets in non contiguous locations.  */
8600
8601   gcc_assert (GET_CODE (regs) == PARALLEL);
8602
8603   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8604   loc_result = NULL;
8605
8606   for (i = 0; i < XVECLEN (regs, 0); ++i)
8607     {
8608       dw_loc_descr_ref t;
8609
8610       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)));
8611       add_loc_descr (&loc_result, t);
8612       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
8613       add_loc_descr_op_piece (&loc_result, size);
8614     }
8615   return loc_result;
8616 }
8617
8618 /* Return a location descriptor that designates a constant.  */
8619
8620 static dw_loc_descr_ref
8621 int_loc_descriptor (HOST_WIDE_INT i)
8622 {
8623   enum dwarf_location_atom op;
8624
8625   /* Pick the smallest representation of a constant, rather than just
8626      defaulting to the LEB encoding.  */
8627   if (i >= 0)
8628     {
8629       if (i <= 31)
8630         op = DW_OP_lit0 + i;
8631       else if (i <= 0xff)
8632         op = DW_OP_const1u;
8633       else if (i <= 0xffff)
8634         op = DW_OP_const2u;
8635       else if (HOST_BITS_PER_WIDE_INT == 32
8636                || i <= 0xffffffff)
8637         op = DW_OP_const4u;
8638       else
8639         op = DW_OP_constu;
8640     }
8641   else
8642     {
8643       if (i >= -0x80)
8644         op = DW_OP_const1s;
8645       else if (i >= -0x8000)
8646         op = DW_OP_const2s;
8647       else if (HOST_BITS_PER_WIDE_INT == 32
8648                || i >= -0x80000000)
8649         op = DW_OP_const4s;
8650       else
8651         op = DW_OP_consts;
8652     }
8653
8654   return new_loc_descr (op, i, 0);
8655 }
8656
8657 /* Return a location descriptor that designates a base+offset location.  */
8658
8659 static dw_loc_descr_ref
8660 based_loc_descr (rtx reg, HOST_WIDE_INT offset)
8661 {
8662   unsigned int regno;
8663
8664   /* We only use "frame base" when we're sure we're talking about the
8665      post-prologue local stack frame.  We do this by *not* running
8666      register elimination until this point, and recognizing the special
8667      argument pointer and soft frame pointer rtx's.  */
8668   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
8669     {
8670       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
8671
8672       if (elim != reg)
8673         {
8674           if (GET_CODE (elim) == PLUS)
8675             {
8676               offset += INTVAL (XEXP (elim, 1));
8677               elim = XEXP (elim, 0);
8678             }
8679           gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
8680                       : stack_pointer_rtx));
8681           offset += frame_pointer_cfa_offset;
8682
8683           return new_loc_descr (DW_OP_fbreg, offset, 0);
8684         }
8685     }
8686
8687   regno = dbx_reg_number (reg);
8688   if (regno <= 31)
8689     return new_loc_descr (DW_OP_breg0 + regno, offset, 0);
8690   else
8691     return new_loc_descr (DW_OP_bregx, regno, offset);
8692 }
8693
8694 /* Return true if this RTL expression describes a base+offset calculation.  */
8695
8696 static inline int
8697 is_based_loc (rtx rtl)
8698 {
8699   return (GET_CODE (rtl) == PLUS
8700           && ((REG_P (XEXP (rtl, 0))
8701                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
8702                && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
8703 }
8704
8705 /* The following routine converts the RTL for a variable or parameter
8706    (resident in memory) into an equivalent Dwarf representation of a
8707    mechanism for getting the address of that same variable onto the top of a
8708    hypothetical "address evaluation" stack.
8709
8710    When creating memory location descriptors, we are effectively transforming
8711    the RTL for a memory-resident object into its Dwarf postfix expression
8712    equivalent.  This routine recursively descends an RTL tree, turning
8713    it into Dwarf postfix code as it goes.
8714
8715    MODE is the mode of the memory reference, needed to handle some
8716    autoincrement addressing modes.
8717
8718    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
8719    location list for RTL.
8720
8721    Return 0 if we can't represent the location.  */
8722
8723 static dw_loc_descr_ref
8724 mem_loc_descriptor (rtx rtl, enum machine_mode mode)
8725 {
8726   dw_loc_descr_ref mem_loc_result = NULL;
8727   enum dwarf_location_atom op;
8728
8729   /* Note that for a dynamically sized array, the location we will generate a
8730      description of here will be the lowest numbered location which is
8731      actually within the array.  That's *not* necessarily the same as the
8732      zeroth element of the array.  */
8733
8734   rtl = targetm.delegitimize_address (rtl);
8735
8736   switch (GET_CODE (rtl))
8737     {
8738     case POST_INC:
8739     case POST_DEC:
8740     case POST_MODIFY:
8741       /* POST_INC and POST_DEC can be handled just like a SUBREG.  So we
8742          just fall into the SUBREG code.  */
8743
8744       /* ... fall through ...  */
8745
8746     case SUBREG:
8747       /* The case of a subreg may arise when we have a local (register)
8748          variable or a formal (register) parameter which doesn't quite fill
8749          up an entire register.  For now, just assume that it is
8750          legitimate to make the Dwarf info refer to the whole register which
8751          contains the given subreg.  */
8752       rtl = XEXP (rtl, 0);
8753
8754       /* ... fall through ...  */
8755
8756     case REG:
8757       /* Whenever a register number forms a part of the description of the
8758          method for calculating the (dynamic) address of a memory resident
8759          object, DWARF rules require the register number be referred to as
8760          a "base register".  This distinction is not based in any way upon
8761          what category of register the hardware believes the given register
8762          belongs to.  This is strictly DWARF terminology we're dealing with
8763          here. Note that in cases where the location of a memory-resident
8764          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
8765          OP_CONST (0)) the actual DWARF location descriptor that we generate
8766          may just be OP_BASEREG (basereg).  This may look deceptively like
8767          the object in question was allocated to a register (rather than in
8768          memory) so DWARF consumers need to be aware of the subtle
8769          distinction between OP_REG and OP_BASEREG.  */
8770       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
8771         mem_loc_result = based_loc_descr (rtl, 0);
8772       break;
8773
8774     case MEM:
8775       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8776       if (mem_loc_result != 0)
8777         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
8778       break;
8779
8780     case LO_SUM:
8781          rtl = XEXP (rtl, 1);
8782
8783       /* ... fall through ...  */
8784
8785     case LABEL_REF:
8786       /* Some ports can transform a symbol ref into a label ref, because
8787          the symbol ref is too far away and has to be dumped into a constant
8788          pool.  */
8789     case CONST:
8790     case SYMBOL_REF:
8791       /* Alternatively, the symbol in the constant pool might be referenced
8792          by a different symbol.  */
8793       if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
8794         {
8795           bool marked;
8796           rtx tmp = get_pool_constant_mark (rtl, &marked);
8797
8798           if (GET_CODE (tmp) == SYMBOL_REF)
8799             {
8800               rtl = tmp;
8801               if (CONSTANT_POOL_ADDRESS_P (tmp))
8802                 get_pool_constant_mark (tmp, &marked);
8803               else
8804                 marked = true;
8805             }
8806
8807           /* If all references to this pool constant were optimized away,
8808              it was not output and thus we can't represent it.
8809              FIXME: might try to use DW_OP_const_value here, though
8810              DW_OP_piece complicates it.  */
8811           if (!marked)
8812             return 0;
8813         }
8814
8815       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
8816       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
8817       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
8818       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
8819       break;
8820
8821     case PRE_MODIFY:
8822       /* Extract the PLUS expression nested inside and fall into
8823          PLUS code below.  */
8824       rtl = XEXP (rtl, 1);
8825       goto plus;
8826
8827     case PRE_INC:
8828     case PRE_DEC:
8829       /* Turn these into a PLUS expression and fall into the PLUS code
8830          below.  */
8831       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
8832                           GEN_INT (GET_CODE (rtl) == PRE_INC
8833                                    ? GET_MODE_UNIT_SIZE (mode)
8834                                    : -GET_MODE_UNIT_SIZE (mode)));
8835
8836       /* ... fall through ...  */
8837
8838     case PLUS:
8839     plus:
8840       if (is_based_loc (rtl))
8841         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
8842                                           INTVAL (XEXP (rtl, 1)));
8843       else
8844         {
8845           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode);
8846           if (mem_loc_result == 0)
8847             break;
8848
8849           if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
8850               && INTVAL (XEXP (rtl, 1)) >= 0)
8851             add_loc_descr (&mem_loc_result,
8852                            new_loc_descr (DW_OP_plus_uconst,
8853                                           INTVAL (XEXP (rtl, 1)), 0));
8854           else
8855             {
8856               add_loc_descr (&mem_loc_result,
8857                              mem_loc_descriptor (XEXP (rtl, 1), mode));
8858               add_loc_descr (&mem_loc_result,
8859                              new_loc_descr (DW_OP_plus, 0, 0));
8860             }
8861         }
8862       break;
8863
8864     /* If a pseudo-reg is optimized away, it is possible for it to
8865        be replaced with a MEM containing a multiply or shift.  */
8866     case MULT:
8867       op = DW_OP_mul;
8868       goto do_binop;
8869
8870     case ASHIFT:
8871       op = DW_OP_shl;
8872       goto do_binop;
8873
8874     case ASHIFTRT:
8875       op = DW_OP_shra;
8876       goto do_binop;
8877
8878     case LSHIFTRT:
8879       op = DW_OP_shr;
8880       goto do_binop;
8881
8882     do_binop:
8883       {
8884         dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode);
8885         dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode);
8886
8887         if (op0 == 0 || op1 == 0)
8888           break;
8889
8890         mem_loc_result = op0;
8891         add_loc_descr (&mem_loc_result, op1);
8892         add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
8893         break;
8894       }
8895
8896     case CONST_INT:
8897       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
8898       break;
8899
8900     default:
8901       gcc_unreachable ();
8902     }
8903
8904   return mem_loc_result;
8905 }
8906
8907 /* Return a descriptor that describes the concatenation of two locations.
8908    This is typically a complex variable.  */
8909
8910 static dw_loc_descr_ref
8911 concat_loc_descriptor (rtx x0, rtx x1)
8912 {
8913   dw_loc_descr_ref cc_loc_result = NULL;
8914   dw_loc_descr_ref x0_ref = loc_descriptor (x0);
8915   dw_loc_descr_ref x1_ref = loc_descriptor (x1);
8916
8917   if (x0_ref == 0 || x1_ref == 0)
8918     return 0;
8919
8920   cc_loc_result = x0_ref;
8921   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
8922
8923   add_loc_descr (&cc_loc_result, x1_ref);
8924   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
8925
8926   return cc_loc_result;
8927 }
8928
8929 /* Output a proper Dwarf location descriptor for a variable or parameter
8930    which is either allocated in a register or in a memory location.  For a
8931    register, we just generate an OP_REG and the register number.  For a
8932    memory location we provide a Dwarf postfix expression describing how to
8933    generate the (dynamic) address of the object onto the address stack.
8934
8935    If we don't know how to describe it, return 0.  */
8936
8937 static dw_loc_descr_ref
8938 loc_descriptor (rtx rtl)
8939 {
8940   dw_loc_descr_ref loc_result = NULL;
8941
8942   switch (GET_CODE (rtl))
8943     {
8944     case SUBREG:
8945       /* The case of a subreg may arise when we have a local (register)
8946          variable or a formal (register) parameter which doesn't quite fill
8947          up an entire register.  For now, just assume that it is
8948          legitimate to make the Dwarf info refer to the whole register which
8949          contains the given subreg.  */
8950       rtl = SUBREG_REG (rtl);
8951
8952       /* ... fall through ...  */
8953
8954     case REG:
8955       loc_result = reg_loc_descriptor (rtl);
8956       break;
8957
8958     case MEM:
8959       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl));
8960       break;
8961
8962     case CONCAT:
8963       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1));
8964       break;
8965
8966     case VAR_LOCATION:
8967       /* Single part.  */
8968       if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
8969         {
8970           loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0));
8971           break;
8972         }
8973
8974       rtl = XEXP (rtl, 1);
8975       /* FALLTHRU */
8976
8977     case PARALLEL:
8978       {
8979         rtvec par_elems = XVEC (rtl, 0);
8980         int num_elem = GET_NUM_ELEM (par_elems);
8981         enum machine_mode mode;
8982         int i;
8983
8984         /* Create the first one, so we have something to add to.  */
8985         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0));
8986         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
8987         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
8988         for (i = 1; i < num_elem; i++)
8989           {
8990             dw_loc_descr_ref temp;
8991
8992             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0));
8993             add_loc_descr (&loc_result, temp);
8994             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
8995             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
8996           }
8997       }
8998       break;
8999
9000     default:
9001       gcc_unreachable ();
9002     }
9003
9004   return loc_result;
9005 }
9006
9007 /* Similar, but generate the descriptor from trees instead of rtl.  This comes
9008    up particularly with variable length arrays.  WANT_ADDRESS is 2 if this is
9009    a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
9010    top-level invocation, and we require the address of LOC; is 0 if we require
9011    the value of LOC.  */
9012
9013 static dw_loc_descr_ref
9014 loc_descriptor_from_tree_1 (tree loc, int want_address)
9015 {
9016   dw_loc_descr_ref ret, ret1;
9017   int have_address = 0;
9018   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
9019   enum dwarf_location_atom op;
9020
9021   /* ??? Most of the time we do not take proper care for sign/zero
9022      extending the values properly.  Hopefully this won't be a real
9023      problem...  */
9024
9025   switch (TREE_CODE (loc))
9026     {
9027     case ERROR_MARK:
9028       return 0;
9029
9030     case PLACEHOLDER_EXPR:
9031       /* This case involves extracting fields from an object to determine the
9032          position of other fields.  We don't try to encode this here.  The
9033          only user of this is Ada, which encodes the needed information using
9034          the names of types.  */
9035       return 0;
9036
9037     case CALL_EXPR:
9038       return 0;
9039
9040     case PREINCREMENT_EXPR:
9041     case PREDECREMENT_EXPR:
9042     case POSTINCREMENT_EXPR:
9043     case POSTDECREMENT_EXPR:
9044       /* There are no opcodes for these operations.  */
9045       return 0;
9046
9047     case ADDR_EXPR:
9048       /* If we already want an address, there's nothing we can do.  */
9049       if (want_address)
9050         return 0;
9051
9052       /* Otherwise, process the argument and look for the address.  */
9053       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
9054
9055     case VAR_DECL:
9056       if (DECL_THREAD_LOCAL_P (loc))
9057         {
9058           rtx rtl;
9059
9060           /* If this is not defined, we have no way to emit the data.  */
9061           if (!targetm.asm_out.output_dwarf_dtprel)
9062             return 0;
9063
9064           /* The way DW_OP_GNU_push_tls_address is specified, we can only
9065              look up addresses of objects in the current module.  */
9066           if (DECL_EXTERNAL (loc))
9067             return 0;
9068
9069           rtl = rtl_for_decl_location (loc);
9070           if (rtl == NULL_RTX)
9071             return 0;
9072
9073           if (!MEM_P (rtl))
9074             return 0;
9075           rtl = XEXP (rtl, 0);
9076           if (! CONSTANT_P (rtl))
9077             return 0;
9078
9079           ret = new_loc_descr (INTERNAL_DW_OP_tls_addr, 0, 0);
9080           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9081           ret->dw_loc_oprnd1.v.val_addr = rtl;
9082
9083           ret1 = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
9084           add_loc_descr (&ret, ret1);
9085
9086           have_address = 1;
9087           break;
9088         }
9089       /* FALLTHRU */
9090
9091     case PARM_DECL:
9092       if (DECL_HAS_VALUE_EXPR_P (loc))
9093         return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
9094                                            want_address);
9095       /* FALLTHRU */
9096
9097     case RESULT_DECL:
9098       {
9099         rtx rtl = rtl_for_decl_location (loc);
9100
9101         if (rtl == NULL_RTX)
9102           return 0;
9103         else if (GET_CODE (rtl) == CONST_INT)
9104           {
9105             HOST_WIDE_INT val = INTVAL (rtl);
9106             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
9107               val &= GET_MODE_MASK (DECL_MODE (loc));
9108             ret = int_loc_descriptor (val);
9109           }
9110         else if (GET_CODE (rtl) == CONST_STRING)
9111           return 0;
9112         else if (CONSTANT_P (rtl))
9113           {
9114             ret = new_loc_descr (DW_OP_addr, 0, 0);
9115             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
9116             ret->dw_loc_oprnd1.v.val_addr = rtl;
9117           }
9118         else
9119           {
9120             enum machine_mode mode;
9121
9122             /* Certain constructs can only be represented at top-level.  */
9123             if (want_address == 2)
9124               return loc_descriptor (rtl);
9125
9126             mode = GET_MODE (rtl);
9127             if (MEM_P (rtl))
9128               {
9129                 rtl = XEXP (rtl, 0);
9130                 have_address = 1;
9131               }
9132             ret = mem_loc_descriptor (rtl, mode);
9133           }
9134       }
9135       break;
9136
9137     case INDIRECT_REF:
9138       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9139       have_address = 1;
9140       break;
9141
9142     case COMPOUND_EXPR:
9143       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
9144
9145     case NOP_EXPR:
9146     case CONVERT_EXPR:
9147     case NON_LVALUE_EXPR:
9148     case VIEW_CONVERT_EXPR:
9149     case SAVE_EXPR:
9150     case MODIFY_EXPR:
9151       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
9152
9153     case COMPONENT_REF:
9154     case BIT_FIELD_REF:
9155     case ARRAY_REF:
9156     case ARRAY_RANGE_REF:
9157       {
9158         tree obj, offset;
9159         HOST_WIDE_INT bitsize, bitpos, bytepos;
9160         enum machine_mode mode;
9161         int volatilep;
9162
9163         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
9164                                    &unsignedp, &volatilep, false);
9165
9166         if (obj == loc)
9167           return 0;
9168
9169         ret = loc_descriptor_from_tree_1 (obj, 1);
9170         if (ret == 0
9171             || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
9172           return 0;
9173
9174         if (offset != NULL_TREE)
9175           {
9176             /* Variable offset.  */
9177             add_loc_descr (&ret, loc_descriptor_from_tree_1 (offset, 0));
9178             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9179           }
9180
9181         bytepos = bitpos / BITS_PER_UNIT;
9182         if (bytepos > 0)
9183           add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
9184         else if (bytepos < 0)
9185           {
9186             add_loc_descr (&ret, int_loc_descriptor (bytepos));
9187             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
9188           }
9189
9190         have_address = 1;
9191         break;
9192       }
9193
9194     case INTEGER_CST:
9195       if (host_integerp (loc, 0))
9196         ret = int_loc_descriptor (tree_low_cst (loc, 0));
9197       else
9198         return 0;
9199       break;
9200
9201     case CONSTRUCTOR:
9202       {
9203         /* Get an RTL for this, if something has been emitted.  */
9204         rtx rtl = lookup_constant_def (loc);
9205         enum machine_mode mode;
9206
9207         if (!rtl || !MEM_P (rtl))
9208           return 0;
9209         mode = GET_MODE (rtl);
9210         rtl = XEXP (rtl, 0);
9211         ret = mem_loc_descriptor (rtl, mode);
9212         have_address = 1;
9213         break;
9214       }
9215
9216     case TRUTH_AND_EXPR:
9217     case TRUTH_ANDIF_EXPR:
9218     case BIT_AND_EXPR:
9219       op = DW_OP_and;
9220       goto do_binop;
9221
9222     case TRUTH_XOR_EXPR:
9223     case BIT_XOR_EXPR:
9224       op = DW_OP_xor;
9225       goto do_binop;
9226
9227     case TRUTH_OR_EXPR:
9228     case TRUTH_ORIF_EXPR:
9229     case BIT_IOR_EXPR:
9230       op = DW_OP_or;
9231       goto do_binop;
9232
9233     case FLOOR_DIV_EXPR:
9234     case CEIL_DIV_EXPR:
9235     case ROUND_DIV_EXPR:
9236     case TRUNC_DIV_EXPR:
9237       op = DW_OP_div;
9238       goto do_binop;
9239
9240     case MINUS_EXPR:
9241       op = DW_OP_minus;
9242       goto do_binop;
9243
9244     case FLOOR_MOD_EXPR:
9245     case CEIL_MOD_EXPR:
9246     case ROUND_MOD_EXPR:
9247     case TRUNC_MOD_EXPR:
9248       op = DW_OP_mod;
9249       goto do_binop;
9250
9251     case MULT_EXPR:
9252       op = DW_OP_mul;
9253       goto do_binop;
9254
9255     case LSHIFT_EXPR:
9256       op = DW_OP_shl;
9257       goto do_binop;
9258
9259     case RSHIFT_EXPR:
9260       op = (unsignedp ? DW_OP_shr : DW_OP_shra);
9261       goto do_binop;
9262
9263     case PLUS_EXPR:
9264       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
9265           && host_integerp (TREE_OPERAND (loc, 1), 0))
9266         {
9267           ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9268           if (ret == 0)
9269             return 0;
9270
9271           add_loc_descr (&ret,
9272                          new_loc_descr (DW_OP_plus_uconst,
9273                                         tree_low_cst (TREE_OPERAND (loc, 1),
9274                                                       0),
9275                                         0));
9276           break;
9277         }
9278
9279       op = DW_OP_plus;
9280       goto do_binop;
9281
9282     case LE_EXPR:
9283       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9284         return 0;
9285
9286       op = DW_OP_le;
9287       goto do_binop;
9288
9289     case GE_EXPR:
9290       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9291         return 0;
9292
9293       op = DW_OP_ge;
9294       goto do_binop;
9295
9296     case LT_EXPR:
9297       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9298         return 0;
9299
9300       op = DW_OP_lt;
9301       goto do_binop;
9302
9303     case GT_EXPR:
9304       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
9305         return 0;
9306
9307       op = DW_OP_gt;
9308       goto do_binop;
9309
9310     case EQ_EXPR:
9311       op = DW_OP_eq;
9312       goto do_binop;
9313
9314     case NE_EXPR:
9315       op = DW_OP_ne;
9316       goto do_binop;
9317
9318     do_binop:
9319       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9320       ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9321       if (ret == 0 || ret1 == 0)
9322         return 0;
9323
9324       add_loc_descr (&ret, ret1);
9325       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9326       break;
9327
9328     case TRUTH_NOT_EXPR:
9329     case BIT_NOT_EXPR:
9330       op = DW_OP_not;
9331       goto do_unop;
9332
9333     case ABS_EXPR:
9334       op = DW_OP_abs;
9335       goto do_unop;
9336
9337     case NEGATE_EXPR:
9338       op = DW_OP_neg;
9339       goto do_unop;
9340
9341     do_unop:
9342       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9343       if (ret == 0)
9344         return 0;
9345
9346       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
9347       break;
9348
9349     case MIN_EXPR:
9350     case MAX_EXPR:
9351       {
9352         const enum tree_code code =
9353           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
9354
9355         loc = build3 (COND_EXPR, TREE_TYPE (loc),
9356                       build2 (code, integer_type_node,
9357                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
9358                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
9359       }
9360
9361       /* ... fall through ...  */
9362
9363     case COND_EXPR:
9364       {
9365         dw_loc_descr_ref lhs
9366           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
9367         dw_loc_descr_ref rhs
9368           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
9369         dw_loc_descr_ref bra_node, jump_node, tmp;
9370
9371         ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
9372         if (ret == 0 || lhs == 0 || rhs == 0)
9373           return 0;
9374
9375         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
9376         add_loc_descr (&ret, bra_node);
9377
9378         add_loc_descr (&ret, rhs);
9379         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
9380         add_loc_descr (&ret, jump_node);
9381
9382         add_loc_descr (&ret, lhs);
9383         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9384         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
9385
9386         /* ??? Need a node to point the skip at.  Use a nop.  */
9387         tmp = new_loc_descr (DW_OP_nop, 0, 0);
9388         add_loc_descr (&ret, tmp);
9389         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
9390         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
9391       }
9392       break;
9393
9394     case FIX_TRUNC_EXPR:
9395     case FIX_CEIL_EXPR:
9396     case FIX_FLOOR_EXPR:
9397     case FIX_ROUND_EXPR:
9398       return 0;
9399
9400     default:
9401       /* Leave front-end specific codes as simply unknown.  This comes
9402          up, for instance, with the C STMT_EXPR.  */
9403       if ((unsigned int) TREE_CODE (loc)
9404           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
9405         return 0;
9406
9407 #ifdef ENABLE_CHECKING
9408       /* Otherwise this is a generic code; we should just lists all of
9409          these explicitly.  We forgot one.  */
9410       gcc_unreachable ();
9411 #else
9412       /* In a release build, we want to degrade gracefully: better to
9413          generate incomplete debugging information than to crash.  */
9414       return NULL;
9415 #endif
9416     }
9417
9418   /* Show if we can't fill the request for an address.  */
9419   if (want_address && !have_address)
9420     return 0;
9421
9422   /* If we've got an address and don't want one, dereference.  */
9423   if (!want_address && have_address && ret)
9424     {
9425       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
9426
9427       if (size > DWARF2_ADDR_SIZE || size == -1)
9428         return 0;
9429       else if (size == DWARF2_ADDR_SIZE)
9430         op = DW_OP_deref;
9431       else
9432         op = DW_OP_deref_size;
9433
9434       add_loc_descr (&ret, new_loc_descr (op, size, 0));
9435     }
9436
9437   return ret;
9438 }
9439
9440 static inline dw_loc_descr_ref
9441 loc_descriptor_from_tree (tree loc)
9442 {
9443   return loc_descriptor_from_tree_1 (loc, 2);
9444 }
9445
9446 /* Given a value, round it up to the lowest multiple of `boundary'
9447    which is not less than the value itself.  */
9448
9449 static inline HOST_WIDE_INT
9450 ceiling (HOST_WIDE_INT value, unsigned int boundary)
9451 {
9452   return (((value + boundary - 1) / boundary) * boundary);
9453 }
9454
9455 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
9456    pointer to the declared type for the relevant field variable, or return
9457    `integer_type_node' if the given node turns out to be an
9458    ERROR_MARK node.  */
9459
9460 static inline tree
9461 field_type (tree decl)
9462 {
9463   tree type;
9464
9465   if (TREE_CODE (decl) == ERROR_MARK)
9466     return integer_type_node;
9467
9468   type = DECL_BIT_FIELD_TYPE (decl);
9469   if (type == NULL_TREE)
9470     type = TREE_TYPE (decl);
9471
9472   return type;
9473 }
9474
9475 /* Given a pointer to a tree node, return the alignment in bits for
9476    it, or else return BITS_PER_WORD if the node actually turns out to
9477    be an ERROR_MARK node.  */
9478
9479 static inline unsigned
9480 simple_type_align_in_bits (tree type)
9481 {
9482   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
9483 }
9484
9485 static inline unsigned
9486 simple_decl_align_in_bits (tree decl)
9487 {
9488   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
9489 }
9490
9491 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
9492    lowest addressed byte of the "containing object" for the given FIELD_DECL,
9493    or return 0 if we are unable to determine what that offset is, either
9494    because the argument turns out to be a pointer to an ERROR_MARK node, or
9495    because the offset is actually variable.  (We can't handle the latter case
9496    just yet).  */
9497
9498 static HOST_WIDE_INT
9499 field_byte_offset (tree decl)
9500 {
9501   unsigned int type_align_in_bits;
9502   unsigned int decl_align_in_bits;
9503   unsigned HOST_WIDE_INT type_size_in_bits;
9504   HOST_WIDE_INT object_offset_in_bits;
9505   tree type;
9506   tree field_size_tree;
9507   HOST_WIDE_INT bitpos_int;
9508   HOST_WIDE_INT deepest_bitpos;
9509   unsigned HOST_WIDE_INT field_size_in_bits;
9510
9511   if (TREE_CODE (decl) == ERROR_MARK)
9512     return 0;
9513
9514   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
9515
9516   type = field_type (decl);
9517   field_size_tree = DECL_SIZE (decl);
9518
9519   /* The size could be unspecified if there was an error, or for
9520      a flexible array member.  */
9521   if (! field_size_tree)
9522     field_size_tree = bitsize_zero_node;
9523
9524   /* We cannot yet cope with fields whose positions are variable, so
9525      for now, when we see such things, we simply return 0.  Someday, we may
9526      be able to handle such cases, but it will be damn difficult.  */
9527   if (! host_integerp (bit_position (decl), 0))
9528     return 0;
9529
9530   bitpos_int = int_bit_position (decl);
9531
9532   /* If we don't know the size of the field, pretend it's a full word.  */
9533   if (host_integerp (field_size_tree, 1))
9534     field_size_in_bits = tree_low_cst (field_size_tree, 1);
9535   else
9536     field_size_in_bits = BITS_PER_WORD;
9537
9538   type_size_in_bits = simple_type_size_in_bits (type);
9539   type_align_in_bits = simple_type_align_in_bits (type);
9540   decl_align_in_bits = simple_decl_align_in_bits (decl);
9541
9542   /* The GCC front-end doesn't make any attempt to keep track of the starting
9543      bit offset (relative to the start of the containing structure type) of the
9544      hypothetical "containing object" for a bit-field.  Thus, when computing
9545      the byte offset value for the start of the "containing object" of a
9546      bit-field, we must deduce this information on our own. This can be rather
9547      tricky to do in some cases.  For example, handling the following structure
9548      type definition when compiling for an i386/i486 target (which only aligns
9549      long long's to 32-bit boundaries) can be very tricky:
9550
9551          struct S { int field1; long long field2:31; };
9552
9553      Fortunately, there is a simple rule-of-thumb which can be used in such
9554      cases.  When compiling for an i386/i486, GCC will allocate 8 bytes for the
9555      structure shown above.  It decides to do this based upon one simple rule
9556      for bit-field allocation.  GCC allocates each "containing object" for each
9557      bit-field at the first (i.e. lowest addressed) legitimate alignment
9558      boundary (based upon the required minimum alignment for the declared type
9559      of the field) which it can possibly use, subject to the condition that
9560      there is still enough available space remaining in the containing object
9561      (when allocated at the selected point) to fully accommodate all of the
9562      bits of the bit-field itself.
9563
9564      This simple rule makes it obvious why GCC allocates 8 bytes for each
9565      object of the structure type shown above.  When looking for a place to
9566      allocate the "containing object" for `field2', the compiler simply tries
9567      to allocate a 64-bit "containing object" at each successive 32-bit
9568      boundary (starting at zero) until it finds a place to allocate that 64-
9569      bit field such that at least 31 contiguous (and previously unallocated)
9570      bits remain within that selected 64 bit field.  (As it turns out, for the
9571      example above, the compiler finds it is OK to allocate the "containing
9572      object" 64-bit field at bit-offset zero within the structure type.)
9573
9574      Here we attempt to work backwards from the limited set of facts we're
9575      given, and we try to deduce from those facts, where GCC must have believed
9576      that the containing object started (within the structure type). The value
9577      we deduce is then used (by the callers of this routine) to generate
9578      DW_AT_location and DW_AT_bit_offset attributes for fields (both bit-fields
9579      and, in the case of DW_AT_location, regular fields as well).  */
9580
9581   /* Figure out the bit-distance from the start of the structure to the
9582      "deepest" bit of the bit-field.  */
9583   deepest_bitpos = bitpos_int + field_size_in_bits;
9584
9585   /* This is the tricky part.  Use some fancy footwork to deduce where the
9586      lowest addressed bit of the containing object must be.  */
9587   object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9588
9589   /* Round up to type_align by default.  This works best for bitfields.  */
9590   object_offset_in_bits += type_align_in_bits - 1;
9591   object_offset_in_bits /= type_align_in_bits;
9592   object_offset_in_bits *= type_align_in_bits;
9593
9594   if (object_offset_in_bits > bitpos_int)
9595     {
9596       /* Sigh, the decl must be packed.  */
9597       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
9598
9599       /* Round up to decl_align instead.  */
9600       object_offset_in_bits += decl_align_in_bits - 1;
9601       object_offset_in_bits /= decl_align_in_bits;
9602       object_offset_in_bits *= decl_align_in_bits;
9603     }
9604
9605   return object_offset_in_bits / BITS_PER_UNIT;
9606 }
9607 \f
9608 /* The following routines define various Dwarf attributes and any data
9609    associated with them.  */
9610
9611 /* Add a location description attribute value to a DIE.
9612
9613    This emits location attributes suitable for whole variables and
9614    whole parameters.  Note that the location attributes for struct fields are
9615    generated by the routine `data_member_location_attribute' below.  */
9616
9617 static inline void
9618 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
9619                              dw_loc_descr_ref descr)
9620 {
9621   if (descr != 0)
9622     add_AT_loc (die, attr_kind, descr);
9623 }
9624
9625 /* Attach the specialized form of location attribute used for data members of
9626    struct and union types.  In the special case of a FIELD_DECL node which
9627    represents a bit-field, the "offset" part of this special location
9628    descriptor must indicate the distance in bytes from the lowest-addressed
9629    byte of the containing struct or union type to the lowest-addressed byte of
9630    the "containing object" for the bit-field.  (See the `field_byte_offset'
9631    function above).
9632
9633    For any given bit-field, the "containing object" is a hypothetical object
9634    (of some integral or enum type) within which the given bit-field lives.  The
9635    type of this hypothetical "containing object" is always the same as the
9636    declared type of the individual bit-field itself (for GCC anyway... the
9637    DWARF spec doesn't actually mandate this).  Note that it is the size (in
9638    bytes) of the hypothetical "containing object" which will be given in the
9639    DW_AT_byte_size attribute for this bit-field.  (See the
9640    `byte_size_attribute' function below.)  It is also used when calculating the
9641    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
9642    function below.)  */
9643
9644 static void
9645 add_data_member_location_attribute (dw_die_ref die, tree decl)
9646 {
9647   HOST_WIDE_INT offset;
9648   dw_loc_descr_ref loc_descr = 0;
9649
9650   if (TREE_CODE (decl) == TREE_BINFO)
9651     {
9652       /* We're working on the TAG_inheritance for a base class.  */
9653       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
9654         {
9655           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
9656              aren't at a fixed offset from all (sub)objects of the same
9657              type.  We need to extract the appropriate offset from our
9658              vtable.  The following dwarf expression means
9659
9660                BaseAddr = ObAddr + *((*ObAddr) - Offset)
9661
9662              This is specific to the V3 ABI, of course.  */
9663
9664           dw_loc_descr_ref tmp;
9665
9666           /* Make a copy of the object address.  */
9667           tmp = new_loc_descr (DW_OP_dup, 0, 0);
9668           add_loc_descr (&loc_descr, tmp);
9669
9670           /* Extract the vtable address.  */
9671           tmp = new_loc_descr (DW_OP_deref, 0, 0);
9672           add_loc_descr (&loc_descr, tmp);
9673
9674           /* Calculate the address of the offset.  */
9675           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
9676           gcc_assert (offset < 0);
9677
9678           tmp = int_loc_descriptor (-offset);
9679           add_loc_descr (&loc_descr, tmp);
9680           tmp = new_loc_descr (DW_OP_minus, 0, 0);
9681           add_loc_descr (&loc_descr, tmp);
9682
9683           /* Extract the offset.  */
9684           tmp = new_loc_descr (DW_OP_deref, 0, 0);
9685           add_loc_descr (&loc_descr, tmp);
9686
9687           /* Add it to the object address.  */
9688           tmp = new_loc_descr (DW_OP_plus, 0, 0);
9689           add_loc_descr (&loc_descr, tmp);
9690         }
9691       else
9692         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
9693     }
9694   else
9695     offset = field_byte_offset (decl);
9696
9697   if (! loc_descr)
9698     {
9699       enum dwarf_location_atom op;
9700
9701       /* The DWARF2 standard says that we should assume that the structure
9702          address is already on the stack, so we can specify a structure field
9703          address by using DW_OP_plus_uconst.  */
9704
9705 #ifdef MIPS_DEBUGGING_INFO
9706       /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
9707          operator correctly.  It works only if we leave the offset on the
9708          stack.  */
9709       op = DW_OP_constu;
9710 #else
9711       op = DW_OP_plus_uconst;
9712 #endif
9713
9714       loc_descr = new_loc_descr (op, offset, 0);
9715     }
9716
9717   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
9718 }
9719
9720 /* Writes integer values to dw_vec_const array.  */
9721
9722 static void
9723 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
9724 {
9725   while (size != 0)
9726     {
9727       *dest++ = val & 0xff;
9728       val >>= 8;
9729       --size;
9730     }
9731 }
9732
9733 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
9734
9735 static HOST_WIDE_INT
9736 extract_int (const unsigned char *src, unsigned int size)
9737 {
9738   HOST_WIDE_INT val = 0;
9739
9740   src += size;
9741   while (size != 0)
9742     {
9743       val <<= 8;
9744       val |= *--src & 0xff;
9745       --size;
9746     }
9747   return val;
9748 }
9749
9750 /* Writes floating point values to dw_vec_const array.  */
9751
9752 static void
9753 insert_float (rtx rtl, unsigned char *array)
9754 {
9755   REAL_VALUE_TYPE rv;
9756   long val[4];
9757   int i;
9758
9759   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
9760   real_to_target (val, &rv, GET_MODE (rtl));
9761
9762   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
9763   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
9764     {
9765       insert_int (val[i], 4, array);
9766       array += 4;
9767     }
9768 }
9769
9770 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
9771    does not have a "location" either in memory or in a register.  These
9772    things can arise in GNU C when a constant is passed as an actual parameter
9773    to an inlined function.  They can also arise in C++ where declared
9774    constants do not necessarily get memory "homes".  */
9775
9776 static void
9777 add_const_value_attribute (dw_die_ref die, rtx rtl)
9778 {
9779   switch (GET_CODE (rtl))
9780     {
9781     case CONST_INT:
9782       {
9783         HOST_WIDE_INT val = INTVAL (rtl);
9784
9785         if (val < 0)
9786           add_AT_int (die, DW_AT_const_value, val);
9787         else
9788           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
9789       }
9790       break;
9791
9792     case CONST_DOUBLE:
9793       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
9794          floating-point constant.  A CONST_DOUBLE is used whenever the
9795          constant requires more than one word in order to be adequately
9796          represented.  We output CONST_DOUBLEs as blocks.  */
9797       {
9798         enum machine_mode mode = GET_MODE (rtl);
9799
9800         if (GET_MODE_CLASS (mode) == MODE_FLOAT)
9801           {
9802             unsigned int length = GET_MODE_SIZE (mode);
9803             unsigned char *array = ggc_alloc (length);
9804
9805             insert_float (rtl, array);
9806             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
9807           }
9808         else
9809           {
9810             /* ??? We really should be using HOST_WIDE_INT throughout.  */
9811             gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
9812
9813             add_AT_long_long (die, DW_AT_const_value,
9814                               CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
9815           }
9816       }
9817       break;
9818
9819     case CONST_VECTOR:
9820       {
9821         enum machine_mode mode = GET_MODE (rtl);
9822         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
9823         unsigned int length = CONST_VECTOR_NUNITS (rtl);
9824         unsigned char *array = ggc_alloc (length * elt_size);
9825         unsigned int i;
9826         unsigned char *p;
9827
9828         switch (GET_MODE_CLASS (mode))
9829           {
9830           case MODE_VECTOR_INT:
9831             for (i = 0, p = array; i < length; i++, p += elt_size)
9832               {
9833                 rtx elt = CONST_VECTOR_ELT (rtl, i);
9834                 HOST_WIDE_INT lo, hi;
9835
9836                 switch (GET_CODE (elt))
9837                   {
9838                   case CONST_INT:
9839                     lo = INTVAL (elt);
9840                     hi = -(lo < 0);
9841                     break;
9842
9843                   case CONST_DOUBLE:
9844                     lo = CONST_DOUBLE_LOW (elt);
9845                     hi = CONST_DOUBLE_HIGH (elt);
9846                     break;
9847
9848                   default:
9849                     gcc_unreachable ();
9850                   }
9851
9852                 if (elt_size <= sizeof (HOST_WIDE_INT))
9853                   insert_int (lo, elt_size, p);
9854                 else
9855                   {
9856                     unsigned char *p0 = p;
9857                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
9858
9859                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
9860                     if (WORDS_BIG_ENDIAN)
9861                       {
9862                         p0 = p1;
9863                         p1 = p;
9864                       }
9865                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
9866                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
9867                   }
9868               }
9869             break;
9870
9871           case MODE_VECTOR_FLOAT:
9872             for (i = 0, p = array; i < length; i++, p += elt_size)
9873               {
9874                 rtx elt = CONST_VECTOR_ELT (rtl, i);
9875                 insert_float (elt, p);
9876               }
9877             break;
9878
9879           default:
9880             gcc_unreachable ();
9881           }
9882
9883         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
9884       }
9885       break;
9886
9887     case CONST_STRING:
9888       add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
9889       break;
9890
9891     case SYMBOL_REF:
9892     case LABEL_REF:
9893     case CONST:
9894       add_AT_addr (die, DW_AT_const_value, rtl);
9895       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
9896       break;
9897
9898     case PLUS:
9899       /* In cases where an inlined instance of an inline function is passed
9900          the address of an `auto' variable (which is local to the caller) we
9901          can get a situation where the DECL_RTL of the artificial local
9902          variable (for the inlining) which acts as a stand-in for the
9903          corresponding formal parameter (of the inline function) will look
9904          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
9905          exactly a compile-time constant expression, but it isn't the address
9906          of the (artificial) local variable either.  Rather, it represents the
9907          *value* which the artificial local variable always has during its
9908          lifetime.  We currently have no way to represent such quasi-constant
9909          values in Dwarf, so for now we just punt and generate nothing.  */
9910       break;
9911
9912     default:
9913       /* No other kinds of rtx should be possible here.  */
9914       gcc_unreachable ();
9915     }
9916
9917 }
9918
9919 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
9920    for use in a later add_const_value_attribute call.  */
9921
9922 static rtx
9923 rtl_for_decl_init (tree init, tree type)
9924 {
9925   rtx rtl = NULL_RTX;
9926
9927   /* If a variable is initialized with a string constant without embedded
9928      zeros, build CONST_STRING.  */
9929   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
9930     {
9931       tree enttype = TREE_TYPE (type);
9932       tree domain = TYPE_DOMAIN (type);
9933       enum machine_mode mode = TYPE_MODE (enttype);
9934
9935       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
9936           && domain
9937           && integer_zerop (TYPE_MIN_VALUE (domain))
9938           && compare_tree_int (TYPE_MAX_VALUE (domain),
9939                                TREE_STRING_LENGTH (init) - 1) == 0
9940           && ((size_t) TREE_STRING_LENGTH (init)
9941               == strlen (TREE_STRING_POINTER (init)) + 1))
9942         rtl = gen_rtx_CONST_STRING (VOIDmode,
9943                                     ggc_strdup (TREE_STRING_POINTER (init)));
9944     }
9945   /* If the initializer is something that we know will expand into an
9946      immediate RTL constant, expand it now.  Expanding anything else
9947      tends to produce unresolved symbols; see debug/5770 and c++/6381.  */
9948   /* Aggregate, vector, and complex types may contain constructors that may
9949      result in code being generated when expand_expr is called, so we can't
9950      handle them here.  Integer and float are useful and safe types to handle
9951      here.  */
9952   else if ((INTEGRAL_TYPE_P (type) || SCALAR_FLOAT_TYPE_P (type))
9953            && initializer_constant_valid_p (init, type) == null_pointer_node)
9954     {
9955       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
9956
9957       /* If expand_expr returns a MEM, it wasn't immediate.  */
9958       gcc_assert (!rtl || !MEM_P (rtl));
9959     }
9960
9961   return rtl;
9962 }
9963
9964 /* Generate RTL for the variable DECL to represent its location.  */
9965
9966 static rtx
9967 rtl_for_decl_location (tree decl)
9968 {
9969   rtx rtl;
9970
9971   /* Here we have to decide where we are going to say the parameter "lives"
9972      (as far as the debugger is concerned).  We only have a couple of
9973      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
9974
9975      DECL_RTL normally indicates where the parameter lives during most of the
9976      activation of the function.  If optimization is enabled however, this
9977      could be either NULL or else a pseudo-reg.  Both of those cases indicate
9978      that the parameter doesn't really live anywhere (as far as the code
9979      generation parts of GCC are concerned) during most of the function's
9980      activation.  That will happen (for example) if the parameter is never
9981      referenced within the function.
9982
9983      We could just generate a location descriptor here for all non-NULL
9984      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
9985      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
9986      where DECL_RTL is NULL or is a pseudo-reg.
9987
9988      Note however that we can only get away with using DECL_INCOMING_RTL as
9989      a backup substitute for DECL_RTL in certain limited cases.  In cases
9990      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
9991      we can be sure that the parameter was passed using the same type as it is
9992      declared to have within the function, and that its DECL_INCOMING_RTL
9993      points us to a place where a value of that type is passed.
9994
9995      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
9996      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
9997      because in these cases DECL_INCOMING_RTL points us to a value of some
9998      type which is *different* from the type of the parameter itself.  Thus,
9999      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
10000      such cases, the debugger would end up (for example) trying to fetch a
10001      `float' from a place which actually contains the first part of a
10002      `double'.  That would lead to really incorrect and confusing
10003      output at debug-time.
10004
10005      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
10006      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
10007      are a couple of exceptions however.  On little-endian machines we can
10008      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
10009      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
10010      an integral type that is smaller than TREE_TYPE (decl). These cases arise
10011      when (on a little-endian machine) a non-prototyped function has a
10012      parameter declared to be of type `short' or `char'.  In such cases,
10013      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
10014      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
10015      passed `int' value.  If the debugger then uses that address to fetch
10016      a `short' or a `char' (on a little-endian machine) the result will be
10017      the correct data, so we allow for such exceptional cases below.
10018
10019      Note that our goal here is to describe the place where the given formal
10020      parameter lives during most of the function's activation (i.e. between the
10021      end of the prologue and the start of the epilogue).  We'll do that as best
10022      as we can. Note however that if the given formal parameter is modified
10023      sometime during the execution of the function, then a stack backtrace (at
10024      debug-time) will show the function as having been called with the *new*
10025      value rather than the value which was originally passed in.  This happens
10026      rarely enough that it is not a major problem, but it *is* a problem, and
10027      I'd like to fix it.
10028
10029      A future version of dwarf2out.c may generate two additional attributes for
10030      any given DW_TAG_formal_parameter DIE which will describe the "passed
10031      type" and the "passed location" for the given formal parameter in addition
10032      to the attributes we now generate to indicate the "declared type" and the
10033      "active location" for each parameter.  This additional set of attributes
10034      could be used by debuggers for stack backtraces. Separately, note that
10035      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
10036      This happens (for example) for inlined-instances of inline function formal
10037      parameters which are never referenced.  This really shouldn't be
10038      happening.  All PARM_DECL nodes should get valid non-NULL
10039      DECL_INCOMING_RTL values.  FIXME.  */
10040
10041   /* Use DECL_RTL as the "location" unless we find something better.  */
10042   rtl = DECL_RTL_IF_SET (decl);
10043
10044   /* When generating abstract instances, ignore everything except
10045      constants, symbols living in memory, and symbols living in
10046      fixed registers.  */
10047   if (! reload_completed)
10048     {
10049       if (rtl
10050           && (CONSTANT_P (rtl)
10051               || (MEM_P (rtl)
10052                   && CONSTANT_P (XEXP (rtl, 0)))
10053               || (REG_P (rtl)
10054                   && TREE_CODE (decl) == VAR_DECL
10055                   && TREE_STATIC (decl))))
10056         {
10057           rtl = targetm.delegitimize_address (rtl);
10058           return rtl;
10059         }
10060       rtl = NULL_RTX;
10061     }
10062   else if (TREE_CODE (decl) == PARM_DECL)
10063     {
10064       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
10065         {
10066           tree declared_type = TREE_TYPE (decl);
10067           tree passed_type = DECL_ARG_TYPE (decl);
10068           enum machine_mode dmode = TYPE_MODE (declared_type);
10069           enum machine_mode pmode = TYPE_MODE (passed_type);
10070
10071           /* This decl represents a formal parameter which was optimized out.
10072              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
10073              all cases where (rtl == NULL_RTX) just below.  */
10074           if (dmode == pmode)
10075             rtl = DECL_INCOMING_RTL (decl);
10076           else if (SCALAR_INT_MODE_P (dmode)
10077                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
10078                    && DECL_INCOMING_RTL (decl))
10079             {
10080               rtx inc = DECL_INCOMING_RTL (decl);
10081               if (REG_P (inc))
10082                 rtl = inc;
10083               else if (MEM_P (inc))
10084                 {
10085                   if (BYTES_BIG_ENDIAN)
10086                     rtl = adjust_address_nv (inc, dmode,
10087                                              GET_MODE_SIZE (pmode)
10088                                              - GET_MODE_SIZE (dmode));
10089                   else
10090                     rtl = inc;
10091                 }
10092             }
10093         }
10094
10095       /* If the parm was passed in registers, but lives on the stack, then
10096          make a big endian correction if the mode of the type of the
10097          parameter is not the same as the mode of the rtl.  */
10098       /* ??? This is the same series of checks that are made in dbxout.c before
10099          we reach the big endian correction code there.  It isn't clear if all
10100          of these checks are necessary here, but keeping them all is the safe
10101          thing to do.  */
10102       else if (MEM_P (rtl)
10103                && XEXP (rtl, 0) != const0_rtx
10104                && ! CONSTANT_P (XEXP (rtl, 0))
10105                /* Not passed in memory.  */
10106                && !MEM_P (DECL_INCOMING_RTL (decl))
10107                /* Not passed by invisible reference.  */
10108                && (!REG_P (XEXP (rtl, 0))
10109                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
10110                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
10111 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
10112                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
10113 #endif
10114                      )
10115                /* Big endian correction check.  */
10116                && BYTES_BIG_ENDIAN
10117                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
10118                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
10119                    < UNITS_PER_WORD))
10120         {
10121           int offset = (UNITS_PER_WORD
10122                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
10123
10124           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10125                              plus_constant (XEXP (rtl, 0), offset));
10126         }
10127     }
10128   else if (TREE_CODE (decl) == VAR_DECL
10129            && rtl
10130            && MEM_P (rtl)
10131            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
10132            && BYTES_BIG_ENDIAN)
10133     {
10134       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
10135       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
10136
10137       /* If a variable is declared "register" yet is smaller than
10138          a register, then if we store the variable to memory, it
10139          looks like we're storing a register-sized value, when in
10140          fact we are not.  We need to adjust the offset of the
10141          storage location to reflect the actual value's bytes,
10142          else gdb will not be able to display it.  */
10143       if (rsize > dsize)
10144         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
10145                            plus_constant (XEXP (rtl, 0), rsize-dsize));
10146     }
10147
10148   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
10149      and will have been substituted directly into all expressions that use it.
10150      C does not have such a concept, but C++ and other languages do.  */
10151   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
10152     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
10153
10154   if (rtl)
10155     rtl = targetm.delegitimize_address (rtl);
10156
10157   /* If we don't look past the constant pool, we risk emitting a
10158      reference to a constant pool entry that isn't referenced from
10159      code, and thus is not emitted.  */
10160   if (rtl)
10161     rtl = avoid_constant_pool_reference (rtl);
10162
10163   return rtl;
10164 }
10165
10166 /* We need to figure out what section we should use as the base for the
10167    address ranges where a given location is valid.
10168    1. If this particular DECL has a section associated with it, use that.
10169    2. If this function has a section associated with it, use that.
10170    3. Otherwise, use the text section.
10171    XXX: If you split a variable across multiple sections, we won't notice.  */
10172
10173 static const char *
10174 secname_for_decl (tree decl)
10175 {
10176   const char *secname;
10177
10178   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
10179     {
10180       tree sectree = DECL_SECTION_NAME (decl);
10181       secname = TREE_STRING_POINTER (sectree);
10182     }
10183   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
10184     {
10185       tree sectree = DECL_SECTION_NAME (current_function_decl);
10186       secname = TREE_STRING_POINTER (sectree);
10187     }
10188   else if (cfun
10189            && (last_text_section == in_unlikely_executed_text
10190                || (last_text_section == in_named
10191                    && last_text_section_name
10192                       == cfun->unlikely_text_section_name)))
10193     secname = cfun->cold_section_label;
10194   else
10195     secname = text_section_label;
10196
10197   return secname;
10198 }
10199
10200 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
10201    data attribute for a variable or a parameter.  We generate the
10202    DW_AT_const_value attribute only in those cases where the given variable
10203    or parameter does not have a true "location" either in memory or in a
10204    register.  This can happen (for example) when a constant is passed as an
10205    actual argument in a call to an inline function.  (It's possible that
10206    these things can crop up in other ways also.)  Note that one type of
10207    constant value which can be passed into an inlined function is a constant
10208    pointer.  This can happen for example if an actual argument in an inlined
10209    function call evaluates to a compile-time constant address.  */
10210
10211 static void
10212 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
10213                                        enum dwarf_attribute attr)
10214 {
10215   rtx rtl;
10216   dw_loc_descr_ref descr;
10217   var_loc_list *loc_list;
10218   struct var_loc_node *node;
10219   if (TREE_CODE (decl) == ERROR_MARK)
10220     return;
10221
10222   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
10223               || TREE_CODE (decl) == RESULT_DECL);
10224              
10225   /* See if we possibly have multiple locations for this variable.  */
10226   loc_list = lookup_decl_loc (decl);
10227
10228   /* If it truly has multiple locations, the first and last node will
10229      differ.  */
10230   if (loc_list && loc_list->first != loc_list->last)
10231     {
10232       const char *endname, *secname;
10233       dw_loc_list_ref list;
10234       rtx varloc;
10235
10236       /* Now that we know what section we are using for a base,
10237          actually construct the list of locations.
10238          The first location information is what is passed to the
10239          function that creates the location list, and the remaining
10240          locations just get added on to that list.
10241          Note that we only know the start address for a location
10242          (IE location changes), so to build the range, we use
10243          the range [current location start, next location start].
10244          This means we have to special case the last node, and generate
10245          a range of [last location start, end of function label].  */
10246
10247       node = loc_list->first;
10248       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10249       secname = secname_for_decl (decl);
10250
10251       list = new_loc_list (loc_descriptor (varloc),
10252                            node->label, node->next->label, secname, 1);
10253       node = node->next;
10254
10255       for (; node->next; node = node->next)
10256         if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10257           {
10258             /* The variable has a location between NODE->LABEL and
10259                NODE->NEXT->LABEL.  */
10260             varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10261             add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10262                                        node->label, node->next->label, secname);
10263           }
10264
10265       /* If the variable has a location at the last label
10266          it keeps its location until the end of function.  */
10267       if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
10268         {
10269           char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
10270
10271           varloc = NOTE_VAR_LOCATION (node->var_loc_note);
10272           if (!current_function_decl)
10273             endname = text_end_label;
10274           else
10275             {
10276               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
10277                                            current_function_funcdef_no);
10278               endname = ggc_strdup (label_id);
10279             }
10280           add_loc_descr_to_loc_list (&list, loc_descriptor (varloc),
10281                                      node->label, endname, secname);
10282         }
10283
10284       /* Finally, add the location list to the DIE, and we are done.  */
10285       add_AT_loc_list (die, attr, list);
10286       return;
10287     }
10288
10289   /* Try to get some constant RTL for this decl, and use that as the value of
10290      the location.  */
10291   
10292   rtl = rtl_for_decl_location (decl);
10293   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
10294     {
10295       add_const_value_attribute (die, rtl);
10296       return;
10297     }
10298   
10299   /* If we have tried to generate the location otherwise, and it
10300      didn't work out (we wouldn't be here if we did), and we have a one entry
10301      location list, try generating a location from that.  */
10302   if (loc_list && loc_list->first)
10303     {
10304       node = loc_list->first;
10305       descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note));
10306       if (descr)
10307         {
10308           add_AT_location_description (die, attr, descr);
10309           return;
10310         }
10311     }
10312
10313   /* We couldn't get any rtl, so try directly generating the location
10314      description from the tree.  */
10315   descr = loc_descriptor_from_tree (decl);
10316   if (descr)
10317     {
10318       add_AT_location_description (die, attr, descr);
10319       return;
10320     }
10321 }
10322
10323 /* If we don't have a copy of this variable in memory for some reason (such
10324    as a C++ member constant that doesn't have an out-of-line definition),
10325    we should tell the debugger about the constant value.  */
10326
10327 static void
10328 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
10329 {
10330   tree init = DECL_INITIAL (decl);
10331   tree type = TREE_TYPE (decl);
10332   rtx rtl;
10333
10334   if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
10335     /* OK */;
10336   else
10337     return;
10338
10339   rtl = rtl_for_decl_init (init, type);
10340   if (rtl)
10341     add_const_value_attribute (var_die, rtl);
10342 }
10343
10344 /* Convert the CFI instructions for the current function into a location
10345    list.  This is used for DW_AT_frame_base when we targeting a dwarf2
10346    consumer that does not support the dwarf3 DW_OP_call_frame_cfa.  */
10347
10348 static dw_loc_list_ref
10349 convert_cfa_to_loc_list (void)
10350 {
10351   dw_fde_ref fde;
10352   dw_loc_list_ref list, *list_tail;
10353   dw_cfi_ref cfi;
10354   dw_cfa_location last_cfa, next_cfa;
10355   const char *start_label, *last_label, *section;
10356
10357   fde = &fde_table[fde_table_in_use - 1];
10358
10359   section = secname_for_decl (current_function_decl);
10360   list_tail = &list;
10361   list = NULL;
10362
10363   next_cfa.reg = INVALID_REGNUM;
10364   next_cfa.offset = 0;
10365   next_cfa.indirect = 0;
10366   next_cfa.base_offset = 0;
10367
10368   start_label = fde->dw_fde_begin;
10369
10370   /* ??? Bald assumption that the CIE opcode list does not contain
10371      advance opcodes.  */
10372   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
10373     lookup_cfa_1 (cfi, &next_cfa);
10374
10375   last_cfa = next_cfa;
10376   last_label = start_label;
10377
10378   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
10379     switch (cfi->dw_cfi_opc)
10380       {
10381       case DW_CFA_advance_loc1:
10382       case DW_CFA_advance_loc2:
10383       case DW_CFA_advance_loc4:
10384         if (!cfa_equal_p (&last_cfa, &next_cfa))
10385           {
10386             *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10387                                        last_label, section, list == NULL);
10388
10389             list_tail = &(*list_tail)->dw_loc_next;
10390             last_cfa = next_cfa;
10391             start_label = last_label;
10392           }
10393         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
10394         break;
10395
10396       case DW_CFA_advance_loc:
10397         /* The encoding is complex enough that we should never emit this.  */
10398       case DW_CFA_remember_state:
10399       case DW_CFA_restore_state:
10400         /* We don't handle these two in this function.  It would be possible
10401            if it were to be required.  */
10402         gcc_unreachable ();
10403
10404       default:
10405         lookup_cfa_1 (cfi, &next_cfa);
10406         break;
10407       }
10408
10409   if (!cfa_equal_p (&last_cfa, &next_cfa))
10410     {
10411       *list_tail = new_loc_list (build_cfa_loc (&last_cfa), start_label,
10412                                  last_label, section, list == NULL);
10413       list_tail = &(*list_tail)->dw_loc_next;
10414       start_label = last_label;
10415     }
10416   *list_tail = new_loc_list (build_cfa_loc (&next_cfa), start_label,
10417                              fde->dw_fde_end, section, list == NULL);
10418
10419   return list;
10420 }
10421
10422 /* Compute a displacement from the "steady-state frame pointer" to
10423    the CFA, and store it in frame_pointer_cfa_offset.  */
10424
10425 static void
10426 compute_frame_pointer_to_cfa_displacement (void)
10427 {
10428   HOST_WIDE_INT offset;
10429   rtx reg, elim;
10430
10431 #ifdef FRAME_POINTER_CFA_OFFSET
10432   reg = frame_pointer_rtx;
10433   offset = FRAME_POINTER_CFA_OFFSET (current_function_decl);
10434 #else
10435   reg = arg_pointer_rtx;
10436   offset = ARG_POINTER_CFA_OFFSET (current_function_decl);
10437 #endif
10438
10439   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
10440   if (GET_CODE (elim) == PLUS)
10441     {
10442       offset += INTVAL (XEXP (elim, 1));
10443       elim = XEXP (elim, 0);
10444     }
10445   gcc_assert (elim == (frame_pointer_needed ? hard_frame_pointer_rtx
10446                        : stack_pointer_rtx));
10447
10448   frame_pointer_cfa_offset = -offset;
10449 }
10450
10451 /* Generate a DW_AT_name attribute given some string value to be included as
10452    the value of the attribute.  */
10453
10454 static void
10455 add_name_attribute (dw_die_ref die, const char *name_string)
10456 {
10457   if (name_string != NULL && *name_string != 0)
10458     {
10459       if (demangle_name_func)
10460         name_string = (*demangle_name_func) (name_string);
10461
10462       add_AT_string (die, DW_AT_name, name_string);
10463     }
10464 }
10465
10466 /* Generate a DW_AT_comp_dir attribute for DIE.  */
10467
10468 static void
10469 add_comp_dir_attribute (dw_die_ref die)
10470 {
10471   const char *wd = get_src_pwd ();
10472   if (wd != NULL)
10473     add_AT_string (die, DW_AT_comp_dir, wd);
10474 }
10475
10476 /* Given a tree node describing an array bound (either lower or upper) output
10477    a representation for that bound.  */
10478
10479 static void
10480 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
10481 {
10482   switch (TREE_CODE (bound))
10483     {
10484     case ERROR_MARK:
10485       return;
10486
10487     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
10488     case INTEGER_CST:
10489       if (! host_integerp (bound, 0)
10490           || (bound_attr == DW_AT_lower_bound
10491               && (((is_c_family () || is_java ()) &&  integer_zerop (bound))
10492                   || (is_fortran () && integer_onep (bound)))))
10493         /* Use the default.  */
10494         ;
10495       else
10496         add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
10497       break;
10498
10499     case CONVERT_EXPR:
10500     case NOP_EXPR:
10501     case NON_LVALUE_EXPR:
10502     case VIEW_CONVERT_EXPR:
10503       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
10504       break;
10505
10506     case SAVE_EXPR:
10507       break;
10508
10509     case VAR_DECL:
10510     case PARM_DECL:
10511     case RESULT_DECL:
10512       {
10513         dw_die_ref decl_die = lookup_decl_die (bound);
10514
10515         /* ??? Can this happen, or should the variable have been bound
10516            first?  Probably it can, since I imagine that we try to create
10517            the types of parameters in the order in which they exist in
10518            the list, and won't have created a forward reference to a
10519            later parameter.  */
10520         if (decl_die != NULL)
10521           add_AT_die_ref (subrange_die, bound_attr, decl_die);
10522         break;
10523       }
10524
10525     default:
10526       {
10527         /* Otherwise try to create a stack operation procedure to
10528            evaluate the value of the array bound.  */
10529
10530         dw_die_ref ctx, decl_die;
10531         dw_loc_descr_ref loc;
10532
10533         loc = loc_descriptor_from_tree (bound);
10534         if (loc == NULL)
10535           break;
10536
10537         if (current_function_decl == 0)
10538           ctx = comp_unit_die;
10539         else
10540           ctx = lookup_decl_die (current_function_decl);
10541
10542         decl_die = new_die (DW_TAG_variable, ctx, bound);
10543         add_AT_flag (decl_die, DW_AT_artificial, 1);
10544         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
10545         add_AT_loc (decl_die, DW_AT_location, loc);
10546
10547         add_AT_die_ref (subrange_die, bound_attr, decl_die);
10548         break;
10549       }
10550     }
10551 }
10552
10553 /* Note that the block of subscript information for an array type also
10554    includes information about the element type of type given array type.  */
10555
10556 static void
10557 add_subscript_info (dw_die_ref type_die, tree type)
10558 {
10559 #ifndef MIPS_DEBUGGING_INFO
10560   unsigned dimension_number;
10561 #endif
10562   tree lower, upper;
10563   dw_die_ref subrange_die;
10564
10565   /* The GNU compilers represent multidimensional array types as sequences of
10566      one dimensional array types whose element types are themselves array
10567      types.  Here we squish that down, so that each multidimensional array
10568      type gets only one array_type DIE in the Dwarf debugging info. The draft
10569      Dwarf specification say that we are allowed to do this kind of
10570      compression in C (because there is no difference between an array or
10571      arrays and a multidimensional array in C) but for other source languages
10572      (e.g. Ada) we probably shouldn't do this.  */
10573
10574   /* ??? The SGI dwarf reader fails for multidimensional arrays with a
10575      const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
10576      We work around this by disabling this feature.  See also
10577      gen_array_type_die.  */
10578 #ifndef MIPS_DEBUGGING_INFO
10579   for (dimension_number = 0;
10580        TREE_CODE (type) == ARRAY_TYPE;
10581        type = TREE_TYPE (type), dimension_number++)
10582 #endif
10583     {
10584       tree domain = TYPE_DOMAIN (type);
10585
10586       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
10587          and (in GNU C only) variable bounds.  Handle all three forms
10588          here.  */
10589       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
10590       if (domain)
10591         {
10592           /* We have an array type with specified bounds.  */
10593           lower = TYPE_MIN_VALUE (domain);
10594           upper = TYPE_MAX_VALUE (domain);
10595
10596           /* Define the index type.  */
10597           if (TREE_TYPE (domain))
10598             {
10599               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
10600                  TREE_TYPE field.  We can't emit debug info for this
10601                  because it is an unnamed integral type.  */
10602               if (TREE_CODE (domain) == INTEGER_TYPE
10603                   && TYPE_NAME (domain) == NULL_TREE
10604                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
10605                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
10606                 ;
10607               else
10608                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
10609                                     type_die);
10610             }
10611
10612           /* ??? If upper is NULL, the array has unspecified length,
10613              but it does have a lower bound.  This happens with Fortran
10614                dimension arr(N:*)
10615              Since the debugger is definitely going to need to know N
10616              to produce useful results, go ahead and output the lower
10617              bound solo, and hope the debugger can cope.  */
10618
10619           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
10620           if (upper)
10621             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
10622         }
10623
10624       /* Otherwise we have an array type with an unspecified length.  The
10625          DWARF-2 spec does not say how to handle this; let's just leave out the
10626          bounds.  */
10627     }
10628 }
10629
10630 static void
10631 add_byte_size_attribute (dw_die_ref die, tree tree_node)
10632 {
10633   unsigned size;
10634
10635   switch (TREE_CODE (tree_node))
10636     {
10637     case ERROR_MARK:
10638       size = 0;
10639       break;
10640     case ENUMERAL_TYPE:
10641     case RECORD_TYPE:
10642     case UNION_TYPE:
10643     case QUAL_UNION_TYPE:
10644       size = int_size_in_bytes (tree_node);
10645       break;
10646     case FIELD_DECL:
10647       /* For a data member of a struct or union, the DW_AT_byte_size is
10648          generally given as the number of bytes normally allocated for an
10649          object of the *declared* type of the member itself.  This is true
10650          even for bit-fields.  */
10651       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
10652       break;
10653     default:
10654       gcc_unreachable ();
10655     }
10656
10657   /* Note that `size' might be -1 when we get to this point.  If it is, that
10658      indicates that the byte size of the entity in question is variable.  We
10659      have no good way of expressing this fact in Dwarf at the present time,
10660      so just let the -1 pass on through.  */
10661   add_AT_unsigned (die, DW_AT_byte_size, size);
10662 }
10663
10664 /* For a FIELD_DECL node which represents a bit-field, output an attribute
10665    which specifies the distance in bits from the highest order bit of the
10666    "containing object" for the bit-field to the highest order bit of the
10667    bit-field itself.
10668
10669    For any given bit-field, the "containing object" is a hypothetical object
10670    (of some integral or enum type) within which the given bit-field lives.  The
10671    type of this hypothetical "containing object" is always the same as the
10672    declared type of the individual bit-field itself.  The determination of the
10673    exact location of the "containing object" for a bit-field is rather
10674    complicated.  It's handled by the `field_byte_offset' function (above).
10675
10676    Note that it is the size (in bytes) of the hypothetical "containing object"
10677    which will be given in the DW_AT_byte_size attribute for this bit-field.
10678    (See `byte_size_attribute' above).  */
10679
10680 static inline void
10681 add_bit_offset_attribute (dw_die_ref die, tree decl)
10682 {
10683   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
10684   tree type = DECL_BIT_FIELD_TYPE (decl);
10685   HOST_WIDE_INT bitpos_int;
10686   HOST_WIDE_INT highest_order_object_bit_offset;
10687   HOST_WIDE_INT highest_order_field_bit_offset;
10688   HOST_WIDE_INT unsigned bit_offset;
10689
10690   /* Must be a field and a bit field.  */
10691   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
10692
10693   /* We can't yet handle bit-fields whose offsets are variable, so if we
10694      encounter such things, just return without generating any attribute
10695      whatsoever.  Likewise for variable or too large size.  */
10696   if (! host_integerp (bit_position (decl), 0)
10697       || ! host_integerp (DECL_SIZE (decl), 1))
10698     return;
10699
10700   bitpos_int = int_bit_position (decl);
10701
10702   /* Note that the bit offset is always the distance (in bits) from the
10703      highest-order bit of the "containing object" to the highest-order bit of
10704      the bit-field itself.  Since the "high-order end" of any object or field
10705      is different on big-endian and little-endian machines, the computation
10706      below must take account of these differences.  */
10707   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
10708   highest_order_field_bit_offset = bitpos_int;
10709
10710   if (! BYTES_BIG_ENDIAN)
10711     {
10712       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
10713       highest_order_object_bit_offset += simple_type_size_in_bits (type);
10714     }
10715
10716   bit_offset
10717     = (! BYTES_BIG_ENDIAN
10718        ? highest_order_object_bit_offset - highest_order_field_bit_offset
10719        : highest_order_field_bit_offset - highest_order_object_bit_offset);
10720
10721   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
10722 }
10723
10724 /* For a FIELD_DECL node which represents a bit field, output an attribute
10725    which specifies the length in bits of the given field.  */
10726
10727 static inline void
10728 add_bit_size_attribute (dw_die_ref die, tree decl)
10729 {
10730   /* Must be a field and a bit field.  */
10731   gcc_assert (TREE_CODE (decl) == FIELD_DECL
10732               && DECL_BIT_FIELD_TYPE (decl));
10733
10734   if (host_integerp (DECL_SIZE (decl), 1))
10735     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
10736 }
10737
10738 /* If the compiled language is ANSI C, then add a 'prototyped'
10739    attribute, if arg types are given for the parameters of a function.  */
10740
10741 static inline void
10742 add_prototyped_attribute (dw_die_ref die, tree func_type)
10743 {
10744   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
10745       && TYPE_ARG_TYPES (func_type) != NULL)
10746     add_AT_flag (die, DW_AT_prototyped, 1);
10747 }
10748
10749 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
10750    by looking in either the type declaration or object declaration
10751    equate table.  */
10752
10753 static inline void
10754 add_abstract_origin_attribute (dw_die_ref die, tree origin)
10755 {
10756   dw_die_ref origin_die = NULL;
10757
10758   if (TREE_CODE (origin) != FUNCTION_DECL)
10759     {
10760       /* We may have gotten separated from the block for the inlined
10761          function, if we're in an exception handler or some such; make
10762          sure that the abstract function has been written out.
10763
10764          Doing this for nested functions is wrong, however; functions are
10765          distinct units, and our context might not even be inline.  */
10766       tree fn = origin;
10767
10768       if (TYPE_P (fn))
10769         fn = TYPE_STUB_DECL (fn);
10770       
10771       fn = decl_function_context (fn);
10772       if (fn)
10773         dwarf2out_abstract_function (fn);
10774     }
10775
10776   if (DECL_P (origin))
10777     origin_die = lookup_decl_die (origin);
10778   else if (TYPE_P (origin))
10779     origin_die = lookup_type_die (origin);
10780
10781   /* XXX: Functions that are never lowered don't always have correct block
10782      trees (in the case of java, they simply have no block tree, in some other
10783      languages).  For these functions, there is nothing we can really do to
10784      output correct debug info for inlined functions in all cases.  Rather
10785      than die, we'll just produce deficient debug info now, in that we will
10786      have variables without a proper abstract origin.  In the future, when all
10787      functions are lowered, we should re-add a gcc_assert (origin_die)
10788      here.  */
10789
10790   if (origin_die)
10791       add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
10792 }
10793
10794 /* We do not currently support the pure_virtual attribute.  */
10795
10796 static inline void
10797 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
10798 {
10799   if (DECL_VINDEX (func_decl))
10800     {
10801       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
10802
10803       if (host_integerp (DECL_VINDEX (func_decl), 0))
10804         add_AT_loc (die, DW_AT_vtable_elem_location,
10805                     new_loc_descr (DW_OP_constu,
10806                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
10807                                    0));
10808
10809       /* GNU extension: Record what type this method came from originally.  */
10810       if (debug_info_level > DINFO_LEVEL_TERSE)
10811         add_AT_die_ref (die, DW_AT_containing_type,
10812                         lookup_type_die (DECL_CONTEXT (func_decl)));
10813     }
10814 }
10815 \f
10816 /* Add source coordinate attributes for the given decl.  */
10817
10818 static void
10819 add_src_coords_attributes (dw_die_ref die, tree decl)
10820 {
10821   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
10822   unsigned file_index = lookup_filename (s.file);
10823
10824   add_AT_unsigned (die, DW_AT_decl_file, file_index);
10825   add_AT_unsigned (die, DW_AT_decl_line, s.line);
10826 }
10827
10828 /* Add a DW_AT_name attribute and source coordinate attribute for the
10829    given decl, but only if it actually has a name.  */
10830
10831 static void
10832 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
10833 {
10834   tree decl_name;
10835
10836   decl_name = DECL_NAME (decl);
10837   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
10838     {
10839       add_name_attribute (die, dwarf2_name (decl, 0));
10840       if (! DECL_ARTIFICIAL (decl))
10841         add_src_coords_attributes (die, decl);
10842
10843       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
10844           && TREE_PUBLIC (decl)
10845           && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
10846           && !DECL_ABSTRACT (decl)
10847           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
10848         add_AT_string (die, DW_AT_MIPS_linkage_name,
10849                        IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
10850     }
10851
10852 #ifdef VMS_DEBUGGING_INFO
10853   /* Get the function's name, as described by its RTL.  This may be different
10854      from the DECL_NAME name used in the source file.  */
10855   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
10856     {
10857       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
10858                    XEXP (DECL_RTL (decl), 0));
10859       VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
10860     }
10861 #endif
10862 }
10863
10864 /* Push a new declaration scope.  */
10865
10866 static void
10867 push_decl_scope (tree scope)
10868 {
10869   VEC_safe_push (tree, gc, decl_scope_table, scope);
10870 }
10871
10872 /* Pop a declaration scope.  */
10873
10874 static inline void
10875 pop_decl_scope (void)
10876 {
10877   VEC_pop (tree, decl_scope_table);
10878 }
10879
10880 /* Return the DIE for the scope that immediately contains this type.
10881    Non-named types get global scope.  Named types nested in other
10882    types get their containing scope if it's open, or global scope
10883    otherwise.  All other types (i.e. function-local named types) get
10884    the current active scope.  */
10885
10886 static dw_die_ref
10887 scope_die_for (tree t, dw_die_ref context_die)
10888 {
10889   dw_die_ref scope_die = NULL;
10890   tree containing_scope;
10891   int i;
10892
10893   /* Non-types always go in the current scope.  */
10894   gcc_assert (TYPE_P (t));
10895
10896   containing_scope = TYPE_CONTEXT (t);
10897
10898   /* Use the containing namespace if it was passed in (for a declaration).  */
10899   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
10900     {
10901       if (context_die == lookup_decl_die (containing_scope))
10902         /* OK */;
10903       else
10904         containing_scope = NULL_TREE;
10905     }
10906
10907   /* Ignore function type "scopes" from the C frontend.  They mean that
10908      a tagged type is local to a parmlist of a function declarator, but
10909      that isn't useful to DWARF.  */
10910   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
10911     containing_scope = NULL_TREE;
10912
10913   if (containing_scope == NULL_TREE)
10914     scope_die = comp_unit_die;
10915   else if (TYPE_P (containing_scope))
10916     {
10917       /* For types, we can just look up the appropriate DIE.  But
10918          first we check to see if we're in the middle of emitting it
10919          so we know where the new DIE should go.  */
10920       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
10921         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
10922           break;
10923
10924       if (i < 0)
10925         {
10926           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
10927                       || TREE_ASM_WRITTEN (containing_scope));
10928
10929           /* If none of the current dies are suitable, we get file scope.  */
10930           scope_die = comp_unit_die;
10931         }
10932       else
10933         scope_die = lookup_type_die (containing_scope);
10934     }
10935   else
10936     scope_die = context_die;
10937
10938   return scope_die;
10939 }
10940
10941 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
10942
10943 static inline int
10944 local_scope_p (dw_die_ref context_die)
10945 {
10946   for (; context_die; context_die = context_die->die_parent)
10947     if (context_die->die_tag == DW_TAG_inlined_subroutine
10948         || context_die->die_tag == DW_TAG_subprogram)
10949       return 1;
10950
10951   return 0;
10952 }
10953
10954 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
10955    whether or not to treat a DIE in this context as a declaration.  */
10956
10957 static inline int
10958 class_or_namespace_scope_p (dw_die_ref context_die)
10959 {
10960   return (context_die
10961           && (context_die->die_tag == DW_TAG_structure_type
10962               || context_die->die_tag == DW_TAG_union_type
10963               || context_die->die_tag == DW_TAG_namespace));
10964 }
10965
10966 /* Many forms of DIEs require a "type description" attribute.  This
10967    routine locates the proper "type descriptor" die for the type given
10968    by 'type', and adds a DW_AT_type attribute below the given die.  */
10969
10970 static void
10971 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
10972                     int decl_volatile, dw_die_ref context_die)
10973 {
10974   enum tree_code code  = TREE_CODE (type);
10975   dw_die_ref type_die  = NULL;
10976
10977   /* ??? If this type is an unnamed subrange type of an integral or
10978      floating-point type, use the inner type.  This is because we have no
10979      support for unnamed types in base_type_die.  This can happen if this is
10980      an Ada subrange type.  Correct solution is emit a subrange type die.  */
10981   if ((code == INTEGER_TYPE || code == REAL_TYPE)
10982       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
10983     type = TREE_TYPE (type), code = TREE_CODE (type);
10984
10985   if (code == ERROR_MARK
10986       /* Handle a special case.  For functions whose return type is void, we
10987          generate *no* type attribute.  (Note that no object may have type
10988          `void', so this only applies to function return types).  */
10989       || code == VOID_TYPE)
10990     return;
10991
10992   type_die = modified_type_die (type,
10993                                 decl_const || TYPE_READONLY (type),
10994                                 decl_volatile || TYPE_VOLATILE (type),
10995                                 context_die);
10996
10997   if (type_die != NULL)
10998     add_AT_die_ref (object_die, DW_AT_type, type_die);
10999 }
11000
11001 /* Given an object die, add the calling convention attribute for the
11002    function call type.  */
11003 static void
11004 add_calling_convention_attribute (dw_die_ref subr_die, tree type)
11005 {
11006   enum dwarf_calling_convention value = DW_CC_normal;
11007
11008   value = targetm.dwarf_calling_convention (type);
11009
11010   /* Only add the attribute if the backend requests it, and
11011      is not DW_CC_normal.  */
11012   if (value && (value != DW_CC_normal))
11013     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
11014 }
11015
11016 /* Given a tree pointer to a struct, class, union, or enum type node, return
11017    a pointer to the (string) tag name for the given type, or zero if the type
11018    was declared without a tag.  */
11019
11020 static const char *
11021 type_tag (tree type)
11022 {
11023   const char *name = 0;
11024
11025   if (TYPE_NAME (type) != 0)
11026     {
11027       tree t = 0;
11028
11029       /* Find the IDENTIFIER_NODE for the type name.  */
11030       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
11031         t = TYPE_NAME (type);
11032
11033       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
11034          a TYPE_DECL node, regardless of whether or not a `typedef' was
11035          involved.  */
11036       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11037                && ! DECL_IGNORED_P (TYPE_NAME (type)))
11038         t = DECL_NAME (TYPE_NAME (type));
11039
11040       /* Now get the name as a string, or invent one.  */
11041       if (t != 0)
11042         name = IDENTIFIER_POINTER (t);
11043     }
11044
11045   return (name == 0 || *name == '\0') ? 0 : name;
11046 }
11047
11048 /* Return the type associated with a data member, make a special check
11049    for bit field types.  */
11050
11051 static inline tree
11052 member_declared_type (tree member)
11053 {
11054   return (DECL_BIT_FIELD_TYPE (member)
11055           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
11056 }
11057
11058 /* Get the decl's label, as described by its RTL. This may be different
11059    from the DECL_NAME name used in the source file.  */
11060
11061 #if 0
11062 static const char *
11063 decl_start_label (tree decl)
11064 {
11065   rtx x;
11066   const char *fnname;
11067
11068   x = DECL_RTL (decl);
11069   gcc_assert (MEM_P (x));
11070
11071   x = XEXP (x, 0);
11072   gcc_assert (GET_CODE (x) == SYMBOL_REF);
11073
11074   fnname = XSTR (x, 0);
11075   return fnname;
11076 }
11077 #endif
11078 \f
11079 /* These routines generate the internal representation of the DIE's for
11080    the compilation unit.  Debugging information is collected by walking
11081    the declaration trees passed in from dwarf2out_decl().  */
11082
11083 static void
11084 gen_array_type_die (tree type, dw_die_ref context_die)
11085 {
11086   dw_die_ref scope_die = scope_die_for (type, context_die);
11087   dw_die_ref array_die;
11088   tree element_type;
11089
11090   /* ??? The SGI dwarf reader fails for array of array of enum types unless
11091      the inner array type comes before the outer array type.  Thus we must
11092      call gen_type_die before we call new_die.  See below also.  */
11093 #ifdef MIPS_DEBUGGING_INFO
11094   gen_type_die (TREE_TYPE (type), context_die);
11095 #endif
11096
11097   array_die = new_die (DW_TAG_array_type, scope_die, type);
11098   add_name_attribute (array_die, type_tag (type));
11099   equate_type_number_to_die (type, array_die);
11100
11101   if (TREE_CODE (type) == VECTOR_TYPE)
11102     {
11103       /* The frontend feeds us a representation for the vector as a struct
11104          containing an array.  Pull out the array type.  */
11105       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
11106       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
11107     }
11108
11109 #if 0
11110   /* We default the array ordering.  SDB will probably do
11111      the right things even if DW_AT_ordering is not present.  It's not even
11112      an issue until we start to get into multidimensional arrays anyway.  If
11113      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
11114      then we'll have to put the DW_AT_ordering attribute back in.  (But if
11115      and when we find out that we need to put these in, we will only do so
11116      for multidimensional arrays.  */
11117   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
11118 #endif
11119
11120 #ifdef MIPS_DEBUGGING_INFO
11121   /* The SGI compilers handle arrays of unknown bound by setting
11122      AT_declaration and not emitting any subrange DIEs.  */
11123   if (! TYPE_DOMAIN (type))
11124     add_AT_flag (array_die, DW_AT_declaration, 1);
11125   else
11126 #endif
11127     add_subscript_info (array_die, type);
11128
11129   /* Add representation of the type of the elements of this array type.  */
11130   element_type = TREE_TYPE (type);
11131
11132   /* ??? The SGI dwarf reader fails for multidimensional arrays with a
11133      const enum type.  E.g. const enum machine_mode insn_operand_mode[2][10].
11134      We work around this by disabling this feature.  See also
11135      add_subscript_info.  */
11136 #ifndef MIPS_DEBUGGING_INFO
11137   while (TREE_CODE (element_type) == ARRAY_TYPE)
11138     element_type = TREE_TYPE (element_type);
11139
11140   gen_type_die (element_type, context_die);
11141 #endif
11142
11143   add_type_attribute (array_die, element_type, 0, 0, context_die);
11144 }
11145
11146 #if 0
11147 static void
11148 gen_entry_point_die (tree decl, dw_die_ref context_die)
11149 {
11150   tree origin = decl_ultimate_origin (decl);
11151   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
11152
11153   if (origin != NULL)
11154     add_abstract_origin_attribute (decl_die, origin);
11155   else
11156     {
11157       add_name_and_src_coords_attributes (decl_die, decl);
11158       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
11159                           0, 0, context_die);
11160     }
11161
11162   if (DECL_ABSTRACT (decl))
11163     equate_decl_number_to_die (decl, decl_die);
11164   else
11165     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
11166 }
11167 #endif
11168
11169 /* Walk through the list of incomplete types again, trying once more to
11170    emit full debugging info for them.  */
11171
11172 static void
11173 retry_incomplete_types (void)
11174 {
11175   int i;
11176
11177   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
11178     gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
11179 }
11180
11181 /* Generate a DIE to represent an inlined instance of an enumeration type.  */
11182
11183 static void
11184 gen_inlined_enumeration_type_die (tree type, dw_die_ref context_die)
11185 {
11186   dw_die_ref type_die = new_die (DW_TAG_enumeration_type, context_die, type);
11187
11188   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11189      be incomplete and such types are not marked.  */
11190   add_abstract_origin_attribute (type_die, type);
11191 }
11192
11193 /* Generate a DIE to represent an inlined instance of a structure type.  */
11194
11195 static void
11196 gen_inlined_structure_type_die (tree type, dw_die_ref context_die)
11197 {
11198   dw_die_ref type_die = new_die (DW_TAG_structure_type, context_die, type);
11199
11200   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11201      be incomplete and such types are not marked.  */
11202   add_abstract_origin_attribute (type_die, type);
11203 }
11204
11205 /* Generate a DIE to represent an inlined instance of a union type.  */
11206
11207 static void
11208 gen_inlined_union_type_die (tree type, dw_die_ref context_die)
11209 {
11210   dw_die_ref type_die = new_die (DW_TAG_union_type, context_die, type);
11211
11212   /* We do not check for TREE_ASM_WRITTEN (type) being set, as the type may
11213      be incomplete and such types are not marked.  */
11214   add_abstract_origin_attribute (type_die, type);
11215 }
11216
11217 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
11218    include all of the information about the enumeration values also. Each
11219    enumerated type name/value is listed as a child of the enumerated type
11220    DIE.  */
11221
11222 static dw_die_ref
11223 gen_enumeration_type_die (tree type, dw_die_ref context_die)
11224 {
11225   dw_die_ref type_die = lookup_type_die (type);
11226
11227   if (type_die == NULL)
11228     {
11229       type_die = new_die (DW_TAG_enumeration_type,
11230                           scope_die_for (type, context_die), type);
11231       equate_type_number_to_die (type, type_die);
11232       add_name_attribute (type_die, type_tag (type));
11233     }
11234   else if (! TYPE_SIZE (type))
11235     return type_die;
11236   else
11237     remove_AT (type_die, DW_AT_declaration);
11238
11239   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
11240      given enum type is incomplete, do not generate the DW_AT_byte_size
11241      attribute or the DW_AT_element_list attribute.  */
11242   if (TYPE_SIZE (type))
11243     {
11244       tree link;
11245
11246       TREE_ASM_WRITTEN (type) = 1;
11247       add_byte_size_attribute (type_die, type);
11248       if (TYPE_STUB_DECL (type) != NULL_TREE)
11249         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
11250
11251       /* If the first reference to this type was as the return type of an
11252          inline function, then it may not have a parent.  Fix this now.  */
11253       if (type_die->die_parent == NULL)
11254         add_child_die (scope_die_for (type, context_die), type_die);
11255
11256       for (link = TYPE_VALUES (type);
11257            link != NULL; link = TREE_CHAIN (link))
11258         {
11259           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
11260           tree value = TREE_VALUE (link);
11261
11262           add_name_attribute (enum_die,
11263                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
11264
11265           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
11266             /* DWARF2 does not provide a way of indicating whether or
11267                not enumeration constants are signed or unsigned.  GDB
11268                always assumes the values are signed, so we output all
11269                values as if they were signed.  That means that
11270                enumeration constants with very large unsigned values
11271                will appear to have negative values in the debugger.  */
11272             add_AT_int (enum_die, DW_AT_const_value,
11273                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
11274         }
11275     }
11276   else
11277     add_AT_flag (type_die, DW_AT_declaration, 1);
11278
11279   return type_die;
11280 }
11281
11282 /* Generate a DIE to represent either a real live formal parameter decl or to
11283    represent just the type of some formal parameter position in some function
11284    type.
11285
11286    Note that this routine is a bit unusual because its argument may be a
11287    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
11288    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
11289    node.  If it's the former then this function is being called to output a
11290    DIE to represent a formal parameter object (or some inlining thereof).  If
11291    it's the latter, then this function is only being called to output a
11292    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
11293    argument type of some subprogram type.  */
11294
11295 static dw_die_ref
11296 gen_formal_parameter_die (tree node, dw_die_ref context_die)
11297 {
11298   dw_die_ref parm_die
11299     = new_die (DW_TAG_formal_parameter, context_die, node);
11300   tree origin;
11301
11302   switch (TREE_CODE_CLASS (TREE_CODE (node)))
11303     {
11304     case tcc_declaration:
11305       origin = decl_ultimate_origin (node);
11306       if (origin != NULL)
11307         add_abstract_origin_attribute (parm_die, origin);
11308       else
11309         {
11310           add_name_and_src_coords_attributes (parm_die, node);
11311           add_type_attribute (parm_die, TREE_TYPE (node),
11312                               TREE_READONLY (node),
11313                               TREE_THIS_VOLATILE (node),
11314                               context_die);
11315           if (DECL_ARTIFICIAL (node))
11316             add_AT_flag (parm_die, DW_AT_artificial, 1);
11317         }
11318
11319       equate_decl_number_to_die (node, parm_die);
11320       if (! DECL_ABSTRACT (node))
11321         add_location_or_const_value_attribute (parm_die, node, DW_AT_location);
11322
11323       break;
11324
11325     case tcc_type:
11326       /* We were called with some kind of a ..._TYPE node.  */
11327       add_type_attribute (parm_die, node, 0, 0, context_die);
11328       break;
11329
11330     default:
11331       gcc_unreachable ();
11332     }
11333
11334   return parm_die;
11335 }
11336
11337 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
11338    at the end of an (ANSI prototyped) formal parameters list.  */
11339
11340 static void
11341 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
11342 {
11343   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
11344 }
11345
11346 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
11347    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
11348    parameters as specified in some function type specification (except for
11349    those which appear as part of a function *definition*).  */
11350
11351 static void
11352 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
11353 {
11354   tree link;
11355   tree formal_type = NULL;
11356   tree first_parm_type;
11357   tree arg;
11358
11359   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
11360     {
11361       arg = DECL_ARGUMENTS (function_or_method_type);
11362       function_or_method_type = TREE_TYPE (function_or_method_type);
11363     }
11364   else
11365     arg = NULL_TREE;
11366
11367   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
11368
11369   /* Make our first pass over the list of formal parameter types and output a
11370      DW_TAG_formal_parameter DIE for each one.  */
11371   for (link = first_parm_type; link; )
11372     {
11373       dw_die_ref parm_die;
11374
11375       formal_type = TREE_VALUE (link);
11376       if (formal_type == void_type_node)
11377         break;
11378
11379       /* Output a (nameless) DIE to represent the formal parameter itself.  */
11380       parm_die = gen_formal_parameter_die (formal_type, context_die);
11381       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
11382            && link == first_parm_type)
11383           || (arg && DECL_ARTIFICIAL (arg)))
11384         add_AT_flag (parm_die, DW_AT_artificial, 1);
11385
11386       link = TREE_CHAIN (link);
11387       if (arg)
11388         arg = TREE_CHAIN (arg);
11389     }
11390
11391   /* If this function type has an ellipsis, add a
11392      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
11393   if (formal_type != void_type_node)
11394     gen_unspecified_parameters_die (function_or_method_type, context_die);
11395
11396   /* Make our second (and final) pass over the list of formal parameter types
11397      and output DIEs to represent those types (as necessary).  */
11398   for (link = TYPE_ARG_TYPES (function_or_method_type);
11399        link && TREE_VALUE (link);
11400        link = TREE_CHAIN (link))
11401     gen_type_die (TREE_VALUE (link), context_die);
11402 }
11403
11404 /* We want to generate the DIE for TYPE so that we can generate the
11405    die for MEMBER, which has been defined; we will need to refer back
11406    to the member declaration nested within TYPE.  If we're trying to
11407    generate minimal debug info for TYPE, processing TYPE won't do the
11408    trick; we need to attach the member declaration by hand.  */
11409
11410 static void
11411 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
11412 {
11413   gen_type_die (type, context_die);
11414
11415   /* If we're trying to avoid duplicate debug info, we may not have
11416      emitted the member decl for this function.  Emit it now.  */
11417   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
11418       && ! lookup_decl_die (member))
11419     {
11420       dw_die_ref type_die;
11421       gcc_assert (!decl_ultimate_origin (member));
11422
11423       push_decl_scope (type);
11424       type_die = lookup_type_die (type);
11425       if (TREE_CODE (member) == FUNCTION_DECL)
11426         gen_subprogram_die (member, type_die);
11427       else if (TREE_CODE (member) == FIELD_DECL)
11428         {
11429           /* Ignore the nameless fields that are used to skip bits but handle
11430              C++ anonymous unions and structs.  */
11431           if (DECL_NAME (member) != NULL_TREE
11432               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
11433               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
11434             {
11435               gen_type_die (member_declared_type (member), type_die);
11436               gen_field_die (member, type_die);
11437             }
11438         }
11439       else
11440         gen_variable_die (member, type_die);
11441
11442       pop_decl_scope ();
11443     }
11444 }
11445
11446 /* Generate the DWARF2 info for the "abstract" instance of a function which we
11447    may later generate inlined and/or out-of-line instances of.  */
11448
11449 static void
11450 dwarf2out_abstract_function (tree decl)
11451 {
11452   dw_die_ref old_die;
11453   tree save_fn;
11454   tree context;
11455   int was_abstract = DECL_ABSTRACT (decl);
11456
11457   /* Make sure we have the actual abstract inline, not a clone.  */
11458   decl = DECL_ORIGIN (decl);
11459
11460   old_die = lookup_decl_die (decl);
11461   if (old_die && get_AT (old_die, DW_AT_inline))
11462     /* We've already generated the abstract instance.  */
11463     return;
11464
11465   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
11466      we don't get confused by DECL_ABSTRACT.  */
11467   if (debug_info_level > DINFO_LEVEL_TERSE)
11468     {
11469       context = decl_class_context (decl);
11470       if (context)
11471         gen_type_die_for_member
11472           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
11473     }
11474
11475   /* Pretend we've just finished compiling this function.  */
11476   save_fn = current_function_decl;
11477   current_function_decl = decl;
11478
11479   set_decl_abstract_flags (decl, 1);
11480   dwarf2out_decl (decl);
11481   if (! was_abstract)
11482     set_decl_abstract_flags (decl, 0);
11483
11484   current_function_decl = save_fn;
11485 }
11486
11487 /* Generate a DIE to represent a declared function (either file-scope or
11488    block-local).  */
11489
11490 static void
11491 gen_subprogram_die (tree decl, dw_die_ref context_die)
11492 {
11493   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11494   tree origin = decl_ultimate_origin (decl);
11495   dw_die_ref subr_die;
11496   tree fn_arg_types;
11497   tree outer_scope;
11498   dw_die_ref old_die = lookup_decl_die (decl);
11499   int declaration = (current_function_decl != decl
11500                      || class_or_namespace_scope_p (context_die));
11501
11502   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
11503      started to generate the abstract instance of an inline, decided to output
11504      its containing class, and proceeded to emit the declaration of the inline
11505      from the member list for the class.  If so, DECLARATION takes priority;
11506      we'll get back to the abstract instance when done with the class.  */
11507
11508   /* The class-scope declaration DIE must be the primary DIE.  */
11509   if (origin && declaration && class_or_namespace_scope_p (context_die))
11510     {
11511       origin = NULL;
11512       gcc_assert (!old_die);
11513     }
11514
11515   /* Now that the C++ front end lazily declares artificial member fns, we
11516      might need to retrofit the declaration into its class.  */
11517   if (!declaration && !origin && !old_die
11518       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
11519       && !class_or_namespace_scope_p (context_die)
11520       && debug_info_level > DINFO_LEVEL_TERSE)
11521     old_die = force_decl_die (decl);
11522
11523   if (origin != NULL)
11524     {
11525       gcc_assert (!declaration || local_scope_p (context_die));
11526
11527       /* Fixup die_parent for the abstract instance of a nested
11528          inline function.  */
11529       if (old_die && old_die->die_parent == NULL)
11530         add_child_die (context_die, old_die);
11531
11532       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11533       add_abstract_origin_attribute (subr_die, origin);
11534     }
11535   else if (old_die)
11536     {
11537       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11538       unsigned file_index = lookup_filename (s.file);
11539
11540       if (!get_AT_flag (old_die, DW_AT_declaration)
11541           /* We can have a normal definition following an inline one in the
11542              case of redefinition of GNU C extern inlines.
11543              It seems reasonable to use AT_specification in this case.  */
11544           && !get_AT (old_die, DW_AT_inline))
11545         {
11546           /* Detect and ignore this case, where we are trying to output
11547              something we have already output.  */
11548           return;
11549         }
11550
11551       /* If the definition comes from the same place as the declaration,
11552          maybe use the old DIE.  We always want the DIE for this function
11553          that has the *_pc attributes to be under comp_unit_die so the
11554          debugger can find it.  We also need to do this for abstract
11555          instances of inlines, since the spec requires the out-of-line copy
11556          to have the same parent.  For local class methods, this doesn't
11557          apply; we just use the old DIE.  */
11558       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
11559           && (DECL_ARTIFICIAL (decl)
11560               || (get_AT_unsigned (old_die, DW_AT_decl_file) == file_index
11561                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
11562                       == (unsigned) s.line))))
11563         {
11564           subr_die = old_die;
11565
11566           /* Clear out the declaration attribute and the formal parameters.
11567              Do not remove all children, because it is possible that this
11568              declaration die was forced using force_decl_die(). In such
11569              cases die that forced declaration die (e.g. TAG_imported_module)
11570              is one of the children that we do not want to remove.  */
11571           remove_AT (subr_die, DW_AT_declaration);
11572           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
11573         }
11574       else
11575         {
11576           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11577           add_AT_specification (subr_die, old_die);
11578           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11579             add_AT_unsigned (subr_die, DW_AT_decl_file, file_index);
11580           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11581               != (unsigned) s.line)
11582             add_AT_unsigned
11583               (subr_die, DW_AT_decl_line, s.line);
11584         }
11585     }
11586   else
11587     {
11588       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
11589
11590       if (TREE_PUBLIC (decl))
11591         add_AT_flag (subr_die, DW_AT_external, 1);
11592
11593       add_name_and_src_coords_attributes (subr_die, decl);
11594       if (debug_info_level > DINFO_LEVEL_TERSE)
11595         {
11596           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
11597           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
11598                               0, 0, context_die);
11599         }
11600
11601       add_pure_or_virtual_attribute (subr_die, decl);
11602       if (DECL_ARTIFICIAL (decl))
11603         add_AT_flag (subr_die, DW_AT_artificial, 1);
11604
11605       if (TREE_PROTECTED (decl))
11606         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
11607       else if (TREE_PRIVATE (decl))
11608         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
11609     }
11610
11611   if (declaration)
11612     {
11613       if (!old_die || !get_AT (old_die, DW_AT_inline))
11614         {
11615           add_AT_flag (subr_die, DW_AT_declaration, 1);
11616
11617           /* The first time we see a member function, it is in the context of
11618              the class to which it belongs.  We make sure of this by emitting
11619              the class first.  The next time is the definition, which is
11620              handled above.  The two may come from the same source text.
11621
11622              Note that force_decl_die() forces function declaration die. It is
11623              later reused to represent definition.  */
11624           equate_decl_number_to_die (decl, subr_die);
11625         }
11626     }
11627   else if (DECL_ABSTRACT (decl))
11628     {
11629       if (DECL_DECLARED_INLINE_P (decl))
11630         {
11631           if (cgraph_function_possibly_inlined_p (decl))
11632             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
11633           else
11634             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
11635         }
11636       else
11637         {
11638           if (cgraph_function_possibly_inlined_p (decl))
11639             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
11640           else
11641             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
11642         }
11643
11644       equate_decl_number_to_die (decl, subr_die);
11645     }
11646   else if (!DECL_EXTERNAL (decl))
11647     {
11648       if (!old_die || !get_AT (old_die, DW_AT_inline))
11649         equate_decl_number_to_die (decl, subr_die);
11650
11651       if (!flag_reorder_blocks_and_partition)
11652         {
11653           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
11654                                        current_function_funcdef_no);
11655           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
11656           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11657                                        current_function_funcdef_no);
11658           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
11659           
11660           add_pubname (decl, subr_die);
11661           add_arange (decl, subr_die);
11662         }
11663       else
11664         {  /* Do nothing for now; maybe need to duplicate die, one for
11665               hot section and ond for cold section, then use the hot/cold
11666               section begin/end labels to generate the aranges...  */
11667           /*
11668             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
11669             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
11670             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
11671             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
11672
11673             add_pubname (decl, subr_die);
11674             add_arange (decl, subr_die);
11675             add_arange (decl, subr_die);
11676            */
11677         }
11678
11679 #ifdef MIPS_DEBUGGING_INFO
11680       /* Add a reference to the FDE for this routine.  */
11681       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
11682 #endif
11683
11684       /* We define the "frame base" as the function's CFA.  This is more
11685          convenient for several reasons: (1) It's stable across the prologue
11686          and epilogue, which makes it better than just a frame pointer,
11687          (2) With dwarf3, there exists a one-byte encoding that allows us
11688          to reference the .debug_frame data by proxy, but failing that,
11689          (3) We can at least reuse the code inspection and interpretation
11690          code that determines the CFA position at various points in the
11691          function.  */
11692       /* ??? Use some command-line or configury switch to enable the use
11693          of dwarf3 DW_OP_call_frame_cfa.  At present there are no dwarf
11694          consumers that understand it; fall back to "pure" dwarf2 and
11695          convert the CFA data into a location list.  */
11696       {
11697         dw_loc_list_ref list = convert_cfa_to_loc_list ();
11698         if (list->dw_loc_next)
11699           add_AT_loc_list (subr_die, DW_AT_frame_base, list);
11700         else
11701           add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
11702       }
11703
11704       /* Compute a displacement from the "steady-state frame pointer" to
11705          the CFA.  The former is what all stack slots and argument slots
11706          will reference in the rtl; the later is what we've told the 
11707          debugger about.  We'll need to adjust all frame_base references
11708          by this displacement.  */
11709       compute_frame_pointer_to_cfa_displacement ();
11710
11711       if (cfun->static_chain_decl)
11712         add_AT_location_description (subr_die, DW_AT_static_link,
11713                  loc_descriptor_from_tree (cfun->static_chain_decl));
11714     }
11715
11716   /* Now output descriptions of the arguments for this function. This gets
11717      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
11718      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
11719      `...' at the end of the formal parameter list.  In order to find out if
11720      there was a trailing ellipsis or not, we must instead look at the type
11721      associated with the FUNCTION_DECL.  This will be a node of type
11722      FUNCTION_TYPE. If the chain of type nodes hanging off of this
11723      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
11724      an ellipsis at the end.  */
11725
11726   /* In the case where we are describing a mere function declaration, all we
11727      need to do here (and all we *can* do here) is to describe the *types* of
11728      its formal parameters.  */
11729   if (debug_info_level <= DINFO_LEVEL_TERSE)
11730     ;
11731   else if (declaration)
11732     gen_formal_types_die (decl, subr_die);
11733   else
11734     {
11735       /* Generate DIEs to represent all known formal parameters.  */
11736       tree arg_decls = DECL_ARGUMENTS (decl);
11737       tree parm;
11738
11739       /* When generating DIEs, generate the unspecified_parameters DIE
11740          instead if we come across the arg "__builtin_va_alist" */
11741       for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
11742         if (TREE_CODE (parm) == PARM_DECL)
11743           {
11744             if (DECL_NAME (parm)
11745                 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
11746                             "__builtin_va_alist"))
11747               gen_unspecified_parameters_die (parm, subr_die);
11748             else
11749               gen_decl_die (parm, subr_die);
11750           }
11751
11752       /* Decide whether we need an unspecified_parameters DIE at the end.
11753          There are 2 more cases to do this for: 1) the ansi ... declaration -
11754          this is detectable when the end of the arg list is not a
11755          void_type_node 2) an unprototyped function declaration (not a
11756          definition).  This just means that we have no info about the
11757          parameters at all.  */
11758       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
11759       if (fn_arg_types != NULL)
11760         {
11761           /* This is the prototyped case, check for....  */
11762           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
11763             gen_unspecified_parameters_die (decl, subr_die);
11764         }
11765       else if (DECL_INITIAL (decl) == NULL_TREE)
11766         gen_unspecified_parameters_die (decl, subr_die);
11767     }
11768
11769   /* Output Dwarf info for all of the stuff within the body of the function
11770      (if it has one - it may be just a declaration).  */
11771   outer_scope = DECL_INITIAL (decl);
11772
11773   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
11774      a function.  This BLOCK actually represents the outermost binding contour
11775      for the function, i.e. the contour in which the function's formal
11776      parameters and labels get declared. Curiously, it appears that the front
11777      end doesn't actually put the PARM_DECL nodes for the current function onto
11778      the BLOCK_VARS list for this outer scope, but are strung off of the
11779      DECL_ARGUMENTS list for the function instead.
11780
11781      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
11782      the LABEL_DECL nodes for the function however, and we output DWARF info
11783      for those in decls_for_scope.  Just within the `outer_scope' there will be
11784      a BLOCK node representing the function's outermost pair of curly braces,
11785      and any blocks used for the base and member initializers of a C++
11786      constructor function.  */
11787   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
11788     {
11789       /* Emit a DW_TAG_variable DIE for a named return value.  */
11790       if (DECL_NAME (DECL_RESULT (decl)))
11791         gen_decl_die (DECL_RESULT (decl), subr_die);
11792
11793       current_function_has_inlines = 0;
11794       decls_for_scope (outer_scope, subr_die, 0);
11795
11796 #if 0 && defined (MIPS_DEBUGGING_INFO)
11797       if (current_function_has_inlines)
11798         {
11799           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
11800           if (! comp_unit_has_inlines)
11801             {
11802               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
11803               comp_unit_has_inlines = 1;
11804             }
11805         }
11806 #endif
11807     }
11808   /* Add the calling convention attribute if requested.  */
11809   add_calling_convention_attribute (subr_die, TREE_TYPE (decl));
11810
11811 }
11812
11813 /* Generate a DIE to represent a declared data object.  */
11814
11815 static void
11816 gen_variable_die (tree decl, dw_die_ref context_die)
11817 {
11818   tree origin = decl_ultimate_origin (decl);
11819   dw_die_ref var_die = new_die (DW_TAG_variable, context_die, decl);
11820
11821   dw_die_ref old_die = lookup_decl_die (decl);
11822   int declaration = (DECL_EXTERNAL (decl)
11823                      /* If DECL is COMDAT and has not actually been
11824                         emitted, we cannot take its address; there
11825                         might end up being no definition anywhere in
11826                         the program.  For example, consider the C++
11827                         test case:
11828
11829                           template <class T>
11830                           struct S { static const int i = 7; };
11831
11832                           template <class T>
11833                           const int S<T>::i;
11834
11835                           int f() { return S<int>::i; }
11836                           
11837                         Here, S<int>::i is not DECL_EXTERNAL, but no
11838                         definition is required, so the compiler will
11839                         not emit a definition.  */  
11840                      || (TREE_CODE (decl) == VAR_DECL
11841                          && DECL_COMDAT (decl) && !TREE_ASM_WRITTEN (decl))
11842                      || class_or_namespace_scope_p (context_die));
11843
11844   if (origin != NULL)
11845     add_abstract_origin_attribute (var_die, origin);
11846
11847   /* Loop unrolling can create multiple blocks that refer to the same
11848      static variable, so we must test for the DW_AT_declaration flag.
11849
11850      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
11851      copy decls and set the DECL_ABSTRACT flag on them instead of
11852      sharing them.
11853
11854      ??? Duplicated blocks have been rewritten to use .debug_ranges.
11855
11856      ??? The declare_in_namespace support causes us to get two DIEs for one
11857      variable, both of which are declarations.  We want to avoid considering
11858      one to be a specification, so we must test that this DIE is not a
11859      declaration.  */
11860   else if (old_die && TREE_STATIC (decl) && ! declaration
11861            && get_AT_flag (old_die, DW_AT_declaration) == 1)
11862     {
11863       /* This is a definition of a C++ class level static.  */
11864       add_AT_specification (var_die, old_die);
11865       if (DECL_NAME (decl))
11866         {
11867           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
11868           unsigned file_index = lookup_filename (s.file);
11869
11870           if (get_AT_unsigned (old_die, DW_AT_decl_file) != file_index)
11871             add_AT_unsigned (var_die, DW_AT_decl_file, file_index);
11872
11873           if (get_AT_unsigned (old_die, DW_AT_decl_line)
11874               != (unsigned) s.line)
11875
11876             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
11877         }
11878     }
11879   else
11880     {
11881       add_name_and_src_coords_attributes (var_die, decl);
11882       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
11883                           TREE_THIS_VOLATILE (decl), context_die);
11884
11885       if (TREE_PUBLIC (decl))
11886         add_AT_flag (var_die, DW_AT_external, 1);
11887
11888       if (DECL_ARTIFICIAL (decl))
11889         add_AT_flag (var_die, DW_AT_artificial, 1);
11890
11891       if (TREE_PROTECTED (decl))
11892         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
11893       else if (TREE_PRIVATE (decl))
11894         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
11895     }
11896
11897   if (declaration)
11898     add_AT_flag (var_die, DW_AT_declaration, 1);
11899
11900   if (DECL_ABSTRACT (decl) || declaration)
11901     equate_decl_number_to_die (decl, var_die);
11902
11903   if (! declaration && ! DECL_ABSTRACT (decl))
11904     {
11905       add_location_or_const_value_attribute (var_die, decl, DW_AT_location);
11906       add_pubname (decl, var_die);
11907     }
11908   else
11909     tree_add_const_value_attribute (var_die, decl);
11910 }
11911
11912 /* Generate a DIE to represent a label identifier.  */
11913
11914 static void
11915 gen_label_die (tree decl, dw_die_ref context_die)
11916 {
11917   tree origin = decl_ultimate_origin (decl);
11918   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
11919   rtx insn;
11920   char label[MAX_ARTIFICIAL_LABEL_BYTES];
11921
11922   if (origin != NULL)
11923     add_abstract_origin_attribute (lbl_die, origin);
11924   else
11925     add_name_and_src_coords_attributes (lbl_die, decl);
11926
11927   if (DECL_ABSTRACT (decl))
11928     equate_decl_number_to_die (decl, lbl_die);
11929   else
11930     {
11931       insn = DECL_RTL_IF_SET (decl);
11932
11933       /* Deleted labels are programmer specified labels which have been
11934          eliminated because of various optimizations.  We still emit them
11935          here so that it is possible to put breakpoints on them.  */
11936       if (insn
11937           && (LABEL_P (insn)
11938               || ((NOTE_P (insn)
11939                    && NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL))))
11940         {
11941           /* When optimization is enabled (via -O) some parts of the compiler
11942              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
11943              represent source-level labels which were explicitly declared by
11944              the user.  This really shouldn't be happening though, so catch
11945              it if it ever does happen.  */
11946           gcc_assert (!INSN_DELETED_P (insn));
11947
11948           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
11949           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
11950         }
11951     }
11952 }
11953
11954 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
11955    attributes to the DIE for a block STMT, to describe where the inlined
11956    function was called from.  This is similar to add_src_coords_attributes.  */
11957
11958 static inline void
11959 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
11960 {
11961   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
11962   unsigned file_index = lookup_filename (s.file);
11963
11964   add_AT_unsigned (die, DW_AT_call_file, file_index);
11965   add_AT_unsigned (die, DW_AT_call_line, s.line);
11966 }
11967
11968 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
11969    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
11970
11971 static inline void
11972 add_high_low_attributes (tree stmt, dw_die_ref die)
11973 {
11974   char label[MAX_ARTIFICIAL_LABEL_BYTES];
11975
11976   if (BLOCK_FRAGMENT_CHAIN (stmt))
11977     {
11978       tree chain;
11979
11980       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
11981
11982       chain = BLOCK_FRAGMENT_CHAIN (stmt);
11983       do
11984         {
11985           add_ranges (chain);
11986           chain = BLOCK_FRAGMENT_CHAIN (chain);
11987         }
11988       while (chain);
11989       add_ranges (NULL);
11990     }
11991   else
11992     {
11993       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
11994                                    BLOCK_NUMBER (stmt));
11995       add_AT_lbl_id (die, DW_AT_low_pc, label);
11996       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
11997                                    BLOCK_NUMBER (stmt));
11998       add_AT_lbl_id (die, DW_AT_high_pc, label);
11999     }
12000 }
12001
12002 /* Generate a DIE for a lexical block.  */
12003
12004 static void
12005 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
12006 {
12007   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
12008
12009   if (! BLOCK_ABSTRACT (stmt))
12010     add_high_low_attributes (stmt, stmt_die);
12011
12012   decls_for_scope (stmt, stmt_die, depth);
12013 }
12014
12015 /* Generate a DIE for an inlined subprogram.  */
12016
12017 static void
12018 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
12019 {
12020   tree decl = block_ultimate_origin (stmt);
12021
12022   /* Emit info for the abstract instance first, if we haven't yet.  We
12023      must emit this even if the block is abstract, otherwise when we
12024      emit the block below (or elsewhere), we may end up trying to emit
12025      a die whose origin die hasn't been emitted, and crashing.  */
12026   dwarf2out_abstract_function (decl);
12027
12028   if (! BLOCK_ABSTRACT (stmt))
12029     {
12030       dw_die_ref subr_die
12031         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
12032
12033       add_abstract_origin_attribute (subr_die, decl);
12034       add_high_low_attributes (stmt, subr_die);
12035       add_call_src_coords_attributes (stmt, subr_die);
12036
12037       decls_for_scope (stmt, subr_die, depth);
12038       current_function_has_inlines = 1;
12039     }
12040   else
12041     /* We may get here if we're the outer block of function A that was
12042        inlined into function B that was inlined into function C.  When
12043        generating debugging info for C, dwarf2out_abstract_function(B)
12044        would mark all inlined blocks as abstract, including this one.
12045        So, we wouldn't (and shouldn't) expect labels to be generated
12046        for this one.  Instead, just emit debugging info for
12047        declarations within the block.  This is particularly important
12048        in the case of initializers of arguments passed from B to us:
12049        if they're statement expressions containing declarations, we
12050        wouldn't generate dies for their abstract variables, and then,
12051        when generating dies for the real variables, we'd die (pun
12052        intended :-)  */
12053     gen_lexical_block_die (stmt, context_die, depth);
12054 }
12055
12056 /* Generate a DIE for a field in a record, or structure.  */
12057
12058 static void
12059 gen_field_die (tree decl, dw_die_ref context_die)
12060 {
12061   dw_die_ref decl_die;
12062
12063   if (TREE_TYPE (decl) == error_mark_node)
12064     return;
12065
12066   decl_die = new_die (DW_TAG_member, context_die, decl);
12067   add_name_and_src_coords_attributes (decl_die, decl);
12068   add_type_attribute (decl_die, member_declared_type (decl),
12069                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
12070                       context_die);
12071
12072   if (DECL_BIT_FIELD_TYPE (decl))
12073     {
12074       add_byte_size_attribute (decl_die, decl);
12075       add_bit_size_attribute (decl_die, decl);
12076       add_bit_offset_attribute (decl_die, decl);
12077     }
12078
12079   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
12080     add_data_member_location_attribute (decl_die, decl);
12081
12082   if (DECL_ARTIFICIAL (decl))
12083     add_AT_flag (decl_die, DW_AT_artificial, 1);
12084
12085   if (TREE_PROTECTED (decl))
12086     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
12087   else if (TREE_PRIVATE (decl))
12088     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
12089
12090   /* Equate decl number to die, so that we can look up this decl later on.  */
12091   equate_decl_number_to_die (decl, decl_die);
12092 }
12093
12094 #if 0
12095 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12096    Use modified_type_die instead.
12097    We keep this code here just in case these types of DIEs may be needed to
12098    represent certain things in other languages (e.g. Pascal) someday.  */
12099
12100 static void
12101 gen_pointer_type_die (tree type, dw_die_ref context_die)
12102 {
12103   dw_die_ref ptr_die
12104     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
12105
12106   equate_type_number_to_die (type, ptr_die);
12107   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12108   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12109 }
12110
12111 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
12112    Use modified_type_die instead.
12113    We keep this code here just in case these types of DIEs may be needed to
12114    represent certain things in other languages (e.g. Pascal) someday.  */
12115
12116 static void
12117 gen_reference_type_die (tree type, dw_die_ref context_die)
12118 {
12119   dw_die_ref ref_die
12120     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
12121
12122   equate_type_number_to_die (type, ref_die);
12123   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
12124   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
12125 }
12126 #endif
12127
12128 /* Generate a DIE for a pointer to a member type.  */
12129
12130 static void
12131 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
12132 {
12133   dw_die_ref ptr_die
12134     = new_die (DW_TAG_ptr_to_member_type,
12135                scope_die_for (type, context_die), type);
12136
12137   equate_type_number_to_die (type, ptr_die);
12138   add_AT_die_ref (ptr_die, DW_AT_containing_type,
12139                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
12140   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
12141 }
12142
12143 /* Generate the DIE for the compilation unit.  */
12144
12145 static dw_die_ref
12146 gen_compile_unit_die (const char *filename)
12147 {
12148   dw_die_ref die;
12149   char producer[250];
12150   const char *language_string = lang_hooks.name;
12151   int language;
12152
12153   die = new_die (DW_TAG_compile_unit, NULL, NULL);
12154
12155   if (filename)
12156     {
12157       add_name_attribute (die, filename);
12158       /* Don't add cwd for <built-in>.  */
12159       if (filename[0] != DIR_SEPARATOR && filename[0] != '<')
12160         add_comp_dir_attribute (die);
12161     }
12162
12163   sprintf (producer, "%s %s", language_string, version_string);
12164
12165 #ifdef MIPS_DEBUGGING_INFO
12166   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
12167      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
12168      not appear in the producer string, the debugger reaches the conclusion
12169      that the object file is stripped and has no debugging information.
12170      To get the MIPS/SGI debugger to believe that there is debugging
12171      information in the object file, we add a -g to the producer string.  */
12172   if (debug_info_level > DINFO_LEVEL_TERSE)
12173     strcat (producer, " -g");
12174 #endif
12175
12176   add_AT_string (die, DW_AT_producer, producer);
12177
12178   if (strcmp (language_string, "GNU C++") == 0)
12179     language = DW_LANG_C_plus_plus;
12180   else if (strcmp (language_string, "GNU Ada") == 0)
12181     language = DW_LANG_Ada95;
12182   else if (strcmp (language_string, "GNU F77") == 0)
12183     language = DW_LANG_Fortran77;
12184   else if (strcmp (language_string, "GNU F95") == 0)
12185     language = DW_LANG_Fortran95;
12186   else if (strcmp (language_string, "GNU Pascal") == 0)
12187     language = DW_LANG_Pascal83;
12188   else if (strcmp (language_string, "GNU Java") == 0)
12189     language = DW_LANG_Java;
12190   else
12191     language = DW_LANG_C89;
12192
12193   add_AT_unsigned (die, DW_AT_language, language);
12194   return die;
12195 }
12196
12197 /* Generate a DIE for a string type.  */
12198
12199 static void
12200 gen_string_type_die (tree type, dw_die_ref context_die)
12201 {
12202   dw_die_ref type_die
12203     = new_die (DW_TAG_string_type, scope_die_for (type, context_die), type);
12204
12205   equate_type_number_to_die (type, type_die);
12206
12207   /* ??? Fudge the string length attribute for now.
12208      TODO: add string length info.  */
12209 #if 0
12210   string_length_attribute (TYPE_MAX_VALUE (TYPE_DOMAIN (type)));
12211   bound_representation (upper_bound, 0, 'u');
12212 #endif
12213 }
12214
12215 /* Generate the DIE for a base class.  */
12216
12217 static void
12218 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
12219 {
12220   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
12221
12222   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
12223   add_data_member_location_attribute (die, binfo);
12224
12225   if (BINFO_VIRTUAL_P (binfo))
12226     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12227
12228   if (access == access_public_node)
12229     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
12230   else if (access == access_protected_node)
12231     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
12232 }
12233
12234 /* Generate a DIE for a class member.  */
12235
12236 static void
12237 gen_member_die (tree type, dw_die_ref context_die)
12238 {
12239   tree member;
12240   tree binfo = TYPE_BINFO (type);
12241   dw_die_ref child;
12242
12243   /* If this is not an incomplete type, output descriptions of each of its
12244      members. Note that as we output the DIEs necessary to represent the
12245      members of this record or union type, we will also be trying to output
12246      DIEs to represent the *types* of those members. However the `type'
12247      function (above) will specifically avoid generating type DIEs for member
12248      types *within* the list of member DIEs for this (containing) type except
12249      for those types (of members) which are explicitly marked as also being
12250      members of this (containing) type themselves.  The g++ front- end can
12251      force any given type to be treated as a member of some other (containing)
12252      type by setting the TYPE_CONTEXT of the given (member) type to point to
12253      the TREE node representing the appropriate (containing) type.  */
12254
12255   /* First output info about the base classes.  */
12256   if (binfo)
12257     {
12258       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
12259       int i;
12260       tree base;
12261
12262       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
12263         gen_inheritance_die (base,
12264                              (accesses ? VEC_index (tree, accesses, i)
12265                               : access_public_node), context_die);
12266     }
12267
12268   /* Now output info about the data members and type members.  */
12269   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
12270     {
12271       /* If we thought we were generating minimal debug info for TYPE
12272          and then changed our minds, some of the member declarations
12273          may have already been defined.  Don't define them again, but
12274          do put them in the right order.  */
12275
12276       child = lookup_decl_die (member);
12277       if (child)
12278         splice_child_die (context_die, child);
12279       else
12280         gen_decl_die (member, context_die);
12281     }
12282
12283   /* Now output info about the function members (if any).  */
12284   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
12285     {
12286       /* Don't include clones in the member list.  */
12287       if (DECL_ABSTRACT_ORIGIN (member))
12288         continue;
12289
12290       child = lookup_decl_die (member);
12291       if (child)
12292         splice_child_die (context_die, child);
12293       else
12294         gen_decl_die (member, context_die);
12295     }
12296 }
12297
12298 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
12299    is set, we pretend that the type was never defined, so we only get the
12300    member DIEs needed by later specification DIEs.  */
12301
12302 static void
12303 gen_struct_or_union_type_die (tree type, dw_die_ref context_die)
12304 {
12305   dw_die_ref type_die = lookup_type_die (type);
12306   dw_die_ref scope_die = 0;
12307   int nested = 0;
12308   int complete = (TYPE_SIZE (type)
12309                   && (! TYPE_STUB_DECL (type)
12310                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
12311   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
12312
12313   if (type_die && ! complete)
12314     return;
12315
12316   if (TYPE_CONTEXT (type) != NULL_TREE
12317       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12318           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
12319     nested = 1;
12320
12321   scope_die = scope_die_for (type, context_die);
12322
12323   if (! type_die || (nested && scope_die == comp_unit_die))
12324     /* First occurrence of type or toplevel definition of nested class.  */
12325     {
12326       dw_die_ref old_die = type_die;
12327
12328       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
12329                           ? DW_TAG_structure_type : DW_TAG_union_type,
12330                           scope_die, type);
12331       equate_type_number_to_die (type, type_die);
12332       if (old_die)
12333         add_AT_specification (type_die, old_die);
12334       else
12335         add_name_attribute (type_die, type_tag (type));
12336     }
12337   else
12338     remove_AT (type_die, DW_AT_declaration);
12339
12340   /* If this type has been completed, then give it a byte_size attribute and
12341      then give a list of members.  */
12342   if (complete && !ns_decl)
12343     {
12344       /* Prevent infinite recursion in cases where the type of some member of
12345          this type is expressed in terms of this type itself.  */
12346       TREE_ASM_WRITTEN (type) = 1;
12347       add_byte_size_attribute (type_die, type);
12348       if (TYPE_STUB_DECL (type) != NULL_TREE)
12349         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
12350
12351       /* If the first reference to this type was as the return type of an
12352          inline function, then it may not have a parent.  Fix this now.  */
12353       if (type_die->die_parent == NULL)
12354         add_child_die (scope_die, type_die);
12355
12356       push_decl_scope (type);
12357       gen_member_die (type, type_die);
12358       pop_decl_scope ();
12359
12360       /* GNU extension: Record what type our vtable lives in.  */
12361       if (TYPE_VFIELD (type))
12362         {
12363           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
12364
12365           gen_type_die (vtype, context_die);
12366           add_AT_die_ref (type_die, DW_AT_containing_type,
12367                           lookup_type_die (vtype));
12368         }
12369     }
12370   else
12371     {
12372       add_AT_flag (type_die, DW_AT_declaration, 1);
12373
12374       /* We don't need to do this for function-local types.  */
12375       if (TYPE_STUB_DECL (type)
12376           && ! decl_function_context (TYPE_STUB_DECL (type)))
12377         VEC_safe_push (tree, gc, incomplete_types, type);
12378     }
12379 }
12380
12381 /* Generate a DIE for a subroutine _type_.  */
12382
12383 static void
12384 gen_subroutine_type_die (tree type, dw_die_ref context_die)
12385 {
12386   tree return_type = TREE_TYPE (type);
12387   dw_die_ref subr_die
12388     = new_die (DW_TAG_subroutine_type,
12389                scope_die_for (type, context_die), type);
12390
12391   equate_type_number_to_die (type, subr_die);
12392   add_prototyped_attribute (subr_die, type);
12393   add_type_attribute (subr_die, return_type, 0, 0, context_die);
12394   gen_formal_types_die (type, subr_die);
12395 }
12396
12397 /* Generate a DIE for a type definition.  */
12398
12399 static void
12400 gen_typedef_die (tree decl, dw_die_ref context_die)
12401 {
12402   dw_die_ref type_die;
12403   tree origin;
12404
12405   if (TREE_ASM_WRITTEN (decl))
12406     return;
12407
12408   TREE_ASM_WRITTEN (decl) = 1;
12409   type_die = new_die (DW_TAG_typedef, context_die, decl);
12410   origin = decl_ultimate_origin (decl);
12411   if (origin != NULL)
12412     add_abstract_origin_attribute (type_die, origin);
12413   else
12414     {
12415       tree type;
12416
12417       add_name_and_src_coords_attributes (type_die, decl);
12418       if (DECL_ORIGINAL_TYPE (decl))
12419         {
12420           type = DECL_ORIGINAL_TYPE (decl);
12421
12422           gcc_assert (type != TREE_TYPE (decl));
12423           equate_type_number_to_die (TREE_TYPE (decl), type_die);
12424         }
12425       else
12426         type = TREE_TYPE (decl);
12427
12428       add_type_attribute (type_die, type, TREE_READONLY (decl),
12429                           TREE_THIS_VOLATILE (decl), context_die);
12430     }
12431
12432   if (DECL_ABSTRACT (decl))
12433     equate_decl_number_to_die (decl, type_die);
12434 }
12435
12436 /* Generate a type description DIE.  */
12437
12438 static void
12439 gen_type_die (tree type, dw_die_ref context_die)
12440 {
12441   int need_pop;
12442
12443   if (type == NULL_TREE || type == error_mark_node)
12444     return;
12445
12446   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12447       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
12448     {
12449       if (TREE_ASM_WRITTEN (type))
12450         return;
12451
12452       /* Prevent broken recursion; we can't hand off to the same type.  */
12453       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
12454
12455       TREE_ASM_WRITTEN (type) = 1;
12456       gen_decl_die (TYPE_NAME (type), context_die);
12457       return;
12458     }
12459
12460   /* We are going to output a DIE to represent the unqualified version
12461      of this type (i.e. without any const or volatile qualifiers) so
12462      get the main variant (i.e. the unqualified version) of this type
12463      now.  (Vectors are special because the debugging info is in the
12464      cloned type itself).  */
12465   if (TREE_CODE (type) != VECTOR_TYPE)
12466     type = type_main_variant (type);
12467
12468   if (TREE_ASM_WRITTEN (type))
12469     return;
12470
12471   switch (TREE_CODE (type))
12472     {
12473     case ERROR_MARK:
12474       break;
12475
12476     case POINTER_TYPE:
12477     case REFERENCE_TYPE:
12478       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
12479          ensures that the gen_type_die recursion will terminate even if the
12480          type is recursive.  Recursive types are possible in Ada.  */
12481       /* ??? We could perhaps do this for all types before the switch
12482          statement.  */
12483       TREE_ASM_WRITTEN (type) = 1;
12484
12485       /* For these types, all that is required is that we output a DIE (or a
12486          set of DIEs) to represent the "basis" type.  */
12487       gen_type_die (TREE_TYPE (type), context_die);
12488       break;
12489
12490     case OFFSET_TYPE:
12491       /* This code is used for C++ pointer-to-data-member types.
12492          Output a description of the relevant class type.  */
12493       gen_type_die (TYPE_OFFSET_BASETYPE (type), context_die);
12494
12495       /* Output a description of the type of the object pointed to.  */
12496       gen_type_die (TREE_TYPE (type), context_die);
12497
12498       /* Now output a DIE to represent this pointer-to-data-member type
12499          itself.  */
12500       gen_ptr_to_mbr_type_die (type, context_die);
12501       break;
12502
12503     case FUNCTION_TYPE:
12504       /* Force out return type (in case it wasn't forced out already).  */
12505       gen_type_die (TREE_TYPE (type), context_die);
12506       gen_subroutine_type_die (type, context_die);
12507       break;
12508
12509     case METHOD_TYPE:
12510       /* Force out return type (in case it wasn't forced out already).  */
12511       gen_type_die (TREE_TYPE (type), context_die);
12512       gen_subroutine_type_die (type, context_die);
12513       break;
12514
12515     case ARRAY_TYPE:
12516       if (TYPE_STRING_FLAG (type) && TREE_CODE (TREE_TYPE (type)) == CHAR_TYPE)
12517         {
12518           gen_type_die (TREE_TYPE (type), context_die);
12519           gen_string_type_die (type, context_die);
12520         }
12521       else
12522         gen_array_type_die (type, context_die);
12523       break;
12524
12525     case VECTOR_TYPE:
12526       gen_array_type_die (type, context_die);
12527       break;
12528
12529     case ENUMERAL_TYPE:
12530     case RECORD_TYPE:
12531     case UNION_TYPE:
12532     case QUAL_UNION_TYPE:
12533       /* If this is a nested type whose containing class hasn't been written
12534          out yet, writing it out will cover this one, too.  This does not apply
12535          to instantiations of member class templates; they need to be added to
12536          the containing class as they are generated.  FIXME: This hurts the
12537          idea of combining type decls from multiple TUs, since we can't predict
12538          what set of template instantiations we'll get.  */
12539       if (TYPE_CONTEXT (type)
12540           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
12541           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
12542         {
12543           gen_type_die (TYPE_CONTEXT (type), context_die);
12544
12545           if (TREE_ASM_WRITTEN (type))
12546             return;
12547
12548           /* If that failed, attach ourselves to the stub.  */
12549           push_decl_scope (TYPE_CONTEXT (type));
12550           context_die = lookup_type_die (TYPE_CONTEXT (type));
12551           need_pop = 1;
12552         }
12553       else
12554         {
12555           declare_in_namespace (type, context_die);
12556           need_pop = 0;
12557         }
12558
12559       if (TREE_CODE (type) == ENUMERAL_TYPE)
12560         gen_enumeration_type_die (type, context_die);
12561       else
12562         gen_struct_or_union_type_die (type, context_die);
12563
12564       if (need_pop)
12565         pop_decl_scope ();
12566
12567       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
12568          it up if it is ever completed.  gen_*_type_die will set it for us
12569          when appropriate.  */
12570       return;
12571
12572     case VOID_TYPE:
12573     case INTEGER_TYPE:
12574     case REAL_TYPE:
12575     case COMPLEX_TYPE:
12576     case BOOLEAN_TYPE:
12577     case CHAR_TYPE:
12578       /* No DIEs needed for fundamental types.  */
12579       break;
12580
12581     case LANG_TYPE:
12582       /* No Dwarf representation currently defined.  */
12583       break;
12584
12585     default:
12586       gcc_unreachable ();
12587     }
12588
12589   TREE_ASM_WRITTEN (type) = 1;
12590 }
12591
12592 /* Generate a DIE for a tagged type instantiation.  */
12593
12594 static void
12595 gen_tagged_type_instantiation_die (tree type, dw_die_ref context_die)
12596 {
12597   if (type == NULL_TREE || type == error_mark_node)
12598     return;
12599
12600   /* We are going to output a DIE to represent the unqualified version of
12601      this type (i.e. without any const or volatile qualifiers) so make sure
12602      that we have the main variant (i.e. the unqualified version) of this
12603      type now.  */
12604   gcc_assert (type == type_main_variant (type));
12605
12606   /* Do not check TREE_ASM_WRITTEN (type) as it may not be set if this is
12607      an instance of an unresolved type.  */
12608
12609   switch (TREE_CODE (type))
12610     {
12611     case ERROR_MARK:
12612       break;
12613
12614     case ENUMERAL_TYPE:
12615       gen_inlined_enumeration_type_die (type, context_die);
12616       break;
12617
12618     case RECORD_TYPE:
12619       gen_inlined_structure_type_die (type, context_die);
12620       break;
12621
12622     case UNION_TYPE:
12623     case QUAL_UNION_TYPE:
12624       gen_inlined_union_type_die (type, context_die);
12625       break;
12626
12627     default:
12628       gcc_unreachable ();
12629     }
12630 }
12631
12632 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
12633    things which are local to the given block.  */
12634
12635 static void
12636 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
12637 {
12638   int must_output_die = 0;
12639   tree origin;
12640   tree decl;
12641   enum tree_code origin_code;
12642
12643   /* Ignore blocks that are NULL.  */
12644   if (stmt == NULL_TREE)
12645     return;
12646
12647   /* If the block is one fragment of a non-contiguous block, do not
12648      process the variables, since they will have been done by the
12649      origin block.  Do process subblocks.  */
12650   if (BLOCK_FRAGMENT_ORIGIN (stmt))
12651     {
12652       tree sub;
12653
12654       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
12655         gen_block_die (sub, context_die, depth + 1);
12656
12657       return;
12658     }
12659
12660   /* Determine the "ultimate origin" of this block.  This block may be an
12661      inlined instance of an inlined instance of inline function, so we have
12662      to trace all of the way back through the origin chain to find out what
12663      sort of node actually served as the original seed for the creation of
12664      the current block.  */
12665   origin = block_ultimate_origin (stmt);
12666   origin_code = (origin != NULL) ? TREE_CODE (origin) : ERROR_MARK;
12667
12668   /* Determine if we need to output any Dwarf DIEs at all to represent this
12669      block.  */
12670   if (origin_code == FUNCTION_DECL)
12671     /* The outer scopes for inlinings *must* always be represented.  We
12672        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
12673     must_output_die = 1;
12674   else
12675     {
12676       /* In the case where the current block represents an inlining of the
12677          "body block" of an inline function, we must *NOT* output any DIE for
12678          this block because we have already output a DIE to represent the whole
12679          inlined function scope and the "body block" of any function doesn't
12680          really represent a different scope according to ANSI C rules.  So we
12681          check here to make sure that this block does not represent a "body
12682          block inlining" before trying to set the MUST_OUTPUT_DIE flag.  */
12683       if (! is_body_block (origin ? origin : stmt))
12684         {
12685           /* Determine if this block directly contains any "significant"
12686              local declarations which we will need to output DIEs for.  */
12687           if (debug_info_level > DINFO_LEVEL_TERSE)
12688             /* We are not in terse mode so *any* local declaration counts
12689                as being a "significant" one.  */
12690             must_output_die = (BLOCK_VARS (stmt) != NULL 
12691                                && (TREE_USED (stmt) 
12692                                    || TREE_ASM_WRITTEN (stmt)
12693                                    || BLOCK_ABSTRACT (stmt)));
12694           else
12695             /* We are in terse mode, so only local (nested) function
12696                definitions count as "significant" local declarations.  */
12697             for (decl = BLOCK_VARS (stmt);
12698                  decl != NULL; decl = TREE_CHAIN (decl))
12699               if (TREE_CODE (decl) == FUNCTION_DECL
12700                   && DECL_INITIAL (decl))
12701                 {
12702                   must_output_die = 1;
12703                   break;
12704                 }
12705         }
12706     }
12707
12708   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
12709      DIE for any block which contains no significant local declarations at
12710      all.  Rather, in such cases we just call `decls_for_scope' so that any
12711      needed Dwarf info for any sub-blocks will get properly generated. Note
12712      that in terse mode, our definition of what constitutes a "significant"
12713      local declaration gets restricted to include only inlined function
12714      instances and local (nested) function definitions.  */
12715   if (must_output_die)
12716     {
12717       if (origin_code == FUNCTION_DECL)
12718         gen_inlined_subroutine_die (stmt, context_die, depth);
12719       else
12720         gen_lexical_block_die (stmt, context_die, depth);
12721     }
12722   else
12723     decls_for_scope (stmt, context_die, depth);
12724 }
12725
12726 /* Generate all of the decls declared within a given scope and (recursively)
12727    all of its sub-blocks.  */
12728
12729 static void
12730 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
12731 {
12732   tree decl;
12733   tree subblocks;
12734
12735   /* Ignore NULL blocks.  */
12736   if (stmt == NULL_TREE)
12737     return;
12738
12739   if (TREE_USED (stmt))
12740     {
12741       /* Output the DIEs to represent all of the data objects and typedefs
12742          declared directly within this block but not within any nested
12743          sub-blocks.  Also, nested function and tag DIEs have been
12744          generated with a parent of NULL; fix that up now.  */
12745       for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
12746         {
12747           dw_die_ref die;
12748           
12749           if (TREE_CODE (decl) == FUNCTION_DECL)
12750             die = lookup_decl_die (decl);
12751           else if (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl))
12752             die = lookup_type_die (TREE_TYPE (decl));
12753           else
12754             die = NULL;
12755           
12756           if (die != NULL && die->die_parent == NULL)
12757             add_child_die (context_die, die);
12758           /* Do not produce debug information for static variables since
12759              these might be optimized out.  We are called for these later
12760              in cgraph_varpool_analyze_pending_decls. */
12761           if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl))
12762             ;
12763           else
12764             gen_decl_die (decl, context_die);
12765         }
12766     }
12767
12768   /* If we're at -g1, we're not interested in subblocks.  */
12769   if (debug_info_level <= DINFO_LEVEL_TERSE)
12770     return;
12771
12772   /* Output the DIEs to represent all sub-blocks (and the items declared
12773      therein) of this block.  */
12774   for (subblocks = BLOCK_SUBBLOCKS (stmt);
12775        subblocks != NULL;
12776        subblocks = BLOCK_CHAIN (subblocks))
12777     gen_block_die (subblocks, context_die, depth + 1);
12778 }
12779
12780 /* Is this a typedef we can avoid emitting?  */
12781
12782 static inline int
12783 is_redundant_typedef (tree decl)
12784 {
12785   if (TYPE_DECL_IS_STUB (decl))
12786     return 1;
12787
12788   if (DECL_ARTIFICIAL (decl)
12789       && DECL_CONTEXT (decl)
12790       && is_tagged_type (DECL_CONTEXT (decl))
12791       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
12792       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
12793     /* Also ignore the artificial member typedef for the class name.  */
12794     return 1;
12795
12796   return 0;
12797 }
12798
12799 /* Returns the DIE for decl.  A DIE will always be returned.  */
12800
12801 static dw_die_ref
12802 force_decl_die (tree decl)
12803 {
12804   dw_die_ref decl_die;
12805   unsigned saved_external_flag;
12806   tree save_fn = NULL_TREE;
12807   decl_die = lookup_decl_die (decl);
12808   if (!decl_die)
12809     {
12810       dw_die_ref context_die;
12811       tree decl_context = DECL_CONTEXT (decl);
12812       if (decl_context)
12813         {
12814           /* Find die that represents this context.  */
12815           if (TYPE_P (decl_context))
12816             context_die = force_type_die (decl_context);
12817           else
12818             context_die = force_decl_die (decl_context);
12819         }
12820       else
12821         context_die = comp_unit_die;
12822
12823       decl_die = lookup_decl_die (decl);
12824       if (decl_die)
12825         return decl_die;
12826
12827       switch (TREE_CODE (decl))
12828         {
12829         case FUNCTION_DECL:
12830           /* Clear current_function_decl, so that gen_subprogram_die thinks
12831              that this is a declaration. At this point, we just want to force
12832              declaration die.  */
12833           save_fn = current_function_decl;
12834           current_function_decl = NULL_TREE;
12835           gen_subprogram_die (decl, context_die);
12836           current_function_decl = save_fn;
12837           break;
12838
12839         case VAR_DECL:
12840           /* Set external flag to force declaration die. Restore it after
12841            gen_decl_die() call.  */
12842           saved_external_flag = DECL_EXTERNAL (decl);
12843           DECL_EXTERNAL (decl) = 1;
12844           gen_decl_die (decl, context_die);
12845           DECL_EXTERNAL (decl) = saved_external_flag;
12846           break;
12847
12848         case NAMESPACE_DECL:
12849           dwarf2out_decl (decl);
12850           break;
12851
12852         default:
12853           gcc_unreachable ();
12854         }
12855
12856       /* We should be able to find the DIE now.  */
12857       if (!decl_die)
12858         decl_die = lookup_decl_die (decl);
12859       gcc_assert (decl_die);
12860     }
12861
12862   return decl_die;
12863 }
12864
12865 /* Returns the DIE for TYPE.  A DIE is always returned.  */
12866
12867 static dw_die_ref
12868 force_type_die (tree type)
12869 {
12870   dw_die_ref type_die;
12871
12872   type_die = lookup_type_die (type);
12873   if (!type_die)
12874     {
12875       dw_die_ref context_die;
12876       if (TYPE_CONTEXT (type))
12877         {
12878           if (TYPE_P (TYPE_CONTEXT (type)))
12879             context_die = force_type_die (TYPE_CONTEXT (type));
12880           else
12881             context_die = force_decl_die (TYPE_CONTEXT (type));
12882         }
12883       else
12884         context_die = comp_unit_die;
12885
12886       type_die = lookup_type_die (type);
12887       if (type_die)
12888         return type_die;
12889       gen_type_die (type, context_die);
12890       type_die = lookup_type_die (type);
12891       gcc_assert (type_die);
12892     }
12893   return type_die;
12894 }
12895
12896 /* Force out any required namespaces to be able to output DECL,
12897    and return the new context_die for it, if it's changed.  */
12898
12899 static dw_die_ref
12900 setup_namespace_context (tree thing, dw_die_ref context_die)
12901 {
12902   tree context = (DECL_P (thing)
12903                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
12904   if (context && TREE_CODE (context) == NAMESPACE_DECL)
12905     /* Force out the namespace.  */
12906     context_die = force_decl_die (context);
12907
12908   return context_die;
12909 }
12910
12911 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
12912    type) within its namespace, if appropriate.
12913
12914    For compatibility with older debuggers, namespace DIEs only contain
12915    declarations; all definitions are emitted at CU scope.  */
12916
12917 static void
12918 declare_in_namespace (tree thing, dw_die_ref context_die)
12919 {
12920   dw_die_ref ns_context;
12921
12922   if (debug_info_level <= DINFO_LEVEL_TERSE)
12923     return;
12924
12925   /* If this decl is from an inlined function, then don't try to emit it in its
12926      namespace, as we will get confused.  It would have already been emitted
12927      when the abstract instance of the inline function was emitted anyways.  */
12928   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
12929     return;
12930
12931   ns_context = setup_namespace_context (thing, context_die);
12932
12933   if (ns_context != context_die)
12934     {
12935       if (DECL_P (thing))
12936         gen_decl_die (thing, ns_context);
12937       else
12938         gen_type_die (thing, ns_context);
12939     }
12940 }
12941
12942 /* Generate a DIE for a namespace or namespace alias.  */
12943
12944 static void
12945 gen_namespace_die (tree decl)
12946 {
12947   dw_die_ref context_die = setup_namespace_context (decl, comp_unit_die);
12948
12949   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
12950      they are an alias of.  */
12951   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
12952     {
12953       /* Output a real namespace.  */
12954       dw_die_ref namespace_die
12955         = new_die (DW_TAG_namespace, context_die, decl);
12956       add_name_and_src_coords_attributes (namespace_die, decl);
12957       equate_decl_number_to_die (decl, namespace_die);
12958     }
12959   else
12960     {
12961       /* Output a namespace alias.  */
12962
12963       /* Force out the namespace we are an alias of, if necessary.  */
12964       dw_die_ref origin_die
12965         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
12966
12967       /* Now create the namespace alias DIE.  */
12968       dw_die_ref namespace_die
12969         = new_die (DW_TAG_imported_declaration, context_die, decl);
12970       add_name_and_src_coords_attributes (namespace_die, decl);
12971       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
12972       equate_decl_number_to_die (decl, namespace_die);
12973     }
12974 }
12975
12976 /* Generate Dwarf debug information for a decl described by DECL.  */
12977
12978 static void
12979 gen_decl_die (tree decl, dw_die_ref context_die)
12980 {
12981   tree origin;
12982
12983   if (DECL_P (decl) && DECL_IGNORED_P (decl))
12984     return;
12985
12986   switch (TREE_CODE (decl))
12987     {
12988     case ERROR_MARK:
12989       break;
12990
12991     case CONST_DECL:
12992       /* The individual enumerators of an enum type get output when we output
12993          the Dwarf representation of the relevant enum type itself.  */
12994       break;
12995
12996     case FUNCTION_DECL:
12997       /* Don't output any DIEs to represent mere function declarations,
12998          unless they are class members or explicit block externs.  */
12999       if (DECL_INITIAL (decl) == NULL_TREE && DECL_CONTEXT (decl) == NULL_TREE
13000           && (current_function_decl == NULL_TREE || DECL_ARTIFICIAL (decl)))
13001         break;
13002
13003 #if 0
13004       /* FIXME */
13005       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
13006          on local redeclarations of global functions.  That seems broken.  */
13007       if (current_function_decl != decl)
13008         /* This is only a declaration.  */;
13009 #endif
13010
13011       /* If we're emitting a clone, emit info for the abstract instance.  */
13012       if (DECL_ORIGIN (decl) != decl)
13013         dwarf2out_abstract_function (DECL_ABSTRACT_ORIGIN (decl));
13014
13015       /* If we're emitting an out-of-line copy of an inline function,
13016          emit info for the abstract instance and set up to refer to it.  */
13017       else if (cgraph_function_possibly_inlined_p (decl)
13018                && ! DECL_ABSTRACT (decl)
13019                && ! class_or_namespace_scope_p (context_die)
13020                /* dwarf2out_abstract_function won't emit a die if this is just
13021                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
13022                   that case, because that works only if we have a die.  */
13023                && DECL_INITIAL (decl) != NULL_TREE)
13024         {
13025           dwarf2out_abstract_function (decl);
13026           set_decl_origin_self (decl);
13027         }
13028
13029       /* Otherwise we're emitting the primary DIE for this decl.  */
13030       else if (debug_info_level > DINFO_LEVEL_TERSE)
13031         {
13032           /* Before we describe the FUNCTION_DECL itself, make sure that we
13033              have described its return type.  */
13034           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
13035
13036           /* And its virtual context.  */
13037           if (DECL_VINDEX (decl) != NULL_TREE)
13038             gen_type_die (DECL_CONTEXT (decl), context_die);
13039
13040           /* And its containing type.  */
13041           origin = decl_class_context (decl);
13042           if (origin != NULL_TREE)
13043             gen_type_die_for_member (origin, decl, context_die);
13044
13045           /* And its containing namespace.  */
13046           declare_in_namespace (decl, context_die);
13047         }
13048
13049       /* Now output a DIE to represent the function itself.  */
13050       gen_subprogram_die (decl, context_die);
13051       break;
13052
13053     case TYPE_DECL:
13054       /* If we are in terse mode, don't generate any DIEs to represent any
13055          actual typedefs.  */
13056       if (debug_info_level <= DINFO_LEVEL_TERSE)
13057         break;
13058
13059       /* In the special case of a TYPE_DECL node representing the declaration
13060          of some type tag, if the given TYPE_DECL is marked as having been
13061          instantiated from some other (original) TYPE_DECL node (e.g. one which
13062          was generated within the original definition of an inline function) we
13063          have to generate a special (abbreviated) DW_TAG_structure_type,
13064          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  */
13065       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
13066         {
13067           gen_tagged_type_instantiation_die (TREE_TYPE (decl), context_die);
13068           break;
13069         }
13070
13071       if (is_redundant_typedef (decl))
13072         gen_type_die (TREE_TYPE (decl), context_die);
13073       else
13074         /* Output a DIE to represent the typedef itself.  */
13075         gen_typedef_die (decl, context_die);
13076       break;
13077
13078     case LABEL_DECL:
13079       if (debug_info_level >= DINFO_LEVEL_NORMAL)
13080         gen_label_die (decl, context_die);
13081       break;
13082
13083     case VAR_DECL:
13084     case RESULT_DECL:
13085       /* If we are in terse mode, don't generate any DIEs to represent any
13086          variable declarations or definitions.  */
13087       if (debug_info_level <= DINFO_LEVEL_TERSE)
13088         break;
13089
13090       /* Output any DIEs that are needed to specify the type of this data
13091          object.  */
13092       gen_type_die (TREE_TYPE (decl), context_die);
13093
13094       /* And its containing type.  */
13095       origin = decl_class_context (decl);
13096       if (origin != NULL_TREE)
13097         gen_type_die_for_member (origin, decl, context_die);
13098
13099       /* And its containing namespace.  */
13100       declare_in_namespace (decl, context_die);
13101
13102       /* Now output the DIE to represent the data object itself.  This gets
13103          complicated because of the possibility that the VAR_DECL really
13104          represents an inlined instance of a formal parameter for an inline
13105          function.  */
13106       origin = decl_ultimate_origin (decl);
13107       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
13108         gen_formal_parameter_die (decl, context_die);
13109       else
13110         gen_variable_die (decl, context_die);
13111       break;
13112
13113     case FIELD_DECL:
13114       /* Ignore the nameless fields that are used to skip bits but handle C++
13115          anonymous unions and structs.  */
13116       if (DECL_NAME (decl) != NULL_TREE
13117           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
13118           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
13119         {
13120           gen_type_die (member_declared_type (decl), context_die);
13121           gen_field_die (decl, context_die);
13122         }
13123       break;
13124
13125     case PARM_DECL:
13126       gen_type_die (TREE_TYPE (decl), context_die);
13127       gen_formal_parameter_die (decl, context_die);
13128       break;
13129
13130     case NAMESPACE_DECL:
13131       gen_namespace_die (decl);
13132       break;
13133
13134     default:
13135       /* Probably some frontend-internal decl.  Assume we don't care.  */
13136       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
13137       break;
13138     }
13139 }
13140 \f
13141 /* Add Ada "use" clause information for SGI Workshop debugger.  */
13142
13143 void
13144 dwarf2out_add_library_unit_info (const char *filename, const char *context_list)
13145 {
13146   unsigned int file_index;
13147
13148   if (filename != NULL)
13149     {
13150       dw_die_ref unit_die = new_die (DW_TAG_module, comp_unit_die, NULL);
13151       tree context_list_decl
13152         = build_decl (LABEL_DECL, get_identifier (context_list),
13153                       void_type_node);
13154
13155       TREE_PUBLIC (context_list_decl) = TRUE;
13156       add_name_attribute (unit_die, context_list);
13157       file_index = lookup_filename (filename);
13158       add_AT_unsigned (unit_die, DW_AT_decl_file, file_index);
13159       add_pubname (context_list_decl, unit_die);
13160     }
13161 }
13162
13163 /* Output debug information for global decl DECL.  Called from toplev.c after
13164    compilation proper has finished.  */
13165
13166 static void
13167 dwarf2out_global_decl (tree decl)
13168 {
13169   /* Output DWARF2 information for file-scope tentative data object
13170      declarations, file-scope (extern) function declarations (which had no
13171      corresponding body) and file-scope tagged type declarations and
13172      definitions which have not yet been forced out.  */
13173   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
13174     dwarf2out_decl (decl);
13175 }
13176
13177 /* Output debug information for type decl DECL.  Called from toplev.c
13178    and from language front ends (to record built-in types).  */
13179 static void
13180 dwarf2out_type_decl (tree decl, int local)
13181 {
13182   if (!local)
13183     dwarf2out_decl (decl);
13184 }
13185
13186 /* Output debug information for imported module or decl.  */
13187
13188 static void
13189 dwarf2out_imported_module_or_decl (tree decl, tree context)
13190 {
13191   dw_die_ref imported_die, at_import_die;
13192   dw_die_ref scope_die;
13193   unsigned file_index;
13194   expanded_location xloc;
13195
13196   if (debug_info_level <= DINFO_LEVEL_TERSE)
13197     return;
13198
13199   gcc_assert (decl);
13200
13201   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
13202      We need decl DIE for reference and scope die. First, get DIE for the decl
13203      itself.  */
13204
13205   /* Get the scope die for decl context. Use comp_unit_die for global module
13206      or decl. If die is not found for non globals, force new die.  */
13207   if (!context)
13208     scope_die = comp_unit_die;
13209   else if (TYPE_P (context))
13210     scope_die = force_type_die (context);
13211   else
13212     scope_die = force_decl_die (context);
13213
13214   /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
13215   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
13216     at_import_die = force_type_die (TREE_TYPE (decl));
13217   else
13218     {
13219       at_import_die = lookup_decl_die (decl);
13220       if (!at_import_die)
13221         {
13222           /* If we're trying to avoid duplicate debug info, we may not have
13223              emitted the member decl for this field.  Emit it now.  */
13224           if (TREE_CODE (decl) == FIELD_DECL)
13225             {
13226               tree type = DECL_CONTEXT (decl);
13227               dw_die_ref type_context_die;
13228
13229               if (TYPE_CONTEXT (type))
13230                 if (TYPE_P (TYPE_CONTEXT (type)))
13231                   type_context_die = force_type_die (TYPE_CONTEXT (type));
13232               else
13233                 type_context_die = force_decl_die (TYPE_CONTEXT (type));
13234               else
13235                 type_context_die = comp_unit_die;
13236               gen_type_die_for_member (type, decl, type_context_die);
13237             }
13238           at_import_die = force_decl_die (decl);
13239         }
13240     }
13241
13242   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
13243   if (TREE_CODE (decl) == NAMESPACE_DECL)
13244     imported_die = new_die (DW_TAG_imported_module, scope_die, context);
13245   else
13246     imported_die = new_die (DW_TAG_imported_declaration, scope_die, context);
13247
13248   xloc = expand_location (input_location);
13249   file_index = lookup_filename (xloc.file);
13250   add_AT_unsigned (imported_die, DW_AT_decl_file, file_index);
13251   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
13252   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
13253 }
13254
13255 /* Write the debugging output for DECL.  */
13256
13257 void
13258 dwarf2out_decl (tree decl)
13259 {
13260   dw_die_ref context_die = comp_unit_die;
13261
13262   switch (TREE_CODE (decl))
13263     {
13264     case ERROR_MARK:
13265       return;
13266
13267     case FUNCTION_DECL:
13268       /* What we would really like to do here is to filter out all mere
13269          file-scope declarations of file-scope functions which are never
13270          referenced later within this translation unit (and keep all of ones
13271          that *are* referenced later on) but we aren't clairvoyant, so we have
13272          no idea which functions will be referenced in the future (i.e. later
13273          on within the current translation unit). So here we just ignore all
13274          file-scope function declarations which are not also definitions.  If
13275          and when the debugger needs to know something about these functions,
13276          it will have to hunt around and find the DWARF information associated
13277          with the definition of the function.
13278
13279          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
13280          nodes represent definitions and which ones represent mere
13281          declarations.  We have to check DECL_INITIAL instead. That's because
13282          the C front-end supports some weird semantics for "extern inline"
13283          function definitions.  These can get inlined within the current
13284          translation unit (and thus, we need to generate Dwarf info for their
13285          abstract instances so that the Dwarf info for the concrete inlined
13286          instances can have something to refer to) but the compiler never
13287          generates any out-of-lines instances of such things (despite the fact
13288          that they *are* definitions).
13289
13290          The important point is that the C front-end marks these "extern
13291          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
13292          them anyway. Note that the C++ front-end also plays some similar games
13293          for inline function definitions appearing within include files which
13294          also contain `#pragma interface' pragmas.  */
13295       if (DECL_INITIAL (decl) == NULL_TREE)
13296         return;
13297
13298       /* If we're a nested function, initially use a parent of NULL; if we're
13299          a plain function, this will be fixed up in decls_for_scope.  If
13300          we're a method, it will be ignored, since we already have a DIE.  */
13301       if (decl_function_context (decl)
13302           /* But if we're in terse mode, we don't care about scope.  */
13303           && debug_info_level > DINFO_LEVEL_TERSE)
13304         context_die = NULL;
13305       break;
13306
13307     case VAR_DECL:
13308       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
13309          declaration and if the declaration was never even referenced from
13310          within this entire compilation unit.  We suppress these DIEs in
13311          order to save space in the .debug section (by eliminating entries
13312          which are probably useless).  Note that we must not suppress
13313          block-local extern declarations (whether used or not) because that
13314          would screw-up the debugger's name lookup mechanism and cause it to
13315          miss things which really ought to be in scope at a given point.  */
13316       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
13317         return;
13318
13319       /* For local statics lookup proper context die.  */
13320       if (TREE_STATIC (decl) && decl_function_context (decl))
13321         context_die = lookup_decl_die (DECL_CONTEXT (decl));
13322
13323       /* If we are in terse mode, don't generate any DIEs to represent any
13324          variable declarations or definitions.  */
13325       if (debug_info_level <= DINFO_LEVEL_TERSE)
13326         return;
13327       break;
13328
13329     case NAMESPACE_DECL:
13330       if (debug_info_level <= DINFO_LEVEL_TERSE)
13331         return;
13332       if (lookup_decl_die (decl) != NULL)
13333         return;
13334       break;
13335
13336     case TYPE_DECL:
13337       /* Don't emit stubs for types unless they are needed by other DIEs.  */
13338       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
13339         return;
13340
13341       /* Don't bother trying to generate any DIEs to represent any of the
13342          normal built-in types for the language we are compiling.  */
13343       if (DECL_IS_BUILTIN (decl))
13344         {
13345           /* OK, we need to generate one for `bool' so GDB knows what type
13346              comparisons have.  */
13347           if ((get_AT_unsigned (comp_unit_die, DW_AT_language)
13348                == DW_LANG_C_plus_plus)
13349               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
13350               && ! DECL_IGNORED_P (decl))
13351             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
13352
13353           return;
13354         }
13355
13356       /* If we are in terse mode, don't generate any DIEs for types.  */
13357       if (debug_info_level <= DINFO_LEVEL_TERSE)
13358         return;
13359
13360       /* If we're a function-scope tag, initially use a parent of NULL;
13361          this will be fixed up in decls_for_scope.  */
13362       if (decl_function_context (decl))
13363         context_die = NULL;
13364
13365       break;
13366
13367     default:
13368       return;
13369     }
13370
13371   gen_decl_die (decl, context_die);
13372 }
13373
13374 /* Output a marker (i.e. a label) for the beginning of the generated code for
13375    a lexical block.  */
13376
13377 static void
13378 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
13379                        unsigned int blocknum)
13380 {
13381   current_function_section (current_function_decl);
13382   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
13383 }
13384
13385 /* Output a marker (i.e. a label) for the end of the generated code for a
13386    lexical block.  */
13387
13388 static void
13389 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
13390 {
13391   current_function_section (current_function_decl);
13392   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
13393 }
13394
13395 /* Returns nonzero if it is appropriate not to emit any debugging
13396    information for BLOCK, because it doesn't contain any instructions.
13397
13398    Don't allow this for blocks with nested functions or local classes
13399    as we would end up with orphans, and in the presence of scheduling
13400    we may end up calling them anyway.  */
13401
13402 static bool
13403 dwarf2out_ignore_block (tree block)
13404 {
13405   tree decl;
13406
13407   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
13408     if (TREE_CODE (decl) == FUNCTION_DECL
13409         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
13410       return 0;
13411
13412   return 1;
13413 }
13414
13415 /* Lookup FILE_NAME (in the list of filenames that we know about here in
13416    dwarf2out.c) and return its "index".  The index of each (known) filename is
13417    just a unique number which is associated with only that one filename.  We
13418    need such numbers for the sake of generating labels (in the .debug_sfnames
13419    section) and references to those files numbers (in the .debug_srcinfo
13420    and.debug_macinfo sections).  If the filename given as an argument is not
13421    found in our current list, add it to the list and assign it the next
13422    available unique index number.  In order to speed up searches, we remember
13423    the index of the filename was looked up last.  This handles the majority of
13424    all searches.  */
13425
13426 static unsigned
13427 lookup_filename (const char *file_name)
13428 {
13429   size_t i, n;
13430   char *save_file_name;
13431
13432   /* Check to see if the file name that was searched on the previous
13433      call matches this file name.  If so, return the index.  */
13434   if (file_table_last_lookup_index != 0)
13435     {
13436       const char *last
13437         = VARRAY_CHAR_PTR (file_table, file_table_last_lookup_index);
13438       if (strcmp (file_name, last) == 0)
13439         return file_table_last_lookup_index;
13440     }
13441
13442   /* Didn't match the previous lookup, search the table.  */
13443   n = VARRAY_ACTIVE_SIZE (file_table);
13444   for (i = 1; i < n; i++)
13445     if (strcmp (file_name, VARRAY_CHAR_PTR (file_table, i)) == 0)
13446       {
13447         file_table_last_lookup_index = i;
13448         return i;
13449       }
13450
13451   /* Add the new entry to the end of the filename table.  */
13452   file_table_last_lookup_index = n;
13453   save_file_name = (char *) ggc_strdup (file_name);
13454   VARRAY_PUSH_CHAR_PTR (file_table, save_file_name);
13455   VARRAY_PUSH_UINT (file_table_emitted, 0);
13456
13457   /* If the assembler is emitting the file table, and we aren't eliminating
13458      unused debug types, then we must emit .file here.  If we are eliminating
13459      unused debug types, then this will be done by the maybe_emit_file call in
13460      prune_unused_types_walk_attribs.  */
13461
13462   if (DWARF2_ASM_LINE_DEBUG_INFO && ! flag_eliminate_unused_debug_types)
13463     return maybe_emit_file (i);
13464
13465   return i;
13466 }
13467
13468 /* If the assembler will construct the file table, then translate the compiler
13469    internal file table number into the assembler file table number, and emit
13470    a .file directive if we haven't already emitted one yet.  The file table
13471    numbers are different because we prune debug info for unused variables and
13472    types, which may include filenames.  */
13473
13474 static int
13475 maybe_emit_file (int fileno)
13476 {
13477   if (DWARF2_ASM_LINE_DEBUG_INFO && fileno > 0)
13478     {
13479       if (!VARRAY_UINT (file_table_emitted, fileno))
13480         {
13481           VARRAY_UINT (file_table_emitted, fileno) = ++emitcount;
13482           fprintf (asm_out_file, "\t.file %u ",
13483                    VARRAY_UINT (file_table_emitted, fileno));
13484           output_quoted_string (asm_out_file,
13485                                 VARRAY_CHAR_PTR (file_table, fileno));
13486           fputc ('\n', asm_out_file);
13487         }
13488       return VARRAY_UINT (file_table_emitted, fileno);
13489     }
13490   else
13491     return fileno;
13492 }
13493
13494 /* Initialize the compiler internal file table.  */
13495
13496 static void
13497 init_file_table (void)
13498 {
13499   /* Allocate the initial hunk of the file_table.  */
13500   VARRAY_CHAR_PTR_INIT (file_table, 64, "file_table");
13501   VARRAY_UINT_INIT (file_table_emitted, 64, "file_table_emitted");
13502
13503   /* Skip the first entry - file numbers begin at 1.  */
13504   VARRAY_PUSH_CHAR_PTR (file_table, NULL);
13505   VARRAY_PUSH_UINT (file_table_emitted, 0);
13506   file_table_last_lookup_index = 0;
13507 }
13508
13509 /* Called by the final INSN scan whenever we see a var location.  We
13510    use it to drop labels in the right places, and throw the location in
13511    our lookup table.  */
13512
13513 static void
13514 dwarf2out_var_location (rtx loc_note)
13515 {
13516   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
13517   struct var_loc_node *newloc;
13518   rtx prev_insn;
13519   static rtx last_insn;
13520   static const char *last_label;
13521   tree decl;
13522
13523   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
13524     return;
13525   prev_insn = PREV_INSN (loc_note);
13526
13527   newloc = ggc_alloc_cleared (sizeof (struct var_loc_node));
13528   /* If the insn we processed last time is the previous insn
13529      and it is also a var location note, use the label we emitted
13530      last time.  */
13531   if (last_insn != NULL_RTX
13532       && last_insn == prev_insn
13533       && NOTE_P (prev_insn)
13534       && NOTE_LINE_NUMBER (prev_insn) == NOTE_INSN_VAR_LOCATION)
13535     {
13536       newloc->label = last_label;
13537     }
13538   else
13539     {
13540       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
13541       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
13542       loclabel_num++;
13543       newloc->label = ggc_strdup (loclabel);
13544     }
13545   newloc->var_loc_note = loc_note;
13546   newloc->next = NULL;
13547
13548   if (cfun
13549       && (last_text_section == in_unlikely_executed_text
13550           || (last_text_section == in_named
13551               && last_text_section_name == cfun->unlikely_text_section_name)))
13552     newloc->section_label = cfun->cold_section_label;
13553   else
13554     newloc->section_label = text_section_label;
13555
13556   last_insn = loc_note;
13557   last_label = newloc->label;
13558   decl = NOTE_VAR_LOCATION_DECL (loc_note);
13559   if (DECL_DEBUG_EXPR_IS_FROM (decl) && DECL_DEBUG_EXPR (decl) 
13560       && DECL_P (DECL_DEBUG_EXPR (decl)))
13561     decl = DECL_DEBUG_EXPR (decl); 
13562   add_var_loc_to_decl (decl, newloc);
13563 }
13564
13565 /* We need to reset the locations at the beginning of each
13566    function. We can't do this in the end_function hook, because the
13567    declarations that use the locations won't have been outputted when
13568    that hook is called.  */
13569
13570 static void
13571 dwarf2out_begin_function (tree unused ATTRIBUTE_UNUSED)
13572 {
13573   htab_empty (decl_loc_table);
13574 }
13575
13576 /* Output a label to mark the beginning of a source code line entry
13577    and record information relating to this source line, in
13578    'line_info_table' for later output of the .debug_line section.  */
13579
13580 static void
13581 dwarf2out_source_line (unsigned int line, const char *filename)
13582 {
13583   if (debug_info_level >= DINFO_LEVEL_NORMAL
13584       && line != 0)
13585     {
13586       current_function_section (current_function_decl);
13587
13588       /* If requested, emit something human-readable.  */
13589       if (flag_debug_asm)
13590         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
13591                  filename, line);
13592
13593       if (DWARF2_ASM_LINE_DEBUG_INFO)
13594         {
13595           unsigned file_num = lookup_filename (filename);
13596
13597           file_num = maybe_emit_file (file_num);
13598
13599           /* Emit the .loc directive understood by GNU as.  */
13600           fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
13601
13602           /* Indicate that line number info exists.  */
13603           line_info_table_in_use++;
13604
13605           /* Indicate that multiple line number tables exist.  */
13606           if (DECL_SECTION_NAME (current_function_decl))
13607             separate_line_info_table_in_use++;
13608         }
13609       else if (DECL_SECTION_NAME (current_function_decl))
13610         {
13611           dw_separate_line_info_ref line_info;
13612           targetm.asm_out.internal_label (asm_out_file, SEPARATE_LINE_CODE_LABEL,
13613                                      separate_line_info_table_in_use);
13614
13615           /* Expand the line info table if necessary.  */
13616           if (separate_line_info_table_in_use
13617               == separate_line_info_table_allocated)
13618             {
13619               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13620               separate_line_info_table
13621                 = ggc_realloc (separate_line_info_table,
13622                                separate_line_info_table_allocated
13623                                * sizeof (dw_separate_line_info_entry));
13624               memset (separate_line_info_table
13625                        + separate_line_info_table_in_use,
13626                       0,
13627                       (LINE_INFO_TABLE_INCREMENT
13628                        * sizeof (dw_separate_line_info_entry)));
13629             }
13630
13631           /* Add the new entry at the end of the line_info_table.  */
13632           line_info
13633             = &separate_line_info_table[separate_line_info_table_in_use++];
13634           line_info->dw_file_num = lookup_filename (filename);
13635           line_info->dw_line_num = line;
13636           line_info->function = current_function_funcdef_no;
13637         }
13638       else
13639         {
13640           dw_line_info_ref line_info;
13641
13642           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
13643                                      line_info_table_in_use);
13644
13645           /* Expand the line info table if necessary.  */
13646           if (line_info_table_in_use == line_info_table_allocated)
13647             {
13648               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
13649               line_info_table
13650                 = ggc_realloc (line_info_table,
13651                                (line_info_table_allocated
13652                                 * sizeof (dw_line_info_entry)));
13653               memset (line_info_table + line_info_table_in_use, 0,
13654                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
13655             }
13656
13657           /* Add the new entry at the end of the line_info_table.  */
13658           line_info = &line_info_table[line_info_table_in_use++];
13659           line_info->dw_file_num = lookup_filename (filename);
13660           line_info->dw_line_num = line;
13661         }
13662     }
13663 }
13664
13665 /* Record the beginning of a new source file.  */
13666
13667 static void
13668 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
13669 {
13670   if (flag_eliminate_dwarf2_dups)
13671     {
13672       /* Record the beginning of the file for break_out_includes.  */
13673       dw_die_ref bincl_die;
13674
13675       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
13676       add_AT_string (bincl_die, DW_AT_name, filename);
13677     }
13678
13679   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13680     {
13681       int fileno;
13682
13683       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13684       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
13685       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
13686                                    lineno);
13687
13688       fileno = maybe_emit_file (lookup_filename (filename));
13689       dw2_asm_output_data_uleb128 (fileno, "Filename we just started");
13690     }
13691 }
13692
13693 /* Record the end of a source file.  */
13694
13695 static void
13696 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
13697 {
13698   if (flag_eliminate_dwarf2_dups)
13699     /* Record the end of the file for break_out_includes.  */
13700     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
13701
13702   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13703     {
13704       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13705       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
13706     }
13707 }
13708
13709 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
13710    the tail part of the directive line, i.e. the part which is past the
13711    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13712
13713 static void
13714 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
13715                   const char *buffer ATTRIBUTE_UNUSED)
13716 {
13717   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13718     {
13719       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13720       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
13721       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13722       dw2_asm_output_nstring (buffer, -1, "The macro");
13723     }
13724 }
13725
13726 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
13727    the tail part of the directive line, i.e. the part which is past the
13728    initial whitespace, #, whitespace, directive-name, whitespace part.  */
13729
13730 static void
13731 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
13732                  const char *buffer ATTRIBUTE_UNUSED)
13733 {
13734   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13735     {
13736       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13737       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
13738       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
13739       dw2_asm_output_nstring (buffer, -1, "The macro");
13740     }
13741 }
13742
13743 /* Set up for Dwarf output at the start of compilation.  */
13744
13745 static void
13746 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
13747 {
13748   init_file_table ();
13749
13750   /* Allocate the decl_die_table.  */
13751   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
13752                                     decl_die_table_eq, NULL);
13753
13754   /* Allocate the decl_loc_table.  */
13755   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
13756                                     decl_loc_table_eq, NULL);
13757
13758   /* Allocate the initial hunk of the decl_scope_table.  */
13759   decl_scope_table = VEC_alloc (tree, gc, 256);
13760
13761   /* Allocate the initial hunk of the abbrev_die_table.  */
13762   abbrev_die_table = ggc_alloc_cleared (ABBREV_DIE_TABLE_INCREMENT
13763                                         * sizeof (dw_die_ref));
13764   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
13765   /* Zero-th entry is allocated, but unused.  */
13766   abbrev_die_table_in_use = 1;
13767
13768   /* Allocate the initial hunk of the line_info_table.  */
13769   line_info_table = ggc_alloc_cleared (LINE_INFO_TABLE_INCREMENT
13770                                        * sizeof (dw_line_info_entry));
13771   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
13772
13773   /* Zero-th entry is allocated, but unused.  */
13774   line_info_table_in_use = 1;
13775
13776   /* Generate the initial DIE for the .debug section.  Note that the (string)
13777      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
13778      will (typically) be a relative pathname and that this pathname should be
13779      taken as being relative to the directory from which the compiler was
13780      invoked when the given (base) source file was compiled.  We will fill
13781      in this value in dwarf2out_finish.  */
13782   comp_unit_die = gen_compile_unit_die (NULL);
13783
13784   incomplete_types = VEC_alloc (tree, gc, 64);
13785
13786   used_rtx_array = VEC_alloc (rtx, gc, 32);
13787
13788   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
13789   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
13790                                DEBUG_ABBREV_SECTION_LABEL, 0);
13791   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
13792   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, 
13793                                COLD_TEXT_SECTION_LABEL, 0);
13794   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
13795
13796   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
13797                                DEBUG_INFO_SECTION_LABEL, 0);
13798   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
13799                                DEBUG_LINE_SECTION_LABEL, 0);
13800   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
13801                                DEBUG_RANGES_SECTION_LABEL, 0);
13802   named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
13803   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
13804   named_section_flags (DEBUG_INFO_SECTION, SECTION_DEBUG);
13805   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
13806   named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
13807   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
13808
13809   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
13810     {
13811       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
13812       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
13813                                    DEBUG_MACINFO_SECTION_LABEL, 0);
13814       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
13815     }
13816
13817   text_section ();
13818   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
13819   if (flag_reorder_blocks_and_partition)
13820     {
13821       unlikely_text_section ();
13822       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
13823     }
13824 }
13825
13826 /* A helper function for dwarf2out_finish called through
13827    ht_forall.  Emit one queued .debug_str string.  */
13828
13829 static int
13830 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
13831 {
13832   struct indirect_string_node *node = (struct indirect_string_node *) *h;
13833
13834   if (node->form == DW_FORM_strp)
13835     {
13836       named_section_flags (DEBUG_STR_SECTION, DEBUG_STR_SECTION_FLAGS);
13837       ASM_OUTPUT_LABEL (asm_out_file, node->label);
13838       assemble_string (node->str, strlen (node->str) + 1);
13839     }
13840
13841   return 1;
13842 }
13843
13844
13845
13846 /* Clear the marks for a die and its children.
13847    Be cool if the mark isn't set.  */
13848
13849 static void
13850 prune_unmark_dies (dw_die_ref die)
13851 {
13852   dw_die_ref c;
13853   die->die_mark = 0;
13854   for (c = die->die_child; c; c = c->die_sib)
13855     prune_unmark_dies (c);
13856 }
13857
13858
13859 /* Given DIE that we're marking as used, find any other dies
13860    it references as attributes and mark them as used.  */
13861
13862 static void
13863 prune_unused_types_walk_attribs (dw_die_ref die)
13864 {
13865   dw_attr_ref a;
13866
13867   for (a = die->die_attr; a != NULL; a = a->dw_attr_next)
13868     {
13869       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
13870         {
13871           /* A reference to another DIE.
13872              Make sure that it will get emitted.  */
13873           prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
13874         }
13875       else if (a->dw_attr == DW_AT_decl_file || a->dw_attr == DW_AT_call_file)
13876         {
13877           /* A reference to a file.  Make sure the file name is emitted.  */
13878           a->dw_attr_val.v.val_unsigned =
13879             maybe_emit_file (a->dw_attr_val.v.val_unsigned);
13880         }
13881     }
13882 }
13883
13884
13885 /* Mark DIE as being used.  If DOKIDS is true, then walk down
13886    to DIE's children.  */
13887
13888 static void
13889 prune_unused_types_mark (dw_die_ref die, int dokids)
13890 {
13891   dw_die_ref c;
13892
13893   if (die->die_mark == 0)
13894     {
13895       /* We haven't done this node yet.  Mark it as used.  */
13896       die->die_mark = 1;
13897
13898       /* We also have to mark its parents as used.
13899          (But we don't want to mark our parents' kids due to this.)  */
13900       if (die->die_parent)
13901         prune_unused_types_mark (die->die_parent, 0);
13902
13903       /* Mark any referenced nodes.  */
13904       prune_unused_types_walk_attribs (die);
13905
13906       /* If this node is a specification,
13907          also mark the definition, if it exists.  */
13908       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
13909         prune_unused_types_mark (die->die_definition, 1);
13910     }
13911
13912   if (dokids && die->die_mark != 2)
13913     {
13914       /* We need to walk the children, but haven't done so yet.
13915          Remember that we've walked the kids.  */
13916       die->die_mark = 2;
13917
13918       /* Walk them.  */
13919       for (c = die->die_child; c; c = c->die_sib)
13920         {
13921           /* If this is an array type, we need to make sure our
13922              kids get marked, even if they're types.  */
13923           if (die->die_tag == DW_TAG_array_type)
13924             prune_unused_types_mark (c, 1);
13925           else
13926             prune_unused_types_walk (c);
13927         }
13928     }
13929 }
13930
13931
13932 /* Walk the tree DIE and mark types that we actually use.  */
13933
13934 static void
13935 prune_unused_types_walk (dw_die_ref die)
13936 {
13937   dw_die_ref c;
13938
13939   /* Don't do anything if this node is already marked.  */
13940   if (die->die_mark)
13941     return;
13942
13943   switch (die->die_tag) {
13944   case DW_TAG_const_type:
13945   case DW_TAG_packed_type:
13946   case DW_TAG_pointer_type:
13947   case DW_TAG_reference_type:
13948   case DW_TAG_volatile_type:
13949   case DW_TAG_typedef:
13950   case DW_TAG_array_type:
13951   case DW_TAG_structure_type:
13952   case DW_TAG_union_type:
13953   case DW_TAG_class_type:
13954   case DW_TAG_friend:
13955   case DW_TAG_variant_part:
13956   case DW_TAG_enumeration_type:
13957   case DW_TAG_subroutine_type:
13958   case DW_TAG_string_type:
13959   case DW_TAG_set_type:
13960   case DW_TAG_subrange_type:
13961   case DW_TAG_ptr_to_member_type:
13962   case DW_TAG_file_type:
13963     /* It's a type node --- don't mark it.  */
13964     return;
13965
13966   default:
13967     /* Mark everything else.  */
13968     break;
13969   }
13970
13971   die->die_mark = 1;
13972
13973   /* Now, mark any dies referenced from here.  */
13974   prune_unused_types_walk_attribs (die);
13975
13976   /* Mark children.  */
13977   for (c = die->die_child; c; c = c->die_sib)
13978     prune_unused_types_walk (c);
13979 }
13980
13981
13982 /* Remove from the tree DIE any dies that aren't marked.  */
13983
13984 static void
13985 prune_unused_types_prune (dw_die_ref die)
13986 {
13987   dw_die_ref c, p, n;
13988
13989   gcc_assert (die->die_mark);
13990
13991   p = NULL;
13992   for (c = die->die_child; c; c = n)
13993     {
13994       n = c->die_sib;
13995       if (c->die_mark)
13996         {
13997           prune_unused_types_prune (c);
13998           p = c;
13999         }
14000       else
14001         {
14002           if (p)
14003             p->die_sib = n;
14004           else
14005             die->die_child = n;
14006           free_die (c);
14007         }
14008     }
14009 }
14010
14011
14012 /* Remove dies representing declarations that we never use.  */
14013
14014 static void
14015 prune_unused_types (void)
14016 {
14017   unsigned int i;
14018   limbo_die_node *node;
14019
14020   /* Clear all the marks.  */
14021   prune_unmark_dies (comp_unit_die);
14022   for (node = limbo_die_list; node; node = node->next)
14023     prune_unmark_dies (node->die);
14024
14025   /* Set the mark on nodes that are actually used.  */
14026   prune_unused_types_walk (comp_unit_die);
14027   for (node = limbo_die_list; node; node = node->next)
14028     prune_unused_types_walk (node->die);
14029
14030   /* Also set the mark on nodes referenced from the
14031      pubname_table or arange_table.  */
14032   for (i = 0; i < pubname_table_in_use; i++)
14033     prune_unused_types_mark (pubname_table[i].die, 1);
14034   for (i = 0; i < arange_table_in_use; i++)
14035     prune_unused_types_mark (arange_table[i], 1);
14036
14037   /* Get rid of nodes that aren't marked.  */
14038   prune_unused_types_prune (comp_unit_die);
14039   for (node = limbo_die_list; node; node = node->next)
14040     prune_unused_types_prune (node->die);
14041
14042   /* Leave the marks clear.  */
14043   prune_unmark_dies (comp_unit_die);
14044   for (node = limbo_die_list; node; node = node->next)
14045     prune_unmark_dies (node->die);
14046 }
14047
14048 /* Output stuff that dwarf requires at the end of every file,
14049    and generate the DWARF-2 debugging info.  */
14050
14051 static void
14052 dwarf2out_finish (const char *filename)
14053 {
14054   limbo_die_node *node, *next_node;
14055   dw_die_ref die = 0;
14056
14057   /* Add the name for the main input file now.  We delayed this from
14058      dwarf2out_init to avoid complications with PCH.  */
14059   add_name_attribute (comp_unit_die, filename);
14060   if (filename[0] != DIR_SEPARATOR)
14061     add_comp_dir_attribute (comp_unit_die);
14062   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
14063     {
14064       size_t i;
14065       for (i = 1; i < VARRAY_ACTIVE_SIZE (file_table); i++)
14066         if (VARRAY_CHAR_PTR (file_table, i)[0] != DIR_SEPARATOR
14067             /* Don't add cwd for <built-in>.  */
14068             && VARRAY_CHAR_PTR (file_table, i)[0] != '<')
14069           {
14070             add_comp_dir_attribute (comp_unit_die);
14071             break;
14072           }
14073     }
14074
14075   /* Traverse the limbo die list, and add parent/child links.  The only
14076      dies without parents that should be here are concrete instances of
14077      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
14078      For concrete instances, we can get the parent die from the abstract
14079      instance.  */
14080   for (node = limbo_die_list; node; node = next_node)
14081     {
14082       next_node = node->next;
14083       die = node->die;
14084
14085       if (die->die_parent == NULL)
14086         {
14087           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
14088
14089           if (origin)
14090             add_child_die (origin->die_parent, die);
14091           else if (die == comp_unit_die)
14092             ;
14093           else if (errorcount > 0 || sorrycount > 0)
14094             /* It's OK to be confused by errors in the input.  */
14095             add_child_die (comp_unit_die, die);
14096           else
14097             {
14098               /* In certain situations, the lexical block containing a
14099                  nested function can be optimized away, which results
14100                  in the nested function die being orphaned.  Likewise
14101                  with the return type of that nested function.  Force
14102                  this to be a child of the containing function.
14103
14104                  It may happen that even the containing function got fully
14105                  inlined and optimized out.  In that case we are lost and
14106                  assign the empty child.  This should not be big issue as
14107                  the function is likely unreachable too.  */
14108               tree context = NULL_TREE;
14109
14110               gcc_assert (node->created_for);
14111
14112               if (DECL_P (node->created_for))
14113                 context = DECL_CONTEXT (node->created_for);
14114               else if (TYPE_P (node->created_for))
14115                 context = TYPE_CONTEXT (node->created_for);
14116
14117               gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL);
14118
14119               origin = lookup_decl_die (context);
14120               if (origin)
14121                 add_child_die (origin, die);
14122               else
14123                 add_child_die (comp_unit_die, die);
14124             }
14125         }
14126     }
14127
14128   limbo_die_list = NULL;
14129
14130   /* Walk through the list of incomplete types again, trying once more to
14131      emit full debugging info for them.  */
14132   retry_incomplete_types ();
14133
14134   /* We need to reverse all the dies before break_out_includes, or
14135      we'll see the end of an include file before the beginning.  */
14136   reverse_all_dies (comp_unit_die);
14137
14138   if (flag_eliminate_unused_debug_types)
14139     prune_unused_types ();
14140
14141   /* Generate separate CUs for each of the include files we've seen.
14142      They will go into limbo_die_list.  */
14143   if (flag_eliminate_dwarf2_dups)
14144     break_out_includes (comp_unit_die);
14145
14146   /* Traverse the DIE's and add add sibling attributes to those DIE's
14147      that have children.  */
14148   add_sibling_attributes (comp_unit_die);
14149   for (node = limbo_die_list; node; node = node->next)
14150     add_sibling_attributes (node->die);
14151
14152   /* Output a terminator label for the .text section.  */
14153   text_section ();
14154   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
14155   if (flag_reorder_blocks_and_partition)
14156     {
14157       unlikely_text_section ();
14158       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
14159     }
14160
14161   /* Output the source line correspondence table.  We must do this
14162      even if there is no line information.  Otherwise, on an empty
14163      translation unit, we will generate a present, but empty,
14164      .debug_info section.  IRIX 6.5 `nm' will then complain when
14165      examining the file.  */
14166   if (! DWARF2_ASM_LINE_DEBUG_INFO)
14167     {
14168       named_section_flags (DEBUG_LINE_SECTION, SECTION_DEBUG);
14169       output_line_info ();
14170     }
14171
14172   /* Output location list section if necessary.  */
14173   if (have_location_lists)
14174     {
14175       /* Output the location lists info.  */
14176       named_section_flags (DEBUG_LOC_SECTION, SECTION_DEBUG);
14177       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
14178                                    DEBUG_LOC_SECTION_LABEL, 0);
14179       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
14180       output_location_lists (die);
14181       have_location_lists = 0;
14182     }
14183
14184   /* We can only use the low/high_pc attributes if all of the code was
14185      in .text.  */
14186   if (!separate_line_info_table_in_use && !have_switched_text_section)
14187     {
14188       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
14189       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
14190     }
14191
14192   /* If it wasn't, we need to give .debug_loc and .debug_ranges an appropriate
14193      "base address".  Use zero so that these addresses become absolute.  */
14194   else if (have_location_lists || ranges_table_in_use)
14195     add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
14196
14197   if (debug_info_level >= DINFO_LEVEL_NORMAL)
14198     add_AT_lbl_offset (comp_unit_die, DW_AT_stmt_list,
14199                        debug_line_section_label);
14200
14201   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14202     add_AT_lbl_offset (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
14203
14204   /* Output all of the compilation units.  We put the main one last so that
14205      the offsets are available to output_pubnames.  */
14206   for (node = limbo_die_list; node; node = node->next)
14207     output_comp_unit (node->die, 0);
14208
14209   output_comp_unit (comp_unit_die, 0);
14210
14211   /* Output the abbreviation table.  */
14212   named_section_flags (DEBUG_ABBREV_SECTION, SECTION_DEBUG);
14213   output_abbrev_section ();
14214
14215   /* Output public names table if necessary.  */
14216   if (pubname_table_in_use)
14217     {
14218       named_section_flags (DEBUG_PUBNAMES_SECTION, SECTION_DEBUG);
14219       output_pubnames ();
14220     }
14221
14222   /* Output the address range information.  We only put functions in the arange
14223      table, so don't write it out if we don't have any.  */
14224   if (fde_table_in_use)
14225     {
14226       named_section_flags (DEBUG_ARANGES_SECTION, SECTION_DEBUG);
14227       output_aranges ();
14228     }
14229
14230   /* Output ranges section if necessary.  */
14231   if (ranges_table_in_use)
14232     {
14233       named_section_flags (DEBUG_RANGES_SECTION, SECTION_DEBUG);
14234       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
14235       output_ranges ();
14236     }
14237
14238   /* Have to end the macro section.  */
14239   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
14240     {
14241       named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG);
14242       dw2_asm_output_data (1, 0, "End compilation unit");
14243     }
14244
14245   /* If we emitted any DW_FORM_strp form attribute, output the string
14246      table too.  */
14247   if (debug_str_hash)
14248     htab_traverse (debug_str_hash, output_indirect_string, NULL);
14249 }
14250 #else
14251
14252 /* This should never be used, but its address is needed for comparisons.  */
14253 const struct gcc_debug_hooks dwarf2_debug_hooks;
14254
14255 #endif /* DWARF2_DEBUGGING_INFO */
14256
14257 #include "gt-dwarf2out.h"