OSDN Git Service

9bf0803ce5709b09706032429f6902384e845ae4
[pf3gnuchains/gcc-fork.git] / 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, 2007, 2008, 2009 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 3, 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 COPYING3.  If not see
22 <http://www.gnu.org/licenses/>.  */
23
24 /* TODO: Emit .debug_line header even when there are no functions, since
25            the file numbers are used by .debug_info.  Alternately, leave
26            out locations for types and decls.
27          Avoid talking about ctors and op= for PODs.
28          Factor out common prologue sequences into multiple CIEs.  */
29
30 /* The first part of this file deals with the DWARF 2 frame unwind
31    information, which is also used by the GCC efficient exception handling
32    mechanism.  The second part, controlled only by an #ifdef
33    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
34    information.  */
35
36 /* DWARF2 Abbreviation Glossary:
37
38    CFA = Canonical Frame Address
39            a fixed address on the stack which identifies a call frame.
40            We define it to be the value of SP just before the call insn.
41            The CFA register and offset, which may change during the course
42            of the function, are used to calculate its value at runtime.
43
44    CFI = Call Frame Instruction
45            an instruction for the DWARF2 abstract machine
46
47    CIE = Common Information Entry
48            information describing information common to one or more FDEs
49
50    DIE = Debugging Information Entry
51
52    FDE = Frame Description Entry
53            information describing the stack call frame, in particular,
54            how to restore registers
55
56    DW_CFA_... = DWARF2 CFA call frame instruction
57    DW_TAG_... = DWARF2 DIE tag */
58
59 #include "config.h"
60 #include "system.h"
61 #include "coretypes.h"
62 #include "tm.h"
63 #include "tree.h"
64 #include "version.h"
65 #include "flags.h"
66 #include "real.h"
67 #include "rtl.h"
68 #include "hard-reg-set.h"
69 #include "regs.h"
70 #include "insn-config.h"
71 #include "reload.h"
72 #include "function.h"
73 #include "output.h"
74 #include "expr.h"
75 #include "libfuncs.h"
76 #include "except.h"
77 #include "dwarf2.h"
78 #include "dwarf2out.h"
79 #include "dwarf2asm.h"
80 #include "toplev.h"
81 #include "varray.h"
82 #include "ggc.h"
83 #include "md5.h"
84 #include "tm_p.h"
85 #include "diagnostic.h"
86 #include "debug.h"
87 #include "target.h"
88 #include "langhooks.h"
89 #include "hashtab.h"
90 #include "cgraph.h"
91 #include "input.h"
92
93 #ifdef DWARF2_DEBUGGING_INFO
94 static void dwarf2out_source_line (unsigned int, const char *);
95 #endif
96
97 #ifndef DWARF2_FRAME_INFO
98 # ifdef DWARF2_DEBUGGING_INFO
99 #  define DWARF2_FRAME_INFO \
100   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
101 # else
102 #  define DWARF2_FRAME_INFO 0
103 # endif
104 #endif
105
106 /* Map register numbers held in the call frame info that gcc has
107    collected using DWARF_FRAME_REGNUM to those that should be output in
108    .debug_frame and .eh_frame.  */
109 #ifndef DWARF2_FRAME_REG_OUT
110 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
111 #endif
112
113 /* Save the result of dwarf2out_do_frame across PCH.  */
114 static GTY(()) bool saved_do_cfi_asm = 0;
115
116 /* Decide whether we want to emit frame unwind information for the current
117    translation unit.  */
118
119 int
120 dwarf2out_do_frame (void)
121 {
122   /* We want to emit correct CFA location expressions or lists, so we
123      have to return true if we're going to output debug info, even if
124      we're not going to output frame or unwind info.  */
125   return (write_symbols == DWARF2_DEBUG
126           || write_symbols == VMS_AND_DWARF2_DEBUG
127           || DWARF2_FRAME_INFO || saved_do_cfi_asm
128 #ifdef DWARF2_UNWIND_INFO
129           || (DWARF2_UNWIND_INFO
130               && (flag_unwind_tables
131                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
132 #endif
133           );
134 }
135
136 /* Decide whether to emit frame unwind via assembler directives.  */
137
138 int
139 dwarf2out_do_cfi_asm (void)
140 {
141   int enc;
142
143 #ifdef MIPS_DEBUGGING_INFO
144   return false;
145 #endif
146   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
147     return false;
148   if (saved_do_cfi_asm || !eh_personality_libfunc)
149     return true;
150   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
151     return false;
152
153   /* Make sure the personality encoding is one the assembler can support.
154      In particular, aligned addresses can't be handled.  */
155   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
156   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
157     return false;
158   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
159   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
160     return false;
161
162   saved_do_cfi_asm = true;
163   return true;
164 }
165
166 /* The size of the target's pointer type.  */
167 #ifndef PTR_SIZE
168 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
169 #endif
170
171 /* Array of RTXes referenced by the debugging information, which therefore
172    must be kept around forever.  */
173 static GTY(()) VEC(rtx,gc) *used_rtx_array;
174
175 /* A pointer to the base of a list of incomplete types which might be
176    completed at some later time.  incomplete_types_list needs to be a
177    VEC(tree,gc) because we want to tell the garbage collector about
178    it.  */
179 static GTY(()) VEC(tree,gc) *incomplete_types;
180
181 /* A pointer to the base of a table of references to declaration
182    scopes.  This table is a display which tracks the nesting
183    of declaration scopes at the current scope and containing
184    scopes.  This table is used to find the proper place to
185    define type declaration DIE's.  */
186 static GTY(()) VEC(tree,gc) *decl_scope_table;
187
188 /* Pointers to various DWARF2 sections.  */
189 static GTY(()) section *debug_info_section;
190 static GTY(()) section *debug_abbrev_section;
191 static GTY(()) section *debug_aranges_section;
192 static GTY(()) section *debug_macinfo_section;
193 static GTY(()) section *debug_line_section;
194 static GTY(()) section *debug_loc_section;
195 static GTY(()) section *debug_pubnames_section;
196 static GTY(()) section *debug_pubtypes_section;
197 static GTY(()) section *debug_str_section;
198 static GTY(()) section *debug_ranges_section;
199 static GTY(()) section *debug_frame_section;
200
201 /* How to start an assembler comment.  */
202 #ifndef ASM_COMMENT_START
203 #define ASM_COMMENT_START ";#"
204 #endif
205
206 typedef struct dw_cfi_struct *dw_cfi_ref;
207 typedef struct dw_fde_struct *dw_fde_ref;
208 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
209
210 /* Call frames are described using a sequence of Call Frame
211    Information instructions.  The register number, offset
212    and address fields are provided as possible operands;
213    their use is selected by the opcode field.  */
214
215 enum dw_cfi_oprnd_type {
216   dw_cfi_oprnd_unused,
217   dw_cfi_oprnd_reg_num,
218   dw_cfi_oprnd_offset,
219   dw_cfi_oprnd_addr,
220   dw_cfi_oprnd_loc
221 };
222
223 typedef union dw_cfi_oprnd_struct GTY(())
224 {
225   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
226   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
227   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
228   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
229 }
230 dw_cfi_oprnd;
231
232 typedef struct dw_cfi_struct GTY(())
233 {
234   dw_cfi_ref dw_cfi_next;
235   enum dwarf_call_frame_info dw_cfi_opc;
236   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
237     dw_cfi_oprnd1;
238   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
239     dw_cfi_oprnd2;
240 }
241 dw_cfi_node;
242
243 /* This is how we define the location of the CFA. We use to handle it
244    as REG + OFFSET all the time,  but now it can be more complex.
245    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
246    Instead of passing around REG and OFFSET, we pass a copy
247    of this structure.  */
248 typedef struct cfa_loc GTY(())
249 {
250   HOST_WIDE_INT offset;
251   HOST_WIDE_INT base_offset;
252   unsigned int reg;
253   int indirect;            /* 1 if CFA is accessed via a dereference.  */
254 } dw_cfa_location;
255
256 /* All call frame descriptions (FDE's) in the GCC generated DWARF
257    refer to a single Common Information Entry (CIE), defined at
258    the beginning of the .debug_frame section.  This use of a single
259    CIE obviates the need to keep track of multiple CIE's
260    in the DWARF generation routines below.  */
261
262 typedef struct dw_fde_struct GTY(())
263 {
264   tree decl;
265   const char *dw_fde_begin;
266   const char *dw_fde_current_label;
267   const char *dw_fde_end;
268   const char *dw_fde_hot_section_label;
269   const char *dw_fde_hot_section_end_label;
270   const char *dw_fde_unlikely_section_label;
271   const char *dw_fde_unlikely_section_end_label;
272   bool dw_fde_switched_sections;
273   dw_cfi_ref dw_fde_cfi;
274   unsigned funcdef_number;
275   HOST_WIDE_INT stack_realignment;
276   /* Dynamic realign argument pointer register.  */
277   unsigned int drap_reg;
278   /* Virtual dynamic realign argument pointer register.  */
279   unsigned int vdrap_reg;
280   unsigned all_throwers_are_sibcalls : 1;
281   unsigned nothrow : 1;
282   unsigned uses_eh_lsda : 1;
283   /* Whether we did stack realign in this call frame.  */
284   unsigned stack_realign : 1;
285   /* Whether dynamic realign argument pointer register has been saved.  */
286   unsigned drap_reg_saved: 1;
287 }
288 dw_fde_node;
289
290 /* Maximum size (in bytes) of an artificially generated label.  */
291 #define MAX_ARTIFICIAL_LABEL_BYTES      30
292
293 /* The size of addresses as they appear in the Dwarf 2 data.
294    Some architectures use word addresses to refer to code locations,
295    but Dwarf 2 info always uses byte addresses.  On such machines,
296    Dwarf 2 addresses need to be larger than the architecture's
297    pointers.  */
298 #ifndef DWARF2_ADDR_SIZE
299 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
300 #endif
301
302 /* The size in bytes of a DWARF field indicating an offset or length
303    relative to a debug info section, specified to be 4 bytes in the
304    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
305    as PTR_SIZE.  */
306
307 #ifndef DWARF_OFFSET_SIZE
308 #define DWARF_OFFSET_SIZE 4
309 #endif
310
311 /* According to the (draft) DWARF 3 specification, the initial length
312    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
313    bytes are 0xffffffff, followed by the length stored in the next 8
314    bytes.
315
316    However, the SGI/MIPS ABI uses an initial length which is equal to
317    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
318
319 #ifndef DWARF_INITIAL_LENGTH_SIZE
320 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
321 #endif
322
323 #define DWARF_VERSION 2
324
325 /* Round SIZE up to the nearest BOUNDARY.  */
326 #define DWARF_ROUND(SIZE,BOUNDARY) \
327   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
328
329 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
330 #ifndef DWARF_CIE_DATA_ALIGNMENT
331 #ifdef STACK_GROWS_DOWNWARD
332 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
333 #else
334 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
335 #endif
336 #endif
337
338 /* CIE identifier.  */
339 #if HOST_BITS_PER_WIDE_INT >= 64
340 #define DWARF_CIE_ID \
341   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
342 #else
343 #define DWARF_CIE_ID DW_CIE_ID
344 #endif
345
346 /* A pointer to the base of a table that contains frame description
347    information for each routine.  */
348 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
349
350 /* Number of elements currently allocated for fde_table.  */
351 static GTY(()) unsigned fde_table_allocated;
352
353 /* Number of elements in fde_table currently in use.  */
354 static GTY(()) unsigned fde_table_in_use;
355
356 /* Size (in elements) of increments by which we may expand the
357    fde_table.  */
358 #define FDE_TABLE_INCREMENT 256
359
360 /* Get the current fde_table entry we should use.  */
361
362 static inline dw_fde_ref
363 current_fde (void)
364 {
365   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
366 }
367
368 /* A list of call frame insns for the CIE.  */
369 static GTY(()) dw_cfi_ref cie_cfi_head;
370
371 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
372 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
373    attribute that accelerates the lookup of the FDE associated
374    with the subprogram.  This variable holds the table index of the FDE
375    associated with the current function (body) definition.  */
376 static unsigned current_funcdef_fde;
377 #endif
378
379 struct indirect_string_node GTY(())
380 {
381   const char *str;
382   unsigned int refcount;
383   unsigned int form;
384   char *label;
385 };
386
387 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
388
389 static GTY(()) int dw2_string_counter;
390 static GTY(()) unsigned long dwarf2out_cfi_label_num;
391
392 /* True if the compilation unit places functions in more than one section.  */
393 static GTY(()) bool have_multiple_function_sections = false;
394
395 /* Whether the default text and cold text sections have been used at all.  */
396
397 static GTY(()) bool text_section_used = false;
398 static GTY(()) bool cold_text_section_used = false;
399
400 /* The default cold text section.  */
401 static GTY(()) section *cold_text_section;
402
403 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
404
405 /* Forward declarations for functions defined in this file.  */
406
407 static char *stripattributes (const char *);
408 static const char *dwarf_cfi_name (unsigned);
409 static dw_cfi_ref new_cfi (void);
410 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
411 static void add_fde_cfi (const char *, dw_cfi_ref);
412 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *);
413 static void lookup_cfa (dw_cfa_location *);
414 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
415 #ifdef DWARF2_UNWIND_INFO
416 static void initial_return_save (rtx);
417 #endif
418 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
419                                           HOST_WIDE_INT);
420 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
421 static void output_cfi_directive (dw_cfi_ref);
422 static void output_call_frame_info (int);
423 static void dwarf2out_note_section_used (void);
424 static void dwarf2out_stack_adjust (rtx, bool);
425 static void dwarf2out_args_size_adjust (HOST_WIDE_INT, const char *);
426 static void flush_queued_reg_saves (void);
427 static bool clobbers_queued_reg_save (const_rtx);
428 static void dwarf2out_frame_debug_expr (rtx, const char *);
429
430 /* Support for complex CFA locations.  */
431 static void output_cfa_loc (dw_cfi_ref);
432 static void output_cfa_loc_raw (dw_cfi_ref);
433 static void get_cfa_from_loc_descr (dw_cfa_location *,
434                                     struct dw_loc_descr_struct *);
435 static struct dw_loc_descr_struct *build_cfa_loc
436   (dw_cfa_location *, HOST_WIDE_INT);
437 static struct dw_loc_descr_struct *build_cfa_aligned_loc
438   (HOST_WIDE_INT, HOST_WIDE_INT);
439 static void def_cfa_1 (const char *, dw_cfa_location *);
440
441 /* How to start an assembler comment.  */
442 #ifndef ASM_COMMENT_START
443 #define ASM_COMMENT_START ";#"
444 #endif
445
446 /* Data and reference forms for relocatable data.  */
447 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
448 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
449
450 #ifndef DEBUG_FRAME_SECTION
451 #define DEBUG_FRAME_SECTION     ".debug_frame"
452 #endif
453
454 #ifndef FUNC_BEGIN_LABEL
455 #define FUNC_BEGIN_LABEL        "LFB"
456 #endif
457
458 #ifndef FUNC_END_LABEL
459 #define FUNC_END_LABEL          "LFE"
460 #endif
461
462 #ifndef FRAME_BEGIN_LABEL
463 #define FRAME_BEGIN_LABEL       "Lframe"
464 #endif
465 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
466 #define CIE_END_LABEL           "LECIE"
467 #define FDE_LABEL               "LSFDE"
468 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
469 #define FDE_END_LABEL           "LEFDE"
470 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
471 #define LINE_NUMBER_END_LABEL   "LELT"
472 #define LN_PROLOG_AS_LABEL      "LASLTP"
473 #define LN_PROLOG_END_LABEL     "LELTP"
474 #define DIE_LABEL_PREFIX        "DW"
475
476 /* The DWARF 2 CFA column which tracks the return address.  Normally this
477    is the column for PC, or the first column after all of the hard
478    registers.  */
479 #ifndef DWARF_FRAME_RETURN_COLUMN
480 #ifdef PC_REGNUM
481 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
482 #else
483 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
484 #endif
485 #endif
486
487 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
488    default, we just provide columns for all registers.  */
489 #ifndef DWARF_FRAME_REGNUM
490 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
491 #endif
492 \f
493 /* Hook used by __throw.  */
494
495 rtx
496 expand_builtin_dwarf_sp_column (void)
497 {
498   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
499   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
500 }
501
502 /* Return a pointer to a copy of the section string name S with all
503    attributes stripped off, and an asterisk prepended (for assemble_name).  */
504
505 static inline char *
506 stripattributes (const char *s)
507 {
508   char *stripped = XNEWVEC (char, strlen (s) + 2);
509   char *p = stripped;
510
511   *p++ = '*';
512
513   while (*s && *s != ',')
514     *p++ = *s++;
515
516   *p = '\0';
517   return stripped;
518 }
519
520 /* MEM is a memory reference for the register size table, each element of
521    which has mode MODE.  Initialize column C as a return address column.  */
522
523 static void
524 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
525 {
526   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
527   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
528   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
529 }
530
531 /* Generate code to initialize the register size table.  */
532
533 void
534 expand_builtin_init_dwarf_reg_sizes (tree address)
535 {
536   unsigned int i;
537   enum machine_mode mode = TYPE_MODE (char_type_node);
538   rtx addr = expand_normal (address);
539   rtx mem = gen_rtx_MEM (BLKmode, addr);
540   bool wrote_return_column = false;
541
542   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
543     {
544       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
545
546       if (rnum < DWARF_FRAME_REGISTERS)
547         {
548           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
549           enum machine_mode save_mode = reg_raw_mode[i];
550           HOST_WIDE_INT size;
551
552           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
553             save_mode = choose_hard_reg_mode (i, 1, true);
554           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
555             {
556               if (save_mode == VOIDmode)
557                 continue;
558               wrote_return_column = true;
559             }
560           size = GET_MODE_SIZE (save_mode);
561           if (offset < 0)
562             continue;
563
564           emit_move_insn (adjust_address (mem, mode, offset),
565                           gen_int_mode (size, mode));
566         }
567     }
568
569   if (!wrote_return_column)
570     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
571
572 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
573   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
574 #endif
575
576   targetm.init_dwarf_reg_sizes_extra (address);
577 }
578
579 /* Convert a DWARF call frame info. operation to its string name */
580
581 static const char *
582 dwarf_cfi_name (unsigned int cfi_opc)
583 {
584   switch (cfi_opc)
585     {
586     case DW_CFA_advance_loc:
587       return "DW_CFA_advance_loc";
588     case DW_CFA_offset:
589       return "DW_CFA_offset";
590     case DW_CFA_restore:
591       return "DW_CFA_restore";
592     case DW_CFA_nop:
593       return "DW_CFA_nop";
594     case DW_CFA_set_loc:
595       return "DW_CFA_set_loc";
596     case DW_CFA_advance_loc1:
597       return "DW_CFA_advance_loc1";
598     case DW_CFA_advance_loc2:
599       return "DW_CFA_advance_loc2";
600     case DW_CFA_advance_loc4:
601       return "DW_CFA_advance_loc4";
602     case DW_CFA_offset_extended:
603       return "DW_CFA_offset_extended";
604     case DW_CFA_restore_extended:
605       return "DW_CFA_restore_extended";
606     case DW_CFA_undefined:
607       return "DW_CFA_undefined";
608     case DW_CFA_same_value:
609       return "DW_CFA_same_value";
610     case DW_CFA_register:
611       return "DW_CFA_register";
612     case DW_CFA_remember_state:
613       return "DW_CFA_remember_state";
614     case DW_CFA_restore_state:
615       return "DW_CFA_restore_state";
616     case DW_CFA_def_cfa:
617       return "DW_CFA_def_cfa";
618     case DW_CFA_def_cfa_register:
619       return "DW_CFA_def_cfa_register";
620     case DW_CFA_def_cfa_offset:
621       return "DW_CFA_def_cfa_offset";
622
623     /* DWARF 3 */
624     case DW_CFA_def_cfa_expression:
625       return "DW_CFA_def_cfa_expression";
626     case DW_CFA_expression:
627       return "DW_CFA_expression";
628     case DW_CFA_offset_extended_sf:
629       return "DW_CFA_offset_extended_sf";
630     case DW_CFA_def_cfa_sf:
631       return "DW_CFA_def_cfa_sf";
632     case DW_CFA_def_cfa_offset_sf:
633       return "DW_CFA_def_cfa_offset_sf";
634
635     /* SGI/MIPS specific */
636     case DW_CFA_MIPS_advance_loc8:
637       return "DW_CFA_MIPS_advance_loc8";
638
639     /* GNU extensions */
640     case DW_CFA_GNU_window_save:
641       return "DW_CFA_GNU_window_save";
642     case DW_CFA_GNU_args_size:
643       return "DW_CFA_GNU_args_size";
644     case DW_CFA_GNU_negative_offset_extended:
645       return "DW_CFA_GNU_negative_offset_extended";
646
647     default:
648       return "DW_CFA_<unknown>";
649     }
650 }
651
652 /* Return a pointer to a newly allocated Call Frame Instruction.  */
653
654 static inline dw_cfi_ref
655 new_cfi (void)
656 {
657   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
658
659   cfi->dw_cfi_next = NULL;
660   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
661   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
662
663   return cfi;
664 }
665
666 /* Add a Call Frame Instruction to list of instructions.  */
667
668 static inline void
669 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
670 {
671   dw_cfi_ref *p;
672   dw_fde_ref fde = current_fde ();
673
674   /* When DRAP is used, CFA is defined with an expression.  Redefine
675      CFA may lead to a different CFA value.   */
676   if (fde && fde->drap_reg != INVALID_REGNUM)
677     switch (cfi->dw_cfi_opc)
678       {
679         case DW_CFA_def_cfa_register:
680         case DW_CFA_def_cfa_offset:
681         case DW_CFA_def_cfa_offset_sf:
682         case DW_CFA_def_cfa:
683         case DW_CFA_def_cfa_sf:
684           gcc_unreachable ();
685
686         default:
687           break;
688       }
689
690   /* Find the end of the chain.  */
691   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
692     ;
693
694   *p = cfi;
695 }
696
697 /* Generate a new label for the CFI info to refer to.  */
698
699 char *
700 dwarf2out_cfi_label (void)
701 {
702   static char label[20];
703
704   if (dwarf2out_do_cfi_asm ())
705     {
706       /* In this case, we will be emitting the asm directive instead of
707          the label, so just return a placeholder to keep the rest of the
708          interfaces happy.  */
709       strcpy (label, "<do not output>");
710     }
711   else
712     {
713       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
714       ASM_OUTPUT_LABEL (asm_out_file, label);
715     }
716
717   return label;
718 }
719
720 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
721    or to the CIE if LABEL is NULL.  */
722
723 static void
724 add_fde_cfi (const char *label, dw_cfi_ref cfi)
725 {
726   dw_cfi_ref *list_head = &cie_cfi_head;
727
728   if (dwarf2out_do_cfi_asm ())
729     {
730       if (label)
731         {
732           output_cfi_directive (cfi);
733
734           /* We still have to add the cfi to the list so that
735              lookup_cfa works later on.  */
736           list_head = &current_fde ()->dw_fde_cfi;
737         }
738       /* ??? If this is a CFI for the CIE, we don't emit.  This
739          assumes that the standard CIE contents that the assembler
740          uses matches the standard CIE contents that the compiler
741          uses.  This is probably a bad assumption.  I'm not quite
742          sure how to address this for now.  */
743     }
744   else if (label)
745     {
746       dw_fde_ref fde = current_fde ();
747
748       gcc_assert (fde != NULL);
749
750       if (*label == 0)
751         label = dwarf2out_cfi_label ();
752
753       if (fde->dw_fde_current_label == NULL
754           || strcmp (label, fde->dw_fde_current_label) != 0)
755         {
756           dw_cfi_ref xcfi;
757
758           label = xstrdup (label);
759
760           /* Set the location counter to the new label.  */
761           xcfi = new_cfi ();
762           /* If we have a current label, advance from there, otherwise
763              set the location directly using set_loc.  */
764           xcfi->dw_cfi_opc = fde->dw_fde_current_label
765                              ? DW_CFA_advance_loc4
766                              : DW_CFA_set_loc;
767           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
768           add_cfi (&fde->dw_fde_cfi, xcfi);
769
770           fde->dw_fde_current_label = label;
771         }
772
773       list_head = &fde->dw_fde_cfi;
774     }
775
776   add_cfi (list_head, cfi);
777 }
778
779 /* Subroutine of lookup_cfa.  */
780
781 static void
782 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc)
783 {
784   switch (cfi->dw_cfi_opc)
785     {
786     case DW_CFA_def_cfa_offset:
787     case DW_CFA_def_cfa_offset_sf:
788       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
789       break;
790     case DW_CFA_def_cfa_register:
791       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
792       break;
793     case DW_CFA_def_cfa:
794     case DW_CFA_def_cfa_sf:
795       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
796       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
797       break;
798     case DW_CFA_def_cfa_expression:
799       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
800       break;
801     default:
802       break;
803     }
804 }
805
806 /* Find the previous value for the CFA.  */
807
808 static void
809 lookup_cfa (dw_cfa_location *loc)
810 {
811   dw_cfi_ref cfi;
812   dw_fde_ref fde;
813
814   loc->reg = INVALID_REGNUM;
815   loc->offset = 0;
816   loc->indirect = 0;
817   loc->base_offset = 0;
818
819   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
820     lookup_cfa_1 (cfi, loc);
821
822   fde = current_fde ();
823   if (fde)
824     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
825       lookup_cfa_1 (cfi, loc);
826 }
827
828 /* The current rule for calculating the DWARF2 canonical frame address.  */
829 static dw_cfa_location cfa;
830
831 /* The register used for saving registers to the stack, and its offset
832    from the CFA.  */
833 static dw_cfa_location cfa_store;
834
835 /* The running total of the size of arguments pushed onto the stack.  */
836 static HOST_WIDE_INT args_size;
837
838 /* The last args_size we actually output.  */
839 static HOST_WIDE_INT old_args_size;
840
841 /* Entry point to update the canonical frame address (CFA).
842    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
843    calculated from REG+OFFSET.  */
844
845 void
846 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
847 {
848   dw_cfa_location loc;
849   loc.indirect = 0;
850   loc.base_offset = 0;
851   loc.reg = reg;
852   loc.offset = offset;
853   def_cfa_1 (label, &loc);
854 }
855
856 /* Determine if two dw_cfa_location structures define the same data.  */
857
858 static bool
859 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
860 {
861   return (loc1->reg == loc2->reg
862           && loc1->offset == loc2->offset
863           && loc1->indirect == loc2->indirect
864           && (loc1->indirect == 0
865               || loc1->base_offset == loc2->base_offset));
866 }
867
868 /* This routine does the actual work.  The CFA is now calculated from
869    the dw_cfa_location structure.  */
870
871 static void
872 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
873 {
874   dw_cfi_ref cfi;
875   dw_cfa_location old_cfa, loc;
876
877   cfa = *loc_p;
878   loc = *loc_p;
879
880   if (cfa_store.reg == loc.reg && loc.indirect == 0)
881     cfa_store.offset = loc.offset;
882
883   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
884   lookup_cfa (&old_cfa);
885
886   /* If nothing changed, no need to issue any call frame instructions.  */
887   if (cfa_equal_p (&loc, &old_cfa))
888     return;
889
890   cfi = new_cfi ();
891
892   if (loc.reg == old_cfa.reg && !loc.indirect)
893     {
894       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
895          the CFA register did not change but the offset did.  The data 
896          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
897          in the assembler via the .cfi_def_cfa_offset directive.  */
898       if (loc.offset < 0)
899         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
900       else
901         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
902       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
903     }
904
905 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
906   else if (loc.offset == old_cfa.offset
907            && old_cfa.reg != INVALID_REGNUM
908            && !loc.indirect)
909     {
910       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
911          indicating the CFA register has changed to <register> but the
912          offset has not changed.  */
913       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
914       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
915     }
916 #endif
917
918   else if (loc.indirect == 0)
919     {
920       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
921          indicating the CFA register has changed to <register> with
922          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
923          happens in output_cfi, or in the assembler via the .cfi_def_cfa
924          directive.  */
925       if (loc.offset < 0)
926         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
927       else
928         cfi->dw_cfi_opc = DW_CFA_def_cfa;
929       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
930       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
931     }
932   else
933     {
934       /* Construct a DW_CFA_def_cfa_expression instruction to
935          calculate the CFA using a full location expression since no
936          register-offset pair is available.  */
937       struct dw_loc_descr_struct *loc_list;
938
939       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
940       loc_list = build_cfa_loc (&loc, 0);
941       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
942     }
943
944   add_fde_cfi (label, cfi);
945 }
946
947 /* Add the CFI for saving a register.  REG is the CFA column number.
948    LABEL is passed to add_fde_cfi.
949    If SREG is -1, the register is saved at OFFSET from the CFA;
950    otherwise it is saved in SREG.  */
951
952 static void
953 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
954 {
955   dw_cfi_ref cfi = new_cfi ();
956   dw_fde_ref fde = current_fde ();
957
958   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
959
960   /* When stack is aligned, store REG using DW_CFA_expression with
961      FP.  */
962   if (fde
963       && fde->stack_realign
964       && sreg == INVALID_REGNUM)
965     {
966       cfi->dw_cfi_opc = DW_CFA_expression;
967       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = reg;
968       cfi->dw_cfi_oprnd1.dw_cfi_loc
969         = build_cfa_aligned_loc (offset, fde->stack_realignment);
970     }
971   else if (sreg == INVALID_REGNUM)
972     {
973       if (offset < 0)
974         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
975       else if (reg & ~0x3f)
976         cfi->dw_cfi_opc = DW_CFA_offset_extended;
977       else
978         cfi->dw_cfi_opc = DW_CFA_offset;
979       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
980     }
981   else if (sreg == reg)
982     cfi->dw_cfi_opc = DW_CFA_same_value;
983   else
984     {
985       cfi->dw_cfi_opc = DW_CFA_register;
986       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
987     }
988
989   add_fde_cfi (label, cfi);
990 }
991
992 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
993    This CFI tells the unwinder that it needs to restore the window registers
994    from the previous frame's window save area.
995
996    ??? Perhaps we should note in the CIE where windows are saved (instead of
997    assuming 0(cfa)) and what registers are in the window.  */
998
999 void
1000 dwarf2out_window_save (const char *label)
1001 {
1002   dw_cfi_ref cfi = new_cfi ();
1003
1004   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1005   add_fde_cfi (label, cfi);
1006 }
1007
1008 /* Add a CFI to update the running total of the size of arguments
1009    pushed onto the stack.  */
1010
1011 void
1012 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1013 {
1014   dw_cfi_ref cfi;
1015
1016   if (size == old_args_size)
1017     return;
1018
1019   old_args_size = size;
1020
1021   cfi = new_cfi ();
1022   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1023   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1024   add_fde_cfi (label, cfi);
1025 }
1026
1027 /* Entry point for saving a register to the stack.  REG is the GCC register
1028    number.  LABEL and OFFSET are passed to reg_save.  */
1029
1030 void
1031 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1032 {
1033   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1034 }
1035
1036 /* Entry point for saving the return address in the stack.
1037    LABEL and OFFSET are passed to reg_save.  */
1038
1039 void
1040 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1041 {
1042   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1043 }
1044
1045 /* Entry point for saving the return address in a register.
1046    LABEL and SREG are passed to reg_save.  */
1047
1048 void
1049 dwarf2out_return_reg (const char *label, unsigned int sreg)
1050 {
1051   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1052 }
1053
1054 #ifdef DWARF2_UNWIND_INFO
1055 /* Record the initial position of the return address.  RTL is
1056    INCOMING_RETURN_ADDR_RTX.  */
1057
1058 static void
1059 initial_return_save (rtx rtl)
1060 {
1061   unsigned int reg = INVALID_REGNUM;
1062   HOST_WIDE_INT offset = 0;
1063
1064   switch (GET_CODE (rtl))
1065     {
1066     case REG:
1067       /* RA is in a register.  */
1068       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1069       break;
1070
1071     case MEM:
1072       /* RA is on the stack.  */
1073       rtl = XEXP (rtl, 0);
1074       switch (GET_CODE (rtl))
1075         {
1076         case REG:
1077           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1078           offset = 0;
1079           break;
1080
1081         case PLUS:
1082           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1083           offset = INTVAL (XEXP (rtl, 1));
1084           break;
1085
1086         case MINUS:
1087           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1088           offset = -INTVAL (XEXP (rtl, 1));
1089           break;
1090
1091         default:
1092           gcc_unreachable ();
1093         }
1094
1095       break;
1096
1097     case PLUS:
1098       /* The return address is at some offset from any value we can
1099          actually load.  For instance, on the SPARC it is in %i7+8. Just
1100          ignore the offset for now; it doesn't matter for unwinding frames.  */
1101       gcc_assert (GET_CODE (XEXP (rtl, 1)) == CONST_INT);
1102       initial_return_save (XEXP (rtl, 0));
1103       return;
1104
1105     default:
1106       gcc_unreachable ();
1107     }
1108
1109   if (reg != DWARF_FRAME_RETURN_COLUMN)
1110     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1111 }
1112 #endif
1113
1114 /* Given a SET, calculate the amount of stack adjustment it
1115    contains.  */
1116
1117 static HOST_WIDE_INT
1118 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1119                      HOST_WIDE_INT cur_offset)
1120 {
1121   const_rtx src = SET_SRC (pattern);
1122   const_rtx dest = SET_DEST (pattern);
1123   HOST_WIDE_INT offset = 0;
1124   enum rtx_code code;
1125
1126   if (dest == stack_pointer_rtx)
1127     {
1128       code = GET_CODE (src);
1129
1130       /* Assume (set (reg sp) (reg whatever)) sets args_size
1131          level to 0.  */
1132       if (code == REG && src != stack_pointer_rtx)
1133         {
1134           offset = -cur_args_size;
1135 #ifndef STACK_GROWS_DOWNWARD
1136           offset = -offset;
1137 #endif
1138           return offset - cur_offset;
1139         }
1140
1141       if (! (code == PLUS || code == MINUS)
1142           || XEXP (src, 0) != stack_pointer_rtx
1143           || GET_CODE (XEXP (src, 1)) != CONST_INT)
1144         return 0;
1145
1146       /* (set (reg sp) (plus (reg sp) (const_int))) */
1147       offset = INTVAL (XEXP (src, 1));
1148       if (code == PLUS)
1149         offset = -offset;
1150       return offset;
1151     }
1152
1153   if (MEM_P (src) && !MEM_P (dest))
1154     dest = src;
1155   if (MEM_P (dest))
1156     {
1157       /* (set (mem (pre_dec (reg sp))) (foo)) */
1158       src = XEXP (dest, 0);
1159       code = GET_CODE (src);
1160
1161       switch (code)
1162         {
1163         case PRE_MODIFY:
1164         case POST_MODIFY:
1165           if (XEXP (src, 0) == stack_pointer_rtx)
1166             {
1167               rtx val = XEXP (XEXP (src, 1), 1);
1168               /* We handle only adjustments by constant amount.  */
1169               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1170                           && GET_CODE (val) == CONST_INT);
1171               offset = -INTVAL (val);
1172               break;
1173             }
1174           return 0;
1175
1176         case PRE_DEC:
1177         case POST_DEC:
1178           if (XEXP (src, 0) == stack_pointer_rtx)
1179             {
1180               offset = GET_MODE_SIZE (GET_MODE (dest));
1181               break;
1182             }
1183           return 0;
1184
1185         case PRE_INC:
1186         case POST_INC:
1187           if (XEXP (src, 0) == stack_pointer_rtx)
1188             {
1189               offset = -GET_MODE_SIZE (GET_MODE (dest));
1190               break;
1191             }
1192           return 0;
1193
1194         default:
1195           return 0;
1196         }
1197     }
1198   else
1199     return 0;
1200
1201   return offset;
1202 }
1203
1204 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1205    indexed by INSN_UID.  */
1206
1207 static HOST_WIDE_INT *barrier_args_size;
1208
1209 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1210
1211 static HOST_WIDE_INT
1212 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1213                              VEC (rtx, heap) **next)
1214 {
1215   HOST_WIDE_INT offset = 0;
1216   int i;
1217
1218   if (! RTX_FRAME_RELATED_P (insn))
1219     {
1220       if (prologue_epilogue_contains (insn)
1221           || sibcall_epilogue_contains (insn))
1222         /* Nothing */;
1223       else if (GET_CODE (PATTERN (insn)) == SET)
1224         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1225       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1226                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1227         {
1228           /* There may be stack adjustments inside compound insns.  Search
1229              for them.  */
1230           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1231             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1232               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1233                                              cur_args_size, offset);
1234         }
1235     }
1236   else
1237     {
1238       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1239
1240       if (expr)
1241         {
1242           expr = XEXP (expr, 0);
1243           if (GET_CODE (expr) == PARALLEL
1244               || GET_CODE (expr) == SEQUENCE)
1245             for (i = 1; i < XVECLEN (expr, 0); i++)
1246               {
1247                 rtx elem = XVECEXP (expr, 0, i);
1248
1249                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1250                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1251               }
1252         }
1253     }
1254
1255 #ifndef STACK_GROWS_DOWNWARD
1256   offset = -offset;
1257 #endif
1258
1259   cur_args_size += offset;
1260   if (cur_args_size < 0)
1261     cur_args_size = 0;
1262
1263   if (JUMP_P (insn))
1264     {
1265       rtx dest = JUMP_LABEL (insn);
1266
1267       if (dest)
1268         {
1269           if (barrier_args_size [INSN_UID (dest)] < 0)
1270             {
1271               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1272               VEC_safe_push (rtx, heap, *next, dest);
1273             }
1274         }
1275     }
1276
1277   return cur_args_size;
1278 }
1279
1280 /* Walk the whole function and compute args_size on BARRIERs.  */
1281
1282 static void
1283 compute_barrier_args_size (void)
1284 {
1285   int max_uid = get_max_uid (), i;
1286   rtx insn;
1287   VEC (rtx, heap) *worklist, *next, *tmp;
1288
1289   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1290   for (i = 0; i < max_uid; i++)
1291     barrier_args_size[i] = -1;
1292
1293   worklist = VEC_alloc (rtx, heap, 20);
1294   next = VEC_alloc (rtx, heap, 20);
1295   insn = get_insns ();
1296   barrier_args_size[INSN_UID (insn)] = 0;
1297   VEC_quick_push (rtx, worklist, insn);
1298   for (;;)
1299     {
1300       while (!VEC_empty (rtx, worklist))
1301         {
1302           rtx prev, body, first_insn;
1303           HOST_WIDE_INT cur_args_size;
1304
1305           first_insn = insn = VEC_pop (rtx, worklist);
1306           cur_args_size = barrier_args_size[INSN_UID (insn)];
1307           prev = prev_nonnote_insn (insn);
1308           if (prev && BARRIER_P (prev))
1309             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1310
1311           for (; insn; insn = NEXT_INSN (insn))
1312             {
1313               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1314                 continue;
1315               if (BARRIER_P (insn))
1316                 break;
1317
1318               if (LABEL_P (insn))
1319                 {
1320                   if (insn == first_insn)
1321                     continue;
1322                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1323                     {
1324                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1325                       continue;
1326                     }
1327                   else
1328                     {
1329                       /* The insns starting with this label have been
1330                          already scanned or are in the worklist.  */
1331                       break;
1332                     }
1333                 }
1334
1335               body = PATTERN (insn);
1336               if (GET_CODE (body) == SEQUENCE)
1337                 {
1338                   HOST_WIDE_INT dest_args_size = cur_args_size;
1339                   for (i = 1; i < XVECLEN (body, 0); i++)
1340                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1341                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1342                       dest_args_size
1343                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1344                                                        dest_args_size, &next);
1345                     else
1346                       cur_args_size
1347                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1348                                                        cur_args_size, &next);
1349
1350                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1351                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1352                                                  dest_args_size, &next);
1353                   else
1354                     cur_args_size
1355                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1356                                                      cur_args_size, &next);
1357                 }
1358               else
1359                 cur_args_size
1360                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1361             }
1362         }
1363
1364       if (VEC_empty (rtx, next))
1365         break;
1366
1367       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1368       tmp = next;
1369       next = worklist;
1370       worklist = tmp;
1371       VEC_truncate (rtx, next, 0);
1372     }
1373
1374   VEC_free (rtx, heap, worklist);
1375   VEC_free (rtx, heap, next);
1376 }
1377
1378
1379 /* Check INSN to see if it looks like a push or a stack adjustment, and
1380    make a note of it if it does.  EH uses this information to find out how
1381    much extra space it needs to pop off the stack.  */
1382
1383 static void
1384 dwarf2out_stack_adjust (rtx insn, bool after_p)
1385 {
1386   HOST_WIDE_INT offset;
1387   const char *label;
1388   int i;
1389
1390   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1391      with this function.  Proper support would require all frame-related
1392      insns to be marked, and to be able to handle saving state around
1393      epilogues textually in the middle of the function.  */
1394   if (prologue_epilogue_contains (insn) || sibcall_epilogue_contains (insn))
1395     return;
1396
1397   /* If INSN is an instruction from target of an annulled branch, the
1398      effects are for the target only and so current argument size
1399      shouldn't change at all.  */
1400   if (final_sequence
1401       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1402       && INSN_FROM_TARGET_P (insn))
1403     return;
1404
1405   /* If only calls can throw, and we have a frame pointer,
1406      save up adjustments until we see the CALL_INSN.  */
1407   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1408     {
1409       if (CALL_P (insn) && !after_p)
1410         {
1411           /* Extract the size of the args from the CALL rtx itself.  */
1412           insn = PATTERN (insn);
1413           if (GET_CODE (insn) == PARALLEL)
1414             insn = XVECEXP (insn, 0, 0);
1415           if (GET_CODE (insn) == SET)
1416             insn = SET_SRC (insn);
1417           gcc_assert (GET_CODE (insn) == CALL);
1418           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1419         }
1420       return;
1421     }
1422
1423   if (CALL_P (insn) && !after_p)
1424     {
1425       if (!flag_asynchronous_unwind_tables)
1426         dwarf2out_args_size ("", args_size);
1427       return;
1428     }
1429   else if (BARRIER_P (insn))
1430     {
1431       /* Don't call compute_barrier_args_size () if the only
1432          BARRIER is at the end of function.  */
1433       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1434         compute_barrier_args_size ();
1435       if (barrier_args_size == NULL)
1436         offset = 0;
1437       else
1438         {
1439           offset = barrier_args_size[INSN_UID (insn)];
1440           if (offset < 0)
1441             offset = 0;
1442         }
1443
1444       offset -= args_size;
1445 #ifndef STACK_GROWS_DOWNWARD
1446       offset = -offset;
1447 #endif
1448     }
1449   else if (GET_CODE (PATTERN (insn)) == SET)
1450     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1451   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1452            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1453     {
1454       /* There may be stack adjustments inside compound insns.  Search
1455          for them.  */
1456       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1457         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1458           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1459                                          args_size, offset);
1460     }
1461   else
1462     return;
1463
1464   if (offset == 0)
1465     return;
1466
1467   label = dwarf2out_cfi_label ();
1468   dwarf2out_args_size_adjust (offset, label);
1469 }
1470
1471 /* Adjust args_size based on stack adjustment OFFSET.  */
1472
1473 static void
1474 dwarf2out_args_size_adjust (HOST_WIDE_INT offset, const char *label)
1475 {
1476   if (cfa.reg == STACK_POINTER_REGNUM)
1477     cfa.offset += offset;
1478
1479   if (cfa_store.reg == STACK_POINTER_REGNUM)
1480     cfa_store.offset += offset;
1481
1482 #ifndef STACK_GROWS_DOWNWARD
1483   offset = -offset;
1484 #endif
1485
1486   args_size += offset;
1487   if (args_size < 0)
1488     args_size = 0;
1489
1490   def_cfa_1 (label, &cfa);
1491   if (flag_asynchronous_unwind_tables)
1492     dwarf2out_args_size (label, args_size);
1493 }
1494
1495 #endif
1496
1497 /* We delay emitting a register save until either (a) we reach the end
1498    of the prologue or (b) the register is clobbered.  This clusters
1499    register saves so that there are fewer pc advances.  */
1500
1501 struct queued_reg_save GTY(())
1502 {
1503   struct queued_reg_save *next;
1504   rtx reg;
1505   HOST_WIDE_INT cfa_offset;
1506   rtx saved_reg;
1507 };
1508
1509 static GTY(()) struct queued_reg_save *queued_reg_saves;
1510
1511 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1512 struct reg_saved_in_data GTY(()) {
1513   rtx orig_reg;
1514   rtx saved_in_reg;
1515 };
1516
1517 /* A list of registers saved in other registers.
1518    The list intentionally has a small maximum capacity of 4; if your
1519    port needs more than that, you might consider implementing a
1520    more efficient data structure.  */
1521 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1522 static GTY(()) size_t num_regs_saved_in_regs;
1523
1524 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1525 static const char *last_reg_save_label;
1526
1527 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1528    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1529
1530 static void
1531 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1532 {
1533   struct queued_reg_save *q;
1534
1535   /* Duplicates waste space, but it's also necessary to remove them
1536      for correctness, since the queue gets output in reverse
1537      order.  */
1538   for (q = queued_reg_saves; q != NULL; q = q->next)
1539     if (REGNO (q->reg) == REGNO (reg))
1540       break;
1541
1542   if (q == NULL)
1543     {
1544       q = GGC_NEW (struct queued_reg_save);
1545       q->next = queued_reg_saves;
1546       queued_reg_saves = q;
1547     }
1548
1549   q->reg = reg;
1550   q->cfa_offset = offset;
1551   q->saved_reg = sreg;
1552
1553   last_reg_save_label = label;
1554 }
1555
1556 /* Output all the entries in QUEUED_REG_SAVES.  */
1557
1558 static void
1559 flush_queued_reg_saves (void)
1560 {
1561   struct queued_reg_save *q;
1562
1563   for (q = queued_reg_saves; q; q = q->next)
1564     {
1565       size_t i;
1566       unsigned int reg, sreg;
1567
1568       for (i = 0; i < num_regs_saved_in_regs; i++)
1569         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1570           break;
1571       if (q->saved_reg && i == num_regs_saved_in_regs)
1572         {
1573           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1574           num_regs_saved_in_regs++;
1575         }
1576       if (i != num_regs_saved_in_regs)
1577         {
1578           regs_saved_in_regs[i].orig_reg = q->reg;
1579           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1580         }
1581
1582       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1583       if (q->saved_reg)
1584         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1585       else
1586         sreg = INVALID_REGNUM;
1587       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1588     }
1589
1590   queued_reg_saves = NULL;
1591   last_reg_save_label = NULL;
1592 }
1593
1594 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1595    location for?  Or, does it clobber a register which we've previously
1596    said that some other register is saved in, and for which we now
1597    have a new location for?  */
1598
1599 static bool
1600 clobbers_queued_reg_save (const_rtx insn)
1601 {
1602   struct queued_reg_save *q;
1603
1604   for (q = queued_reg_saves; q; q = q->next)
1605     {
1606       size_t i;
1607       if (modified_in_p (q->reg, insn))
1608         return true;
1609       for (i = 0; i < num_regs_saved_in_regs; i++)
1610         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1611             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1612           return true;
1613     }
1614
1615   return false;
1616 }
1617
1618 /* Entry point for saving the first register into the second.  */
1619
1620 void
1621 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1622 {
1623   size_t i;
1624   unsigned int regno, sregno;
1625
1626   for (i = 0; i < num_regs_saved_in_regs; i++)
1627     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1628       break;
1629   if (i == num_regs_saved_in_regs)
1630     {
1631       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1632       num_regs_saved_in_regs++;
1633     }
1634   regs_saved_in_regs[i].orig_reg = reg;
1635   regs_saved_in_regs[i].saved_in_reg = sreg;
1636
1637   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1638   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1639   reg_save (label, regno, sregno, 0);
1640 }
1641
1642 /* What register, if any, is currently saved in REG?  */
1643
1644 static rtx
1645 reg_saved_in (rtx reg)
1646 {
1647   unsigned int regn = REGNO (reg);
1648   size_t i;
1649   struct queued_reg_save *q;
1650
1651   for (q = queued_reg_saves; q; q = q->next)
1652     if (q->saved_reg && regn == REGNO (q->saved_reg))
1653       return q->reg;
1654
1655   for (i = 0; i < num_regs_saved_in_regs; i++)
1656     if (regs_saved_in_regs[i].saved_in_reg
1657         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1658       return regs_saved_in_regs[i].orig_reg;
1659
1660   return NULL_RTX;
1661 }
1662
1663
1664 /* A temporary register holding an integral value used in adjusting SP
1665    or setting up the store_reg.  The "offset" field holds the integer
1666    value, not an offset.  */
1667 static dw_cfa_location cfa_temp;
1668
1669 /* Record call frame debugging information for an expression EXPR,
1670    which either sets SP or FP (adjusting how we calculate the frame
1671    address) or saves a register to the stack or another register.
1672    LABEL indicates the address of EXPR.
1673
1674    This function encodes a state machine mapping rtxes to actions on
1675    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1676    users need not read the source code.
1677
1678   The High-Level Picture
1679
1680   Changes in the register we use to calculate the CFA: Currently we
1681   assume that if you copy the CFA register into another register, we
1682   should take the other one as the new CFA register; this seems to
1683   work pretty well.  If it's wrong for some target, it's simple
1684   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1685
1686   Changes in the register we use for saving registers to the stack:
1687   This is usually SP, but not always.  Again, we deduce that if you
1688   copy SP into another register (and SP is not the CFA register),
1689   then the new register is the one we will be using for register
1690   saves.  This also seems to work.
1691
1692   Register saves: There's not much guesswork about this one; if
1693   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1694   register save, and the register used to calculate the destination
1695   had better be the one we think we're using for this purpose.
1696   It's also assumed that a copy from a call-saved register to another
1697   register is saving that register if RTX_FRAME_RELATED_P is set on
1698   that instruction.  If the copy is from a call-saved register to
1699   the *same* register, that means that the register is now the same
1700   value as in the caller.
1701
1702   Except: If the register being saved is the CFA register, and the
1703   offset is nonzero, we are saving the CFA, so we assume we have to
1704   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
1705   the intent is to save the value of SP from the previous frame.
1706
1707   In addition, if a register has previously been saved to a different
1708   register,
1709
1710   Invariants / Summaries of Rules
1711
1712   cfa          current rule for calculating the CFA.  It usually
1713                consists of a register and an offset.
1714   cfa_store    register used by prologue code to save things to the stack
1715                cfa_store.offset is the offset from the value of
1716                cfa_store.reg to the actual CFA
1717   cfa_temp     register holding an integral value.  cfa_temp.offset
1718                stores the value, which will be used to adjust the
1719                stack pointer.  cfa_temp is also used like cfa_store,
1720                to track stores to the stack via fp or a temp reg.
1721
1722   Rules  1- 4: Setting a register's value to cfa.reg or an expression
1723                with cfa.reg as the first operand changes the cfa.reg and its
1724                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
1725                cfa_temp.offset.
1726
1727   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
1728                expression yielding a constant.  This sets cfa_temp.reg
1729                and cfa_temp.offset.
1730
1731   Rule 5:      Create a new register cfa_store used to save items to the
1732                stack.
1733
1734   Rules 10-14: Save a register to the stack.  Define offset as the
1735                difference of the original location and cfa_store's
1736                location (or cfa_temp's location if cfa_temp is used).
1737
1738   Rules 16-20: If AND operation happens on sp in prologue, we assume
1739                stack is realigned.  We will use a group of DW_OP_XXX
1740                expressions to represent the location of the stored
1741                register instead of CFA+offset.
1742
1743   The Rules
1744
1745   "{a,b}" indicates a choice of a xor b.
1746   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
1747
1748   Rule 1:
1749   (set <reg1> <reg2>:cfa.reg)
1750   effects: cfa.reg = <reg1>
1751            cfa.offset unchanged
1752            cfa_temp.reg = <reg1>
1753            cfa_temp.offset = cfa.offset
1754
1755   Rule 2:
1756   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
1757                               {<const_int>,<reg>:cfa_temp.reg}))
1758   effects: cfa.reg = sp if fp used
1759            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
1760            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
1761              if cfa_store.reg==sp
1762
1763   Rule 3:
1764   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
1765   effects: cfa.reg = fp
1766            cfa_offset += +/- <const_int>
1767
1768   Rule 4:
1769   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
1770   constraints: <reg1> != fp
1771                <reg1> != sp
1772   effects: cfa.reg = <reg1>
1773            cfa_temp.reg = <reg1>
1774            cfa_temp.offset = cfa.offset
1775
1776   Rule 5:
1777   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
1778   constraints: <reg1> != fp
1779                <reg1> != sp
1780   effects: cfa_store.reg = <reg1>
1781            cfa_store.offset = cfa.offset - cfa_temp.offset
1782
1783   Rule 6:
1784   (set <reg> <const_int>)
1785   effects: cfa_temp.reg = <reg>
1786            cfa_temp.offset = <const_int>
1787
1788   Rule 7:
1789   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
1790   effects: cfa_temp.reg = <reg1>
1791            cfa_temp.offset |= <const_int>
1792
1793   Rule 8:
1794   (set <reg> (high <exp>))
1795   effects: none
1796
1797   Rule 9:
1798   (set <reg> (lo_sum <exp> <const_int>))
1799   effects: cfa_temp.reg = <reg>
1800            cfa_temp.offset = <const_int>
1801
1802   Rule 10:
1803   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
1804   effects: cfa_store.offset -= <const_int>
1805            cfa.offset = cfa_store.offset if cfa.reg == sp
1806            cfa.reg = sp
1807            cfa.base_offset = -cfa_store.offset
1808
1809   Rule 11:
1810   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
1811   effects: cfa_store.offset += -/+ mode_size(mem)
1812            cfa.offset = cfa_store.offset if cfa.reg == sp
1813            cfa.reg = sp
1814            cfa.base_offset = -cfa_store.offset
1815
1816   Rule 12:
1817   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
1818
1819        <reg2>)
1820   effects: cfa.reg = <reg1>
1821            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
1822
1823   Rule 13:
1824   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
1825   effects: cfa.reg = <reg1>
1826            cfa.base_offset = -{cfa_store,cfa_temp}.offset
1827
1828   Rule 14:
1829   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
1830   effects: cfa.reg = <reg1>
1831            cfa.base_offset = -cfa_temp.offset
1832            cfa_temp.offset -= mode_size(mem)
1833
1834   Rule 15:
1835   (set <reg> {unspec, unspec_volatile})
1836   effects: target-dependent
1837
1838   Rule 16:
1839   (set sp (and: sp <const_int>))
1840   constraints: cfa_store.reg == sp
1841   effects: current_fde.stack_realign = 1
1842            cfa_store.offset = 0
1843            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
1844
1845   Rule 17:
1846   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
1847   effects: cfa_store.offset += -/+ mode_size(mem)
1848
1849   Rule 18:
1850   (set (mem ({pre_inc, pre_dec} sp)) fp)
1851   constraints: fde->stack_realign == 1
1852   effects: cfa_store.offset = 0
1853            cfa.reg != HARD_FRAME_POINTER_REGNUM
1854
1855   Rule 19:
1856   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
1857   constraints: fde->stack_realign == 1
1858                && cfa.offset == 0
1859                && cfa.indirect == 0
1860                && cfa.reg != HARD_FRAME_POINTER_REGNUM
1861   effects: Use DW_CFA_def_cfa_expression to define cfa
1862            cfa.reg == fde->drap_reg
1863
1864   Rule 20:
1865   (set reg fde->drap_reg)
1866   constraints: fde->vdrap_reg == INVALID_REGNUM
1867   effects: fde->vdrap_reg = reg.
1868   (set mem fde->drap_reg)
1869   constraints: fde->drap_reg_saved == 1
1870   effects: none.  */
1871
1872 static void
1873 dwarf2out_frame_debug_expr (rtx expr, const char *label)
1874 {
1875   rtx src, dest, span;
1876   HOST_WIDE_INT offset;
1877   dw_fde_ref fde;
1878
1879   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
1880      the PARALLEL independently. The first element is always processed if
1881      it is a SET. This is for backward compatibility.   Other elements
1882      are processed only if they are SETs and the RTX_FRAME_RELATED_P
1883      flag is set in them.  */
1884   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
1885     {
1886       int par_index;
1887       int limit = XVECLEN (expr, 0);
1888       rtx elem;
1889
1890       /* PARALLELs have strict read-modify-write semantics, so we
1891          ought to evaluate every rvalue before changing any lvalue.
1892          It's cumbersome to do that in general, but there's an
1893          easy approximation that is enough for all current users:
1894          handle register saves before register assignments.  */
1895       if (GET_CODE (expr) == PARALLEL)
1896         for (par_index = 0; par_index < limit; par_index++)
1897           {
1898             elem = XVECEXP (expr, 0, par_index);
1899             if (GET_CODE (elem) == SET
1900                 && MEM_P (SET_DEST (elem))
1901                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
1902               dwarf2out_frame_debug_expr (elem, label);
1903           }
1904
1905       for (par_index = 0; par_index < limit; par_index++)
1906         {
1907           elem = XVECEXP (expr, 0, par_index);
1908           if (GET_CODE (elem) == SET
1909               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
1910               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
1911             dwarf2out_frame_debug_expr (elem, label);
1912           else if (GET_CODE (elem) == SET
1913                    && par_index != 0
1914                    && !RTX_FRAME_RELATED_P (elem))
1915             {
1916               /* Stack adjustment combining might combine some post-prologue
1917                  stack adjustment into a prologue stack adjustment.  */
1918               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
1919
1920               if (offset != 0)
1921                 dwarf2out_args_size_adjust (offset, label);
1922             }
1923         }
1924       return;
1925     }
1926
1927   gcc_assert (GET_CODE (expr) == SET);
1928
1929   src = SET_SRC (expr);
1930   dest = SET_DEST (expr);
1931
1932   if (REG_P (src))
1933     {
1934       rtx rsi = reg_saved_in (src);
1935       if (rsi)
1936         src = rsi;
1937     }
1938
1939   fde = current_fde ();
1940
1941   if (GET_CODE (src) == REG
1942       && fde
1943       && fde->drap_reg == REGNO (src)
1944       && (fde->drap_reg_saved
1945           || GET_CODE (dest) == REG))
1946     {
1947       /* Rule 20 */
1948       /* If we are saving dynamic realign argument pointer to a
1949          register, the destination is virtual dynamic realign
1950          argument pointer.  It may be used to access argument.  */
1951       if (GET_CODE (dest) == REG)
1952         {
1953           gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
1954           fde->vdrap_reg = REGNO (dest);
1955         }
1956       return;
1957     }
1958
1959   switch (GET_CODE (dest))
1960     {
1961     case REG:
1962       switch (GET_CODE (src))
1963         {
1964           /* Setting FP from SP.  */
1965         case REG:
1966           if (cfa.reg == (unsigned) REGNO (src))
1967             {
1968               /* Rule 1 */
1969               /* Update the CFA rule wrt SP or FP.  Make sure src is
1970                  relative to the current CFA register.
1971
1972                  We used to require that dest be either SP or FP, but the
1973                  ARM copies SP to a temporary register, and from there to
1974                  FP.  So we just rely on the backends to only set
1975                  RTX_FRAME_RELATED_P on appropriate insns.  */
1976               cfa.reg = REGNO (dest);
1977               cfa_temp.reg = cfa.reg;
1978               cfa_temp.offset = cfa.offset;
1979             }
1980           else
1981             {
1982               /* Saving a register in a register.  */
1983               gcc_assert (!fixed_regs [REGNO (dest)]
1984                           /* For the SPARC and its register window.  */
1985                           || (DWARF_FRAME_REGNUM (REGNO (src))
1986                               == DWARF_FRAME_RETURN_COLUMN));
1987
1988               /* After stack is aligned, we can only save SP in FP
1989                  if drap register is used.  In this case, we have
1990                  to restore stack pointer with the CFA value and we
1991                  don't generate this DWARF information.  */
1992               if (fde
1993                   && fde->stack_realign
1994                   && REGNO (src) == STACK_POINTER_REGNUM)
1995                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
1996                             && fde->drap_reg != INVALID_REGNUM
1997                             && cfa.reg != REGNO (src));
1998               else
1999                 queue_reg_save (label, src, dest, 0);
2000             }
2001           break;
2002
2003         case PLUS:
2004         case MINUS:
2005         case LO_SUM:
2006           if (dest == stack_pointer_rtx)
2007             {
2008               /* Rule 2 */
2009               /* Adjusting SP.  */
2010               switch (GET_CODE (XEXP (src, 1)))
2011                 {
2012                 case CONST_INT:
2013                   offset = INTVAL (XEXP (src, 1));
2014                   break;
2015                 case REG:
2016                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2017                               == cfa_temp.reg);
2018                   offset = cfa_temp.offset;
2019                   break;
2020                 default:
2021                   gcc_unreachable ();
2022                 }
2023
2024               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2025                 {
2026                   /* Restoring SP from FP in the epilogue.  */
2027                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2028                   cfa.reg = STACK_POINTER_REGNUM;
2029                 }
2030               else if (GET_CODE (src) == LO_SUM)
2031                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2032                 ;
2033               else
2034                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2035
2036               if (GET_CODE (src) != MINUS)
2037                 offset = -offset;
2038               if (cfa.reg == STACK_POINTER_REGNUM)
2039                 cfa.offset += offset;
2040               if (cfa_store.reg == STACK_POINTER_REGNUM)
2041                 cfa_store.offset += offset;
2042             }
2043           else if (dest == hard_frame_pointer_rtx)
2044             {
2045               /* Rule 3 */
2046               /* Either setting the FP from an offset of the SP,
2047                  or adjusting the FP */
2048               gcc_assert (frame_pointer_needed);
2049
2050               gcc_assert (REG_P (XEXP (src, 0))
2051                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2052                           && GET_CODE (XEXP (src, 1)) == CONST_INT);
2053               offset = INTVAL (XEXP (src, 1));
2054               if (GET_CODE (src) != MINUS)
2055                 offset = -offset;
2056               cfa.offset += offset;
2057               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2058             }
2059           else
2060             {
2061               gcc_assert (GET_CODE (src) != MINUS);
2062
2063               /* Rule 4 */
2064               if (REG_P (XEXP (src, 0))
2065                   && REGNO (XEXP (src, 0)) == cfa.reg
2066                   && GET_CODE (XEXP (src, 1)) == CONST_INT)
2067                 {
2068                   /* Setting a temporary CFA register that will be copied
2069                      into the FP later on.  */
2070                   offset = - INTVAL (XEXP (src, 1));
2071                   cfa.offset += offset;
2072                   cfa.reg = REGNO (dest);
2073                   /* Or used to save regs to the stack.  */
2074                   cfa_temp.reg = cfa.reg;
2075                   cfa_temp.offset = cfa.offset;
2076                 }
2077
2078               /* Rule 5 */
2079               else if (REG_P (XEXP (src, 0))
2080                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2081                        && XEXP (src, 1) == stack_pointer_rtx)
2082                 {
2083                   /* Setting a scratch register that we will use instead
2084                      of SP for saving registers to the stack.  */
2085                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2086                   cfa_store.reg = REGNO (dest);
2087                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2088                 }
2089
2090               /* Rule 9 */
2091               else if (GET_CODE (src) == LO_SUM
2092                        && GET_CODE (XEXP (src, 1)) == CONST_INT)
2093                 {
2094                   cfa_temp.reg = REGNO (dest);
2095                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2096                 }
2097               else
2098                 gcc_unreachable ();
2099             }
2100           break;
2101
2102           /* Rule 6 */
2103         case CONST_INT:
2104           cfa_temp.reg = REGNO (dest);
2105           cfa_temp.offset = INTVAL (src);
2106           break;
2107
2108           /* Rule 7 */
2109         case IOR:
2110           gcc_assert (REG_P (XEXP (src, 0))
2111                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2112                       && GET_CODE (XEXP (src, 1)) == CONST_INT);
2113
2114           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2115             cfa_temp.reg = REGNO (dest);
2116           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2117           break;
2118
2119           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2120              which will fill in all of the bits.  */
2121           /* Rule 8 */
2122         case HIGH:
2123           break;
2124
2125           /* Rule 15 */
2126         case UNSPEC:
2127         case UNSPEC_VOLATILE:
2128           gcc_assert (targetm.dwarf_handle_frame_unspec);
2129           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2130           return;
2131
2132           /* Rule 16 */
2133         case AND:
2134           /* If this AND operation happens on stack pointer in prologue,
2135              we assume the stack is realigned and we extract the
2136              alignment.  */
2137           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2138             {
2139               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2140               fde->stack_realign = 1;
2141               fde->stack_realignment = INTVAL (XEXP (src, 1));
2142               cfa_store.offset = 0;
2143
2144               if (cfa.reg != STACK_POINTER_REGNUM
2145                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2146                 fde->drap_reg = cfa.reg;
2147             }
2148           return;
2149
2150         default:
2151           gcc_unreachable ();
2152         }
2153
2154       def_cfa_1 (label, &cfa);
2155       break;
2156
2157     case MEM:
2158
2159       /* Saving a register to the stack.  Make sure dest is relative to the
2160          CFA register.  */
2161       switch (GET_CODE (XEXP (dest, 0)))
2162         {
2163           /* Rule 10 */
2164           /* With a push.  */
2165         case PRE_MODIFY:
2166           /* We can't handle variable size modifications.  */
2167           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2168                       == CONST_INT);
2169           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2170
2171           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2172                       && cfa_store.reg == STACK_POINTER_REGNUM);
2173
2174           cfa_store.offset += offset;
2175           if (cfa.reg == STACK_POINTER_REGNUM)
2176             cfa.offset = cfa_store.offset;
2177
2178           offset = -cfa_store.offset;
2179           break;
2180
2181           /* Rule 11 */
2182         case PRE_INC:
2183         case PRE_DEC:
2184           offset = GET_MODE_SIZE (GET_MODE (dest));
2185           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2186             offset = -offset;
2187
2188           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2189                        == STACK_POINTER_REGNUM)
2190                       && cfa_store.reg == STACK_POINTER_REGNUM);
2191
2192           cfa_store.offset += offset;
2193
2194           /* Rule 18: If stack is aligned, we will use FP as a
2195              reference to represent the address of the stored
2196              regiser.  */
2197           if (fde
2198               && fde->stack_realign
2199               && src == hard_frame_pointer_rtx)
2200             {
2201               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2202               cfa_store.offset = 0;
2203             }
2204
2205           if (cfa.reg == STACK_POINTER_REGNUM)
2206             cfa.offset = cfa_store.offset;
2207
2208           offset = -cfa_store.offset;
2209           break;
2210
2211           /* Rule 12 */
2212           /* With an offset.  */
2213         case PLUS:
2214         case MINUS:
2215         case LO_SUM:
2216           {
2217             int regno;
2218
2219             gcc_assert (GET_CODE (XEXP (XEXP (dest, 0), 1)) == CONST_INT
2220                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2221             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2222             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2223               offset = -offset;
2224
2225             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2226
2227             if (cfa_store.reg == (unsigned) regno)
2228               offset -= cfa_store.offset;
2229             else
2230               {
2231                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2232                 offset -= cfa_temp.offset;
2233               }
2234           }
2235           break;
2236
2237           /* Rule 13 */
2238           /* Without an offset.  */
2239         case REG:
2240           {
2241             int regno = REGNO (XEXP (dest, 0));
2242
2243             if (cfa_store.reg == (unsigned) regno)
2244               offset = -cfa_store.offset;
2245             else
2246               {
2247                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2248                 offset = -cfa_temp.offset;
2249               }
2250           }
2251           break;
2252
2253           /* Rule 14 */
2254         case POST_INC:
2255           gcc_assert (cfa_temp.reg
2256                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2257           offset = -cfa_temp.offset;
2258           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2259           break;
2260
2261         default:
2262           gcc_unreachable ();
2263         }
2264
2265         /* Rule 17 */
2266         /* If the source operand of this MEM operation is not a
2267            register, basically the source is return address.  Here
2268            we only care how much stack grew and we don't save it.  */
2269       if (!REG_P (src))
2270         break;
2271
2272       if (REGNO (src) != STACK_POINTER_REGNUM
2273           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2274           && (unsigned) REGNO (src) == cfa.reg)
2275         {
2276           /* We're storing the current CFA reg into the stack.  */
2277
2278           if (cfa.offset == 0)
2279             {
2280               /* Rule 19 */
2281               /* If stack is aligned, putting CFA reg into stack means
2282                  we can no longer use reg + offset to represent CFA.
2283                  Here we use DW_CFA_def_cfa_expression instead.  The
2284                  result of this expression equals to the original CFA
2285                  value.  */
2286               if (fde
2287                   && fde->stack_realign
2288                   && cfa.indirect == 0
2289                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2290                 {
2291                   dw_cfa_location cfa_exp;
2292
2293                   gcc_assert (fde->drap_reg == cfa.reg);
2294
2295                   cfa_exp.indirect = 1;
2296                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2297                   cfa_exp.base_offset = offset;
2298                   cfa_exp.offset = 0;
2299
2300                   fde->drap_reg_saved = 1;
2301
2302                   def_cfa_1 (label, &cfa_exp);
2303                   break;
2304                 }
2305
2306               /* If the source register is exactly the CFA, assume
2307                  we're saving SP like any other register; this happens
2308                  on the ARM.  */
2309               def_cfa_1 (label, &cfa);
2310               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2311               break;
2312             }
2313           else
2314             {
2315               /* Otherwise, we'll need to look in the stack to
2316                  calculate the CFA.  */
2317               rtx x = XEXP (dest, 0);
2318
2319               if (!REG_P (x))
2320                 x = XEXP (x, 0);
2321               gcc_assert (REG_P (x));
2322
2323               cfa.reg = REGNO (x);
2324               cfa.base_offset = offset;
2325               cfa.indirect = 1;
2326               def_cfa_1 (label, &cfa);
2327               break;
2328             }
2329         }
2330
2331       def_cfa_1 (label, &cfa);
2332       {
2333         span = targetm.dwarf_register_span (src);
2334
2335         if (!span)
2336           queue_reg_save (label, src, NULL_RTX, offset);
2337         else
2338           {
2339             /* We have a PARALLEL describing where the contents of SRC
2340                live.  Queue register saves for each piece of the
2341                PARALLEL.  */
2342             int par_index;
2343             int limit;
2344             HOST_WIDE_INT span_offset = offset;
2345
2346             gcc_assert (GET_CODE (span) == PARALLEL);
2347
2348             limit = XVECLEN (span, 0);
2349             for (par_index = 0; par_index < limit; par_index++)
2350               {
2351                 rtx elem = XVECEXP (span, 0, par_index);
2352
2353                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2354                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2355               }
2356           }
2357       }
2358       break;
2359
2360     default:
2361       gcc_unreachable ();
2362     }
2363 }
2364
2365 /* Record call frame debugging information for INSN, which either
2366    sets SP or FP (adjusting how we calculate the frame address) or saves a
2367    register to the stack.  If INSN is NULL_RTX, initialize our state.
2368
2369    If AFTER_P is false, we're being called before the insn is emitted,
2370    otherwise after.  Call instructions get invoked twice.  */
2371
2372 void
2373 dwarf2out_frame_debug (rtx insn, bool after_p)
2374 {
2375   const char *label;
2376   rtx src;
2377
2378   if (insn == NULL_RTX)
2379     {
2380       size_t i;
2381
2382       /* Flush any queued register saves.  */
2383       flush_queued_reg_saves ();
2384
2385       /* Set up state for generating call frame debug info.  */
2386       lookup_cfa (&cfa);
2387       gcc_assert (cfa.reg
2388                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2389
2390       cfa.reg = STACK_POINTER_REGNUM;
2391       cfa_store = cfa;
2392       cfa_temp.reg = -1;
2393       cfa_temp.offset = 0;
2394
2395       for (i = 0; i < num_regs_saved_in_regs; i++)
2396         {
2397           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2398           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2399         }
2400       num_regs_saved_in_regs = 0;
2401
2402       if (barrier_args_size)
2403         {
2404           XDELETEVEC (barrier_args_size);
2405           barrier_args_size = NULL;
2406         }
2407       return;
2408     }
2409
2410   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2411     flush_queued_reg_saves ();
2412
2413   if (! RTX_FRAME_RELATED_P (insn))
2414     {
2415       if (!ACCUMULATE_OUTGOING_ARGS)
2416         dwarf2out_stack_adjust (insn, after_p);
2417       return;
2418     }
2419
2420   label = dwarf2out_cfi_label ();
2421   src = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
2422   if (src)
2423     insn = XEXP (src, 0);
2424   else
2425     insn = PATTERN (insn);
2426
2427   dwarf2out_frame_debug_expr (insn, label);
2428 }
2429
2430 #endif
2431
2432 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2433 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2434  (enum dwarf_call_frame_info cfi);
2435
2436 static enum dw_cfi_oprnd_type
2437 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2438 {
2439   switch (cfi)
2440     {
2441     case DW_CFA_nop:
2442     case DW_CFA_GNU_window_save:
2443       return dw_cfi_oprnd_unused;
2444
2445     case DW_CFA_set_loc:
2446     case DW_CFA_advance_loc1:
2447     case DW_CFA_advance_loc2:
2448     case DW_CFA_advance_loc4:
2449     case DW_CFA_MIPS_advance_loc8:
2450       return dw_cfi_oprnd_addr;
2451
2452     case DW_CFA_offset:
2453     case DW_CFA_offset_extended:
2454     case DW_CFA_def_cfa:
2455     case DW_CFA_offset_extended_sf:
2456     case DW_CFA_def_cfa_sf:
2457     case DW_CFA_restore_extended:
2458     case DW_CFA_undefined:
2459     case DW_CFA_same_value:
2460     case DW_CFA_def_cfa_register:
2461     case DW_CFA_register:
2462       return dw_cfi_oprnd_reg_num;
2463
2464     case DW_CFA_def_cfa_offset:
2465     case DW_CFA_GNU_args_size:
2466     case DW_CFA_def_cfa_offset_sf:
2467       return dw_cfi_oprnd_offset;
2468
2469     case DW_CFA_def_cfa_expression:
2470     case DW_CFA_expression:
2471       return dw_cfi_oprnd_loc;
2472
2473     default:
2474       gcc_unreachable ();
2475     }
2476 }
2477
2478 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2479 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2480  (enum dwarf_call_frame_info cfi);
2481
2482 static enum dw_cfi_oprnd_type
2483 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2484 {
2485   switch (cfi)
2486     {
2487     case DW_CFA_def_cfa:
2488     case DW_CFA_def_cfa_sf:
2489     case DW_CFA_offset:
2490     case DW_CFA_offset_extended_sf:
2491     case DW_CFA_offset_extended:
2492       return dw_cfi_oprnd_offset;
2493
2494     case DW_CFA_register:
2495       return dw_cfi_oprnd_reg_num;
2496
2497     default:
2498       return dw_cfi_oprnd_unused;
2499     }
2500 }
2501
2502 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2503
2504 /* Switch to eh_frame_section.  If we don't have an eh_frame_section,
2505    switch to the data section instead, and write out a synthetic label
2506    for collect2.  */
2507
2508 static void
2509 switch_to_eh_frame_section (void)
2510 {
2511   tree label;
2512
2513 #ifdef EH_FRAME_SECTION_NAME
2514   if (eh_frame_section == 0)
2515     {
2516       int flags;
2517
2518       if (EH_TABLES_CAN_BE_READ_ONLY)
2519         {
2520           int fde_encoding;
2521           int per_encoding;
2522           int lsda_encoding;
2523
2524           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2525                                                        /*global=*/0);
2526           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2527                                                        /*global=*/1);
2528           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2529                                                         /*global=*/0);
2530           flags = ((! flag_pic
2531                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2532                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2533                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2534                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2535                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2536                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2537                    ? 0 : SECTION_WRITE);
2538         }
2539       else
2540         flags = SECTION_WRITE;
2541       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2542     }
2543 #endif
2544
2545   if (eh_frame_section)
2546     switch_to_section (eh_frame_section);
2547   else
2548     {
2549       /* We have no special eh_frame section.  Put the information in
2550          the data section and emit special labels to guide collect2.  */
2551       switch_to_section (data_section);
2552       label = get_file_function_name ("F");
2553       ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
2554       targetm.asm_out.globalize_label (asm_out_file,
2555                                        IDENTIFIER_POINTER (label));
2556       ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
2557     }
2558 }
2559
2560 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
2561
2562 static HOST_WIDE_INT
2563 div_data_align (HOST_WIDE_INT off)
2564 {
2565   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
2566   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
2567   return r;
2568 }
2569
2570 /* Output a Call Frame Information opcode and its operand(s).  */
2571
2572 static void
2573 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
2574 {
2575   unsigned long r;
2576   HOST_WIDE_INT off;
2577
2578   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
2579     dw2_asm_output_data (1, (cfi->dw_cfi_opc
2580                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
2581                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
2582                          ((unsigned HOST_WIDE_INT)
2583                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
2584   else if (cfi->dw_cfi_opc == DW_CFA_offset)
2585     {
2586       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2587       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2588                            "DW_CFA_offset, column 0x%lx", r);
2589       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
2590       dw2_asm_output_data_uleb128 (off, NULL);
2591     }
2592   else if (cfi->dw_cfi_opc == DW_CFA_restore)
2593     {
2594       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2595       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
2596                            "DW_CFA_restore, column 0x%lx", r);
2597     }
2598   else
2599     {
2600       dw2_asm_output_data (1, cfi->dw_cfi_opc,
2601                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
2602
2603       switch (cfi->dw_cfi_opc)
2604         {
2605         case DW_CFA_set_loc:
2606           if (for_eh)
2607             dw2_asm_output_encoded_addr_rtx (
2608                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
2609                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
2610                 false, NULL);
2611           else
2612             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
2613                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
2614           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2615           break;
2616
2617         case DW_CFA_advance_loc1:
2618           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2619                                 fde->dw_fde_current_label, NULL);
2620           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2621           break;
2622
2623         case DW_CFA_advance_loc2:
2624           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2625                                 fde->dw_fde_current_label, NULL);
2626           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2627           break;
2628
2629         case DW_CFA_advance_loc4:
2630           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2631                                 fde->dw_fde_current_label, NULL);
2632           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2633           break;
2634
2635         case DW_CFA_MIPS_advance_loc8:
2636           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
2637                                 fde->dw_fde_current_label, NULL);
2638           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
2639           break;
2640
2641         case DW_CFA_offset_extended:
2642           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2643           dw2_asm_output_data_uleb128 (r, NULL);
2644           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
2645           dw2_asm_output_data_uleb128 (off, NULL);
2646           break;
2647
2648         case DW_CFA_def_cfa:
2649           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2650           dw2_asm_output_data_uleb128 (r, NULL);
2651           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
2652           break;
2653
2654         case DW_CFA_offset_extended_sf:
2655           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2656           dw2_asm_output_data_uleb128 (r, NULL);
2657           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
2658           dw2_asm_output_data_sleb128 (off, NULL);
2659           break;
2660
2661         case DW_CFA_def_cfa_sf:
2662           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2663           dw2_asm_output_data_uleb128 (r, NULL);
2664           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
2665           dw2_asm_output_data_sleb128 (off, NULL);
2666           break;
2667
2668         case DW_CFA_restore_extended:
2669         case DW_CFA_undefined:
2670         case DW_CFA_same_value:
2671         case DW_CFA_def_cfa_register:
2672           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2673           dw2_asm_output_data_uleb128 (r, NULL);
2674           break;
2675
2676         case DW_CFA_register:
2677           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
2678           dw2_asm_output_data_uleb128 (r, NULL);
2679           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
2680           dw2_asm_output_data_uleb128 (r, NULL);
2681           break;
2682
2683         case DW_CFA_def_cfa_offset:
2684         case DW_CFA_GNU_args_size:
2685           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
2686           break;
2687
2688         case DW_CFA_def_cfa_offset_sf:
2689           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
2690           dw2_asm_output_data_sleb128 (off, NULL);
2691           break;
2692
2693         case DW_CFA_GNU_window_save:
2694           break;
2695
2696         case DW_CFA_def_cfa_expression:
2697         case DW_CFA_expression:
2698           output_cfa_loc (cfi);
2699           break;
2700
2701         case DW_CFA_GNU_negative_offset_extended:
2702           /* Obsoleted by DW_CFA_offset_extended_sf.  */
2703           gcc_unreachable ();
2704
2705         default:
2706           break;
2707         }
2708     }
2709 }
2710
2711 /* Similar, but do it via assembler directives instead.  */
2712
2713 static void
2714 output_cfi_directive (dw_cfi_ref cfi)
2715 {
2716   unsigned long r, r2;
2717
2718   switch (cfi->dw_cfi_opc)
2719     {
2720     case DW_CFA_advance_loc:
2721     case DW_CFA_advance_loc1:
2722     case DW_CFA_advance_loc2:
2723     case DW_CFA_advance_loc4:
2724     case DW_CFA_MIPS_advance_loc8:
2725     case DW_CFA_set_loc:
2726       /* Should only be created by add_fde_cfi in a code path not
2727          followed when emitting via directives.  The assembler is
2728          going to take care of this for us.  */
2729       gcc_unreachable ();
2730
2731     case DW_CFA_offset:
2732     case DW_CFA_offset_extended:
2733     case DW_CFA_offset_extended_sf:
2734       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2735       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
2736                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
2737       break;
2738
2739     case DW_CFA_restore:
2740     case DW_CFA_restore_extended:
2741       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2742       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
2743       break;
2744
2745     case DW_CFA_undefined:
2746       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2747       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
2748       break;
2749
2750     case DW_CFA_same_value:
2751       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2752       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
2753       break;
2754
2755     case DW_CFA_def_cfa:
2756     case DW_CFA_def_cfa_sf:
2757       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2758       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
2759                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
2760       break;
2761
2762     case DW_CFA_def_cfa_register:
2763       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2764       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
2765       break;
2766
2767     case DW_CFA_register:
2768       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 0);
2769       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 0);
2770       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
2771       break;
2772
2773     case DW_CFA_def_cfa_offset:
2774     case DW_CFA_def_cfa_offset_sf:
2775       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
2776                HOST_WIDE_INT_PRINT_DEC"\n",
2777                cfi->dw_cfi_oprnd1.dw_cfi_offset);
2778       break;
2779
2780     case DW_CFA_GNU_args_size:
2781       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size);
2782       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
2783       if (flag_debug_asm)
2784         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
2785                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
2786       fputc ('\n', asm_out_file);
2787       break;
2788
2789     case DW_CFA_GNU_window_save:
2790       fprintf (asm_out_file, "\t.cfi_window_save\n");
2791       break;
2792
2793     case DW_CFA_def_cfa_expression:
2794     case DW_CFA_expression:
2795       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", cfi->dw_cfi_opc);
2796       output_cfa_loc_raw (cfi);
2797       fputc ('\n', asm_out_file);
2798       break;
2799
2800     default:
2801       gcc_unreachable ();
2802     }
2803 }
2804
2805 /* Output the call frame information used to record information
2806    that relates to calculating the frame pointer, and records the
2807    location of saved registers.  */
2808
2809 static void
2810 output_call_frame_info (int for_eh)
2811 {
2812   unsigned int i;
2813   dw_fde_ref fde;
2814   dw_cfi_ref cfi;
2815   char l1[20], l2[20], section_start_label[20];
2816   bool any_lsda_needed = false;
2817   char augmentation[6];
2818   int augmentation_size;
2819   int fde_encoding = DW_EH_PE_absptr;
2820   int per_encoding = DW_EH_PE_absptr;
2821   int lsda_encoding = DW_EH_PE_absptr;
2822   int return_reg;
2823
2824   /* Don't emit a CIE if there won't be any FDEs.  */
2825   if (fde_table_in_use == 0)
2826     return;
2827
2828   /* Nothing to do if the assembler's doing it all.  */
2829   if (dwarf2out_do_cfi_asm ())
2830     return;
2831
2832   /* If we make FDEs linkonce, we may have to emit an empty label for
2833      an FDE that wouldn't otherwise be emitted.  We want to avoid
2834      having an FDE kept around when the function it refers to is
2835      discarded.  Example where this matters: a primary function
2836      template in C++ requires EH information, but an explicit
2837      specialization doesn't.  */
2838   if (TARGET_USES_WEAK_UNWIND_INFO
2839       && ! flag_asynchronous_unwind_tables
2840       && flag_exceptions
2841       && for_eh)
2842     for (i = 0; i < fde_table_in_use; i++)
2843       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
2844           && !fde_table[i].uses_eh_lsda
2845           && ! DECL_WEAK (fde_table[i].decl))
2846         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
2847                                       for_eh, /* empty */ 1);
2848
2849   /* If we don't have any functions we'll want to unwind out of, don't
2850      emit any EH unwind information.  Note that if exceptions aren't
2851      enabled, we won't have collected nothrow information, and if we
2852      asked for asynchronous tables, we always want this info.  */
2853   if (for_eh)
2854     {
2855       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
2856
2857       for (i = 0; i < fde_table_in_use; i++)
2858         if (fde_table[i].uses_eh_lsda)
2859           any_eh_needed = any_lsda_needed = true;
2860         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
2861           any_eh_needed = true;
2862         else if (! fde_table[i].nothrow
2863                  && ! fde_table[i].all_throwers_are_sibcalls)
2864           any_eh_needed = true;
2865
2866       if (! any_eh_needed)
2867         return;
2868     }
2869
2870   /* We're going to be generating comments, so turn on app.  */
2871   if (flag_debug_asm)
2872     app_enable ();
2873
2874   if (for_eh)
2875     switch_to_eh_frame_section ();
2876   else
2877     {
2878       if (!debug_frame_section)
2879         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
2880                                            SECTION_DEBUG, NULL);
2881       switch_to_section (debug_frame_section);
2882     }
2883
2884   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
2885   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
2886
2887   /* Output the CIE.  */
2888   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
2889   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
2890   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
2891     dw2_asm_output_data (4, 0xffffffff,
2892       "Initial length escape value indicating 64-bit DWARF extension");
2893   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
2894                         "Length of Common Information Entry");
2895   ASM_OUTPUT_LABEL (asm_out_file, l1);
2896
2897   /* Now that the CIE pointer is PC-relative for EH,
2898      use 0 to identify the CIE.  */
2899   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
2900                        (for_eh ? 0 : DWARF_CIE_ID),
2901                        "CIE Identifier Tag");
2902
2903   dw2_asm_output_data (1, DW_CIE_VERSION, "CIE Version");
2904
2905   augmentation[0] = 0;
2906   augmentation_size = 0;
2907   if (for_eh)
2908     {
2909       char *p;
2910
2911       /* Augmentation:
2912          z      Indicates that a uleb128 is present to size the
2913                 augmentation section.
2914          L      Indicates the encoding (and thus presence) of
2915                 an LSDA pointer in the FDE augmentation.
2916          R      Indicates a non-default pointer encoding for
2917                 FDE code pointers.
2918          P      Indicates the presence of an encoding + language
2919                 personality routine in the CIE augmentation.  */
2920
2921       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
2922       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
2923       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
2924
2925       p = augmentation + 1;
2926       if (eh_personality_libfunc)
2927         {
2928           *p++ = 'P';
2929           augmentation_size += 1 + size_of_encoded_value (per_encoding);
2930           assemble_external_libcall (eh_personality_libfunc);
2931         }
2932       if (any_lsda_needed)
2933         {
2934           *p++ = 'L';
2935           augmentation_size += 1;
2936         }
2937       if (fde_encoding != DW_EH_PE_absptr)
2938         {
2939           *p++ = 'R';
2940           augmentation_size += 1;
2941         }
2942       if (p > augmentation + 1)
2943         {
2944           augmentation[0] = 'z';
2945           *p = '\0';
2946         }
2947
2948       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
2949       if (eh_personality_libfunc && per_encoding == DW_EH_PE_aligned)
2950         {
2951           int offset = (  4             /* Length */
2952                         + 4             /* CIE Id */
2953                         + 1             /* CIE version */
2954                         + strlen (augmentation) + 1     /* Augmentation */
2955                         + size_of_uleb128 (1)           /* Code alignment */
2956                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
2957                         + 1             /* RA column */
2958                         + 1             /* Augmentation size */
2959                         + 1             /* Personality encoding */ );
2960           int pad = -offset & (PTR_SIZE - 1);
2961
2962           augmentation_size += pad;
2963
2964           /* Augmentations should be small, so there's scarce need to
2965              iterate for a solution.  Die if we exceed one uleb128 byte.  */
2966           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
2967         }
2968     }
2969
2970   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
2971   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
2972   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
2973                                "CIE Data Alignment Factor");
2974
2975   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
2976   if (DW_CIE_VERSION == 1)
2977     dw2_asm_output_data (1, return_reg, "CIE RA Column");
2978   else
2979     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
2980
2981   if (augmentation[0])
2982     {
2983       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
2984       if (eh_personality_libfunc)
2985         {
2986           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
2987                                eh_data_format_name (per_encoding));
2988           dw2_asm_output_encoded_addr_rtx (per_encoding,
2989                                            eh_personality_libfunc,
2990                                            true, NULL);
2991         }
2992
2993       if (any_lsda_needed)
2994         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
2995                              eh_data_format_name (lsda_encoding));
2996
2997       if (fde_encoding != DW_EH_PE_absptr)
2998         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
2999                              eh_data_format_name (fde_encoding));
3000     }
3001
3002   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3003     output_cfi (cfi, NULL, for_eh);
3004
3005   /* Pad the CIE out to an address sized boundary.  */
3006   ASM_OUTPUT_ALIGN (asm_out_file,
3007                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3008   ASM_OUTPUT_LABEL (asm_out_file, l2);
3009
3010   /* Loop through all of the FDE's.  */
3011   for (i = 0; i < fde_table_in_use; i++)
3012     {
3013       fde = &fde_table[i];
3014
3015       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3016       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3017           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3018           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3019           && !fde->uses_eh_lsda)
3020         continue;
3021
3022       targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh, /* empty */ 0);
3023       targetm.asm_out.internal_label (asm_out_file, FDE_LABEL, for_eh + i * 2);
3024       ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + i * 2);
3025       ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + i * 2);
3026       if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3027         dw2_asm_output_data (4, 0xffffffff,
3028                              "Initial length escape value indicating 64-bit DWARF extension");
3029       dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3030                             "FDE Length");
3031       ASM_OUTPUT_LABEL (asm_out_file, l1);
3032
3033       if (for_eh)
3034         dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3035       else
3036         dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3037                                debug_frame_section, "FDE CIE offset");
3038
3039       if (for_eh)
3040         {
3041           if (fde->dw_fde_switched_sections)
3042             {
3043               rtx sym_ref2 = gen_rtx_SYMBOL_REF (Pmode,
3044                                       fde->dw_fde_unlikely_section_label);
3045               rtx sym_ref3= gen_rtx_SYMBOL_REF (Pmode,
3046                                       fde->dw_fde_hot_section_label);
3047               SYMBOL_REF_FLAGS (sym_ref2) |= SYMBOL_FLAG_LOCAL;
3048               SYMBOL_REF_FLAGS (sym_ref3) |= SYMBOL_FLAG_LOCAL;
3049               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref3, false,
3050                                                "FDE initial location");
3051               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3052                                     fde->dw_fde_hot_section_end_label,
3053                                     fde->dw_fde_hot_section_label,
3054                                     "FDE address range");
3055               dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref2, false,
3056                                                "FDE initial location");
3057               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3058                                     fde->dw_fde_unlikely_section_end_label,
3059                                     fde->dw_fde_unlikely_section_label,
3060                                     "FDE address range");
3061             }
3062           else
3063             {
3064               rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, fde->dw_fde_begin);
3065               SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3066               dw2_asm_output_encoded_addr_rtx (fde_encoding,
3067                                                sym_ref,
3068                                                false,
3069                                                "FDE initial location");
3070               dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3071                                     fde->dw_fde_end, fde->dw_fde_begin,
3072                                     "FDE address range");
3073             }
3074         }
3075       else
3076         {
3077           if (fde->dw_fde_switched_sections)
3078             {
3079               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3080                                    fde->dw_fde_hot_section_label,
3081                                    "FDE initial location");
3082               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
3083                                     fde->dw_fde_hot_section_end_label,
3084                                     fde->dw_fde_hot_section_label,
3085                                     "FDE address range");
3086               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3087                                    fde->dw_fde_unlikely_section_label,
3088                                    "FDE initial location");
3089               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
3090                                     fde->dw_fde_unlikely_section_end_label,
3091                                     fde->dw_fde_unlikely_section_label,
3092                                     "FDE address range");
3093             }
3094           else
3095             {
3096               dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
3097                                    "FDE initial location");
3098               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
3099                                     fde->dw_fde_end, fde->dw_fde_begin,
3100                                     "FDE address range");
3101             }
3102         }
3103
3104       if (augmentation[0])
3105         {
3106           if (any_lsda_needed)
3107             {
3108               int size = size_of_encoded_value (lsda_encoding);
3109
3110               if (lsda_encoding == DW_EH_PE_aligned)
3111                 {
3112                   int offset = (  4             /* Length */
3113                                 + 4             /* CIE offset */
3114                                 + 2 * size_of_encoded_value (fde_encoding)
3115                                 + 1             /* Augmentation size */ );
3116                   int pad = -offset & (PTR_SIZE - 1);
3117
3118                   size += pad;
3119                   gcc_assert (size_of_uleb128 (size) == 1);
3120                 }
3121
3122               dw2_asm_output_data_uleb128 (size, "Augmentation size");
3123
3124               if (fde->uses_eh_lsda)
3125                 {
3126                   ASM_GENERATE_INTERNAL_LABEL (l1, "LLSDA",
3127                                                fde->funcdef_number);
3128                   dw2_asm_output_encoded_addr_rtx (
3129                         lsda_encoding, gen_rtx_SYMBOL_REF (Pmode, l1),
3130                         false, "Language Specific Data Area");
3131                 }
3132               else
3133                 {
3134                   if (lsda_encoding == DW_EH_PE_aligned)
3135                     ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3136                   dw2_asm_output_data
3137                     (size_of_encoded_value (lsda_encoding), 0,
3138                      "Language Specific Data Area (none)");
3139                 }
3140             }
3141           else
3142             dw2_asm_output_data_uleb128 (0, "Augmentation size");
3143         }
3144
3145       /* Loop through the Call Frame Instructions associated with
3146          this FDE.  */
3147       fde->dw_fde_current_label = fde->dw_fde_begin;
3148       for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3149         output_cfi (cfi, fde, for_eh);
3150
3151       /* Pad the FDE out to an address sized boundary.  */
3152       ASM_OUTPUT_ALIGN (asm_out_file,
3153                         floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3154       ASM_OUTPUT_LABEL (asm_out_file, l2);
3155     }
3156
3157   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3158     dw2_asm_output_data (4, 0, "End of Table");
3159 #ifdef MIPS_DEBUGGING_INFO
3160   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3161      get a value of 0.  Putting .align 0 after the label fixes it.  */
3162   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3163 #endif
3164
3165   /* Turn off app to make assembly quicker.  */
3166   if (flag_debug_asm)
3167     app_disable ();
3168 }
3169
3170 /* Output a marker (i.e. a label) for the beginning of a function, before
3171    the prologue.  */
3172
3173 void
3174 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3175                           const char *file ATTRIBUTE_UNUSED)
3176 {
3177   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3178   char * dup_label;
3179   dw_fde_ref fde;
3180
3181   current_function_func_begin_label = NULL;
3182
3183 #ifdef TARGET_UNWIND_INFO
3184   /* ??? current_function_func_begin_label is also used by except.c
3185      for call-site information.  We must emit this label if it might
3186      be used.  */
3187   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3188       && ! dwarf2out_do_frame ())
3189     return;
3190 #else
3191   if (! dwarf2out_do_frame ())
3192     return;
3193 #endif
3194
3195   switch_to_section (function_section (current_function_decl));
3196   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3197                                current_function_funcdef_no);
3198   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3199                           current_function_funcdef_no);
3200   dup_label = xstrdup (label);
3201   current_function_func_begin_label = dup_label;
3202
3203 #ifdef TARGET_UNWIND_INFO
3204   /* We can elide the fde allocation if we're not emitting debug info.  */
3205   if (! dwarf2out_do_frame ())
3206     return;
3207 #endif
3208
3209   /* Expand the fde table if necessary.  */
3210   if (fde_table_in_use == fde_table_allocated)
3211     {
3212       fde_table_allocated += FDE_TABLE_INCREMENT;
3213       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3214       memset (fde_table + fde_table_in_use, 0,
3215               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3216     }
3217
3218   /* Record the FDE associated with this function.  */
3219   current_funcdef_fde = fde_table_in_use;
3220
3221   /* Add the new FDE at the end of the fde_table.  */
3222   fde = &fde_table[fde_table_in_use++];
3223   fde->decl = current_function_decl;
3224   fde->dw_fde_begin = dup_label;
3225   fde->dw_fde_current_label = dup_label;
3226   fde->dw_fde_hot_section_label = NULL;
3227   fde->dw_fde_hot_section_end_label = NULL;
3228   fde->dw_fde_unlikely_section_label = NULL;
3229   fde->dw_fde_unlikely_section_end_label = NULL;
3230   fde->dw_fde_switched_sections = false;
3231   fde->dw_fde_end = NULL;
3232   fde->dw_fde_cfi = NULL;
3233   fde->funcdef_number = current_function_funcdef_no;
3234   fde->nothrow = TREE_NOTHROW (current_function_decl);
3235   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3236   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3237   fde->drap_reg = INVALID_REGNUM;
3238   fde->vdrap_reg = INVALID_REGNUM;
3239
3240   args_size = old_args_size = 0;
3241
3242   /* We only want to output line number information for the genuine dwarf2
3243      prologue case, not the eh frame case.  */
3244 #ifdef DWARF2_DEBUGGING_INFO
3245   if (file)
3246     dwarf2out_source_line (line, file);
3247 #endif
3248
3249   if (dwarf2out_do_cfi_asm ())
3250     {
3251       int enc;
3252       rtx ref;
3253
3254       fprintf (asm_out_file, "\t.cfi_startproc\n");
3255
3256       if (eh_personality_libfunc)
3257         {
3258           enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1); 
3259           ref = eh_personality_libfunc;
3260
3261           /* ??? The GAS support isn't entirely consistent.  We have to
3262              handle indirect support ourselves, but PC-relative is done
3263              in the assembler.  Further, the assembler can't handle any
3264              of the weirder relocation types.  */
3265           if (enc & DW_EH_PE_indirect)
3266             ref = dw2_force_const_mem (ref, true);
3267
3268           fprintf (asm_out_file, "\t.cfi_personality 0x%x,", enc);
3269           output_addr_const (asm_out_file, ref);
3270           fputc ('\n', asm_out_file);
3271         }
3272
3273       if (crtl->uses_eh_lsda)
3274         {
3275           char lab[20];
3276
3277           enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3278           ASM_GENERATE_INTERNAL_LABEL (lab, "LLSDA",
3279                                        current_function_funcdef_no);
3280           ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3281           SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3282
3283           if (enc & DW_EH_PE_indirect)
3284             ref = dw2_force_const_mem (ref, true);
3285
3286           fprintf (asm_out_file, "\t.cfi_lsda 0x%x,", enc);
3287           output_addr_const (asm_out_file, ref);
3288           fputc ('\n', asm_out_file);
3289         }
3290     }
3291 }
3292
3293 /* Output a marker (i.e. a label) for the absolute end of the generated code
3294    for a function definition.  This gets called *after* the epilogue code has
3295    been generated.  */
3296
3297 void
3298 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
3299                         const char *file ATTRIBUTE_UNUSED)
3300 {
3301   dw_fde_ref fde;
3302   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3303
3304   if (dwarf2out_do_cfi_asm ())
3305     fprintf (asm_out_file, "\t.cfi_endproc\n");
3306
3307   /* Output a label to mark the endpoint of the code generated for this
3308      function.  */
3309   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
3310                                current_function_funcdef_no);
3311   ASM_OUTPUT_LABEL (asm_out_file, label);
3312   fde = current_fde ();
3313   gcc_assert (fde != NULL);
3314   fde->dw_fde_end = xstrdup (label);
3315 }
3316
3317 void
3318 dwarf2out_frame_init (void)
3319 {
3320   /* Allocate the initial hunk of the fde_table.  */
3321   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
3322   fde_table_allocated = FDE_TABLE_INCREMENT;
3323   fde_table_in_use = 0;
3324
3325   /* Generate the CFA instructions common to all FDE's.  Do it now for the
3326      sake of lookup_cfa.  */
3327
3328   /* On entry, the Canonical Frame Address is at SP.  */
3329   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
3330
3331 #ifdef DWARF2_UNWIND_INFO
3332   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
3333     initial_return_save (INCOMING_RETURN_ADDR_RTX);
3334 #endif
3335 }
3336
3337 void
3338 dwarf2out_frame_finish (void)
3339 {
3340   /* Output call frame information.  */
3341   if (DWARF2_FRAME_INFO)
3342     output_call_frame_info (0);
3343
3344 #ifndef TARGET_UNWIND_INFO
3345   /* Output another copy for the unwinder.  */
3346   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
3347     output_call_frame_info (1);
3348 #endif
3349 }
3350
3351 /* Note that the current function section is being used for code.  */
3352
3353 static void
3354 dwarf2out_note_section_used (void)
3355 {
3356   section *sec = current_function_section ();
3357   if (sec == text_section)
3358     text_section_used = true;
3359   else if (sec == cold_text_section)
3360     cold_text_section_used = true;
3361 }
3362
3363 void
3364 dwarf2out_switch_text_section (void)
3365 {
3366   dw_fde_ref fde = current_fde ();
3367
3368   gcc_assert (cfun && fde);
3369
3370   fde->dw_fde_switched_sections = true;
3371   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
3372   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
3373   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
3374   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
3375   have_multiple_function_sections = true;
3376
3377   /* Reset the current label on switching text sections, so that we
3378      don't attempt to advance_loc4 between labels in different sections.  */
3379   fde->dw_fde_current_label = NULL;
3380
3381   /* There is no need to mark used sections when not debugging.  */
3382   if (cold_text_section != NULL)
3383     dwarf2out_note_section_used ();
3384 }
3385 #endif
3386 \f
3387 /* And now, the subset of the debugging information support code necessary
3388    for emitting location expressions.  */
3389
3390 /* Data about a single source file.  */
3391 struct dwarf_file_data GTY(())
3392 {
3393   const char * filename;
3394   int emitted_number;
3395 };
3396
3397 /* We need some way to distinguish DW_OP_addr with a direct symbol
3398    relocation from DW_OP_addr with a dtp-relative symbol relocation.  */
3399 #define INTERNAL_DW_OP_tls_addr         (0x100 + DW_OP_addr)
3400
3401
3402 typedef struct dw_val_struct *dw_val_ref;
3403 typedef struct die_struct *dw_die_ref;
3404 typedef const struct die_struct *const_dw_die_ref;
3405 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
3406 typedef struct dw_loc_list_struct *dw_loc_list_ref;
3407
3408 typedef struct deferred_locations_struct GTY(()) 
3409 {
3410   tree variable;
3411   dw_die_ref die;
3412 } deferred_locations;
3413
3414 DEF_VEC_O(deferred_locations);
3415 DEF_VEC_ALLOC_O(deferred_locations,gc);
3416
3417 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
3418
3419 /* Each DIE may have a series of attribute/value pairs.  Values
3420    can take on several forms.  The forms that are used in this
3421    implementation are listed below.  */
3422
3423 enum dw_val_class
3424 {
3425   dw_val_class_addr,
3426   dw_val_class_offset,
3427   dw_val_class_loc,
3428   dw_val_class_loc_list,
3429   dw_val_class_range_list,
3430   dw_val_class_const,
3431   dw_val_class_unsigned_const,
3432   dw_val_class_long_long,
3433   dw_val_class_vec,
3434   dw_val_class_flag,
3435   dw_val_class_die_ref,
3436   dw_val_class_fde_ref,
3437   dw_val_class_lbl_id,
3438   dw_val_class_lineptr,
3439   dw_val_class_str,
3440   dw_val_class_macptr,
3441   dw_val_class_file
3442 };
3443
3444 /* Describe a double word constant value.  */
3445 /* ??? Every instance of long_long in the code really means CONST_DOUBLE.  */
3446
3447 typedef struct dw_long_long_struct GTY(())
3448 {
3449   unsigned long hi;
3450   unsigned long low;
3451 }
3452 dw_long_long_const;
3453
3454 /* Describe a floating point constant value, or a vector constant value.  */
3455
3456 typedef struct dw_vec_struct GTY(())
3457 {
3458   unsigned char * GTY((length ("%h.length"))) array;
3459   unsigned length;
3460   unsigned elt_size;
3461 }
3462 dw_vec_const;
3463
3464 /* The dw_val_node describes an attribute's value, as it is
3465    represented internally.  */
3466
3467 typedef struct dw_val_struct GTY(())
3468 {
3469   enum dw_val_class val_class;
3470   union dw_val_struct_union
3471     {
3472       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
3473       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
3474       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
3475       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
3476       HOST_WIDE_INT GTY ((default)) val_int;
3477       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
3478       dw_long_long_const GTY ((tag ("dw_val_class_long_long"))) val_long_long;
3479       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
3480       struct dw_val_die_union
3481         {
3482           dw_die_ref die;
3483           int external;
3484         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
3485       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
3486       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
3487       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
3488       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
3489       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
3490     }
3491   GTY ((desc ("%1.val_class"))) v;
3492 }
3493 dw_val_node;
3494
3495 /* Locations in memory are described using a sequence of stack machine
3496    operations.  */
3497
3498 typedef struct dw_loc_descr_struct GTY(())
3499 {
3500   dw_loc_descr_ref dw_loc_next;
3501   enum dwarf_location_atom dw_loc_opc;
3502   int dw_loc_addr;
3503   dw_val_node dw_loc_oprnd1;
3504   dw_val_node dw_loc_oprnd2;
3505 }
3506 dw_loc_descr_node;
3507
3508 /* Location lists are ranges + location descriptions for that range,
3509    so you can track variables that are in different places over
3510    their entire life.  */
3511 typedef struct dw_loc_list_struct GTY(())
3512 {
3513   dw_loc_list_ref dw_loc_next;
3514   const char *begin; /* Label for begin address of range */
3515   const char *end;  /* Label for end address of range */
3516   char *ll_symbol; /* Label for beginning of location list.
3517                       Only on head of list */
3518   const char *section; /* Section this loclist is relative to */
3519   dw_loc_descr_ref expr;
3520 } dw_loc_list_node;
3521
3522 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
3523
3524 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
3525
3526 /* Convert a DWARF stack opcode into its string name.  */
3527
3528 static const char *
3529 dwarf_stack_op_name (unsigned int op)
3530 {
3531   switch (op)
3532     {
3533     case DW_OP_addr:
3534     case INTERNAL_DW_OP_tls_addr:
3535       return "DW_OP_addr";
3536     case DW_OP_deref:
3537       return "DW_OP_deref";
3538     case DW_OP_const1u:
3539       return "DW_OP_const1u";
3540     case DW_OP_const1s:
3541       return "DW_OP_const1s";
3542     case DW_OP_const2u:
3543       return "DW_OP_const2u";
3544     case DW_OP_const2s:
3545       return "DW_OP_const2s";
3546     case DW_OP_const4u:
3547       return "DW_OP_const4u";
3548     case DW_OP_const4s:
3549       return "DW_OP_const4s";
3550     case DW_OP_const8u:
3551       return "DW_OP_const8u";
3552     case DW_OP_const8s:
3553       return "DW_OP_const8s";
3554     case DW_OP_constu:
3555       return "DW_OP_constu";
3556     case DW_OP_consts:
3557       return "DW_OP_consts";
3558     case DW_OP_dup:
3559       return "DW_OP_dup";
3560     case DW_OP_drop:
3561       return "DW_OP_drop";
3562     case DW_OP_over:
3563       return "DW_OP_over";
3564     case DW_OP_pick:
3565       return "DW_OP_pick";
3566     case DW_OP_swap:
3567       return "DW_OP_swap";
3568     case DW_OP_rot:
3569       return "DW_OP_rot";
3570     case DW_OP_xderef:
3571       return "DW_OP_xderef";
3572     case DW_OP_abs:
3573       return "DW_OP_abs";
3574     case DW_OP_and:
3575       return "DW_OP_and";
3576     case DW_OP_div:
3577       return "DW_OP_div";
3578     case DW_OP_minus:
3579       return "DW_OP_minus";
3580     case DW_OP_mod:
3581       return "DW_OP_mod";
3582     case DW_OP_mul:
3583       return "DW_OP_mul";
3584     case DW_OP_neg:
3585       return "DW_OP_neg";
3586     case DW_OP_not:
3587       return "DW_OP_not";
3588     case DW_OP_or:
3589       return "DW_OP_or";
3590     case DW_OP_plus:
3591       return "DW_OP_plus";
3592     case DW_OP_plus_uconst:
3593       return "DW_OP_plus_uconst";
3594     case DW_OP_shl:
3595       return "DW_OP_shl";
3596     case DW_OP_shr:
3597       return "DW_OP_shr";
3598     case DW_OP_shra:
3599       return "DW_OP_shra";
3600     case DW_OP_xor:
3601       return "DW_OP_xor";
3602     case DW_OP_bra:
3603       return "DW_OP_bra";
3604     case DW_OP_eq:
3605       return "DW_OP_eq";
3606     case DW_OP_ge:
3607       return "DW_OP_ge";
3608     case DW_OP_gt:
3609       return "DW_OP_gt";
3610     case DW_OP_le:
3611       return "DW_OP_le";
3612     case DW_OP_lt:
3613       return "DW_OP_lt";
3614     case DW_OP_ne:
3615       return "DW_OP_ne";
3616     case DW_OP_skip:
3617       return "DW_OP_skip";
3618     case DW_OP_lit0:
3619       return "DW_OP_lit0";
3620     case DW_OP_lit1:
3621       return "DW_OP_lit1";
3622     case DW_OP_lit2:
3623       return "DW_OP_lit2";
3624     case DW_OP_lit3:
3625       return "DW_OP_lit3";
3626     case DW_OP_lit4:
3627       return "DW_OP_lit4";
3628     case DW_OP_lit5:
3629       return "DW_OP_lit5";
3630     case DW_OP_lit6:
3631       return "DW_OP_lit6";
3632     case DW_OP_lit7:
3633       return "DW_OP_lit7";
3634     case DW_OP_lit8:
3635       return "DW_OP_lit8";
3636     case DW_OP_lit9:
3637       return "DW_OP_lit9";
3638     case DW_OP_lit10:
3639       return "DW_OP_lit10";
3640     case DW_OP_lit11:
3641       return "DW_OP_lit11";
3642     case DW_OP_lit12:
3643       return "DW_OP_lit12";
3644     case DW_OP_lit13:
3645       return "DW_OP_lit13";
3646     case DW_OP_lit14:
3647       return "DW_OP_lit14";
3648     case DW_OP_lit15:
3649       return "DW_OP_lit15";
3650     case DW_OP_lit16:
3651       return "DW_OP_lit16";
3652     case DW_OP_lit17:
3653       return "DW_OP_lit17";
3654     case DW_OP_lit18:
3655       return "DW_OP_lit18";
3656     case DW_OP_lit19:
3657       return "DW_OP_lit19";
3658     case DW_OP_lit20:
3659       return "DW_OP_lit20";
3660     case DW_OP_lit21:
3661       return "DW_OP_lit21";
3662     case DW_OP_lit22:
3663       return "DW_OP_lit22";
3664     case DW_OP_lit23:
3665       return "DW_OP_lit23";
3666     case DW_OP_lit24:
3667       return "DW_OP_lit24";
3668     case DW_OP_lit25:
3669       return "DW_OP_lit25";
3670     case DW_OP_lit26:
3671       return "DW_OP_lit26";
3672     case DW_OP_lit27:
3673       return "DW_OP_lit27";
3674     case DW_OP_lit28:
3675       return "DW_OP_lit28";
3676     case DW_OP_lit29:
3677       return "DW_OP_lit29";
3678     case DW_OP_lit30:
3679       return "DW_OP_lit30";
3680     case DW_OP_lit31:
3681       return "DW_OP_lit31";
3682     case DW_OP_reg0:
3683       return "DW_OP_reg0";
3684     case DW_OP_reg1:
3685       return "DW_OP_reg1";
3686     case DW_OP_reg2:
3687       return "DW_OP_reg2";
3688     case DW_OP_reg3:
3689       return "DW_OP_reg3";
3690     case DW_OP_reg4:
3691       return "DW_OP_reg4";
3692     case DW_OP_reg5:
3693       return "DW_OP_reg5";
3694     case DW_OP_reg6:
3695       return "DW_OP_reg6";
3696     case DW_OP_reg7:
3697       return "DW_OP_reg7";
3698     case DW_OP_reg8:
3699       return "DW_OP_reg8";
3700     case DW_OP_reg9:
3701       return "DW_OP_reg9";
3702     case DW_OP_reg10:
3703       return "DW_OP_reg10";
3704     case DW_OP_reg11:
3705       return "DW_OP_reg11";
3706     case DW_OP_reg12:
3707       return "DW_OP_reg12";
3708     case DW_OP_reg13:
3709       return "DW_OP_reg13";
3710     case DW_OP_reg14:
3711       return "DW_OP_reg14";
3712     case DW_OP_reg15:
3713       return "DW_OP_reg15";
3714     case DW_OP_reg16:
3715       return "DW_OP_reg16";
3716     case DW_OP_reg17:
3717       return "DW_OP_reg17";
3718     case DW_OP_reg18:
3719       return "DW_OP_reg18";
3720     case DW_OP_reg19:
3721       return "DW_OP_reg19";
3722     case DW_OP_reg20:
3723       return "DW_OP_reg20";
3724     case DW_OP_reg21:
3725       return "DW_OP_reg21";
3726     case DW_OP_reg22:
3727       return "DW_OP_reg22";
3728     case DW_OP_reg23:
3729       return "DW_OP_reg23";
3730     case DW_OP_reg24:
3731       return "DW_OP_reg24";
3732     case DW_OP_reg25:
3733       return "DW_OP_reg25";
3734     case DW_OP_reg26:
3735       return "DW_OP_reg26";
3736     case DW_OP_reg27:
3737       return "DW_OP_reg27";
3738     case DW_OP_reg28:
3739       return "DW_OP_reg28";
3740     case DW_OP_reg29:
3741       return "DW_OP_reg29";
3742     case DW_OP_reg30:
3743       return "DW_OP_reg30";
3744     case DW_OP_reg31:
3745       return "DW_OP_reg31";
3746     case DW_OP_breg0:
3747       return "DW_OP_breg0";
3748     case DW_OP_breg1:
3749       return "DW_OP_breg1";
3750     case DW_OP_breg2:
3751       return "DW_OP_breg2";
3752     case DW_OP_breg3:
3753       return "DW_OP_breg3";
3754     case DW_OP_breg4:
3755       return "DW_OP_breg4";
3756     case DW_OP_breg5:
3757       return "DW_OP_breg5";
3758     case DW_OP_breg6:
3759       return "DW_OP_breg6";
3760     case DW_OP_breg7:
3761       return "DW_OP_breg7";
3762     case DW_OP_breg8:
3763       return "DW_OP_breg8";
3764     case DW_OP_breg9:
3765       return "DW_OP_breg9";
3766     case DW_OP_breg10:
3767       return "DW_OP_breg10";
3768     case DW_OP_breg11:
3769       return "DW_OP_breg11";
3770     case DW_OP_breg12:
3771       return "DW_OP_breg12";
3772     case DW_OP_breg13:
3773       return "DW_OP_breg13";
3774     case DW_OP_breg14:
3775       return "DW_OP_breg14";
3776     case DW_OP_breg15:
3777       return "DW_OP_breg15";
3778     case DW_OP_breg16:
3779       return "DW_OP_breg16";
3780     case DW_OP_breg17:
3781       return "DW_OP_breg17";
3782     case DW_OP_breg18:
3783       return "DW_OP_breg18";
3784     case DW_OP_breg19:
3785       return "DW_OP_breg19";
3786     case DW_OP_breg20:
3787       return "DW_OP_breg20";
3788     case DW_OP_breg21:
3789       return "DW_OP_breg21";
3790     case DW_OP_breg22:
3791       return "DW_OP_breg22";
3792     case DW_OP_breg23:
3793       return "DW_OP_breg23";
3794     case DW_OP_breg24:
3795       return "DW_OP_breg24";
3796     case DW_OP_breg25:
3797       return "DW_OP_breg25";
3798     case DW_OP_breg26:
3799       return "DW_OP_breg26";
3800     case DW_OP_breg27:
3801       return "DW_OP_breg27";
3802     case DW_OP_breg28:
3803       return "DW_OP_breg28";
3804     case DW_OP_breg29:
3805       return "DW_OP_breg29";
3806     case DW_OP_breg30:
3807       return "DW_OP_breg30";
3808     case DW_OP_breg31:
3809       return "DW_OP_breg31";
3810     case DW_OP_regx:
3811       return "DW_OP_regx";
3812     case DW_OP_fbreg:
3813       return "DW_OP_fbreg";
3814     case DW_OP_bregx:
3815       return "DW_OP_bregx";
3816     case DW_OP_piece:
3817       return "DW_OP_piece";
3818     case DW_OP_deref_size:
3819       return "DW_OP_deref_size";
3820     case DW_OP_xderef_size:
3821       return "DW_OP_xderef_size";
3822     case DW_OP_nop:
3823       return "DW_OP_nop";
3824     case DW_OP_push_object_address:
3825       return "DW_OP_push_object_address";
3826     case DW_OP_call2:
3827       return "DW_OP_call2";
3828     case DW_OP_call4:
3829       return "DW_OP_call4";
3830     case DW_OP_call_ref:
3831       return "DW_OP_call_ref";
3832     case DW_OP_GNU_push_tls_address:
3833       return "DW_OP_GNU_push_tls_address";
3834     case DW_OP_GNU_uninit:
3835       return "DW_OP_GNU_uninit";
3836     default:
3837       return "OP_<unknown>";
3838     }
3839 }
3840
3841 /* Return a pointer to a newly allocated location description.  Location
3842    descriptions are simple expression terms that can be strung
3843    together to form more complicated location (address) descriptions.  */
3844
3845 static inline dw_loc_descr_ref
3846 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
3847                unsigned HOST_WIDE_INT oprnd2)
3848 {
3849   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
3850
3851   descr->dw_loc_opc = op;
3852   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
3853   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
3854   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
3855   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
3856
3857   return descr;
3858 }
3859
3860 /* Return a pointer to a newly allocated location description for
3861    REG and OFFSET.  */
3862
3863 static inline dw_loc_descr_ref
3864 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
3865 {
3866   if (offset)
3867     {
3868       if (reg <= 31)
3869         return new_loc_descr (DW_OP_breg0 + reg, offset, 0);
3870       else
3871         return new_loc_descr (DW_OP_bregx, reg, offset);
3872     }
3873   else if (reg <= 31)
3874     return new_loc_descr (DW_OP_reg0 + reg, 0, 0);
3875   else
3876    return new_loc_descr (DW_OP_regx, reg, 0);
3877 }
3878
3879 /* Add a location description term to a location description expression.  */
3880
3881 static inline void
3882 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
3883 {
3884   dw_loc_descr_ref *d;
3885
3886   /* Find the end of the chain.  */
3887   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
3888     ;
3889
3890   *d = descr;
3891 }
3892
3893 /* Return the size of a location descriptor.  */
3894
3895 static unsigned long
3896 size_of_loc_descr (dw_loc_descr_ref loc)
3897 {
3898   unsigned long size = 1;
3899
3900   switch (loc->dw_loc_opc)
3901     {
3902     case DW_OP_addr:
3903     case INTERNAL_DW_OP_tls_addr:
3904       size += DWARF2_ADDR_SIZE;
3905       break;
3906     case DW_OP_const1u:
3907     case DW_OP_const1s:
3908       size += 1;
3909       break;
3910     case DW_OP_const2u:
3911     case DW_OP_const2s:
3912       size += 2;
3913       break;
3914     case DW_OP_const4u:
3915     case DW_OP_const4s:
3916       size += 4;
3917       break;
3918     case DW_OP_const8u:
3919     case DW_OP_const8s:
3920       size += 8;
3921       break;
3922     case DW_OP_constu:
3923       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3924       break;
3925     case DW_OP_consts:
3926       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3927       break;
3928     case DW_OP_pick:
3929       size += 1;
3930       break;
3931     case DW_OP_plus_uconst:
3932       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3933       break;
3934     case DW_OP_skip:
3935     case DW_OP_bra:
3936       size += 2;
3937       break;
3938     case DW_OP_breg0:
3939     case DW_OP_breg1:
3940     case DW_OP_breg2:
3941     case DW_OP_breg3:
3942     case DW_OP_breg4:
3943     case DW_OP_breg5:
3944     case DW_OP_breg6:
3945     case DW_OP_breg7:
3946     case DW_OP_breg8:
3947     case DW_OP_breg9:
3948     case DW_OP_breg10:
3949     case DW_OP_breg11:
3950     case DW_OP_breg12:
3951     case DW_OP_breg13:
3952     case DW_OP_breg14:
3953     case DW_OP_breg15:
3954     case DW_OP_breg16:
3955     case DW_OP_breg17:
3956     case DW_OP_breg18:
3957     case DW_OP_breg19:
3958     case DW_OP_breg20:
3959     case DW_OP_breg21:
3960     case DW_OP_breg22:
3961     case DW_OP_breg23:
3962     case DW_OP_breg24:
3963     case DW_OP_breg25:
3964     case DW_OP_breg26:
3965     case DW_OP_breg27:
3966     case DW_OP_breg28:
3967     case DW_OP_breg29:
3968     case DW_OP_breg30:
3969     case DW_OP_breg31:
3970       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3971       break;
3972     case DW_OP_regx:
3973       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3974       break;
3975     case DW_OP_fbreg:
3976       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
3977       break;
3978     case DW_OP_bregx:
3979       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3980       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
3981       break;
3982     case DW_OP_piece:
3983       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
3984       break;
3985     case DW_OP_deref_size:
3986     case DW_OP_xderef_size:
3987       size += 1;
3988       break;
3989     case DW_OP_call2:
3990       size += 2;
3991       break;
3992     case DW_OP_call4:
3993       size += 4;
3994       break;
3995     case DW_OP_call_ref:
3996       size += DWARF2_ADDR_SIZE;
3997       break;
3998     default:
3999       break;
4000     }
4001
4002   return size;
4003 }
4004
4005 /* Return the size of a series of location descriptors.  */
4006
4007 static unsigned long
4008 size_of_locs (dw_loc_descr_ref loc)
4009 {
4010   dw_loc_descr_ref l;
4011   unsigned long size;
4012
4013   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4014      field, to avoid writing to a PCH file.  */
4015   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4016     {
4017       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4018         break;
4019       size += size_of_loc_descr (l);
4020     }
4021   if (! l)
4022     return size;
4023
4024   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4025     {
4026       l->dw_loc_addr = size;
4027       size += size_of_loc_descr (l);
4028     }
4029
4030   return size;
4031 }
4032
4033 /* Output location description stack opcode's operands (if any).  */
4034
4035 static void
4036 output_loc_operands (dw_loc_descr_ref loc)
4037 {
4038   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4039   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4040
4041   switch (loc->dw_loc_opc)
4042     {
4043 #ifdef DWARF2_DEBUGGING_INFO
4044     case DW_OP_addr:
4045       dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
4046       break;
4047     case DW_OP_const2u:
4048     case DW_OP_const2s:
4049       dw2_asm_output_data (2, val1->v.val_int, NULL);
4050       break;
4051     case DW_OP_const4u:
4052     case DW_OP_const4s:
4053       dw2_asm_output_data (4, val1->v.val_int, NULL);
4054       break;
4055     case DW_OP_const8u:
4056     case DW_OP_const8s:
4057       gcc_assert (HOST_BITS_PER_LONG >= 64);
4058       dw2_asm_output_data (8, val1->v.val_int, NULL);
4059       break;
4060     case DW_OP_skip:
4061     case DW_OP_bra:
4062       {
4063         int offset;
4064
4065         gcc_assert (val1->val_class == dw_val_class_loc);
4066         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4067
4068         dw2_asm_output_data (2, offset, NULL);
4069       }
4070       break;
4071 #else
4072     case DW_OP_addr:
4073     case DW_OP_const2u:
4074     case DW_OP_const2s:
4075     case DW_OP_const4u:
4076     case DW_OP_const4s:
4077     case DW_OP_const8u:
4078     case DW_OP_const8s:
4079     case DW_OP_skip:
4080     case DW_OP_bra:
4081       /* We currently don't make any attempt to make sure these are
4082          aligned properly like we do for the main unwind info, so
4083          don't support emitting things larger than a byte if we're
4084          only doing unwinding.  */
4085       gcc_unreachable ();
4086 #endif
4087     case DW_OP_const1u:
4088     case DW_OP_const1s:
4089       dw2_asm_output_data (1, val1->v.val_int, NULL);
4090       break;
4091     case DW_OP_constu:
4092       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4093       break;
4094     case DW_OP_consts:
4095       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4096       break;
4097     case DW_OP_pick:
4098       dw2_asm_output_data (1, val1->v.val_int, NULL);
4099       break;
4100     case DW_OP_plus_uconst:
4101       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4102       break;
4103     case DW_OP_breg0:
4104     case DW_OP_breg1:
4105     case DW_OP_breg2:
4106     case DW_OP_breg3:
4107     case DW_OP_breg4:
4108     case DW_OP_breg5:
4109     case DW_OP_breg6:
4110     case DW_OP_breg7:
4111     case DW_OP_breg8:
4112     case DW_OP_breg9:
4113     case DW_OP_breg10:
4114     case DW_OP_breg11:
4115     case DW_OP_breg12:
4116     case DW_OP_breg13:
4117     case DW_OP_breg14:
4118     case DW_OP_breg15:
4119     case DW_OP_breg16:
4120     case DW_OP_breg17:
4121     case DW_OP_breg18:
4122     case DW_OP_breg19:
4123     case DW_OP_breg20:
4124     case DW_OP_breg21:
4125     case DW_OP_breg22:
4126     case DW_OP_breg23:
4127     case DW_OP_breg24:
4128     case DW_OP_breg25:
4129     case DW_OP_breg26:
4130     case DW_OP_breg27:
4131     case DW_OP_breg28:
4132     case DW_OP_breg29:
4133     case DW_OP_breg30:
4134     case DW_OP_breg31:
4135       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4136       break;
4137     case DW_OP_regx:
4138       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4139       break;
4140     case DW_OP_fbreg:
4141       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4142       break;
4143     case DW_OP_bregx:
4144       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4145       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
4146       break;
4147     case DW_OP_piece:
4148       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4149       break;
4150     case DW_OP_deref_size:
4151     case DW_OP_xderef_size:
4152       dw2_asm_output_data (1, val1->v.val_int, NULL);
4153       break;
4154
4155     case INTERNAL_DW_OP_tls_addr:
4156       if (targetm.asm_out.output_dwarf_dtprel)
4157         {
4158           targetm.asm_out.output_dwarf_dtprel (asm_out_file,
4159                                                DWARF2_ADDR_SIZE,
4160                                                val1->v.val_addr);
4161           fputc ('\n', asm_out_file);
4162         }
4163       else
4164         gcc_unreachable ();
4165       break;
4166
4167     default:
4168       /* Other codes have no operands.  */
4169       break;
4170     }
4171 }
4172
4173 /* Output a sequence of location operations.  */
4174
4175 static void
4176 output_loc_sequence (dw_loc_descr_ref loc)
4177 {
4178   for (; loc != NULL; loc = loc->dw_loc_next)
4179     {
4180       /* Output the opcode.  */
4181       dw2_asm_output_data (1, loc->dw_loc_opc,
4182                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
4183
4184       /* Output the operand(s) (if any).  */
4185       output_loc_operands (loc);
4186     }
4187 }
4188
4189 /* Output location description stack opcode's operands (if any).
4190    The output is single bytes on a line, suitable for .cfi_escape.  */
4191
4192 static void
4193 output_loc_operands_raw (dw_loc_descr_ref loc)
4194 {
4195   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4196   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4197
4198   switch (loc->dw_loc_opc)
4199     {
4200     case DW_OP_addr:
4201       /* We cannot output addresses in .cfi_escape, only bytes.  */
4202       gcc_unreachable ();
4203
4204     case DW_OP_const1u:
4205     case DW_OP_const1s:
4206     case DW_OP_pick:
4207     case DW_OP_deref_size:
4208     case DW_OP_xderef_size:
4209       fputc (',', asm_out_file);
4210       dw2_asm_output_data_raw (1, val1->v.val_int);
4211       break;
4212
4213     case DW_OP_const2u:
4214     case DW_OP_const2s:
4215       fputc (',', asm_out_file);
4216       dw2_asm_output_data_raw (2, val1->v.val_int);
4217       break;
4218
4219     case DW_OP_const4u:
4220     case DW_OP_const4s:
4221       fputc (',', asm_out_file);
4222       dw2_asm_output_data_raw (4, val1->v.val_int);
4223       break;
4224
4225     case DW_OP_const8u:
4226     case DW_OP_const8s:
4227       gcc_assert (HOST_BITS_PER_LONG >= 64);
4228       fputc (',', asm_out_file);
4229       dw2_asm_output_data_raw (8, val1->v.val_int);
4230       break;
4231
4232     case DW_OP_skip:
4233     case DW_OP_bra:
4234       {
4235         int offset;
4236
4237         gcc_assert (val1->val_class == dw_val_class_loc);
4238         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4239
4240         fputc (',', asm_out_file);
4241         dw2_asm_output_data_raw (2, offset);
4242       }
4243       break;
4244
4245     case DW_OP_constu:
4246     case DW_OP_plus_uconst:
4247     case DW_OP_regx:
4248     case DW_OP_piece:
4249       fputc (',', asm_out_file);
4250       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
4251       break;
4252
4253     case DW_OP_consts:
4254     case DW_OP_breg0:
4255     case DW_OP_breg1:
4256     case DW_OP_breg2:
4257     case DW_OP_breg3:
4258     case DW_OP_breg4:
4259     case DW_OP_breg5:
4260     case DW_OP_breg6:
4261     case DW_OP_breg7:
4262     case DW_OP_breg8:
4263     case DW_OP_breg9:
4264     case DW_OP_breg10:
4265     case DW_OP_breg11:
4266     case DW_OP_breg12:
4267     case DW_OP_breg13:
4268     case DW_OP_breg14:
4269     case DW_OP_breg15:
4270     case DW_OP_breg16:
4271     case DW_OP_breg17:
4272     case DW_OP_breg18:
4273     case DW_OP_breg19:
4274     case DW_OP_breg20:
4275     case DW_OP_breg21:
4276     case DW_OP_breg22:
4277     case DW_OP_breg23:
4278     case DW_OP_breg24:
4279     case DW_OP_breg25:
4280     case DW_OP_breg26:
4281     case DW_OP_breg27:
4282     case DW_OP_breg28:
4283     case DW_OP_breg29:
4284     case DW_OP_breg30:
4285     case DW_OP_breg31:
4286     case DW_OP_fbreg:
4287       fputc (',', asm_out_file);
4288       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
4289       break;
4290
4291     case DW_OP_bregx:
4292       fputc (',', asm_out_file);
4293       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
4294       fputc (',', asm_out_file);
4295       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
4296       break;
4297
4298     case INTERNAL_DW_OP_tls_addr:
4299       gcc_unreachable ();
4300
4301     default:
4302       /* Other codes have no operands.  */
4303       break;
4304     }
4305 }
4306
4307 static void
4308 output_loc_sequence_raw (dw_loc_descr_ref loc)
4309 {
4310   while (1)
4311     {
4312       /* Output the opcode.  */
4313       fprintf (asm_out_file, "0x%x", loc->dw_loc_opc);
4314       output_loc_operands_raw (loc);
4315
4316       if (!loc->dw_loc_next)
4317         break;
4318       loc = loc->dw_loc_next;
4319
4320       fputc (',', asm_out_file);
4321     }
4322 }
4323
4324 /* This routine will generate the correct assembly data for a location
4325    description based on a cfi entry with a complex address.  */
4326
4327 static void
4328 output_cfa_loc (dw_cfi_ref cfi)
4329 {
4330   dw_loc_descr_ref loc;
4331   unsigned long size;
4332
4333   if (cfi->dw_cfi_opc == DW_CFA_expression)
4334     dw2_asm_output_data (1, cfi->dw_cfi_oprnd2.dw_cfi_reg_num, NULL);
4335
4336   /* Output the size of the block.  */
4337   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
4338   size = size_of_locs (loc);
4339   dw2_asm_output_data_uleb128 (size, NULL);
4340
4341   /* Now output the operations themselves.  */
4342   output_loc_sequence (loc);
4343 }
4344
4345 /* Similar, but used for .cfi_escape.  */
4346
4347 static void
4348 output_cfa_loc_raw (dw_cfi_ref cfi)
4349 {
4350   dw_loc_descr_ref loc;
4351   unsigned long size;
4352
4353   if (cfi->dw_cfi_opc == DW_CFA_expression)
4354     fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd2.dw_cfi_reg_num);
4355
4356   /* Output the size of the block.  */
4357   loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
4358   size = size_of_locs (loc);
4359   dw2_asm_output_data_uleb128_raw (size);
4360   fputc (',', asm_out_file);
4361
4362   /* Now output the operations themselves.  */
4363   output_loc_sequence_raw (loc);
4364 }
4365
4366 /* This function builds a dwarf location descriptor sequence from a
4367    dw_cfa_location, adding the given OFFSET to the result of the
4368    expression.  */
4369
4370 static struct dw_loc_descr_struct *
4371 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
4372 {
4373   struct dw_loc_descr_struct *head, *tmp;
4374
4375   offset += cfa->offset;
4376
4377   if (cfa->indirect)
4378     {
4379       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
4380       head->dw_loc_oprnd1.val_class = dw_val_class_const;
4381       tmp = new_loc_descr (DW_OP_deref, 0, 0);
4382       add_loc_descr (&head, tmp);
4383       if (offset != 0)
4384         {
4385           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4386           add_loc_descr (&head, tmp);
4387         }
4388     }
4389   else
4390     head = new_reg_loc_descr (cfa->reg, offset);
4391
4392   return head;
4393 }
4394
4395 /* This function builds a dwarf location descriptor sequence for
4396    the address at OFFSET from the CFA when stack is aligned to
4397    ALIGNMENT byte.  */
4398
4399 static struct dw_loc_descr_struct *
4400 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
4401 {
4402   struct dw_loc_descr_struct *head;
4403   unsigned int dwarf_fp
4404     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
4405
4406  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
4407   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
4408     {
4409       head = new_reg_loc_descr (dwarf_fp, 0);
4410       add_loc_descr (&head, int_loc_descriptor (alignment));
4411       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
4412
4413       add_loc_descr (&head, int_loc_descriptor (offset));
4414       add_loc_descr (&head, new_loc_descr (DW_OP_plus, 0, 0));
4415     }
4416   else
4417     head = new_reg_loc_descr (dwarf_fp, offset);
4418   return head;
4419 }
4420
4421 /* This function fills in aa dw_cfa_location structure from a dwarf location
4422    descriptor sequence.  */
4423
4424 static void
4425 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
4426 {
4427   struct dw_loc_descr_struct *ptr;
4428   cfa->offset = 0;
4429   cfa->base_offset = 0;
4430   cfa->indirect = 0;
4431   cfa->reg = -1;
4432
4433   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
4434     {
4435       enum dwarf_location_atom op = ptr->dw_loc_opc;
4436
4437       switch (op)
4438         {
4439         case DW_OP_reg0:
4440         case DW_OP_reg1:
4441         case DW_OP_reg2:
4442         case DW_OP_reg3:
4443         case DW_OP_reg4:
4444         case DW_OP_reg5:
4445         case DW_OP_reg6:
4446         case DW_OP_reg7:
4447         case DW_OP_reg8:
4448         case DW_OP_reg9:
4449         case DW_OP_reg10:
4450         case DW_OP_reg11:
4451         case DW_OP_reg12:
4452         case DW_OP_reg13:
4453         case DW_OP_reg14:
4454         case DW_OP_reg15:
4455         case DW_OP_reg16:
4456         case DW_OP_reg17:
4457         case DW_OP_reg18:
4458         case DW_OP_reg19:
4459         case DW_OP_reg20:
4460         case DW_OP_reg21:
4461         case DW_OP_reg22:
4462         case DW_OP_reg23:
4463         case DW_OP_reg24:
4464         case DW_OP_reg25:
4465         case DW_OP_reg26:
4466         case DW_OP_reg27:
4467         case DW_OP_reg28:
4468         case DW_OP_reg29:
4469         case DW_OP_reg30:
4470         case DW_OP_reg31:
4471           cfa->reg = op - DW_OP_reg0;
4472           break;
4473         case DW_OP_regx:
4474           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
4475           break;
4476         case DW_OP_breg0:
4477         case DW_OP_breg1:
4478         case DW_OP_breg2:
4479         case DW_OP_breg3:
4480         case DW_OP_breg4:
4481         case DW_OP_breg5:
4482         case DW_OP_breg6:
4483         case DW_OP_breg7:
4484         case DW_OP_breg8:
4485         case DW_OP_breg9:
4486         case DW_OP_breg10:
4487         case DW_OP_breg11:
4488         case DW_OP_breg12:
4489         case DW_OP_breg13:
4490         case DW_OP_breg14:
4491         case DW_OP_breg15:
4492         case DW_OP_breg16:
4493         case DW_OP_breg17:
4494         case DW_OP_breg18:
4495         case DW_OP_breg19:
4496         case DW_OP_breg20:
4497         case DW_OP_breg21:
4498         case DW_OP_breg22:
4499         case DW_OP_breg23:
4500         case DW_OP_breg24:
4501         case DW_OP_breg25:
4502         case DW_OP_breg26:
4503         case DW_OP_breg27:
4504         case DW_OP_breg28:
4505         case DW_OP_breg29:
4506         case DW_OP_breg30:
4507         case DW_OP_breg31:
4508           cfa->reg = op - DW_OP_breg0;
4509           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
4510           break;
4511         case DW_OP_bregx:
4512           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
4513           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
4514           break;
4515         case DW_OP_deref:
4516           cfa->indirect = 1;
4517           break;
4518         case DW_OP_plus_uconst:
4519           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
4520           break;
4521         default:
4522           internal_error ("DW_LOC_OP %s not implemented",
4523                           dwarf_stack_op_name (ptr->dw_loc_opc));
4524         }
4525     }
4526 }
4527 #endif /* .debug_frame support */
4528 \f
4529 /* And now, the support for symbolic debugging information.  */
4530 #ifdef DWARF2_DEBUGGING_INFO
4531
4532 /* .debug_str support.  */
4533 static int output_indirect_string (void **, void *);
4534
4535 static void dwarf2out_init (const char *);
4536 static void dwarf2out_finish (const char *);
4537 static void dwarf2out_define (unsigned int, const char *);
4538 static void dwarf2out_undef (unsigned int, const char *);
4539 static void dwarf2out_start_source_file (unsigned, const char *);
4540 static void dwarf2out_end_source_file (unsigned);
4541 static void dwarf2out_begin_block (unsigned, unsigned);
4542 static void dwarf2out_end_block (unsigned, unsigned);
4543 static bool dwarf2out_ignore_block (const_tree);
4544 static void dwarf2out_global_decl (tree);
4545 static void dwarf2out_type_decl (tree, int);
4546 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
4547 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
4548                                                  dw_die_ref);
4549 static void dwarf2out_abstract_function (tree);
4550 static void dwarf2out_var_location (rtx);
4551 static void dwarf2out_begin_function (tree);
4552
4553 /* The debug hooks structure.  */
4554
4555 const struct gcc_debug_hooks dwarf2_debug_hooks =
4556 {
4557   dwarf2out_init,
4558   dwarf2out_finish,
4559   dwarf2out_define,
4560   dwarf2out_undef,
4561   dwarf2out_start_source_file,
4562   dwarf2out_end_source_file,
4563   dwarf2out_begin_block,
4564   dwarf2out_end_block,
4565   dwarf2out_ignore_block,
4566   dwarf2out_source_line,
4567   dwarf2out_begin_prologue,
4568   debug_nothing_int_charstar,   /* end_prologue */
4569   dwarf2out_end_epilogue,
4570   dwarf2out_begin_function,
4571   debug_nothing_int,            /* end_function */
4572   dwarf2out_decl,               /* function_decl */
4573   dwarf2out_global_decl,
4574   dwarf2out_type_decl,          /* type_decl */
4575   dwarf2out_imported_module_or_decl,
4576   debug_nothing_tree,           /* deferred_inline_function */
4577   /* The DWARF 2 backend tries to reduce debugging bloat by not
4578      emitting the abstract description of inline functions until
4579      something tries to reference them.  */
4580   dwarf2out_abstract_function,  /* outlining_inline_function */
4581   debug_nothing_rtx,            /* label */
4582   debug_nothing_int,            /* handle_pch */
4583   dwarf2out_var_location,
4584   dwarf2out_switch_text_section,
4585   1                             /* start_end_main_source_file */
4586 };
4587 #endif
4588 \f
4589 /* NOTE: In the comments in this file, many references are made to
4590    "Debugging Information Entries".  This term is abbreviated as `DIE'
4591    throughout the remainder of this file.  */
4592
4593 /* An internal representation of the DWARF output is built, and then
4594    walked to generate the DWARF debugging info.  The walk of the internal
4595    representation is done after the entire program has been compiled.
4596    The types below are used to describe the internal representation.  */
4597
4598 /* Various DIE's use offsets relative to the beginning of the
4599    .debug_info section to refer to each other.  */
4600
4601 typedef long int dw_offset;
4602
4603 /* Define typedefs here to avoid circular dependencies.  */
4604
4605 typedef struct dw_attr_struct *dw_attr_ref;
4606 typedef struct dw_line_info_struct *dw_line_info_ref;
4607 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
4608 typedef struct pubname_struct *pubname_ref;
4609 typedef struct dw_ranges_struct *dw_ranges_ref;
4610 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
4611
4612 /* Each entry in the line_info_table maintains the file and
4613    line number associated with the label generated for that
4614    entry.  The label gives the PC value associated with
4615    the line number entry.  */
4616
4617 typedef struct dw_line_info_struct GTY(())
4618 {
4619   unsigned long dw_file_num;
4620   unsigned long dw_line_num;
4621 }
4622 dw_line_info_entry;
4623
4624 /* Line information for functions in separate sections; each one gets its
4625    own sequence.  */
4626 typedef struct dw_separate_line_info_struct GTY(())
4627 {
4628   unsigned long dw_file_num;
4629   unsigned long dw_line_num;
4630   unsigned long function;
4631 }
4632 dw_separate_line_info_entry;
4633
4634 /* Each DIE attribute has a field specifying the attribute kind,
4635    a link to the next attribute in the chain, and an attribute value.
4636    Attributes are typically linked below the DIE they modify.  */
4637
4638 typedef struct dw_attr_struct GTY(())
4639 {
4640   enum dwarf_attribute dw_attr;
4641   dw_val_node dw_attr_val;
4642 }
4643 dw_attr_node;
4644
4645 DEF_VEC_O(dw_attr_node);
4646 DEF_VEC_ALLOC_O(dw_attr_node,gc);
4647
4648 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
4649    The children of each node form a circular list linked by
4650    die_sib.  die_child points to the node *before* the "first" child node.  */
4651
4652 typedef struct die_struct GTY((chain_circular ("%h.die_sib")))
4653 {
4654   enum dwarf_tag die_tag;
4655   char *die_symbol;
4656   VEC(dw_attr_node,gc) * die_attr;
4657   dw_die_ref die_parent;
4658   dw_die_ref die_child;
4659   dw_die_ref die_sib;
4660   dw_die_ref die_definition; /* ref from a specification to its definition */
4661   dw_offset die_offset;
4662   unsigned long die_abbrev;
4663   int die_mark;
4664   /* Die is used and must not be pruned as unused.  */
4665   int die_perennial_p;
4666   unsigned int decl_id;
4667 }
4668 die_node;
4669
4670 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
4671 #define FOR_EACH_CHILD(die, c, expr) do {       \
4672   c = die->die_child;                           \
4673   if (c) do {                                   \
4674     c = c->die_sib;                             \
4675     expr;                                       \
4676   } while (c != die->die_child);                \
4677 } while (0)
4678
4679 /* The pubname structure */
4680
4681 typedef struct pubname_struct GTY(())
4682 {
4683   dw_die_ref die;
4684   const char *name;
4685 }
4686 pubname_entry;
4687
4688 DEF_VEC_O(pubname_entry);
4689 DEF_VEC_ALLOC_O(pubname_entry, gc);
4690
4691 struct dw_ranges_struct GTY(())
4692 {
4693   /* If this is positive, it's a block number, otherwise it's a
4694      bitwise-negated index into dw_ranges_by_label.  */
4695   int num;
4696 };
4697
4698 struct dw_ranges_by_label_struct GTY(())
4699 {
4700   const char *begin;
4701   const char *end;
4702 };
4703
4704 /* The limbo die list structure.  */
4705 typedef struct limbo_die_struct GTY(())
4706 {
4707   dw_die_ref die;
4708   tree created_for;
4709   struct limbo_die_struct *next;
4710 }
4711 limbo_die_node;
4712
4713 /* How to start an assembler comment.  */
4714 #ifndef ASM_COMMENT_START
4715 #define ASM_COMMENT_START ";#"
4716 #endif
4717
4718 /* Define a macro which returns nonzero for a TYPE_DECL which was
4719    implicitly generated for a tagged type.
4720
4721    Note that unlike the gcc front end (which generates a NULL named
4722    TYPE_DECL node for each complete tagged type, each array type, and
4723    each function type node created) the g++ front end generates a
4724    _named_ TYPE_DECL node for each tagged type node created.
4725    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
4726    generate a DW_TAG_typedef DIE for them.  */
4727
4728 #define TYPE_DECL_IS_STUB(decl)                         \
4729   (DECL_NAME (decl) == NULL_TREE                        \
4730    || (DECL_ARTIFICIAL (decl)                           \
4731        && is_tagged_type (TREE_TYPE (decl))             \
4732        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
4733            /* This is necessary for stub decls that     \
4734               appear in nested inline functions.  */    \
4735            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
4736                && (decl_ultimate_origin (decl)          \
4737                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
4738
4739 /* Information concerning the compilation unit's programming
4740    language, and compiler version.  */
4741
4742 /* Fixed size portion of the DWARF compilation unit header.  */
4743 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
4744   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
4745
4746 /* Fixed size portion of public names info.  */
4747 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
4748
4749 /* Fixed size portion of the address range info.  */
4750 #define DWARF_ARANGES_HEADER_SIZE                                       \
4751   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
4752                 DWARF2_ADDR_SIZE * 2)                                   \
4753    - DWARF_INITIAL_LENGTH_SIZE)
4754
4755 /* Size of padding portion in the address range info.  It must be
4756    aligned to twice the pointer size.  */
4757 #define DWARF_ARANGES_PAD_SIZE \
4758   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
4759                 DWARF2_ADDR_SIZE * 2)                              \
4760    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
4761
4762 /* Use assembler line directives if available.  */
4763 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
4764 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
4765 #define DWARF2_ASM_LINE_DEBUG_INFO 1
4766 #else
4767 #define DWARF2_ASM_LINE_DEBUG_INFO 0
4768 #endif
4769 #endif
4770
4771 /* Minimum line offset in a special line info. opcode.
4772    This value was chosen to give a reasonable range of values.  */
4773 #define DWARF_LINE_BASE  -10
4774
4775 /* First special line opcode - leave room for the standard opcodes.  */
4776 #define DWARF_LINE_OPCODE_BASE  10
4777
4778 /* Range of line offsets in a special line info. opcode.  */
4779 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
4780
4781 /* Flag that indicates the initial value of the is_stmt_start flag.
4782    In the present implementation, we do not mark any lines as
4783    the beginning of a source statement, because that information
4784    is not made available by the GCC front-end.  */
4785 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
4786
4787 #ifdef DWARF2_DEBUGGING_INFO
4788 /* This location is used by calc_die_sizes() to keep track
4789    the offset of each DIE within the .debug_info section.  */
4790 static unsigned long next_die_offset;
4791 #endif
4792
4793 /* Record the root of the DIE's built for the current compilation unit.  */
4794 static GTY(()) dw_die_ref comp_unit_die;
4795
4796 /* A list of DIEs with a NULL parent waiting to be relocated.  */
4797 static GTY(()) limbo_die_node *limbo_die_list;
4798
4799 /* Filenames referenced by this compilation unit.  */
4800 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
4801
4802 /* A hash table of references to DIE's that describe declarations.
4803    The key is a DECL_UID() which is a unique number identifying each decl.  */
4804 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
4805
4806 /* A hash table of references to DIE's that describe COMMON blocks.
4807    The key is DECL_UID() ^ die_parent.  */
4808 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
4809
4810 /* Node of the variable location list.  */
4811 struct var_loc_node GTY ((chain_next ("%h.next")))
4812 {
4813   rtx GTY (()) var_loc_note;
4814   const char * GTY (()) label;
4815   const char * GTY (()) section_label;
4816   struct var_loc_node * GTY (()) next;
4817 };
4818
4819 /* Variable location list.  */
4820 struct var_loc_list_def GTY (())
4821 {
4822   struct var_loc_node * GTY (()) first;
4823
4824   /* Do not mark the last element of the chained list because
4825      it is marked through the chain.  */
4826   struct var_loc_node * GTY ((skip ("%h"))) last;
4827
4828   /* DECL_UID of the variable decl.  */
4829   unsigned int decl_id;
4830 };
4831 typedef struct var_loc_list_def var_loc_list;
4832
4833
4834 /* Table of decl location linked lists.  */
4835 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
4836
4837 /* A pointer to the base of a list of references to DIE's that
4838    are uniquely identified by their tag, presence/absence of
4839    children DIE's, and list of attribute/value pairs.  */
4840 static GTY((length ("abbrev_die_table_allocated")))
4841   dw_die_ref *abbrev_die_table;
4842
4843 /* Number of elements currently allocated for abbrev_die_table.  */
4844 static GTY(()) unsigned abbrev_die_table_allocated;
4845
4846 /* Number of elements in type_die_table currently in use.  */
4847 static GTY(()) unsigned abbrev_die_table_in_use;
4848
4849 /* Size (in elements) of increments by which we may expand the
4850    abbrev_die_table.  */
4851 #define ABBREV_DIE_TABLE_INCREMENT 256
4852
4853 /* A pointer to the base of a table that contains line information
4854    for each source code line in .text in the compilation unit.  */
4855 static GTY((length ("line_info_table_allocated")))
4856      dw_line_info_ref line_info_table;
4857
4858 /* Number of elements currently allocated for line_info_table.  */
4859 static GTY(()) unsigned line_info_table_allocated;
4860
4861 /* Number of elements in line_info_table currently in use.  */
4862 static GTY(()) unsigned line_info_table_in_use;
4863
4864 /* A pointer to the base of a table that contains line information
4865    for each source code line outside of .text in the compilation unit.  */
4866 static GTY ((length ("separate_line_info_table_allocated")))
4867      dw_separate_line_info_ref separate_line_info_table;
4868
4869 /* Number of elements currently allocated for separate_line_info_table.  */
4870 static GTY(()) unsigned separate_line_info_table_allocated;
4871
4872 /* Number of elements in separate_line_info_table currently in use.  */
4873 static GTY(()) unsigned separate_line_info_table_in_use;
4874
4875 /* Size (in elements) of increments by which we may expand the
4876    line_info_table.  */
4877 #define LINE_INFO_TABLE_INCREMENT 1024
4878
4879 /* A pointer to the base of a table that contains a list of publicly
4880    accessible names.  */
4881 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
4882
4883 /* A pointer to the base of a table that contains a list of publicly
4884    accessible types.  */
4885 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
4886
4887 /* Array of dies for which we should generate .debug_arange info.  */
4888 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
4889
4890 /* Number of elements currently allocated for arange_table.  */
4891 static GTY(()) unsigned arange_table_allocated;
4892
4893 /* Number of elements in arange_table currently in use.  */
4894 static GTY(()) unsigned arange_table_in_use;
4895
4896 /* Size (in elements) of increments by which we may expand the
4897    arange_table.  */
4898 #define ARANGE_TABLE_INCREMENT 64
4899
4900 /* Array of dies for which we should generate .debug_ranges info.  */
4901 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
4902
4903 /* Number of elements currently allocated for ranges_table.  */
4904 static GTY(()) unsigned ranges_table_allocated;
4905
4906 /* Number of elements in ranges_table currently in use.  */
4907 static GTY(()) unsigned ranges_table_in_use;
4908
4909 /* Array of pairs of labels referenced in ranges_table.  */
4910 static GTY ((length ("ranges_by_label_allocated")))
4911      dw_ranges_by_label_ref ranges_by_label;
4912
4913 /* Number of elements currently allocated for ranges_by_label.  */
4914 static GTY(()) unsigned ranges_by_label_allocated;
4915
4916 /* Number of elements in ranges_by_label currently in use.  */
4917 static GTY(()) unsigned ranges_by_label_in_use;
4918
4919 /* Size (in elements) of increments by which we may expand the
4920    ranges_table.  */
4921 #define RANGES_TABLE_INCREMENT 64
4922
4923 /* Whether we have location lists that need outputting */
4924 static GTY(()) bool have_location_lists;
4925
4926 /* Unique label counter.  */
4927 static GTY(()) unsigned int loclabel_num;
4928
4929 #ifdef DWARF2_DEBUGGING_INFO
4930 /* Record whether the function being analyzed contains inlined functions.  */
4931 static int current_function_has_inlines;
4932 #endif
4933 #if 0 && defined (MIPS_DEBUGGING_INFO)
4934 static int comp_unit_has_inlines;
4935 #endif
4936
4937 /* The last file entry emitted by maybe_emit_file().  */
4938 static GTY(()) struct dwarf_file_data * last_emitted_file;
4939
4940 /* Number of internal labels generated by gen_internal_sym().  */
4941 static GTY(()) int label_num;
4942
4943 /* Cached result of previous call to lookup_filename.  */
4944 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
4945
4946 #ifdef DWARF2_DEBUGGING_INFO
4947
4948 /* Offset from the "steady-state frame pointer" to the frame base,
4949    within the current function.  */
4950 static HOST_WIDE_INT frame_pointer_fb_offset;
4951
4952 /* Forward declarations for functions defined in this file.  */
4953
4954 static int is_pseudo_reg (const_rtx);
4955 static tree type_main_variant (tree);
4956 static int is_tagged_type (const_tree);
4957 static const char *dwarf_tag_name (unsigned);
4958 static const char *dwarf_attr_name (unsigned);
4959 static const char *dwarf_form_name (unsigned);
4960 static tree decl_ultimate_origin (const_tree);
4961 static tree decl_class_context (tree);
4962 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
4963 static inline enum dw_val_class AT_class (dw_attr_ref);
4964 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
4965 static inline unsigned AT_flag (dw_attr_ref);
4966 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
4967 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
4968 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
4969 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
4970 static void add_AT_long_long (dw_die_ref, enum dwarf_attribute, unsigned long,
4971                               unsigned long);
4972 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
4973                                unsigned int, unsigned char *);
4974 static hashval_t debug_str_do_hash (const void *);
4975 static int debug_str_eq (const void *, const void *);
4976 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
4977 static inline const char *AT_string (dw_attr_ref);
4978 static int AT_string_form (dw_attr_ref);
4979 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
4980 static void add_AT_specification (dw_die_ref, dw_die_ref);
4981 static inline dw_die_ref AT_ref (dw_attr_ref);
4982 static inline int AT_ref_external (dw_attr_ref);
4983 static inline void set_AT_ref_external (dw_attr_ref, int);
4984 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
4985 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
4986 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
4987 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
4988                              dw_loc_list_ref);
4989 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
4990 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
4991 static inline rtx AT_addr (dw_attr_ref);
4992 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
4993 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
4994 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
4995 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
4996                            unsigned HOST_WIDE_INT);
4997 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
4998                                unsigned long);
4999 static inline const char *AT_lbl (dw_attr_ref);
5000 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5001 static const char *get_AT_low_pc (dw_die_ref);
5002 static const char *get_AT_hi_pc (dw_die_ref);
5003 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5004 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5005 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5006 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5007 static bool is_c_family (void);
5008 static bool is_cxx (void);
5009 static bool is_java (void);
5010 static bool is_fortran (void);
5011 static bool is_ada (void);
5012 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5013 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5014 static void add_child_die (dw_die_ref, dw_die_ref);
5015 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5016 static dw_die_ref lookup_type_die (tree);
5017 static void equate_type_number_to_die (tree, dw_die_ref);
5018 static hashval_t decl_die_table_hash (const void *);
5019 static int decl_die_table_eq (const void *, const void *);
5020 static dw_die_ref lookup_decl_die (tree);
5021 static hashval_t common_block_die_table_hash (const void *);
5022 static int common_block_die_table_eq (const void *, const void *);
5023 static hashval_t decl_loc_table_hash (const void *);
5024 static int decl_loc_table_eq (const void *, const void *);
5025 static var_loc_list *lookup_decl_loc (const_tree);
5026 static void equate_decl_number_to_die (tree, dw_die_ref);
5027 static void add_var_loc_to_decl (tree, struct var_loc_node *);
5028 static void print_spaces (FILE *);
5029 static void print_die (dw_die_ref, FILE *);
5030 static void print_dwarf_line_table (FILE *);
5031 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5032 static dw_die_ref pop_compile_unit (dw_die_ref);
5033 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5034 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5035 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5036 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
5037 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
5038 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
5039 static int same_die_p (dw_die_ref, dw_die_ref, int *);
5040 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
5041 static void compute_section_prefix (dw_die_ref);
5042 static int is_type_die (dw_die_ref);
5043 static int is_comdat_die (dw_die_ref);
5044 static int is_symbol_die (dw_die_ref);
5045 static void assign_symbol_names (dw_die_ref);
5046 static void break_out_includes (dw_die_ref);
5047 static hashval_t htab_cu_hash (const void *);
5048 static int htab_cu_eq (const void *, const void *);
5049 static void htab_cu_del (void *);
5050 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
5051 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
5052 static void add_sibling_attributes (dw_die_ref);
5053 static void build_abbrev_table (dw_die_ref);
5054 static void output_location_lists (dw_die_ref);
5055 static int constant_size (unsigned HOST_WIDE_INT);
5056 static unsigned long size_of_die (dw_die_ref);
5057 static void calc_die_sizes (dw_die_ref);
5058 static void mark_dies (dw_die_ref);
5059 static void unmark_dies (dw_die_ref);
5060 static void unmark_all_dies (dw_die_ref);
5061 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
5062 static unsigned long size_of_aranges (void);
5063 static enum dwarf_form value_format (dw_attr_ref);
5064 static void output_value_format (dw_attr_ref);
5065 static void output_abbrev_section (void);
5066 static void output_die_symbol (dw_die_ref);
5067 static void output_die (dw_die_ref);
5068 static void output_compilation_unit_header (void);
5069 static void output_comp_unit (dw_die_ref, int);
5070 static const char *dwarf2_name (tree, int);
5071 static void add_pubname (tree, dw_die_ref);
5072 static void add_pubname_string (const char *, dw_die_ref);
5073 static void add_pubtype (tree, dw_die_ref);
5074 static void output_pubnames (VEC (pubname_entry,gc) *);
5075 static void add_arange (tree, dw_die_ref);
5076 static void output_aranges (void);
5077 static unsigned int add_ranges_num (int);
5078 static unsigned int add_ranges (const_tree);
5079 static unsigned int add_ranges_by_labels (const char *, const char *);
5080 static void output_ranges (void);
5081 static void output_line_info (void);
5082 static void output_file_names (void);
5083 static dw_die_ref base_type_die (tree);
5084 static int is_base_type (tree);
5085 static bool is_subrange_type (const_tree);
5086 static dw_die_ref subrange_type_die (tree, dw_die_ref);
5087 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
5088 static int type_is_enum (const_tree);
5089 static unsigned int dbx_reg_number (const_rtx);
5090 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
5091 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
5092 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
5093                                                 enum var_init_status);
5094 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
5095                                                      enum var_init_status);
5096 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
5097                                          enum var_init_status);
5098 static int is_based_loc (const_rtx);
5099 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
5100                                             enum var_init_status);
5101 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
5102                                                enum var_init_status);
5103 static dw_loc_descr_ref loc_descriptor (rtx, enum var_init_status);
5104 static dw_loc_descr_ref loc_descriptor_from_tree_1 (tree, int);
5105 static dw_loc_descr_ref loc_descriptor_from_tree (tree);
5106 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
5107 static tree field_type (const_tree);
5108 static unsigned int simple_type_align_in_bits (const_tree);
5109 static unsigned int simple_decl_align_in_bits (const_tree);
5110 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
5111 static HOST_WIDE_INT field_byte_offset (const_tree);
5112 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
5113                                          dw_loc_descr_ref);
5114 static void add_data_member_location_attribute (dw_die_ref, tree);
5115 static void add_const_value_attribute (dw_die_ref, rtx);
5116 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
5117 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
5118 static void insert_float (const_rtx, unsigned char *);
5119 static rtx rtl_for_decl_location (tree);
5120 static void add_location_or_const_value_attribute (dw_die_ref, tree,
5121                                                    enum dwarf_attribute);
5122 static void tree_add_const_value_attribute (dw_die_ref, tree);
5123 static void add_name_attribute (dw_die_ref, const char *);
5124 static void add_comp_dir_attribute (dw_die_ref);
5125 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
5126 static void add_subscript_info (dw_die_ref, tree, bool);
5127 static void add_byte_size_attribute (dw_die_ref, tree);
5128 static void add_bit_offset_attribute (dw_die_ref, tree);
5129 static void add_bit_size_attribute (dw_die_ref, tree);
5130 static void add_prototyped_attribute (dw_die_ref, tree);
5131 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
5132 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
5133 static void add_src_coords_attributes (dw_die_ref, tree);
5134 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
5135 static void push_decl_scope (tree);
5136 static void pop_decl_scope (void);
5137 static dw_die_ref scope_die_for (tree, dw_die_ref);
5138 static inline int local_scope_p (dw_die_ref);
5139 static inline int class_or_namespace_scope_p (dw_die_ref);
5140 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
5141 static void add_calling_convention_attribute (dw_die_ref, tree);
5142 static const char *type_tag (const_tree);
5143 static tree member_declared_type (const_tree);
5144 #if 0
5145 static const char *decl_start_label (tree);
5146 #endif
5147 static void gen_array_type_die (tree, dw_die_ref);
5148 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
5149 #if 0
5150 static void gen_entry_point_die (tree, dw_die_ref);
5151 #endif
5152 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
5153 static dw_die_ref gen_formal_parameter_die (tree, tree, dw_die_ref);
5154 static void gen_unspecified_parameters_die (tree, dw_die_ref);
5155 static void gen_formal_types_die (tree, dw_die_ref);
5156 static void gen_subprogram_die (tree, dw_die_ref);
5157 static void gen_variable_die (tree, tree, dw_die_ref);
5158 static void gen_const_die (tree, dw_die_ref);
5159 static void gen_label_die (tree, dw_die_ref);
5160 static void gen_lexical_block_die (tree, dw_die_ref, int);
5161 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
5162 static void gen_field_die (tree, dw_die_ref);
5163 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
5164 static dw_die_ref gen_compile_unit_die (const char *);
5165 static void gen_inheritance_die (tree, tree, dw_die_ref);
5166 static void gen_member_die (tree, dw_die_ref);
5167 static void gen_struct_or_union_type_die (tree, dw_die_ref,
5168                                                 enum debug_info_usage);
5169 static void gen_subroutine_type_die (tree, dw_die_ref);
5170 static void gen_typedef_die (tree, dw_die_ref);
5171 static void gen_type_die (tree, dw_die_ref);
5172 static void gen_block_die (tree, dw_die_ref, int);
5173 static void decls_for_scope (tree, dw_die_ref, int);
5174 static int is_redundant_typedef (const_tree);
5175 static void gen_namespace_die (tree, dw_die_ref);
5176 static void gen_decl_die (tree, tree, dw_die_ref);
5177 static dw_die_ref force_decl_die (tree);
5178 static dw_die_ref force_type_die (tree);
5179 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
5180 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
5181 static struct dwarf_file_data * lookup_filename (const char *);
5182 static void retry_incomplete_types (void);
5183 static void gen_type_die_for_member (tree, tree, dw_die_ref);
5184 static void splice_child_die (dw_die_ref, dw_die_ref);
5185 static int file_info_cmp (const void *, const void *);
5186 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
5187                                      const char *, const char *, unsigned);
5188 static void add_loc_descr_to_loc_list (dw_loc_list_ref *, dw_loc_descr_ref,
5189                                        const char *, const char *,
5190                                        const char *);
5191 static void output_loc_list (dw_loc_list_ref);
5192 static char *gen_internal_sym (const char *);
5193
5194 static void prune_unmark_dies (dw_die_ref);
5195 static void prune_unused_types_mark (dw_die_ref, int);
5196 static void prune_unused_types_walk (dw_die_ref);
5197 static void prune_unused_types_walk_attribs (dw_die_ref);
5198 static void prune_unused_types_prune (dw_die_ref);
5199 static void prune_unused_types (void);
5200 static int maybe_emit_file (struct dwarf_file_data *fd);
5201
5202 /* Section names used to hold DWARF debugging information.  */
5203 #ifndef DEBUG_INFO_SECTION
5204 #define DEBUG_INFO_SECTION      ".debug_info"
5205 #endif
5206 #ifndef DEBUG_ABBREV_SECTION
5207 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
5208 #endif
5209 #ifndef DEBUG_ARANGES_SECTION
5210 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
5211 #endif
5212 #ifndef DEBUG_MACINFO_SECTION
5213 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
5214 #endif
5215 #ifndef DEBUG_LINE_SECTION
5216 #define DEBUG_LINE_SECTION      ".debug_line"
5217 #endif
5218 #ifndef DEBUG_LOC_SECTION
5219 #define DEBUG_LOC_SECTION       ".debug_loc"
5220 #endif
5221 #ifndef DEBUG_PUBNAMES_SECTION
5222 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
5223 #endif
5224 #ifndef DEBUG_STR_SECTION
5225 #define DEBUG_STR_SECTION       ".debug_str"
5226 #endif
5227 #ifndef DEBUG_RANGES_SECTION
5228 #define DEBUG_RANGES_SECTION    ".debug_ranges"
5229 #endif
5230
5231 /* Standard ELF section names for compiled code and data.  */
5232 #ifndef TEXT_SECTION_NAME
5233 #define TEXT_SECTION_NAME       ".text"
5234 #endif
5235
5236 /* Section flags for .debug_str section.  */
5237 #define DEBUG_STR_SECTION_FLAGS \
5238   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
5239    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
5240    : SECTION_DEBUG)
5241
5242 /* Labels we insert at beginning sections we can reference instead of
5243    the section names themselves.  */
5244
5245 #ifndef TEXT_SECTION_LABEL
5246 #define TEXT_SECTION_LABEL              "Ltext"
5247 #endif
5248 #ifndef COLD_TEXT_SECTION_LABEL
5249 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
5250 #endif
5251 #ifndef DEBUG_LINE_SECTION_LABEL
5252 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
5253 #endif
5254 #ifndef DEBUG_INFO_SECTION_LABEL
5255 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
5256 #endif
5257 #ifndef DEBUG_ABBREV_SECTION_LABEL
5258 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
5259 #endif
5260 #ifndef DEBUG_LOC_SECTION_LABEL
5261 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
5262 #endif
5263 #ifndef DEBUG_RANGES_SECTION_LABEL
5264 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
5265 #endif
5266 #ifndef DEBUG_MACINFO_SECTION_LABEL
5267 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
5268 #endif
5269
5270 /* Definitions of defaults for formats and names of various special
5271    (artificial) labels which may be generated within this file (when the -g
5272    options is used and DWARF2_DEBUGGING_INFO is in effect.
5273    If necessary, these may be overridden from within the tm.h file, but
5274    typically, overriding these defaults is unnecessary.  */
5275
5276 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
5277 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5278 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5279 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
5280 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5281 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5282 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5283 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5284 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
5285 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
5286
5287 #ifndef TEXT_END_LABEL
5288 #define TEXT_END_LABEL          "Letext"
5289 #endif
5290 #ifndef COLD_END_LABEL
5291 #define COLD_END_LABEL          "Letext_cold"
5292 #endif
5293 #ifndef BLOCK_BEGIN_LABEL
5294 #define BLOCK_BEGIN_LABEL       "LBB"
5295 #endif
5296 #ifndef BLOCK_END_LABEL
5297 #define BLOCK_END_LABEL         "LBE"
5298 #endif
5299 #ifndef LINE_CODE_LABEL
5300 #define LINE_CODE_LABEL         "LM"
5301 #endif
5302 #ifndef SEPARATE_LINE_CODE_LABEL
5303 #define SEPARATE_LINE_CODE_LABEL        "LSM"
5304 #endif
5305
5306 \f
5307 /* We allow a language front-end to designate a function that is to be
5308    called to "demangle" any name before it is put into a DIE.  */
5309
5310 static const char *(*demangle_name_func) (const char *);
5311
5312 void
5313 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
5314 {
5315   demangle_name_func = func;
5316 }
5317
5318 /* Test if rtl node points to a pseudo register.  */
5319
5320 static inline int
5321 is_pseudo_reg (const_rtx rtl)
5322 {
5323   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
5324           || (GET_CODE (rtl) == SUBREG
5325               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
5326 }
5327
5328 /* Return a reference to a type, with its const and volatile qualifiers
5329    removed.  */
5330
5331 static inline tree
5332 type_main_variant (tree type)
5333 {
5334   type = TYPE_MAIN_VARIANT (type);
5335
5336   /* ??? There really should be only one main variant among any group of
5337      variants of a given type (and all of the MAIN_VARIANT values for all
5338      members of the group should point to that one type) but sometimes the C
5339      front-end messes this up for array types, so we work around that bug
5340      here.  */
5341   if (TREE_CODE (type) == ARRAY_TYPE)
5342     while (type != TYPE_MAIN_VARIANT (type))
5343       type = TYPE_MAIN_VARIANT (type);
5344
5345   return type;
5346 }
5347
5348 /* Return nonzero if the given type node represents a tagged type.  */
5349
5350 static inline int
5351 is_tagged_type (const_tree type)
5352 {
5353   enum tree_code code = TREE_CODE (type);
5354
5355   return (code == RECORD_TYPE || code == UNION_TYPE
5356           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
5357 }
5358
5359 /* Convert a DIE tag into its string name.  */
5360
5361 static const char *
5362 dwarf_tag_name (unsigned int tag)
5363 {
5364   switch (tag)
5365     {
5366     case DW_TAG_padding:
5367       return "DW_TAG_padding";
5368     case DW_TAG_array_type:
5369       return "DW_TAG_array_type";
5370     case DW_TAG_class_type:
5371       return "DW_TAG_class_type";
5372     case DW_TAG_entry_point:
5373       return "DW_TAG_entry_point";
5374     case DW_TAG_enumeration_type:
5375       return "DW_TAG_enumeration_type";
5376     case DW_TAG_formal_parameter:
5377       return "DW_TAG_formal_parameter";
5378     case DW_TAG_imported_declaration:
5379       return "DW_TAG_imported_declaration";
5380     case DW_TAG_label:
5381       return "DW_TAG_label";
5382     case DW_TAG_lexical_block:
5383       return "DW_TAG_lexical_block";
5384     case DW_TAG_member:
5385       return "DW_TAG_member";
5386     case DW_TAG_pointer_type:
5387       return "DW_TAG_pointer_type";
5388     case DW_TAG_reference_type:
5389       return "DW_TAG_reference_type";
5390     case DW_TAG_compile_unit:
5391       return "DW_TAG_compile_unit";
5392     case DW_TAG_string_type:
5393       return "DW_TAG_string_type";
5394     case DW_TAG_structure_type:
5395       return "DW_TAG_structure_type";
5396     case DW_TAG_subroutine_type:
5397       return "DW_TAG_subroutine_type";
5398     case DW_TAG_typedef:
5399       return "DW_TAG_typedef";
5400     case DW_TAG_union_type:
5401       return "DW_TAG_union_type";
5402     case DW_TAG_unspecified_parameters:
5403       return "DW_TAG_unspecified_parameters";
5404     case DW_TAG_variant:
5405       return "DW_TAG_variant";
5406     case DW_TAG_common_block:
5407       return "DW_TAG_common_block";
5408     case DW_TAG_common_inclusion:
5409       return "DW_TAG_common_inclusion";
5410     case DW_TAG_inheritance:
5411       return "DW_TAG_inheritance";
5412     case DW_TAG_inlined_subroutine:
5413       return "DW_TAG_inlined_subroutine";
5414     case DW_TAG_module:
5415       return "DW_TAG_module";
5416     case DW_TAG_ptr_to_member_type:
5417       return "DW_TAG_ptr_to_member_type";
5418     case DW_TAG_set_type:
5419       return "DW_TAG_set_type";
5420     case DW_TAG_subrange_type:
5421       return "DW_TAG_subrange_type";
5422     case DW_TAG_with_stmt:
5423       return "DW_TAG_with_stmt";
5424     case DW_TAG_access_declaration:
5425       return "DW_TAG_access_declaration";
5426     case DW_TAG_base_type:
5427       return "DW_TAG_base_type";
5428     case DW_TAG_catch_block:
5429       return "DW_TAG_catch_block";
5430     case DW_TAG_const_type:
5431       return "DW_TAG_const_type";
5432     case DW_TAG_constant:
5433       return "DW_TAG_constant";
5434     case DW_TAG_enumerator:
5435       return "DW_TAG_enumerator";
5436     case DW_TAG_file_type:
5437       return "DW_TAG_file_type";
5438     case DW_TAG_friend:
5439       return "DW_TAG_friend";
5440     case DW_TAG_namelist:
5441       return "DW_TAG_namelist";
5442     case DW_TAG_namelist_item:
5443       return "DW_TAG_namelist_item";
5444     case DW_TAG_packed_type:
5445       return "DW_TAG_packed_type";
5446     case DW_TAG_subprogram:
5447       return "DW_TAG_subprogram";
5448     case DW_TAG_template_type_param:
5449       return "DW_TAG_template_type_param";
5450     case DW_TAG_template_value_param:
5451       return "DW_TAG_template_value_param";
5452     case DW_TAG_thrown_type:
5453       return "DW_TAG_thrown_type";
5454     case DW_TAG_try_block:
5455       return "DW_TAG_try_block";
5456     case DW_TAG_variant_part:
5457       return "DW_TAG_variant_part";
5458     case DW_TAG_variable:
5459       return "DW_TAG_variable";
5460     case DW_TAG_volatile_type:
5461       return "DW_TAG_volatile_type";
5462     case DW_TAG_dwarf_procedure:
5463       return "DW_TAG_dwarf_procedure";
5464     case DW_TAG_restrict_type:
5465       return "DW_TAG_restrict_type";
5466     case DW_TAG_interface_type:
5467       return "DW_TAG_interface_type";
5468     case DW_TAG_namespace:
5469       return "DW_TAG_namespace";
5470     case DW_TAG_imported_module:
5471       return "DW_TAG_imported_module";
5472     case DW_TAG_unspecified_type:
5473       return "DW_TAG_unspecified_type";
5474     case DW_TAG_partial_unit:
5475       return "DW_TAG_partial_unit";
5476     case DW_TAG_imported_unit:
5477       return "DW_TAG_imported_unit";
5478     case DW_TAG_condition:
5479       return "DW_TAG_condition";
5480     case DW_TAG_shared_type:
5481       return "DW_TAG_shared_type";
5482     case DW_TAG_MIPS_loop:
5483       return "DW_TAG_MIPS_loop";
5484     case DW_TAG_format_label:
5485       return "DW_TAG_format_label";
5486     case DW_TAG_function_template:
5487       return "DW_TAG_function_template";
5488     case DW_TAG_class_template:
5489       return "DW_TAG_class_template";
5490     case DW_TAG_GNU_BINCL:
5491       return "DW_TAG_GNU_BINCL";
5492     case DW_TAG_GNU_EINCL:
5493       return "DW_TAG_GNU_EINCL";
5494     default:
5495       return "DW_TAG_<unknown>";
5496     }
5497 }
5498
5499 /* Convert a DWARF attribute code into its string name.  */
5500
5501 static const char *
5502 dwarf_attr_name (unsigned int attr)
5503 {
5504   switch (attr)
5505     {
5506     case DW_AT_sibling:
5507       return "DW_AT_sibling";
5508     case DW_AT_location:
5509       return "DW_AT_location";
5510     case DW_AT_name:
5511       return "DW_AT_name";
5512     case DW_AT_ordering:
5513       return "DW_AT_ordering";
5514     case DW_AT_subscr_data:
5515       return "DW_AT_subscr_data";
5516     case DW_AT_byte_size:
5517       return "DW_AT_byte_size";
5518     case DW_AT_bit_offset:
5519       return "DW_AT_bit_offset";
5520     case DW_AT_bit_size:
5521       return "DW_AT_bit_size";
5522     case DW_AT_element_list:
5523       return "DW_AT_element_list";
5524     case DW_AT_stmt_list:
5525       return "DW_AT_stmt_list";
5526     case DW_AT_low_pc:
5527       return "DW_AT_low_pc";
5528     case DW_AT_high_pc:
5529       return "DW_AT_high_pc";
5530     case DW_AT_language:
5531       return "DW_AT_language";
5532     case DW_AT_member:
5533       return "DW_AT_member";
5534     case DW_AT_discr:
5535       return "DW_AT_discr";
5536     case DW_AT_discr_value:
5537       return "DW_AT_discr_value";
5538     case DW_AT_visibility:
5539       return "DW_AT_visibility";
5540     case DW_AT_import:
5541       return "DW_AT_import";
5542     case DW_AT_string_length:
5543       return "DW_AT_string_length";
5544     case DW_AT_common_reference:
5545       return "DW_AT_common_reference";
5546     case DW_AT_comp_dir:
5547       return "DW_AT_comp_dir";
5548     case DW_AT_const_value:
5549       return "DW_AT_const_value";
5550     case DW_AT_containing_type:
5551       return "DW_AT_containing_type";
5552     case DW_AT_default_value:
5553       return "DW_AT_default_value";
5554     case DW_AT_inline:
5555       return "DW_AT_inline";
5556     case DW_AT_is_optional:
5557       return "DW_AT_is_optional";
5558     case DW_AT_lower_bound:
5559       return "DW_AT_lower_bound";
5560     case DW_AT_producer:
5561       return "DW_AT_producer";
5562     case DW_AT_prototyped:
5563       return "DW_AT_prototyped";
5564     case DW_AT_return_addr:
5565       return "DW_AT_return_addr";
5566     case DW_AT_start_scope:
5567       return "DW_AT_start_scope";
5568     case DW_AT_bit_stride:
5569       return "DW_AT_bit_stride";
5570     case DW_AT_upper_bound:
5571       return "DW_AT_upper_bound";
5572     case DW_AT_abstract_origin:
5573       return "DW_AT_abstract_origin";
5574     case DW_AT_accessibility:
5575       return "DW_AT_accessibility";
5576     case DW_AT_address_class:
5577       return "DW_AT_address_class";
5578     case DW_AT_artificial:
5579       return "DW_AT_artificial";
5580     case DW_AT_base_types:
5581       return "DW_AT_base_types";
5582     case DW_AT_calling_convention:
5583       return "DW_AT_calling_convention";
5584     case DW_AT_count:
5585       return "DW_AT_count";
5586     case DW_AT_data_member_location:
5587       return "DW_AT_data_member_location";
5588     case DW_AT_decl_column:
5589       return "DW_AT_decl_column";
5590     case DW_AT_decl_file:
5591       return "DW_AT_decl_file";
5592     case DW_AT_decl_line:
5593       return "DW_AT_decl_line";
5594     case DW_AT_declaration:
5595       return "DW_AT_declaration";
5596     case DW_AT_discr_list:
5597       return "DW_AT_discr_list";
5598     case DW_AT_encoding:
5599       return "DW_AT_encoding";
5600     case DW_AT_external:
5601       return "DW_AT_external";
5602     case DW_AT_frame_base:
5603       return "DW_AT_frame_base";
5604     case DW_AT_friend:
5605       return "DW_AT_friend";
5606     case DW_AT_identifier_case:
5607       return "DW_AT_identifier_case";
5608     case DW_AT_macro_info:
5609       return "DW_AT_macro_info";
5610     case DW_AT_namelist_items:
5611       return "DW_AT_namelist_items";
5612     case DW_AT_priority:
5613       return "DW_AT_priority";
5614     case DW_AT_segment:
5615       return "DW_AT_segment";
5616     case DW_AT_specification:
5617       return "DW_AT_specification";
5618     case DW_AT_static_link:
5619       return "DW_AT_static_link";
5620     case DW_AT_type:
5621       return "DW_AT_type";
5622     case DW_AT_use_location:
5623       return "DW_AT_use_location";
5624     case DW_AT_variable_parameter:
5625       return "DW_AT_variable_parameter";
5626     case DW_AT_virtuality:
5627       return "DW_AT_virtuality";
5628     case DW_AT_vtable_elem_location:
5629       return "DW_AT_vtable_elem_location";
5630
5631     case DW_AT_allocated:
5632       return "DW_AT_allocated";
5633     case DW_AT_associated:
5634       return "DW_AT_associated";
5635     case DW_AT_data_location:
5636       return "DW_AT_data_location";
5637     case DW_AT_byte_stride:
5638       return "DW_AT_byte_stride";
5639     case DW_AT_entry_pc:
5640       return "DW_AT_entry_pc";
5641     case DW_AT_use_UTF8:
5642       return "DW_AT_use_UTF8";
5643     case DW_AT_extension:
5644       return "DW_AT_extension";
5645     case DW_AT_ranges:
5646       return "DW_AT_ranges";
5647     case DW_AT_trampoline:
5648       return "DW_AT_trampoline";
5649     case DW_AT_call_column:
5650       return "DW_AT_call_column";
5651     case DW_AT_call_file:
5652       return "DW_AT_call_file";
5653     case DW_AT_call_line:
5654       return "DW_AT_call_line";
5655
5656     case DW_AT_MIPS_fde:
5657       return "DW_AT_MIPS_fde";
5658     case DW_AT_MIPS_loop_begin:
5659       return "DW_AT_MIPS_loop_begin";
5660     case DW_AT_MIPS_tail_loop_begin:
5661       return "DW_AT_MIPS_tail_loop_begin";
5662     case DW_AT_MIPS_epilog_begin:
5663       return "DW_AT_MIPS_epilog_begin";
5664     case DW_AT_MIPS_loop_unroll_factor:
5665       return "DW_AT_MIPS_loop_unroll_factor";
5666     case DW_AT_MIPS_software_pipeline_depth:
5667       return "DW_AT_MIPS_software_pipeline_depth";
5668     case DW_AT_MIPS_linkage_name:
5669       return "DW_AT_MIPS_linkage_name";
5670     case DW_AT_MIPS_stride:
5671       return "DW_AT_MIPS_stride";
5672     case DW_AT_MIPS_abstract_name:
5673       return "DW_AT_MIPS_abstract_name";
5674     case DW_AT_MIPS_clone_origin:
5675       return "DW_AT_MIPS_clone_origin";
5676     case DW_AT_MIPS_has_inlines:
5677       return "DW_AT_MIPS_has_inlines";
5678
5679     case DW_AT_sf_names:
5680       return "DW_AT_sf_names";
5681     case DW_AT_src_info:
5682       return "DW_AT_src_info";
5683     case DW_AT_mac_info:
5684       return "DW_AT_mac_info";
5685     case DW_AT_src_coords:
5686       return "DW_AT_src_coords";
5687     case DW_AT_body_begin:
5688       return "DW_AT_body_begin";
5689     case DW_AT_body_end:
5690       return "DW_AT_body_end";
5691     case DW_AT_GNU_vector:
5692       return "DW_AT_GNU_vector";
5693
5694     case DW_AT_VMS_rtnbeg_pd_address:
5695       return "DW_AT_VMS_rtnbeg_pd_address";
5696
5697     default:
5698       return "DW_AT_<unknown>";
5699     }
5700 }
5701
5702 /* Convert a DWARF value form code into its string name.  */
5703
5704 static const char *
5705 dwarf_form_name (unsigned int form)
5706 {
5707   switch (form)
5708     {
5709     case DW_FORM_addr:
5710       return "DW_FORM_addr";
5711     case DW_FORM_block2:
5712       return "DW_FORM_block2";
5713     case DW_FORM_block4:
5714       return "DW_FORM_block4";
5715     case DW_FORM_data2:
5716       return "DW_FORM_data2";
5717     case DW_FORM_data4:
5718       return "DW_FORM_data4";
5719     case DW_FORM_data8:
5720       return "DW_FORM_data8";
5721     case DW_FORM_string:
5722       return "DW_FORM_string";
5723     case DW_FORM_block:
5724       return "DW_FORM_block";
5725     case DW_FORM_block1:
5726       return "DW_FORM_block1";
5727     case DW_FORM_data1:
5728       return "DW_FORM_data1";
5729     case DW_FORM_flag:
5730       return "DW_FORM_flag";
5731     case DW_FORM_sdata:
5732       return "DW_FORM_sdata";
5733     case DW_FORM_strp:
5734       return "DW_FORM_strp";
5735     case DW_FORM_udata:
5736       return "DW_FORM_udata";
5737     case DW_FORM_ref_addr:
5738       return "DW_FORM_ref_addr";
5739     case DW_FORM_ref1:
5740       return "DW_FORM_ref1";
5741     case DW_FORM_ref2:
5742       return "DW_FORM_ref2";
5743     case DW_FORM_ref4:
5744       return "DW_FORM_ref4";
5745     case DW_FORM_ref8:
5746       return "DW_FORM_ref8";
5747     case DW_FORM_ref_udata:
5748       return "DW_FORM_ref_udata";
5749     case DW_FORM_indirect:
5750       return "DW_FORM_indirect";
5751     default:
5752       return "DW_FORM_<unknown>";
5753     }
5754 }
5755 \f
5756 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
5757    instance of an inlined instance of a decl which is local to an inline
5758    function, so we have to trace all of the way back through the origin chain
5759    to find out what sort of node actually served as the original seed for the
5760    given block.  */
5761
5762 static tree
5763 decl_ultimate_origin (const_tree decl)
5764 {
5765   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
5766     return NULL_TREE;
5767
5768   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
5769      nodes in the function to point to themselves; ignore that if
5770      we're trying to output the abstract instance of this function.  */
5771   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
5772     return NULL_TREE;
5773
5774   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
5775      most distant ancestor, this should never happen.  */
5776   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
5777
5778   return DECL_ABSTRACT_ORIGIN (decl);
5779 }
5780
5781 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
5782    of a virtual function may refer to a base class, so we check the 'this'
5783    parameter.  */
5784
5785 static tree
5786 decl_class_context (tree decl)
5787 {
5788   tree context = NULL_TREE;
5789
5790   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
5791     context = DECL_CONTEXT (decl);
5792   else
5793     context = TYPE_MAIN_VARIANT
5794       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
5795
5796   if (context && !TYPE_P (context))
5797     context = NULL_TREE;
5798
5799   return context;
5800 }
5801 \f
5802 /* Add an attribute/value pair to a DIE.  */
5803
5804 static inline void
5805 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
5806 {
5807   /* Maybe this should be an assert?  */
5808   if (die == NULL)
5809     return;
5810
5811   if (die->die_attr == NULL)
5812     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
5813   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
5814 }
5815
5816 static inline enum dw_val_class
5817 AT_class (dw_attr_ref a)
5818 {
5819   return a->dw_attr_val.val_class;
5820 }
5821
5822 /* Add a flag value attribute to a DIE.  */
5823
5824 static inline void
5825 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
5826 {
5827   dw_attr_node attr;
5828
5829   attr.dw_attr = attr_kind;
5830   attr.dw_attr_val.val_class = dw_val_class_flag;
5831   attr.dw_attr_val.v.val_flag = flag;
5832   add_dwarf_attr (die, &attr);
5833 }
5834
5835 static inline unsigned
5836 AT_flag (dw_attr_ref a)
5837 {
5838   gcc_assert (a && AT_class (a) == dw_val_class_flag);
5839   return a->dw_attr_val.v.val_flag;
5840 }
5841
5842 /* Add a signed integer attribute value to a DIE.  */
5843
5844 static inline void
5845 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
5846 {
5847   dw_attr_node attr;
5848
5849   attr.dw_attr = attr_kind;
5850   attr.dw_attr_val.val_class = dw_val_class_const;
5851   attr.dw_attr_val.v.val_int = int_val;
5852   add_dwarf_attr (die, &attr);
5853 }
5854
5855 static inline HOST_WIDE_INT
5856 AT_int (dw_attr_ref a)
5857 {
5858   gcc_assert (a && AT_class (a) == dw_val_class_const);
5859   return a->dw_attr_val.v.val_int;
5860 }
5861
5862 /* Add an unsigned integer attribute value to a DIE.  */
5863
5864 static inline void
5865 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
5866                  unsigned HOST_WIDE_INT unsigned_val)
5867 {
5868   dw_attr_node attr;
5869
5870   attr.dw_attr = attr_kind;
5871   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
5872   attr.dw_attr_val.v.val_unsigned = unsigned_val;
5873   add_dwarf_attr (die, &attr);
5874 }
5875
5876 static inline unsigned HOST_WIDE_INT
5877 AT_unsigned (dw_attr_ref a)
5878 {
5879   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
5880   return a->dw_attr_val.v.val_unsigned;
5881 }
5882
5883 /* Add an unsigned double integer attribute value to a DIE.  */
5884
5885 static inline void
5886 add_AT_long_long (dw_die_ref die, enum dwarf_attribute attr_kind,
5887                   long unsigned int val_hi, long unsigned int val_low)
5888 {
5889   dw_attr_node attr;
5890
5891   attr.dw_attr = attr_kind;
5892   attr.dw_attr_val.val_class = dw_val_class_long_long;
5893   attr.dw_attr_val.v.val_long_long.hi = val_hi;
5894   attr.dw_attr_val.v.val_long_long.low = val_low;
5895   add_dwarf_attr (die, &attr);
5896 }
5897
5898 /* Add a floating point attribute value to a DIE and return it.  */
5899
5900 static inline void
5901 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
5902             unsigned int length, unsigned int elt_size, unsigned char *array)
5903 {
5904   dw_attr_node attr;
5905
5906   attr.dw_attr = attr_kind;
5907   attr.dw_attr_val.val_class = dw_val_class_vec;
5908   attr.dw_attr_val.v.val_vec.length = length;
5909   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
5910   attr.dw_attr_val.v.val_vec.array = array;
5911   add_dwarf_attr (die, &attr);
5912 }
5913
5914 /* Hash and equality functions for debug_str_hash.  */
5915
5916 static hashval_t
5917 debug_str_do_hash (const void *x)
5918 {
5919   return htab_hash_string (((const struct indirect_string_node *)x)->str);
5920 }
5921
5922 static int
5923 debug_str_eq (const void *x1, const void *x2)
5924 {
5925   return strcmp ((((const struct indirect_string_node *)x1)->str),
5926                  (const char *)x2) == 0;
5927 }
5928
5929 /* Add a string attribute value to a DIE.  */
5930
5931 static inline void
5932 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
5933 {
5934   dw_attr_node attr;
5935   struct indirect_string_node *node;
5936   void **slot;
5937
5938   if (! debug_str_hash)
5939     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
5940                                       debug_str_eq, NULL);
5941
5942   slot = htab_find_slot_with_hash (debug_str_hash, str,
5943                                    htab_hash_string (str), INSERT);
5944   if (*slot == NULL)
5945     {
5946       node = (struct indirect_string_node *)
5947                ggc_alloc_cleared (sizeof (struct indirect_string_node));
5948       node->str = ggc_strdup (str);
5949       *slot = node;
5950     }
5951   else
5952     node = (struct indirect_string_node *) *slot;
5953
5954   node->refcount++;
5955
5956   attr.dw_attr = attr_kind;
5957   attr.dw_attr_val.val_class = dw_val_class_str;
5958   attr.dw_attr_val.v.val_str = node;
5959   add_dwarf_attr (die, &attr);
5960 }
5961
5962 static inline const char *
5963 AT_string (dw_attr_ref a)
5964 {
5965   gcc_assert (a && AT_class (a) == dw_val_class_str);
5966   return a->dw_attr_val.v.val_str->str;
5967 }
5968
5969 /* Find out whether a string should be output inline in DIE
5970    or out-of-line in .debug_str section.  */
5971
5972 static int
5973 AT_string_form (dw_attr_ref a)
5974 {
5975   struct indirect_string_node *node;
5976   unsigned int len;
5977   char label[32];
5978
5979   gcc_assert (a && AT_class (a) == dw_val_class_str);
5980
5981   node = a->dw_attr_val.v.val_str;
5982   if (node->form)
5983     return node->form;
5984
5985   len = strlen (node->str) + 1;
5986
5987   /* If the string is shorter or equal to the size of the reference, it is
5988      always better to put it inline.  */
5989   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
5990     return node->form = DW_FORM_string;
5991
5992   /* If we cannot expect the linker to merge strings in .debug_str
5993      section, only put it into .debug_str if it is worth even in this
5994      single module.  */
5995   if ((debug_str_section->common.flags & SECTION_MERGE) == 0
5996       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len)
5997     return node->form = DW_FORM_string;
5998
5999   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
6000   ++dw2_string_counter;
6001   node->label = xstrdup (label);
6002
6003   return node->form = DW_FORM_strp;
6004 }
6005
6006 /* Add a DIE reference attribute value to a DIE.  */
6007
6008 static inline void
6009 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
6010 {
6011   dw_attr_node attr;
6012
6013   attr.dw_attr = attr_kind;
6014   attr.dw_attr_val.val_class = dw_val_class_die_ref;
6015   attr.dw_attr_val.v.val_die_ref.die = targ_die;
6016   attr.dw_attr_val.v.val_die_ref.external = 0;
6017   add_dwarf_attr (die, &attr);
6018 }
6019
6020 /* Add an AT_specification attribute to a DIE, and also make the back
6021    pointer from the specification to the definition.  */
6022
6023 static inline void
6024 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
6025 {
6026   add_AT_die_ref (die, DW_AT_specification, targ_die);
6027   gcc_assert (!targ_die->die_definition);
6028   targ_die->die_definition = die;
6029 }
6030
6031 static inline dw_die_ref
6032 AT_ref (dw_attr_ref a)
6033 {
6034   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
6035   return a->dw_attr_val.v.val_die_ref.die;
6036 }
6037
6038 static inline int
6039 AT_ref_external (dw_attr_ref a)
6040 {
6041   if (a && AT_class (a) == dw_val_class_die_ref)
6042     return a->dw_attr_val.v.val_die_ref.external;
6043
6044   return 0;
6045 }
6046
6047 static inline void
6048 set_AT_ref_external (dw_attr_ref a, int i)
6049 {
6050   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
6051   a->dw_attr_val.v.val_die_ref.external = i;
6052 }
6053
6054 /* Add an FDE reference attribute value to a DIE.  */
6055
6056 static inline void
6057 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
6058 {
6059   dw_attr_node attr;
6060
6061   attr.dw_attr = attr_kind;
6062   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
6063   attr.dw_attr_val.v.val_fde_index = targ_fde;
6064   add_dwarf_attr (die, &attr);
6065 }
6066
6067 /* Add a location description attribute value to a DIE.  */
6068
6069 static inline void
6070 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
6071 {
6072   dw_attr_node attr;
6073
6074   attr.dw_attr = attr_kind;
6075   attr.dw_attr_val.val_class = dw_val_class_loc;
6076   attr.dw_attr_val.v.val_loc = loc;
6077   add_dwarf_attr (die, &attr);
6078 }
6079
6080 static inline dw_loc_descr_ref
6081 AT_loc (dw_attr_ref a)
6082 {
6083   gcc_assert (a && AT_class (a) == dw_val_class_loc);
6084   return a->dw_attr_val.v.val_loc;
6085 }
6086
6087 static inline void
6088 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
6089 {
6090   dw_attr_node attr;
6091
6092   attr.dw_attr = attr_kind;
6093   attr.dw_attr_val.val_class = dw_val_class_loc_list;
6094   attr.dw_attr_val.v.val_loc_list = loc_list;
6095   add_dwarf_attr (die, &attr);
6096   have_location_lists = true;
6097 }
6098
6099 static inline dw_loc_list_ref
6100 AT_loc_list (dw_attr_ref a)
6101 {
6102   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
6103   return a->dw_attr_val.v.val_loc_list;
6104 }
6105
6106 /* Add an address constant attribute value to a DIE.  */
6107
6108 static inline void
6109 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
6110 {
6111   dw_attr_node attr;
6112
6113   attr.dw_attr = attr_kind;
6114   attr.dw_attr_val.val_class = dw_val_class_addr;
6115   attr.dw_attr_val.v.val_addr = addr;
6116   add_dwarf_attr (die, &attr);
6117 }
6118
6119 /* Get the RTX from to an address DIE attribute.  */
6120
6121 static inline rtx
6122 AT_addr (dw_attr_ref a)
6123 {
6124   gcc_assert (a && AT_class (a) == dw_val_class_addr);
6125   return a->dw_attr_val.v.val_addr;
6126 }
6127
6128 /* Add a file attribute value to a DIE.  */
6129
6130 static inline void
6131 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
6132              struct dwarf_file_data *fd)
6133 {
6134   dw_attr_node attr;
6135
6136   attr.dw_attr = attr_kind;
6137   attr.dw_attr_val.val_class = dw_val_class_file;
6138   attr.dw_attr_val.v.val_file = fd;
6139   add_dwarf_attr (die, &attr);
6140 }
6141
6142 /* Get the dwarf_file_data from a file DIE attribute.  */
6143
6144 static inline struct dwarf_file_data *
6145 AT_file (dw_attr_ref a)
6146 {
6147   gcc_assert (a && AT_class (a) == dw_val_class_file);
6148   return a->dw_attr_val.v.val_file;
6149 }
6150
6151 /* Add a label identifier attribute value to a DIE.  */
6152
6153 static inline void
6154 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
6155 {
6156   dw_attr_node attr;
6157
6158   attr.dw_attr = attr_kind;
6159   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
6160   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
6161   add_dwarf_attr (die, &attr);
6162 }
6163
6164 /* Add a section offset attribute value to a DIE, an offset into the
6165    debug_line section.  */
6166
6167 static inline void
6168 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
6169                 const char *label)
6170 {
6171   dw_attr_node attr;
6172
6173   attr.dw_attr = attr_kind;
6174   attr.dw_attr_val.val_class = dw_val_class_lineptr;
6175   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
6176   add_dwarf_attr (die, &attr);
6177 }
6178
6179 /* Add a section offset attribute value to a DIE, an offset into the
6180    debug_macinfo section.  */
6181
6182 static inline void
6183 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
6184                const char *label)
6185 {
6186   dw_attr_node attr;
6187
6188   attr.dw_attr = attr_kind;
6189   attr.dw_attr_val.val_class = dw_val_class_macptr;
6190   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
6191   add_dwarf_attr (die, &attr);
6192 }
6193
6194 /* Add an offset attribute value to a DIE.  */
6195
6196 static inline void
6197 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
6198                unsigned HOST_WIDE_INT offset)
6199 {
6200   dw_attr_node attr;
6201
6202   attr.dw_attr = attr_kind;
6203   attr.dw_attr_val.val_class = dw_val_class_offset;
6204   attr.dw_attr_val.v.val_offset = offset;
6205   add_dwarf_attr (die, &attr);
6206 }
6207
6208 /* Add an range_list attribute value to a DIE.  */
6209
6210 static void
6211 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
6212                    long unsigned int offset)
6213 {
6214   dw_attr_node attr;
6215
6216   attr.dw_attr = attr_kind;
6217   attr.dw_attr_val.val_class = dw_val_class_range_list;
6218   attr.dw_attr_val.v.val_offset = offset;
6219   add_dwarf_attr (die, &attr);
6220 }
6221
6222 static inline const char *
6223 AT_lbl (dw_attr_ref a)
6224 {
6225   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
6226                     || AT_class (a) == dw_val_class_lineptr
6227                     || AT_class (a) == dw_val_class_macptr));
6228   return a->dw_attr_val.v.val_lbl_id;
6229 }
6230
6231 /* Get the attribute of type attr_kind.  */
6232
6233 static dw_attr_ref
6234 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
6235 {
6236   dw_attr_ref a;
6237   unsigned ix;
6238   dw_die_ref spec = NULL;
6239
6240   if (! die)
6241     return NULL;
6242
6243   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6244     if (a->dw_attr == attr_kind)
6245       return a;
6246     else if (a->dw_attr == DW_AT_specification
6247              || a->dw_attr == DW_AT_abstract_origin)
6248       spec = AT_ref (a);
6249
6250   if (spec)
6251     return get_AT (spec, attr_kind);
6252
6253   return NULL;
6254 }
6255
6256 /* Return the "low pc" attribute value, typically associated with a subprogram
6257    DIE.  Return null if the "low pc" attribute is either not present, or if it
6258    cannot be represented as an assembler label identifier.  */
6259
6260 static inline const char *
6261 get_AT_low_pc (dw_die_ref die)
6262 {
6263   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
6264
6265   return a ? AT_lbl (a) : NULL;
6266 }
6267
6268 /* Return the "high pc" attribute value, typically associated with a subprogram
6269    DIE.  Return null if the "high pc" attribute is either not present, or if it
6270    cannot be represented as an assembler label identifier.  */
6271
6272 static inline const char *
6273 get_AT_hi_pc (dw_die_ref die)
6274 {
6275   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
6276
6277   return a ? AT_lbl (a) : NULL;
6278 }
6279
6280 /* Return the value of the string attribute designated by ATTR_KIND, or
6281    NULL if it is not present.  */
6282
6283 static inline const char *
6284 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
6285 {
6286   dw_attr_ref a = get_AT (die, attr_kind);
6287
6288   return a ? AT_string (a) : NULL;
6289 }
6290
6291 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
6292    if it is not present.  */
6293
6294 static inline int
6295 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
6296 {
6297   dw_attr_ref a = get_AT (die, attr_kind);
6298
6299   return a ? AT_flag (a) : 0;
6300 }
6301
6302 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
6303    if it is not present.  */
6304
6305 static inline unsigned
6306 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
6307 {
6308   dw_attr_ref a = get_AT (die, attr_kind);
6309
6310   return a ? AT_unsigned (a) : 0;
6311 }
6312
6313 static inline dw_die_ref
6314 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
6315 {
6316   dw_attr_ref a = get_AT (die, attr_kind);
6317
6318   return a ? AT_ref (a) : NULL;
6319 }
6320
6321 static inline struct dwarf_file_data *
6322 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
6323 {
6324   dw_attr_ref a = get_AT (die, attr_kind);
6325
6326   return a ? AT_file (a) : NULL;
6327 }
6328
6329 /* Return TRUE if the language is C or C++.  */
6330
6331 static inline bool
6332 is_c_family (void)
6333 {
6334   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
6335
6336   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
6337           || lang == DW_LANG_C99
6338           || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
6339 }
6340
6341 /* Return TRUE if the language is C++.  */
6342
6343 static inline bool
6344 is_cxx (void)
6345 {
6346   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
6347
6348   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
6349 }
6350
6351 /* Return TRUE if the language is Fortran.  */
6352
6353 static inline bool
6354 is_fortran (void)
6355 {
6356   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
6357
6358   return (lang == DW_LANG_Fortran77
6359           || lang == DW_LANG_Fortran90
6360           || lang == DW_LANG_Fortran95);
6361 }
6362
6363 /* Return TRUE if the language is Java.  */
6364
6365 static inline bool
6366 is_java (void)
6367 {
6368   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
6369
6370   return lang == DW_LANG_Java;
6371 }
6372
6373 /* Return TRUE if the language is Ada.  */
6374
6375 static inline bool
6376 is_ada (void)
6377 {
6378   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
6379
6380   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
6381 }
6382
6383 /* Remove the specified attribute if present.  */
6384
6385 static void
6386 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
6387 {
6388   dw_attr_ref a;
6389   unsigned ix;
6390
6391   if (! die)
6392     return;
6393
6394   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6395     if (a->dw_attr == attr_kind)
6396       {
6397         if (AT_class (a) == dw_val_class_str)
6398           if (a->dw_attr_val.v.val_str->refcount)
6399             a->dw_attr_val.v.val_str->refcount--;
6400
6401         /* VEC_ordered_remove should help reduce the number of abbrevs
6402            that are needed.  */
6403         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
6404         return;
6405       }
6406 }
6407
6408 /* Remove CHILD from its parent.  PREV must have the property that
6409    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
6410
6411 static void
6412 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
6413 {
6414   gcc_assert (child->die_parent == prev->die_parent);
6415   gcc_assert (prev->die_sib == child);
6416   if (prev == child)
6417     {
6418       gcc_assert (child->die_parent->die_child == child);
6419       prev = NULL;
6420     }
6421   else
6422     prev->die_sib = child->die_sib;
6423   if (child->die_parent->die_child == child)
6424     child->die_parent->die_child = prev;
6425 }
6426
6427 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
6428    matches TAG.  */
6429
6430 static void
6431 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
6432 {
6433   dw_die_ref c;
6434
6435   c = die->die_child;
6436   if (c) do {
6437     dw_die_ref prev = c;
6438     c = c->die_sib;
6439     while (c->die_tag == tag)
6440       {
6441         remove_child_with_prev (c, prev);
6442         /* Might have removed every child.  */
6443         if (c == c->die_sib)
6444           return;
6445         c = c->die_sib;
6446       }
6447   } while (c != die->die_child);
6448 }
6449
6450 /* Add a CHILD_DIE as the last child of DIE.  */
6451
6452 static void
6453 add_child_die (dw_die_ref die, dw_die_ref child_die)
6454 {
6455   /* FIXME this should probably be an assert.  */
6456   if (! die || ! child_die)
6457     return;
6458   gcc_assert (die != child_die);
6459
6460   child_die->die_parent = die;
6461   if (die->die_child)
6462     {
6463       child_die->die_sib = die->die_child->die_sib;
6464       die->die_child->die_sib = child_die;
6465     }
6466   else
6467     child_die->die_sib = child_die;
6468   die->die_child = child_die;
6469 }
6470
6471 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
6472    is the specification, to the end of PARENT's list of children.
6473    This is done by removing and re-adding it.  */
6474
6475 static void
6476 splice_child_die (dw_die_ref parent, dw_die_ref child)
6477 {
6478   dw_die_ref p;
6479
6480   /* We want the declaration DIE from inside the class, not the
6481      specification DIE at toplevel.  */
6482   if (child->die_parent != parent)
6483     {
6484       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
6485
6486       if (tmp)
6487         child = tmp;
6488     }
6489
6490   gcc_assert (child->die_parent == parent
6491               || (child->die_parent
6492                   == get_AT_ref (parent, DW_AT_specification)));
6493
6494   for (p = child->die_parent->die_child; ; p = p->die_sib)
6495     if (p->die_sib == child)
6496       {
6497         remove_child_with_prev (child, p);
6498         break;
6499       }
6500
6501   add_child_die (parent, child);
6502 }
6503
6504 /* Return a pointer to a newly created DIE node.  */
6505
6506 static inline dw_die_ref
6507 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
6508 {
6509   dw_die_ref die = GGC_CNEW (die_node);
6510
6511   die->die_tag = tag_value;
6512
6513   if (parent_die != NULL)
6514     add_child_die (parent_die, die);
6515   else
6516     {
6517       limbo_die_node *limbo_node;
6518
6519       limbo_node = GGC_CNEW (limbo_die_node);
6520       limbo_node->die = die;
6521       limbo_node->created_for = t;
6522       limbo_node->next = limbo_die_list;
6523       limbo_die_list = limbo_node;
6524     }
6525
6526   return die;
6527 }
6528
6529 /* Return the DIE associated with the given type specifier.  */
6530
6531 static inline dw_die_ref
6532 lookup_type_die (tree type)
6533 {
6534   return TYPE_SYMTAB_DIE (type);
6535 }
6536
6537 /* Equate a DIE to a given type specifier.  */
6538
6539 static inline void
6540 equate_type_number_to_die (tree type, dw_die_ref type_die)
6541 {
6542   TYPE_SYMTAB_DIE (type) = type_die;
6543 }
6544
6545 /* Returns a hash value for X (which really is a die_struct).  */
6546
6547 static hashval_t
6548 decl_die_table_hash (const void *x)
6549 {
6550   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
6551 }
6552
6553 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
6554
6555 static int
6556 decl_die_table_eq (const void *x, const void *y)
6557 {
6558   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
6559 }
6560
6561 /* Return the DIE associated with a given declaration.  */
6562
6563 static inline dw_die_ref
6564 lookup_decl_die (tree decl)
6565 {
6566   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
6567 }
6568
6569 /* Returns a hash value for X (which really is a var_loc_list).  */
6570
6571 static hashval_t
6572 decl_loc_table_hash (const void *x)
6573 {
6574   return (hashval_t) ((const var_loc_list *) x)->decl_id;
6575 }
6576
6577 /* Return nonzero if decl_id of var_loc_list X is the same as
6578    UID of decl *Y.  */
6579
6580 static int
6581 decl_loc_table_eq (const void *x, const void *y)
6582 {
6583   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
6584 }
6585
6586 /* Return the var_loc list associated with a given declaration.  */
6587
6588 static inline var_loc_list *
6589 lookup_decl_loc (const_tree decl)
6590 {
6591   return (var_loc_list *)
6592     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
6593 }
6594
6595 /* Equate a DIE to a particular declaration.  */
6596
6597 static void
6598 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
6599 {
6600   unsigned int decl_id = DECL_UID (decl);
6601   void **slot;
6602
6603   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
6604   *slot = decl_die;
6605   decl_die->decl_id = decl_id;
6606 }
6607
6608 /* Add a variable location node to the linked list for DECL.  */
6609
6610 static void
6611 add_var_loc_to_decl (tree decl, struct var_loc_node *loc)
6612 {
6613   unsigned int decl_id = DECL_UID (decl);
6614   var_loc_list *temp;
6615   void **slot;
6616
6617   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
6618   if (*slot == NULL)
6619     {
6620       temp = GGC_CNEW (var_loc_list);
6621       temp->decl_id = decl_id;
6622       *slot = temp;
6623     }
6624   else
6625     temp = (var_loc_list *) *slot;
6626
6627   if (temp->last)
6628     {
6629       /* If the current location is the same as the end of the list,
6630          and either both or neither of the locations is uninitialized,
6631          we have nothing to do.  */
6632       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
6633                          NOTE_VAR_LOCATION_LOC (loc->var_loc_note)))
6634           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
6635                != NOTE_VAR_LOCATION_STATUS (loc->var_loc_note))
6636               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
6637                    == VAR_INIT_STATUS_UNINITIALIZED)
6638                   || (NOTE_VAR_LOCATION_STATUS (loc->var_loc_note)
6639                       == VAR_INIT_STATUS_UNINITIALIZED))))
6640         {
6641           /* Add LOC to the end of list and update LAST.  */
6642           temp->last->next = loc;
6643           temp->last = loc;
6644         }
6645     }
6646   /* Do not add empty location to the beginning of the list.  */
6647   else if (NOTE_VAR_LOCATION_LOC (loc->var_loc_note) != NULL_RTX)
6648     {
6649       temp->first = loc;
6650       temp->last = loc;
6651     }
6652 }
6653 \f
6654 /* Keep track of the number of spaces used to indent the
6655    output of the debugging routines that print the structure of
6656    the DIE internal representation.  */
6657 static int print_indent;
6658
6659 /* Indent the line the number of spaces given by print_indent.  */
6660
6661 static inline void
6662 print_spaces (FILE *outfile)
6663 {
6664   fprintf (outfile, "%*s", print_indent, "");
6665 }
6666
6667 /* Print the information associated with a given DIE, and its children.
6668    This routine is a debugging aid only.  */
6669
6670 static void
6671 print_die (dw_die_ref die, FILE *outfile)
6672 {
6673   dw_attr_ref a;
6674   dw_die_ref c;
6675   unsigned ix;
6676
6677   print_spaces (outfile);
6678   fprintf (outfile, "DIE %4ld: %s\n",
6679            die->die_offset, dwarf_tag_name (die->die_tag));
6680   print_spaces (outfile);
6681   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
6682   fprintf (outfile, " offset: %ld\n", die->die_offset);
6683
6684   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6685     {
6686       print_spaces (outfile);
6687       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
6688
6689       switch (AT_class (a))
6690         {
6691         case dw_val_class_addr:
6692           fprintf (outfile, "address");
6693           break;
6694         case dw_val_class_offset:
6695           fprintf (outfile, "offset");
6696           break;
6697         case dw_val_class_loc:
6698           fprintf (outfile, "location descriptor");
6699           break;
6700         case dw_val_class_loc_list:
6701           fprintf (outfile, "location list -> label:%s",
6702                    AT_loc_list (a)->ll_symbol);
6703           break;
6704         case dw_val_class_range_list:
6705           fprintf (outfile, "range list");
6706           break;
6707         case dw_val_class_const:
6708           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
6709           break;
6710         case dw_val_class_unsigned_const:
6711           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
6712           break;
6713         case dw_val_class_long_long:
6714           fprintf (outfile, "constant (%lu,%lu)",
6715                    a->dw_attr_val.v.val_long_long.hi,
6716                    a->dw_attr_val.v.val_long_long.low);
6717           break;
6718         case dw_val_class_vec:
6719           fprintf (outfile, "floating-point or vector constant");
6720           break;
6721         case dw_val_class_flag:
6722           fprintf (outfile, "%u", AT_flag (a));
6723           break;
6724         case dw_val_class_die_ref:
6725           if (AT_ref (a) != NULL)
6726             {
6727               if (AT_ref (a)->die_symbol)
6728                 fprintf (outfile, "die -> label: %s", AT_ref (a)->die_symbol);
6729               else
6730                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
6731             }
6732           else
6733             fprintf (outfile, "die -> <null>");
6734           break;
6735         case dw_val_class_lbl_id:
6736         case dw_val_class_lineptr:
6737         case dw_val_class_macptr:
6738           fprintf (outfile, "label: %s", AT_lbl (a));
6739           break;
6740         case dw_val_class_str:
6741           if (AT_string (a) != NULL)
6742             fprintf (outfile, "\"%s\"", AT_string (a));
6743           else
6744             fprintf (outfile, "<null>");
6745           break;
6746         case dw_val_class_file:
6747           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
6748                    AT_file (a)->emitted_number);
6749           break;
6750         default:
6751           break;
6752         }
6753
6754       fprintf (outfile, "\n");
6755     }
6756
6757   if (die->die_child != NULL)
6758     {
6759       print_indent += 4;
6760       FOR_EACH_CHILD (die, c, print_die (c, outfile));
6761       print_indent -= 4;
6762     }
6763   if (print_indent == 0)
6764     fprintf (outfile, "\n");
6765 }
6766
6767 /* Print the contents of the source code line number correspondence table.
6768    This routine is a debugging aid only.  */
6769
6770 static void
6771 print_dwarf_line_table (FILE *outfile)
6772 {
6773   unsigned i;
6774   dw_line_info_ref line_info;
6775
6776   fprintf (outfile, "\n\nDWARF source line information\n");
6777   for (i = 1; i < line_info_table_in_use; i++)
6778     {
6779       line_info = &line_info_table[i];
6780       fprintf (outfile, "%5d: %4ld %6ld\n", i,
6781                line_info->dw_file_num,
6782                line_info->dw_line_num);
6783     }
6784
6785   fprintf (outfile, "\n\n");
6786 }
6787
6788 /* Print the information collected for a given DIE.  */
6789
6790 void
6791 debug_dwarf_die (dw_die_ref die)
6792 {
6793   print_die (die, stderr);
6794 }
6795
6796 /* Print all DWARF information collected for the compilation unit.
6797    This routine is a debugging aid only.  */
6798
6799 void
6800 debug_dwarf (void)
6801 {
6802   print_indent = 0;
6803   print_die (comp_unit_die, stderr);
6804   if (! DWARF2_ASM_LINE_DEBUG_INFO)
6805     print_dwarf_line_table (stderr);
6806 }
6807 \f
6808 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
6809    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
6810    DIE that marks the start of the DIEs for this include file.  */
6811
6812 static dw_die_ref
6813 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
6814 {
6815   const char *filename = get_AT_string (bincl_die, DW_AT_name);
6816   dw_die_ref new_unit = gen_compile_unit_die (filename);
6817
6818   new_unit->die_sib = old_unit;
6819   return new_unit;
6820 }
6821
6822 /* Close an include-file CU and reopen the enclosing one.  */
6823
6824 static dw_die_ref
6825 pop_compile_unit (dw_die_ref old_unit)
6826 {
6827   dw_die_ref new_unit = old_unit->die_sib;
6828
6829   old_unit->die_sib = NULL;
6830   return new_unit;
6831 }
6832
6833 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
6834 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
6835
6836 /* Calculate the checksum of a location expression.  */
6837
6838 static inline void
6839 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
6840 {
6841   CHECKSUM (loc->dw_loc_opc);
6842   CHECKSUM (loc->dw_loc_oprnd1);
6843   CHECKSUM (loc->dw_loc_oprnd2);
6844 }
6845
6846 /* Calculate the checksum of an attribute.  */
6847
6848 static void
6849 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
6850 {
6851   dw_loc_descr_ref loc;
6852   rtx r;
6853
6854   CHECKSUM (at->dw_attr);
6855
6856   /* We don't care that this was compiled with a different compiler
6857      snapshot; if the output is the same, that's what matters.  */
6858   if (at->dw_attr == DW_AT_producer)
6859     return;
6860
6861   switch (AT_class (at))
6862     {
6863     case dw_val_class_const:
6864       CHECKSUM (at->dw_attr_val.v.val_int);
6865       break;
6866     case dw_val_class_unsigned_const:
6867       CHECKSUM (at->dw_attr_val.v.val_unsigned);
6868       break;
6869     case dw_val_class_long_long:
6870       CHECKSUM (at->dw_attr_val.v.val_long_long);
6871       break;
6872     case dw_val_class_vec:
6873       CHECKSUM (at->dw_attr_val.v.val_vec);
6874       break;
6875     case dw_val_class_flag:
6876       CHECKSUM (at->dw_attr_val.v.val_flag);
6877       break;
6878     case dw_val_class_str:
6879       CHECKSUM_STRING (AT_string (at));
6880       break;
6881
6882     case dw_val_class_addr:
6883       r = AT_addr (at);
6884       gcc_assert (GET_CODE (r) == SYMBOL_REF);
6885       CHECKSUM_STRING (XSTR (r, 0));
6886       break;
6887
6888     case dw_val_class_offset:
6889       CHECKSUM (at->dw_attr_val.v.val_offset);
6890       break;
6891
6892     case dw_val_class_loc:
6893       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
6894         loc_checksum (loc, ctx);
6895       break;
6896
6897     case dw_val_class_die_ref:
6898       die_checksum (AT_ref (at), ctx, mark);
6899       break;
6900
6901     case dw_val_class_fde_ref:
6902     case dw_val_class_lbl_id:
6903     case dw_val_class_lineptr:
6904     case dw_val_class_macptr:
6905       break;
6906
6907     case dw_val_class_file:
6908       CHECKSUM_STRING (AT_file (at)->filename);
6909       break;
6910
6911     default:
6912       break;
6913     }
6914 }
6915
6916 /* Calculate the checksum of a DIE.  */
6917
6918 static void
6919 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
6920 {
6921   dw_die_ref c;
6922   dw_attr_ref a;
6923   unsigned ix;
6924
6925   /* To avoid infinite recursion.  */
6926   if (die->die_mark)
6927     {
6928       CHECKSUM (die->die_mark);
6929       return;
6930     }
6931   die->die_mark = ++(*mark);
6932
6933   CHECKSUM (die->die_tag);
6934
6935   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
6936     attr_checksum (a, ctx, mark);
6937
6938   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
6939 }
6940
6941 #undef CHECKSUM
6942 #undef CHECKSUM_STRING
6943
6944 /* Do the location expressions look same?  */
6945 static inline int
6946 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
6947 {
6948   return loc1->dw_loc_opc == loc2->dw_loc_opc
6949          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
6950          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
6951 }
6952
6953 /* Do the values look the same?  */
6954 static int
6955 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
6956 {
6957   dw_loc_descr_ref loc1, loc2;
6958   rtx r1, r2;
6959
6960   if (v1->val_class != v2->val_class)
6961     return 0;
6962
6963   switch (v1->val_class)
6964     {
6965     case dw_val_class_const:
6966       return v1->v.val_int == v2->v.val_int;
6967     case dw_val_class_unsigned_const:
6968       return v1->v.val_unsigned == v2->v.val_unsigned;
6969     case dw_val_class_long_long:
6970       return v1->v.val_long_long.hi == v2->v.val_long_long.hi
6971              && v1->v.val_long_long.low == v2->v.val_long_long.low;
6972     case dw_val_class_vec:
6973       if (v1->v.val_vec.length != v2->v.val_vec.length
6974           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
6975         return 0;
6976       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
6977                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
6978         return 0;
6979       return 1;
6980     case dw_val_class_flag:
6981       return v1->v.val_flag == v2->v.val_flag;
6982     case dw_val_class_str:
6983       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
6984
6985     case dw_val_class_addr:
6986       r1 = v1->v.val_addr;
6987       r2 = v2->v.val_addr;
6988       if (GET_CODE (r1) != GET_CODE (r2))
6989         return 0;
6990       gcc_assert (GET_CODE (r1) == SYMBOL_REF);
6991       return !strcmp (XSTR (r1, 0), XSTR (r2, 0));
6992
6993     case dw_val_class_offset:
6994       return v1->v.val_offset == v2->v.val_offset;
6995
6996     case dw_val_class_loc:
6997       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
6998            loc1 && loc2;
6999            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
7000         if (!same_loc_p (loc1, loc2, mark))
7001           return 0;
7002       return !loc1 && !loc2;
7003
7004     case dw_val_class_die_ref:
7005       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
7006
7007     case dw_val_class_fde_ref:
7008     case dw_val_class_lbl_id:
7009     case dw_val_class_lineptr:
7010     case dw_val_class_macptr:
7011       return 1;
7012
7013     case dw_val_class_file:
7014       return v1->v.val_file == v2->v.val_file;
7015
7016     default:
7017       return 1;
7018     }
7019 }
7020
7021 /* Do the attributes look the same?  */
7022
7023 static int
7024 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
7025 {
7026   if (at1->dw_attr != at2->dw_attr)
7027     return 0;
7028
7029   /* We don't care that this was compiled with a different compiler
7030      snapshot; if the output is the same, that's what matters. */
7031   if (at1->dw_attr == DW_AT_producer)
7032     return 1;
7033
7034   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
7035 }
7036
7037 /* Do the dies look the same?  */
7038
7039 static int
7040 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
7041 {
7042   dw_die_ref c1, c2;
7043   dw_attr_ref a1;
7044   unsigned ix;
7045
7046   /* To avoid infinite recursion.  */
7047   if (die1->die_mark)
7048     return die1->die_mark == die2->die_mark;
7049   die1->die_mark = die2->die_mark = ++(*mark);
7050
7051   if (die1->die_tag != die2->die_tag)
7052     return 0;
7053
7054   if (VEC_length (dw_attr_node, die1->die_attr)
7055       != VEC_length (dw_attr_node, die2->die_attr))
7056     return 0;
7057
7058   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
7059     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
7060       return 0;
7061
7062   c1 = die1->die_child;
7063   c2 = die2->die_child;
7064   if (! c1)
7065     {
7066       if (c2)
7067         return 0;
7068     }
7069   else
7070     for (;;)
7071       {
7072         if (!same_die_p (c1, c2, mark))
7073           return 0;
7074         c1 = c1->die_sib;
7075         c2 = c2->die_sib;
7076         if (c1 == die1->die_child)
7077           {
7078             if (c2 == die2->die_child)
7079               break;
7080             else
7081               return 0;
7082           }
7083     }
7084
7085   return 1;
7086 }
7087
7088 /* Do the dies look the same?  Wrapper around same_die_p.  */
7089
7090 static int
7091 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
7092 {
7093   int mark = 0;
7094   int ret = same_die_p (die1, die2, &mark);
7095
7096   unmark_all_dies (die1);
7097   unmark_all_dies (die2);
7098
7099   return ret;
7100 }
7101
7102 /* The prefix to attach to symbols on DIEs in the current comdat debug
7103    info section.  */
7104 static char *comdat_symbol_id;
7105
7106 /* The index of the current symbol within the current comdat CU.  */
7107 static unsigned int comdat_symbol_number;
7108
7109 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
7110    children, and set comdat_symbol_id accordingly.  */
7111
7112 static void
7113 compute_section_prefix (dw_die_ref unit_die)
7114 {
7115   const char *die_name = get_AT_string (unit_die, DW_AT_name);
7116   const char *base = die_name ? lbasename (die_name) : "anonymous";
7117   char *name = XALLOCAVEC (char, strlen (base) + 64);
7118   char *p;
7119   int i, mark;
7120   unsigned char checksum[16];
7121   struct md5_ctx ctx;
7122
7123   /* Compute the checksum of the DIE, then append part of it as hex digits to
7124      the name filename of the unit.  */
7125
7126   md5_init_ctx (&ctx);
7127   mark = 0;
7128   die_checksum (unit_die, &ctx, &mark);
7129   unmark_all_dies (unit_die);
7130   md5_finish_ctx (&ctx, checksum);
7131
7132   sprintf (name, "%s.", base);
7133   clean_symbol_name (name);
7134
7135   p = name + strlen (name);
7136   for (i = 0; i < 4; i++)
7137     {
7138       sprintf (p, "%.2x", checksum[i]);
7139       p += 2;
7140     }
7141
7142   comdat_symbol_id = unit_die->die_symbol = xstrdup (name);
7143   comdat_symbol_number = 0;
7144 }
7145
7146 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
7147
7148 static int
7149 is_type_die (dw_die_ref die)
7150 {
7151   switch (die->die_tag)
7152     {
7153     case DW_TAG_array_type:
7154     case DW_TAG_class_type:
7155     case DW_TAG_interface_type:
7156     case DW_TAG_enumeration_type:
7157     case DW_TAG_pointer_type:
7158     case DW_TAG_reference_type:
7159     case DW_TAG_string_type:
7160     case DW_TAG_structure_type:
7161     case DW_TAG_subroutine_type:
7162     case DW_TAG_union_type:
7163     case DW_TAG_ptr_to_member_type:
7164     case DW_TAG_set_type:
7165     case DW_TAG_subrange_type:
7166     case DW_TAG_base_type:
7167     case DW_TAG_const_type:
7168     case DW_TAG_file_type:
7169     case DW_TAG_packed_type:
7170     case DW_TAG_volatile_type:
7171     case DW_TAG_typedef:
7172       return 1;
7173     default:
7174       return 0;
7175     }
7176 }
7177
7178 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
7179    Basically, we want to choose the bits that are likely to be shared between
7180    compilations (types) and leave out the bits that are specific to individual
7181    compilations (functions).  */
7182
7183 static int
7184 is_comdat_die (dw_die_ref c)
7185 {
7186   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
7187      we do for stabs.  The advantage is a greater likelihood of sharing between
7188      objects that don't include headers in the same order (and therefore would
7189      put the base types in a different comdat).  jason 8/28/00 */
7190
7191   if (c->die_tag == DW_TAG_base_type)
7192     return 0;
7193
7194   if (c->die_tag == DW_TAG_pointer_type
7195       || c->die_tag == DW_TAG_reference_type
7196       || c->die_tag == DW_TAG_const_type
7197       || c->die_tag == DW_TAG_volatile_type)
7198     {
7199       dw_die_ref t = get_AT_ref (c, DW_AT_type);
7200
7201       return t ? is_comdat_die (t) : 0;
7202     }
7203
7204   return is_type_die (c);
7205 }
7206
7207 /* Returns 1 iff C is the sort of DIE that might be referred to from another
7208    compilation unit.  */
7209
7210 static int
7211 is_symbol_die (dw_die_ref c)
7212 {
7213   return (is_type_die (c)
7214           || (get_AT (c, DW_AT_declaration)
7215               && !get_AT (c, DW_AT_specification))
7216           || c->die_tag == DW_TAG_namespace
7217           || c->die_tag == DW_TAG_module);
7218 }
7219
7220 static char *
7221 gen_internal_sym (const char *prefix)
7222 {
7223   char buf[256];
7224
7225   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
7226   return xstrdup (buf);
7227 }
7228
7229 /* Assign symbols to all worthy DIEs under DIE.  */
7230
7231 static void
7232 assign_symbol_names (dw_die_ref die)
7233 {
7234   dw_die_ref c;
7235
7236   if (is_symbol_die (die))
7237     {
7238       if (comdat_symbol_id)
7239         {
7240           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
7241
7242           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
7243                    comdat_symbol_id, comdat_symbol_number++);
7244           die->die_symbol = xstrdup (p);
7245         }
7246       else
7247         die->die_symbol = gen_internal_sym ("LDIE");
7248     }
7249
7250   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
7251 }
7252
7253 struct cu_hash_table_entry
7254 {
7255   dw_die_ref cu;
7256   unsigned min_comdat_num, max_comdat_num;
7257   struct cu_hash_table_entry *next;
7258 };
7259
7260 /* Routines to manipulate hash table of CUs.  */
7261 static hashval_t
7262 htab_cu_hash (const void *of)
7263 {
7264   const struct cu_hash_table_entry *const entry =
7265     (const struct cu_hash_table_entry *) of;
7266
7267   return htab_hash_string (entry->cu->die_symbol);
7268 }
7269
7270 static int
7271 htab_cu_eq (const void *of1, const void *of2)
7272 {
7273   const struct cu_hash_table_entry *const entry1 =
7274     (const struct cu_hash_table_entry *) of1;
7275   const struct die_struct *const entry2 = (const struct die_struct *) of2;
7276
7277   return !strcmp (entry1->cu->die_symbol, entry2->die_symbol);
7278 }
7279
7280 static void
7281 htab_cu_del (void *what)
7282 {
7283   struct cu_hash_table_entry *next,
7284     *entry = (struct cu_hash_table_entry *) what;
7285
7286   while (entry)
7287     {
7288       next = entry->next;
7289       free (entry);
7290       entry = next;
7291     }
7292 }
7293
7294 /* Check whether we have already seen this CU and set up SYM_NUM
7295    accordingly.  */
7296 static int
7297 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
7298 {
7299   struct cu_hash_table_entry dummy;
7300   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
7301
7302   dummy.max_comdat_num = 0;
7303
7304   slot = (struct cu_hash_table_entry **)
7305     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
7306         INSERT);
7307   entry = *slot;
7308
7309   for (; entry; last = entry, entry = entry->next)
7310     {
7311       if (same_die_p_wrap (cu, entry->cu))
7312         break;
7313     }
7314
7315   if (entry)
7316     {
7317       *sym_num = entry->min_comdat_num;
7318       return 1;
7319     }
7320
7321   entry = XCNEW (struct cu_hash_table_entry);
7322   entry->cu = cu;
7323   entry->min_comdat_num = *sym_num = last->max_comdat_num;
7324   entry->next = *slot;
7325   *slot = entry;
7326
7327   return 0;
7328 }
7329
7330 /* Record SYM_NUM to record of CU in HTABLE.  */
7331 static void
7332 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
7333 {
7334   struct cu_hash_table_entry **slot, *entry;
7335
7336   slot = (struct cu_hash_table_entry **)
7337     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_symbol),
7338         NO_INSERT);
7339   entry = *slot;
7340
7341   entry->max_comdat_num = sym_num;
7342 }
7343
7344 /* Traverse the DIE (which is always comp_unit_die), and set up
7345    additional compilation units for each of the include files we see
7346    bracketed by BINCL/EINCL.  */
7347
7348 static void
7349 break_out_includes (dw_die_ref die)
7350 {
7351   dw_die_ref c;
7352   dw_die_ref unit = NULL;
7353   limbo_die_node *node, **pnode;
7354   htab_t cu_hash_table;
7355
7356   c = die->die_child;
7357   if (c) do {
7358     dw_die_ref prev = c;
7359     c = c->die_sib;
7360     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
7361            || (unit && is_comdat_die (c)))
7362       {
7363         dw_die_ref next = c->die_sib;
7364
7365         /* This DIE is for a secondary CU; remove it from the main one.  */
7366         remove_child_with_prev (c, prev);
7367
7368         if (c->die_tag == DW_TAG_GNU_BINCL)
7369           unit = push_new_compile_unit (unit, c);
7370         else if (c->die_tag == DW_TAG_GNU_EINCL)
7371           unit = pop_compile_unit (unit);
7372         else
7373           add_child_die (unit, c);
7374         c = next;
7375         if (c == die->die_child)
7376           break;
7377       }
7378   } while (c != die->die_child);
7379
7380 #if 0
7381   /* We can only use this in debugging, since the frontend doesn't check
7382      to make sure that we leave every include file we enter.  */
7383   gcc_assert (!unit);
7384 #endif
7385
7386   assign_symbol_names (die);
7387   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
7388   for (node = limbo_die_list, pnode = &limbo_die_list;
7389        node;
7390        node = node->next)
7391     {
7392       int is_dupl;
7393
7394       compute_section_prefix (node->die);
7395       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
7396                         &comdat_symbol_number);
7397       assign_symbol_names (node->die);
7398       if (is_dupl)
7399         *pnode = node->next;
7400       else
7401         {
7402           pnode = &node->next;
7403           record_comdat_symbol_number (node->die, cu_hash_table,
7404                 comdat_symbol_number);
7405         }
7406     }
7407   htab_delete (cu_hash_table);
7408 }
7409
7410 /* Traverse the DIE and add a sibling attribute if it may have the
7411    effect of speeding up access to siblings.  To save some space,
7412    avoid generating sibling attributes for DIE's without children.  */
7413
7414 static void
7415 add_sibling_attributes (dw_die_ref die)
7416 {
7417   dw_die_ref c;
7418
7419   if (! die->die_child)
7420     return;
7421
7422   if (die->die_parent && die != die->die_parent->die_child)
7423     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
7424
7425   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
7426 }
7427
7428 /* Output all location lists for the DIE and its children.  */
7429
7430 static void
7431 output_location_lists (dw_die_ref die)
7432 {
7433   dw_die_ref c;
7434   dw_attr_ref a;
7435   unsigned ix;
7436
7437   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7438     if (AT_class (a) == dw_val_class_loc_list)
7439       output_loc_list (AT_loc_list (a));
7440
7441   FOR_EACH_CHILD (die, c, output_location_lists (c));
7442 }
7443
7444 /* The format of each DIE (and its attribute value pairs) is encoded in an
7445    abbreviation table.  This routine builds the abbreviation table and assigns
7446    a unique abbreviation id for each abbreviation entry.  The children of each
7447    die are visited recursively.  */
7448
7449 static void
7450 build_abbrev_table (dw_die_ref die)
7451 {
7452   unsigned long abbrev_id;
7453   unsigned int n_alloc;
7454   dw_die_ref c;
7455   dw_attr_ref a;
7456   unsigned ix;
7457
7458   /* Scan the DIE references, and mark as external any that refer to
7459      DIEs from other CUs (i.e. those which are not marked).  */
7460   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7461     if (AT_class (a) == dw_val_class_die_ref
7462         && AT_ref (a)->die_mark == 0)
7463       {
7464         gcc_assert (AT_ref (a)->die_symbol);
7465
7466         set_AT_ref_external (a, 1);
7467       }
7468
7469   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7470     {
7471       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7472       dw_attr_ref die_a, abbrev_a;
7473       unsigned ix;
7474       bool ok = true;
7475
7476       if (abbrev->die_tag != die->die_tag)
7477         continue;
7478       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
7479         continue;
7480
7481       if (VEC_length (dw_attr_node, abbrev->die_attr)
7482           != VEC_length (dw_attr_node, die->die_attr))
7483         continue;
7484
7485       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
7486         {
7487           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
7488           if ((abbrev_a->dw_attr != die_a->dw_attr)
7489               || (value_format (abbrev_a) != value_format (die_a)))
7490             {
7491               ok = false;
7492               break;
7493             }
7494         }
7495       if (ok)
7496         break;
7497     }
7498
7499   if (abbrev_id >= abbrev_die_table_in_use)
7500     {
7501       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
7502         {
7503           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
7504           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
7505                                             n_alloc);
7506
7507           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
7508                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
7509           abbrev_die_table_allocated = n_alloc;
7510         }
7511
7512       ++abbrev_die_table_in_use;
7513       abbrev_die_table[abbrev_id] = die;
7514     }
7515
7516   die->die_abbrev = abbrev_id;
7517   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
7518 }
7519 \f
7520 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
7521
7522 static int
7523 constant_size (unsigned HOST_WIDE_INT value)
7524 {
7525   int log;
7526
7527   if (value == 0)
7528     log = 0;
7529   else
7530     log = floor_log2 (value);
7531
7532   log = log / 8;
7533   log = 1 << (floor_log2 (log) + 1);
7534
7535   return log;
7536 }
7537
7538 /* Return the size of a DIE as it is represented in the
7539    .debug_info section.  */
7540
7541 static unsigned long
7542 size_of_die (dw_die_ref die)
7543 {
7544   unsigned long size = 0;
7545   dw_attr_ref a;
7546   unsigned ix;
7547
7548   size += size_of_uleb128 (die->die_abbrev);
7549   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7550     {
7551       switch (AT_class (a))
7552         {
7553         case dw_val_class_addr:
7554           size += DWARF2_ADDR_SIZE;
7555           break;
7556         case dw_val_class_offset:
7557           size += DWARF_OFFSET_SIZE;
7558           break;
7559         case dw_val_class_loc:
7560           {
7561             unsigned long lsize = size_of_locs (AT_loc (a));
7562
7563             /* Block length.  */
7564             size += constant_size (lsize);
7565             size += lsize;
7566           }
7567           break;
7568         case dw_val_class_loc_list:
7569           size += DWARF_OFFSET_SIZE;
7570           break;
7571         case dw_val_class_range_list:
7572           size += DWARF_OFFSET_SIZE;
7573           break;
7574         case dw_val_class_const:
7575           size += size_of_sleb128 (AT_int (a));
7576           break;
7577         case dw_val_class_unsigned_const:
7578           size += constant_size (AT_unsigned (a));
7579           break;
7580         case dw_val_class_long_long:
7581           size += 1 + 2*HOST_BITS_PER_LONG/HOST_BITS_PER_CHAR; /* block */
7582           break;
7583         case dw_val_class_vec:
7584           size += constant_size (a->dw_attr_val.v.val_vec.length
7585                                  * a->dw_attr_val.v.val_vec.elt_size)
7586                   + a->dw_attr_val.v.val_vec.length
7587                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
7588           break;
7589         case dw_val_class_flag:
7590           size += 1;
7591           break;
7592         case dw_val_class_die_ref:
7593           if (AT_ref_external (a))
7594             size += DWARF2_ADDR_SIZE;
7595           else
7596             size += DWARF_OFFSET_SIZE;
7597           break;
7598         case dw_val_class_fde_ref:
7599           size += DWARF_OFFSET_SIZE;
7600           break;
7601         case dw_val_class_lbl_id:
7602           size += DWARF2_ADDR_SIZE;
7603           break;
7604         case dw_val_class_lineptr:
7605         case dw_val_class_macptr:
7606           size += DWARF_OFFSET_SIZE;
7607           break;
7608         case dw_val_class_str:
7609           if (AT_string_form (a) == DW_FORM_strp)
7610             size += DWARF_OFFSET_SIZE;
7611           else
7612             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
7613           break;
7614         case dw_val_class_file:
7615           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
7616           break;
7617         default:
7618           gcc_unreachable ();
7619         }
7620     }
7621
7622   return size;
7623 }
7624
7625 /* Size the debugging information associated with a given DIE.  Visits the
7626    DIE's children recursively.  Updates the global variable next_die_offset, on
7627    each time through.  Uses the current value of next_die_offset to update the
7628    die_offset field in each DIE.  */
7629
7630 static void
7631 calc_die_sizes (dw_die_ref die)
7632 {
7633   dw_die_ref c;
7634
7635   die->die_offset = next_die_offset;
7636   next_die_offset += size_of_die (die);
7637
7638   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
7639
7640   if (die->die_child != NULL)
7641     /* Count the null byte used to terminate sibling lists.  */
7642     next_die_offset += 1;
7643 }
7644
7645 /* Set the marks for a die and its children.  We do this so
7646    that we know whether or not a reference needs to use FORM_ref_addr; only
7647    DIEs in the same CU will be marked.  We used to clear out the offset
7648    and use that as the flag, but ran into ordering problems.  */
7649
7650 static void
7651 mark_dies (dw_die_ref die)
7652 {
7653   dw_die_ref c;
7654
7655   gcc_assert (!die->die_mark);
7656
7657   die->die_mark = 1;
7658   FOR_EACH_CHILD (die, c, mark_dies (c));
7659 }
7660
7661 /* Clear the marks for a die and its children.  */
7662
7663 static void
7664 unmark_dies (dw_die_ref die)
7665 {
7666   dw_die_ref c;
7667
7668   gcc_assert (die->die_mark);
7669
7670   die->die_mark = 0;
7671   FOR_EACH_CHILD (die, c, unmark_dies (c));
7672 }
7673
7674 /* Clear the marks for a die, its children and referred dies.  */
7675
7676 static void
7677 unmark_all_dies (dw_die_ref die)
7678 {
7679   dw_die_ref c;
7680   dw_attr_ref a;
7681   unsigned ix;
7682
7683   if (!die->die_mark)
7684     return;
7685   die->die_mark = 0;
7686
7687   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
7688
7689   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7690     if (AT_class (a) == dw_val_class_die_ref)
7691       unmark_all_dies (AT_ref (a));
7692 }
7693
7694 /* Return the size of the .debug_pubnames or .debug_pubtypes table
7695    generated for the compilation unit.  */
7696
7697 static unsigned long
7698 size_of_pubnames (VEC (pubname_entry, gc) * names)
7699 {
7700   unsigned long size;
7701   unsigned i;
7702   pubname_ref p;
7703
7704   size = DWARF_PUBNAMES_HEADER_SIZE;
7705   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
7706     if (names != pubtype_table
7707         || p->die->die_offset != 0
7708         || !flag_eliminate_unused_debug_types)
7709       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
7710
7711   size += DWARF_OFFSET_SIZE;
7712   return size;
7713 }
7714
7715 /* Return the size of the information in the .debug_aranges section.  */
7716
7717 static unsigned long
7718 size_of_aranges (void)
7719 {
7720   unsigned long size;
7721
7722   size = DWARF_ARANGES_HEADER_SIZE;
7723
7724   /* Count the address/length pair for this compilation unit.  */
7725   if (text_section_used)
7726     size += 2 * DWARF2_ADDR_SIZE;
7727   if (cold_text_section_used)
7728     size += 2 * DWARF2_ADDR_SIZE;
7729   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
7730
7731   /* Count the two zero words used to terminated the address range table.  */
7732   size += 2 * DWARF2_ADDR_SIZE;
7733   return size;
7734 }
7735 \f
7736 /* Select the encoding of an attribute value.  */
7737
7738 static enum dwarf_form
7739 value_format (dw_attr_ref a)
7740 {
7741   switch (a->dw_attr_val.val_class)
7742     {
7743     case dw_val_class_addr:
7744       return DW_FORM_addr;
7745     case dw_val_class_range_list:
7746     case dw_val_class_offset:
7747     case dw_val_class_loc_list:
7748       switch (DWARF_OFFSET_SIZE)
7749         {
7750         case 4:
7751           return DW_FORM_data4;
7752         case 8:
7753           return DW_FORM_data8;
7754         default:
7755           gcc_unreachable ();
7756         }
7757     case dw_val_class_loc:
7758       switch (constant_size (size_of_locs (AT_loc (a))))
7759         {
7760         case 1:
7761           return DW_FORM_block1;
7762         case 2:
7763           return DW_FORM_block2;
7764         default:
7765           gcc_unreachable ();
7766         }
7767     case dw_val_class_const:
7768       return DW_FORM_sdata;
7769     case dw_val_class_unsigned_const:
7770       switch (constant_size (AT_unsigned (a)))
7771         {
7772         case 1:
7773           return DW_FORM_data1;
7774         case 2:
7775           return DW_FORM_data2;
7776         case 4:
7777           return DW_FORM_data4;
7778         case 8:
7779           return DW_FORM_data8;
7780         default:
7781           gcc_unreachable ();
7782         }
7783     case dw_val_class_long_long:
7784       return DW_FORM_block1;
7785     case dw_val_class_vec:
7786       switch (constant_size (a->dw_attr_val.v.val_vec.length
7787                              * a->dw_attr_val.v.val_vec.elt_size))
7788         {
7789         case 1:
7790           return DW_FORM_block1;
7791         case 2:
7792           return DW_FORM_block2;
7793         case 4:
7794           return DW_FORM_block4;
7795         default:
7796           gcc_unreachable ();
7797         }
7798     case dw_val_class_flag:
7799       return DW_FORM_flag;
7800     case dw_val_class_die_ref:
7801       if (AT_ref_external (a))
7802         return DW_FORM_ref_addr;
7803       else
7804         return DW_FORM_ref;
7805     case dw_val_class_fde_ref:
7806       return DW_FORM_data;
7807     case dw_val_class_lbl_id:
7808       return DW_FORM_addr;
7809     case dw_val_class_lineptr:
7810     case dw_val_class_macptr:
7811       return DW_FORM_data;
7812     case dw_val_class_str:
7813       return AT_string_form (a);
7814     case dw_val_class_file:
7815       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
7816         {
7817         case 1:
7818           return DW_FORM_data1;
7819         case 2:
7820           return DW_FORM_data2;
7821         case 4:
7822           return DW_FORM_data4;
7823         default:
7824           gcc_unreachable ();
7825         }
7826
7827     default:
7828       gcc_unreachable ();
7829     }
7830 }
7831
7832 /* Output the encoding of an attribute value.  */
7833
7834 static void
7835 output_value_format (dw_attr_ref a)
7836 {
7837   enum dwarf_form form = value_format (a);
7838
7839   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
7840 }
7841
7842 /* Output the .debug_abbrev section which defines the DIE abbreviation
7843    table.  */
7844
7845 static void
7846 output_abbrev_section (void)
7847 {
7848   unsigned long abbrev_id;
7849
7850   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
7851     {
7852       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
7853       unsigned ix;
7854       dw_attr_ref a_attr;
7855
7856       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
7857       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
7858                                    dwarf_tag_name (abbrev->die_tag));
7859
7860       if (abbrev->die_child != NULL)
7861         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
7862       else
7863         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
7864
7865       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
7866            ix++)
7867         {
7868           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
7869                                        dwarf_attr_name (a_attr->dw_attr));
7870           output_value_format (a_attr);
7871         }
7872
7873       dw2_asm_output_data (1, 0, NULL);
7874       dw2_asm_output_data (1, 0, NULL);
7875     }
7876
7877   /* Terminate the table.  */
7878   dw2_asm_output_data (1, 0, NULL);
7879 }
7880
7881 /* Output a symbol we can use to refer to this DIE from another CU.  */
7882
7883 static inline void
7884 output_die_symbol (dw_die_ref die)
7885 {
7886   char *sym = die->die_symbol;
7887
7888   if (sym == 0)
7889     return;
7890
7891   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
7892     /* We make these global, not weak; if the target doesn't support
7893        .linkonce, it doesn't support combining the sections, so debugging
7894        will break.  */
7895     targetm.asm_out.globalize_label (asm_out_file, sym);
7896
7897   ASM_OUTPUT_LABEL (asm_out_file, sym);
7898 }
7899
7900 /* Return a new location list, given the begin and end range, and the
7901    expression. gensym tells us whether to generate a new internal symbol for
7902    this location list node, which is done for the head of the list only.  */
7903
7904 static inline dw_loc_list_ref
7905 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
7906               const char *section, unsigned int gensym)
7907 {
7908   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
7909
7910   retlist->begin = begin;
7911   retlist->end = end;
7912   retlist->expr = expr;
7913   retlist->section = section;
7914   if (gensym)
7915     retlist->ll_symbol = gen_internal_sym ("LLST");
7916
7917   return retlist;
7918 }
7919
7920 /* Add a location description expression to a location list.  */
7921
7922 static inline void
7923 add_loc_descr_to_loc_list (dw_loc_list_ref *list_head, dw_loc_descr_ref descr,
7924                            const char *begin, const char *end,
7925                            const char *section)
7926 {
7927   dw_loc_list_ref *d;
7928
7929   /* Find the end of the chain.  */
7930   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
7931     ;
7932
7933   /* Add a new location list node to the list.  */
7934   *d = new_loc_list (descr, begin, end, section, 0);
7935 }
7936
7937 /* Output the location list given to us.  */
7938
7939 static void
7940 output_loc_list (dw_loc_list_ref list_head)
7941 {
7942   dw_loc_list_ref curr = list_head;
7943
7944   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
7945
7946   /* Walk the location list, and output each range + expression.  */
7947   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
7948     {
7949       unsigned long size;
7950       /* Don't output an entry that starts and ends at the same address.  */
7951       if (strcmp (curr->begin, curr->end) == 0)
7952         continue;
7953       if (!have_multiple_function_sections)
7954         {
7955           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
7956                                 "Location list begin address (%s)",
7957                                 list_head->ll_symbol);
7958           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
7959                                 "Location list end address (%s)",
7960                                 list_head->ll_symbol);
7961         }
7962       else
7963         {
7964           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
7965                                "Location list begin address (%s)",
7966                                list_head->ll_symbol);
7967           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
7968                                "Location list end address (%s)",
7969                                list_head->ll_symbol);
7970         }
7971       size = size_of_locs (curr->expr);
7972
7973       /* Output the block length for this list of location operations.  */
7974       gcc_assert (size <= 0xffff);
7975       dw2_asm_output_data (2, size, "%s", "Location expression size");
7976
7977       output_loc_sequence (curr->expr);
7978     }
7979
7980   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7981                        "Location list terminator begin (%s)",
7982                        list_head->ll_symbol);
7983   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
7984                        "Location list terminator end (%s)",
7985                        list_head->ll_symbol);
7986 }
7987
7988 /* Output the DIE and its attributes.  Called recursively to generate
7989    the definitions of each child DIE.  */
7990
7991 static void
7992 output_die (dw_die_ref die)
7993 {
7994   dw_attr_ref a;
7995   dw_die_ref c;
7996   unsigned long size;
7997   unsigned ix;
7998
7999   /* If someone in another CU might refer to us, set up a symbol for
8000      them to point to.  */
8001   if (die->die_symbol)
8002     output_die_symbol (die);
8003
8004   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
8005                                (unsigned long)die->die_offset,
8006                                dwarf_tag_name (die->die_tag));
8007
8008   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8009     {
8010       const char *name = dwarf_attr_name (a->dw_attr);
8011
8012       switch (AT_class (a))
8013         {
8014         case dw_val_class_addr:
8015           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
8016           break;
8017
8018         case dw_val_class_offset:
8019           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
8020                                "%s", name);
8021           break;
8022
8023         case dw_val_class_range_list:
8024           {
8025             char *p = strchr (ranges_section_label, '\0');
8026
8027             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
8028                      a->dw_attr_val.v.val_offset);
8029             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
8030                                    debug_ranges_section, "%s", name);
8031             *p = '\0';
8032           }
8033           break;
8034
8035         case dw_val_class_loc:
8036           size = size_of_locs (AT_loc (a));
8037
8038           /* Output the block length for this list of location operations.  */
8039           dw2_asm_output_data (constant_size (size), size, "%s", name);
8040
8041           output_loc_sequence (AT_loc (a));
8042           break;
8043
8044         case dw_val_class_const:
8045           /* ??? It would be slightly more efficient to use a scheme like is
8046              used for unsigned constants below, but gdb 4.x does not sign
8047              extend.  Gdb 5.x does sign extend.  */
8048           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
8049           break;
8050
8051         case dw_val_class_unsigned_const:
8052           dw2_asm_output_data (constant_size (AT_unsigned (a)),
8053                                AT_unsigned (a), "%s", name);
8054           break;
8055
8056         case dw_val_class_long_long:
8057           {
8058             unsigned HOST_WIDE_INT first, second;
8059
8060             dw2_asm_output_data (1,
8061                                  2 * HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8062                                  "%s", name);
8063
8064             if (WORDS_BIG_ENDIAN)
8065               {
8066                 first = a->dw_attr_val.v.val_long_long.hi;
8067                 second = a->dw_attr_val.v.val_long_long.low;
8068               }
8069             else
8070               {
8071                 first = a->dw_attr_val.v.val_long_long.low;
8072                 second = a->dw_attr_val.v.val_long_long.hi;
8073               }
8074
8075             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8076                                  first, "long long constant");
8077             dw2_asm_output_data (HOST_BITS_PER_LONG / HOST_BITS_PER_CHAR,
8078                                  second, NULL);
8079           }
8080           break;
8081
8082         case dw_val_class_vec:
8083           {
8084             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
8085             unsigned int len = a->dw_attr_val.v.val_vec.length;
8086             unsigned int i;
8087             unsigned char *p;
8088
8089             dw2_asm_output_data (constant_size (len * elt_size),
8090                                  len * elt_size, "%s", name);
8091             if (elt_size > sizeof (HOST_WIDE_INT))
8092               {
8093                 elt_size /= 2;
8094                 len *= 2;
8095               }
8096             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
8097                  i < len;
8098                  i++, p += elt_size)
8099               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
8100                                    "fp or vector constant word %u", i);
8101             break;
8102           }
8103
8104         case dw_val_class_flag:
8105           dw2_asm_output_data (1, AT_flag (a), "%s", name);
8106           break;
8107
8108         case dw_val_class_loc_list:
8109           {
8110             char *sym = AT_loc_list (a)->ll_symbol;
8111
8112             gcc_assert (sym);
8113             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
8114                                    "%s", name);
8115           }
8116           break;
8117
8118         case dw_val_class_die_ref:
8119           if (AT_ref_external (a))
8120             {
8121               char *sym = AT_ref (a)->die_symbol;
8122
8123               gcc_assert (sym);
8124               dw2_asm_output_offset (DWARF2_ADDR_SIZE, sym, debug_info_section,
8125                                      "%s", name);
8126             }
8127           else
8128             {
8129               gcc_assert (AT_ref (a)->die_offset);
8130               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
8131                                    "%s", name);
8132             }
8133           break;
8134
8135         case dw_val_class_fde_ref:
8136           {
8137             char l1[20];
8138
8139             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
8140                                          a->dw_attr_val.v.val_fde_index * 2);
8141             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
8142                                    "%s", name);
8143           }
8144           break;
8145
8146         case dw_val_class_lbl_id:
8147           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
8148           break;
8149
8150         case dw_val_class_lineptr:
8151           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8152                                  debug_line_section, "%s", name);
8153           break;
8154
8155         case dw_val_class_macptr:
8156           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
8157                                  debug_macinfo_section, "%s", name);
8158           break;
8159
8160         case dw_val_class_str:
8161           if (AT_string_form (a) == DW_FORM_strp)
8162             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
8163                                    a->dw_attr_val.v.val_str->label,
8164                                    debug_str_section,
8165                                    "%s: \"%s\"", name, AT_string (a));
8166           else
8167             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
8168           break;
8169
8170         case dw_val_class_file:
8171           {
8172             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
8173
8174             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
8175                                  a->dw_attr_val.v.val_file->filename);
8176             break;
8177           }
8178
8179         default:
8180           gcc_unreachable ();
8181         }
8182     }
8183
8184   FOR_EACH_CHILD (die, c, output_die (c));
8185
8186   /* Add null byte to terminate sibling list.  */
8187   if (die->die_child != NULL)
8188     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
8189                          (unsigned long) die->die_offset);
8190 }
8191
8192 /* Output the compilation unit that appears at the beginning of the
8193    .debug_info section, and precedes the DIE descriptions.  */
8194
8195 static void
8196 output_compilation_unit_header (void)
8197 {
8198   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8199     dw2_asm_output_data (4, 0xffffffff,
8200       "Initial length escape value indicating 64-bit DWARF extension");
8201   dw2_asm_output_data (DWARF_OFFSET_SIZE,
8202                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
8203                        "Length of Compilation Unit Info");
8204   dw2_asm_output_data (2, DWARF_VERSION, "DWARF version number");
8205   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
8206                          debug_abbrev_section,
8207                          "Offset Into Abbrev. Section");
8208   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
8209 }
8210
8211 /* Output the compilation unit DIE and its children.  */
8212
8213 static void
8214 output_comp_unit (dw_die_ref die, int output_if_empty)
8215 {
8216   const char *secname;
8217   char *oldsym, *tmp;
8218
8219   /* Unless we are outputting main CU, we may throw away empty ones.  */
8220   if (!output_if_empty && die->die_child == NULL)
8221     return;
8222
8223   /* Even if there are no children of this DIE, we must output the information
8224      about the compilation unit.  Otherwise, on an empty translation unit, we
8225      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
8226      will then complain when examining the file.  First mark all the DIEs in
8227      this CU so we know which get local refs.  */
8228   mark_dies (die);
8229
8230   build_abbrev_table (die);
8231
8232   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
8233   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
8234   calc_die_sizes (die);
8235
8236   oldsym = die->die_symbol;
8237   if (oldsym)
8238     {
8239       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
8240
8241       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
8242       secname = tmp;
8243       die->die_symbol = NULL;
8244       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
8245     }
8246   else
8247     switch_to_section (debug_info_section);
8248
8249   /* Output debugging information.  */
8250   output_compilation_unit_header ();
8251   output_die (die);
8252
8253   /* Leave the marks on the main CU, so we can check them in
8254      output_pubnames.  */
8255   if (oldsym)
8256     {
8257       unmark_dies (die);
8258       die->die_symbol = oldsym;
8259     }
8260 }
8261
8262 /* Return the DWARF2/3 pubname associated with a decl.  */
8263
8264 static const char *
8265 dwarf2_name (tree decl, int scope)
8266 {
8267   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
8268 }
8269
8270 /* Add a new entry to .debug_pubnames if appropriate.  */
8271
8272 static void
8273 add_pubname_string (const char *str, dw_die_ref die)
8274 {
8275   pubname_entry e;
8276
8277   e.die = die;
8278   e.name = xstrdup (str);
8279   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
8280 }
8281
8282 static void
8283 add_pubname (tree decl, dw_die_ref die)
8284 {
8285
8286   if (TREE_PUBLIC (decl))
8287     add_pubname_string (dwarf2_name (decl, 1), die);
8288 }
8289
8290 /* Add a new entry to .debug_pubtypes if appropriate.  */
8291
8292 static void
8293 add_pubtype (tree decl, dw_die_ref die)
8294 {
8295   pubname_entry e;
8296
8297   e.name = NULL;
8298   if ((TREE_PUBLIC (decl)
8299        || die->die_parent == comp_unit_die)
8300       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
8301     {
8302       e.die = die;
8303       if (TYPE_P (decl))
8304         {
8305           if (TYPE_NAME (decl))
8306             {
8307               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
8308                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
8309               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
8310                        && DECL_NAME (TYPE_NAME (decl)))
8311                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
8312               else
8313                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
8314             }
8315         }
8316       else
8317         e.name = xstrdup (dwarf2_name (decl, 1));
8318
8319       /* If we don't have a name for the type, there's no point in adding
8320          it to the table.  */
8321       if (e.name && e.name[0] != '\0')
8322         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
8323     }
8324 }
8325
8326 /* Output the public names table used to speed up access to externally
8327    visible names; or the public types table used to find type definitions.  */
8328
8329 static void
8330 output_pubnames (VEC (pubname_entry, gc) * names)
8331 {
8332   unsigned i;
8333   unsigned long pubnames_length = size_of_pubnames (names);
8334   pubname_ref pub;
8335
8336   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8337     dw2_asm_output_data (4, 0xffffffff,
8338       "Initial length escape value indicating 64-bit DWARF extension");
8339   if (names == pubname_table)
8340     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8341                          "Length of Public Names Info");
8342   else
8343     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
8344                          "Length of Public Type Names Info");
8345   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
8346   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8347                          debug_info_section,
8348                          "Offset of Compilation Unit Info");
8349   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
8350                        "Compilation Unit Length");
8351
8352   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
8353     {
8354       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
8355       if (names == pubname_table)
8356         gcc_assert (pub->die->die_mark);
8357
8358       if (names != pubtype_table
8359           || pub->die->die_offset != 0
8360           || !flag_eliminate_unused_debug_types)
8361         {
8362           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
8363                                "DIE offset");
8364
8365           dw2_asm_output_nstring (pub->name, -1, "external name");
8366         }
8367     }
8368
8369   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
8370 }
8371
8372 /* Add a new entry to .debug_aranges if appropriate.  */
8373
8374 static void
8375 add_arange (tree decl, dw_die_ref die)
8376 {
8377   if (! DECL_SECTION_NAME (decl))
8378     return;
8379
8380   if (arange_table_in_use == arange_table_allocated)
8381     {
8382       arange_table_allocated += ARANGE_TABLE_INCREMENT;
8383       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
8384                                     arange_table_allocated);
8385       memset (arange_table + arange_table_in_use, 0,
8386               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
8387     }
8388
8389   arange_table[arange_table_in_use++] = die;
8390 }
8391
8392 /* Output the information that goes into the .debug_aranges table.
8393    Namely, define the beginning and ending address range of the
8394    text section generated for this compilation unit.  */
8395
8396 static void
8397 output_aranges (void)
8398 {
8399   unsigned i;
8400   unsigned long aranges_length = size_of_aranges ();
8401
8402   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8403     dw2_asm_output_data (4, 0xffffffff,
8404       "Initial length escape value indicating 64-bit DWARF extension");
8405   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
8406                        "Length of Address Ranges Info");
8407   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
8408   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
8409                          debug_info_section,
8410                          "Offset of Compilation Unit Info");
8411   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
8412   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
8413
8414   /* We need to align to twice the pointer size here.  */
8415   if (DWARF_ARANGES_PAD_SIZE)
8416     {
8417       /* Pad using a 2 byte words so that padding is correct for any
8418          pointer size.  */
8419       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
8420                            2 * DWARF2_ADDR_SIZE);
8421       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
8422         dw2_asm_output_data (2, 0, NULL);
8423     }
8424
8425   /* It is necessary not to output these entries if the sections were
8426      not used; if the sections were not used, the length will be 0 and
8427      the address may end up as 0 if the section is discarded by ld
8428      --gc-sections, leaving an invalid (0, 0) entry that can be
8429      confused with the terminator.  */
8430   if (text_section_used)
8431     {
8432       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
8433       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
8434                             text_section_label, "Length");
8435     }
8436   if (cold_text_section_used)
8437     {
8438       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
8439                            "Address");
8440       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
8441                             cold_text_section_label, "Length");
8442     }
8443
8444   for (i = 0; i < arange_table_in_use; i++)
8445     {
8446       dw_die_ref die = arange_table[i];
8447
8448       /* We shouldn't see aranges for DIEs outside of the main CU.  */
8449       gcc_assert (die->die_mark);
8450
8451       if (die->die_tag == DW_TAG_subprogram)
8452         {
8453           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
8454                                "Address");
8455           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
8456                                 get_AT_low_pc (die), "Length");
8457         }
8458       else
8459         {
8460           /* A static variable; extract the symbol from DW_AT_location.
8461              Note that this code isn't currently hit, as we only emit
8462              aranges for functions (jason 9/23/99).  */
8463           dw_attr_ref a = get_AT (die, DW_AT_location);
8464           dw_loc_descr_ref loc;
8465
8466           gcc_assert (a && AT_class (a) == dw_val_class_loc);
8467
8468           loc = AT_loc (a);
8469           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
8470
8471           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
8472                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
8473           dw2_asm_output_data (DWARF2_ADDR_SIZE,
8474                                get_AT_unsigned (die, DW_AT_byte_size),
8475                                "Length");
8476         }
8477     }
8478
8479   /* Output the terminator words.  */
8480   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8481   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8482 }
8483
8484 /* Add a new entry to .debug_ranges.  Return the offset at which it
8485    was placed.  */
8486
8487 static unsigned int
8488 add_ranges_num (int num)
8489 {
8490   unsigned int in_use = ranges_table_in_use;
8491
8492   if (in_use == ranges_table_allocated)
8493     {
8494       ranges_table_allocated += RANGES_TABLE_INCREMENT;
8495       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
8496                                     ranges_table_allocated);
8497       memset (ranges_table + ranges_table_in_use, 0,
8498               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
8499     }
8500
8501   ranges_table[in_use].num = num;
8502   ranges_table_in_use = in_use + 1;
8503
8504   return in_use * 2 * DWARF2_ADDR_SIZE;
8505 }
8506
8507 /* Add a new entry to .debug_ranges corresponding to a block, or a
8508    range terminator if BLOCK is NULL.  */
8509
8510 static unsigned int
8511 add_ranges (const_tree block)
8512 {
8513   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
8514 }
8515
8516 /* Add a new entry to .debug_ranges corresponding to a pair of
8517    labels.  */
8518
8519 static unsigned int
8520 add_ranges_by_labels (const char *begin, const char *end)
8521 {
8522   unsigned int in_use = ranges_by_label_in_use;
8523
8524   if (in_use == ranges_by_label_allocated)
8525     {
8526       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
8527       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
8528                                        ranges_by_label,
8529                                        ranges_by_label_allocated);
8530       memset (ranges_by_label + ranges_by_label_in_use, 0,
8531               RANGES_TABLE_INCREMENT
8532               * sizeof (struct dw_ranges_by_label_struct));
8533     }
8534
8535   ranges_by_label[in_use].begin = begin;
8536   ranges_by_label[in_use].end = end;
8537   ranges_by_label_in_use = in_use + 1;
8538
8539   return add_ranges_num (-(int)in_use - 1);
8540 }
8541
8542 static void
8543 output_ranges (void)
8544 {
8545   unsigned i;
8546   static const char *const start_fmt = "Offset 0x%x";
8547   const char *fmt = start_fmt;
8548
8549   for (i = 0; i < ranges_table_in_use; i++)
8550     {
8551       int block_num = ranges_table[i].num;
8552
8553       if (block_num > 0)
8554         {
8555           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
8556           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
8557
8558           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
8559           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
8560
8561           /* If all code is in the text section, then the compilation
8562              unit base address defaults to DW_AT_low_pc, which is the
8563              base of the text section.  */
8564           if (!have_multiple_function_sections)
8565             {
8566               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
8567                                     text_section_label,
8568                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8569               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
8570                                     text_section_label, NULL);
8571             }
8572
8573           /* Otherwise, the compilation unit base address is zero,
8574              which allows us to use absolute addresses, and not worry
8575              about whether the target supports cross-section
8576              arithmetic.  */
8577           else
8578             {
8579               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
8580                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8581               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
8582             }
8583
8584           fmt = NULL;
8585         }
8586
8587       /* Negative block_num stands for an index into ranges_by_label.  */
8588       else if (block_num < 0)
8589         {
8590           int lab_idx = - block_num - 1;
8591
8592           if (!have_multiple_function_sections)
8593             {
8594               gcc_unreachable ();
8595 #if 0
8596               /* If we ever use add_ranges_by_labels () for a single
8597                  function section, all we have to do is to take out
8598                  the #if 0 above.  */
8599               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8600                                     ranges_by_label[lab_idx].begin,
8601                                     text_section_label,
8602                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
8603               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
8604                                     ranges_by_label[lab_idx].end,
8605                                     text_section_label, NULL);
8606 #endif
8607             }
8608           else
8609             {
8610               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8611                                    ranges_by_label[lab_idx].begin,
8612                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
8613               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
8614                                    ranges_by_label[lab_idx].end,
8615                                    NULL);
8616             }
8617         }
8618       else
8619         {
8620           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8621           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
8622           fmt = start_fmt;
8623         }
8624     }
8625 }
8626
8627 /* Data structure containing information about input files.  */
8628 struct file_info
8629 {
8630   const char *path;     /* Complete file name.  */
8631   const char *fname;    /* File name part.  */
8632   int length;           /* Length of entire string.  */
8633   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
8634   int dir_idx;          /* Index in directory table.  */
8635 };
8636
8637 /* Data structure containing information about directories with source
8638    files.  */
8639 struct dir_info
8640 {
8641   const char *path;     /* Path including directory name.  */
8642   int length;           /* Path length.  */
8643   int prefix;           /* Index of directory entry which is a prefix.  */
8644   int count;            /* Number of files in this directory.  */
8645   int dir_idx;          /* Index of directory used as base.  */
8646 };
8647
8648 /* Callback function for file_info comparison.  We sort by looking at
8649    the directories in the path.  */
8650
8651 static int
8652 file_info_cmp (const void *p1, const void *p2)
8653 {
8654   const struct file_info *const s1 = (const struct file_info *) p1;
8655   const struct file_info *const s2 = (const struct file_info *) p2;
8656   const unsigned char *cp1;
8657   const unsigned char *cp2;
8658
8659   /* Take care of file names without directories.  We need to make sure that
8660      we return consistent values to qsort since some will get confused if
8661      we return the same value when identical operands are passed in opposite
8662      orders.  So if neither has a directory, return 0 and otherwise return
8663      1 or -1 depending on which one has the directory.  */
8664   if ((s1->path == s1->fname || s2->path == s2->fname))
8665     return (s2->path == s2->fname) - (s1->path == s1->fname);
8666
8667   cp1 = (const unsigned char *) s1->path;
8668   cp2 = (const unsigned char *) s2->path;
8669
8670   while (1)
8671     {
8672       ++cp1;
8673       ++cp2;
8674       /* Reached the end of the first path?  If so, handle like above.  */
8675       if ((cp1 == (const unsigned char *) s1->fname)
8676           || (cp2 == (const unsigned char *) s2->fname))
8677         return ((cp2 == (const unsigned char *) s2->fname)
8678                 - (cp1 == (const unsigned char *) s1->fname));
8679
8680       /* Character of current path component the same?  */
8681       else if (*cp1 != *cp2)
8682         return *cp1 - *cp2;
8683     }
8684 }
8685
8686 struct file_name_acquire_data
8687 {
8688   struct file_info *files;
8689   int used_files;
8690   int max_files;
8691 };
8692
8693 /* Traversal function for the hash table.  */
8694
8695 static int
8696 file_name_acquire (void ** slot, void *data)
8697 {
8698   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
8699   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
8700   struct file_info *fi;
8701   const char *f;
8702
8703   gcc_assert (fnad->max_files >= d->emitted_number);
8704
8705   if (! d->emitted_number)
8706     return 1;
8707
8708   gcc_assert (fnad->max_files != fnad->used_files);
8709
8710   fi = fnad->files + fnad->used_files++;
8711
8712   /* Skip all leading "./".  */
8713   f = d->filename;
8714   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
8715     f += 2;
8716
8717   /* Create a new array entry.  */
8718   fi->path = f;
8719   fi->length = strlen (f);
8720   fi->file_idx = d;
8721
8722   /* Search for the file name part.  */
8723   f = strrchr (f, DIR_SEPARATOR);
8724 #if defined (DIR_SEPARATOR_2)
8725   {
8726     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
8727
8728     if (g != NULL)
8729       {
8730         if (f == NULL || f < g)
8731           f = g;
8732       }
8733   }
8734 #endif
8735
8736   fi->fname = f == NULL ? fi->path : f + 1;
8737   return 1;
8738 }
8739
8740 /* Output the directory table and the file name table.  We try to minimize
8741    the total amount of memory needed.  A heuristic is used to avoid large
8742    slowdowns with many input files.  */
8743
8744 static void
8745 output_file_names (void)
8746 {
8747   struct file_name_acquire_data fnad;
8748   int numfiles;
8749   struct file_info *files;
8750   struct dir_info *dirs;
8751   int *saved;
8752   int *savehere;
8753   int *backmap;
8754   int ndirs;
8755   int idx_offset;
8756   int i;
8757   int idx;
8758
8759   if (!last_emitted_file)
8760     {
8761       dw2_asm_output_data (1, 0, "End directory table");
8762       dw2_asm_output_data (1, 0, "End file name table");
8763       return;
8764     }
8765
8766   numfiles = last_emitted_file->emitted_number;
8767
8768   /* Allocate the various arrays we need.  */
8769   files = XALLOCAVEC (struct file_info, numfiles);
8770   dirs = XALLOCAVEC (struct dir_info, numfiles);
8771
8772   fnad.files = files;
8773   fnad.used_files = 0;
8774   fnad.max_files = numfiles;
8775   htab_traverse (file_table, file_name_acquire, &fnad);
8776   gcc_assert (fnad.used_files == fnad.max_files);
8777
8778   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
8779
8780   /* Find all the different directories used.  */
8781   dirs[0].path = files[0].path;
8782   dirs[0].length = files[0].fname - files[0].path;
8783   dirs[0].prefix = -1;
8784   dirs[0].count = 1;
8785   dirs[0].dir_idx = 0;
8786   files[0].dir_idx = 0;
8787   ndirs = 1;
8788
8789   for (i = 1; i < numfiles; i++)
8790     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
8791         && memcmp (dirs[ndirs - 1].path, files[i].path,
8792                    dirs[ndirs - 1].length) == 0)
8793       {
8794         /* Same directory as last entry.  */
8795         files[i].dir_idx = ndirs - 1;
8796         ++dirs[ndirs - 1].count;
8797       }
8798     else
8799       {
8800         int j;
8801
8802         /* This is a new directory.  */
8803         dirs[ndirs].path = files[i].path;
8804         dirs[ndirs].length = files[i].fname - files[i].path;
8805         dirs[ndirs].count = 1;
8806         dirs[ndirs].dir_idx = ndirs;
8807         files[i].dir_idx = ndirs;
8808
8809         /* Search for a prefix.  */
8810         dirs[ndirs].prefix = -1;
8811         for (j = 0; j < ndirs; j++)
8812           if (dirs[j].length < dirs[ndirs].length
8813               && dirs[j].length > 1
8814               && (dirs[ndirs].prefix == -1
8815                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
8816               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
8817             dirs[ndirs].prefix = j;
8818
8819         ++ndirs;
8820       }
8821
8822   /* Now to the actual work.  We have to find a subset of the directories which
8823      allow expressing the file name using references to the directory table
8824      with the least amount of characters.  We do not do an exhaustive search
8825      where we would have to check out every combination of every single
8826      possible prefix.  Instead we use a heuristic which provides nearly optimal
8827      results in most cases and never is much off.  */
8828   saved = XALLOCAVEC (int, ndirs);
8829   savehere = XALLOCAVEC (int, ndirs);
8830
8831   memset (saved, '\0', ndirs * sizeof (saved[0]));
8832   for (i = 0; i < ndirs; i++)
8833     {
8834       int j;
8835       int total;
8836
8837       /* We can always save some space for the current directory.  But this
8838          does not mean it will be enough to justify adding the directory.  */
8839       savehere[i] = dirs[i].length;
8840       total = (savehere[i] - saved[i]) * dirs[i].count;
8841
8842       for (j = i + 1; j < ndirs; j++)
8843         {
8844           savehere[j] = 0;
8845           if (saved[j] < dirs[i].length)
8846             {
8847               /* Determine whether the dirs[i] path is a prefix of the
8848                  dirs[j] path.  */
8849               int k;
8850
8851               k = dirs[j].prefix;
8852               while (k != -1 && k != (int) i)
8853                 k = dirs[k].prefix;
8854
8855               if (k == (int) i)
8856                 {
8857                   /* Yes it is.  We can possibly save some memory by
8858                      writing the filenames in dirs[j] relative to
8859                      dirs[i].  */
8860                   savehere[j] = dirs[i].length;
8861                   total += (savehere[j] - saved[j]) * dirs[j].count;
8862                 }
8863             }
8864         }
8865
8866       /* Check whether we can save enough to justify adding the dirs[i]
8867          directory.  */
8868       if (total > dirs[i].length + 1)
8869         {
8870           /* It's worthwhile adding.  */
8871           for (j = i; j < ndirs; j++)
8872             if (savehere[j] > 0)
8873               {
8874                 /* Remember how much we saved for this directory so far.  */
8875                 saved[j] = savehere[j];
8876
8877                 /* Remember the prefix directory.  */
8878                 dirs[j].dir_idx = i;
8879               }
8880         }
8881     }
8882
8883   /* Emit the directory name table.  */
8884   idx = 1;
8885   idx_offset = dirs[0].length > 0 ? 1 : 0;
8886   for (i = 1 - idx_offset; i < ndirs; i++)
8887     dw2_asm_output_nstring (dirs[i].path, dirs[i].length - 1,
8888                             "Directory Entry: 0x%x", i + idx_offset);
8889
8890   dw2_asm_output_data (1, 0, "End directory table");
8891
8892   /* We have to emit them in the order of emitted_number since that's
8893      used in the debug info generation.  To do this efficiently we
8894      generate a back-mapping of the indices first.  */
8895   backmap = XALLOCAVEC (int, numfiles);
8896   for (i = 0; i < numfiles; i++)
8897     backmap[files[i].file_idx->emitted_number - 1] = i;
8898
8899   /* Now write all the file names.  */
8900   for (i = 0; i < numfiles; i++)
8901     {
8902       int file_idx = backmap[i];
8903       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
8904
8905       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
8906                               "File Entry: 0x%x", (unsigned) i + 1);
8907
8908       /* Include directory index.  */
8909       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
8910
8911       /* Modification time.  */
8912       dw2_asm_output_data_uleb128 (0, NULL);
8913
8914       /* File length in bytes.  */
8915       dw2_asm_output_data_uleb128 (0, NULL);
8916     }
8917
8918   dw2_asm_output_data (1, 0, "End file name table");
8919 }
8920
8921
8922 /* Output the source line number correspondence information.  This
8923    information goes into the .debug_line section.  */
8924
8925 static void
8926 output_line_info (void)
8927 {
8928   char l1[20], l2[20], p1[20], p2[20];
8929   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
8930   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
8931   unsigned opc;
8932   unsigned n_op_args;
8933   unsigned long lt_index;
8934   unsigned long current_line;
8935   long line_offset;
8936   long line_delta;
8937   unsigned long current_file;
8938   unsigned long function;
8939
8940   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
8941   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
8942   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
8943   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
8944
8945   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
8946     dw2_asm_output_data (4, 0xffffffff,
8947       "Initial length escape value indicating 64-bit DWARF extension");
8948   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
8949                         "Length of Source Line Info");
8950   ASM_OUTPUT_LABEL (asm_out_file, l1);
8951
8952   dw2_asm_output_data (2, DWARF_VERSION, "DWARF Version");
8953   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
8954   ASM_OUTPUT_LABEL (asm_out_file, p1);
8955
8956   /* Define the architecture-dependent minimum instruction length (in
8957    bytes).  In this implementation of DWARF, this field is used for
8958    information purposes only.  Since GCC generates assembly language,
8959    we have no a priori knowledge of how many instruction bytes are
8960    generated for each source line, and therefore can use only the
8961    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
8962    commands.  Accordingly, we fix this as `1', which is "correct
8963    enough" for all architectures, and don't let the target override.  */
8964   dw2_asm_output_data (1, 1,
8965                        "Minimum Instruction Length");
8966
8967   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
8968                        "Default is_stmt_start flag");
8969   dw2_asm_output_data (1, DWARF_LINE_BASE,
8970                        "Line Base Value (Special Opcodes)");
8971   dw2_asm_output_data (1, DWARF_LINE_RANGE,
8972                        "Line Range Value (Special Opcodes)");
8973   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
8974                        "Special Opcode Base");
8975
8976   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
8977     {
8978       switch (opc)
8979         {
8980         case DW_LNS_advance_pc:
8981         case DW_LNS_advance_line:
8982         case DW_LNS_set_file:
8983         case DW_LNS_set_column:
8984         case DW_LNS_fixed_advance_pc:
8985           n_op_args = 1;
8986           break;
8987         default:
8988           n_op_args = 0;
8989           break;
8990         }
8991
8992       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
8993                            opc, n_op_args);
8994     }
8995
8996   /* Write out the information about the files we use.  */
8997   output_file_names ();
8998   ASM_OUTPUT_LABEL (asm_out_file, p2);
8999
9000   /* We used to set the address register to the first location in the text
9001      section here, but that didn't accomplish anything since we already
9002      have a line note for the opening brace of the first function.  */
9003
9004   /* Generate the line number to PC correspondence table, encoded as
9005      a series of state machine operations.  */
9006   current_file = 1;
9007   current_line = 1;
9008
9009   if (cfun && in_cold_section_p)
9010     strcpy (prev_line_label, crtl->subsections.cold_section_label);
9011   else
9012     strcpy (prev_line_label, text_section_label);
9013   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
9014     {
9015       dw_line_info_ref line_info = &line_info_table[lt_index];
9016
9017 #if 0
9018       /* Disable this optimization for now; GDB wants to see two line notes
9019          at the beginning of a function so it can find the end of the
9020          prologue.  */
9021
9022       /* Don't emit anything for redundant notes.  Just updating the
9023          address doesn't accomplish anything, because we already assume
9024          that anything after the last address is this line.  */
9025       if (line_info->dw_line_num == current_line
9026           && line_info->dw_file_num == current_file)
9027         continue;
9028 #endif
9029
9030       /* Emit debug info for the address of the current line.
9031
9032          Unfortunately, we have little choice here currently, and must always
9033          use the most general form.  GCC does not know the address delta
9034          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
9035          attributes which will give an upper bound on the address range.  We
9036          could perhaps use length attributes to determine when it is safe to
9037          use DW_LNS_fixed_advance_pc.  */
9038
9039       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
9040       if (0)
9041         {
9042           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
9043           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9044                                "DW_LNS_fixed_advance_pc");
9045           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9046         }
9047       else
9048         {
9049           /* This can handle any delta.  This takes
9050              4+DWARF2_ADDR_SIZE bytes.  */
9051           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9052           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9053           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9054           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9055         }
9056
9057       strcpy (prev_line_label, line_label);
9058
9059       /* Emit debug info for the source file of the current line, if
9060          different from the previous line.  */
9061       if (line_info->dw_file_num != current_file)
9062         {
9063           current_file = line_info->dw_file_num;
9064           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
9065           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
9066         }
9067
9068       /* Emit debug info for the current line number, choosing the encoding
9069          that uses the least amount of space.  */
9070       if (line_info->dw_line_num != current_line)
9071         {
9072           line_offset = line_info->dw_line_num - current_line;
9073           line_delta = line_offset - DWARF_LINE_BASE;
9074           current_line = line_info->dw_line_num;
9075           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9076             /* This can handle deltas from -10 to 234, using the current
9077                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
9078                takes 1 byte.  */
9079             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9080                                  "line %lu", current_line);
9081           else
9082             {
9083               /* This can handle any delta.  This takes at least 4 bytes,
9084                  depending on the value being encoded.  */
9085               dw2_asm_output_data (1, DW_LNS_advance_line,
9086                                    "advance to line %lu", current_line);
9087               dw2_asm_output_data_sleb128 (line_offset, NULL);
9088               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9089             }
9090         }
9091       else
9092         /* We still need to start a new row, so output a copy insn.  */
9093         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9094     }
9095
9096   /* Emit debug info for the address of the end of the function.  */
9097   if (0)
9098     {
9099       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9100                            "DW_LNS_fixed_advance_pc");
9101       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
9102     }
9103   else
9104     {
9105       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9106       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9107       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9108       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
9109     }
9110
9111   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
9112   dw2_asm_output_data_uleb128 (1, NULL);
9113   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9114
9115   function = 0;
9116   current_file = 1;
9117   current_line = 1;
9118   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
9119     {
9120       dw_separate_line_info_ref line_info
9121         = &separate_line_info_table[lt_index];
9122
9123 #if 0
9124       /* Don't emit anything for redundant notes.  */
9125       if (line_info->dw_line_num == current_line
9126           && line_info->dw_file_num == current_file
9127           && line_info->function == function)
9128         goto cont;
9129 #endif
9130
9131       /* Emit debug info for the address of the current line.  If this is
9132          a new function, or the first line of a function, then we need
9133          to handle it differently.  */
9134       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
9135                                    lt_index);
9136       if (function != line_info->function)
9137         {
9138           function = line_info->function;
9139
9140           /* Set the address register to the first line in the function.  */
9141           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9142           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9143           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9144           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9145         }
9146       else
9147         {
9148           /* ??? See the DW_LNS_advance_pc comment above.  */
9149           if (0)
9150             {
9151               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9152                                    "DW_LNS_fixed_advance_pc");
9153               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9154             }
9155           else
9156             {
9157               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9158               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9159               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9160               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9161             }
9162         }
9163
9164       strcpy (prev_line_label, line_label);
9165
9166       /* Emit debug info for the source file of the current line, if
9167          different from the previous line.  */
9168       if (line_info->dw_file_num != current_file)
9169         {
9170           current_file = line_info->dw_file_num;
9171           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
9172           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
9173         }
9174
9175       /* Emit debug info for the current line number, choosing the encoding
9176          that uses the least amount of space.  */
9177       if (line_info->dw_line_num != current_line)
9178         {
9179           line_offset = line_info->dw_line_num - current_line;
9180           line_delta = line_offset - DWARF_LINE_BASE;
9181           current_line = line_info->dw_line_num;
9182           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
9183             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
9184                                  "line %lu", current_line);
9185           else
9186             {
9187               dw2_asm_output_data (1, DW_LNS_advance_line,
9188                                    "advance to line %lu", current_line);
9189               dw2_asm_output_data_sleb128 (line_offset, NULL);
9190               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9191             }
9192         }
9193       else
9194         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
9195
9196 #if 0
9197     cont:
9198 #endif
9199
9200       lt_index++;
9201
9202       /* If we're done with a function, end its sequence.  */
9203       if (lt_index == separate_line_info_table_in_use
9204           || separate_line_info_table[lt_index].function != function)
9205         {
9206           current_file = 1;
9207           current_line = 1;
9208
9209           /* Emit debug info for the address of the end of the function.  */
9210           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
9211           if (0)
9212             {
9213               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
9214                                    "DW_LNS_fixed_advance_pc");
9215               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
9216             }
9217           else
9218             {
9219               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
9220               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
9221               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
9222               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
9223             }
9224
9225           /* Output the marker for the end of this sequence.  */
9226           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
9227           dw2_asm_output_data_uleb128 (1, NULL);
9228           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
9229         }
9230     }
9231
9232   /* Output the marker for the end of the line number info.  */
9233   ASM_OUTPUT_LABEL (asm_out_file, l2);
9234 }
9235 \f
9236 /* Given a pointer to a tree node for some base type, return a pointer to
9237    a DIE that describes the given type.
9238
9239    This routine must only be called for GCC type nodes that correspond to
9240    Dwarf base (fundamental) types.  */
9241
9242 static dw_die_ref
9243 base_type_die (tree type)
9244 {
9245   dw_die_ref base_type_result;
9246   enum dwarf_type encoding;
9247
9248   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
9249     return 0;
9250
9251   switch (TREE_CODE (type))
9252     {
9253     case INTEGER_TYPE:
9254       if (TYPE_STRING_FLAG (type))
9255         {
9256           if (TYPE_UNSIGNED (type))
9257             encoding = DW_ATE_unsigned_char;
9258           else
9259             encoding = DW_ATE_signed_char;
9260         }
9261       else if (TYPE_UNSIGNED (type))
9262         encoding = DW_ATE_unsigned;
9263       else
9264         encoding = DW_ATE_signed;
9265       break;
9266
9267     case REAL_TYPE:
9268       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
9269         encoding = DW_ATE_decimal_float;
9270       else
9271         encoding = DW_ATE_float;
9272       break;
9273
9274     case FIXED_POINT_TYPE:
9275       if (TYPE_UNSIGNED (type))
9276         encoding = DW_ATE_unsigned_fixed;
9277       else
9278         encoding = DW_ATE_signed_fixed;
9279       break;
9280
9281       /* Dwarf2 doesn't know anything about complex ints, so use
9282          a user defined type for it.  */
9283     case COMPLEX_TYPE:
9284       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
9285         encoding = DW_ATE_complex_float;
9286       else
9287         encoding = DW_ATE_lo_user;
9288       break;
9289
9290     case BOOLEAN_TYPE:
9291       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
9292       encoding = DW_ATE_boolean;
9293       break;
9294
9295     default:
9296       /* No other TREE_CODEs are Dwarf fundamental types.  */
9297       gcc_unreachable ();
9298     }
9299
9300   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
9301
9302   /* This probably indicates a bug.  */
9303   if (! TYPE_NAME (type))
9304     add_name_attribute (base_type_result, "__unknown__");
9305
9306   add_AT_unsigned (base_type_result, DW_AT_byte_size,
9307                    int_size_in_bytes (type));
9308   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
9309
9310   return base_type_result;
9311 }
9312
9313 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
9314    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
9315
9316 static inline int
9317 is_base_type (tree type)
9318 {
9319   switch (TREE_CODE (type))
9320     {
9321     case ERROR_MARK:
9322     case VOID_TYPE:
9323     case INTEGER_TYPE:
9324     case REAL_TYPE:
9325     case FIXED_POINT_TYPE:
9326     case COMPLEX_TYPE:
9327     case BOOLEAN_TYPE:
9328       return 1;
9329
9330     case ARRAY_TYPE:
9331     case RECORD_TYPE:
9332     case UNION_TYPE:
9333     case QUAL_UNION_TYPE:
9334     case ENUMERAL_TYPE:
9335     case FUNCTION_TYPE:
9336     case METHOD_TYPE:
9337     case POINTER_TYPE:
9338     case REFERENCE_TYPE:
9339     case OFFSET_TYPE:
9340     case LANG_TYPE:
9341     case VECTOR_TYPE:
9342       return 0;
9343
9344     default:
9345       gcc_unreachable ();
9346     }
9347
9348   return 0;
9349 }
9350
9351 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
9352    node, return the size in bits for the type if it is a constant, or else
9353    return the alignment for the type if the type's size is not constant, or
9354    else return BITS_PER_WORD if the type actually turns out to be an
9355    ERROR_MARK node.  */
9356
9357 static inline unsigned HOST_WIDE_INT
9358 simple_type_size_in_bits (const_tree type)
9359 {
9360   if (TREE_CODE (type) == ERROR_MARK)
9361     return BITS_PER_WORD;
9362   else if (TYPE_SIZE (type) == NULL_TREE)
9363     return 0;
9364   else if (host_integerp (TYPE_SIZE (type), 1))
9365     return tree_low_cst (TYPE_SIZE (type), 1);
9366   else
9367     return TYPE_ALIGN (type);
9368 }
9369
9370 /* Return true if the debug information for the given type should be
9371    emitted as a subrange type.  */
9372
9373 static inline bool
9374 is_subrange_type (const_tree type)
9375 {
9376   tree subtype = TREE_TYPE (type);
9377
9378   /* Subrange types are identified by the fact that they are integer
9379      types, and that they have a subtype which is either an integer type
9380      or an enumeral type.  */
9381
9382   if (TREE_CODE (type) != INTEGER_TYPE
9383       || subtype == NULL_TREE)
9384     return false;
9385
9386   if (TREE_CODE (subtype) != INTEGER_TYPE
9387       && TREE_CODE (subtype) != ENUMERAL_TYPE
9388       && TREE_CODE (subtype) != BOOLEAN_TYPE)
9389     return false;
9390
9391   if (TREE_CODE (type) == TREE_CODE (subtype)
9392       && int_size_in_bytes (type) == int_size_in_bytes (subtype)
9393       && TYPE_MIN_VALUE (type) != NULL
9394       && TYPE_MIN_VALUE (subtype) != NULL
9395       && tree_int_cst_equal (TYPE_MIN_VALUE (type), TYPE_MIN_VALUE (subtype))
9396       && TYPE_MAX_VALUE (type) != NULL
9397       && TYPE_MAX_VALUE (subtype) != NULL
9398       && tree_int_cst_equal (TYPE_MAX_VALUE (type), TYPE_MAX_VALUE (subtype)))
9399     {
9400       /* The type and its subtype have the same representation.  If in
9401          addition the two types also have the same name, then the given
9402          type is not a subrange type, but rather a plain base type.  */
9403       /* FIXME: brobecker/2004-03-22:
9404          Sizetype INTEGER_CSTs nodes are canonicalized.  It should
9405          therefore be sufficient to check the TYPE_SIZE node pointers
9406          rather than checking the actual size.  Unfortunately, we have
9407          found some cases, such as in the Ada "integer" type, where
9408          this is not the case.  Until this problem is solved, we need to
9409          keep checking the actual size.  */
9410       tree type_name = TYPE_NAME (type);
9411       tree subtype_name = TYPE_NAME (subtype);
9412
9413       if (type_name != NULL && TREE_CODE (type_name) == TYPE_DECL)
9414         type_name = DECL_NAME (type_name);
9415
9416       if (subtype_name != NULL && TREE_CODE (subtype_name) == TYPE_DECL)
9417         subtype_name = DECL_NAME (subtype_name);
9418
9419       if (type_name == subtype_name)
9420         return false;
9421     }
9422
9423   return true;
9424 }
9425
9426 /*  Given a pointer to a tree node for a subrange type, return a pointer
9427     to a DIE that describes the given type.  */
9428
9429 static dw_die_ref
9430 subrange_type_die (tree type, dw_die_ref context_die)
9431 {
9432   dw_die_ref subrange_die;
9433   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
9434
9435   if (context_die == NULL)
9436     context_die = comp_unit_die;
9437
9438   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
9439
9440   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
9441     {
9442       /* The size of the subrange type and its base type do not match,
9443          so we need to generate a size attribute for the subrange type.  */
9444       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
9445     }
9446
9447   if (TYPE_MIN_VALUE (type) != NULL)
9448     add_bound_info (subrange_die, DW_AT_lower_bound,
9449                     TYPE_MIN_VALUE (type));
9450   if (TYPE_MAX_VALUE (type) != NULL)
9451     add_bound_info (subrange_die, DW_AT_upper_bound,
9452                     TYPE_MAX_VALUE (type));
9453
9454   return subrange_die;
9455 }
9456
9457 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
9458    entry that chains various modifiers in front of the given type.  */
9459
9460 static dw_die_ref
9461 modified_type_die (tree type, int is_const_type, int is_volatile_type,
9462                    dw_die_ref context_die)
9463 {
9464   enum tree_code code = TREE_CODE (type);
9465   dw_die_ref mod_type_die;
9466   dw_die_ref sub_die = NULL;
9467   tree item_type = NULL;
9468   tree qualified_type;
9469   tree name;
9470
9471   if (code == ERROR_MARK)
9472     return NULL;
9473
9474   /* See if we already have the appropriately qualified variant of
9475      this type.  */
9476   qualified_type
9477     = get_qualified_type (type,
9478                           ((is_const_type ? TYPE_QUAL_CONST : 0)
9479                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
9480
9481   /* If we do, then we can just use its DIE, if it exists.  */
9482   if (qualified_type)
9483     {
9484       mod_type_die = lookup_type_die (qualified_type);
9485       if (mod_type_die)
9486         return mod_type_die;
9487     }
9488
9489   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
9490
9491   /* Handle C typedef types.  */
9492   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
9493     {
9494       tree dtype = TREE_TYPE (name);
9495
9496       if (qualified_type == dtype)
9497         {
9498           /* For a named type, use the typedef.  */
9499           gen_type_die (qualified_type, context_die);
9500           return lookup_type_die (qualified_type);
9501         }
9502       else if (is_const_type < TYPE_READONLY (dtype)
9503                || is_volatile_type < TYPE_VOLATILE (dtype)
9504                || (is_const_type <= TYPE_READONLY (dtype)
9505                    && is_volatile_type <= TYPE_VOLATILE (dtype)
9506                    && DECL_ORIGINAL_TYPE (name) != type))
9507         /* cv-unqualified version of named type.  Just use the unnamed
9508            type to which it refers.  */
9509         return modified_type_die (DECL_ORIGINAL_TYPE (name),
9510                                   is_const_type, is_volatile_type,
9511                                   context_die);
9512       /* Else cv-qualified version of named type; fall through.  */
9513     }
9514
9515   if (is_const_type)
9516     {
9517       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
9518       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
9519     }
9520   else if (is_volatile_type)
9521     {
9522       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
9523       sub_die = modified_type_die (type, 0, 0, context_die);
9524     }
9525   else if (code == POINTER_TYPE)
9526     {
9527       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
9528       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9529                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9530       item_type = TREE_TYPE (type);
9531     }
9532   else if (code == REFERENCE_TYPE)
9533     {
9534       mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
9535       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
9536                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
9537       item_type = TREE_TYPE (type);
9538     }
9539   else if (is_subrange_type (type))
9540     {
9541       mod_type_die = subrange_type_die (type, context_die);
9542       item_type = TREE_TYPE (type);
9543     }
9544   else if (is_base_type (type))
9545     mod_type_die = base_type_die (type);
9546   else
9547     {
9548       gen_type_die (type, context_die);
9549
9550       /* We have to get the type_main_variant here (and pass that to the
9551          `lookup_type_die' routine) because the ..._TYPE node we have
9552          might simply be a *copy* of some original type node (where the
9553          copy was created to help us keep track of typedef names) and
9554          that copy might have a different TYPE_UID from the original
9555          ..._TYPE node.  */
9556       if (TREE_CODE (type) != VECTOR_TYPE)
9557         return lookup_type_die (type_main_variant (type));
9558       else
9559         /* Vectors have the debugging information in the type,
9560            not the main variant.  */
9561         return lookup_type_die (type);
9562     }
9563
9564   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
9565      don't output a DW_TAG_typedef, since there isn't one in the
9566      user's program; just attach a DW_AT_name to the type.  */
9567   if (name
9568       && (TREE_CODE (name) != TYPE_DECL
9569           || (TREE_TYPE (name) == qualified_type && DECL_NAME (name))))
9570     {
9571       if (TREE_CODE (name) == TYPE_DECL)
9572         /* Could just call add_name_and_src_coords_attributes here,
9573            but since this is a builtin type it doesn't have any
9574            useful source coordinates anyway.  */
9575         name = DECL_NAME (name);
9576       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
9577     }
9578
9579   if (qualified_type)
9580     equate_type_number_to_die (qualified_type, mod_type_die);
9581
9582   if (item_type)
9583     /* We must do this after the equate_type_number_to_die call, in case
9584        this is a recursive type.  This ensures that the modified_type_die
9585        recursion will terminate even if the type is recursive.  Recursive
9586        types are possible in Ada.  */
9587     sub_die = modified_type_die (item_type,
9588                                  TYPE_READONLY (item_type),
9589                                  TYPE_VOLATILE (item_type),
9590                                  context_die);
9591
9592   if (sub_die != NULL)
9593     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
9594
9595   return mod_type_die;
9596 }
9597
9598 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
9599    an enumerated type.  */
9600
9601 static inline int
9602 type_is_enum (const_tree type)
9603 {
9604   return TREE_CODE (type) == ENUMERAL_TYPE;
9605 }
9606
9607 /* Return the DBX register number described by a given RTL node.  */
9608
9609 static unsigned int
9610 dbx_reg_number (const_rtx rtl)
9611 {
9612   unsigned regno = REGNO (rtl);
9613
9614   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
9615
9616 #ifdef LEAF_REG_REMAP
9617   if (current_function_uses_only_leaf_regs)
9618     {
9619       int leaf_reg = LEAF_REG_REMAP (regno);
9620       if (leaf_reg != -1)
9621         regno = (unsigned) leaf_reg;
9622     }
9623 #endif
9624
9625   return DBX_REGISTER_NUMBER (regno);
9626 }
9627
9628 /* Optionally add a DW_OP_piece term to a location description expression.
9629    DW_OP_piece is only added if the location description expression already
9630    doesn't end with DW_OP_piece.  */
9631
9632 static void
9633 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
9634 {
9635   dw_loc_descr_ref loc;
9636
9637   if (*list_head != NULL)
9638     {
9639       /* Find the end of the chain.  */
9640       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
9641         ;
9642
9643       if (loc->dw_loc_opc != DW_OP_piece)
9644         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
9645     }
9646 }
9647
9648 /* Return a location descriptor that designates a machine register or
9649    zero if there is none.  */
9650
9651 static dw_loc_descr_ref
9652 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
9653 {
9654   rtx regs;
9655
9656   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
9657     return 0;
9658
9659   regs = targetm.dwarf_register_span (rtl);
9660
9661   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
9662     return multiple_reg_loc_descriptor (rtl, regs, initialized);
9663   else
9664     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
9665 }
9666
9667 /* Return a location descriptor that designates a machine register for
9668    a given hard register number.  */
9669
9670 static dw_loc_descr_ref
9671 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
9672 {
9673   dw_loc_descr_ref reg_loc_descr = new_reg_loc_descr (regno, 0);
9674
9675   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
9676     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9677
9678   return reg_loc_descr;
9679 }
9680
9681 /* Given an RTL of a register, return a location descriptor that
9682    designates a value that spans more than one register.  */
9683
9684 static dw_loc_descr_ref
9685 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
9686                              enum var_init_status initialized)
9687 {
9688   int nregs, size, i;
9689   unsigned reg;
9690   dw_loc_descr_ref loc_result = NULL;
9691
9692   reg = REGNO (rtl);
9693 #ifdef LEAF_REG_REMAP
9694   if (current_function_uses_only_leaf_regs)
9695     {
9696       int leaf_reg = LEAF_REG_REMAP (reg);
9697       if (leaf_reg != -1)
9698         reg = (unsigned) leaf_reg;
9699     }
9700 #endif
9701   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
9702   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
9703
9704   /* Simple, contiguous registers.  */
9705   if (regs == NULL_RTX)
9706     {
9707       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
9708
9709       loc_result = NULL;
9710       while (nregs--)
9711         {
9712           dw_loc_descr_ref t;
9713
9714           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
9715                                       VAR_INIT_STATUS_INITIALIZED);
9716           add_loc_descr (&loc_result, t);
9717           add_loc_descr_op_piece (&loc_result, size);
9718           ++reg;
9719         }
9720       return loc_result;
9721     }
9722
9723   /* Now onto stupid register sets in non contiguous locations.  */
9724
9725   gcc_assert (GET_CODE (regs) == PARALLEL);
9726
9727   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
9728   loc_result = NULL;
9729
9730   for (i = 0; i < XVECLEN (regs, 0); ++i)
9731     {
9732       dw_loc_descr_ref t;
9733
9734       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
9735                                   VAR_INIT_STATUS_INITIALIZED);
9736       add_loc_descr (&loc_result, t);
9737       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
9738       add_loc_descr_op_piece (&loc_result, size);
9739     }
9740
9741   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
9742     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9743   return loc_result;
9744 }
9745
9746 #endif /* DWARF2_DEBUGGING_INFO */
9747
9748 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
9749
9750 /* Return a location descriptor that designates a constant.  */
9751
9752 static dw_loc_descr_ref
9753 int_loc_descriptor (HOST_WIDE_INT i)
9754 {
9755   enum dwarf_location_atom op;
9756
9757   /* Pick the smallest representation of a constant, rather than just
9758      defaulting to the LEB encoding.  */
9759   if (i >= 0)
9760     {
9761       if (i <= 31)
9762         op = DW_OP_lit0 + i;
9763       else if (i <= 0xff)
9764         op = DW_OP_const1u;
9765       else if (i <= 0xffff)
9766         op = DW_OP_const2u;
9767       else if (HOST_BITS_PER_WIDE_INT == 32
9768                || i <= 0xffffffff)
9769         op = DW_OP_const4u;
9770       else
9771         op = DW_OP_constu;
9772     }
9773   else
9774     {
9775       if (i >= -0x80)
9776         op = DW_OP_const1s;
9777       else if (i >= -0x8000)
9778         op = DW_OP_const2s;
9779       else if (HOST_BITS_PER_WIDE_INT == 32
9780                || i >= -0x80000000)
9781         op = DW_OP_const4s;
9782       else
9783         op = DW_OP_consts;
9784     }
9785
9786   return new_loc_descr (op, i, 0);
9787 }
9788 #endif
9789
9790 #ifdef DWARF2_DEBUGGING_INFO
9791
9792 /* Return a location descriptor that designates a base+offset location.  */
9793
9794 static dw_loc_descr_ref
9795 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
9796                  enum var_init_status initialized)
9797 {
9798   unsigned int regno;
9799   dw_loc_descr_ref result;
9800   dw_fde_ref fde = current_fde ();
9801
9802   /* We only use "frame base" when we're sure we're talking about the
9803      post-prologue local stack frame.  We do this by *not* running
9804      register elimination until this point, and recognizing the special
9805      argument pointer and soft frame pointer rtx's.  */
9806   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
9807     {
9808       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
9809
9810       if (elim != reg)
9811         {
9812           if (GET_CODE (elim) == PLUS)
9813             {
9814               offset += INTVAL (XEXP (elim, 1));
9815               elim = XEXP (elim, 0);
9816             }
9817           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
9818                        && (elim == hard_frame_pointer_rtx
9819                            || elim == stack_pointer_rtx))
9820                       || elim == (frame_pointer_needed
9821                                   ? hard_frame_pointer_rtx
9822                                   : stack_pointer_rtx));
9823
9824           /* If drap register is used to align stack, use frame
9825              pointer + offset to access stack variables.  If stack
9826              is aligned without drap, use stack pointer + offset to
9827              access stack variables.  */
9828           if (crtl->stack_realign_tried
9829               && cfa.reg == HARD_FRAME_POINTER_REGNUM
9830               && reg == frame_pointer_rtx)
9831             {
9832               int base_reg
9833                 = DWARF_FRAME_REGNUM (cfa.indirect
9834                                       ? HARD_FRAME_POINTER_REGNUM
9835                                       : STACK_POINTER_REGNUM);
9836               return new_reg_loc_descr (base_reg, offset);
9837             }
9838
9839           offset += frame_pointer_fb_offset;
9840           return new_loc_descr (DW_OP_fbreg, offset, 0);
9841         }
9842     }
9843   else if (fde
9844            && fde->drap_reg != INVALID_REGNUM
9845            && (fde->drap_reg == REGNO (reg)
9846                || fde->vdrap_reg == REGNO (reg)))
9847     {
9848       /* Use cfa+offset to represent the location of arguments passed
9849          on stack when drap is used to align stack.  */
9850       return new_loc_descr (DW_OP_fbreg, offset, 0);
9851     }
9852
9853   regno = dbx_reg_number (reg);
9854   if (regno <= 31)
9855     result = new_loc_descr (DW_OP_breg0 + regno, offset, 0);
9856   else
9857     result = new_loc_descr (DW_OP_bregx, regno, offset);
9858
9859   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
9860     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9861
9862   return result;
9863 }
9864
9865 /* Return true if this RTL expression describes a base+offset calculation.  */
9866
9867 static inline int
9868 is_based_loc (const_rtx rtl)
9869 {
9870   return (GET_CODE (rtl) == PLUS
9871           && ((REG_P (XEXP (rtl, 0))
9872                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
9873                && GET_CODE (XEXP (rtl, 1)) == CONST_INT)));
9874 }
9875
9876 /* Return a descriptor that describes the concatenation of N locations
9877    used to form the address of a memory location.  */
9878
9879 static dw_loc_descr_ref
9880 concatn_mem_loc_descriptor (rtx concatn, enum machine_mode mode,
9881                             enum var_init_status initialized)
9882 {
9883   unsigned int i;
9884   dw_loc_descr_ref cc_loc_result = NULL;
9885   unsigned int n = XVECLEN (concatn, 0);
9886
9887   for (i = 0; i < n; ++i)
9888     {
9889       dw_loc_descr_ref ref;
9890       rtx x = XVECEXP (concatn, 0, i);
9891
9892       ref = mem_loc_descriptor (x, mode, VAR_INIT_STATUS_INITIALIZED);
9893       if (ref == NULL)
9894         return NULL;
9895
9896       add_loc_descr (&cc_loc_result, ref);
9897       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
9898     }
9899
9900   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
9901     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
9902
9903   return cc_loc_result;
9904 }
9905
9906 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
9907    failed.  */
9908
9909 static dw_loc_descr_ref
9910 tls_mem_loc_descriptor (rtx mem)
9911 {
9912   tree base;
9913   dw_loc_descr_ref loc_result, loc_result2;
9914
9915   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
9916     return NULL;
9917
9918   base = get_base_address (MEM_EXPR (mem));
9919   if (base == NULL
9920       || TREE_CODE (base) != VAR_DECL
9921       || !DECL_THREAD_LOCAL_P (base))
9922     return NULL;
9923
9924   loc_result = loc_descriptor_from_tree_1 (MEM_EXPR (mem), 2);
9925   if (loc_result == NULL)
9926     return NULL;
9927
9928   if (INTVAL (MEM_OFFSET (mem)))
9929     {
9930       if (INTVAL (MEM_OFFSET (mem)) >= 0)
9931         add_loc_descr (&loc_result,
9932                        new_loc_descr (DW_OP_plus_uconst,
9933                                       INTVAL (MEM_OFFSET (mem)), 0));
9934       else
9935         {
9936           loc_result2 = mem_loc_descriptor (MEM_OFFSET (mem), GET_MODE (mem),
9937                                             VAR_INIT_STATUS_INITIALIZED);
9938           if (loc_result2 == 0)
9939             return NULL;
9940           add_loc_descr (&loc_result, loc_result2);
9941           add_loc_descr (&loc_result, new_loc_descr (DW_OP_plus, 0, 0));
9942         }
9943     }
9944
9945   return loc_result;
9946 }
9947
9948 /* The following routine converts the RTL for a variable or parameter
9949    (resident in memory) into an equivalent Dwarf representation of a
9950    mechanism for getting the address of that same variable onto the top of a
9951    hypothetical "address evaluation" stack.
9952
9953    When creating memory location descriptors, we are effectively transforming
9954    the RTL for a memory-resident object into its Dwarf postfix expression
9955    equivalent.  This routine recursively descends an RTL tree, turning
9956    it into Dwarf postfix code as it goes.
9957
9958    MODE is the mode of the memory reference, needed to handle some
9959    autoincrement addressing modes.
9960
9961    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
9962    location list for RTL.
9963
9964    Return 0 if we can't represent the location.  */
9965
9966 static dw_loc_descr_ref
9967 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
9968                     enum var_init_status initialized)
9969 {
9970   dw_loc_descr_ref mem_loc_result = NULL;
9971   enum dwarf_location_atom op;
9972
9973   /* Note that for a dynamically sized array, the location we will generate a
9974      description of here will be the lowest numbered location which is
9975      actually within the array.  That's *not* necessarily the same as the
9976      zeroth element of the array.  */
9977
9978   rtl = targetm.delegitimize_address (rtl);
9979
9980   switch (GET_CODE (rtl))
9981     {
9982     case POST_INC:
9983     case POST_DEC:
9984     case POST_MODIFY:
9985       /* POST_INC and POST_DEC can be handled just like a SUBREG.  So we
9986          just fall into the SUBREG code.  */
9987
9988       /* ... fall through ...  */
9989
9990     case SUBREG:
9991       /* The case of a subreg may arise when we have a local (register)
9992          variable or a formal (register) parameter which doesn't quite fill
9993          up an entire register.  For now, just assume that it is
9994          legitimate to make the Dwarf info refer to the whole register which
9995          contains the given subreg.  */
9996       rtl = XEXP (rtl, 0);
9997
9998       /* ... fall through ...  */
9999
10000     case REG:
10001       /* Whenever a register number forms a part of the description of the
10002          method for calculating the (dynamic) address of a memory resident
10003          object, DWARF rules require the register number be referred to as
10004          a "base register".  This distinction is not based in any way upon
10005          what category of register the hardware believes the given register
10006          belongs to.  This is strictly DWARF terminology we're dealing with
10007          here. Note that in cases where the location of a memory-resident
10008          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
10009          OP_CONST (0)) the actual DWARF location descriptor that we generate
10010          may just be OP_BASEREG (basereg).  This may look deceptively like
10011          the object in question was allocated to a register (rather than in
10012          memory) so DWARF consumers need to be aware of the subtle
10013          distinction between OP_REG and OP_BASEREG.  */
10014       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
10015         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
10016       else if (stack_realign_drap
10017                && crtl->drap_reg
10018                && crtl->args.internal_arg_pointer == rtl
10019                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
10020         {
10021           /* If RTL is internal_arg_pointer, which has been optimized
10022              out, use DRAP instead.  */
10023           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
10024                                             VAR_INIT_STATUS_INITIALIZED);
10025         }
10026       break;
10027
10028     case MEM:
10029       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
10030                                            VAR_INIT_STATUS_INITIALIZED);
10031       if (mem_loc_result == NULL)
10032         mem_loc_result = tls_mem_loc_descriptor (rtl);
10033       if (mem_loc_result != 0)
10034         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
10035       break;
10036
10037     case LO_SUM:
10038          rtl = XEXP (rtl, 1);
10039
10040       /* ... fall through ...  */
10041
10042     case LABEL_REF:
10043       /* Some ports can transform a symbol ref into a label ref, because
10044          the symbol ref is too far away and has to be dumped into a constant
10045          pool.  */
10046     case CONST:
10047     case SYMBOL_REF:
10048       /* Alternatively, the symbol in the constant pool might be referenced
10049          by a different symbol.  */
10050       if (GET_CODE (rtl) == SYMBOL_REF && CONSTANT_POOL_ADDRESS_P (rtl))
10051         {
10052           bool marked;
10053           rtx tmp = get_pool_constant_mark (rtl, &marked);
10054
10055           if (GET_CODE (tmp) == SYMBOL_REF)
10056             {
10057               rtl = tmp;
10058               if (CONSTANT_POOL_ADDRESS_P (tmp))
10059                 get_pool_constant_mark (tmp, &marked);
10060               else
10061                 marked = true;
10062             }
10063
10064           /* If all references to this pool constant were optimized away,
10065              it was not output and thus we can't represent it.
10066              FIXME: might try to use DW_OP_const_value here, though
10067              DW_OP_piece complicates it.  */
10068           if (!marked)
10069             return 0;
10070         }
10071
10072       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
10073       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
10074       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
10075       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
10076       break;
10077
10078     case PRE_MODIFY:
10079       /* Extract the PLUS expression nested inside and fall into
10080          PLUS code below.  */
10081       rtl = XEXP (rtl, 1);
10082       goto plus;
10083
10084     case PRE_INC:
10085     case PRE_DEC:
10086       /* Turn these into a PLUS expression and fall into the PLUS code
10087          below.  */
10088       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
10089                           GEN_INT (GET_CODE (rtl) == PRE_INC
10090                                    ? GET_MODE_UNIT_SIZE (mode)
10091                                    : -GET_MODE_UNIT_SIZE (mode)));
10092
10093       /* ... fall through ...  */
10094
10095     case PLUS:
10096     plus:
10097       if (is_based_loc (rtl))
10098         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
10099                                           INTVAL (XEXP (rtl, 1)),
10100                                           VAR_INIT_STATUS_INITIALIZED);
10101       else
10102         {
10103           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
10104                                                VAR_INIT_STATUS_INITIALIZED);
10105           if (mem_loc_result == 0)
10106             break;
10107
10108           if (GET_CODE (XEXP (rtl, 1)) == CONST_INT
10109               && INTVAL (XEXP (rtl, 1)) >= 0)
10110             add_loc_descr (&mem_loc_result,
10111                            new_loc_descr (DW_OP_plus_uconst,
10112                                           INTVAL (XEXP (rtl, 1)), 0));
10113           else
10114             {
10115               dw_loc_descr_ref mem_loc_result2
10116                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
10117                                       VAR_INIT_STATUS_INITIALIZED);
10118               if (mem_loc_result2 == 0)
10119                 break;
10120               add_loc_descr (&mem_loc_result, mem_loc_result2);
10121               add_loc_descr (&mem_loc_result,
10122                              new_loc_descr (DW_OP_plus, 0, 0));
10123             }
10124         }
10125       break;
10126
10127     /* If a pseudo-reg is optimized away, it is possible for it to
10128        be replaced with a MEM containing a multiply or shift.  */
10129     case MULT:
10130       op = DW_OP_mul;
10131       goto do_binop;
10132
10133     case ASHIFT:
10134       op = DW_OP_shl;
10135       goto do_binop;
10136
10137     case ASHIFTRT:
10138       op = DW_OP_shra;
10139       goto do_binop;
10140
10141     case LSHIFTRT:
10142       op = DW_OP_shr;
10143       goto do_binop;
10144
10145     do_binop:
10146       {
10147         dw_loc_descr_ref op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
10148                                                    VAR_INIT_STATUS_INITIALIZED);
10149         dw_loc_descr_ref op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
10150                                                    VAR_INIT_STATUS_INITIALIZED);
10151
10152         if (op0 == 0 || op1 == 0)
10153           break;
10154
10155         mem_loc_result = op0;
10156         add_loc_descr (&mem_loc_result, op1);
10157         add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
10158         break;
10159       }
10160
10161     case CONST_INT:
10162       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
10163       break;
10164
10165     case CONCATN:
10166       mem_loc_result = concatn_mem_loc_descriptor (rtl, mode,
10167                                                    VAR_INIT_STATUS_INITIALIZED);
10168       break;
10169
10170     case UNSPEC:
10171       /* If delegitimize_address couldn't do anything with the UNSPEC, we
10172          can't express it in the debug info.  This can happen e.g. with some
10173          TLS UNSPECs.  */
10174       break;
10175
10176     default:
10177       gcc_unreachable ();
10178     }
10179
10180   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10181     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10182
10183   return mem_loc_result;
10184 }
10185
10186 /* Return a descriptor that describes the concatenation of two locations.
10187    This is typically a complex variable.  */
10188
10189 static dw_loc_descr_ref
10190 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
10191 {
10192   dw_loc_descr_ref cc_loc_result = NULL;
10193   dw_loc_descr_ref x0_ref = loc_descriptor (x0, VAR_INIT_STATUS_INITIALIZED);
10194   dw_loc_descr_ref x1_ref = loc_descriptor (x1, VAR_INIT_STATUS_INITIALIZED);
10195
10196   if (x0_ref == 0 || x1_ref == 0)
10197     return 0;
10198
10199   cc_loc_result = x0_ref;
10200   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
10201
10202   add_loc_descr (&cc_loc_result, x1_ref);
10203   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
10204
10205   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
10206     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10207
10208   return cc_loc_result;
10209 }
10210
10211 /* Return a descriptor that describes the concatenation of N
10212    locations.  */
10213
10214 static dw_loc_descr_ref
10215 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
10216 {
10217   unsigned int i;
10218   dw_loc_descr_ref cc_loc_result = NULL;
10219   unsigned int n = XVECLEN (concatn, 0);
10220
10221   for (i = 0; i < n; ++i)
10222     {
10223       dw_loc_descr_ref ref;
10224       rtx x = XVECEXP (concatn, 0, i);
10225
10226       ref = loc_descriptor (x, VAR_INIT_STATUS_INITIALIZED);
10227       if (ref == NULL)
10228         return NULL;
10229
10230       add_loc_descr (&cc_loc_result, ref);
10231       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
10232     }
10233
10234   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
10235     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
10236
10237   return cc_loc_result;
10238 }
10239
10240 /* Output a proper Dwarf location descriptor for a variable or parameter
10241    which is either allocated in a register or in a memory location.  For a
10242    register, we just generate an OP_REG and the register number.  For a
10243    memory location we provide a Dwarf postfix expression describing how to
10244    generate the (dynamic) address of the object onto the address stack.
10245
10246    If we don't know how to describe it, return 0.  */
10247
10248 static dw_loc_descr_ref
10249 loc_descriptor (rtx rtl, enum var_init_status initialized)
10250 {
10251   dw_loc_descr_ref loc_result = NULL;
10252
10253   switch (GET_CODE (rtl))
10254     {
10255     case SUBREG:
10256       /* The case of a subreg may arise when we have a local (register)
10257          variable or a formal (register) parameter which doesn't quite fill
10258          up an entire register.  For now, just assume that it is
10259          legitimate to make the Dwarf info refer to the whole register which
10260          contains the given subreg.  */
10261       rtl = SUBREG_REG (rtl);
10262
10263       /* ... fall through ...  */
10264
10265     case REG:
10266       loc_result = reg_loc_descriptor (rtl, initialized);
10267       break;
10268
10269     case MEM:
10270       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
10271                                        initialized);
10272       if (loc_result == NULL)
10273         loc_result = tls_mem_loc_descriptor (rtl);
10274       break;
10275
10276     case CONCAT:
10277       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
10278                                           initialized);
10279       break;
10280
10281     case CONCATN:
10282       loc_result = concatn_loc_descriptor (rtl, initialized);
10283       break;
10284
10285     case VAR_LOCATION:
10286       /* Single part.  */
10287       if (GET_CODE (XEXP (rtl, 1)) != PARALLEL)
10288         {
10289           loc_result = loc_descriptor (XEXP (XEXP (rtl, 1), 0), initialized);
10290           break;
10291         }
10292
10293       rtl = XEXP (rtl, 1);
10294       /* FALLTHRU */
10295
10296     case PARALLEL:
10297       {
10298         rtvec par_elems = XVEC (rtl, 0);
10299         int num_elem = GET_NUM_ELEM (par_elems);
10300         enum machine_mode mode;
10301         int i;
10302
10303         /* Create the first one, so we have something to add to.  */
10304         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
10305                                      initialized);
10306         if (loc_result == NULL)
10307           return NULL;
10308         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
10309         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
10310         for (i = 1; i < num_elem; i++)
10311           {
10312             dw_loc_descr_ref temp;
10313
10314             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
10315                                    initialized);
10316             if (temp == NULL)
10317               return NULL;
10318             add_loc_descr (&loc_result, temp);
10319             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
10320             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
10321           }
10322       }
10323       break;
10324
10325     default:
10326       gcc_unreachable ();
10327     }
10328
10329   return loc_result;
10330 }
10331
10332 /* Similar, but generate the descriptor from trees instead of rtl.  This comes
10333    up particularly with variable length arrays.  WANT_ADDRESS is 2 if this is
10334    a top-level invocation of loc_descriptor_from_tree; is 1 if this is not a
10335    top-level invocation, and we require the address of LOC; is 0 if we require
10336    the value of LOC.  */
10337
10338 static dw_loc_descr_ref
10339 loc_descriptor_from_tree_1 (tree loc, int want_address)
10340 {
10341   dw_loc_descr_ref ret, ret1;
10342   int have_address = 0;
10343   enum dwarf_location_atom op;
10344
10345   /* ??? Most of the time we do not take proper care for sign/zero
10346      extending the values properly.  Hopefully this won't be a real
10347      problem...  */
10348
10349   switch (TREE_CODE (loc))
10350     {
10351     case ERROR_MARK:
10352       return 0;
10353
10354     case PLACEHOLDER_EXPR:
10355       /* This case involves extracting fields from an object to determine the
10356          position of other fields.  We don't try to encode this here.  The
10357          only user of this is Ada, which encodes the needed information using
10358          the names of types.  */
10359       return 0;
10360
10361     case CALL_EXPR:
10362       return 0;
10363
10364     case PREINCREMENT_EXPR:
10365     case PREDECREMENT_EXPR:
10366     case POSTINCREMENT_EXPR:
10367     case POSTDECREMENT_EXPR:
10368       /* There are no opcodes for these operations.  */
10369       return 0;
10370
10371     case ADDR_EXPR:
10372       /* If we already want an address, there's nothing we can do.  */
10373       if (want_address)
10374         return 0;
10375
10376       /* Otherwise, process the argument and look for the address.  */
10377       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 1);
10378
10379     case VAR_DECL:
10380       if (DECL_THREAD_LOCAL_P (loc))
10381         {
10382           rtx rtl;
10383           unsigned first_op;
10384           unsigned second_op;
10385
10386           if (targetm.have_tls)
10387             {
10388               /* If this is not defined, we have no way to emit the
10389                  data.  */
10390               if (!targetm.asm_out.output_dwarf_dtprel)
10391                 return 0;
10392
10393                /* The way DW_OP_GNU_push_tls_address is specified, we
10394                   can only look up addresses of objects in the current
10395                   module.  */
10396               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
10397                 return 0;
10398               first_op = INTERNAL_DW_OP_tls_addr;
10399               second_op = DW_OP_GNU_push_tls_address;
10400             }
10401           else
10402             {
10403               if (!targetm.emutls.debug_form_tls_address)
10404                 return 0;
10405               loc = emutls_decl (loc);
10406               first_op = DW_OP_addr;
10407               second_op = DW_OP_form_tls_address;
10408             }
10409
10410           rtl = rtl_for_decl_location (loc);
10411           if (rtl == NULL_RTX)
10412             return 0;
10413
10414           if (!MEM_P (rtl))
10415             return 0;
10416           rtl = XEXP (rtl, 0);
10417           if (! CONSTANT_P (rtl))
10418             return 0;
10419
10420           ret = new_loc_descr (first_op, 0, 0);
10421           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
10422           ret->dw_loc_oprnd1.v.val_addr = rtl;
10423
10424           ret1 = new_loc_descr (second_op, 0, 0);
10425           add_loc_descr (&ret, ret1);
10426
10427           have_address = 1;
10428           break;
10429         }
10430       /* FALLTHRU */
10431
10432     case PARM_DECL:
10433       if (DECL_HAS_VALUE_EXPR_P (loc))
10434         return loc_descriptor_from_tree_1 (DECL_VALUE_EXPR (loc),
10435                                            want_address);
10436       /* FALLTHRU */
10437
10438     case RESULT_DECL:
10439     case FUNCTION_DECL:
10440       {
10441         rtx rtl = rtl_for_decl_location (loc);
10442
10443         if (rtl == NULL_RTX)
10444           return 0;
10445         else if (GET_CODE (rtl) == CONST_INT)
10446           {
10447             HOST_WIDE_INT val = INTVAL (rtl);
10448             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
10449               val &= GET_MODE_MASK (DECL_MODE (loc));
10450             ret = int_loc_descriptor (val);
10451           }
10452         else if (GET_CODE (rtl) == CONST_STRING)
10453           return 0;
10454         else if (CONSTANT_P (rtl))
10455           {
10456             ret = new_loc_descr (DW_OP_addr, 0, 0);
10457             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
10458             ret->dw_loc_oprnd1.v.val_addr = rtl;
10459           }
10460         else
10461           {
10462             enum machine_mode mode;
10463
10464             /* Certain constructs can only be represented at top-level.  */
10465             if (want_address == 2)
10466               return loc_descriptor (rtl, VAR_INIT_STATUS_INITIALIZED);
10467
10468             mode = GET_MODE (rtl);
10469             if (MEM_P (rtl))
10470               {
10471                 rtl = XEXP (rtl, 0);
10472                 have_address = 1;
10473               }
10474             ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
10475           }
10476       }
10477       break;
10478
10479     case INDIRECT_REF:
10480       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
10481       have_address = 1;
10482       break;
10483
10484     case COMPOUND_EXPR:
10485       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), want_address);
10486
10487     CASE_CONVERT:
10488     case VIEW_CONVERT_EXPR:
10489     case SAVE_EXPR:
10490     case MODIFY_EXPR:
10491       return loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), want_address);
10492
10493     case COMPONENT_REF:
10494     case BIT_FIELD_REF:
10495     case ARRAY_REF:
10496     case ARRAY_RANGE_REF:
10497       {
10498         tree obj, offset;
10499         HOST_WIDE_INT bitsize, bitpos, bytepos;
10500         enum machine_mode mode;
10501         int volatilep;
10502         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
10503
10504         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
10505                                    &unsignedp, &volatilep, false);
10506
10507         if (obj == loc)
10508           return 0;
10509
10510         ret = loc_descriptor_from_tree_1 (obj, 1);
10511         if (ret == 0
10512             || bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
10513           return 0;
10514
10515         if (offset != NULL_TREE)
10516           {
10517             /* Variable offset.  */
10518             ret1 = loc_descriptor_from_tree_1 (offset, 0);
10519             if (ret1 == 0)
10520               return 0;
10521             add_loc_descr (&ret, ret1);
10522             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
10523           }
10524
10525         bytepos = bitpos / BITS_PER_UNIT;
10526         if (bytepos > 0)
10527           add_loc_descr (&ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
10528         else if (bytepos < 0)
10529           {
10530             add_loc_descr (&ret, int_loc_descriptor (bytepos));
10531             add_loc_descr (&ret, new_loc_descr (DW_OP_plus, 0, 0));
10532           }
10533
10534         have_address = 1;
10535         break;
10536       }
10537
10538     case INTEGER_CST:
10539       if (host_integerp (loc, 0))
10540         ret = int_loc_descriptor (tree_low_cst (loc, 0));
10541       else
10542         return 0;
10543       break;
10544
10545     case CONSTRUCTOR:
10546       {
10547         /* Get an RTL for this, if something has been emitted.  */
10548         rtx rtl = lookup_constant_def (loc);
10549         enum machine_mode mode;
10550
10551         if (!rtl || !MEM_P (rtl))
10552           return 0;
10553         mode = GET_MODE (rtl);
10554         rtl = XEXP (rtl, 0);
10555         ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
10556         have_address = 1;
10557         break;
10558       }
10559
10560     case TRUTH_AND_EXPR:
10561     case TRUTH_ANDIF_EXPR:
10562     case BIT_AND_EXPR:
10563       op = DW_OP_and;
10564       goto do_binop;
10565
10566     case TRUTH_XOR_EXPR:
10567     case BIT_XOR_EXPR:
10568       op = DW_OP_xor;
10569       goto do_binop;
10570
10571     case TRUTH_OR_EXPR:
10572     case TRUTH_ORIF_EXPR:
10573     case BIT_IOR_EXPR:
10574       op = DW_OP_or;
10575       goto do_binop;
10576
10577     case FLOOR_DIV_EXPR:
10578     case CEIL_DIV_EXPR:
10579     case ROUND_DIV_EXPR:
10580     case TRUNC_DIV_EXPR:
10581       op = DW_OP_div;
10582       goto do_binop;
10583
10584     case MINUS_EXPR:
10585       op = DW_OP_minus;
10586       goto do_binop;
10587
10588     case FLOOR_MOD_EXPR:
10589     case CEIL_MOD_EXPR:
10590     case ROUND_MOD_EXPR:
10591     case TRUNC_MOD_EXPR:
10592       op = DW_OP_mod;
10593       goto do_binop;
10594
10595     case MULT_EXPR:
10596       op = DW_OP_mul;
10597       goto do_binop;
10598
10599     case LSHIFT_EXPR:
10600       op = DW_OP_shl;
10601       goto do_binop;
10602
10603     case RSHIFT_EXPR:
10604       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
10605       goto do_binop;
10606
10607     case POINTER_PLUS_EXPR:
10608     case PLUS_EXPR:
10609       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
10610           && host_integerp (TREE_OPERAND (loc, 1), 0))
10611         {
10612           ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
10613           if (ret == 0)
10614             return 0;
10615
10616           add_loc_descr (&ret,
10617                          new_loc_descr (DW_OP_plus_uconst,
10618                                         tree_low_cst (TREE_OPERAND (loc, 1),
10619                                                       0),
10620                                         0));
10621           break;
10622         }
10623
10624       op = DW_OP_plus;
10625       goto do_binop;
10626
10627     case LE_EXPR:
10628       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
10629         return 0;
10630
10631       op = DW_OP_le;
10632       goto do_binop;
10633
10634     case GE_EXPR:
10635       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
10636         return 0;
10637
10638       op = DW_OP_ge;
10639       goto do_binop;
10640
10641     case LT_EXPR:
10642       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
10643         return 0;
10644
10645       op = DW_OP_lt;
10646       goto do_binop;
10647
10648     case GT_EXPR:
10649       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
10650         return 0;
10651
10652       op = DW_OP_gt;
10653       goto do_binop;
10654
10655     case EQ_EXPR:
10656       op = DW_OP_eq;
10657       goto do_binop;
10658
10659     case NE_EXPR:
10660       op = DW_OP_ne;
10661       goto do_binop;
10662
10663     do_binop:
10664       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
10665       ret1 = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
10666       if (ret == 0 || ret1 == 0)
10667         return 0;
10668
10669       add_loc_descr (&ret, ret1);
10670       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10671       break;
10672
10673     case TRUTH_NOT_EXPR:
10674     case BIT_NOT_EXPR:
10675       op = DW_OP_not;
10676       goto do_unop;
10677
10678     case ABS_EXPR:
10679       op = DW_OP_abs;
10680       goto do_unop;
10681
10682     case NEGATE_EXPR:
10683       op = DW_OP_neg;
10684       goto do_unop;
10685
10686     do_unop:
10687       ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
10688       if (ret == 0)
10689         return 0;
10690
10691       add_loc_descr (&ret, new_loc_descr (op, 0, 0));
10692       break;
10693
10694     case MIN_EXPR:
10695     case MAX_EXPR:
10696       {
10697         const enum tree_code code =
10698           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
10699
10700         loc = build3 (COND_EXPR, TREE_TYPE (loc),
10701                       build2 (code, integer_type_node,
10702                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
10703                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
10704       }
10705
10706       /* ... fall through ...  */
10707
10708     case COND_EXPR:
10709       {
10710         dw_loc_descr_ref lhs
10711           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 1), 0);
10712         dw_loc_descr_ref rhs
10713           = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 2), 0);
10714         dw_loc_descr_ref bra_node, jump_node, tmp;
10715
10716         ret = loc_descriptor_from_tree_1 (TREE_OPERAND (loc, 0), 0);
10717         if (ret == 0 || lhs == 0 || rhs == 0)
10718           return 0;
10719
10720         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
10721         add_loc_descr (&ret, bra_node);
10722
10723         add_loc_descr (&ret, rhs);
10724         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
10725         add_loc_descr (&ret, jump_node);
10726
10727         add_loc_descr (&ret, lhs);
10728         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
10729         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
10730
10731         /* ??? Need a node to point the skip at.  Use a nop.  */
10732         tmp = new_loc_descr (DW_OP_nop, 0, 0);
10733         add_loc_descr (&ret, tmp);
10734         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
10735         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
10736       }
10737       break;
10738
10739     case FIX_TRUNC_EXPR:
10740       return 0;
10741
10742     default:
10743       /* Leave front-end specific codes as simply unknown.  This comes
10744          up, for instance, with the C STMT_EXPR.  */
10745       if ((unsigned int) TREE_CODE (loc)
10746           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
10747         return 0;
10748
10749 #ifdef ENABLE_CHECKING
10750       /* Otherwise this is a generic code; we should just lists all of
10751          these explicitly.  We forgot one.  */
10752       gcc_unreachable ();
10753 #else
10754       /* In a release build, we want to degrade gracefully: better to
10755          generate incomplete debugging information than to crash.  */
10756       return NULL;
10757 #endif
10758     }
10759
10760   /* Show if we can't fill the request for an address.  */
10761   if (want_address && !have_address)
10762     return 0;
10763
10764   /* If we've got an address and don't want one, dereference.  */
10765   if (!want_address && have_address && ret)
10766     {
10767       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
10768
10769       if (size > DWARF2_ADDR_SIZE || size == -1)
10770         return 0;
10771       else if (size == DWARF2_ADDR_SIZE)
10772         op = DW_OP_deref;
10773       else
10774         op = DW_OP_deref_size;
10775
10776       add_loc_descr (&ret, new_loc_descr (op, size, 0));
10777     }
10778
10779   return ret;
10780 }
10781
10782 static inline dw_loc_descr_ref
10783 loc_descriptor_from_tree (tree loc)
10784 {
10785   return loc_descriptor_from_tree_1 (loc, 2);
10786 }
10787
10788 /* Given a value, round it up to the lowest multiple of `boundary'
10789    which is not less than the value itself.  */
10790
10791 static inline HOST_WIDE_INT
10792 ceiling (HOST_WIDE_INT value, unsigned int boundary)
10793 {
10794   return (((value + boundary - 1) / boundary) * boundary);
10795 }
10796
10797 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
10798    pointer to the declared type for the relevant field variable, or return
10799    `integer_type_node' if the given node turns out to be an
10800    ERROR_MARK node.  */
10801
10802 static inline tree
10803 field_type (const_tree decl)
10804 {
10805   tree type;
10806
10807   if (TREE_CODE (decl) == ERROR_MARK)
10808     return integer_type_node;
10809
10810   type = DECL_BIT_FIELD_TYPE (decl);
10811   if (type == NULL_TREE)
10812     type = TREE_TYPE (decl);
10813
10814   return type;
10815 }
10816
10817 /* Given a pointer to a tree node, return the alignment in bits for
10818    it, or else return BITS_PER_WORD if the node actually turns out to
10819    be an ERROR_MARK node.  */
10820
10821 static inline unsigned
10822 simple_type_align_in_bits (const_tree type)
10823 {
10824   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
10825 }
10826
10827 static inline unsigned
10828 simple_decl_align_in_bits (const_tree decl)
10829 {
10830   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
10831 }
10832
10833 /* Return the result of rounding T up to ALIGN.  */
10834
10835 static inline HOST_WIDE_INT
10836 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
10837 {
10838   /* We must be careful if T is negative because HOST_WIDE_INT can be
10839      either "above" or "below" unsigned int as per the C promotion
10840      rules, depending on the host, thus making the signedness of the
10841      direct multiplication and division unpredictable.  */
10842   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
10843
10844   u += align - 1;
10845   u /= align;
10846   u *= align;
10847
10848   return (HOST_WIDE_INT) u;
10849 }
10850
10851 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
10852    lowest addressed byte of the "containing object" for the given FIELD_DECL,
10853    or return 0 if we are unable to determine what that offset is, either
10854    because the argument turns out to be a pointer to an ERROR_MARK node, or
10855    because the offset is actually variable.  (We can't handle the latter case
10856    just yet).  */
10857
10858 static HOST_WIDE_INT
10859 field_byte_offset (const_tree decl)
10860 {
10861   HOST_WIDE_INT object_offset_in_bits;
10862   HOST_WIDE_INT bitpos_int;
10863
10864   if (TREE_CODE (decl) == ERROR_MARK)
10865     return 0;
10866
10867   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
10868
10869   /* We cannot yet cope with fields whose positions are variable, so
10870      for now, when we see such things, we simply return 0.  Someday, we may
10871      be able to handle such cases, but it will be damn difficult.  */
10872   if (! host_integerp (bit_position (decl), 0))
10873     return 0;
10874
10875   bitpos_int = int_bit_position (decl);
10876
10877 #ifdef PCC_BITFIELD_TYPE_MATTERS
10878   if (PCC_BITFIELD_TYPE_MATTERS)
10879     {
10880       tree type;
10881       tree field_size_tree;
10882       HOST_WIDE_INT deepest_bitpos;
10883       unsigned HOST_WIDE_INT field_size_in_bits;
10884       unsigned int type_align_in_bits;
10885       unsigned int decl_align_in_bits;
10886       unsigned HOST_WIDE_INT type_size_in_bits;
10887
10888       type = field_type (decl);
10889       field_size_tree = DECL_SIZE (decl);
10890
10891       /* The size could be unspecified if there was an error, or for
10892          a flexible array member.  */
10893       if (! field_size_tree)
10894         field_size_tree = bitsize_zero_node;
10895
10896       /* If we don't know the size of the field, pretend it's a full word.  */
10897       if (host_integerp (field_size_tree, 1))
10898         field_size_in_bits = tree_low_cst (field_size_tree, 1);
10899       else
10900         field_size_in_bits = BITS_PER_WORD;
10901
10902       type_size_in_bits = simple_type_size_in_bits (type);
10903       type_align_in_bits = simple_type_align_in_bits (type);
10904       decl_align_in_bits = simple_decl_align_in_bits (decl);
10905
10906       /* The GCC front-end doesn't make any attempt to keep track of the
10907          starting bit offset (relative to the start of the containing
10908          structure type) of the hypothetical "containing object" for a
10909          bit-field.  Thus, when computing the byte offset value for the
10910          start of the "containing object" of a bit-field, we must deduce
10911          this information on our own. This can be rather tricky to do in
10912          some cases.  For example, handling the following structure type
10913          definition when compiling for an i386/i486 target (which only
10914          aligns long long's to 32-bit boundaries) can be very tricky:
10915
10916          struct S { int field1; long long field2:31; };
10917
10918          Fortunately, there is a simple rule-of-thumb which can be used
10919          in such cases.  When compiling for an i386/i486, GCC will
10920          allocate 8 bytes for the structure shown above.  It decides to
10921          do this based upon one simple rule for bit-field allocation.
10922          GCC allocates each "containing object" for each bit-field at
10923          the first (i.e. lowest addressed) legitimate alignment boundary
10924          (based upon the required minimum alignment for the declared
10925          type of the field) which it can possibly use, subject to the
10926          condition that there is still enough available space remaining
10927          in the containing object (when allocated at the selected point)
10928          to fully accommodate all of the bits of the bit-field itself.
10929
10930          This simple rule makes it obvious why GCC allocates 8 bytes for
10931          each object of the structure type shown above.  When looking
10932          for a place to allocate the "containing object" for `field2',
10933          the compiler simply tries to allocate a 64-bit "containing
10934          object" at each successive 32-bit boundary (starting at zero)
10935          until it finds a place to allocate that 64- bit field such that
10936          at least 31 contiguous (and previously unallocated) bits remain
10937          within that selected 64 bit field.  (As it turns out, for the
10938          example above, the compiler finds it is OK to allocate the
10939          "containing object" 64-bit field at bit-offset zero within the
10940          structure type.)
10941
10942          Here we attempt to work backwards from the limited set of facts
10943          we're given, and we try to deduce from those facts, where GCC
10944          must have believed that the containing object started (within
10945          the structure type). The value we deduce is then used (by the
10946          callers of this routine) to generate DW_AT_location and
10947          DW_AT_bit_offset attributes for fields (both bit-fields and, in
10948          the case of DW_AT_location, regular fields as well).  */
10949
10950       /* Figure out the bit-distance from the start of the structure to
10951          the "deepest" bit of the bit-field.  */
10952       deepest_bitpos = bitpos_int + field_size_in_bits;
10953
10954       /* This is the tricky part.  Use some fancy footwork to deduce
10955          where the lowest addressed bit of the containing object must
10956          be.  */
10957       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
10958
10959       /* Round up to type_align by default.  This works best for
10960          bitfields.  */
10961       object_offset_in_bits
10962         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
10963
10964       if (object_offset_in_bits > bitpos_int)
10965         {
10966           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
10967
10968           /* Round up to decl_align instead.  */
10969           object_offset_in_bits
10970             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
10971         }
10972     }
10973   else
10974 #endif
10975     object_offset_in_bits = bitpos_int;
10976
10977   return object_offset_in_bits / BITS_PER_UNIT;
10978 }
10979 \f
10980 /* The following routines define various Dwarf attributes and any data
10981    associated with them.  */
10982
10983 /* Add a location description attribute value to a DIE.
10984
10985    This emits location attributes suitable for whole variables and
10986    whole parameters.  Note that the location attributes for struct fields are
10987    generated by the routine `data_member_location_attribute' below.  */
10988
10989 static inline void
10990 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
10991                              dw_loc_descr_ref descr)
10992 {
10993   if (descr != 0)
10994     add_AT_loc (die, attr_kind, descr);
10995 }
10996
10997 /* Attach the specialized form of location attribute used for data members of
10998    struct and union types.  In the special case of a FIELD_DECL node which
10999    represents a bit-field, the "offset" part of this special location
11000    descriptor must indicate the distance in bytes from the lowest-addressed
11001    byte of the containing struct or union type to the lowest-addressed byte of
11002    the "containing object" for the bit-field.  (See the `field_byte_offset'
11003    function above).
11004
11005    For any given bit-field, the "containing object" is a hypothetical object
11006    (of some integral or enum type) within which the given bit-field lives.  The
11007    type of this hypothetical "containing object" is always the same as the
11008    declared type of the individual bit-field itself (for GCC anyway... the
11009    DWARF spec doesn't actually mandate this).  Note that it is the size (in
11010    bytes) of the hypothetical "containing object" which will be given in the
11011    DW_AT_byte_size attribute for this bit-field.  (See the
11012    `byte_size_attribute' function below.)  It is also used when calculating the
11013    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
11014    function below.)  */
11015
11016 static void
11017 add_data_member_location_attribute (dw_die_ref die, tree decl)
11018 {
11019   HOST_WIDE_INT offset;
11020   dw_loc_descr_ref loc_descr = 0;
11021
11022   if (TREE_CODE (decl) == TREE_BINFO)
11023     {
11024       /* We're working on the TAG_inheritance for a base class.  */
11025       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
11026         {
11027           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
11028              aren't at a fixed offset from all (sub)objects of the same
11029              type.  We need to extract the appropriate offset from our
11030              vtable.  The following dwarf expression means
11031
11032                BaseAddr = ObAddr + *((*ObAddr) - Offset)
11033
11034              This is specific to the V3 ABI, of course.  */
11035
11036           dw_loc_descr_ref tmp;
11037
11038           /* Make a copy of the object address.  */
11039           tmp = new_loc_descr (DW_OP_dup, 0, 0);
11040           add_loc_descr (&loc_descr, tmp);
11041
11042           /* Extract the vtable address.  */
11043           tmp = new_loc_descr (DW_OP_deref, 0, 0);
11044           add_loc_descr (&loc_descr, tmp);
11045
11046           /* Calculate the address of the offset.  */
11047           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
11048           gcc_assert (offset < 0);
11049
11050           tmp = int_loc_descriptor (-offset);
11051           add_loc_descr (&loc_descr, tmp);
11052           tmp = new_loc_descr (DW_OP_minus, 0, 0);
11053           add_loc_descr (&loc_descr, tmp);
11054
11055           /* Extract the offset.  */
11056           tmp = new_loc_descr (DW_OP_deref, 0, 0);
11057           add_loc_descr (&loc_descr, tmp);
11058
11059           /* Add it to the object address.  */
11060           tmp = new_loc_descr (DW_OP_plus, 0, 0);
11061           add_loc_descr (&loc_descr, tmp);
11062         }
11063       else
11064         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
11065     }
11066   else
11067     offset = field_byte_offset (decl);
11068
11069   if (! loc_descr)
11070     {
11071       enum dwarf_location_atom op;
11072
11073       /* The DWARF2 standard says that we should assume that the structure
11074          address is already on the stack, so we can specify a structure field
11075          address by using DW_OP_plus_uconst.  */
11076
11077 #ifdef MIPS_DEBUGGING_INFO
11078       /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
11079          operator correctly.  It works only if we leave the offset on the
11080          stack.  */
11081       op = DW_OP_constu;
11082 #else
11083       op = DW_OP_plus_uconst;
11084 #endif
11085
11086       loc_descr = new_loc_descr (op, offset, 0);
11087     }
11088
11089   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
11090 }
11091
11092 /* Writes integer values to dw_vec_const array.  */
11093
11094 static void
11095 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
11096 {
11097   while (size != 0)
11098     {
11099       *dest++ = val & 0xff;
11100       val >>= 8;
11101       --size;
11102     }
11103 }
11104
11105 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
11106
11107 static HOST_WIDE_INT
11108 extract_int (const unsigned char *src, unsigned int size)
11109 {
11110   HOST_WIDE_INT val = 0;
11111
11112   src += size;
11113   while (size != 0)
11114     {
11115       val <<= 8;
11116       val |= *--src & 0xff;
11117       --size;
11118     }
11119   return val;
11120 }
11121
11122 /* Writes floating point values to dw_vec_const array.  */
11123
11124 static void
11125 insert_float (const_rtx rtl, unsigned char *array)
11126 {
11127   REAL_VALUE_TYPE rv;
11128   long val[4];
11129   int i;
11130
11131   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
11132   real_to_target (val, &rv, GET_MODE (rtl));
11133
11134   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
11135   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
11136     {
11137       insert_int (val[i], 4, array);
11138       array += 4;
11139     }
11140 }
11141
11142 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
11143    does not have a "location" either in memory or in a register.  These
11144    things can arise in GNU C when a constant is passed as an actual parameter
11145    to an inlined function.  They can also arise in C++ where declared
11146    constants do not necessarily get memory "homes".  */
11147
11148 static void
11149 add_const_value_attribute (dw_die_ref die, rtx rtl)
11150 {
11151   switch (GET_CODE (rtl))
11152     {
11153     case CONST_INT:
11154       {
11155         HOST_WIDE_INT val = INTVAL (rtl);
11156
11157         if (val < 0)
11158           add_AT_int (die, DW_AT_const_value, val);
11159         else
11160           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
11161       }
11162       break;
11163
11164     case CONST_DOUBLE:
11165       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
11166          floating-point constant.  A CONST_DOUBLE is used whenever the
11167          constant requires more than one word in order to be adequately
11168          represented.  We output CONST_DOUBLEs as blocks.  */
11169       {
11170         enum machine_mode mode = GET_MODE (rtl);
11171
11172         if (SCALAR_FLOAT_MODE_P (mode))
11173           {
11174             unsigned int length = GET_MODE_SIZE (mode);
11175             unsigned char *array = GGC_NEWVEC (unsigned char, length);
11176
11177             insert_float (rtl, array);
11178             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
11179           }
11180         else
11181           {
11182             /* ??? We really should be using HOST_WIDE_INT throughout.  */
11183             gcc_assert (HOST_BITS_PER_LONG == HOST_BITS_PER_WIDE_INT);
11184
11185             add_AT_long_long (die, DW_AT_const_value,
11186                               CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
11187           }
11188       }
11189       break;
11190
11191     case CONST_VECTOR:
11192       {
11193         enum machine_mode mode = GET_MODE (rtl);
11194         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
11195         unsigned int length = CONST_VECTOR_NUNITS (rtl);
11196         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
11197         unsigned int i;
11198         unsigned char *p;
11199
11200         switch (GET_MODE_CLASS (mode))
11201           {
11202           case MODE_VECTOR_INT:
11203             for (i = 0, p = array; i < length; i++, p += elt_size)
11204               {
11205                 rtx elt = CONST_VECTOR_ELT (rtl, i);
11206                 HOST_WIDE_INT lo, hi;
11207
11208                 switch (GET_CODE (elt))
11209                   {
11210                   case CONST_INT:
11211                     lo = INTVAL (elt);
11212                     hi = -(lo < 0);
11213                     break;
11214
11215                   case CONST_DOUBLE:
11216                     lo = CONST_DOUBLE_LOW (elt);
11217                     hi = CONST_DOUBLE_HIGH (elt);
11218                     break;
11219
11220                   default:
11221                     gcc_unreachable ();
11222                   }
11223
11224                 if (elt_size <= sizeof (HOST_WIDE_INT))
11225                   insert_int (lo, elt_size, p);
11226                 else
11227                   {
11228                     unsigned char *p0 = p;
11229                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
11230
11231                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
11232                     if (WORDS_BIG_ENDIAN)
11233                       {
11234                         p0 = p1;
11235                         p1 = p;
11236                       }
11237                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
11238                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
11239                   }
11240               }
11241             break;
11242
11243           case MODE_VECTOR_FLOAT:
11244             for (i = 0, p = array; i < length; i++, p += elt_size)
11245               {
11246                 rtx elt = CONST_VECTOR_ELT (rtl, i);
11247                 insert_float (elt, p);
11248               }
11249             break;
11250
11251           default:
11252             gcc_unreachable ();
11253           }
11254
11255         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
11256       }
11257       break;
11258
11259     case CONST_STRING:
11260       add_AT_string (die, DW_AT_const_value, XSTR (rtl, 0));
11261       break;
11262
11263     case SYMBOL_REF:
11264     case LABEL_REF:
11265     case CONST:
11266       add_AT_addr (die, DW_AT_const_value, rtl);
11267       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
11268       break;
11269
11270     case PLUS:
11271       /* In cases where an inlined instance of an inline function is passed
11272          the address of an `auto' variable (which is local to the caller) we
11273          can get a situation where the DECL_RTL of the artificial local
11274          variable (for the inlining) which acts as a stand-in for the
11275          corresponding formal parameter (of the inline function) will look
11276          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
11277          exactly a compile-time constant expression, but it isn't the address
11278          of the (artificial) local variable either.  Rather, it represents the
11279          *value* which the artificial local variable always has during its
11280          lifetime.  We currently have no way to represent such quasi-constant
11281          values in Dwarf, so for now we just punt and generate nothing.  */
11282       break;
11283
11284     default:
11285       /* No other kinds of rtx should be possible here.  */
11286       gcc_unreachable ();
11287     }
11288
11289 }
11290
11291 /* Determine whether the evaluation of EXPR references any variables
11292    or functions which aren't otherwise used (and therefore may not be
11293    output).  */
11294 static tree
11295 reference_to_unused (tree * tp, int * walk_subtrees,
11296                      void * data ATTRIBUTE_UNUSED)
11297 {
11298   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
11299     *walk_subtrees = 0;
11300
11301   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
11302       && ! TREE_ASM_WRITTEN (*tp))
11303     return *tp;
11304   /* ???  The C++ FE emits debug information for using decls, so
11305      putting gcc_unreachable here falls over.  See PR31899.  For now
11306      be conservative.  */
11307   else if (!cgraph_global_info_ready
11308            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
11309     return *tp;
11310   else if (DECL_P (*tp) && TREE_CODE (*tp) == VAR_DECL)
11311     {
11312       struct varpool_node *node = varpool_node (*tp);
11313       if (!node->needed)
11314         return *tp;
11315     }
11316   else if (DECL_P (*tp) && TREE_CODE (*tp) == FUNCTION_DECL
11317            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
11318     {
11319       struct cgraph_node *node = cgraph_node (*tp);
11320       if (!node->output)
11321         return *tp;
11322     }
11323   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
11324     return *tp;
11325
11326   return NULL_TREE;
11327 }
11328
11329 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
11330    for use in a later add_const_value_attribute call.  */
11331
11332 static rtx
11333 rtl_for_decl_init (tree init, tree type)
11334 {
11335   rtx rtl = NULL_RTX;
11336
11337   /* If a variable is initialized with a string constant without embedded
11338      zeros, build CONST_STRING.  */
11339   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
11340     {
11341       tree enttype = TREE_TYPE (type);
11342       tree domain = TYPE_DOMAIN (type);
11343       enum machine_mode mode = TYPE_MODE (enttype);
11344
11345       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
11346           && domain
11347           && integer_zerop (TYPE_MIN_VALUE (domain))
11348           && compare_tree_int (TYPE_MAX_VALUE (domain),
11349                                TREE_STRING_LENGTH (init) - 1) == 0
11350           && ((size_t) TREE_STRING_LENGTH (init)
11351               == strlen (TREE_STRING_POINTER (init)) + 1))
11352         rtl = gen_rtx_CONST_STRING (VOIDmode,
11353                                     ggc_strdup (TREE_STRING_POINTER (init)));
11354     }
11355   /* Other aggregates, and complex values, could be represented using
11356      CONCAT: FIXME!  */
11357   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
11358     ;
11359   /* Vectors only work if their mode is supported by the target.
11360      FIXME: generic vectors ought to work too.  */
11361   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
11362     ;
11363   /* If the initializer is something that we know will expand into an
11364      immediate RTL constant, expand it now.  We must be careful not to
11365      reference variables which won't be output.  */
11366   else if (initializer_constant_valid_p (init, type)
11367            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
11368     {
11369       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
11370          possible.  */
11371       if (TREE_CODE (type) == VECTOR_TYPE)
11372         switch (TREE_CODE (init))
11373           {
11374           case VECTOR_CST:
11375             break;
11376           case CONSTRUCTOR:
11377             if (TREE_CONSTANT (init))
11378               {
11379                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
11380                 bool constant_p = true;
11381                 tree value;
11382                 unsigned HOST_WIDE_INT ix;
11383
11384                 /* Even when ctor is constant, it might contain non-*_CST
11385                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
11386                    belong into VECTOR_CST nodes.  */
11387                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
11388                   if (!CONSTANT_CLASS_P (value))
11389                     {
11390                       constant_p = false;
11391                       break;
11392                     }
11393
11394                 if (constant_p)
11395                   {
11396                     init = build_vector_from_ctor (type, elts);
11397                     break;
11398                   }
11399               }
11400             /* FALLTHRU */
11401
11402           default:
11403             return NULL;
11404           }
11405
11406       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
11407
11408       /* If expand_expr returns a MEM, it wasn't immediate.  */
11409       gcc_assert (!rtl || !MEM_P (rtl));
11410     }
11411
11412   return rtl;
11413 }
11414
11415 /* Generate RTL for the variable DECL to represent its location.  */
11416
11417 static rtx
11418 rtl_for_decl_location (tree decl)
11419 {
11420   rtx rtl;
11421
11422   /* Here we have to decide where we are going to say the parameter "lives"
11423      (as far as the debugger is concerned).  We only have a couple of
11424      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
11425
11426      DECL_RTL normally indicates where the parameter lives during most of the
11427      activation of the function.  If optimization is enabled however, this
11428      could be either NULL or else a pseudo-reg.  Both of those cases indicate
11429      that the parameter doesn't really live anywhere (as far as the code
11430      generation parts of GCC are concerned) during most of the function's
11431      activation.  That will happen (for example) if the parameter is never
11432      referenced within the function.
11433
11434      We could just generate a location descriptor here for all non-NULL
11435      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
11436      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
11437      where DECL_RTL is NULL or is a pseudo-reg.
11438
11439      Note however that we can only get away with using DECL_INCOMING_RTL as
11440      a backup substitute for DECL_RTL in certain limited cases.  In cases
11441      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
11442      we can be sure that the parameter was passed using the same type as it is
11443      declared to have within the function, and that its DECL_INCOMING_RTL
11444      points us to a place where a value of that type is passed.
11445
11446      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
11447      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
11448      because in these cases DECL_INCOMING_RTL points us to a value of some
11449      type which is *different* from the type of the parameter itself.  Thus,
11450      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
11451      such cases, the debugger would end up (for example) trying to fetch a
11452      `float' from a place which actually contains the first part of a
11453      `double'.  That would lead to really incorrect and confusing
11454      output at debug-time.
11455
11456      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
11457      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
11458      are a couple of exceptions however.  On little-endian machines we can
11459      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
11460      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
11461      an integral type that is smaller than TREE_TYPE (decl). These cases arise
11462      when (on a little-endian machine) a non-prototyped function has a
11463      parameter declared to be of type `short' or `char'.  In such cases,
11464      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
11465      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
11466      passed `int' value.  If the debugger then uses that address to fetch
11467      a `short' or a `char' (on a little-endian machine) the result will be
11468      the correct data, so we allow for such exceptional cases below.
11469
11470      Note that our goal here is to describe the place where the given formal
11471      parameter lives during most of the function's activation (i.e. between the
11472      end of the prologue and the start of the epilogue).  We'll do that as best
11473      as we can. Note however that if the given formal parameter is modified
11474      sometime during the execution of the function, then a stack backtrace (at
11475      debug-time) will show the function as having been called with the *new*
11476      value rather than the value which was originally passed in.  This happens
11477      rarely enough that it is not a major problem, but it *is* a problem, and
11478      I'd like to fix it.
11479
11480      A future version of dwarf2out.c may generate two additional attributes for
11481      any given DW_TAG_formal_parameter DIE which will describe the "passed
11482      type" and the "passed location" for the given formal parameter in addition
11483      to the attributes we now generate to indicate the "declared type" and the
11484      "active location" for each parameter.  This additional set of attributes
11485      could be used by debuggers for stack backtraces. Separately, note that
11486      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
11487      This happens (for example) for inlined-instances of inline function formal
11488      parameters which are never referenced.  This really shouldn't be
11489      happening.  All PARM_DECL nodes should get valid non-NULL
11490      DECL_INCOMING_RTL values.  FIXME.  */
11491
11492   /* Use DECL_RTL as the "location" unless we find something better.  */
11493   rtl = DECL_RTL_IF_SET (decl);
11494
11495   /* When generating abstract instances, ignore everything except
11496      constants, symbols living in memory, and symbols living in
11497      fixed registers.  */
11498   if (! reload_completed)
11499     {
11500       if (rtl
11501           && (CONSTANT_P (rtl)
11502               || (MEM_P (rtl)
11503                   && CONSTANT_P (XEXP (rtl, 0)))
11504               || (REG_P (rtl)
11505                   && TREE_CODE (decl) == VAR_DECL
11506                   && TREE_STATIC (decl))))
11507         {
11508           rtl = targetm.delegitimize_address (rtl);
11509           return rtl;
11510         }
11511       rtl = NULL_RTX;
11512     }
11513   else if (TREE_CODE (decl) == PARM_DECL)
11514     {
11515       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
11516         {
11517           tree declared_type = TREE_TYPE (decl);
11518           tree passed_type = DECL_ARG_TYPE (decl);
11519           enum machine_mode dmode = TYPE_MODE (declared_type);
11520           enum machine_mode pmode = TYPE_MODE (passed_type);
11521
11522           /* This decl represents a formal parameter which was optimized out.
11523              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
11524              all cases where (rtl == NULL_RTX) just below.  */
11525           if (dmode == pmode)
11526             rtl = DECL_INCOMING_RTL (decl);
11527           else if (SCALAR_INT_MODE_P (dmode)
11528                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
11529                    && DECL_INCOMING_RTL (decl))
11530             {
11531               rtx inc = DECL_INCOMING_RTL (decl);
11532               if (REG_P (inc))
11533                 rtl = inc;
11534               else if (MEM_P (inc))
11535                 {
11536                   if (BYTES_BIG_ENDIAN)
11537                     rtl = adjust_address_nv (inc, dmode,
11538                                              GET_MODE_SIZE (pmode)
11539                                              - GET_MODE_SIZE (dmode));
11540                   else
11541                     rtl = inc;
11542                 }
11543             }
11544         }
11545
11546       /* If the parm was passed in registers, but lives on the stack, then
11547          make a big endian correction if the mode of the type of the
11548          parameter is not the same as the mode of the rtl.  */
11549       /* ??? This is the same series of checks that are made in dbxout.c before
11550          we reach the big endian correction code there.  It isn't clear if all
11551          of these checks are necessary here, but keeping them all is the safe
11552          thing to do.  */
11553       else if (MEM_P (rtl)
11554                && XEXP (rtl, 0) != const0_rtx
11555                && ! CONSTANT_P (XEXP (rtl, 0))
11556                /* Not passed in memory.  */
11557                && !MEM_P (DECL_INCOMING_RTL (decl))
11558                /* Not passed by invisible reference.  */
11559                && (!REG_P (XEXP (rtl, 0))
11560                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
11561                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
11562 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
11563                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
11564 #endif
11565                      )
11566                /* Big endian correction check.  */
11567                && BYTES_BIG_ENDIAN
11568                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
11569                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
11570                    < UNITS_PER_WORD))
11571         {
11572           int offset = (UNITS_PER_WORD
11573                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
11574
11575           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
11576                              plus_constant (XEXP (rtl, 0), offset));
11577         }
11578     }
11579   else if (TREE_CODE (decl) == VAR_DECL
11580            && rtl
11581            && MEM_P (rtl)
11582            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
11583            && BYTES_BIG_ENDIAN)
11584     {
11585       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
11586       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
11587
11588       /* If a variable is declared "register" yet is smaller than
11589          a register, then if we store the variable to memory, it
11590          looks like we're storing a register-sized value, when in
11591          fact we are not.  We need to adjust the offset of the
11592          storage location to reflect the actual value's bytes,
11593          else gdb will not be able to display it.  */
11594       if (rsize > dsize)
11595         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
11596                            plus_constant (XEXP (rtl, 0), rsize-dsize));
11597     }
11598
11599   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
11600      and will have been substituted directly into all expressions that use it.
11601      C does not have such a concept, but C++ and other languages do.  */
11602   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
11603     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
11604
11605   if (rtl)
11606     rtl = targetm.delegitimize_address (rtl);
11607
11608   /* If we don't look past the constant pool, we risk emitting a
11609      reference to a constant pool entry that isn't referenced from
11610      code, and thus is not emitted.  */
11611   if (rtl)
11612     rtl = avoid_constant_pool_reference (rtl);
11613
11614   return rtl;
11615 }
11616
11617 /* We need to figure out what section we should use as the base for the
11618    address ranges where a given location is valid.
11619    1. If this particular DECL has a section associated with it, use that.
11620    2. If this function has a section associated with it, use that.
11621    3. Otherwise, use the text section.
11622    XXX: If you split a variable across multiple sections, we won't notice.  */
11623
11624 static const char *
11625 secname_for_decl (const_tree decl)
11626 {
11627   const char *secname;
11628
11629   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
11630     {
11631       tree sectree = DECL_SECTION_NAME (decl);
11632       secname = TREE_STRING_POINTER (sectree);
11633     }
11634   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
11635     {
11636       tree sectree = DECL_SECTION_NAME (current_function_decl);
11637       secname = TREE_STRING_POINTER (sectree);
11638     }
11639   else if (cfun && in_cold_section_p)
11640     secname = crtl->subsections.cold_section_label;
11641   else
11642     secname = text_section_label;
11643
11644   return secname;
11645 }
11646
11647 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
11648    returned.  If so, the decl for the COMMON block is returned, and the
11649    value is the offset into the common block for the symbol.  */
11650
11651 static tree
11652 fortran_common (tree decl, HOST_WIDE_INT *value)
11653 {
11654   tree val_expr, cvar;
11655   enum machine_mode mode;
11656   HOST_WIDE_INT bitsize, bitpos;
11657   tree offset;
11658   int volatilep = 0, unsignedp = 0;
11659
11660   /* If the decl isn't a VAR_DECL, or if it isn't public or static, or if
11661      it does not have a value (the offset into the common area), or if it
11662      is thread local (as opposed to global) then it isn't common, and shouldn't
11663      be handled as such.  */
11664   if (TREE_CODE (decl) != VAR_DECL
11665       || !TREE_PUBLIC (decl)
11666       || !TREE_STATIC (decl)
11667       || !DECL_HAS_VALUE_EXPR_P (decl)
11668       || !is_fortran ())
11669     return NULL_TREE;
11670
11671   val_expr = DECL_VALUE_EXPR (decl);
11672   if (TREE_CODE (val_expr) != COMPONENT_REF)
11673     return NULL_TREE;
11674
11675   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
11676                               &mode, &unsignedp, &volatilep, true);
11677
11678   if (cvar == NULL_TREE
11679       || TREE_CODE (cvar) != VAR_DECL
11680       || DECL_ARTIFICIAL (cvar)
11681       || !TREE_PUBLIC (cvar))
11682     return NULL_TREE;
11683
11684   *value = 0;
11685   if (offset != NULL)
11686     {
11687       if (!host_integerp (offset, 0))
11688         return NULL_TREE;
11689       *value = tree_low_cst (offset, 0);
11690     }
11691   if (bitpos != 0)
11692     *value += bitpos / BITS_PER_UNIT;
11693
11694   return cvar;
11695 }
11696
11697 /* Dereference a location expression LOC if DECL is passed by invisible
11698    reference.  */
11699
11700 static dw_loc_descr_ref
11701 loc_by_reference (dw_loc_descr_ref loc, tree decl)
11702 {
11703   HOST_WIDE_INT size;
11704   enum dwarf_location_atom op;
11705
11706   if (loc == NULL)
11707     return NULL;
11708
11709   if ((TREE_CODE (decl) != PARM_DECL && TREE_CODE (decl) != RESULT_DECL)
11710       || !DECL_BY_REFERENCE (decl))
11711     return loc;
11712
11713   size = int_size_in_bytes (TREE_TYPE (decl));
11714   if (size > DWARF2_ADDR_SIZE || size == -1)
11715     return 0;
11716   else if (size == DWARF2_ADDR_SIZE)
11717     op = DW_OP_deref;
11718   else
11719     op = DW_OP_deref_size;
11720   add_loc_descr (&loc, new_loc_descr (op, size, 0));
11721   return loc;
11722 }
11723
11724 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
11725    data attribute for a variable or a parameter.  We generate the
11726    DW_AT_const_value attribute only in those cases where the given variable
11727    or parameter does not have a true "location" either in memory or in a
11728    register.  This can happen (for example) when a constant is passed as an
11729    actual argument in a call to an inline function.  (It's possible that
11730    these things can crop up in other ways also.)  Note that one type of
11731    constant value which can be passed into an inlined function is a constant
11732    pointer.  This can happen for example if an actual argument in an inlined
11733    function call evaluates to a compile-time constant address.  */
11734
11735 static void
11736 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
11737                                        enum dwarf_attribute attr)
11738 {
11739   rtx rtl;
11740   dw_loc_descr_ref descr;
11741   var_loc_list *loc_list;
11742   struct var_loc_node *node;
11743   if (TREE_CODE (decl) == ERROR_MARK)
11744     return;
11745
11746   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
11747               || TREE_CODE (decl) == RESULT_DECL);
11748
11749   /* See if we possibly have multiple locations for this variable.  */
11750   loc_list = lookup_decl_loc (decl);
11751
11752   /* If it truly has multiple locations, the first and last node will
11753      differ.  */
11754   if (loc_list && loc_list->first != loc_list->last)
11755     {
11756       const char *endname, *secname;
11757       dw_loc_list_ref list;
11758       rtx varloc;
11759       enum var_init_status initialized;
11760
11761       /* Now that we know what section we are using for a base,
11762          actually construct the list of locations.
11763          The first location information is what is passed to the
11764          function that creates the location list, and the remaining
11765          locations just get added on to that list.
11766          Note that we only know the start address for a location
11767          (IE location changes), so to build the range, we use
11768          the range [current location start, next location start].
11769          This means we have to special case the last node, and generate
11770          a range of [last location start, end of function label].  */
11771
11772       node = loc_list->first;
11773       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
11774       secname = secname_for_decl (decl);
11775
11776       if (NOTE_VAR_LOCATION_LOC (node->var_loc_note))
11777         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
11778       else
11779         initialized = VAR_INIT_STATUS_INITIALIZED;
11780
11781       descr = loc_by_reference (loc_descriptor (varloc, initialized), decl);
11782       list = new_loc_list (descr, node->label, node->next->label, secname, 1);
11783       node = node->next;
11784
11785       for (; node->next; node = node->next)
11786         if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
11787           {
11788             /* The variable has a location between NODE->LABEL and
11789                NODE->NEXT->LABEL.  */
11790             enum var_init_status initialized =
11791               NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
11792             varloc = NOTE_VAR_LOCATION (node->var_loc_note);
11793             descr = loc_by_reference (loc_descriptor (varloc, initialized),
11794                                       decl);
11795             add_loc_descr_to_loc_list (&list, descr,
11796                                        node->label, node->next->label, secname);
11797           }
11798
11799       /* If the variable has a location at the last label
11800          it keeps its location until the end of function.  */
11801       if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
11802         {
11803           char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
11804           enum var_init_status initialized =
11805             NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
11806
11807           varloc = NOTE_VAR_LOCATION (node->var_loc_note);
11808           if (!current_function_decl)
11809             endname = text_end_label;
11810           else
11811             {
11812               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
11813                                            current_function_funcdef_no);
11814               endname = ggc_strdup (label_id);
11815             }
11816           descr = loc_by_reference (loc_descriptor (varloc, initialized),
11817                                     decl);
11818           add_loc_descr_to_loc_list (&list, descr,
11819                                      node->label, endname, secname);
11820         }
11821
11822       /* Finally, add the location list to the DIE, and we are done.  */
11823       add_AT_loc_list (die, attr, list);
11824       return;
11825     }
11826
11827   /* Try to get some constant RTL for this decl, and use that as the value of
11828      the location.  */
11829
11830   rtl = rtl_for_decl_location (decl);
11831   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING))
11832     {
11833       add_const_value_attribute (die, rtl);
11834       return;
11835     }
11836
11837   /* If we have tried to generate the location otherwise, and it
11838      didn't work out (we wouldn't be here if we did), and we have a one entry
11839      location list, try generating a location from that.  */
11840   if (loc_list && loc_list->first)
11841     {
11842       enum var_init_status status;
11843       node = loc_list->first;
11844       status = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
11845       descr = loc_descriptor (NOTE_VAR_LOCATION (node->var_loc_note), status);
11846       if (descr)
11847         {
11848           descr = loc_by_reference (descr, decl);
11849           add_AT_location_description (die, attr, descr);
11850           return;
11851         }
11852     }
11853
11854   /* We couldn't get any rtl, so try directly generating the location
11855      description from the tree.  */
11856   descr = loc_descriptor_from_tree (decl);
11857   if (descr)
11858     {
11859       descr = loc_by_reference (descr, decl);
11860       add_AT_location_description (die, attr, descr);
11861       return;
11862     }
11863   /* None of that worked, so it must not really have a location;
11864      try adding a constant value attribute from the DECL_INITIAL.  */
11865   tree_add_const_value_attribute (die, decl);
11866 }
11867
11868 /* Add VARIABLE and DIE into deferred locations list.  */
11869
11870 static void
11871 defer_location (tree variable, dw_die_ref die)
11872 {
11873   deferred_locations entry;
11874   entry.variable = variable;
11875   entry.die = die;
11876   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
11877 }
11878
11879 /* Helper function for tree_add_const_value_attribute.  Natively encode
11880    initializer INIT into an array.  Return true if successful.  */
11881
11882 static bool
11883 native_encode_initializer (tree init, unsigned char *array, int size)
11884 {
11885   tree type;
11886
11887   if (init == NULL_TREE)
11888     return false;
11889
11890   STRIP_NOPS (init);
11891   switch (TREE_CODE (init))
11892     {
11893     case STRING_CST:
11894       type = TREE_TYPE (init);
11895       if (TREE_CODE (type) == ARRAY_TYPE)
11896         {
11897           tree enttype = TREE_TYPE (type);
11898           enum machine_mode mode = TYPE_MODE (enttype);
11899
11900           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
11901             return false;
11902           if (int_size_in_bytes (type) != size)
11903             return false;
11904           if (size > TREE_STRING_LENGTH (init))
11905             {
11906               memcpy (array, TREE_STRING_POINTER (init),
11907                       TREE_STRING_LENGTH (init));
11908               memset (array + TREE_STRING_LENGTH (init),
11909                       '\0', size - TREE_STRING_LENGTH (init));
11910             }
11911           else
11912             memcpy (array, TREE_STRING_POINTER (init), size);
11913           return true;
11914         }
11915       return false;
11916     case CONSTRUCTOR:
11917       type = TREE_TYPE (init);
11918       if (int_size_in_bytes (type) != size)
11919         return false;
11920       if (TREE_CODE (type) == ARRAY_TYPE)
11921         {
11922           HOST_WIDE_INT min_index;
11923           unsigned HOST_WIDE_INT cnt;
11924           int curpos = 0, fieldsize;
11925           constructor_elt *ce;
11926
11927           if (TYPE_DOMAIN (type) == NULL_TREE
11928               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
11929             return false;
11930
11931           fieldsize = int_size_in_bytes (TREE_TYPE (type));
11932           if (fieldsize <= 0)
11933             return false;
11934
11935           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
11936           memset (array, '\0', size);
11937           for (cnt = 0;
11938                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
11939                cnt++)
11940             {
11941               tree val = ce->value;
11942               tree index = ce->index;
11943               int pos = curpos;
11944               if (index && TREE_CODE (index) == RANGE_EXPR)
11945                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
11946                       * fieldsize;
11947               else if (index)
11948                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
11949
11950               if (val)
11951                 {
11952                   STRIP_NOPS (val);
11953                   if (!native_encode_initializer (val, array + pos, fieldsize))
11954                     return false;
11955                 }
11956               curpos = pos + fieldsize;
11957               if (index && TREE_CODE (index) == RANGE_EXPR)
11958                 {
11959                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
11960                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
11961                   while (count > 0)
11962                     {
11963                       if (val)
11964                         memcpy (array + curpos, array + pos, fieldsize);
11965                       curpos += fieldsize;
11966                     }
11967                 }
11968               gcc_assert (curpos <= size);
11969             }
11970           return true;
11971         }
11972       else if (TREE_CODE (type) == RECORD_TYPE
11973                || TREE_CODE (type) == UNION_TYPE)
11974         {
11975           tree field = NULL_TREE;
11976           unsigned HOST_WIDE_INT cnt;
11977           constructor_elt *ce;
11978
11979           if (int_size_in_bytes (type) != size)
11980             return false;
11981
11982           if (TREE_CODE (type) == RECORD_TYPE)
11983             field = TYPE_FIELDS (type);
11984
11985           for (cnt = 0;
11986                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
11987                cnt++, field = field ? TREE_CHAIN (field) : 0)
11988             {
11989               tree val = ce->value;
11990               int pos, fieldsize;
11991
11992               if (ce->index != 0)
11993                 field = ce->index;
11994
11995               if (val)
11996                 STRIP_NOPS (val);
11997
11998               if (field == NULL_TREE || DECL_BIT_FIELD (field))
11999                 return false;
12000
12001               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
12002                   && TYPE_DOMAIN (TREE_TYPE (field))
12003                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
12004                 return false;
12005               else if (DECL_SIZE_UNIT (field) == NULL_TREE
12006                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
12007                 return false;
12008               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
12009               pos = int_byte_position (field);
12010               gcc_assert (pos + fieldsize <= size);
12011               if (val
12012                   && !native_encode_initializer (val, array + pos, fieldsize))
12013                 return false;
12014             }
12015           return true;
12016         }
12017       return false;
12018     case VIEW_CONVERT_EXPR:
12019     case NON_LVALUE_EXPR:
12020       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
12021     default:
12022       return native_encode_expr (init, array, size) == size;
12023     }
12024 }
12025
12026 /* If we don't have a copy of this variable in memory for some reason (such
12027    as a C++ member constant that doesn't have an out-of-line definition),
12028    we should tell the debugger about the constant value.  */
12029
12030 static void
12031 tree_add_const_value_attribute (dw_die_ref var_die, tree decl)
12032 {
12033   tree init;
12034   tree type = TREE_TYPE (decl);
12035   rtx rtl;
12036
12037   if (TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != CONST_DECL)
12038     return;
12039
12040   init = DECL_INITIAL (decl);
12041   if (TREE_READONLY (decl) && ! TREE_THIS_VOLATILE (decl) && init)
12042     /* OK */;
12043   else
12044     return;
12045
12046   rtl = rtl_for_decl_init (init, type);
12047   if (rtl)
12048     add_const_value_attribute (var_die, rtl);
12049   /* If the host and target are sane, try harder.  */
12050   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
12051            && initializer_constant_valid_p (init, type))
12052     {
12053       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
12054       if (size > 0 && (int) size == size)
12055         {
12056           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
12057
12058           if (native_encode_initializer (init, array, size))
12059             add_AT_vec (var_die, DW_AT_const_value, size, 1, array);
12060         }
12061     }
12062 }
12063
12064 /* Convert the CFI instructions for the current function into a
12065    location list.  This is used for DW_AT_frame_base when we targeting
12066    a dwarf2 consumer that does not support the dwarf3
12067    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
12068    expressions.  */
12069
12070 static dw_loc_list_ref
12071 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
12072 {
12073   dw_fde_ref fde;
12074   dw_loc_list_ref list, *list_tail;
12075   dw_cfi_ref cfi;
12076   dw_cfa_location last_cfa, next_cfa;
12077   const char *start_label, *last_label, *section;
12078
12079   fde = current_fde ();
12080   gcc_assert (fde != NULL);
12081
12082   section = secname_for_decl (current_function_decl);
12083   list_tail = &list;
12084   list = NULL;
12085
12086   next_cfa.reg = INVALID_REGNUM;
12087   next_cfa.offset = 0;
12088   next_cfa.indirect = 0;
12089   next_cfa.base_offset = 0;
12090
12091   start_label = fde->dw_fde_begin;
12092
12093   /* ??? Bald assumption that the CIE opcode list does not contain
12094      advance opcodes.  */
12095   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
12096     lookup_cfa_1 (cfi, &next_cfa);
12097
12098   last_cfa = next_cfa;
12099   last_label = start_label;
12100
12101   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
12102     switch (cfi->dw_cfi_opc)
12103       {
12104       case DW_CFA_set_loc:
12105       case DW_CFA_advance_loc1:
12106       case DW_CFA_advance_loc2:
12107       case DW_CFA_advance_loc4:
12108         if (!cfa_equal_p (&last_cfa, &next_cfa))
12109           {
12110             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
12111                                        start_label, last_label, section,
12112                                        list == NULL);
12113
12114             list_tail = &(*list_tail)->dw_loc_next;
12115             last_cfa = next_cfa;
12116             start_label = last_label;
12117           }
12118         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
12119         break;
12120
12121       case DW_CFA_advance_loc:
12122         /* The encoding is complex enough that we should never emit this.  */
12123       case DW_CFA_remember_state:
12124       case DW_CFA_restore_state:
12125         /* We don't handle these two in this function.  It would be possible
12126            if it were to be required.  */
12127         gcc_unreachable ();
12128
12129       default:
12130         lookup_cfa_1 (cfi, &next_cfa);
12131         break;
12132       }
12133
12134   if (!cfa_equal_p (&last_cfa, &next_cfa))
12135     {
12136       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
12137                                  start_label, last_label, section,
12138                                  list == NULL);
12139       list_tail = &(*list_tail)->dw_loc_next;
12140       start_label = last_label;
12141     }
12142   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
12143                              start_label, fde->dw_fde_end, section,
12144                              list == NULL);
12145
12146   return list;
12147 }
12148
12149 /* Compute a displacement from the "steady-state frame pointer" to the
12150    frame base (often the same as the CFA), and store it in
12151    frame_pointer_fb_offset.  OFFSET is added to the displacement
12152    before the latter is negated.  */
12153
12154 static void
12155 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
12156 {
12157   rtx reg, elim;
12158
12159 #ifdef FRAME_POINTER_CFA_OFFSET
12160   reg = frame_pointer_rtx;
12161   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
12162 #else
12163   reg = arg_pointer_rtx;
12164   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
12165 #endif
12166
12167   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12168   if (GET_CODE (elim) == PLUS)
12169     {
12170       offset += INTVAL (XEXP (elim, 1));
12171       elim = XEXP (elim, 0);
12172     }
12173
12174   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12175                && (elim == hard_frame_pointer_rtx
12176                    || elim == stack_pointer_rtx))
12177               || elim == (frame_pointer_needed
12178                           ? hard_frame_pointer_rtx
12179                           : stack_pointer_rtx));
12180
12181   frame_pointer_fb_offset = -offset;
12182 }
12183
12184 /* Generate a DW_AT_name attribute given some string value to be included as
12185    the value of the attribute.  */
12186
12187 static void
12188 add_name_attribute (dw_die_ref die, const char *name_string)
12189 {
12190   if (name_string != NULL && *name_string != 0)
12191     {
12192       if (demangle_name_func)
12193         name_string = (*demangle_name_func) (name_string);
12194
12195       add_AT_string (die, DW_AT_name, name_string);
12196     }
12197 }
12198
12199 /* Generate a DW_AT_comp_dir attribute for DIE.  */
12200
12201 static void
12202 add_comp_dir_attribute (dw_die_ref die)
12203 {
12204   const char *wd = get_src_pwd ();
12205   if (wd != NULL)
12206     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
12207 }
12208
12209 /* Given a tree node describing an array bound (either lower or upper) output
12210    a representation for that bound.  */
12211
12212 static void
12213 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
12214 {
12215   switch (TREE_CODE (bound))
12216     {
12217     case ERROR_MARK:
12218       return;
12219
12220     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
12221     case INTEGER_CST:
12222       if (! host_integerp (bound, 0)
12223           || (bound_attr == DW_AT_lower_bound
12224               && (((is_c_family () || is_java ()) &&  integer_zerop (bound))
12225                   || (is_fortran () && integer_onep (bound)))))
12226         /* Use the default.  */
12227         ;
12228       else
12229         add_AT_unsigned (subrange_die, bound_attr, tree_low_cst (bound, 0));
12230       break;
12231
12232     CASE_CONVERT:
12233     case VIEW_CONVERT_EXPR:
12234       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
12235       break;
12236
12237     case SAVE_EXPR:
12238       break;
12239
12240     case VAR_DECL:
12241     case PARM_DECL:
12242     case RESULT_DECL:
12243       {
12244         dw_die_ref decl_die = lookup_decl_die (bound);
12245         dw_loc_descr_ref loc;
12246
12247         /* ??? Can this happen, or should the variable have been bound
12248            first?  Probably it can, since I imagine that we try to create
12249            the types of parameters in the order in which they exist in
12250            the list, and won't have created a forward reference to a
12251            later parameter.  */
12252         if (decl_die != NULL)
12253           add_AT_die_ref (subrange_die, bound_attr, decl_die);
12254         else
12255           {
12256             loc = loc_descriptor_from_tree_1 (bound, 0);
12257             add_AT_location_description (subrange_die, bound_attr, loc);
12258           }
12259         break;
12260       }
12261
12262     default:
12263       {
12264         /* Otherwise try to create a stack operation procedure to
12265            evaluate the value of the array bound.  */
12266
12267         dw_die_ref ctx, decl_die;
12268         dw_loc_descr_ref loc;
12269
12270         loc = loc_descriptor_from_tree (bound);
12271         if (loc == NULL)
12272           break;
12273
12274         if (current_function_decl == 0)
12275           ctx = comp_unit_die;
12276         else
12277           ctx = lookup_decl_die (current_function_decl);
12278
12279         decl_die = new_die (DW_TAG_variable, ctx, bound);
12280         add_AT_flag (decl_die, DW_AT_artificial, 1);
12281         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
12282         add_AT_loc (decl_die, DW_AT_location, loc);
12283
12284         add_AT_die_ref (subrange_die, bound_attr, decl_die);
12285         break;
12286       }
12287     }
12288 }
12289
12290 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
12291    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
12292    Note that the block of subscript information for an array type also
12293    includes information about the element type of the given array type.  */
12294
12295 static void
12296 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
12297 {
12298   unsigned dimension_number;
12299   tree lower, upper;
12300   dw_die_ref subrange_die;
12301
12302   for (dimension_number = 0;
12303        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
12304        type = TREE_TYPE (type), dimension_number++)
12305     {
12306       tree domain = TYPE_DOMAIN (type);
12307
12308       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
12309         break;
12310
12311       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
12312          and (in GNU C only) variable bounds.  Handle all three forms
12313          here.  */
12314       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
12315       if (domain)
12316         {
12317           /* We have an array type with specified bounds.  */
12318           lower = TYPE_MIN_VALUE (domain);
12319           upper = TYPE_MAX_VALUE (domain);
12320
12321           /* Define the index type.  */
12322           if (TREE_TYPE (domain))
12323             {
12324               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
12325                  TREE_TYPE field.  We can't emit debug info for this
12326                  because it is an unnamed integral type.  */
12327               if (TREE_CODE (domain) == INTEGER_TYPE
12328                   && TYPE_NAME (domain) == NULL_TREE
12329                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
12330                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
12331                 ;
12332               else
12333                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
12334                                     type_die);
12335             }
12336
12337           /* ??? If upper is NULL, the array has unspecified length,
12338              but it does have a lower bound.  This happens with Fortran
12339                dimension arr(N:*)
12340              Since the debugger is definitely going to need to know N
12341              to produce useful results, go ahead and output the lower
12342              bound solo, and hope the debugger can cope.  */
12343
12344           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
12345           if (upper)
12346             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
12347         }
12348
12349       /* Otherwise we have an array type with an unspecified length.  The
12350          DWARF-2 spec does not say how to handle this; let's just leave out the
12351          bounds.  */
12352     }
12353 }
12354
12355 static void
12356 add_byte_size_attribute (dw_die_ref die, tree tree_node)
12357 {
12358   unsigned size;
12359
12360   switch (TREE_CODE (tree_node))
12361     {
12362     case ERROR_MARK:
12363       size = 0;
12364       break;
12365     case ENUMERAL_TYPE:
12366     case RECORD_TYPE:
12367     case UNION_TYPE:
12368     case QUAL_UNION_TYPE:
12369       size = int_size_in_bytes (tree_node);
12370       break;
12371     case FIELD_DECL:
12372       /* For a data member of a struct or union, the DW_AT_byte_size is
12373          generally given as the number of bytes normally allocated for an
12374          object of the *declared* type of the member itself.  This is true
12375          even for bit-fields.  */
12376       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
12377       break;
12378     default:
12379       gcc_unreachable ();
12380     }
12381
12382   /* Note that `size' might be -1 when we get to this point.  If it is, that
12383      indicates that the byte size of the entity in question is variable.  We
12384      have no good way of expressing this fact in Dwarf at the present time,
12385      so just let the -1 pass on through.  */
12386   add_AT_unsigned (die, DW_AT_byte_size, size);
12387 }
12388
12389 /* For a FIELD_DECL node which represents a bit-field, output an attribute
12390    which specifies the distance in bits from the highest order bit of the
12391    "containing object" for the bit-field to the highest order bit of the
12392    bit-field itself.
12393
12394    For any given bit-field, the "containing object" is a hypothetical object
12395    (of some integral or enum type) within which the given bit-field lives.  The
12396    type of this hypothetical "containing object" is always the same as the
12397    declared type of the individual bit-field itself.  The determination of the
12398    exact location of the "containing object" for a bit-field is rather
12399    complicated.  It's handled by the `field_byte_offset' function (above).
12400
12401    Note that it is the size (in bytes) of the hypothetical "containing object"
12402    which will be given in the DW_AT_byte_size attribute for this bit-field.
12403    (See `byte_size_attribute' above).  */
12404
12405 static inline void
12406 add_bit_offset_attribute (dw_die_ref die, tree decl)
12407 {
12408   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
12409   tree type = DECL_BIT_FIELD_TYPE (decl);
12410   HOST_WIDE_INT bitpos_int;
12411   HOST_WIDE_INT highest_order_object_bit_offset;
12412   HOST_WIDE_INT highest_order_field_bit_offset;
12413   HOST_WIDE_INT unsigned bit_offset;
12414
12415   /* Must be a field and a bit field.  */
12416   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
12417
12418   /* We can't yet handle bit-fields whose offsets are variable, so if we
12419      encounter such things, just return without generating any attribute
12420      whatsoever.  Likewise for variable or too large size.  */
12421   if (! host_integerp (bit_position (decl), 0)
12422       || ! host_integerp (DECL_SIZE (decl), 1))
12423     return;
12424
12425   bitpos_int = int_bit_position (decl);
12426
12427   /* Note that the bit offset is always the distance (in bits) from the
12428      highest-order bit of the "containing object" to the highest-order bit of
12429      the bit-field itself.  Since the "high-order end" of any object or field
12430      is different on big-endian and little-endian machines, the computation
12431      below must take account of these differences.  */
12432   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
12433   highest_order_field_bit_offset = bitpos_int;
12434
12435   if (! BYTES_BIG_ENDIAN)
12436     {
12437       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
12438       highest_order_object_bit_offset += simple_type_size_in_bits (type);
12439     }
12440
12441   bit_offset
12442     = (! BYTES_BIG_ENDIAN
12443        ? highest_order_object_bit_offset - highest_order_field_bit_offset
12444        : highest_order_field_bit_offset - highest_order_object_bit_offset);
12445
12446   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
12447 }
12448
12449 /* For a FIELD_DECL node which represents a bit field, output an attribute
12450    which specifies the length in bits of the given field.  */
12451
12452 static inline void
12453 add_bit_size_attribute (dw_die_ref die, tree decl)
12454 {
12455   /* Must be a field and a bit field.  */
12456   gcc_assert (TREE_CODE (decl) == FIELD_DECL
12457               && DECL_BIT_FIELD_TYPE (decl));
12458
12459   if (host_integerp (DECL_SIZE (decl), 1))
12460     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
12461 }
12462
12463 /* If the compiled language is ANSI C, then add a 'prototyped'
12464    attribute, if arg types are given for the parameters of a function.  */
12465
12466 static inline void
12467 add_prototyped_attribute (dw_die_ref die, tree func_type)
12468 {
12469   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
12470       && TYPE_ARG_TYPES (func_type) != NULL)
12471     add_AT_flag (die, DW_AT_prototyped, 1);
12472 }
12473
12474 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
12475    by looking in either the type declaration or object declaration
12476    equate table.  */
12477
12478 static inline dw_die_ref
12479 add_abstract_origin_attribute (dw_die_ref die, tree origin)
12480 {
12481   dw_die_ref origin_die = NULL;
12482
12483   if (TREE_CODE (origin) != FUNCTION_DECL)
12484     {
12485       /* We may have gotten separated from the block for the inlined
12486          function, if we're in an exception handler or some such; make
12487          sure that the abstract function has been written out.
12488
12489          Doing this for nested functions is wrong, however; functions are
12490          distinct units, and our context might not even be inline.  */
12491       tree fn = origin;
12492
12493       if (TYPE_P (fn))
12494         fn = TYPE_STUB_DECL (fn);
12495
12496       fn = decl_function_context (fn);
12497       if (fn)
12498         dwarf2out_abstract_function (fn);
12499     }
12500
12501   if (DECL_P (origin))
12502     origin_die = lookup_decl_die (origin);
12503   else if (TYPE_P (origin))
12504     origin_die = lookup_type_die (origin);
12505
12506   /* XXX: Functions that are never lowered don't always have correct block
12507      trees (in the case of java, they simply have no block tree, in some other
12508      languages).  For these functions, there is nothing we can really do to
12509      output correct debug info for inlined functions in all cases.  Rather
12510      than die, we'll just produce deficient debug info now, in that we will
12511      have variables without a proper abstract origin.  In the future, when all
12512      functions are lowered, we should re-add a gcc_assert (origin_die)
12513      here.  */
12514
12515   if (origin_die)
12516     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
12517   return origin_die;
12518 }
12519
12520 /* We do not currently support the pure_virtual attribute.  */
12521
12522 static inline void
12523 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
12524 {
12525   if (DECL_VINDEX (func_decl))
12526     {
12527       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
12528
12529       if (host_integerp (DECL_VINDEX (func_decl), 0))
12530         add_AT_loc (die, DW_AT_vtable_elem_location,
12531                     new_loc_descr (DW_OP_constu,
12532                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
12533                                    0));
12534
12535       /* GNU extension: Record what type this method came from originally.  */
12536       if (debug_info_level > DINFO_LEVEL_TERSE)
12537         add_AT_die_ref (die, DW_AT_containing_type,
12538                         lookup_type_die (DECL_CONTEXT (func_decl)));
12539     }
12540 }
12541 \f
12542 /* Add source coordinate attributes for the given decl.  */
12543
12544 static void
12545 add_src_coords_attributes (dw_die_ref die, tree decl)
12546 {
12547   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
12548
12549   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
12550   add_AT_unsigned (die, DW_AT_decl_line, s.line);
12551 }
12552
12553 /* Add a DW_AT_name attribute and source coordinate attribute for the
12554    given decl, but only if it actually has a name.  */
12555
12556 static void
12557 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
12558 {
12559   tree decl_name;
12560
12561   decl_name = DECL_NAME (decl);
12562   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
12563     {
12564       add_name_attribute (die, dwarf2_name (decl, 0));
12565       if (! DECL_ARTIFICIAL (decl))
12566         add_src_coords_attributes (die, decl);
12567
12568       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
12569           && TREE_PUBLIC (decl)
12570           && DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl)
12571           && !DECL_ABSTRACT (decl)
12572           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
12573           && !is_fortran ())
12574         add_AT_string (die, DW_AT_MIPS_linkage_name,
12575                        IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
12576     }
12577
12578 #ifdef VMS_DEBUGGING_INFO
12579   /* Get the function's name, as described by its RTL.  This may be different
12580      from the DECL_NAME name used in the source file.  */
12581   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
12582     {
12583       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
12584                    XEXP (DECL_RTL (decl), 0));
12585       VEC_safe_push (tree, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
12586     }
12587 #endif
12588 }
12589
12590 /* Push a new declaration scope.  */
12591
12592 static void
12593 push_decl_scope (tree scope)
12594 {
12595   VEC_safe_push (tree, gc, decl_scope_table, scope);
12596 }
12597
12598 /* Pop a declaration scope.  */
12599
12600 static inline void
12601 pop_decl_scope (void)
12602 {
12603   VEC_pop (tree, decl_scope_table);
12604 }
12605
12606 /* Return the DIE for the scope that immediately contains this type.
12607    Non-named types get global scope.  Named types nested in other
12608    types get their containing scope if it's open, or global scope
12609    otherwise.  All other types (i.e. function-local named types) get
12610    the current active scope.  */
12611
12612 static dw_die_ref
12613 scope_die_for (tree t, dw_die_ref context_die)
12614 {
12615   dw_die_ref scope_die = NULL;
12616   tree containing_scope;
12617   int i;
12618
12619   /* Non-types always go in the current scope.  */
12620   gcc_assert (TYPE_P (t));
12621
12622   containing_scope = TYPE_CONTEXT (t);
12623
12624   /* Use the containing namespace if it was passed in (for a declaration).  */
12625   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
12626     {
12627       if (context_die == lookup_decl_die (containing_scope))
12628         /* OK */;
12629       else
12630         containing_scope = NULL_TREE;
12631     }
12632
12633   /* Ignore function type "scopes" from the C frontend.  They mean that
12634      a tagged type is local to a parmlist of a function declarator, but
12635      that isn't useful to DWARF.  */
12636   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
12637     containing_scope = NULL_TREE;
12638
12639   if (containing_scope == NULL_TREE)
12640     scope_die = comp_unit_die;
12641   else if (TYPE_P (containing_scope))
12642     {
12643       /* For types, we can just look up the appropriate DIE.  But
12644          first we check to see if we're in the middle of emitting it
12645          so we know where the new DIE should go.  */
12646       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
12647         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
12648           break;
12649
12650       if (i < 0)
12651         {
12652           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
12653                       || TREE_ASM_WRITTEN (containing_scope));
12654
12655           /* If none of the current dies are suitable, we get file scope.  */
12656           scope_die = comp_unit_die;
12657         }
12658       else
12659         scope_die = lookup_type_die (containing_scope);
12660     }
12661   else
12662     scope_die = context_die;
12663
12664   return scope_die;
12665 }
12666
12667 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
12668
12669 static inline int
12670 local_scope_p (dw_die_ref context_die)
12671 {
12672   for (; context_die; context_die = context_die->die_parent)
12673     if (context_die->die_tag == DW_TAG_inlined_subroutine
12674         || context_die->die_tag == DW_TAG_subprogram)
12675       return 1;
12676
12677   return 0;
12678 }
12679
12680 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
12681    whether or not to treat a DIE in this context as a declaration.  */
12682
12683 static inline int
12684 class_or_namespace_scope_p (dw_die_ref context_die)
12685 {
12686   return (context_die
12687           && (context_die->die_tag == DW_TAG_structure_type
12688               || context_die->die_tag == DW_TAG_class_type
12689               || context_die->die_tag == DW_TAG_interface_type
12690               || context_die->die_tag == DW_TAG_union_type
12691               || context_die->die_tag == DW_TAG_namespace));
12692 }
12693
12694 /* Many forms of DIEs require a "type description" attribute.  This
12695    routine locates the proper "type descriptor" die for the type given
12696    by 'type', and adds a DW_AT_type attribute below the given die.  */
12697
12698 static void
12699 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
12700                     int decl_volatile, dw_die_ref context_die)
12701 {
12702   enum tree_code code  = TREE_CODE (type);
12703   dw_die_ref type_die  = NULL;
12704
12705   /* ??? If this type is an unnamed subrange type of an integral, floating-point
12706      or fixed-point type, use the inner type.  This is because we have no
12707      support for unnamed types in base_type_die.  This can happen if this is
12708      an Ada subrange type.  Correct solution is emit a subrange type die.  */
12709   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
12710       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
12711     type = TREE_TYPE (type), code = TREE_CODE (type);
12712
12713   if (code == ERROR_MARK
12714       /* Handle a special case.  For functions whose return type is void, we
12715          generate *no* type attribute.  (Note that no object may have type
12716          `void', so this only applies to function return types).  */
12717       || code == VOID_TYPE)
12718     return;
12719
12720   type_die = modified_type_die (type,
12721                                 decl_const || TYPE_READONLY (type),
12722                                 decl_volatile || TYPE_VOLATILE (type),
12723                                 context_die);
12724
12725   if (type_die != NULL)
12726     add_AT_die_ref (object_die, DW_AT_type, type_die);
12727 }
12728
12729 /* Given an object die, add the calling convention attribute for the
12730    function call type.  */
12731 static void
12732 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
12733 {
12734   enum dwarf_calling_convention value = DW_CC_normal;
12735
12736   value = targetm.dwarf_calling_convention (TREE_TYPE (decl));
12737
12738   /* DWARF doesn't provide a way to identify a program's source-level
12739      entry point.  DW_AT_calling_convention attributes are only meant
12740      to describe functions' calling conventions.  However, lacking a
12741      better way to signal the Fortran main program, we use this for the
12742      time being, following existing custom.  */
12743   if (is_fortran ()
12744       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
12745     value = DW_CC_program;
12746
12747   /* Only add the attribute if the backend requests it, and
12748      is not DW_CC_normal.  */
12749   if (value && (value != DW_CC_normal))
12750     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
12751 }
12752
12753 /* Given a tree pointer to a struct, class, union, or enum type node, return
12754    a pointer to the (string) tag name for the given type, or zero if the type
12755    was declared without a tag.  */
12756
12757 static const char *
12758 type_tag (const_tree type)
12759 {
12760   const char *name = 0;
12761
12762   if (TYPE_NAME (type) != 0)
12763     {
12764       tree t = 0;
12765
12766       /* Find the IDENTIFIER_NODE for the type name.  */
12767       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
12768         t = TYPE_NAME (type);
12769
12770       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
12771          a TYPE_DECL node, regardless of whether or not a `typedef' was
12772          involved.  */
12773       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12774                && ! DECL_IGNORED_P (TYPE_NAME (type)))
12775         {
12776           /* We want to be extra verbose.  Don't call dwarf_name if
12777              DECL_NAME isn't set.  The default hook for decl_printable_name
12778              doesn't like that, and in this context it's correct to return
12779              0, instead of "<anonymous>" or the like.  */
12780           if (DECL_NAME (TYPE_NAME (type)))
12781             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
12782         }
12783
12784       /* Now get the name as a string, or invent one.  */
12785       if (!name && t != 0)
12786         name = IDENTIFIER_POINTER (t);
12787     }
12788
12789   return (name == 0 || *name == '\0') ? 0 : name;
12790 }
12791
12792 /* Return the type associated with a data member, make a special check
12793    for bit field types.  */
12794
12795 static inline tree
12796 member_declared_type (const_tree member)
12797 {
12798   return (DECL_BIT_FIELD_TYPE (member)
12799           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
12800 }
12801
12802 /* Get the decl's label, as described by its RTL. This may be different
12803    from the DECL_NAME name used in the source file.  */
12804
12805 #if 0
12806 static const char *
12807 decl_start_label (tree decl)
12808 {
12809   rtx x;
12810   const char *fnname;
12811
12812   x = DECL_RTL (decl);
12813   gcc_assert (MEM_P (x));
12814
12815   x = XEXP (x, 0);
12816   gcc_assert (GET_CODE (x) == SYMBOL_REF);
12817
12818   fnname = XSTR (x, 0);
12819   return fnname;
12820 }
12821 #endif
12822 \f
12823 /* These routines generate the internal representation of the DIE's for
12824    the compilation unit.  Debugging information is collected by walking
12825    the declaration trees passed in from dwarf2out_decl().  */
12826
12827 static void
12828 gen_array_type_die (tree type, dw_die_ref context_die)
12829 {
12830   dw_die_ref scope_die = scope_die_for (type, context_die);
12831   dw_die_ref array_die;
12832
12833   /* GNU compilers represent multidimensional array types as sequences of one
12834      dimensional array types whose element types are themselves array types.
12835      We sometimes squish that down to a single array_type DIE with multiple
12836      subscripts in the Dwarf debugging info.  The draft Dwarf specification
12837      say that we are allowed to do this kind of compression in C, because
12838      there is no difference between an array of arrays and a multidimensional
12839      array.  We don't do this for Ada to remain as close as possible to the
12840      actual representation, which is especially important against the language
12841      flexibilty wrt arrays of variable size.  */
12842
12843   bool collapse_nested_arrays = !is_ada ();
12844   tree element_type;
12845
12846   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
12847      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
12848   if (TYPE_STRING_FLAG (type)
12849       && TREE_CODE (type) == ARRAY_TYPE
12850       && is_fortran ()
12851       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
12852     {
12853       HOST_WIDE_INT size;
12854
12855       array_die = new_die (DW_TAG_string_type, scope_die, type);
12856       add_name_attribute (array_die, type_tag (type));
12857       equate_type_number_to_die (type, array_die);
12858       size = int_size_in_bytes (type);
12859       if (size >= 0)
12860         add_AT_unsigned (array_die, DW_AT_byte_size, size);
12861       else if (TYPE_DOMAIN (type) != NULL_TREE
12862                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
12863                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
12864         {
12865           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
12866           dw_loc_descr_ref loc = loc_descriptor_from_tree (szdecl);
12867
12868           size = int_size_in_bytes (TREE_TYPE (szdecl));
12869           if (loc && size > 0)
12870             {
12871               add_AT_loc (array_die, DW_AT_string_length, loc);
12872               if (size != DWARF2_ADDR_SIZE)
12873                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
12874             }
12875         }
12876       return;
12877     }
12878
12879   /* ??? The SGI dwarf reader fails for array of array of enum types
12880      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
12881      array type comes before the outer array type.  We thus call gen_type_die
12882      before we new_die and must prevent nested array types collapsing for this
12883      target.  */
12884
12885 #ifdef MIPS_DEBUGGING_INFO
12886   gen_type_die (TREE_TYPE (type), context_die);
12887   collapse_nested_arrays = false;
12888 #endif
12889
12890   array_die = new_die (DW_TAG_array_type, scope_die, type);
12891   add_name_attribute (array_die, type_tag (type));
12892   equate_type_number_to_die (type, array_die);
12893
12894   if (TREE_CODE (type) == VECTOR_TYPE)
12895     {
12896       /* The frontend feeds us a representation for the vector as a struct
12897          containing an array.  Pull out the array type.  */
12898       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
12899       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
12900     }
12901
12902   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
12903   if (is_fortran ()
12904       && TREE_CODE (type) == ARRAY_TYPE
12905       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
12906       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
12907     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
12908
12909 #if 0
12910   /* We default the array ordering.  SDB will probably do
12911      the right things even if DW_AT_ordering is not present.  It's not even
12912      an issue until we start to get into multidimensional arrays anyway.  If
12913      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
12914      then we'll have to put the DW_AT_ordering attribute back in.  (But if
12915      and when we find out that we need to put these in, we will only do so
12916      for multidimensional arrays.  */
12917   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
12918 #endif
12919
12920 #ifdef MIPS_DEBUGGING_INFO
12921   /* The SGI compilers handle arrays of unknown bound by setting
12922      AT_declaration and not emitting any subrange DIEs.  */
12923   if (! TYPE_DOMAIN (type))
12924     add_AT_flag (array_die, DW_AT_declaration, 1);
12925   else
12926 #endif
12927     add_subscript_info (array_die, type, collapse_nested_arrays);
12928
12929   /* Add representation of the type of the elements of this array type and
12930      emit the corresponding DIE if we haven't done it already.  */  
12931   element_type = TREE_TYPE (type);
12932   if (collapse_nested_arrays)
12933     while (TREE_CODE (element_type) == ARRAY_TYPE)
12934       {
12935         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
12936           break;
12937         element_type = TREE_TYPE (element_type);
12938       }
12939
12940 #ifndef MIPS_DEBUGGING_INFO
12941   gen_type_die (element_type, context_die);
12942 #endif
12943
12944   add_type_attribute (array_die, element_type, 0, 0, context_die);
12945
12946   if (get_AT (array_die, DW_AT_name))
12947     add_pubtype (type, array_die);
12948 }
12949
12950 static dw_loc_descr_ref
12951 descr_info_loc (tree val, tree base_decl)
12952 {
12953   HOST_WIDE_INT size;
12954   dw_loc_descr_ref loc, loc2;
12955   enum dwarf_location_atom op;
12956
12957   if (val == base_decl)
12958     return new_loc_descr (DW_OP_push_object_address, 0, 0);
12959
12960   switch (TREE_CODE (val))
12961     {
12962     CASE_CONVERT:
12963       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
12964     case VAR_DECL:
12965       return loc_descriptor_from_tree_1 (val, 0);
12966     case INTEGER_CST:
12967       if (host_integerp (val, 0))
12968         return int_loc_descriptor (tree_low_cst (val, 0));
12969       break;
12970     case INDIRECT_REF:
12971       size = int_size_in_bytes (TREE_TYPE (val));
12972       if (size < 0)
12973         break;
12974       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
12975       if (!loc)
12976         break;
12977       if (size == DWARF2_ADDR_SIZE)
12978         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
12979       else
12980         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
12981       return loc;
12982     case POINTER_PLUS_EXPR:
12983     case PLUS_EXPR:
12984       if (host_integerp (TREE_OPERAND (val, 1), 1)
12985           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
12986              < 16384)
12987         {
12988           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
12989           if (!loc)
12990             break;
12991           add_loc_descr (&loc,
12992                          new_loc_descr (DW_OP_plus_uconst,
12993                                         tree_low_cst (TREE_OPERAND (val, 1),
12994                                                       1), 0));
12995         }
12996       else
12997         {
12998           op = DW_OP_plus;
12999         do_binop:
13000           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
13001           if (!loc)
13002             break;
13003           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
13004           if (!loc2)
13005             break;
13006           add_loc_descr (&loc, loc2);
13007           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
13008         }
13009       return loc;
13010     case MINUS_EXPR:
13011       op = DW_OP_minus;
13012       goto do_binop;
13013     case MULT_EXPR:
13014       op = DW_OP_mul;
13015       goto do_binop;
13016     case EQ_EXPR:
13017       op = DW_OP_eq;
13018       goto do_binop;
13019     case NE_EXPR:
13020       op = DW_OP_ne;
13021       goto do_binop;
13022     default:
13023       break;
13024     }
13025   return NULL;
13026 }
13027
13028 static void
13029 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
13030                       tree val, tree base_decl)
13031 {
13032   dw_loc_descr_ref loc;
13033
13034   if (host_integerp (val, 0))
13035     {
13036       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
13037       return;
13038     }
13039
13040   loc = descr_info_loc (val, base_decl);
13041   if (!loc)
13042     return;
13043
13044   add_AT_loc (die, attr, loc);
13045 }
13046
13047 /* This routine generates DIE for array with hidden descriptor, details
13048    are filled into *info by a langhook.  */
13049
13050 static void
13051 gen_descr_array_type_die (tree type, struct array_descr_info *info,
13052                           dw_die_ref context_die)
13053 {
13054   dw_die_ref scope_die = scope_die_for (type, context_die);
13055   dw_die_ref array_die;
13056   int dim;
13057
13058   array_die = new_die (DW_TAG_array_type, scope_die, type);
13059   add_name_attribute (array_die, type_tag (type));
13060   equate_type_number_to_die (type, array_die);
13061
13062   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
13063   if (is_fortran ()
13064       && info->ndimensions >= 2)
13065     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
13066
13067   if (info->data_location)
13068     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
13069                           info->base_decl);
13070   if (info->associated)
13071     add_descr_info_field (array_die, DW_AT_associated, info->associated,
13072                           info->base_decl);
13073   if (info->allocated)
13074     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
13075                           info->base_decl);
13076
13077   for (dim = 0; dim < info->ndimensions; dim++)
13078     {
13079       dw_die_ref subrange_die
13080         = new_die (DW_TAG_subrange_type, array_die, NULL);
13081
13082       if (info->dimen[dim].lower_bound)
13083         {
13084           /* If it is the default value, omit it.  */
13085           if ((is_c_family () || is_java ())
13086               && integer_zerop (info->dimen[dim].lower_bound))
13087             ;
13088           else if (is_fortran ()
13089                    && integer_onep (info->dimen[dim].lower_bound))
13090             ;
13091           else
13092             add_descr_info_field (subrange_die, DW_AT_lower_bound,
13093                                   info->dimen[dim].lower_bound,
13094                                   info->base_decl);
13095         }
13096       if (info->dimen[dim].upper_bound)
13097         add_descr_info_field (subrange_die, DW_AT_upper_bound,
13098                               info->dimen[dim].upper_bound,
13099                               info->base_decl);
13100       if (info->dimen[dim].stride)
13101         add_descr_info_field (subrange_die, DW_AT_byte_stride,
13102                               info->dimen[dim].stride,
13103                               info->base_decl);
13104     }
13105
13106   gen_type_die (info->element_type, context_die);
13107   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
13108
13109   if (get_AT (array_die, DW_AT_name))
13110     add_pubtype (type, array_die);
13111 }
13112
13113 #if 0
13114 static void
13115 gen_entry_point_die (tree decl, dw_die_ref context_die)
13116 {
13117   tree origin = decl_ultimate_origin (decl);
13118   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
13119
13120   if (origin != NULL)
13121     add_abstract_origin_attribute (decl_die, origin);
13122   else
13123     {
13124       add_name_and_src_coords_attributes (decl_die, decl);
13125       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
13126                           0, 0, context_die);
13127     }
13128
13129   if (DECL_ABSTRACT (decl))
13130     equate_decl_number_to_die (decl, decl_die);
13131   else
13132     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
13133 }
13134 #endif
13135
13136 /* Walk through the list of incomplete types again, trying once more to
13137    emit full debugging info for them.  */
13138
13139 static void
13140 retry_incomplete_types (void)
13141 {
13142   int i;
13143
13144   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
13145     gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
13146 }
13147
13148 /* Determine what tag to use for a record type.  */
13149
13150 static enum dwarf_tag
13151 record_type_tag (tree type)
13152 {
13153   if (! lang_hooks.types.classify_record)
13154     return DW_TAG_structure_type;
13155
13156   switch (lang_hooks.types.classify_record (type))
13157     {
13158     case RECORD_IS_STRUCT:
13159       return DW_TAG_structure_type;
13160
13161     case RECORD_IS_CLASS:
13162       return DW_TAG_class_type;
13163
13164     case RECORD_IS_INTERFACE:
13165       return DW_TAG_interface_type;
13166
13167     default:
13168       gcc_unreachable ();
13169     }
13170 }
13171
13172 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
13173    include all of the information about the enumeration values also. Each
13174    enumerated type name/value is listed as a child of the enumerated type
13175    DIE.  */
13176
13177 static dw_die_ref
13178 gen_enumeration_type_die (tree type, dw_die_ref context_die)
13179 {
13180   dw_die_ref type_die = lookup_type_die (type);
13181
13182   if (type_die == NULL)
13183     {
13184       type_die = new_die (DW_TAG_enumeration_type,
13185                           scope_die_for (type, context_die), type);
13186       equate_type_number_to_die (type, type_die);
13187       add_name_attribute (type_die, type_tag (type));
13188     }
13189   else if (! TYPE_SIZE (type))
13190     return type_die;
13191   else
13192     remove_AT (type_die, DW_AT_declaration);
13193
13194   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
13195      given enum type is incomplete, do not generate the DW_AT_byte_size
13196      attribute or the DW_AT_element_list attribute.  */
13197   if (TYPE_SIZE (type))
13198     {
13199       tree link;
13200
13201       TREE_ASM_WRITTEN (type) = 1;
13202       add_byte_size_attribute (type_die, type);
13203       if (TYPE_STUB_DECL (type) != NULL_TREE)
13204         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
13205
13206       /* If the first reference to this type was as the return type of an
13207          inline function, then it may not have a parent.  Fix this now.  */
13208       if (type_die->die_parent == NULL)
13209         add_child_die (scope_die_for (type, context_die), type_die);
13210
13211       for (link = TYPE_VALUES (type);
13212            link != NULL; link = TREE_CHAIN (link))
13213         {
13214           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
13215           tree value = TREE_VALUE (link);
13216
13217           add_name_attribute (enum_die,
13218                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
13219
13220           if (TREE_CODE (value) == CONST_DECL)
13221             value = DECL_INITIAL (value);
13222
13223           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
13224             /* DWARF2 does not provide a way of indicating whether or
13225                not enumeration constants are signed or unsigned.  GDB
13226                always assumes the values are signed, so we output all
13227                values as if they were signed.  That means that
13228                enumeration constants with very large unsigned values
13229                will appear to have negative values in the debugger.  */
13230             add_AT_int (enum_die, DW_AT_const_value,
13231                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
13232         }
13233     }
13234   else
13235     add_AT_flag (type_die, DW_AT_declaration, 1);
13236
13237   if (get_AT (type_die, DW_AT_name))
13238     add_pubtype (type, type_die);
13239
13240   return type_die;
13241 }
13242
13243 /* Generate a DIE to represent either a real live formal parameter decl or to
13244    represent just the type of some formal parameter position in some function
13245    type.
13246
13247    Note that this routine is a bit unusual because its argument may be a
13248    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
13249    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
13250    node.  If it's the former then this function is being called to output a
13251    DIE to represent a formal parameter object (or some inlining thereof).  If
13252    it's the latter, then this function is only being called to output a
13253    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
13254    argument type of some subprogram type.  */
13255
13256 static dw_die_ref
13257 gen_formal_parameter_die (tree node, tree origin, dw_die_ref context_die)
13258 {
13259   tree node_or_origin = node ? node : origin;
13260   dw_die_ref parm_die
13261     = new_die (DW_TAG_formal_parameter, context_die, node);
13262
13263   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
13264     {
13265     case tcc_declaration:
13266       if (!origin)
13267         origin = decl_ultimate_origin (node);
13268       if (origin != NULL)
13269         add_abstract_origin_attribute (parm_die, origin);
13270       else
13271         {
13272           tree type = TREE_TYPE (node);
13273           add_name_and_src_coords_attributes (parm_die, node);
13274           if (DECL_BY_REFERENCE (node))
13275             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
13276                                 context_die);
13277           else
13278             add_type_attribute (parm_die, type,
13279                                 TREE_READONLY (node),
13280                                 TREE_THIS_VOLATILE (node),
13281                                 context_die);
13282           if (DECL_ARTIFICIAL (node))
13283             add_AT_flag (parm_die, DW_AT_artificial, 1);
13284         }
13285
13286       if (node)
13287         equate_decl_number_to_die (node, parm_die);
13288       if (! DECL_ABSTRACT (node_or_origin))
13289         add_location_or_const_value_attribute (parm_die, node_or_origin,
13290                                                DW_AT_location);
13291
13292       break;
13293
13294     case tcc_type:
13295       /* We were called with some kind of a ..._TYPE node.  */
13296       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
13297       break;
13298
13299     default:
13300       gcc_unreachable ();
13301     }
13302
13303   return parm_die;
13304 }
13305
13306 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
13307    at the end of an (ANSI prototyped) formal parameters list.  */
13308
13309 static void
13310 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
13311 {
13312   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
13313 }
13314
13315 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
13316    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
13317    parameters as specified in some function type specification (except for
13318    those which appear as part of a function *definition*).  */
13319
13320 static void
13321 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
13322 {
13323   tree link;
13324   tree formal_type = NULL;
13325   tree first_parm_type;
13326   tree arg;
13327
13328   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
13329     {
13330       arg = DECL_ARGUMENTS (function_or_method_type);
13331       function_or_method_type = TREE_TYPE (function_or_method_type);
13332     }
13333   else
13334     arg = NULL_TREE;
13335
13336   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
13337
13338   /* Make our first pass over the list of formal parameter types and output a
13339      DW_TAG_formal_parameter DIE for each one.  */
13340   for (link = first_parm_type; link; )
13341     {
13342       dw_die_ref parm_die;
13343
13344       formal_type = TREE_VALUE (link);
13345       if (formal_type == void_type_node)
13346         break;
13347
13348       /* Output a (nameless) DIE to represent the formal parameter itself.  */
13349       parm_die = gen_formal_parameter_die (formal_type, NULL, context_die);
13350       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
13351            && link == first_parm_type)
13352           || (arg && DECL_ARTIFICIAL (arg)))
13353         add_AT_flag (parm_die, DW_AT_artificial, 1);
13354
13355       link = TREE_CHAIN (link);
13356       if (arg)
13357         arg = TREE_CHAIN (arg);
13358     }
13359
13360   /* If this function type has an ellipsis, add a
13361      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
13362   if (formal_type != void_type_node)
13363     gen_unspecified_parameters_die (function_or_method_type, context_die);
13364
13365   /* Make our second (and final) pass over the list of formal parameter types
13366      and output DIEs to represent those types (as necessary).  */
13367   for (link = TYPE_ARG_TYPES (function_or_method_type);
13368        link && TREE_VALUE (link);
13369        link = TREE_CHAIN (link))
13370     gen_type_die (TREE_VALUE (link), context_die);
13371 }
13372
13373 /* We want to generate the DIE for TYPE so that we can generate the
13374    die for MEMBER, which has been defined; we will need to refer back
13375    to the member declaration nested within TYPE.  If we're trying to
13376    generate minimal debug info for TYPE, processing TYPE won't do the
13377    trick; we need to attach the member declaration by hand.  */
13378
13379 static void
13380 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
13381 {
13382   gen_type_die (type, context_die);
13383
13384   /* If we're trying to avoid duplicate debug info, we may not have
13385      emitted the member decl for this function.  Emit it now.  */
13386   if (TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
13387       && ! lookup_decl_die (member))
13388     {
13389       dw_die_ref type_die;
13390       gcc_assert (!decl_ultimate_origin (member));
13391
13392       push_decl_scope (type);
13393       type_die = lookup_type_die (type);
13394       if (TREE_CODE (member) == FUNCTION_DECL)
13395         gen_subprogram_die (member, type_die);
13396       else if (TREE_CODE (member) == FIELD_DECL)
13397         {
13398           /* Ignore the nameless fields that are used to skip bits but handle
13399              C++ anonymous unions and structs.  */
13400           if (DECL_NAME (member) != NULL_TREE
13401               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
13402               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
13403             {
13404               gen_type_die (member_declared_type (member), type_die);
13405               gen_field_die (member, type_die);
13406             }
13407         }
13408       else
13409         gen_variable_die (member, NULL_TREE, type_die);
13410
13411       pop_decl_scope ();
13412     }
13413 }
13414
13415 /* Generate the DWARF2 info for the "abstract" instance of a function which we
13416    may later generate inlined and/or out-of-line instances of.  */
13417
13418 static void
13419 dwarf2out_abstract_function (tree decl)
13420 {
13421   dw_die_ref old_die;
13422   tree save_fn;
13423   tree context;
13424   int was_abstract = DECL_ABSTRACT (decl);
13425
13426   /* Make sure we have the actual abstract inline, not a clone.  */
13427   decl = DECL_ORIGIN (decl);
13428
13429   old_die = lookup_decl_die (decl);
13430   if (old_die && get_AT (old_die, DW_AT_inline))
13431     /* We've already generated the abstract instance.  */
13432     return;
13433
13434   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
13435      we don't get confused by DECL_ABSTRACT.  */
13436   if (debug_info_level > DINFO_LEVEL_TERSE)
13437     {
13438       context = decl_class_context (decl);
13439       if (context)
13440         gen_type_die_for_member
13441           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
13442     }
13443
13444   /* Pretend we've just finished compiling this function.  */
13445   save_fn = current_function_decl;
13446   current_function_decl = decl;
13447   push_cfun (DECL_STRUCT_FUNCTION (decl));
13448
13449   set_decl_abstract_flags (decl, 1);
13450   dwarf2out_decl (decl);
13451   if (! was_abstract)
13452     set_decl_abstract_flags (decl, 0);
13453
13454   current_function_decl = save_fn;
13455   pop_cfun ();
13456 }
13457
13458 /* Helper function of premark_used_types() which gets called through
13459    htab_traverse_resize().
13460
13461    Marks the DIE of a given type in *SLOT as perennial, so it never gets
13462    marked as unused by prune_unused_types.  */
13463 static int
13464 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
13465 {
13466   tree type;
13467   dw_die_ref die;
13468
13469   type = (tree) *slot;
13470   die = lookup_type_die (type);
13471   if (die != NULL)
13472     die->die_perennial_p = 1;
13473   return 1;
13474 }
13475
13476 /* Mark all members of used_types_hash as perennial.  */
13477 static void
13478 premark_used_types (void)
13479 {
13480   if (cfun && cfun->used_types_hash)
13481     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
13482 }
13483
13484 /* Generate a DIE to represent a declared function (either file-scope or
13485    block-local).  */
13486
13487 static void
13488 gen_subprogram_die (tree decl, dw_die_ref context_die)
13489 {
13490   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
13491   tree origin = decl_ultimate_origin (decl);
13492   dw_die_ref subr_die;
13493   tree fn_arg_types;
13494   tree outer_scope;
13495   dw_die_ref old_die = lookup_decl_die (decl);
13496   int declaration = (current_function_decl != decl
13497                      || class_or_namespace_scope_p (context_die));
13498
13499   premark_used_types ();
13500
13501   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
13502      started to generate the abstract instance of an inline, decided to output
13503      its containing class, and proceeded to emit the declaration of the inline
13504      from the member list for the class.  If so, DECLARATION takes priority;
13505      we'll get back to the abstract instance when done with the class.  */
13506
13507   /* The class-scope declaration DIE must be the primary DIE.  */
13508   if (origin && declaration && class_or_namespace_scope_p (context_die))
13509     {
13510       origin = NULL;
13511       gcc_assert (!old_die);
13512     }
13513
13514   /* Now that the C++ front end lazily declares artificial member fns, we
13515      might need to retrofit the declaration into its class.  */
13516   if (!declaration && !origin && !old_die
13517       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
13518       && !class_or_namespace_scope_p (context_die)
13519       && debug_info_level > DINFO_LEVEL_TERSE)
13520     old_die = force_decl_die (decl);
13521
13522   if (origin != NULL)
13523     {
13524       gcc_assert (!declaration || local_scope_p (context_die));
13525
13526       /* Fixup die_parent for the abstract instance of a nested
13527          inline function.  */
13528       if (old_die && old_die->die_parent == NULL)
13529         add_child_die (context_die, old_die);
13530
13531       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
13532       add_abstract_origin_attribute (subr_die, origin);
13533     }
13534   else if (old_die)
13535     {
13536       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
13537       struct dwarf_file_data * file_index = lookup_filename (s.file);
13538
13539       if (!get_AT_flag (old_die, DW_AT_declaration)
13540           /* We can have a normal definition following an inline one in the
13541              case of redefinition of GNU C extern inlines.
13542              It seems reasonable to use AT_specification in this case.  */
13543           && !get_AT (old_die, DW_AT_inline))
13544         {
13545           /* Detect and ignore this case, where we are trying to output
13546              something we have already output.  */
13547           return;
13548         }
13549
13550       /* If the definition comes from the same place as the declaration,
13551          maybe use the old DIE.  We always want the DIE for this function
13552          that has the *_pc attributes to be under comp_unit_die so the
13553          debugger can find it.  We also need to do this for abstract
13554          instances of inlines, since the spec requires the out-of-line copy
13555          to have the same parent.  For local class methods, this doesn't
13556          apply; we just use the old DIE.  */
13557       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
13558           && (DECL_ARTIFICIAL (decl)
13559               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
13560                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
13561                       == (unsigned) s.line))))
13562         {
13563           subr_die = old_die;
13564
13565           /* Clear out the declaration attribute and the formal parameters.
13566              Do not remove all children, because it is possible that this
13567              declaration die was forced using force_decl_die(). In such
13568              cases die that forced declaration die (e.g. TAG_imported_module)
13569              is one of the children that we do not want to remove.  */
13570           remove_AT (subr_die, DW_AT_declaration);
13571           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
13572         }
13573       else
13574         {
13575           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
13576           add_AT_specification (subr_die, old_die);
13577           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
13578             add_AT_file (subr_die, DW_AT_decl_file, file_index);
13579           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
13580             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
13581         }
13582     }
13583   else
13584     {
13585       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
13586
13587       if (TREE_PUBLIC (decl))
13588         add_AT_flag (subr_die, DW_AT_external, 1);
13589
13590       add_name_and_src_coords_attributes (subr_die, decl);
13591       if (debug_info_level > DINFO_LEVEL_TERSE)
13592         {
13593           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
13594           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
13595                               0, 0, context_die);
13596         }
13597
13598       add_pure_or_virtual_attribute (subr_die, decl);
13599       if (DECL_ARTIFICIAL (decl))
13600         add_AT_flag (subr_die, DW_AT_artificial, 1);
13601
13602       if (TREE_PROTECTED (decl))
13603         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
13604       else if (TREE_PRIVATE (decl))
13605         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
13606     }
13607
13608   if (declaration)
13609     {
13610       if (!old_die || !get_AT (old_die, DW_AT_inline))
13611         {
13612           add_AT_flag (subr_die, DW_AT_declaration, 1);
13613
13614           /* The first time we see a member function, it is in the context of
13615              the class to which it belongs.  We make sure of this by emitting
13616              the class first.  The next time is the definition, which is
13617              handled above.  The two may come from the same source text.
13618
13619              Note that force_decl_die() forces function declaration die. It is
13620              later reused to represent definition.  */
13621           equate_decl_number_to_die (decl, subr_die);
13622         }
13623     }
13624   else if (DECL_ABSTRACT (decl))
13625     {
13626       if (DECL_DECLARED_INLINE_P (decl))
13627         {
13628           if (cgraph_function_possibly_inlined_p (decl))
13629             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
13630           else
13631             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
13632         }
13633       else
13634         {
13635           if (cgraph_function_possibly_inlined_p (decl))
13636             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
13637           else
13638             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
13639         }
13640
13641       if (DECL_DECLARED_INLINE_P (decl)
13642           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
13643         add_AT_flag (subr_die, DW_AT_artificial, 1);
13644
13645       equate_decl_number_to_die (decl, subr_die);
13646     }
13647   else if (!DECL_EXTERNAL (decl))
13648     {
13649       HOST_WIDE_INT cfa_fb_offset;
13650
13651       if (!old_die || !get_AT (old_die, DW_AT_inline))
13652         equate_decl_number_to_die (decl, subr_die);
13653
13654       if (!flag_reorder_blocks_and_partition)
13655         {
13656           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
13657                                        current_function_funcdef_no);
13658           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
13659           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
13660                                        current_function_funcdef_no);
13661           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
13662
13663           add_pubname (decl, subr_die);
13664           add_arange (decl, subr_die);
13665         }
13666       else
13667         {  /* Do nothing for now; maybe need to duplicate die, one for
13668               hot section and one for cold section, then use the hot/cold
13669               section begin/end labels to generate the aranges...  */
13670           /*
13671             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
13672             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
13673             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
13674             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
13675
13676             add_pubname (decl, subr_die);
13677             add_arange (decl, subr_die);
13678             add_arange (decl, subr_die);
13679            */
13680         }
13681
13682 #ifdef MIPS_DEBUGGING_INFO
13683       /* Add a reference to the FDE for this routine.  */
13684       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
13685 #endif
13686
13687       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
13688
13689       /* We define the "frame base" as the function's CFA.  This is more
13690          convenient for several reasons: (1) It's stable across the prologue
13691          and epilogue, which makes it better than just a frame pointer,
13692          (2) With dwarf3, there exists a one-byte encoding that allows us
13693          to reference the .debug_frame data by proxy, but failing that,
13694          (3) We can at least reuse the code inspection and interpretation
13695          code that determines the CFA position at various points in the
13696          function.  */
13697       /* ??? Use some command-line or configury switch to enable the use
13698          of dwarf3 DW_OP_call_frame_cfa.  At present there are no dwarf
13699          consumers that understand it; fall back to "pure" dwarf2 and
13700          convert the CFA data into a location list.  */
13701       {
13702         dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
13703         if (list->dw_loc_next)
13704           add_AT_loc_list (subr_die, DW_AT_frame_base, list);
13705         else
13706           add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
13707       }
13708
13709       /* Compute a displacement from the "steady-state frame pointer" to
13710          the CFA.  The former is what all stack slots and argument slots
13711          will reference in the rtl; the later is what we've told the
13712          debugger about.  We'll need to adjust all frame_base references
13713          by this displacement.  */
13714       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
13715
13716       if (cfun->static_chain_decl)
13717         add_AT_location_description (subr_die, DW_AT_static_link,
13718                  loc_descriptor_from_tree (cfun->static_chain_decl));
13719     }
13720
13721   /* Now output descriptions of the arguments for this function. This gets
13722      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
13723      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
13724      `...' at the end of the formal parameter list.  In order to find out if
13725      there was a trailing ellipsis or not, we must instead look at the type
13726      associated with the FUNCTION_DECL.  This will be a node of type
13727      FUNCTION_TYPE. If the chain of type nodes hanging off of this
13728      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
13729      an ellipsis at the end.  */
13730
13731   /* In the case where we are describing a mere function declaration, all we
13732      need to do here (and all we *can* do here) is to describe the *types* of
13733      its formal parameters.  */
13734   if (debug_info_level <= DINFO_LEVEL_TERSE)
13735     ;
13736   else if (declaration)
13737     gen_formal_types_die (decl, subr_die);
13738   else
13739     {
13740       /* Generate DIEs to represent all known formal parameters.  */
13741       tree arg_decls = DECL_ARGUMENTS (decl);
13742       tree parm;
13743
13744       /* When generating DIEs, generate the unspecified_parameters DIE
13745          instead if we come across the arg "__builtin_va_alist" */
13746       for (parm = arg_decls; parm; parm = TREE_CHAIN (parm))
13747         if (TREE_CODE (parm) == PARM_DECL)
13748           {
13749             if (DECL_NAME (parm)
13750                 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (parm)),
13751                             "__builtin_va_alist"))
13752               gen_unspecified_parameters_die (parm, subr_die);
13753             else
13754               gen_decl_die (parm, NULL, subr_die);
13755           }
13756
13757       /* Decide whether we need an unspecified_parameters DIE at the end.
13758          There are 2 more cases to do this for: 1) the ansi ... declaration -
13759          this is detectable when the end of the arg list is not a
13760          void_type_node 2) an unprototyped function declaration (not a
13761          definition).  This just means that we have no info about the
13762          parameters at all.  */
13763       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
13764       if (fn_arg_types != NULL)
13765         {
13766           /* This is the prototyped case, check for....  */
13767           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
13768             gen_unspecified_parameters_die (decl, subr_die);
13769         }
13770       else if (DECL_INITIAL (decl) == NULL_TREE)
13771         gen_unspecified_parameters_die (decl, subr_die);
13772     }
13773
13774   /* Output Dwarf info for all of the stuff within the body of the function
13775      (if it has one - it may be just a declaration).  */
13776   outer_scope = DECL_INITIAL (decl);
13777
13778   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
13779      a function.  This BLOCK actually represents the outermost binding contour
13780      for the function, i.e. the contour in which the function's formal
13781      parameters and labels get declared. Curiously, it appears that the front
13782      end doesn't actually put the PARM_DECL nodes for the current function onto
13783      the BLOCK_VARS list for this outer scope, but are strung off of the
13784      DECL_ARGUMENTS list for the function instead.
13785
13786      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
13787      the LABEL_DECL nodes for the function however, and we output DWARF info
13788      for those in decls_for_scope.  Just within the `outer_scope' there will be
13789      a BLOCK node representing the function's outermost pair of curly braces,
13790      and any blocks used for the base and member initializers of a C++
13791      constructor function.  */
13792   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
13793     {
13794       /* Emit a DW_TAG_variable DIE for a named return value.  */
13795       if (DECL_NAME (DECL_RESULT (decl)))
13796         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
13797
13798       current_function_has_inlines = 0;
13799       decls_for_scope (outer_scope, subr_die, 0);
13800
13801 #if 0 && defined (MIPS_DEBUGGING_INFO)
13802       if (current_function_has_inlines)
13803         {
13804           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
13805           if (! comp_unit_has_inlines)
13806             {
13807               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
13808               comp_unit_has_inlines = 1;
13809             }
13810         }
13811 #endif
13812     }
13813   /* Add the calling convention attribute if requested.  */
13814   add_calling_convention_attribute (subr_die, decl);
13815
13816 }
13817
13818 /* Returns a hash value for X (which really is a die_struct).  */
13819
13820 static hashval_t
13821 common_block_die_table_hash (const void *x)
13822 {
13823   const_dw_die_ref d = (const_dw_die_ref) x;
13824   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
13825 }
13826
13827 /* Return nonzero if decl_id and die_parent of die_struct X is the same
13828    as decl_id and die_parent of die_struct Y.  */
13829
13830 static int
13831 common_block_die_table_eq (const void *x, const void *y)
13832 {
13833   const_dw_die_ref d = (const_dw_die_ref) x;
13834   const_dw_die_ref e = (const_dw_die_ref) y;
13835   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
13836 }
13837
13838 /* Generate a DIE to represent a declared data object.
13839    Either DECL or ORIGIN must be non-null.  */
13840
13841 static void
13842 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
13843 {
13844   HOST_WIDE_INT off;
13845   tree com_decl;
13846   tree decl_or_origin = decl ? decl : origin;
13847   dw_die_ref var_die;
13848   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
13849   dw_die_ref origin_die;
13850   int declaration = (DECL_EXTERNAL (decl_or_origin)
13851                      /* If DECL is COMDAT and has not actually been
13852                         emitted, we cannot take its address; there
13853                         might end up being no definition anywhere in
13854                         the program.  For example, consider the C++
13855                         test case:
13856
13857                           template <class T>
13858                           struct S { static const int i = 7; };
13859
13860                           template <class T>
13861                           const int S<T>::i;
13862
13863                           int f() { return S<int>::i; }
13864
13865                         Here, S<int>::i is not DECL_EXTERNAL, but no
13866                         definition is required, so the compiler will
13867                         not emit a definition.  */
13868                      || (TREE_CODE (decl_or_origin) == VAR_DECL
13869                          && DECL_COMDAT (decl_or_origin)
13870                          && !TREE_ASM_WRITTEN (decl_or_origin))
13871                      || class_or_namespace_scope_p (context_die));
13872
13873   if (!origin)
13874     origin = decl_ultimate_origin (decl);
13875
13876   com_decl = fortran_common (decl_or_origin, &off);
13877
13878   /* Symbol in common gets emitted as a child of the common block, in the form
13879      of a data member.  */
13880   if (com_decl)
13881     {
13882       tree field;
13883       dw_die_ref com_die;
13884       dw_loc_descr_ref loc;
13885       die_node com_die_arg;
13886
13887       var_die = lookup_decl_die (decl_or_origin);
13888       if (var_die)
13889         {
13890           if (get_AT (var_die, DW_AT_location) == NULL)
13891             {
13892               loc = loc_descriptor_from_tree (com_decl);
13893               if (loc)
13894                 {
13895                   if (off)
13896                     {
13897                       /* Optimize the common case.  */
13898                       if (loc->dw_loc_opc == DW_OP_addr
13899                           && loc->dw_loc_next == NULL
13900                           && GET_CODE (loc->dw_loc_oprnd1.v.val_addr)
13901                              == SYMBOL_REF)
13902                         loc->dw_loc_oprnd1.v.val_addr
13903                           = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
13904                         else
13905                           add_loc_descr (&loc,
13906                                          new_loc_descr (DW_OP_plus_uconst,
13907                                                         off, 0));
13908                     }
13909                   add_AT_loc (var_die, DW_AT_location, loc);
13910                   remove_AT (var_die, DW_AT_declaration);
13911                 }
13912             }
13913           return;
13914         }
13915
13916       if (common_block_die_table == NULL)
13917         common_block_die_table
13918           = htab_create_ggc (10, common_block_die_table_hash,
13919                              common_block_die_table_eq, NULL);
13920
13921       field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0);
13922       com_die_arg.decl_id = DECL_UID (com_decl);
13923       com_die_arg.die_parent = context_die;
13924       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
13925       loc = loc_descriptor_from_tree (com_decl);
13926       if (com_die == NULL)
13927         {
13928           const char *cnam
13929             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
13930           void **slot;
13931
13932           com_die = new_die (DW_TAG_common_block, context_die, decl);
13933           add_name_and_src_coords_attributes (com_die, com_decl);
13934           if (loc)
13935             {
13936               add_AT_loc (com_die, DW_AT_location, loc);
13937               /* Avoid sharing the same loc descriptor between
13938                  DW_TAG_common_block and DW_TAG_variable.  */
13939               loc = loc_descriptor_from_tree (com_decl);
13940             }
13941           else if (DECL_EXTERNAL (decl))
13942             add_AT_flag (com_die, DW_AT_declaration, 1);
13943           add_pubname_string (cnam, com_die); /* ??? needed? */
13944           com_die->decl_id = DECL_UID (com_decl);
13945           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
13946           *slot = (void *) com_die;
13947         }
13948       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
13949         {
13950           add_AT_loc (com_die, DW_AT_location, loc);
13951           loc = loc_descriptor_from_tree (com_decl);
13952           remove_AT (com_die, DW_AT_declaration);
13953         }
13954       var_die = new_die (DW_TAG_variable, com_die, decl);
13955       add_name_and_src_coords_attributes (var_die, decl);
13956       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
13957                           TREE_THIS_VOLATILE (decl), context_die);
13958       add_AT_flag (var_die, DW_AT_external, 1);
13959       if (loc)
13960         {
13961           if (off)
13962             {
13963               /* Optimize the common case.  */
13964               if (loc->dw_loc_opc == DW_OP_addr
13965                   && loc->dw_loc_next == NULL
13966                   && GET_CODE (loc->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
13967                 loc->dw_loc_oprnd1.v.val_addr
13968                   = plus_constant (loc->dw_loc_oprnd1.v.val_addr, off);
13969               else
13970                 add_loc_descr (&loc, new_loc_descr (DW_OP_plus_uconst,
13971                                                     off, 0));
13972             }
13973           add_AT_loc (var_die, DW_AT_location, loc);
13974         }
13975       else if (DECL_EXTERNAL (decl))
13976         add_AT_flag (var_die, DW_AT_declaration, 1);
13977       equate_decl_number_to_die (decl, var_die);
13978       return;
13979     }
13980
13981   /* If the compiler emitted a definition for the DECL declaration
13982      and if we already emitted a DIE for it, don't emit a second
13983      DIE for it again.  */
13984   if (old_die
13985       && declaration
13986       && old_die->die_parent == context_die)
13987     return;
13988
13989   var_die = new_die (DW_TAG_variable, context_die, decl);
13990
13991   origin_die = NULL;
13992   if (origin != NULL)
13993     origin_die = add_abstract_origin_attribute (var_die, origin);
13994
13995   /* Loop unrolling can create multiple blocks that refer to the same
13996      static variable, so we must test for the DW_AT_declaration flag.
13997
13998      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
13999      copy decls and set the DECL_ABSTRACT flag on them instead of
14000      sharing them.
14001
14002      ??? Duplicated blocks have been rewritten to use .debug_ranges.
14003
14004      ??? The declare_in_namespace support causes us to get two DIEs for one
14005      variable, both of which are declarations.  We want to avoid considering
14006      one to be a specification, so we must test that this DIE is not a
14007      declaration.  */
14008   else if (old_die && TREE_STATIC (decl) && ! declaration
14009            && get_AT_flag (old_die, DW_AT_declaration) == 1)
14010     {
14011       /* This is a definition of a C++ class level static.  */
14012       add_AT_specification (var_die, old_die);
14013       if (DECL_NAME (decl))
14014         {
14015           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
14016           struct dwarf_file_data * file_index = lookup_filename (s.file);
14017
14018           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
14019             add_AT_file (var_die, DW_AT_decl_file, file_index);
14020
14021           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
14022             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
14023         }
14024     }
14025   else
14026     {
14027       tree type = TREE_TYPE (decl);
14028
14029       add_name_and_src_coords_attributes (var_die, decl);
14030       if ((TREE_CODE (decl) == PARM_DECL
14031            || TREE_CODE (decl) == RESULT_DECL)
14032           && DECL_BY_REFERENCE (decl))
14033         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
14034       else
14035         add_type_attribute (var_die, type, TREE_READONLY (decl),
14036                             TREE_THIS_VOLATILE (decl), context_die);
14037
14038       if (TREE_PUBLIC (decl))
14039         add_AT_flag (var_die, DW_AT_external, 1);
14040
14041       if (DECL_ARTIFICIAL (decl))
14042         add_AT_flag (var_die, DW_AT_artificial, 1);
14043
14044       if (TREE_PROTECTED (decl))
14045         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
14046       else if (TREE_PRIVATE (decl))
14047         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
14048     }
14049
14050   if (declaration)
14051     add_AT_flag (var_die, DW_AT_declaration, 1);
14052
14053   if (decl && (DECL_ABSTRACT (decl) || declaration))
14054     equate_decl_number_to_die (decl, var_die);
14055
14056   if (! declaration
14057       && (! DECL_ABSTRACT (decl_or_origin)
14058           /* Local static vars are shared between all clones/inlines,
14059              so emit DW_AT_location on the abstract DIE if DECL_RTL is
14060              already set.  */
14061           || (TREE_CODE (decl_or_origin) == VAR_DECL
14062               && TREE_STATIC (decl_or_origin)
14063               && DECL_RTL_SET_P (decl_or_origin)))
14064       /* When abstract origin already has DW_AT_location attribute, no need
14065          to add it again.  */
14066       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
14067     {
14068       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
14069           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
14070         defer_location (decl_or_origin, var_die);
14071       else
14072         add_location_or_const_value_attribute (var_die,
14073                                                decl_or_origin,
14074                                                DW_AT_location);
14075       add_pubname (decl_or_origin, var_die);
14076     }
14077   else
14078     tree_add_const_value_attribute (var_die, decl_or_origin);
14079 }
14080
14081 /* Generate a DIE to represent a named constant.  */
14082
14083 static void
14084 gen_const_die (tree decl, dw_die_ref context_die)
14085 {
14086   dw_die_ref const_die;
14087   tree type = TREE_TYPE (decl);
14088
14089   const_die = new_die (DW_TAG_constant, context_die, decl);
14090   add_name_and_src_coords_attributes (const_die, decl);
14091   add_type_attribute (const_die, type, 1, 0, context_die);
14092   if (TREE_PUBLIC (decl))
14093     add_AT_flag (const_die, DW_AT_external, 1);
14094   if (DECL_ARTIFICIAL (decl))
14095     add_AT_flag (const_die, DW_AT_artificial, 1);
14096   tree_add_const_value_attribute (const_die, decl);
14097 }
14098
14099 /* Generate a DIE to represent a label identifier.  */
14100
14101 static void
14102 gen_label_die (tree decl, dw_die_ref context_die)
14103 {
14104   tree origin = decl_ultimate_origin (decl);
14105   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
14106   rtx insn;
14107   char label[MAX_ARTIFICIAL_LABEL_BYTES];
14108
14109   if (origin != NULL)
14110     add_abstract_origin_attribute (lbl_die, origin);
14111   else
14112     add_name_and_src_coords_attributes (lbl_die, decl);
14113
14114   if (DECL_ABSTRACT (decl))
14115     equate_decl_number_to_die (decl, lbl_die);
14116   else
14117     {
14118       insn = DECL_RTL_IF_SET (decl);
14119
14120       /* Deleted labels are programmer specified labels which have been
14121          eliminated because of various optimizations.  We still emit them
14122          here so that it is possible to put breakpoints on them.  */
14123       if (insn
14124           && (LABEL_P (insn)
14125               || ((NOTE_P (insn)
14126                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
14127         {
14128           /* When optimization is enabled (via -O) some parts of the compiler
14129              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
14130              represent source-level labels which were explicitly declared by
14131              the user.  This really shouldn't be happening though, so catch
14132              it if it ever does happen.  */
14133           gcc_assert (!INSN_DELETED_P (insn));
14134
14135           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
14136           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
14137         }
14138     }
14139 }
14140
14141 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
14142    attributes to the DIE for a block STMT, to describe where the inlined
14143    function was called from.  This is similar to add_src_coords_attributes.  */
14144
14145 static inline void
14146 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
14147 {
14148   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
14149
14150   add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
14151   add_AT_unsigned (die, DW_AT_call_line, s.line);
14152 }
14153
14154
14155 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
14156    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
14157
14158 static inline void
14159 add_high_low_attributes (tree stmt, dw_die_ref die)
14160 {
14161   char label[MAX_ARTIFICIAL_LABEL_BYTES];
14162
14163   if (BLOCK_FRAGMENT_CHAIN (stmt))
14164     {
14165       tree chain;
14166
14167       if (inlined_function_outer_scope_p (stmt))
14168         {
14169           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
14170                                        BLOCK_NUMBER (stmt));
14171           add_AT_lbl_id (die, DW_AT_entry_pc, label);
14172         }
14173
14174       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
14175
14176       chain = BLOCK_FRAGMENT_CHAIN (stmt);
14177       do
14178         {
14179           add_ranges (chain);
14180           chain = BLOCK_FRAGMENT_CHAIN (chain);
14181         }
14182       while (chain);
14183       add_ranges (NULL);
14184     }
14185   else
14186     {
14187       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
14188                                    BLOCK_NUMBER (stmt));
14189       add_AT_lbl_id (die, DW_AT_low_pc, label);
14190       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
14191                                    BLOCK_NUMBER (stmt));
14192       add_AT_lbl_id (die, DW_AT_high_pc, label);
14193     }
14194 }
14195
14196 /* Generate a DIE for a lexical block.  */
14197
14198 static void
14199 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
14200 {
14201   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
14202
14203   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
14204     add_high_low_attributes (stmt, stmt_die);
14205
14206   decls_for_scope (stmt, stmt_die, depth);
14207 }
14208
14209 /* Generate a DIE for an inlined subprogram.  */
14210
14211 static void
14212 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
14213 {
14214   tree decl = block_ultimate_origin (stmt);
14215
14216   /* Emit info for the abstract instance first, if we haven't yet.  We
14217      must emit this even if the block is abstract, otherwise when we
14218      emit the block below (or elsewhere), we may end up trying to emit
14219      a die whose origin die hasn't been emitted, and crashing.  */
14220   dwarf2out_abstract_function (decl);
14221
14222   if (! BLOCK_ABSTRACT (stmt))
14223     {
14224       dw_die_ref subr_die
14225         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
14226
14227       add_abstract_origin_attribute (subr_die, decl);
14228       if (TREE_ASM_WRITTEN (stmt))
14229         add_high_low_attributes (stmt, subr_die);
14230       add_call_src_coords_attributes (stmt, subr_die);
14231
14232       decls_for_scope (stmt, subr_die, depth);
14233       current_function_has_inlines = 1;
14234     }
14235   else
14236     /* We may get here if we're the outer block of function A that was
14237        inlined into function B that was inlined into function C.  When
14238        generating debugging info for C, dwarf2out_abstract_function(B)
14239        would mark all inlined blocks as abstract, including this one.
14240        So, we wouldn't (and shouldn't) expect labels to be generated
14241        for this one.  Instead, just emit debugging info for
14242        declarations within the block.  This is particularly important
14243        in the case of initializers of arguments passed from B to us:
14244        if they're statement expressions containing declarations, we
14245        wouldn't generate dies for their abstract variables, and then,
14246        when generating dies for the real variables, we'd die (pun
14247        intended :-)  */
14248     gen_lexical_block_die (stmt, context_die, depth);
14249 }
14250
14251 /* Generate a DIE for a field in a record, or structure.  */
14252
14253 static void
14254 gen_field_die (tree decl, dw_die_ref context_die)
14255 {
14256   dw_die_ref decl_die;
14257
14258   if (TREE_TYPE (decl) == error_mark_node)
14259     return;
14260
14261   decl_die = new_die (DW_TAG_member, context_die, decl);
14262   add_name_and_src_coords_attributes (decl_die, decl);
14263   add_type_attribute (decl_die, member_declared_type (decl),
14264                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
14265                       context_die);
14266
14267   if (DECL_BIT_FIELD_TYPE (decl))
14268     {
14269       add_byte_size_attribute (decl_die, decl);
14270       add_bit_size_attribute (decl_die, decl);
14271       add_bit_offset_attribute (decl_die, decl);
14272     }
14273
14274   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
14275     add_data_member_location_attribute (decl_die, decl);
14276
14277   if (DECL_ARTIFICIAL (decl))
14278     add_AT_flag (decl_die, DW_AT_artificial, 1);
14279
14280   if (TREE_PROTECTED (decl))
14281     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
14282   else if (TREE_PRIVATE (decl))
14283     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
14284
14285   /* Equate decl number to die, so that we can look up this decl later on.  */
14286   equate_decl_number_to_die (decl, decl_die);
14287 }
14288
14289 #if 0
14290 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
14291    Use modified_type_die instead.
14292    We keep this code here just in case these types of DIEs may be needed to
14293    represent certain things in other languages (e.g. Pascal) someday.  */
14294
14295 static void
14296 gen_pointer_type_die (tree type, dw_die_ref context_die)
14297 {
14298   dw_die_ref ptr_die
14299     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
14300
14301   equate_type_number_to_die (type, ptr_die);
14302   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
14303   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
14304 }
14305
14306 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
14307    Use modified_type_die instead.
14308    We keep this code here just in case these types of DIEs may be needed to
14309    represent certain things in other languages (e.g. Pascal) someday.  */
14310
14311 static void
14312 gen_reference_type_die (tree type, dw_die_ref context_die)
14313 {
14314   dw_die_ref ref_die
14315     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
14316
14317   equate_type_number_to_die (type, ref_die);
14318   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
14319   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
14320 }
14321 #endif
14322
14323 /* Generate a DIE for a pointer to a member type.  */
14324
14325 static void
14326 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
14327 {
14328   dw_die_ref ptr_die
14329     = new_die (DW_TAG_ptr_to_member_type,
14330                scope_die_for (type, context_die), type);
14331
14332   equate_type_number_to_die (type, ptr_die);
14333   add_AT_die_ref (ptr_die, DW_AT_containing_type,
14334                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
14335   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
14336 }
14337
14338 /* Generate the DIE for the compilation unit.  */
14339
14340 static dw_die_ref
14341 gen_compile_unit_die (const char *filename)
14342 {
14343   dw_die_ref die;
14344   char producer[250];
14345   const char *language_string = lang_hooks.name;
14346   int language;
14347
14348   die = new_die (DW_TAG_compile_unit, NULL, NULL);
14349
14350   if (filename)
14351     {
14352       add_name_attribute (die, filename);
14353       /* Don't add cwd for <built-in>.  */
14354       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
14355         add_comp_dir_attribute (die);
14356     }
14357
14358   sprintf (producer, "%s %s", language_string, version_string);
14359
14360 #ifdef MIPS_DEBUGGING_INFO
14361   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
14362      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
14363      not appear in the producer string, the debugger reaches the conclusion
14364      that the object file is stripped and has no debugging information.
14365      To get the MIPS/SGI debugger to believe that there is debugging
14366      information in the object file, we add a -g to the producer string.  */
14367   if (debug_info_level > DINFO_LEVEL_TERSE)
14368     strcat (producer, " -g");
14369 #endif
14370
14371   add_AT_string (die, DW_AT_producer, producer);
14372
14373   if (strcmp (language_string, "GNU C++") == 0)
14374     language = DW_LANG_C_plus_plus;
14375   else if (strcmp (language_string, "GNU Ada") == 0)
14376     language = DW_LANG_Ada95;
14377   else if (strcmp (language_string, "GNU F77") == 0)
14378     language = DW_LANG_Fortran77;
14379   else if (strcmp (language_string, "GNU Fortran") == 0)
14380     language = DW_LANG_Fortran95;
14381   else if (strcmp (language_string, "GNU Pascal") == 0)
14382     language = DW_LANG_Pascal83;
14383   else if (strcmp (language_string, "GNU Java") == 0)
14384     language = DW_LANG_Java;
14385   else if (strcmp (language_string, "GNU Objective-C") == 0)
14386     language = DW_LANG_ObjC;
14387   else if (strcmp (language_string, "GNU Objective-C++") == 0)
14388     language = DW_LANG_ObjC_plus_plus;
14389   else
14390     language = DW_LANG_C89;
14391
14392   add_AT_unsigned (die, DW_AT_language, language);
14393   return die;
14394 }
14395
14396 /* Generate the DIE for a base class.  */
14397
14398 static void
14399 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
14400 {
14401   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
14402
14403   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
14404   add_data_member_location_attribute (die, binfo);
14405
14406   if (BINFO_VIRTUAL_P (binfo))
14407     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
14408
14409   if (access == access_public_node)
14410     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
14411   else if (access == access_protected_node)
14412     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
14413 }
14414
14415 /* Generate a DIE for a class member.  */
14416
14417 static void
14418 gen_member_die (tree type, dw_die_ref context_die)
14419 {
14420   tree member;
14421   tree binfo = TYPE_BINFO (type);
14422   dw_die_ref child;
14423
14424   /* If this is not an incomplete type, output descriptions of each of its
14425      members. Note that as we output the DIEs necessary to represent the
14426      members of this record or union type, we will also be trying to output
14427      DIEs to represent the *types* of those members. However the `type'
14428      function (above) will specifically avoid generating type DIEs for member
14429      types *within* the list of member DIEs for this (containing) type except
14430      for those types (of members) which are explicitly marked as also being
14431      members of this (containing) type themselves.  The g++ front- end can
14432      force any given type to be treated as a member of some other (containing)
14433      type by setting the TYPE_CONTEXT of the given (member) type to point to
14434      the TREE node representing the appropriate (containing) type.  */
14435
14436   /* First output info about the base classes.  */
14437   if (binfo)
14438     {
14439       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
14440       int i;
14441       tree base;
14442
14443       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
14444         gen_inheritance_die (base,
14445                              (accesses ? VEC_index (tree, accesses, i)
14446                               : access_public_node), context_die);
14447     }
14448
14449   /* Now output info about the data members and type members.  */
14450   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
14451     {
14452       /* If we thought we were generating minimal debug info for TYPE
14453          and then changed our minds, some of the member declarations
14454          may have already been defined.  Don't define them again, but
14455          do put them in the right order.  */
14456
14457       child = lookup_decl_die (member);
14458       if (child)
14459         splice_child_die (context_die, child);
14460       else
14461         gen_decl_die (member, NULL, context_die);
14462     }
14463
14464   /* Now output info about the function members (if any).  */
14465   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
14466     {
14467       /* Don't include clones in the member list.  */
14468       if (DECL_ABSTRACT_ORIGIN (member))
14469         continue;
14470
14471       child = lookup_decl_die (member);
14472       if (child)
14473         splice_child_die (context_die, child);
14474       else
14475         gen_decl_die (member, NULL, context_die);
14476     }
14477 }
14478
14479 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
14480    is set, we pretend that the type was never defined, so we only get the
14481    member DIEs needed by later specification DIEs.  */
14482
14483 static void
14484 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
14485                                 enum debug_info_usage usage)
14486 {
14487   dw_die_ref type_die = lookup_type_die (type);
14488   dw_die_ref scope_die = 0;
14489   int nested = 0;
14490   int complete = (TYPE_SIZE (type)
14491                   && (! TYPE_STUB_DECL (type)
14492                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
14493   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
14494   complete = complete && should_emit_struct_debug (type, usage);
14495
14496   if (type_die && ! complete)
14497     return;
14498
14499   if (TYPE_CONTEXT (type) != NULL_TREE
14500       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
14501           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
14502     nested = 1;
14503
14504   scope_die = scope_die_for (type, context_die);
14505
14506   if (! type_die || (nested && scope_die == comp_unit_die))
14507     /* First occurrence of type or toplevel definition of nested class.  */
14508     {
14509       dw_die_ref old_die = type_die;
14510
14511       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
14512                           ? record_type_tag (type) : DW_TAG_union_type,
14513                           scope_die, type);
14514       equate_type_number_to_die (type, type_die);
14515       if (old_die)
14516         add_AT_specification (type_die, old_die);
14517       else
14518         add_name_attribute (type_die, type_tag (type));
14519     }
14520   else
14521     remove_AT (type_die, DW_AT_declaration);
14522
14523   /* If this type has been completed, then give it a byte_size attribute and
14524      then give a list of members.  */
14525   if (complete && !ns_decl)
14526     {
14527       /* Prevent infinite recursion in cases where the type of some member of
14528          this type is expressed in terms of this type itself.  */
14529       TREE_ASM_WRITTEN (type) = 1;
14530       add_byte_size_attribute (type_die, type);
14531       if (TYPE_STUB_DECL (type) != NULL_TREE)
14532         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
14533
14534       /* If the first reference to this type was as the return type of an
14535          inline function, then it may not have a parent.  Fix this now.  */
14536       if (type_die->die_parent == NULL)
14537         add_child_die (scope_die, type_die);
14538
14539       push_decl_scope (type);
14540       gen_member_die (type, type_die);
14541       pop_decl_scope ();
14542
14543       /* GNU extension: Record what type our vtable lives in.  */
14544       if (TYPE_VFIELD (type))
14545         {
14546           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
14547
14548           gen_type_die (vtype, context_die);
14549           add_AT_die_ref (type_die, DW_AT_containing_type,
14550                           lookup_type_die (vtype));
14551         }
14552     }
14553   else
14554     {
14555       add_AT_flag (type_die, DW_AT_declaration, 1);
14556
14557       /* We don't need to do this for function-local types.  */
14558       if (TYPE_STUB_DECL (type)
14559           && ! decl_function_context (TYPE_STUB_DECL (type)))
14560         VEC_safe_push (tree, gc, incomplete_types, type);
14561     }
14562
14563   if (get_AT (type_die, DW_AT_name))
14564     add_pubtype (type, type_die);
14565 }
14566
14567 /* Generate a DIE for a subroutine _type_.  */
14568
14569 static void
14570 gen_subroutine_type_die (tree type, dw_die_ref context_die)
14571 {
14572   tree return_type = TREE_TYPE (type);
14573   dw_die_ref subr_die
14574     = new_die (DW_TAG_subroutine_type,
14575                scope_die_for (type, context_die), type);
14576
14577   equate_type_number_to_die (type, subr_die);
14578   add_prototyped_attribute (subr_die, type);
14579   add_type_attribute (subr_die, return_type, 0, 0, context_die);
14580   gen_formal_types_die (type, subr_die);
14581
14582   if (get_AT (subr_die, DW_AT_name))
14583     add_pubtype (type, subr_die);
14584 }
14585
14586 /* Generate a DIE for a type definition.  */
14587
14588 static void
14589 gen_typedef_die (tree decl, dw_die_ref context_die)
14590 {
14591   dw_die_ref type_die;
14592   tree origin;
14593
14594   if (TREE_ASM_WRITTEN (decl))
14595     return;
14596
14597   TREE_ASM_WRITTEN (decl) = 1;
14598   type_die = new_die (DW_TAG_typedef, context_die, decl);
14599   origin = decl_ultimate_origin (decl);
14600   if (origin != NULL)
14601     add_abstract_origin_attribute (type_die, origin);
14602   else
14603     {
14604       tree type;
14605
14606       add_name_and_src_coords_attributes (type_die, decl);
14607       if (DECL_ORIGINAL_TYPE (decl))
14608         {
14609           type = DECL_ORIGINAL_TYPE (decl);
14610
14611           gcc_assert (type != TREE_TYPE (decl));
14612           equate_type_number_to_die (TREE_TYPE (decl), type_die);
14613         }
14614       else
14615         type = TREE_TYPE (decl);
14616
14617       add_type_attribute (type_die, type, TREE_READONLY (decl),
14618                           TREE_THIS_VOLATILE (decl), context_die);
14619     }
14620
14621   if (DECL_ABSTRACT (decl))
14622     equate_decl_number_to_die (decl, type_die);
14623
14624   if (get_AT (type_die, DW_AT_name))
14625     add_pubtype (decl, type_die);
14626 }
14627
14628 /* Generate a type description DIE.  */
14629
14630 static void
14631 gen_type_die_with_usage (tree type, dw_die_ref context_die,
14632                                 enum debug_info_usage usage)
14633 {
14634   int need_pop;
14635   struct array_descr_info info;
14636
14637   if (type == NULL_TREE || type == error_mark_node)
14638     return;
14639
14640   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
14641       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
14642     {
14643       if (TREE_ASM_WRITTEN (type))
14644         return;
14645
14646       /* Prevent broken recursion; we can't hand off to the same type.  */
14647       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
14648
14649       TREE_ASM_WRITTEN (type) = 1;
14650       gen_decl_die (TYPE_NAME (type), NULL, context_die);
14651       return;
14652     }
14653
14654   /* If this is an array type with hidden descriptor, handle it first.  */
14655   if (!TREE_ASM_WRITTEN (type)
14656       && lang_hooks.types.get_array_descr_info
14657       && lang_hooks.types.get_array_descr_info (type, &info))
14658     {
14659       gen_descr_array_type_die (type, &info, context_die);
14660       TREE_ASM_WRITTEN (type) = 1;
14661       return;
14662     }
14663
14664   /* We are going to output a DIE to represent the unqualified version
14665      of this type (i.e. without any const or volatile qualifiers) so
14666      get the main variant (i.e. the unqualified version) of this type
14667      now.  (Vectors are special because the debugging info is in the
14668      cloned type itself).  */
14669   if (TREE_CODE (type) != VECTOR_TYPE)
14670     type = type_main_variant (type);
14671
14672   if (TREE_ASM_WRITTEN (type))
14673     return;
14674
14675   switch (TREE_CODE (type))
14676     {
14677     case ERROR_MARK:
14678       break;
14679
14680     case POINTER_TYPE:
14681     case REFERENCE_TYPE:
14682       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
14683          ensures that the gen_type_die recursion will terminate even if the
14684          type is recursive.  Recursive types are possible in Ada.  */
14685       /* ??? We could perhaps do this for all types before the switch
14686          statement.  */
14687       TREE_ASM_WRITTEN (type) = 1;
14688
14689       /* For these types, all that is required is that we output a DIE (or a
14690          set of DIEs) to represent the "basis" type.  */
14691       gen_type_die_with_usage (TREE_TYPE (type), context_die,
14692                                 DINFO_USAGE_IND_USE);
14693       break;
14694
14695     case OFFSET_TYPE:
14696       /* This code is used for C++ pointer-to-data-member types.
14697          Output a description of the relevant class type.  */
14698       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
14699                                         DINFO_USAGE_IND_USE);
14700
14701       /* Output a description of the type of the object pointed to.  */
14702       gen_type_die_with_usage (TREE_TYPE (type), context_die,
14703                                         DINFO_USAGE_IND_USE);
14704
14705       /* Now output a DIE to represent this pointer-to-data-member type
14706          itself.  */
14707       gen_ptr_to_mbr_type_die (type, context_die);
14708       break;
14709
14710     case FUNCTION_TYPE:
14711       /* Force out return type (in case it wasn't forced out already).  */
14712       gen_type_die_with_usage (TREE_TYPE (type), context_die,
14713                                         DINFO_USAGE_DIR_USE);
14714       gen_subroutine_type_die (type, context_die);
14715       break;
14716
14717     case METHOD_TYPE:
14718       /* Force out return type (in case it wasn't forced out already).  */
14719       gen_type_die_with_usage (TREE_TYPE (type), context_die,
14720                                         DINFO_USAGE_DIR_USE);
14721       gen_subroutine_type_die (type, context_die);
14722       break;
14723
14724     case ARRAY_TYPE:
14725       gen_array_type_die (type, context_die);
14726       break;
14727
14728     case VECTOR_TYPE:
14729       gen_array_type_die (type, context_die);
14730       break;
14731
14732     case ENUMERAL_TYPE:
14733     case RECORD_TYPE:
14734     case UNION_TYPE:
14735     case QUAL_UNION_TYPE:
14736       /* If this is a nested type whose containing class hasn't been written
14737          out yet, writing it out will cover this one, too.  This does not apply
14738          to instantiations of member class templates; they need to be added to
14739          the containing class as they are generated.  FIXME: This hurts the
14740          idea of combining type decls from multiple TUs, since we can't predict
14741          what set of template instantiations we'll get.  */
14742       if (TYPE_CONTEXT (type)
14743           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
14744           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
14745         {
14746           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
14747
14748           if (TREE_ASM_WRITTEN (type))
14749             return;
14750
14751           /* If that failed, attach ourselves to the stub.  */
14752           push_decl_scope (TYPE_CONTEXT (type));
14753           context_die = lookup_type_die (TYPE_CONTEXT (type));
14754           need_pop = 1;
14755         }
14756       else
14757         {
14758           context_die = declare_in_namespace (type, context_die);
14759           need_pop = 0;
14760         }
14761
14762       if (TREE_CODE (type) == ENUMERAL_TYPE)
14763         {
14764           /* This might have been written out by the call to
14765              declare_in_namespace.  */
14766           if (!TREE_ASM_WRITTEN (type))
14767             gen_enumeration_type_die (type, context_die);
14768         }
14769       else
14770         gen_struct_or_union_type_die (type, context_die, usage);
14771
14772       if (need_pop)
14773         pop_decl_scope ();
14774
14775       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
14776          it up if it is ever completed.  gen_*_type_die will set it for us
14777          when appropriate.  */
14778       return;
14779
14780     case VOID_TYPE:
14781     case INTEGER_TYPE:
14782     case REAL_TYPE:
14783     case FIXED_POINT_TYPE:
14784     case COMPLEX_TYPE:
14785     case BOOLEAN_TYPE:
14786       /* No DIEs needed for fundamental types.  */
14787       break;
14788
14789     case LANG_TYPE:
14790       /* No Dwarf representation currently defined.  */
14791       break;
14792
14793     default:
14794       gcc_unreachable ();
14795     }
14796
14797   TREE_ASM_WRITTEN (type) = 1;
14798 }
14799
14800 static void
14801 gen_type_die (tree type, dw_die_ref context_die)
14802 {
14803   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
14804 }
14805
14806 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
14807    things which are local to the given block.  */
14808
14809 static void
14810 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
14811 {
14812   int must_output_die = 0;
14813   bool inlined_func;
14814
14815   /* Ignore blocks that are NULL.  */
14816   if (stmt == NULL_TREE)
14817     return;
14818
14819   inlined_func = inlined_function_outer_scope_p (stmt);
14820
14821   /* If the block is one fragment of a non-contiguous block, do not
14822      process the variables, since they will have been done by the
14823      origin block.  Do process subblocks.  */
14824   if (BLOCK_FRAGMENT_ORIGIN (stmt))
14825     {
14826       tree sub;
14827
14828       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
14829         gen_block_die (sub, context_die, depth + 1);
14830
14831       return;
14832     }
14833
14834   /* Determine if we need to output any Dwarf DIEs at all to represent this
14835      block.  */
14836   if (inlined_func)
14837     /* The outer scopes for inlinings *must* always be represented.  We
14838        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
14839     must_output_die = 1;
14840   else
14841     {
14842       /* Determine if this block directly contains any "significant"
14843          local declarations which we will need to output DIEs for.  */
14844       if (debug_info_level > DINFO_LEVEL_TERSE)
14845         /* We are not in terse mode so *any* local declaration counts
14846            as being a "significant" one.  */
14847         must_output_die = ((BLOCK_VARS (stmt) != NULL
14848                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
14849                            && (TREE_USED (stmt)
14850                                || TREE_ASM_WRITTEN (stmt)
14851                                || BLOCK_ABSTRACT (stmt)));
14852       else if ((TREE_USED (stmt)
14853                 || TREE_ASM_WRITTEN (stmt)
14854                 || BLOCK_ABSTRACT (stmt))
14855                && !dwarf2out_ignore_block (stmt))
14856         must_output_die = 1;
14857     }
14858
14859   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
14860      DIE for any block which contains no significant local declarations at
14861      all.  Rather, in such cases we just call `decls_for_scope' so that any
14862      needed Dwarf info for any sub-blocks will get properly generated. Note
14863      that in terse mode, our definition of what constitutes a "significant"
14864      local declaration gets restricted to include only inlined function
14865      instances and local (nested) function definitions.  */
14866   if (must_output_die)
14867     {
14868       if (inlined_func)
14869         gen_inlined_subroutine_die (stmt, context_die, depth);
14870       else
14871         gen_lexical_block_die (stmt, context_die, depth);
14872     }
14873   else
14874     decls_for_scope (stmt, context_die, depth);
14875 }
14876
14877 /* Process variable DECL (or variable with origin ORIGIN) within
14878    block STMT and add it to CONTEXT_DIE.  */
14879 static void
14880 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
14881 {
14882   dw_die_ref die;
14883   tree decl_or_origin = decl ? decl : origin;
14884   tree ultimate_origin = origin ? decl_ultimate_origin (origin) : NULL;
14885
14886   if (ultimate_origin)
14887     origin = ultimate_origin;
14888
14889   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
14890     die = lookup_decl_die (decl_or_origin);
14891   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
14892            && TYPE_DECL_IS_STUB (decl_or_origin))
14893     die = lookup_type_die (TREE_TYPE (decl_or_origin));
14894   else
14895     die = NULL;
14896
14897   if (die != NULL && die->die_parent == NULL)
14898     add_child_die (context_die, die);
14899   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
14900     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
14901                                          stmt, context_die);
14902   else
14903     gen_decl_die (decl, origin, context_die);
14904 }
14905
14906 /* Generate all of the decls declared within a given scope and (recursively)
14907    all of its sub-blocks.  */
14908
14909 static void
14910 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
14911 {
14912   tree decl;
14913   unsigned int i;
14914   tree subblocks;
14915
14916   /* Ignore NULL blocks.  */
14917   if (stmt == NULL_TREE)
14918     return;
14919
14920   /* Output the DIEs to represent all of the data objects and typedefs
14921      declared directly within this block but not within any nested
14922      sub-blocks.  Also, nested function and tag DIEs have been
14923      generated with a parent of NULL; fix that up now.  */
14924   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
14925     process_scope_var (stmt, decl, NULL_TREE, context_die);
14926   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
14927     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
14928                        context_die);
14929
14930   /* If we're at -g1, we're not interested in subblocks.  */
14931   if (debug_info_level <= DINFO_LEVEL_TERSE)
14932     return;
14933
14934   /* Output the DIEs to represent all sub-blocks (and the items declared
14935      therein) of this block.  */
14936   for (subblocks = BLOCK_SUBBLOCKS (stmt);
14937        subblocks != NULL;
14938        subblocks = BLOCK_CHAIN (subblocks))
14939     gen_block_die (subblocks, context_die, depth + 1);
14940 }
14941
14942 /* Is this a typedef we can avoid emitting?  */
14943
14944 static inline int
14945 is_redundant_typedef (const_tree decl)
14946 {
14947   if (TYPE_DECL_IS_STUB (decl))
14948     return 1;
14949
14950   if (DECL_ARTIFICIAL (decl)
14951       && DECL_CONTEXT (decl)
14952       && is_tagged_type (DECL_CONTEXT (decl))
14953       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
14954       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
14955     /* Also ignore the artificial member typedef for the class name.  */
14956     return 1;
14957
14958   return 0;
14959 }
14960
14961 /* Returns the DIE for a context.  */
14962
14963 static inline dw_die_ref
14964 get_context_die (tree context)
14965 {
14966   if (context)
14967     {
14968       /* Find die that represents this context.  */
14969       if (TYPE_P (context))
14970         return force_type_die (context);
14971       else
14972         return force_decl_die (context);
14973     }
14974   return comp_unit_die;
14975 }
14976
14977 /* Returns the DIE for decl.  A DIE will always be returned.  */
14978
14979 static dw_die_ref
14980 force_decl_die (tree decl)
14981 {
14982   dw_die_ref decl_die;
14983   unsigned saved_external_flag;
14984   tree save_fn = NULL_TREE;
14985   decl_die = lookup_decl_die (decl);
14986   if (!decl_die)
14987     {
14988       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
14989
14990       decl_die = lookup_decl_die (decl);
14991       if (decl_die)
14992         return decl_die;
14993
14994       switch (TREE_CODE (decl))
14995         {
14996         case FUNCTION_DECL:
14997           /* Clear current_function_decl, so that gen_subprogram_die thinks
14998              that this is a declaration. At this point, we just want to force
14999              declaration die.  */
15000           save_fn = current_function_decl;
15001           current_function_decl = NULL_TREE;
15002           gen_subprogram_die (decl, context_die);
15003           current_function_decl = save_fn;
15004           break;
15005
15006         case VAR_DECL:
15007           /* Set external flag to force declaration die. Restore it after
15008            gen_decl_die() call.  */
15009           saved_external_flag = DECL_EXTERNAL (decl);
15010           DECL_EXTERNAL (decl) = 1;
15011           gen_decl_die (decl, NULL, context_die);
15012           DECL_EXTERNAL (decl) = saved_external_flag;
15013           break;
15014
15015         case NAMESPACE_DECL:
15016           dwarf2out_decl (decl);
15017           break;
15018
15019         default:
15020           gcc_unreachable ();
15021         }
15022
15023       /* We should be able to find the DIE now.  */
15024       if (!decl_die)
15025         decl_die = lookup_decl_die (decl);
15026       gcc_assert (decl_die);
15027     }
15028
15029   return decl_die;
15030 }
15031
15032 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
15033    always returned.  */
15034
15035 static dw_die_ref
15036 force_type_die (tree type)
15037 {
15038   dw_die_ref type_die;
15039
15040   type_die = lookup_type_die (type);
15041   if (!type_die)
15042     {
15043       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
15044
15045       type_die = modified_type_die (type, TYPE_READONLY (type),
15046                                     TYPE_VOLATILE (type), context_die);
15047       gcc_assert (type_die);
15048     }
15049   return type_die;
15050 }
15051
15052 /* Force out any required namespaces to be able to output DECL,
15053    and return the new context_die for it, if it's changed.  */
15054
15055 static dw_die_ref
15056 setup_namespace_context (tree thing, dw_die_ref context_die)
15057 {
15058   tree context = (DECL_P (thing)
15059                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
15060   if (context && TREE_CODE (context) == NAMESPACE_DECL)
15061     /* Force out the namespace.  */
15062     context_die = force_decl_die (context);
15063
15064   return context_die;
15065 }
15066
15067 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
15068    type) within its namespace, if appropriate.
15069
15070    For compatibility with older debuggers, namespace DIEs only contain
15071    declarations; all definitions are emitted at CU scope.  */
15072
15073 static dw_die_ref
15074 declare_in_namespace (tree thing, dw_die_ref context_die)
15075 {
15076   dw_die_ref ns_context;
15077
15078   if (debug_info_level <= DINFO_LEVEL_TERSE)
15079     return context_die;
15080
15081   /* If this decl is from an inlined function, then don't try to emit it in its
15082      namespace, as we will get confused.  It would have already been emitted
15083      when the abstract instance of the inline function was emitted anyways.  */
15084   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
15085     return context_die;
15086
15087   ns_context = setup_namespace_context (thing, context_die);
15088
15089   if (ns_context != context_die)
15090     {
15091       if (is_fortran ())
15092         return ns_context;
15093       if (DECL_P (thing))
15094         gen_decl_die (thing, NULL, ns_context);
15095       else
15096         gen_type_die (thing, ns_context);
15097     }
15098   return context_die;
15099 }
15100
15101 /* Generate a DIE for a namespace or namespace alias.  */
15102
15103 static void
15104 gen_namespace_die (tree decl, dw_die_ref context_die)
15105 {
15106   dw_die_ref namespace_die;
15107
15108   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
15109      they are an alias of.  */
15110   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
15111     {
15112       /* Output a real namespace or module.  */
15113       context_die = setup_namespace_context (decl, comp_unit_die);
15114       namespace_die = new_die (is_fortran ()
15115                                ? DW_TAG_module : DW_TAG_namespace,
15116                                context_die, decl);
15117       /* For Fortran modules defined in different CU don't add src coords.  */
15118       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
15119         add_name_attribute (namespace_die, dwarf2_name (decl, 0));
15120       else
15121         add_name_and_src_coords_attributes (namespace_die, decl);
15122       if (DECL_EXTERNAL (decl))
15123         add_AT_flag (namespace_die, DW_AT_declaration, 1);
15124       equate_decl_number_to_die (decl, namespace_die);
15125     }
15126   else
15127     {
15128       /* Output a namespace alias.  */
15129
15130       /* Force out the namespace we are an alias of, if necessary.  */
15131       dw_die_ref origin_die
15132         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
15133
15134       if (DECL_CONTEXT (decl) == NULL_TREE
15135           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
15136         context_die = setup_namespace_context (decl, comp_unit_die);
15137       /* Now create the namespace alias DIE.  */
15138       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
15139       add_name_and_src_coords_attributes (namespace_die, decl);
15140       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
15141       equate_decl_number_to_die (decl, namespace_die);
15142     }
15143 }
15144
15145 /* Generate Dwarf debug information for a decl described by DECL.  */
15146
15147 static void
15148 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
15149 {
15150   tree decl_or_origin = decl ? decl : origin;
15151   tree class_origin = NULL;
15152
15153   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
15154     return;
15155
15156   switch (TREE_CODE (decl_or_origin))
15157     {
15158     case ERROR_MARK:
15159       break;
15160
15161     case CONST_DECL:
15162       if (!is_fortran ())
15163         {
15164           /* The individual enumerators of an enum type get output when we output
15165              the Dwarf representation of the relevant enum type itself.  */
15166           break;
15167         }
15168
15169       /* Emit its type.  */
15170       gen_type_die (TREE_TYPE (decl), context_die);
15171
15172       /* And its containing namespace.  */
15173       context_die = declare_in_namespace (decl, context_die);
15174
15175       gen_const_die (decl, context_die);
15176       break;
15177
15178     case FUNCTION_DECL:
15179       /* Don't output any DIEs to represent mere function declarations,
15180          unless they are class members or explicit block externs.  */
15181       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
15182           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
15183           && (current_function_decl == NULL_TREE
15184               || DECL_ARTIFICIAL (decl_or_origin)))
15185         break;
15186
15187 #if 0
15188       /* FIXME */
15189       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
15190          on local redeclarations of global functions.  That seems broken.  */
15191       if (current_function_decl != decl)
15192         /* This is only a declaration.  */;
15193 #endif
15194
15195       /* If we're emitting a clone, emit info for the abstract instance.  */
15196       if (origin || DECL_ORIGIN (decl) != decl)
15197         dwarf2out_abstract_function (origin ? origin : DECL_ABSTRACT_ORIGIN (decl));
15198
15199       /* If we're emitting an out-of-line copy of an inline function,
15200          emit info for the abstract instance and set up to refer to it.  */
15201       else if (cgraph_function_possibly_inlined_p (decl)
15202                && ! DECL_ABSTRACT (decl)
15203                && ! class_or_namespace_scope_p (context_die)
15204                /* dwarf2out_abstract_function won't emit a die if this is just
15205                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
15206                   that case, because that works only if we have a die.  */
15207                && DECL_INITIAL (decl) != NULL_TREE)
15208         {
15209           dwarf2out_abstract_function (decl);
15210           set_decl_origin_self (decl);
15211         }
15212
15213       /* Otherwise we're emitting the primary DIE for this decl.  */
15214       else if (debug_info_level > DINFO_LEVEL_TERSE)
15215         {
15216           /* Before we describe the FUNCTION_DECL itself, make sure that we
15217              have described its return type.  */
15218           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
15219
15220           /* And its virtual context.  */
15221           if (DECL_VINDEX (decl) != NULL_TREE)
15222             gen_type_die (DECL_CONTEXT (decl), context_die);
15223
15224           /* And its containing type.  */
15225           if (!origin)
15226             origin = decl_class_context (decl);
15227           if (origin != NULL_TREE)
15228             gen_type_die_for_member (origin, decl, context_die);
15229
15230           /* And its containing namespace.  */
15231           context_die = declare_in_namespace (decl, context_die);
15232         }
15233
15234       /* Now output a DIE to represent the function itself.  */
15235       if (decl)
15236         gen_subprogram_die (decl, context_die);
15237       break;
15238
15239     case TYPE_DECL:
15240       /* If we are in terse mode, don't generate any DIEs to represent any
15241          actual typedefs.  */
15242       if (debug_info_level <= DINFO_LEVEL_TERSE)
15243         break;
15244
15245       /* In the special case of a TYPE_DECL node representing the declaration
15246          of some type tag, if the given TYPE_DECL is marked as having been
15247          instantiated from some other (original) TYPE_DECL node (e.g. one which
15248          was generated within the original definition of an inline function) we
15249          used to generate a special (abbreviated) DW_TAG_structure_type,
15250          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
15251          should be actually referencing those DIEs, as variable DIEs with that
15252          type would be emitted already in the abstract origin, so it was always
15253          removed during unused type prunning.  Don't add anything in this
15254          case.  */
15255       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
15256         break;
15257
15258       if (is_redundant_typedef (decl))
15259         gen_type_die (TREE_TYPE (decl), context_die);
15260       else
15261         /* Output a DIE to represent the typedef itself.  */
15262         gen_typedef_die (decl, context_die);
15263       break;
15264
15265     case LABEL_DECL:
15266       if (debug_info_level >= DINFO_LEVEL_NORMAL)
15267         gen_label_die (decl, context_die);
15268       break;
15269
15270     case VAR_DECL:
15271     case RESULT_DECL:
15272       /* If we are in terse mode, don't generate any DIEs to represent any
15273          variable declarations or definitions.  */
15274       if (debug_info_level <= DINFO_LEVEL_TERSE)
15275         break;
15276
15277       /* Output any DIEs that are needed to specify the type of this data
15278          object.  */
15279       if (TREE_CODE (decl_or_origin) == RESULT_DECL
15280           && DECL_BY_REFERENCE (decl_or_origin))
15281         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
15282       else
15283         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
15284
15285       /* And its containing type.  */
15286       class_origin = decl_class_context (decl_or_origin);
15287       if (class_origin != NULL_TREE)
15288         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
15289
15290       /* And its containing namespace.  */
15291       context_die = declare_in_namespace (decl_or_origin, context_die);
15292
15293       /* Now output the DIE to represent the data object itself.  This gets
15294          complicated because of the possibility that the VAR_DECL really
15295          represents an inlined instance of a formal parameter for an inline
15296          function.  */
15297       if (!origin)
15298         origin = decl_ultimate_origin (decl);
15299       if (origin != NULL_TREE && TREE_CODE (origin) == PARM_DECL)
15300         gen_formal_parameter_die (decl, origin, context_die);
15301       else
15302         gen_variable_die (decl, origin, context_die);
15303       break;
15304
15305     case FIELD_DECL:
15306       /* Ignore the nameless fields that are used to skip bits but handle C++
15307          anonymous unions and structs.  */
15308       if (DECL_NAME (decl) != NULL_TREE
15309           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
15310           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
15311         {
15312           gen_type_die (member_declared_type (decl), context_die);
15313           gen_field_die (decl, context_die);
15314         }
15315       break;
15316
15317     case PARM_DECL:
15318       if (DECL_BY_REFERENCE (decl_or_origin))
15319         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
15320       else
15321         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
15322       gen_formal_parameter_die (decl, origin, context_die);
15323       break;
15324
15325     case NAMESPACE_DECL:
15326     case IMPORTED_DECL:
15327       gen_namespace_die (decl, context_die);
15328       break;
15329
15330     default:
15331       /* Probably some frontend-internal decl.  Assume we don't care.  */
15332       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
15333       break;
15334     }
15335 }
15336 \f
15337 /* Output debug information for global decl DECL.  Called from toplev.c after
15338    compilation proper has finished.  */
15339
15340 static void
15341 dwarf2out_global_decl (tree decl)
15342 {
15343   /* Output DWARF2 information for file-scope tentative data object
15344      declarations, file-scope (extern) function declarations (which
15345      had no corresponding body) and file-scope tagged type declarations
15346      and definitions which have not yet been forced out.  */
15347   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
15348     dwarf2out_decl (decl);
15349 }
15350
15351 /* Output debug information for type decl DECL.  Called from toplev.c
15352    and from language front ends (to record built-in types).  */
15353 static void
15354 dwarf2out_type_decl (tree decl, int local)
15355 {
15356   if (!local)
15357     dwarf2out_decl (decl);
15358 }
15359
15360 /* Output debug information for imported module or decl DECL.
15361    NAME is non-NULL name in the lexical block if the decl has been renamed.
15362    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
15363    that DECL belongs to.
15364    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
15365 static void
15366 dwarf2out_imported_module_or_decl_1 (tree decl,
15367                                      tree name,
15368                                      tree lexical_block,
15369                                      dw_die_ref lexical_block_die)
15370 {
15371   expanded_location xloc;
15372   dw_die_ref imported_die = NULL;
15373   dw_die_ref at_import_die;
15374
15375   if (TREE_CODE (decl) == IMPORTED_DECL)
15376     {
15377       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
15378       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
15379       gcc_assert (decl);
15380     }
15381   else
15382     xloc = expand_location (input_location);
15383
15384   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
15385     {
15386       if (is_base_type (TREE_TYPE (decl)))
15387         at_import_die = base_type_die (TREE_TYPE (decl));
15388       else
15389         at_import_die = force_type_die (TREE_TYPE (decl));
15390       /* For namespace N { typedef void T; } using N::T; base_type_die
15391          returns NULL, but DW_TAG_imported_declaration requires
15392          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
15393       if (!at_import_die)
15394         {
15395           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
15396           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
15397           at_import_die = lookup_type_die (TREE_TYPE (decl));
15398           gcc_assert (at_import_die);
15399         }
15400     }
15401   else
15402     {
15403       at_import_die = lookup_decl_die (decl);
15404       if (!at_import_die)
15405         {
15406           /* If we're trying to avoid duplicate debug info, we may not have
15407              emitted the member decl for this field.  Emit it now.  */
15408           if (TREE_CODE (decl) == FIELD_DECL)
15409             {
15410               tree type = DECL_CONTEXT (decl);
15411
15412               if (TYPE_CONTEXT (type)
15413                   && TYPE_P (TYPE_CONTEXT (type))
15414                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
15415                                                 DINFO_USAGE_DIR_USE))
15416                 return;
15417               gen_type_die_for_member (type, decl,
15418                                        get_context_die (TYPE_CONTEXT (type)));
15419             }
15420           at_import_die = force_decl_die (decl);
15421         }
15422     }
15423
15424   if (TREE_CODE (decl) == NAMESPACE_DECL)
15425     imported_die = new_die (DW_TAG_imported_module,
15426                             lexical_block_die,
15427                             lexical_block);
15428   else
15429     imported_die = new_die (DW_TAG_imported_declaration,
15430                             lexical_block_die,
15431                             lexical_block);
15432
15433   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
15434   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
15435   if (name)
15436     add_AT_string (imported_die, DW_AT_name,
15437                    IDENTIFIER_POINTER (name));
15438   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
15439 }
15440
15441 /* Output debug information for imported module or decl DECL.
15442    NAME is non-NULL name in context if the decl has been renamed.
15443    CHILD is true if decl is one of the renamed decls as part of
15444    importing whole module.  */
15445
15446 static void
15447 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
15448                                    bool child)
15449 {
15450   /* dw_die_ref at_import_die;  */
15451   dw_die_ref scope_die;
15452
15453   if (debug_info_level <= DINFO_LEVEL_TERSE)
15454     return;
15455
15456   gcc_assert (decl);
15457
15458   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
15459      We need decl DIE for reference and scope die. First, get DIE for the decl
15460      itself.  */
15461
15462   /* Get the scope die for decl context. Use comp_unit_die for global module
15463      or decl. If die is not found for non globals, force new die.  */
15464   if (context
15465       && TYPE_P (context)
15466       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
15467     return;
15468   scope_die = get_context_die (context);
15469
15470   if (child)
15471     {
15472       gcc_assert (scope_die->die_child);
15473       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
15474       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
15475       scope_die = scope_die->die_child;
15476     }
15477
15478   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
15479   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
15480
15481 }
15482
15483 /* Write the debugging output for DECL.  */
15484
15485 void
15486 dwarf2out_decl (tree decl)
15487 {
15488   dw_die_ref context_die = comp_unit_die;
15489
15490   switch (TREE_CODE (decl))
15491     {
15492     case ERROR_MARK:
15493       return;
15494
15495     case FUNCTION_DECL:
15496       /* What we would really like to do here is to filter out all mere
15497          file-scope declarations of file-scope functions which are never
15498          referenced later within this translation unit (and keep all of ones
15499          that *are* referenced later on) but we aren't clairvoyant, so we have
15500          no idea which functions will be referenced in the future (i.e. later
15501          on within the current translation unit). So here we just ignore all
15502          file-scope function declarations which are not also definitions.  If
15503          and when the debugger needs to know something about these functions,
15504          it will have to hunt around and find the DWARF information associated
15505          with the definition of the function.
15506
15507          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
15508          nodes represent definitions and which ones represent mere
15509          declarations.  We have to check DECL_INITIAL instead. That's because
15510          the C front-end supports some weird semantics for "extern inline"
15511          function definitions.  These can get inlined within the current
15512          translation unit (and thus, we need to generate Dwarf info for their
15513          abstract instances so that the Dwarf info for the concrete inlined
15514          instances can have something to refer to) but the compiler never
15515          generates any out-of-lines instances of such things (despite the fact
15516          that they *are* definitions).
15517
15518          The important point is that the C front-end marks these "extern
15519          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
15520          them anyway. Note that the C++ front-end also plays some similar games
15521          for inline function definitions appearing within include files which
15522          also contain `#pragma interface' pragmas.  */
15523       if (DECL_INITIAL (decl) == NULL_TREE)
15524         return;
15525
15526       /* If we're a nested function, initially use a parent of NULL; if we're
15527          a plain function, this will be fixed up in decls_for_scope.  If
15528          we're a method, it will be ignored, since we already have a DIE.  */
15529       if (decl_function_context (decl)
15530           /* But if we're in terse mode, we don't care about scope.  */
15531           && debug_info_level > DINFO_LEVEL_TERSE)
15532         context_die = NULL;
15533       break;
15534
15535     case VAR_DECL:
15536       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
15537          declaration and if the declaration was never even referenced from
15538          within this entire compilation unit.  We suppress these DIEs in
15539          order to save space in the .debug section (by eliminating entries
15540          which are probably useless).  Note that we must not suppress
15541          block-local extern declarations (whether used or not) because that
15542          would screw-up the debugger's name lookup mechanism and cause it to
15543          miss things which really ought to be in scope at a given point.  */
15544       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
15545         return;
15546
15547       /* For local statics lookup proper context die.  */
15548       if (TREE_STATIC (decl) && decl_function_context (decl))
15549         context_die = lookup_decl_die (DECL_CONTEXT (decl));
15550
15551       /* If we are in terse mode, don't generate any DIEs to represent any
15552          variable declarations or definitions.  */
15553       if (debug_info_level <= DINFO_LEVEL_TERSE)
15554         return;
15555       break;
15556
15557     case CONST_DECL:
15558       if (debug_info_level <= DINFO_LEVEL_TERSE)
15559         return;
15560       if (!is_fortran ())
15561         return;
15562       if (TREE_STATIC (decl) && decl_function_context (decl))
15563         context_die = lookup_decl_die (DECL_CONTEXT (decl));
15564       break;
15565
15566     case NAMESPACE_DECL:
15567     case IMPORTED_DECL:
15568       if (debug_info_level <= DINFO_LEVEL_TERSE)
15569         return;
15570       if (lookup_decl_die (decl) != NULL)
15571         return;
15572       break;
15573
15574     case TYPE_DECL:
15575       /* Don't emit stubs for types unless they are needed by other DIEs.  */
15576       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
15577         return;
15578
15579       /* Don't bother trying to generate any DIEs to represent any of the
15580          normal built-in types for the language we are compiling.  */
15581       if (DECL_IS_BUILTIN (decl))
15582         {
15583           /* OK, we need to generate one for `bool' so GDB knows what type
15584              comparisons have.  */
15585           if (is_cxx ()
15586               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
15587               && ! DECL_IGNORED_P (decl))
15588             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
15589
15590           return;
15591         }
15592
15593       /* If we are in terse mode, don't generate any DIEs for types.  */
15594       if (debug_info_level <= DINFO_LEVEL_TERSE)
15595         return;
15596
15597       /* If we're a function-scope tag, initially use a parent of NULL;
15598          this will be fixed up in decls_for_scope.  */
15599       if (decl_function_context (decl))
15600         context_die = NULL;
15601
15602       break;
15603
15604     default:
15605       return;
15606     }
15607
15608   gen_decl_die (decl, NULL, context_die);
15609 }
15610
15611 /* Output a marker (i.e. a label) for the beginning of the generated code for
15612    a lexical block.  */
15613
15614 static void
15615 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
15616                        unsigned int blocknum)
15617 {
15618   switch_to_section (current_function_section ());
15619   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
15620 }
15621
15622 /* Output a marker (i.e. a label) for the end of the generated code for a
15623    lexical block.  */
15624
15625 static void
15626 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
15627 {
15628   switch_to_section (current_function_section ());
15629   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
15630 }
15631
15632 /* Returns nonzero if it is appropriate not to emit any debugging
15633    information for BLOCK, because it doesn't contain any instructions.
15634
15635    Don't allow this for blocks with nested functions or local classes
15636    as we would end up with orphans, and in the presence of scheduling
15637    we may end up calling them anyway.  */
15638
15639 static bool
15640 dwarf2out_ignore_block (const_tree block)
15641 {
15642   tree decl;
15643   unsigned int i;
15644
15645   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
15646     if (TREE_CODE (decl) == FUNCTION_DECL
15647         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
15648       return 0;
15649   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
15650     {
15651       decl = BLOCK_NONLOCALIZED_VAR (block, i);
15652       if (TREE_CODE (decl) == FUNCTION_DECL
15653           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
15654       return 0;
15655     }
15656
15657   return 1;
15658 }
15659
15660 /* Hash table routines for file_hash.  */
15661
15662 static int
15663 file_table_eq (const void *p1_p, const void *p2_p)
15664 {
15665   const struct dwarf_file_data *const p1 =
15666     (const struct dwarf_file_data *) p1_p;
15667   const char *const p2 = (const char *) p2_p;
15668   return strcmp (p1->filename, p2) == 0;
15669 }
15670
15671 static hashval_t
15672 file_table_hash (const void *p_p)
15673 {
15674   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
15675   return htab_hash_string (p->filename);
15676 }
15677
15678 /* Lookup FILE_NAME (in the list of filenames that we know about here in
15679    dwarf2out.c) and return its "index".  The index of each (known) filename is
15680    just a unique number which is associated with only that one filename.  We
15681    need such numbers for the sake of generating labels (in the .debug_sfnames
15682    section) and references to those files numbers (in the .debug_srcinfo
15683    and.debug_macinfo sections).  If the filename given as an argument is not
15684    found in our current list, add it to the list and assign it the next
15685    available unique index number.  In order to speed up searches, we remember
15686    the index of the filename was looked up last.  This handles the majority of
15687    all searches.  */
15688
15689 static struct dwarf_file_data *
15690 lookup_filename (const char *file_name)
15691 {
15692   void ** slot;
15693   struct dwarf_file_data * created;
15694
15695   /* Check to see if the file name that was searched on the previous
15696      call matches this file name.  If so, return the index.  */
15697   if (file_table_last_lookup
15698       && (file_name == file_table_last_lookup->filename
15699           || strcmp (file_table_last_lookup->filename, file_name) == 0))
15700     return file_table_last_lookup;
15701
15702   /* Didn't match the previous lookup, search the table.  */
15703   slot = htab_find_slot_with_hash (file_table, file_name,
15704                                    htab_hash_string (file_name), INSERT);
15705   if (*slot)
15706     return (struct dwarf_file_data *) *slot;
15707
15708   created = GGC_NEW (struct dwarf_file_data);
15709   created->filename = file_name;
15710   created->emitted_number = 0;
15711   *slot = created;
15712   return created;
15713 }
15714
15715 /* If the assembler will construct the file table, then translate the compiler
15716    internal file table number into the assembler file table number, and emit
15717    a .file directive if we haven't already emitted one yet.  The file table
15718    numbers are different because we prune debug info for unused variables and
15719    types, which may include filenames.  */
15720
15721 static int
15722 maybe_emit_file (struct dwarf_file_data * fd)
15723 {
15724   if (! fd->emitted_number)
15725     {
15726       if (last_emitted_file)
15727         fd->emitted_number = last_emitted_file->emitted_number + 1;
15728       else
15729         fd->emitted_number = 1;
15730       last_emitted_file = fd;
15731
15732       if (DWARF2_ASM_LINE_DEBUG_INFO)
15733         {
15734           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
15735           output_quoted_string (asm_out_file,
15736                                 remap_debug_filename (fd->filename));
15737           fputc ('\n', asm_out_file);
15738         }
15739     }
15740
15741   return fd->emitted_number;
15742 }
15743
15744 /* Called by the final INSN scan whenever we see a var location.  We
15745    use it to drop labels in the right places, and throw the location in
15746    our lookup table.  */
15747
15748 static void
15749 dwarf2out_var_location (rtx loc_note)
15750 {
15751   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES];
15752   struct var_loc_node *newloc;
15753   rtx prev_insn;
15754   static rtx last_insn;
15755   static const char *last_label;
15756   tree decl;
15757
15758   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
15759     return;
15760   prev_insn = PREV_INSN (loc_note);
15761
15762   newloc = GGC_CNEW (struct var_loc_node);
15763   /* If the insn we processed last time is the previous insn
15764      and it is also a var location note, use the label we emitted
15765      last time.  */
15766   if (last_insn != NULL_RTX
15767       && last_insn == prev_insn
15768       && NOTE_P (prev_insn)
15769       && NOTE_KIND (prev_insn) == NOTE_INSN_VAR_LOCATION)
15770     {
15771       newloc->label = last_label;
15772     }
15773   else
15774     {
15775       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
15776       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
15777       loclabel_num++;
15778       newloc->label = ggc_strdup (loclabel);
15779     }
15780   newloc->var_loc_note = loc_note;
15781   newloc->next = NULL;
15782
15783   if (cfun && in_cold_section_p)
15784     newloc->section_label = crtl->subsections.cold_section_label;
15785   else
15786     newloc->section_label = text_section_label;
15787
15788   last_insn = loc_note;
15789   last_label = newloc->label;
15790   decl = NOTE_VAR_LOCATION_DECL (loc_note);
15791   add_var_loc_to_decl (decl, newloc);
15792 }
15793
15794 /* We need to reset the locations at the beginning of each
15795    function. We can't do this in the end_function hook, because the
15796    declarations that use the locations won't have been output when
15797    that hook is called.  Also compute have_multiple_function_sections here.  */
15798
15799 static void
15800 dwarf2out_begin_function (tree fun)
15801 {
15802   htab_empty (decl_loc_table);
15803
15804   if (function_section (fun) != text_section)
15805     have_multiple_function_sections = true;
15806
15807   dwarf2out_note_section_used ();
15808 }
15809
15810 /* Output a label to mark the beginning of a source code line entry
15811    and record information relating to this source line, in
15812    'line_info_table' for later output of the .debug_line section.  */
15813
15814 static void
15815 dwarf2out_source_line (unsigned int line, const char *filename)
15816 {
15817   if (debug_info_level >= DINFO_LEVEL_NORMAL
15818       && line != 0)
15819     {
15820       int file_num = maybe_emit_file (lookup_filename (filename));
15821
15822       switch_to_section (current_function_section ());
15823
15824       /* If requested, emit something human-readable.  */
15825       if (flag_debug_asm)
15826         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
15827                  filename, line);
15828
15829       if (DWARF2_ASM_LINE_DEBUG_INFO)
15830         {
15831           /* Emit the .loc directive understood by GNU as.  */
15832           fprintf (asm_out_file, "\t.loc %d %d 0\n", file_num, line);
15833
15834           /* Indicate that line number info exists.  */
15835           line_info_table_in_use++;
15836         }
15837       else if (function_section (current_function_decl) != text_section)
15838         {
15839           dw_separate_line_info_ref line_info;
15840           targetm.asm_out.internal_label (asm_out_file,
15841                                           SEPARATE_LINE_CODE_LABEL,
15842                                           separate_line_info_table_in_use);
15843
15844           /* Expand the line info table if necessary.  */
15845           if (separate_line_info_table_in_use
15846               == separate_line_info_table_allocated)
15847             {
15848               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
15849               separate_line_info_table
15850                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
15851                                  separate_line_info_table,
15852                                  separate_line_info_table_allocated);
15853               memset (separate_line_info_table
15854                        + separate_line_info_table_in_use,
15855                       0,
15856                       (LINE_INFO_TABLE_INCREMENT
15857                        * sizeof (dw_separate_line_info_entry)));
15858             }
15859
15860           /* Add the new entry at the end of the line_info_table.  */
15861           line_info
15862             = &separate_line_info_table[separate_line_info_table_in_use++];
15863           line_info->dw_file_num = file_num;
15864           line_info->dw_line_num = line;
15865           line_info->function = current_function_funcdef_no;
15866         }
15867       else
15868         {
15869           dw_line_info_ref line_info;
15870
15871           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
15872                                      line_info_table_in_use);
15873
15874           /* Expand the line info table if necessary.  */
15875           if (line_info_table_in_use == line_info_table_allocated)
15876             {
15877               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
15878               line_info_table
15879                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
15880                                  line_info_table_allocated);
15881               memset (line_info_table + line_info_table_in_use, 0,
15882                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
15883             }
15884
15885           /* Add the new entry at the end of the line_info_table.  */
15886           line_info = &line_info_table[line_info_table_in_use++];
15887           line_info->dw_file_num = file_num;
15888           line_info->dw_line_num = line;
15889         }
15890     }
15891 }
15892
15893 /* Record the beginning of a new source file.  */
15894
15895 static void
15896 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
15897 {
15898   if (flag_eliminate_dwarf2_dups)
15899     {
15900       /* Record the beginning of the file for break_out_includes.  */
15901       dw_die_ref bincl_die;
15902
15903       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
15904       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
15905     }
15906
15907   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15908     {
15909       int file_num = maybe_emit_file (lookup_filename (filename));
15910
15911       switch_to_section (debug_macinfo_section);
15912       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
15913       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
15914                                    lineno);
15915
15916       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
15917     }
15918 }
15919
15920 /* Record the end of a source file.  */
15921
15922 static void
15923 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
15924 {
15925   if (flag_eliminate_dwarf2_dups)
15926     /* Record the end of the file for break_out_includes.  */
15927     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
15928
15929   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15930     {
15931       switch_to_section (debug_macinfo_section);
15932       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
15933     }
15934 }
15935
15936 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
15937    the tail part of the directive line, i.e. the part which is past the
15938    initial whitespace, #, whitespace, directive-name, whitespace part.  */
15939
15940 static void
15941 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
15942                   const char *buffer ATTRIBUTE_UNUSED)
15943 {
15944   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15945     {
15946       switch_to_section (debug_macinfo_section);
15947       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
15948       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
15949       dw2_asm_output_nstring (buffer, -1, "The macro");
15950     }
15951 }
15952
15953 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
15954    the tail part of the directive line, i.e. the part which is past the
15955    initial whitespace, #, whitespace, directive-name, whitespace part.  */
15956
15957 static void
15958 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
15959                  const char *buffer ATTRIBUTE_UNUSED)
15960 {
15961   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
15962     {
15963       switch_to_section (debug_macinfo_section);
15964       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
15965       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
15966       dw2_asm_output_nstring (buffer, -1, "The macro");
15967     }
15968 }
15969
15970 /* Set up for Dwarf output at the start of compilation.  */
15971
15972 static void
15973 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
15974 {
15975   /* Allocate the file_table.  */
15976   file_table = htab_create_ggc (50, file_table_hash,
15977                                 file_table_eq, NULL);
15978
15979   /* Allocate the decl_die_table.  */
15980   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
15981                                     decl_die_table_eq, NULL);
15982
15983   /* Allocate the decl_loc_table.  */
15984   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
15985                                     decl_loc_table_eq, NULL);
15986
15987   /* Allocate the initial hunk of the decl_scope_table.  */
15988   decl_scope_table = VEC_alloc (tree, gc, 256);
15989
15990   /* Allocate the initial hunk of the abbrev_die_table.  */
15991   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
15992   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
15993   /* Zero-th entry is allocated, but unused.  */
15994   abbrev_die_table_in_use = 1;
15995
15996   /* Allocate the initial hunk of the line_info_table.  */
15997   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
15998   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
15999
16000   /* Zero-th entry is allocated, but unused.  */
16001   line_info_table_in_use = 1;
16002
16003   /* Allocate the pubtypes and pubnames vectors.  */
16004   pubname_table = VEC_alloc (pubname_entry, gc, 32);
16005   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
16006
16007   /* Generate the initial DIE for the .debug section.  Note that the (string)
16008      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
16009      will (typically) be a relative pathname and that this pathname should be
16010      taken as being relative to the directory from which the compiler was
16011      invoked when the given (base) source file was compiled.  We will fill
16012      in this value in dwarf2out_finish.  */
16013   comp_unit_die = gen_compile_unit_die (NULL);
16014
16015   incomplete_types = VEC_alloc (tree, gc, 64);
16016
16017   used_rtx_array = VEC_alloc (rtx, gc, 32);
16018
16019   debug_info_section = get_section (DEBUG_INFO_SECTION,
16020                                     SECTION_DEBUG, NULL);
16021   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
16022                                       SECTION_DEBUG, NULL);
16023   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
16024                                        SECTION_DEBUG, NULL);
16025   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
16026                                        SECTION_DEBUG, NULL);
16027   debug_line_section = get_section (DEBUG_LINE_SECTION,
16028                                     SECTION_DEBUG, NULL);
16029   debug_loc_section = get_section (DEBUG_LOC_SECTION,
16030                                    SECTION_DEBUG, NULL);
16031   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
16032                                         SECTION_DEBUG, NULL);
16033 #ifdef DEBUG_PUBTYPES_SECTION
16034   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
16035                                         SECTION_DEBUG, NULL);
16036 #endif
16037   debug_str_section = get_section (DEBUG_STR_SECTION,
16038                                    DEBUG_STR_SECTION_FLAGS, NULL);
16039   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
16040                                       SECTION_DEBUG, NULL);
16041   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
16042                                      SECTION_DEBUG, NULL);
16043
16044   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
16045   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
16046                                DEBUG_ABBREV_SECTION_LABEL, 0);
16047   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
16048   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
16049                                COLD_TEXT_SECTION_LABEL, 0);
16050   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
16051
16052   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
16053                                DEBUG_INFO_SECTION_LABEL, 0);
16054   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
16055                                DEBUG_LINE_SECTION_LABEL, 0);
16056   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
16057                                DEBUG_RANGES_SECTION_LABEL, 0);
16058   switch_to_section (debug_abbrev_section);
16059   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
16060   switch_to_section (debug_info_section);
16061   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
16062   switch_to_section (debug_line_section);
16063   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
16064
16065   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16066     {
16067       switch_to_section (debug_macinfo_section);
16068       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
16069                                    DEBUG_MACINFO_SECTION_LABEL, 0);
16070       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
16071     }
16072
16073   switch_to_section (text_section);
16074   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
16075   if (flag_reorder_blocks_and_partition)
16076     {
16077       cold_text_section = unlikely_text_section ();
16078       switch_to_section (cold_text_section);
16079       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
16080     }
16081 }
16082
16083 /* A helper function for dwarf2out_finish called through
16084    ht_forall.  Emit one queued .debug_str string.  */
16085
16086 static int
16087 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
16088 {
16089   struct indirect_string_node *node = (struct indirect_string_node *) *h;
16090
16091   if (node->form == DW_FORM_strp)
16092     {
16093       switch_to_section (debug_str_section);
16094       ASM_OUTPUT_LABEL (asm_out_file, node->label);
16095       assemble_string (node->str, strlen (node->str) + 1);
16096     }
16097
16098   return 1;
16099 }
16100
16101 #if ENABLE_ASSERT_CHECKING
16102 /* Verify that all marks are clear.  */
16103
16104 static void
16105 verify_marks_clear (dw_die_ref die)
16106 {
16107   dw_die_ref c;
16108
16109   gcc_assert (! die->die_mark);
16110   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
16111 }
16112 #endif /* ENABLE_ASSERT_CHECKING */
16113
16114 /* Clear the marks for a die and its children.
16115    Be cool if the mark isn't set.  */
16116
16117 static void
16118 prune_unmark_dies (dw_die_ref die)
16119 {
16120   dw_die_ref c;
16121
16122   if (die->die_mark)
16123     die->die_mark = 0;
16124   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
16125 }
16126
16127 /* Given DIE that we're marking as used, find any other dies
16128    it references as attributes and mark them as used.  */
16129
16130 static void
16131 prune_unused_types_walk_attribs (dw_die_ref die)
16132 {
16133   dw_attr_ref a;
16134   unsigned ix;
16135
16136   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
16137     {
16138       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
16139         {
16140           /* A reference to another DIE.
16141              Make sure that it will get emitted.  */
16142           prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
16143         }
16144       /* Set the string's refcount to 0 so that prune_unused_types_mark
16145          accounts properly for it.  */
16146       if (AT_class (a) == dw_val_class_str)
16147         a->dw_attr_val.v.val_str->refcount = 0;
16148     }
16149 }
16150
16151
16152 /* Mark DIE as being used.  If DOKIDS is true, then walk down
16153    to DIE's children.  */
16154
16155 static void
16156 prune_unused_types_mark (dw_die_ref die, int dokids)
16157 {
16158   dw_die_ref c;
16159
16160   if (die->die_mark == 0)
16161     {
16162       /* We haven't done this node yet.  Mark it as used.  */
16163       die->die_mark = 1;
16164
16165       /* We also have to mark its parents as used.
16166          (But we don't want to mark our parents' kids due to this.)  */
16167       if (die->die_parent)
16168         prune_unused_types_mark (die->die_parent, 0);
16169
16170       /* Mark any referenced nodes.  */
16171       prune_unused_types_walk_attribs (die);
16172
16173       /* If this node is a specification,
16174          also mark the definition, if it exists.  */
16175       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
16176         prune_unused_types_mark (die->die_definition, 1);
16177     }
16178
16179   if (dokids && die->die_mark != 2)
16180     {
16181       /* We need to walk the children, but haven't done so yet.
16182          Remember that we've walked the kids.  */
16183       die->die_mark = 2;
16184
16185       /* If this is an array type, we need to make sure our
16186          kids get marked, even if they're types.  */
16187       if (die->die_tag == DW_TAG_array_type)
16188         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
16189       else
16190         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
16191     }
16192 }
16193
16194 /* For local classes, look if any static member functions were emitted
16195    and if so, mark them.  */
16196
16197 static void
16198 prune_unused_types_walk_local_classes (dw_die_ref die)
16199 {
16200   dw_die_ref c;
16201
16202   if (die->die_mark == 2)
16203     return;
16204
16205   switch (die->die_tag)
16206     {
16207     case DW_TAG_structure_type:
16208     case DW_TAG_union_type:
16209     case DW_TAG_class_type:
16210       break;
16211
16212     case DW_TAG_subprogram:
16213       if (!get_AT_flag (die, DW_AT_declaration)
16214           || die->die_definition != NULL)
16215         prune_unused_types_mark (die, 1);
16216       return;
16217
16218     default:
16219       return;
16220     }
16221
16222   /* Mark children.  */
16223   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
16224 }
16225
16226 /* Walk the tree DIE and mark types that we actually use.  */
16227
16228 static void
16229 prune_unused_types_walk (dw_die_ref die)
16230 {
16231   dw_die_ref c;
16232
16233   /* Don't do anything if this node is already marked and
16234      children have been marked as well.  */
16235   if (die->die_mark == 2)
16236     return;
16237
16238   switch (die->die_tag)
16239     {
16240     case DW_TAG_structure_type:
16241     case DW_TAG_union_type:
16242     case DW_TAG_class_type:
16243       if (die->die_perennial_p)
16244         break;
16245
16246       for (c = die->die_parent; c; c = c->die_parent)
16247         if (c->die_tag == DW_TAG_subprogram)
16248           break;
16249
16250       /* Finding used static member functions inside of classes
16251          is needed just for local classes, because for other classes
16252          static member function DIEs with DW_AT_specification
16253          are emitted outside of the DW_TAG_*_type.  If we ever change
16254          it, we'd need to call this even for non-local classes.  */
16255       if (c)
16256         prune_unused_types_walk_local_classes (die);
16257
16258       /* It's a type node --- don't mark it.  */
16259       return;
16260
16261     case DW_TAG_const_type:
16262     case DW_TAG_packed_type:
16263     case DW_TAG_pointer_type:
16264     case DW_TAG_reference_type:
16265     case DW_TAG_volatile_type:
16266     case DW_TAG_typedef:
16267     case DW_TAG_array_type:
16268     case DW_TAG_interface_type:
16269     case DW_TAG_friend:
16270     case DW_TAG_variant_part:
16271     case DW_TAG_enumeration_type:
16272     case DW_TAG_subroutine_type:
16273     case DW_TAG_string_type:
16274     case DW_TAG_set_type:
16275     case DW_TAG_subrange_type:
16276     case DW_TAG_ptr_to_member_type:
16277     case DW_TAG_file_type:
16278       if (die->die_perennial_p)
16279         break;
16280
16281       /* It's a type node --- don't mark it.  */
16282       return;
16283
16284     default:
16285       /* Mark everything else.  */
16286       break;
16287   }
16288
16289   if (die->die_mark == 0)
16290     {
16291       die->die_mark = 1;
16292
16293       /* Now, mark any dies referenced from here.  */
16294       prune_unused_types_walk_attribs (die);
16295     }
16296
16297   die->die_mark = 2;
16298
16299   /* Mark children.  */
16300   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
16301 }
16302
16303 /* Increment the string counts on strings referred to from DIE's
16304    attributes.  */
16305
16306 static void
16307 prune_unused_types_update_strings (dw_die_ref die)
16308 {
16309   dw_attr_ref a;
16310   unsigned ix;
16311
16312   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
16313     if (AT_class (a) == dw_val_class_str)
16314       {
16315         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
16316         s->refcount++;
16317         /* Avoid unnecessarily putting strings that are used less than
16318            twice in the hash table.  */
16319         if (s->refcount
16320             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
16321           {
16322             void ** slot;
16323             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
16324                                              htab_hash_string (s->str),
16325                                              INSERT);
16326             gcc_assert (*slot == NULL);
16327             *slot = s;
16328           }
16329       }
16330 }
16331
16332 /* Remove from the tree DIE any dies that aren't marked.  */
16333
16334 static void
16335 prune_unused_types_prune (dw_die_ref die)
16336 {
16337   dw_die_ref c;
16338
16339   gcc_assert (die->die_mark);
16340   prune_unused_types_update_strings (die);
16341
16342   if (! die->die_child)
16343     return;
16344
16345   c = die->die_child;
16346   do {
16347     dw_die_ref prev = c;
16348     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
16349       if (c == die->die_child)
16350         {
16351           /* No marked children between 'prev' and the end of the list.  */
16352           if (prev == c)
16353             /* No marked children at all.  */
16354             die->die_child = NULL;
16355           else
16356             {
16357               prev->die_sib = c->die_sib;
16358               die->die_child = prev;
16359             }
16360           return;
16361         }
16362
16363     if (c != prev->die_sib)
16364       prev->die_sib = c;
16365     prune_unused_types_prune (c);
16366   } while (c != die->die_child);
16367 }
16368
16369
16370 /* Remove dies representing declarations that we never use.  */
16371
16372 static void
16373 prune_unused_types (void)
16374 {
16375   unsigned int i;
16376   limbo_die_node *node;
16377   pubname_ref pub;
16378
16379 #if ENABLE_ASSERT_CHECKING
16380   /* All the marks should already be clear.  */
16381   verify_marks_clear (comp_unit_die);
16382   for (node = limbo_die_list; node; node = node->next)
16383     verify_marks_clear (node->die);
16384 #endif /* ENABLE_ASSERT_CHECKING */
16385
16386   /* Set the mark on nodes that are actually used.  */
16387   prune_unused_types_walk (comp_unit_die);
16388   for (node = limbo_die_list; node; node = node->next)
16389     prune_unused_types_walk (node->die);
16390
16391   /* Also set the mark on nodes referenced from the
16392      pubname_table or arange_table.  */
16393   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
16394     prune_unused_types_mark (pub->die, 1);
16395   for (i = 0; i < arange_table_in_use; i++)
16396     prune_unused_types_mark (arange_table[i], 1);
16397
16398   /* Get rid of nodes that aren't marked; and update the string counts.  */
16399   if (debug_str_hash)
16400     htab_empty (debug_str_hash);
16401   prune_unused_types_prune (comp_unit_die);
16402   for (node = limbo_die_list; node; node = node->next)
16403     prune_unused_types_prune (node->die);
16404
16405   /* Leave the marks clear.  */
16406   prune_unmark_dies (comp_unit_die);
16407   for (node = limbo_die_list; node; node = node->next)
16408     prune_unmark_dies (node->die);
16409 }
16410
16411 /* Set the parameter to true if there are any relative pathnames in
16412    the file table.  */
16413 static int
16414 file_table_relative_p (void ** slot, void *param)
16415 {
16416   bool *p = (bool *) param;
16417   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
16418   if (!IS_ABSOLUTE_PATH (d->filename))
16419     {
16420       *p = true;
16421       return 0;
16422     }
16423   return 1;
16424 }
16425
16426 /* Output stuff that dwarf requires at the end of every file,
16427    and generate the DWARF-2 debugging info.  */
16428
16429 static void
16430 dwarf2out_finish (const char *filename)
16431 {
16432   limbo_die_node *node, *next_node;
16433   dw_die_ref die = 0;
16434   unsigned int i;
16435
16436   /* Add the name for the main input file now.  We delayed this from
16437      dwarf2out_init to avoid complications with PCH.  */
16438   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
16439   if (!IS_ABSOLUTE_PATH (filename))
16440     add_comp_dir_attribute (comp_unit_die);
16441   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
16442     {
16443       bool p = false;
16444       htab_traverse (file_table, file_table_relative_p, &p);
16445       if (p)
16446         add_comp_dir_attribute (comp_unit_die);
16447     }
16448
16449   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
16450     {
16451       add_location_or_const_value_attribute (
16452         VEC_index (deferred_locations, deferred_locations_list, i)->die,
16453         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
16454         DW_AT_location);
16455     }
16456
16457   /* Traverse the limbo die list, and add parent/child links.  The only
16458      dies without parents that should be here are concrete instances of
16459      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
16460      For concrete instances, we can get the parent die from the abstract
16461      instance.  */
16462   for (node = limbo_die_list; node; node = next_node)
16463     {
16464       next_node = node->next;
16465       die = node->die;
16466
16467       if (die->die_parent == NULL)
16468         {
16469           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
16470
16471           if (origin)
16472             add_child_die (origin->die_parent, die);
16473           else if (die == comp_unit_die)
16474             ;
16475           else if (errorcount > 0 || sorrycount > 0)
16476             /* It's OK to be confused by errors in the input.  */
16477             add_child_die (comp_unit_die, die);
16478           else
16479             {
16480               /* In certain situations, the lexical block containing a
16481                  nested function can be optimized away, which results
16482                  in the nested function die being orphaned.  Likewise
16483                  with the return type of that nested function.  Force
16484                  this to be a child of the containing function.
16485
16486                  It may happen that even the containing function got fully
16487                  inlined and optimized out.  In that case we are lost and
16488                  assign the empty child.  This should not be big issue as
16489                  the function is likely unreachable too.  */
16490               tree context = NULL_TREE;
16491
16492               gcc_assert (node->created_for);
16493
16494               if (DECL_P (node->created_for))
16495                 context = DECL_CONTEXT (node->created_for);
16496               else if (TYPE_P (node->created_for))
16497                 context = TYPE_CONTEXT (node->created_for);
16498
16499               gcc_assert (context
16500                           && (TREE_CODE (context) == FUNCTION_DECL
16501                               || TREE_CODE (context) == NAMESPACE_DECL));
16502
16503               origin = lookup_decl_die (context);
16504               if (origin)
16505                 add_child_die (origin, die);
16506               else
16507                 add_child_die (comp_unit_die, die);
16508             }
16509         }
16510     }
16511
16512   limbo_die_list = NULL;
16513
16514   /* Walk through the list of incomplete types again, trying once more to
16515      emit full debugging info for them.  */
16516   retry_incomplete_types ();
16517
16518   if (flag_eliminate_unused_debug_types)
16519     prune_unused_types ();
16520
16521   /* Generate separate CUs for each of the include files we've seen.
16522      They will go into limbo_die_list.  */
16523   if (flag_eliminate_dwarf2_dups)
16524     break_out_includes (comp_unit_die);
16525
16526   /* Traverse the DIE's and add add sibling attributes to those DIE's
16527      that have children.  */
16528   add_sibling_attributes (comp_unit_die);
16529   for (node = limbo_die_list; node; node = node->next)
16530     add_sibling_attributes (node->die);
16531
16532   /* Output a terminator label for the .text section.  */
16533   switch_to_section (text_section);
16534   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
16535   if (flag_reorder_blocks_and_partition)
16536     {
16537       switch_to_section (unlikely_text_section ());
16538       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
16539     }
16540
16541   /* We can only use the low/high_pc attributes if all of the code was
16542      in .text.  */
16543   if (!have_multiple_function_sections)
16544     {
16545       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
16546       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
16547     }
16548
16549   else
16550     {
16551       unsigned fde_idx = 0;
16552
16553       /* We need to give .debug_loc and .debug_ranges an appropriate
16554          "base address".  Use zero so that these addresses become
16555          absolute.  Historically, we've emitted the unexpected
16556          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
16557          Emit both to give time for other tools to adapt.  */
16558       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
16559       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
16560
16561       add_AT_range_list (comp_unit_die, DW_AT_ranges,
16562                          add_ranges_by_labels (text_section_label,
16563                                                text_end_label));
16564       if (flag_reorder_blocks_and_partition)
16565         add_ranges_by_labels (cold_text_section_label,
16566                               cold_end_label);
16567
16568       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
16569         {
16570           dw_fde_ref fde = &fde_table[fde_idx];
16571
16572           if (fde->dw_fde_switched_sections)
16573             {
16574               add_ranges_by_labels (fde->dw_fde_hot_section_label,
16575                                     fde->dw_fde_hot_section_end_label);
16576               add_ranges_by_labels (fde->dw_fde_unlikely_section_label,
16577                                     fde->dw_fde_unlikely_section_end_label);
16578             }
16579           else
16580             add_ranges_by_labels (fde->dw_fde_begin,
16581                                   fde->dw_fde_end);
16582         }
16583
16584       add_ranges (NULL);
16585     }
16586
16587   /* Output location list section if necessary.  */
16588   if (have_location_lists)
16589     {
16590       /* Output the location lists info.  */
16591       switch_to_section (debug_loc_section);
16592       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
16593                                    DEBUG_LOC_SECTION_LABEL, 0);
16594       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
16595       output_location_lists (die);
16596     }
16597
16598   if (debug_info_level >= DINFO_LEVEL_NORMAL)
16599     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
16600                     debug_line_section_label);
16601
16602   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16603     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
16604
16605   /* Output all of the compilation units.  We put the main one last so that
16606      the offsets are available to output_pubnames.  */
16607   for (node = limbo_die_list; node; node = node->next)
16608     output_comp_unit (node->die, 0);
16609
16610   /* Output the main compilation unit if non-empty or if .debug_macinfo
16611      has been emitted.  */
16612   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
16613
16614   /* Output the abbreviation table.  */
16615   switch_to_section (debug_abbrev_section);
16616   output_abbrev_section ();
16617
16618   /* Output public names table if necessary.  */
16619   if (!VEC_empty (pubname_entry, pubname_table))
16620     {
16621       switch_to_section (debug_pubnames_section);
16622       output_pubnames (pubname_table);
16623     }
16624
16625 #ifdef DEBUG_PUBTYPES_SECTION
16626   /* Output public types table if necessary.  */
16627   if (!VEC_empty (pubname_entry, pubtype_table))
16628     {
16629       switch_to_section (debug_pubtypes_section);
16630       output_pubnames (pubtype_table);
16631     }
16632 #endif
16633
16634   /* Output the address range information.  We only put functions in the arange
16635      table, so don't write it out if we don't have any.  */
16636   if (fde_table_in_use)
16637     {
16638       switch_to_section (debug_aranges_section);
16639       output_aranges ();
16640     }
16641
16642   /* Output ranges section if necessary.  */
16643   if (ranges_table_in_use)
16644     {
16645       switch_to_section (debug_ranges_section);
16646       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
16647       output_ranges ();
16648     }
16649
16650   /* Output the source line correspondence table.  We must do this
16651      even if there is no line information.  Otherwise, on an empty
16652      translation unit, we will generate a present, but empty,
16653      .debug_info section.  IRIX 6.5 `nm' will then complain when
16654      examining the file.  This is done late so that any filenames
16655      used by the debug_info section are marked as 'used'.  */
16656   if (! DWARF2_ASM_LINE_DEBUG_INFO)
16657     {
16658       switch_to_section (debug_line_section);
16659       output_line_info ();
16660     }
16661
16662   /* Have to end the macro section.  */
16663   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
16664     {
16665       switch_to_section (debug_macinfo_section);
16666       dw2_asm_output_data (1, 0, "End compilation unit");
16667     }
16668
16669   /* If we emitted any DW_FORM_strp form attribute, output the string
16670      table too.  */
16671   if (debug_str_hash)
16672     htab_traverse (debug_str_hash, output_indirect_string, NULL);
16673 }
16674 #else
16675
16676 /* This should never be used, but its address is needed for comparisons.  */
16677 const struct gcc_debug_hooks dwarf2_debug_hooks;
16678
16679 #endif /* DWARF2_DEBUGGING_INFO */
16680
16681 #include "gt-dwarf2out.h"