OSDN Git Service

* dwarf2out.c (AT_linkage_name): Define.
[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, 2010
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "real.h"
68 #include "rtl.h"
69 #include "hard-reg-set.h"
70 #include "regs.h"
71 #include "insn-config.h"
72 #include "reload.h"
73 #include "function.h"
74 #include "output.h"
75 #include "expr.h"
76 #include "libfuncs.h"
77 #include "except.h"
78 #include "dwarf2.h"
79 #include "dwarf2out.h"
80 #include "dwarf2asm.h"
81 #include "toplev.h"
82 #include "varray.h"
83 #include "ggc.h"
84 #include "md5.h"
85 #include "tm_p.h"
86 #include "diagnostic.h"
87 #include "debug.h"
88 #include "target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95
96 #ifdef DWARF2_DEBUGGING_INFO
97 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
98
99 static rtx last_var_location_insn;
100 #endif
101
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104
105 /* Define this macro to be a nonzero value if the directory specifications
106     which are output in the debug info should end with a separator.  */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109    from generating indirect strings in DWARF2 debug information, for instance
110    if your target is stuck with an old version of GDB that is unable to
111    process them properly or uses VMS Debug.  */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
117
118 #ifndef DWARF2_FRAME_INFO
119 # ifdef DWARF2_DEBUGGING_INFO
120 #  define DWARF2_FRAME_INFO \
121   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
122 # else
123 #  define DWARF2_FRAME_INFO 0
124 # endif
125 #endif
126
127 /* Map register numbers held in the call frame info that gcc has
128    collected using DWARF_FRAME_REGNUM to those that should be output in
129    .debug_frame and .eh_frame.  */
130 #ifndef DWARF2_FRAME_REG_OUT
131 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
132 #endif
133
134 /* Save the result of dwarf2out_do_frame across PCH.  */
135 static GTY(()) bool saved_do_cfi_asm = 0;
136
137 /* Decide whether we want to emit frame unwind information for the current
138    translation unit.  */
139
140 int
141 dwarf2out_do_frame (void)
142 {
143   /* We want to emit correct CFA location expressions or lists, so we
144      have to return true if we're going to output debug info, even if
145      we're not going to output frame or unwind info.  */
146   return (write_symbols == DWARF2_DEBUG
147           || write_symbols == VMS_AND_DWARF2_DEBUG
148           || DWARF2_FRAME_INFO || saved_do_cfi_asm
149 #ifdef DWARF2_UNWIND_INFO
150           || (DWARF2_UNWIND_INFO
151               && (flag_unwind_tables
152                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
153 #endif
154           );
155 }
156
157 /* Decide whether to emit frame unwind via assembler directives.  */
158
159 int
160 dwarf2out_do_cfi_asm (void)
161 {
162   int enc;
163
164 #ifdef MIPS_DEBUGGING_INFO
165   return false;
166 #endif
167   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
168     return false;
169   if (saved_do_cfi_asm)
170     return true;
171   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
172     return false;
173
174   /* Make sure the personality encoding is one the assembler can support.
175      In particular, aligned addresses can't be handled.  */
176   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
177   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
178     return false;
179   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
180   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
181     return false;
182
183   if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
184     {
185 #ifdef TARGET_UNWIND_INFO
186       return false;
187 #else
188       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
189         return false;
190 #endif
191     }
192
193   saved_do_cfi_asm = true;
194   return true;
195 }
196
197 /* The size of the target's pointer type.  */
198 #ifndef PTR_SIZE
199 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
200 #endif
201
202 /* Array of RTXes referenced by the debugging information, which therefore
203    must be kept around forever.  */
204 static GTY(()) VEC(rtx,gc) *used_rtx_array;
205
206 /* A pointer to the base of a list of incomplete types which might be
207    completed at some later time.  incomplete_types_list needs to be a
208    VEC(tree,gc) because we want to tell the garbage collector about
209    it.  */
210 static GTY(()) VEC(tree,gc) *incomplete_types;
211
212 /* A pointer to the base of a table of references to declaration
213    scopes.  This table is a display which tracks the nesting
214    of declaration scopes at the current scope and containing
215    scopes.  This table is used to find the proper place to
216    define type declaration DIE's.  */
217 static GTY(()) VEC(tree,gc) *decl_scope_table;
218
219 /* Pointers to various DWARF2 sections.  */
220 static GTY(()) section *debug_info_section;
221 static GTY(()) section *debug_abbrev_section;
222 static GTY(()) section *debug_aranges_section;
223 static GTY(()) section *debug_macinfo_section;
224 static GTY(()) section *debug_line_section;
225 static GTY(()) section *debug_loc_section;
226 static GTY(()) section *debug_pubnames_section;
227 static GTY(()) section *debug_pubtypes_section;
228 static GTY(()) section *debug_dcall_section;
229 static GTY(()) section *debug_vcall_section;
230 static GTY(()) section *debug_str_section;
231 static GTY(()) section *debug_ranges_section;
232 static GTY(()) section *debug_frame_section;
233
234 /* Personality decl of current unit.  Used only when assembler does not support
235    personality CFI.  */
236 static GTY(()) rtx current_unit_personality;
237
238 /* How to start an assembler comment.  */
239 #ifndef ASM_COMMENT_START
240 #define ASM_COMMENT_START ";#"
241 #endif
242
243 typedef struct dw_cfi_struct *dw_cfi_ref;
244 typedef struct dw_fde_struct *dw_fde_ref;
245 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
246
247 /* Call frames are described using a sequence of Call Frame
248    Information instructions.  The register number, offset
249    and address fields are provided as possible operands;
250    their use is selected by the opcode field.  */
251
252 enum dw_cfi_oprnd_type {
253   dw_cfi_oprnd_unused,
254   dw_cfi_oprnd_reg_num,
255   dw_cfi_oprnd_offset,
256   dw_cfi_oprnd_addr,
257   dw_cfi_oprnd_loc
258 };
259
260 typedef union GTY(()) dw_cfi_oprnd_struct {
261   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
262   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
263   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
264   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
265 }
266 dw_cfi_oprnd;
267
268 typedef struct GTY(()) dw_cfi_struct {
269   dw_cfi_ref dw_cfi_next;
270   enum dwarf_call_frame_info dw_cfi_opc;
271   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
272     dw_cfi_oprnd1;
273   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
274     dw_cfi_oprnd2;
275 }
276 dw_cfi_node;
277
278 /* This is how we define the location of the CFA. We use to handle it
279    as REG + OFFSET all the time,  but now it can be more complex.
280    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
281    Instead of passing around REG and OFFSET, we pass a copy
282    of this structure.  */
283 typedef struct GTY(()) cfa_loc {
284   HOST_WIDE_INT offset;
285   HOST_WIDE_INT base_offset;
286   unsigned int reg;
287   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
288   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
289 } dw_cfa_location;
290
291 /* All call frame descriptions (FDE's) in the GCC generated DWARF
292    refer to a single Common Information Entry (CIE), defined at
293    the beginning of the .debug_frame section.  This use of a single
294    CIE obviates the need to keep track of multiple CIE's
295    in the DWARF generation routines below.  */
296
297 typedef struct GTY(()) dw_fde_struct {
298   tree decl;
299   const char *dw_fde_begin;
300   const char *dw_fde_current_label;
301   const char *dw_fde_end;
302   const char *dw_fde_hot_section_label;
303   const char *dw_fde_hot_section_end_label;
304   const char *dw_fde_unlikely_section_label;
305   const char *dw_fde_unlikely_section_end_label;
306   dw_cfi_ref dw_fde_cfi;
307   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
308   unsigned funcdef_number;
309   HOST_WIDE_INT stack_realignment;
310   /* Dynamic realign argument pointer register.  */
311   unsigned int drap_reg;
312   /* Virtual dynamic realign argument pointer register.  */
313   unsigned int vdrap_reg;
314   unsigned all_throwers_are_sibcalls : 1;
315   unsigned nothrow : 1;
316   unsigned uses_eh_lsda : 1;
317   /* Whether we did stack realign in this call frame.  */
318   unsigned stack_realign : 1;
319   /* Whether dynamic realign argument pointer register has been saved.  */
320   unsigned drap_reg_saved: 1;
321   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
322   unsigned in_std_section : 1;
323   /* True iff dw_fde_unlikely_section_label is in text_section or
324      cold_text_section.  */
325   unsigned cold_in_std_section : 1;
326   /* True iff switched sections.  */
327   unsigned dw_fde_switched_sections : 1;
328   /* True iff switching from cold to hot section.  */
329   unsigned dw_fde_switched_cold_to_hot : 1;
330 }
331 dw_fde_node;
332
333 /* Maximum size (in bytes) of an artificially generated label.  */
334 #define MAX_ARTIFICIAL_LABEL_BYTES      30
335
336 /* The size of addresses as they appear in the Dwarf 2 data.
337    Some architectures use word addresses to refer to code locations,
338    but Dwarf 2 info always uses byte addresses.  On such machines,
339    Dwarf 2 addresses need to be larger than the architecture's
340    pointers.  */
341 #ifndef DWARF2_ADDR_SIZE
342 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
343 #endif
344
345 /* The size in bytes of a DWARF field indicating an offset or length
346    relative to a debug info section, specified to be 4 bytes in the
347    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
348    as PTR_SIZE.  */
349
350 #ifndef DWARF_OFFSET_SIZE
351 #define DWARF_OFFSET_SIZE 4
352 #endif
353
354 /* The size in bytes of a DWARF 4 type signature.  */
355
356 #ifndef DWARF_TYPE_SIGNATURE_SIZE
357 #define DWARF_TYPE_SIGNATURE_SIZE 8
358 #endif
359
360 /* According to the (draft) DWARF 3 specification, the initial length
361    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
362    bytes are 0xffffffff, followed by the length stored in the next 8
363    bytes.
364
365    However, the SGI/MIPS ABI uses an initial length which is equal to
366    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
367
368 #ifndef DWARF_INITIAL_LENGTH_SIZE
369 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
370 #endif
371
372 /* Round SIZE up to the nearest BOUNDARY.  */
373 #define DWARF_ROUND(SIZE,BOUNDARY) \
374   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
375
376 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
377 #ifndef DWARF_CIE_DATA_ALIGNMENT
378 #ifdef STACK_GROWS_DOWNWARD
379 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
380 #else
381 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
382 #endif
383 #endif
384
385 /* CIE identifier.  */
386 #if HOST_BITS_PER_WIDE_INT >= 64
387 #define DWARF_CIE_ID \
388   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
389 #else
390 #define DWARF_CIE_ID DW_CIE_ID
391 #endif
392
393 /* A pointer to the base of a table that contains frame description
394    information for each routine.  */
395 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
396
397 /* Number of elements currently allocated for fde_table.  */
398 static GTY(()) unsigned fde_table_allocated;
399
400 /* Number of elements in fde_table currently in use.  */
401 static GTY(()) unsigned fde_table_in_use;
402
403 /* Size (in elements) of increments by which we may expand the
404    fde_table.  */
405 #define FDE_TABLE_INCREMENT 256
406
407 /* Get the current fde_table entry we should use.  */
408
409 static inline dw_fde_ref
410 current_fde (void)
411 {
412   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
413 }
414
415 /* A list of call frame insns for the CIE.  */
416 static GTY(()) dw_cfi_ref cie_cfi_head;
417
418 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
419 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
420    attribute that accelerates the lookup of the FDE associated
421    with the subprogram.  This variable holds the table index of the FDE
422    associated with the current function (body) definition.  */
423 static unsigned current_funcdef_fde;
424 #endif
425
426 struct GTY(()) indirect_string_node {
427   const char *str;
428   unsigned int refcount;
429   enum dwarf_form form;
430   char *label;
431 };
432
433 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
434
435 /* True if the compilation unit has location entries that reference
436    debug strings.  */
437 static GTY(()) bool debug_str_hash_forced = false;
438
439 static GTY(()) int dw2_string_counter;
440 static GTY(()) unsigned long dwarf2out_cfi_label_num;
441
442 /* True if the compilation unit places functions in more than one section.  */
443 static GTY(()) bool have_multiple_function_sections = false;
444
445 /* Whether the default text and cold text sections have been used at all.  */
446
447 static GTY(()) bool text_section_used = false;
448 static GTY(()) bool cold_text_section_used = false;
449
450 /* The default cold text section.  */
451 static GTY(()) section *cold_text_section;
452
453 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
454
455 /* Forward declarations for functions defined in this file.  */
456
457 static char *stripattributes (const char *);
458 static const char *dwarf_cfi_name (unsigned);
459 static dw_cfi_ref new_cfi (void);
460 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
461 static void add_fde_cfi (const char *, dw_cfi_ref);
462 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
463 static void lookup_cfa (dw_cfa_location *);
464 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
465 #ifdef DWARF2_UNWIND_INFO
466 static void initial_return_save (rtx);
467 #endif
468 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
469                                           HOST_WIDE_INT);
470 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
471 static void output_cfi_directive (dw_cfi_ref);
472 static void output_call_frame_info (int);
473 static void dwarf2out_note_section_used (void);
474 static void flush_queued_reg_saves (void);
475 static bool clobbers_queued_reg_save (const_rtx);
476 static void dwarf2out_frame_debug_expr (rtx, const char *);
477
478 /* Support for complex CFA locations.  */
479 static void output_cfa_loc (dw_cfi_ref);
480 static void output_cfa_loc_raw (dw_cfi_ref);
481 static void get_cfa_from_loc_descr (dw_cfa_location *,
482                                     struct dw_loc_descr_struct *);
483 static struct dw_loc_descr_struct *build_cfa_loc
484   (dw_cfa_location *, HOST_WIDE_INT);
485 static struct dw_loc_descr_struct *build_cfa_aligned_loc
486   (HOST_WIDE_INT, HOST_WIDE_INT);
487 static void def_cfa_1 (const char *, dw_cfa_location *);
488
489 /* How to start an assembler comment.  */
490 #ifndef ASM_COMMENT_START
491 #define ASM_COMMENT_START ";#"
492 #endif
493
494 /* Data and reference forms for relocatable data.  */
495 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
496 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
497
498 #ifndef DEBUG_FRAME_SECTION
499 #define DEBUG_FRAME_SECTION     ".debug_frame"
500 #endif
501
502 #ifndef FUNC_BEGIN_LABEL
503 #define FUNC_BEGIN_LABEL        "LFB"
504 #endif
505
506 #ifndef FUNC_END_LABEL
507 #define FUNC_END_LABEL          "LFE"
508 #endif
509
510 #ifndef FRAME_BEGIN_LABEL
511 #define FRAME_BEGIN_LABEL       "Lframe"
512 #endif
513 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
514 #define CIE_END_LABEL           "LECIE"
515 #define FDE_LABEL               "LSFDE"
516 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
517 #define FDE_END_LABEL           "LEFDE"
518 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
519 #define LINE_NUMBER_END_LABEL   "LELT"
520 #define LN_PROLOG_AS_LABEL      "LASLTP"
521 #define LN_PROLOG_END_LABEL     "LELTP"
522 #define DIE_LABEL_PREFIX        "DW"
523
524 /* The DWARF 2 CFA column which tracks the return address.  Normally this
525    is the column for PC, or the first column after all of the hard
526    registers.  */
527 #ifndef DWARF_FRAME_RETURN_COLUMN
528 #ifdef PC_REGNUM
529 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
530 #else
531 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
532 #endif
533 #endif
534
535 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
536    default, we just provide columns for all registers.  */
537 #ifndef DWARF_FRAME_REGNUM
538 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
539 #endif
540 \f
541 /* Hook used by __throw.  */
542
543 rtx
544 expand_builtin_dwarf_sp_column (void)
545 {
546   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
547   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
548 }
549
550 /* Return a pointer to a copy of the section string name S with all
551    attributes stripped off, and an asterisk prepended (for assemble_name).  */
552
553 static inline char *
554 stripattributes (const char *s)
555 {
556   char *stripped = XNEWVEC (char, strlen (s) + 2);
557   char *p = stripped;
558
559   *p++ = '*';
560
561   while (*s && *s != ',')
562     *p++ = *s++;
563
564   *p = '\0';
565   return stripped;
566 }
567
568 /* MEM is a memory reference for the register size table, each element of
569    which has mode MODE.  Initialize column C as a return address column.  */
570
571 static void
572 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
573 {
574   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
575   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
576   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
577 }
578
579 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
580
581 static inline HOST_WIDE_INT
582 div_data_align (HOST_WIDE_INT off)
583 {
584   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
585   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
586   return r;
587 }
588
589 /* Return true if we need a signed version of a given opcode
590    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
591
592 static inline bool
593 need_data_align_sf_opcode (HOST_WIDE_INT off)
594 {
595   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
596 }
597
598 /* Generate code to initialize the register size table.  */
599
600 void
601 expand_builtin_init_dwarf_reg_sizes (tree address)
602 {
603   unsigned int i;
604   enum machine_mode mode = TYPE_MODE (char_type_node);
605   rtx addr = expand_normal (address);
606   rtx mem = gen_rtx_MEM (BLKmode, addr);
607   bool wrote_return_column = false;
608
609   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
610     {
611       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
612
613       if (rnum < DWARF_FRAME_REGISTERS)
614         {
615           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
616           enum machine_mode save_mode = reg_raw_mode[i];
617           HOST_WIDE_INT size;
618
619           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
620             save_mode = choose_hard_reg_mode (i, 1, true);
621           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
622             {
623               if (save_mode == VOIDmode)
624                 continue;
625               wrote_return_column = true;
626             }
627           size = GET_MODE_SIZE (save_mode);
628           if (offset < 0)
629             continue;
630
631           emit_move_insn (adjust_address (mem, mode, offset),
632                           gen_int_mode (size, mode));
633         }
634     }
635
636   if (!wrote_return_column)
637     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
638
639 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
640   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
641 #endif
642
643   targetm.init_dwarf_reg_sizes_extra (address);
644 }
645
646 /* Convert a DWARF call frame info. operation to its string name */
647
648 static const char *
649 dwarf_cfi_name (unsigned int cfi_opc)
650 {
651   switch (cfi_opc)
652     {
653     case DW_CFA_advance_loc:
654       return "DW_CFA_advance_loc";
655     case DW_CFA_offset:
656       return "DW_CFA_offset";
657     case DW_CFA_restore:
658       return "DW_CFA_restore";
659     case DW_CFA_nop:
660       return "DW_CFA_nop";
661     case DW_CFA_set_loc:
662       return "DW_CFA_set_loc";
663     case DW_CFA_advance_loc1:
664       return "DW_CFA_advance_loc1";
665     case DW_CFA_advance_loc2:
666       return "DW_CFA_advance_loc2";
667     case DW_CFA_advance_loc4:
668       return "DW_CFA_advance_loc4";
669     case DW_CFA_offset_extended:
670       return "DW_CFA_offset_extended";
671     case DW_CFA_restore_extended:
672       return "DW_CFA_restore_extended";
673     case DW_CFA_undefined:
674       return "DW_CFA_undefined";
675     case DW_CFA_same_value:
676       return "DW_CFA_same_value";
677     case DW_CFA_register:
678       return "DW_CFA_register";
679     case DW_CFA_remember_state:
680       return "DW_CFA_remember_state";
681     case DW_CFA_restore_state:
682       return "DW_CFA_restore_state";
683     case DW_CFA_def_cfa:
684       return "DW_CFA_def_cfa";
685     case DW_CFA_def_cfa_register:
686       return "DW_CFA_def_cfa_register";
687     case DW_CFA_def_cfa_offset:
688       return "DW_CFA_def_cfa_offset";
689
690     /* DWARF 3 */
691     case DW_CFA_def_cfa_expression:
692       return "DW_CFA_def_cfa_expression";
693     case DW_CFA_expression:
694       return "DW_CFA_expression";
695     case DW_CFA_offset_extended_sf:
696       return "DW_CFA_offset_extended_sf";
697     case DW_CFA_def_cfa_sf:
698       return "DW_CFA_def_cfa_sf";
699     case DW_CFA_def_cfa_offset_sf:
700       return "DW_CFA_def_cfa_offset_sf";
701
702     /* SGI/MIPS specific */
703     case DW_CFA_MIPS_advance_loc8:
704       return "DW_CFA_MIPS_advance_loc8";
705
706     /* GNU extensions */
707     case DW_CFA_GNU_window_save:
708       return "DW_CFA_GNU_window_save";
709     case DW_CFA_GNU_args_size:
710       return "DW_CFA_GNU_args_size";
711     case DW_CFA_GNU_negative_offset_extended:
712       return "DW_CFA_GNU_negative_offset_extended";
713
714     default:
715       return "DW_CFA_<unknown>";
716     }
717 }
718
719 /* Return a pointer to a newly allocated Call Frame Instruction.  */
720
721 static inline dw_cfi_ref
722 new_cfi (void)
723 {
724   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
725
726   cfi->dw_cfi_next = NULL;
727   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
728   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
729
730   return cfi;
731 }
732
733 /* Add a Call Frame Instruction to list of instructions.  */
734
735 static inline void
736 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
737 {
738   dw_cfi_ref *p;
739   dw_fde_ref fde = current_fde ();
740
741   /* When DRAP is used, CFA is defined with an expression.  Redefine
742      CFA may lead to a different CFA value.   */
743   /* ??? Of course, this heuristic fails when we're annotating epilogues,
744      because of course we'll always want to redefine the CFA back to the
745      stack pointer on the way out.  Where should we move this check?  */
746   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
747     switch (cfi->dw_cfi_opc)
748       {
749         case DW_CFA_def_cfa_register:
750         case DW_CFA_def_cfa_offset:
751         case DW_CFA_def_cfa_offset_sf:
752         case DW_CFA_def_cfa:
753         case DW_CFA_def_cfa_sf:
754           gcc_unreachable ();
755
756         default:
757           break;
758       }
759
760   /* Find the end of the chain.  */
761   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
762     ;
763
764   *p = cfi;
765 }
766
767 /* Generate a new label for the CFI info to refer to.  FORCE is true
768    if a label needs to be output even when using .cfi_* directives.  */
769
770 char *
771 dwarf2out_cfi_label (bool force)
772 {
773   static char label[20];
774
775   if (!force && dwarf2out_do_cfi_asm ())
776     {
777       /* In this case, we will be emitting the asm directive instead of
778          the label, so just return a placeholder to keep the rest of the
779          interfaces happy.  */
780       strcpy (label, "<do not output>");
781     }
782   else
783     {
784       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
785       ASM_OUTPUT_LABEL (asm_out_file, label);
786     }
787
788   return label;
789 }
790
791 /* True if remember_state should be emitted before following CFI directive.  */
792 static bool emit_cfa_remember;
793
794 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
795    or to the CIE if LABEL is NULL.  */
796
797 static void
798 add_fde_cfi (const char *label, dw_cfi_ref cfi)
799 {
800   dw_cfi_ref *list_head;
801
802   if (emit_cfa_remember)
803     {
804       dw_cfi_ref cfi_remember;
805
806       /* Emit the state save.  */
807       emit_cfa_remember = false;
808       cfi_remember = new_cfi ();
809       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
810       add_fde_cfi (label, cfi_remember);
811     }
812
813   list_head = &cie_cfi_head;
814
815   if (dwarf2out_do_cfi_asm ())
816     {
817       if (label)
818         {
819           dw_fde_ref fde = current_fde ();
820
821           gcc_assert (fde != NULL);
822
823           /* We still have to add the cfi to the list so that lookup_cfa
824              works later on.  When -g2 and above we even need to force
825              emitting of CFI labels and add to list a DW_CFA_set_loc for
826              convert_cfa_to_fb_loc_list purposes.  If we're generating
827              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
828              convert_cfa_to_fb_loc_list.  */
829           if (dwarf_version == 2
830               && debug_info_level > DINFO_LEVEL_TERSE
831               && (write_symbols == DWARF2_DEBUG
832                   || write_symbols == VMS_AND_DWARF2_DEBUG))
833             {
834               switch (cfi->dw_cfi_opc)
835                 {
836                 case DW_CFA_def_cfa_offset:
837                 case DW_CFA_def_cfa_offset_sf:
838                 case DW_CFA_def_cfa_register:
839                 case DW_CFA_def_cfa:
840                 case DW_CFA_def_cfa_sf:
841                 case DW_CFA_def_cfa_expression:
842                 case DW_CFA_restore_state:
843                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
844                     label = dwarf2out_cfi_label (true);
845
846                   if (fde->dw_fde_current_label == NULL
847                       || strcmp (label, fde->dw_fde_current_label) != 0)
848                     {
849                       dw_cfi_ref xcfi;
850
851                       label = xstrdup (label);
852
853                       /* Set the location counter to the new label.  */
854                       xcfi = new_cfi ();
855                       /* It doesn't metter whether DW_CFA_set_loc
856                          or DW_CFA_advance_loc4 is added here, those aren't
857                          emitted into assembly, only looked up by
858                          convert_cfa_to_fb_loc_list.  */
859                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
860                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
861                       add_cfi (&fde->dw_fde_cfi, xcfi);
862                       fde->dw_fde_current_label = label;
863                     }
864                   break;
865                 default:
866                   break;
867                 }
868             }
869
870           output_cfi_directive (cfi);
871
872           list_head = &fde->dw_fde_cfi;
873         }
874       /* ??? If this is a CFI for the CIE, we don't emit.  This
875          assumes that the standard CIE contents that the assembler
876          uses matches the standard CIE contents that the compiler
877          uses.  This is probably a bad assumption.  I'm not quite
878          sure how to address this for now.  */
879     }
880   else if (label)
881     {
882       dw_fde_ref fde = current_fde ();
883
884       gcc_assert (fde != NULL);
885
886       if (*label == 0)
887         label = dwarf2out_cfi_label (false);
888
889       if (fde->dw_fde_current_label == NULL
890           || strcmp (label, fde->dw_fde_current_label) != 0)
891         {
892           dw_cfi_ref xcfi;
893
894           label = xstrdup (label);
895
896           /* Set the location counter to the new label.  */
897           xcfi = new_cfi ();
898           /* If we have a current label, advance from there, otherwise
899              set the location directly using set_loc.  */
900           xcfi->dw_cfi_opc = fde->dw_fde_current_label
901                              ? DW_CFA_advance_loc4
902                              : DW_CFA_set_loc;
903           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
904           add_cfi (&fde->dw_fde_cfi, xcfi);
905
906           fde->dw_fde_current_label = label;
907         }
908
909       list_head = &fde->dw_fde_cfi;
910     }
911
912   add_cfi (list_head, cfi);
913 }
914
915 /* Subroutine of lookup_cfa.  */
916
917 static void
918 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
919 {
920   switch (cfi->dw_cfi_opc)
921     {
922     case DW_CFA_def_cfa_offset:
923     case DW_CFA_def_cfa_offset_sf:
924       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
925       break;
926     case DW_CFA_def_cfa_register:
927       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
928       break;
929     case DW_CFA_def_cfa:
930     case DW_CFA_def_cfa_sf:
931       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
932       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
933       break;
934     case DW_CFA_def_cfa_expression:
935       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
936       break;
937
938     case DW_CFA_remember_state:
939       gcc_assert (!remember->in_use);
940       *remember = *loc;
941       remember->in_use = 1;
942       break;
943     case DW_CFA_restore_state:
944       gcc_assert (remember->in_use);
945       *loc = *remember;
946       remember->in_use = 0;
947       break;
948
949     default:
950       break;
951     }
952 }
953
954 /* Find the previous value for the CFA.  */
955
956 static void
957 lookup_cfa (dw_cfa_location *loc)
958 {
959   dw_cfi_ref cfi;
960   dw_fde_ref fde;
961   dw_cfa_location remember;
962
963   memset (loc, 0, sizeof (*loc));
964   loc->reg = INVALID_REGNUM;
965   remember = *loc;
966
967   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
968     lookup_cfa_1 (cfi, loc, &remember);
969
970   fde = current_fde ();
971   if (fde)
972     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
973       lookup_cfa_1 (cfi, loc, &remember);
974 }
975
976 /* The current rule for calculating the DWARF2 canonical frame address.  */
977 static dw_cfa_location cfa;
978
979 /* The register used for saving registers to the stack, and its offset
980    from the CFA.  */
981 static dw_cfa_location cfa_store;
982
983 /* The current save location around an epilogue.  */
984 static dw_cfa_location cfa_remember;
985
986 /* The running total of the size of arguments pushed onto the stack.  */
987 static HOST_WIDE_INT args_size;
988
989 /* The last args_size we actually output.  */
990 static HOST_WIDE_INT old_args_size;
991
992 /* Entry point to update the canonical frame address (CFA).
993    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
994    calculated from REG+OFFSET.  */
995
996 void
997 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
998 {
999   dw_cfa_location loc;
1000   loc.indirect = 0;
1001   loc.base_offset = 0;
1002   loc.reg = reg;
1003   loc.offset = offset;
1004   def_cfa_1 (label, &loc);
1005 }
1006
1007 /* Determine if two dw_cfa_location structures define the same data.  */
1008
1009 static bool
1010 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1011 {
1012   return (loc1->reg == loc2->reg
1013           && loc1->offset == loc2->offset
1014           && loc1->indirect == loc2->indirect
1015           && (loc1->indirect == 0
1016               || loc1->base_offset == loc2->base_offset));
1017 }
1018
1019 /* This routine does the actual work.  The CFA is now calculated from
1020    the dw_cfa_location structure.  */
1021
1022 static void
1023 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1024 {
1025   dw_cfi_ref cfi;
1026   dw_cfa_location old_cfa, loc;
1027
1028   cfa = *loc_p;
1029   loc = *loc_p;
1030
1031   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1032     cfa_store.offset = loc.offset;
1033
1034   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1035   lookup_cfa (&old_cfa);
1036
1037   /* If nothing changed, no need to issue any call frame instructions.  */
1038   if (cfa_equal_p (&loc, &old_cfa))
1039     return;
1040
1041   cfi = new_cfi ();
1042
1043   if (loc.reg == old_cfa.reg && !loc.indirect)
1044     {
1045       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1046          the CFA register did not change but the offset did.  The data
1047          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1048          in the assembler via the .cfi_def_cfa_offset directive.  */
1049       if (loc.offset < 0)
1050         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1051       else
1052         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1053       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1054     }
1055
1056 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1057   else if (loc.offset == old_cfa.offset
1058            && old_cfa.reg != INVALID_REGNUM
1059            && !loc.indirect)
1060     {
1061       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1062          indicating the CFA register has changed to <register> but the
1063          offset has not changed.  */
1064       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1065       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1066     }
1067 #endif
1068
1069   else if (loc.indirect == 0)
1070     {
1071       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1072          indicating the CFA register has changed to <register> with
1073          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1074          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1075          directive.  */
1076       if (loc.offset < 0)
1077         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1078       else
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1080       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1081       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1082     }
1083   else
1084     {
1085       /* Construct a DW_CFA_def_cfa_expression instruction to
1086          calculate the CFA using a full location expression since no
1087          register-offset pair is available.  */
1088       struct dw_loc_descr_struct *loc_list;
1089
1090       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1091       loc_list = build_cfa_loc (&loc, 0);
1092       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1093     }
1094
1095   add_fde_cfi (label, cfi);
1096 }
1097
1098 /* Add the CFI for saving a register.  REG is the CFA column number.
1099    LABEL is passed to add_fde_cfi.
1100    If SREG is -1, the register is saved at OFFSET from the CFA;
1101    otherwise it is saved in SREG.  */
1102
1103 static void
1104 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1105 {
1106   dw_cfi_ref cfi = new_cfi ();
1107   dw_fde_ref fde = current_fde ();
1108
1109   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1110
1111   /* When stack is aligned, store REG using DW_CFA_expression with
1112      FP.  */
1113   if (fde
1114       && fde->stack_realign
1115       && sreg == INVALID_REGNUM)
1116     {
1117       cfi->dw_cfi_opc = DW_CFA_expression;
1118       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1119       cfi->dw_cfi_oprnd2.dw_cfi_loc
1120         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1121     }
1122   else if (sreg == INVALID_REGNUM)
1123     {
1124       if (need_data_align_sf_opcode (offset))
1125         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1126       else if (reg & ~0x3f)
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1128       else
1129         cfi->dw_cfi_opc = DW_CFA_offset;
1130       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1131     }
1132   else if (sreg == reg)
1133     cfi->dw_cfi_opc = DW_CFA_same_value;
1134   else
1135     {
1136       cfi->dw_cfi_opc = DW_CFA_register;
1137       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1138     }
1139
1140   add_fde_cfi (label, cfi);
1141 }
1142
1143 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1144    This CFI tells the unwinder that it needs to restore the window registers
1145    from the previous frame's window save area.
1146
1147    ??? Perhaps we should note in the CIE where windows are saved (instead of
1148    assuming 0(cfa)) and what registers are in the window.  */
1149
1150 void
1151 dwarf2out_window_save (const char *label)
1152 {
1153   dw_cfi_ref cfi = new_cfi ();
1154
1155   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1156   add_fde_cfi (label, cfi);
1157 }
1158
1159 /* Entry point for saving a register to the stack.  REG is the GCC register
1160    number.  LABEL and OFFSET are passed to reg_save.  */
1161
1162 void
1163 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1164 {
1165   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1166 }
1167
1168 /* Entry point for saving the return address in the stack.
1169    LABEL and OFFSET are passed to reg_save.  */
1170
1171 void
1172 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1173 {
1174   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1175 }
1176
1177 /* Entry point for saving the return address in a register.
1178    LABEL and SREG are passed to reg_save.  */
1179
1180 void
1181 dwarf2out_return_reg (const char *label, unsigned int sreg)
1182 {
1183   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1184 }
1185
1186 #ifdef DWARF2_UNWIND_INFO
1187 /* Record the initial position of the return address.  RTL is
1188    INCOMING_RETURN_ADDR_RTX.  */
1189
1190 static void
1191 initial_return_save (rtx rtl)
1192 {
1193   unsigned int reg = INVALID_REGNUM;
1194   HOST_WIDE_INT offset = 0;
1195
1196   switch (GET_CODE (rtl))
1197     {
1198     case REG:
1199       /* RA is in a register.  */
1200       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1201       break;
1202
1203     case MEM:
1204       /* RA is on the stack.  */
1205       rtl = XEXP (rtl, 0);
1206       switch (GET_CODE (rtl))
1207         {
1208         case REG:
1209           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1210           offset = 0;
1211           break;
1212
1213         case PLUS:
1214           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1215           offset = INTVAL (XEXP (rtl, 1));
1216           break;
1217
1218         case MINUS:
1219           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1220           offset = -INTVAL (XEXP (rtl, 1));
1221           break;
1222
1223         default:
1224           gcc_unreachable ();
1225         }
1226
1227       break;
1228
1229     case PLUS:
1230       /* The return address is at some offset from any value we can
1231          actually load.  For instance, on the SPARC it is in %i7+8. Just
1232          ignore the offset for now; it doesn't matter for unwinding frames.  */
1233       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1234       initial_return_save (XEXP (rtl, 0));
1235       return;
1236
1237     default:
1238       gcc_unreachable ();
1239     }
1240
1241   if (reg != DWARF_FRAME_RETURN_COLUMN)
1242     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1243 }
1244 #endif
1245
1246 /* Given a SET, calculate the amount of stack adjustment it
1247    contains.  */
1248
1249 static HOST_WIDE_INT
1250 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1251                      HOST_WIDE_INT cur_offset)
1252 {
1253   const_rtx src = SET_SRC (pattern);
1254   const_rtx dest = SET_DEST (pattern);
1255   HOST_WIDE_INT offset = 0;
1256   enum rtx_code code;
1257
1258   if (dest == stack_pointer_rtx)
1259     {
1260       code = GET_CODE (src);
1261
1262       /* Assume (set (reg sp) (reg whatever)) sets args_size
1263          level to 0.  */
1264       if (code == REG && src != stack_pointer_rtx)
1265         {
1266           offset = -cur_args_size;
1267 #ifndef STACK_GROWS_DOWNWARD
1268           offset = -offset;
1269 #endif
1270           return offset - cur_offset;
1271         }
1272
1273       if (! (code == PLUS || code == MINUS)
1274           || XEXP (src, 0) != stack_pointer_rtx
1275           || !CONST_INT_P (XEXP (src, 1)))
1276         return 0;
1277
1278       /* (set (reg sp) (plus (reg sp) (const_int))) */
1279       offset = INTVAL (XEXP (src, 1));
1280       if (code == PLUS)
1281         offset = -offset;
1282       return offset;
1283     }
1284
1285   if (MEM_P (src) && !MEM_P (dest))
1286     dest = src;
1287   if (MEM_P (dest))
1288     {
1289       /* (set (mem (pre_dec (reg sp))) (foo)) */
1290       src = XEXP (dest, 0);
1291       code = GET_CODE (src);
1292
1293       switch (code)
1294         {
1295         case PRE_MODIFY:
1296         case POST_MODIFY:
1297           if (XEXP (src, 0) == stack_pointer_rtx)
1298             {
1299               rtx val = XEXP (XEXP (src, 1), 1);
1300               /* We handle only adjustments by constant amount.  */
1301               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1302                           && CONST_INT_P (val));
1303               offset = -INTVAL (val);
1304               break;
1305             }
1306           return 0;
1307
1308         case PRE_DEC:
1309         case POST_DEC:
1310           if (XEXP (src, 0) == stack_pointer_rtx)
1311             {
1312               offset = GET_MODE_SIZE (GET_MODE (dest));
1313               break;
1314             }
1315           return 0;
1316
1317         case PRE_INC:
1318         case POST_INC:
1319           if (XEXP (src, 0) == stack_pointer_rtx)
1320             {
1321               offset = -GET_MODE_SIZE (GET_MODE (dest));
1322               break;
1323             }
1324           return 0;
1325
1326         default:
1327           return 0;
1328         }
1329     }
1330   else
1331     return 0;
1332
1333   return offset;
1334 }
1335
1336 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1337    indexed by INSN_UID.  */
1338
1339 static HOST_WIDE_INT *barrier_args_size;
1340
1341 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1342
1343 static HOST_WIDE_INT
1344 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1345                              VEC (rtx, heap) **next)
1346 {
1347   HOST_WIDE_INT offset = 0;
1348   int i;
1349
1350   if (! RTX_FRAME_RELATED_P (insn))
1351     {
1352       if (prologue_epilogue_contains (insn))
1353         /* Nothing */;
1354       else if (GET_CODE (PATTERN (insn)) == SET)
1355         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1356       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1357                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1358         {
1359           /* There may be stack adjustments inside compound insns.  Search
1360              for them.  */
1361           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1362             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1363               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1364                                              cur_args_size, offset);
1365         }
1366     }
1367   else
1368     {
1369       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1370
1371       if (expr)
1372         {
1373           expr = XEXP (expr, 0);
1374           if (GET_CODE (expr) == PARALLEL
1375               || GET_CODE (expr) == SEQUENCE)
1376             for (i = 1; i < XVECLEN (expr, 0); i++)
1377               {
1378                 rtx elem = XVECEXP (expr, 0, i);
1379
1380                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1381                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1382               }
1383         }
1384     }
1385
1386 #ifndef STACK_GROWS_DOWNWARD
1387   offset = -offset;
1388 #endif
1389
1390   cur_args_size += offset;
1391   if (cur_args_size < 0)
1392     cur_args_size = 0;
1393
1394   if (JUMP_P (insn))
1395     {
1396       rtx dest = JUMP_LABEL (insn);
1397
1398       if (dest)
1399         {
1400           if (barrier_args_size [INSN_UID (dest)] < 0)
1401             {
1402               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1403               VEC_safe_push (rtx, heap, *next, dest);
1404             }
1405         }
1406     }
1407
1408   return cur_args_size;
1409 }
1410
1411 /* Walk the whole function and compute args_size on BARRIERs.  */
1412
1413 static void
1414 compute_barrier_args_size (void)
1415 {
1416   int max_uid = get_max_uid (), i;
1417   rtx insn;
1418   VEC (rtx, heap) *worklist, *next, *tmp;
1419
1420   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1421   for (i = 0; i < max_uid; i++)
1422     barrier_args_size[i] = -1;
1423
1424   worklist = VEC_alloc (rtx, heap, 20);
1425   next = VEC_alloc (rtx, heap, 20);
1426   insn = get_insns ();
1427   barrier_args_size[INSN_UID (insn)] = 0;
1428   VEC_quick_push (rtx, worklist, insn);
1429   for (;;)
1430     {
1431       while (!VEC_empty (rtx, worklist))
1432         {
1433           rtx prev, body, first_insn;
1434           HOST_WIDE_INT cur_args_size;
1435
1436           first_insn = insn = VEC_pop (rtx, worklist);
1437           cur_args_size = barrier_args_size[INSN_UID (insn)];
1438           prev = prev_nonnote_insn (insn);
1439           if (prev && BARRIER_P (prev))
1440             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1441
1442           for (; insn; insn = NEXT_INSN (insn))
1443             {
1444               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1445                 continue;
1446               if (BARRIER_P (insn))
1447                 break;
1448
1449               if (LABEL_P (insn))
1450                 {
1451                   if (insn == first_insn)
1452                     continue;
1453                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1454                     {
1455                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1456                       continue;
1457                     }
1458                   else
1459                     {
1460                       /* The insns starting with this label have been
1461                          already scanned or are in the worklist.  */
1462                       break;
1463                     }
1464                 }
1465
1466               body = PATTERN (insn);
1467               if (GET_CODE (body) == SEQUENCE)
1468                 {
1469                   HOST_WIDE_INT dest_args_size = cur_args_size;
1470                   for (i = 1; i < XVECLEN (body, 0); i++)
1471                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1472                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1473                       dest_args_size
1474                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1475                                                        dest_args_size, &next);
1476                     else
1477                       cur_args_size
1478                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1479                                                        cur_args_size, &next);
1480
1481                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1482                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1483                                                  dest_args_size, &next);
1484                   else
1485                     cur_args_size
1486                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1487                                                      cur_args_size, &next);
1488                 }
1489               else
1490                 cur_args_size
1491                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1492             }
1493         }
1494
1495       if (VEC_empty (rtx, next))
1496         break;
1497
1498       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1499       tmp = next;
1500       next = worklist;
1501       worklist = tmp;
1502       VEC_truncate (rtx, next, 0);
1503     }
1504
1505   VEC_free (rtx, heap, worklist);
1506   VEC_free (rtx, heap, next);
1507 }
1508
1509 /* Add a CFI to update the running total of the size of arguments
1510    pushed onto the stack.  */
1511
1512 static void
1513 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1514 {
1515   dw_cfi_ref cfi;
1516
1517   if (size == old_args_size)
1518     return;
1519
1520   old_args_size = size;
1521
1522   cfi = new_cfi ();
1523   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1524   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1525   add_fde_cfi (label, cfi);
1526 }
1527
1528 /* Record a stack adjustment of OFFSET bytes.  */
1529
1530 static void
1531 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1532 {
1533   if (cfa.reg == STACK_POINTER_REGNUM)
1534     cfa.offset += offset;
1535
1536   if (cfa_store.reg == STACK_POINTER_REGNUM)
1537     cfa_store.offset += offset;
1538
1539   if (ACCUMULATE_OUTGOING_ARGS)
1540     return;
1541
1542 #ifndef STACK_GROWS_DOWNWARD
1543   offset = -offset;
1544 #endif
1545
1546   args_size += offset;
1547   if (args_size < 0)
1548     args_size = 0;
1549
1550   def_cfa_1 (label, &cfa);
1551   if (flag_asynchronous_unwind_tables)
1552     dwarf2out_args_size (label, args_size);
1553 }
1554
1555 /* Check INSN to see if it looks like a push or a stack adjustment, and
1556    make a note of it if it does.  EH uses this information to find out
1557    how much extra space it needs to pop off the stack.  */
1558
1559 static void
1560 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1561 {
1562   HOST_WIDE_INT offset;
1563   const char *label;
1564   int i;
1565
1566   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1567      with this function.  Proper support would require all frame-related
1568      insns to be marked, and to be able to handle saving state around
1569      epilogues textually in the middle of the function.  */
1570   if (prologue_epilogue_contains (insn))
1571     return;
1572
1573   /* If INSN is an instruction from target of an annulled branch, the
1574      effects are for the target only and so current argument size
1575      shouldn't change at all.  */
1576   if (final_sequence
1577       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1578       && INSN_FROM_TARGET_P (insn))
1579     return;
1580
1581   /* If only calls can throw, and we have a frame pointer,
1582      save up adjustments until we see the CALL_INSN.  */
1583   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1584     {
1585       if (CALL_P (insn) && !after_p)
1586         {
1587           /* Extract the size of the args from the CALL rtx itself.  */
1588           insn = PATTERN (insn);
1589           if (GET_CODE (insn) == PARALLEL)
1590             insn = XVECEXP (insn, 0, 0);
1591           if (GET_CODE (insn) == SET)
1592             insn = SET_SRC (insn);
1593           gcc_assert (GET_CODE (insn) == CALL);
1594           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1595         }
1596       return;
1597     }
1598
1599   if (CALL_P (insn) && !after_p)
1600     {
1601       if (!flag_asynchronous_unwind_tables)
1602         dwarf2out_args_size ("", args_size);
1603       return;
1604     }
1605   else if (BARRIER_P (insn))
1606     {
1607       /* Don't call compute_barrier_args_size () if the only
1608          BARRIER is at the end of function.  */
1609       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1610         compute_barrier_args_size ();
1611       if (barrier_args_size == NULL)
1612         offset = 0;
1613       else
1614         {
1615           offset = barrier_args_size[INSN_UID (insn)];
1616           if (offset < 0)
1617             offset = 0;
1618         }
1619
1620       offset -= args_size;
1621 #ifndef STACK_GROWS_DOWNWARD
1622       offset = -offset;
1623 #endif
1624     }
1625   else if (GET_CODE (PATTERN (insn)) == SET)
1626     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1627   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1628            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1629     {
1630       /* There may be stack adjustments inside compound insns.  Search
1631          for them.  */
1632       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1633         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1634           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1635                                          args_size, offset);
1636     }
1637   else
1638     return;
1639
1640   if (offset == 0)
1641     return;
1642
1643   label = dwarf2out_cfi_label (false);
1644   dwarf2out_stack_adjust (offset, label);
1645 }
1646
1647 #endif
1648
1649 /* We delay emitting a register save until either (a) we reach the end
1650    of the prologue or (b) the register is clobbered.  This clusters
1651    register saves so that there are fewer pc advances.  */
1652
1653 struct GTY(()) queued_reg_save {
1654   struct queued_reg_save *next;
1655   rtx reg;
1656   HOST_WIDE_INT cfa_offset;
1657   rtx saved_reg;
1658 };
1659
1660 static GTY(()) struct queued_reg_save *queued_reg_saves;
1661
1662 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1663 struct GTY(()) reg_saved_in_data {
1664   rtx orig_reg;
1665   rtx saved_in_reg;
1666 };
1667
1668 /* A list of registers saved in other registers.
1669    The list intentionally has a small maximum capacity of 4; if your
1670    port needs more than that, you might consider implementing a
1671    more efficient data structure.  */
1672 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1673 static GTY(()) size_t num_regs_saved_in_regs;
1674
1675 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1676 static const char *last_reg_save_label;
1677
1678 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1679    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1680
1681 static void
1682 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1683 {
1684   struct queued_reg_save *q;
1685
1686   /* Duplicates waste space, but it's also necessary to remove them
1687      for correctness, since the queue gets output in reverse
1688      order.  */
1689   for (q = queued_reg_saves; q != NULL; q = q->next)
1690     if (REGNO (q->reg) == REGNO (reg))
1691       break;
1692
1693   if (q == NULL)
1694     {
1695       q = GGC_NEW (struct queued_reg_save);
1696       q->next = queued_reg_saves;
1697       queued_reg_saves = q;
1698     }
1699
1700   q->reg = reg;
1701   q->cfa_offset = offset;
1702   q->saved_reg = sreg;
1703
1704   last_reg_save_label = label;
1705 }
1706
1707 /* Output all the entries in QUEUED_REG_SAVES.  */
1708
1709 static void
1710 flush_queued_reg_saves (void)
1711 {
1712   struct queued_reg_save *q;
1713
1714   for (q = queued_reg_saves; q; q = q->next)
1715     {
1716       size_t i;
1717       unsigned int reg, sreg;
1718
1719       for (i = 0; i < num_regs_saved_in_regs; i++)
1720         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1721           break;
1722       if (q->saved_reg && i == num_regs_saved_in_regs)
1723         {
1724           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1725           num_regs_saved_in_regs++;
1726         }
1727       if (i != num_regs_saved_in_regs)
1728         {
1729           regs_saved_in_regs[i].orig_reg = q->reg;
1730           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1731         }
1732
1733       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1734       if (q->saved_reg)
1735         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1736       else
1737         sreg = INVALID_REGNUM;
1738       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1739     }
1740
1741   queued_reg_saves = NULL;
1742   last_reg_save_label = NULL;
1743 }
1744
1745 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1746    location for?  Or, does it clobber a register which we've previously
1747    said that some other register is saved in, and for which we now
1748    have a new location for?  */
1749
1750 static bool
1751 clobbers_queued_reg_save (const_rtx insn)
1752 {
1753   struct queued_reg_save *q;
1754
1755   for (q = queued_reg_saves; q; q = q->next)
1756     {
1757       size_t i;
1758       if (modified_in_p (q->reg, insn))
1759         return true;
1760       for (i = 0; i < num_regs_saved_in_regs; i++)
1761         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1762             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1763           return true;
1764     }
1765
1766   return false;
1767 }
1768
1769 /* Entry point for saving the first register into the second.  */
1770
1771 void
1772 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1773 {
1774   size_t i;
1775   unsigned int regno, sregno;
1776
1777   for (i = 0; i < num_regs_saved_in_regs; i++)
1778     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1779       break;
1780   if (i == num_regs_saved_in_regs)
1781     {
1782       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1783       num_regs_saved_in_regs++;
1784     }
1785   regs_saved_in_regs[i].orig_reg = reg;
1786   regs_saved_in_regs[i].saved_in_reg = sreg;
1787
1788   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1789   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1790   reg_save (label, regno, sregno, 0);
1791 }
1792
1793 /* What register, if any, is currently saved in REG?  */
1794
1795 static rtx
1796 reg_saved_in (rtx reg)
1797 {
1798   unsigned int regn = REGNO (reg);
1799   size_t i;
1800   struct queued_reg_save *q;
1801
1802   for (q = queued_reg_saves; q; q = q->next)
1803     if (q->saved_reg && regn == REGNO (q->saved_reg))
1804       return q->reg;
1805
1806   for (i = 0; i < num_regs_saved_in_regs; i++)
1807     if (regs_saved_in_regs[i].saved_in_reg
1808         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1809       return regs_saved_in_regs[i].orig_reg;
1810
1811   return NULL_RTX;
1812 }
1813
1814
1815 /* A temporary register holding an integral value used in adjusting SP
1816    or setting up the store_reg.  The "offset" field holds the integer
1817    value, not an offset.  */
1818 static dw_cfa_location cfa_temp;
1819
1820 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1821
1822 static void
1823 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1824 {
1825   memset (&cfa, 0, sizeof (cfa));
1826
1827   switch (GET_CODE (pat))
1828     {
1829     case PLUS:
1830       cfa.reg = REGNO (XEXP (pat, 0));
1831       cfa.offset = INTVAL (XEXP (pat, 1));
1832       break;
1833
1834     case REG:
1835       cfa.reg = REGNO (pat);
1836       break;
1837
1838     default:
1839       /* Recurse and define an expression.  */
1840       gcc_unreachable ();
1841     }
1842
1843   def_cfa_1 (label, &cfa);
1844 }
1845
1846 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1847
1848 static void
1849 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1850 {
1851   rtx src, dest;
1852
1853   gcc_assert (GET_CODE (pat) == SET);
1854   dest = XEXP (pat, 0);
1855   src = XEXP (pat, 1);
1856
1857   switch (GET_CODE (src))
1858     {
1859     case PLUS:
1860       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1861       cfa.offset -= INTVAL (XEXP (src, 1));
1862       break;
1863
1864     case REG:
1865         break;
1866
1867     default:
1868         gcc_unreachable ();
1869     }
1870
1871   cfa.reg = REGNO (dest);
1872   gcc_assert (cfa.indirect == 0);
1873
1874   def_cfa_1 (label, &cfa);
1875 }
1876
1877 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1878
1879 static void
1880 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1881 {
1882   HOST_WIDE_INT offset;
1883   rtx src, addr, span;
1884
1885   src = XEXP (set, 1);
1886   addr = XEXP (set, 0);
1887   gcc_assert (MEM_P (addr));
1888   addr = XEXP (addr, 0);
1889
1890   /* As documented, only consider extremely simple addresses.  */
1891   switch (GET_CODE (addr))
1892     {
1893     case REG:
1894       gcc_assert (REGNO (addr) == cfa.reg);
1895       offset = -cfa.offset;
1896       break;
1897     case PLUS:
1898       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1899       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1900       break;
1901     default:
1902       gcc_unreachable ();
1903     }
1904
1905   span = targetm.dwarf_register_span (src);
1906
1907   /* ??? We'd like to use queue_reg_save, but we need to come up with
1908      a different flushing heuristic for epilogues.  */
1909   if (!span)
1910     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1911   else
1912     {
1913       /* We have a PARALLEL describing where the contents of SRC live.
1914          Queue register saves for each piece of the PARALLEL.  */
1915       int par_index;
1916       int limit;
1917       HOST_WIDE_INT span_offset = offset;
1918
1919       gcc_assert (GET_CODE (span) == PARALLEL);
1920
1921       limit = XVECLEN (span, 0);
1922       for (par_index = 0; par_index < limit; par_index++)
1923         {
1924           rtx elem = XVECEXP (span, 0, par_index);
1925
1926           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1927                     INVALID_REGNUM, span_offset);
1928           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1929         }
1930     }
1931 }
1932
1933 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1934
1935 static void
1936 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1937 {
1938   rtx src, dest;
1939   unsigned sregno, dregno;
1940
1941   src = XEXP (set, 1);
1942   dest = XEXP (set, 0);
1943
1944   if (src == pc_rtx)
1945     sregno = DWARF_FRAME_RETURN_COLUMN;
1946   else
1947     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1948
1949   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1950
1951   /* ??? We'd like to use queue_reg_save, but we need to come up with
1952      a different flushing heuristic for epilogues.  */
1953   reg_save (label, sregno, dregno, 0);
1954 }
1955
1956 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1957
1958 static void
1959 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1960 {
1961   dw_cfi_ref cfi = new_cfi ();
1962   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1963
1964   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1965   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1966
1967   add_fde_cfi (label, cfi);
1968 }
1969
1970 /* Record call frame debugging information for an expression EXPR,
1971    which either sets SP or FP (adjusting how we calculate the frame
1972    address) or saves a register to the stack or another register.
1973    LABEL indicates the address of EXPR.
1974
1975    This function encodes a state machine mapping rtxes to actions on
1976    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1977    users need not read the source code.
1978
1979   The High-Level Picture
1980
1981   Changes in the register we use to calculate the CFA: Currently we
1982   assume that if you copy the CFA register into another register, we
1983   should take the other one as the new CFA register; this seems to
1984   work pretty well.  If it's wrong for some target, it's simple
1985   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1986
1987   Changes in the register we use for saving registers to the stack:
1988   This is usually SP, but not always.  Again, we deduce that if you
1989   copy SP into another register (and SP is not the CFA register),
1990   then the new register is the one we will be using for register
1991   saves.  This also seems to work.
1992
1993   Register saves: There's not much guesswork about this one; if
1994   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1995   register save, and the register used to calculate the destination
1996   had better be the one we think we're using for this purpose.
1997   It's also assumed that a copy from a call-saved register to another
1998   register is saving that register if RTX_FRAME_RELATED_P is set on
1999   that instruction.  If the copy is from a call-saved register to
2000   the *same* register, that means that the register is now the same
2001   value as in the caller.
2002
2003   Except: If the register being saved is the CFA register, and the
2004   offset is nonzero, we are saving the CFA, so we assume we have to
2005   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2006   the intent is to save the value of SP from the previous frame.
2007
2008   In addition, if a register has previously been saved to a different
2009   register,
2010
2011   Invariants / Summaries of Rules
2012
2013   cfa          current rule for calculating the CFA.  It usually
2014                consists of a register and an offset.
2015   cfa_store    register used by prologue code to save things to the stack
2016                cfa_store.offset is the offset from the value of
2017                cfa_store.reg to the actual CFA
2018   cfa_temp     register holding an integral value.  cfa_temp.offset
2019                stores the value, which will be used to adjust the
2020                stack pointer.  cfa_temp is also used like cfa_store,
2021                to track stores to the stack via fp or a temp reg.
2022
2023   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2024                with cfa.reg as the first operand changes the cfa.reg and its
2025                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2026                cfa_temp.offset.
2027
2028   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2029                expression yielding a constant.  This sets cfa_temp.reg
2030                and cfa_temp.offset.
2031
2032   Rule 5:      Create a new register cfa_store used to save items to the
2033                stack.
2034
2035   Rules 10-14: Save a register to the stack.  Define offset as the
2036                difference of the original location and cfa_store's
2037                location (or cfa_temp's location if cfa_temp is used).
2038
2039   Rules 16-20: If AND operation happens on sp in prologue, we assume
2040                stack is realigned.  We will use a group of DW_OP_XXX
2041                expressions to represent the location of the stored
2042                register instead of CFA+offset.
2043
2044   The Rules
2045
2046   "{a,b}" indicates a choice of a xor b.
2047   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2048
2049   Rule 1:
2050   (set <reg1> <reg2>:cfa.reg)
2051   effects: cfa.reg = <reg1>
2052            cfa.offset unchanged
2053            cfa_temp.reg = <reg1>
2054            cfa_temp.offset = cfa.offset
2055
2056   Rule 2:
2057   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2058                               {<const_int>,<reg>:cfa_temp.reg}))
2059   effects: cfa.reg = sp if fp used
2060            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2061            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2062              if cfa_store.reg==sp
2063
2064   Rule 3:
2065   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2066   effects: cfa.reg = fp
2067            cfa_offset += +/- <const_int>
2068
2069   Rule 4:
2070   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2071   constraints: <reg1> != fp
2072                <reg1> != sp
2073   effects: cfa.reg = <reg1>
2074            cfa_temp.reg = <reg1>
2075            cfa_temp.offset = cfa.offset
2076
2077   Rule 5:
2078   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2079   constraints: <reg1> != fp
2080                <reg1> != sp
2081   effects: cfa_store.reg = <reg1>
2082            cfa_store.offset = cfa.offset - cfa_temp.offset
2083
2084   Rule 6:
2085   (set <reg> <const_int>)
2086   effects: cfa_temp.reg = <reg>
2087            cfa_temp.offset = <const_int>
2088
2089   Rule 7:
2090   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2091   effects: cfa_temp.reg = <reg1>
2092            cfa_temp.offset |= <const_int>
2093
2094   Rule 8:
2095   (set <reg> (high <exp>))
2096   effects: none
2097
2098   Rule 9:
2099   (set <reg> (lo_sum <exp> <const_int>))
2100   effects: cfa_temp.reg = <reg>
2101            cfa_temp.offset = <const_int>
2102
2103   Rule 10:
2104   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2105   effects: cfa_store.offset -= <const_int>
2106            cfa.offset = cfa_store.offset if cfa.reg == sp
2107            cfa.reg = sp
2108            cfa.base_offset = -cfa_store.offset
2109
2110   Rule 11:
2111   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2112   effects: cfa_store.offset += -/+ mode_size(mem)
2113            cfa.offset = cfa_store.offset if cfa.reg == sp
2114            cfa.reg = sp
2115            cfa.base_offset = -cfa_store.offset
2116
2117   Rule 12:
2118   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2119
2120        <reg2>)
2121   effects: cfa.reg = <reg1>
2122            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2123
2124   Rule 13:
2125   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2126   effects: cfa.reg = <reg1>
2127            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2128
2129   Rule 14:
2130   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2131   effects: cfa.reg = <reg1>
2132            cfa.base_offset = -cfa_temp.offset
2133            cfa_temp.offset -= mode_size(mem)
2134
2135   Rule 15:
2136   (set <reg> {unspec, unspec_volatile})
2137   effects: target-dependent
2138
2139   Rule 16:
2140   (set sp (and: sp <const_int>))
2141   constraints: cfa_store.reg == sp
2142   effects: current_fde.stack_realign = 1
2143            cfa_store.offset = 0
2144            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2145
2146   Rule 17:
2147   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2148   effects: cfa_store.offset += -/+ mode_size(mem)
2149
2150   Rule 18:
2151   (set (mem ({pre_inc, pre_dec} sp)) fp)
2152   constraints: fde->stack_realign == 1
2153   effects: cfa_store.offset = 0
2154            cfa.reg != HARD_FRAME_POINTER_REGNUM
2155
2156   Rule 19:
2157   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2158   constraints: fde->stack_realign == 1
2159                && cfa.offset == 0
2160                && cfa.indirect == 0
2161                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2162   effects: Use DW_CFA_def_cfa_expression to define cfa
2163            cfa.reg == fde->drap_reg  */
2164
2165 static void
2166 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2167 {
2168   rtx src, dest, span;
2169   HOST_WIDE_INT offset;
2170   dw_fde_ref fde;
2171
2172   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2173      the PARALLEL independently. The first element is always processed if
2174      it is a SET. This is for backward compatibility.   Other elements
2175      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2176      flag is set in them.  */
2177   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2178     {
2179       int par_index;
2180       int limit = XVECLEN (expr, 0);
2181       rtx elem;
2182
2183       /* PARALLELs have strict read-modify-write semantics, so we
2184          ought to evaluate every rvalue before changing any lvalue.
2185          It's cumbersome to do that in general, but there's an
2186          easy approximation that is enough for all current users:
2187          handle register saves before register assignments.  */
2188       if (GET_CODE (expr) == PARALLEL)
2189         for (par_index = 0; par_index < limit; par_index++)
2190           {
2191             elem = XVECEXP (expr, 0, par_index);
2192             if (GET_CODE (elem) == SET
2193                 && MEM_P (SET_DEST (elem))
2194                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2195               dwarf2out_frame_debug_expr (elem, label);
2196           }
2197
2198       for (par_index = 0; par_index < limit; par_index++)
2199         {
2200           elem = XVECEXP (expr, 0, par_index);
2201           if (GET_CODE (elem) == SET
2202               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2203               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2204             dwarf2out_frame_debug_expr (elem, label);
2205           else if (GET_CODE (elem) == SET
2206                    && par_index != 0
2207                    && !RTX_FRAME_RELATED_P (elem))
2208             {
2209               /* Stack adjustment combining might combine some post-prologue
2210                  stack adjustment into a prologue stack adjustment.  */
2211               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2212
2213               if (offset != 0)
2214                 dwarf2out_stack_adjust (offset, label);
2215             }
2216         }
2217       return;
2218     }
2219
2220   gcc_assert (GET_CODE (expr) == SET);
2221
2222   src = SET_SRC (expr);
2223   dest = SET_DEST (expr);
2224
2225   if (REG_P (src))
2226     {
2227       rtx rsi = reg_saved_in (src);
2228       if (rsi)
2229         src = rsi;
2230     }
2231
2232   fde = current_fde ();
2233
2234   switch (GET_CODE (dest))
2235     {
2236     case REG:
2237       switch (GET_CODE (src))
2238         {
2239           /* Setting FP from SP.  */
2240         case REG:
2241           if (cfa.reg == (unsigned) REGNO (src))
2242             {
2243               /* Rule 1 */
2244               /* Update the CFA rule wrt SP or FP.  Make sure src is
2245                  relative to the current CFA register.
2246
2247                  We used to require that dest be either SP or FP, but the
2248                  ARM copies SP to a temporary register, and from there to
2249                  FP.  So we just rely on the backends to only set
2250                  RTX_FRAME_RELATED_P on appropriate insns.  */
2251               cfa.reg = REGNO (dest);
2252               cfa_temp.reg = cfa.reg;
2253               cfa_temp.offset = cfa.offset;
2254             }
2255           else
2256             {
2257               /* Saving a register in a register.  */
2258               gcc_assert (!fixed_regs [REGNO (dest)]
2259                           /* For the SPARC and its register window.  */
2260                           || (DWARF_FRAME_REGNUM (REGNO (src))
2261                               == DWARF_FRAME_RETURN_COLUMN));
2262
2263               /* After stack is aligned, we can only save SP in FP
2264                  if drap register is used.  In this case, we have
2265                  to restore stack pointer with the CFA value and we
2266                  don't generate this DWARF information.  */
2267               if (fde
2268                   && fde->stack_realign
2269                   && REGNO (src) == STACK_POINTER_REGNUM)
2270                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2271                             && fde->drap_reg != INVALID_REGNUM
2272                             && cfa.reg != REGNO (src));
2273               else
2274                 queue_reg_save (label, src, dest, 0);
2275             }
2276           break;
2277
2278         case PLUS:
2279         case MINUS:
2280         case LO_SUM:
2281           if (dest == stack_pointer_rtx)
2282             {
2283               /* Rule 2 */
2284               /* Adjusting SP.  */
2285               switch (GET_CODE (XEXP (src, 1)))
2286                 {
2287                 case CONST_INT:
2288                   offset = INTVAL (XEXP (src, 1));
2289                   break;
2290                 case REG:
2291                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2292                               == cfa_temp.reg);
2293                   offset = cfa_temp.offset;
2294                   break;
2295                 default:
2296                   gcc_unreachable ();
2297                 }
2298
2299               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2300                 {
2301                   /* Restoring SP from FP in the epilogue.  */
2302                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2303                   cfa.reg = STACK_POINTER_REGNUM;
2304                 }
2305               else if (GET_CODE (src) == LO_SUM)
2306                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2307                 ;
2308               else
2309                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2310
2311               if (GET_CODE (src) != MINUS)
2312                 offset = -offset;
2313               if (cfa.reg == STACK_POINTER_REGNUM)
2314                 cfa.offset += offset;
2315               if (cfa_store.reg == STACK_POINTER_REGNUM)
2316                 cfa_store.offset += offset;
2317             }
2318           else if (dest == hard_frame_pointer_rtx)
2319             {
2320               /* Rule 3 */
2321               /* Either setting the FP from an offset of the SP,
2322                  or adjusting the FP */
2323               gcc_assert (frame_pointer_needed);
2324
2325               gcc_assert (REG_P (XEXP (src, 0))
2326                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2327                           && CONST_INT_P (XEXP (src, 1)));
2328               offset = INTVAL (XEXP (src, 1));
2329               if (GET_CODE (src) != MINUS)
2330                 offset = -offset;
2331               cfa.offset += offset;
2332               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2333             }
2334           else
2335             {
2336               gcc_assert (GET_CODE (src) != MINUS);
2337
2338               /* Rule 4 */
2339               if (REG_P (XEXP (src, 0))
2340                   && REGNO (XEXP (src, 0)) == cfa.reg
2341                   && CONST_INT_P (XEXP (src, 1)))
2342                 {
2343                   /* Setting a temporary CFA register that will be copied
2344                      into the FP later on.  */
2345                   offset = - INTVAL (XEXP (src, 1));
2346                   cfa.offset += offset;
2347                   cfa.reg = REGNO (dest);
2348                   /* Or used to save regs to the stack.  */
2349                   cfa_temp.reg = cfa.reg;
2350                   cfa_temp.offset = cfa.offset;
2351                 }
2352
2353               /* Rule 5 */
2354               else if (REG_P (XEXP (src, 0))
2355                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2356                        && XEXP (src, 1) == stack_pointer_rtx)
2357                 {
2358                   /* Setting a scratch register that we will use instead
2359                      of SP for saving registers to the stack.  */
2360                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2361                   cfa_store.reg = REGNO (dest);
2362                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2363                 }
2364
2365               /* Rule 9 */
2366               else if (GET_CODE (src) == LO_SUM
2367                        && CONST_INT_P (XEXP (src, 1)))
2368                 {
2369                   cfa_temp.reg = REGNO (dest);
2370                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2371                 }
2372               else
2373                 gcc_unreachable ();
2374             }
2375           break;
2376
2377           /* Rule 6 */
2378         case CONST_INT:
2379           cfa_temp.reg = REGNO (dest);
2380           cfa_temp.offset = INTVAL (src);
2381           break;
2382
2383           /* Rule 7 */
2384         case IOR:
2385           gcc_assert (REG_P (XEXP (src, 0))
2386                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2387                       && CONST_INT_P (XEXP (src, 1)));
2388
2389           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2390             cfa_temp.reg = REGNO (dest);
2391           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2392           break;
2393
2394           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2395              which will fill in all of the bits.  */
2396           /* Rule 8 */
2397         case HIGH:
2398           break;
2399
2400           /* Rule 15 */
2401         case UNSPEC:
2402         case UNSPEC_VOLATILE:
2403           gcc_assert (targetm.dwarf_handle_frame_unspec);
2404           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2405           return;
2406
2407           /* Rule 16 */
2408         case AND:
2409           /* If this AND operation happens on stack pointer in prologue,
2410              we assume the stack is realigned and we extract the
2411              alignment.  */
2412           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2413             {
2414               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2415               fde->stack_realign = 1;
2416               fde->stack_realignment = INTVAL (XEXP (src, 1));
2417               cfa_store.offset = 0;
2418
2419               if (cfa.reg != STACK_POINTER_REGNUM
2420                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2421                 fde->drap_reg = cfa.reg;
2422             }
2423           return;
2424
2425         default:
2426           gcc_unreachable ();
2427         }
2428
2429       def_cfa_1 (label, &cfa);
2430       break;
2431
2432     case MEM:
2433
2434       /* Saving a register to the stack.  Make sure dest is relative to the
2435          CFA register.  */
2436       switch (GET_CODE (XEXP (dest, 0)))
2437         {
2438           /* Rule 10 */
2439           /* With a push.  */
2440         case PRE_MODIFY:
2441           /* We can't handle variable size modifications.  */
2442           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2443                       == CONST_INT);
2444           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2445
2446           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2447                       && cfa_store.reg == STACK_POINTER_REGNUM);
2448
2449           cfa_store.offset += offset;
2450           if (cfa.reg == STACK_POINTER_REGNUM)
2451             cfa.offset = cfa_store.offset;
2452
2453           offset = -cfa_store.offset;
2454           break;
2455
2456           /* Rule 11 */
2457         case PRE_INC:
2458         case PRE_DEC:
2459           offset = GET_MODE_SIZE (GET_MODE (dest));
2460           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2461             offset = -offset;
2462
2463           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2464                        == STACK_POINTER_REGNUM)
2465                       && cfa_store.reg == STACK_POINTER_REGNUM);
2466
2467           cfa_store.offset += offset;
2468
2469           /* Rule 18: If stack is aligned, we will use FP as a
2470              reference to represent the address of the stored
2471              regiser.  */
2472           if (fde
2473               && fde->stack_realign
2474               && src == hard_frame_pointer_rtx)
2475             {
2476               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2477               cfa_store.offset = 0;
2478             }
2479
2480           if (cfa.reg == STACK_POINTER_REGNUM)
2481             cfa.offset = cfa_store.offset;
2482
2483           offset = -cfa_store.offset;
2484           break;
2485
2486           /* Rule 12 */
2487           /* With an offset.  */
2488         case PLUS:
2489         case MINUS:
2490         case LO_SUM:
2491           {
2492             int regno;
2493
2494             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2495                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2496             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2497             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2498               offset = -offset;
2499
2500             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2501
2502             if (cfa_store.reg == (unsigned) regno)
2503               offset -= cfa_store.offset;
2504             else
2505               {
2506                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2507                 offset -= cfa_temp.offset;
2508               }
2509           }
2510           break;
2511
2512           /* Rule 13 */
2513           /* Without an offset.  */
2514         case REG:
2515           {
2516             int regno = REGNO (XEXP (dest, 0));
2517
2518             if (cfa_store.reg == (unsigned) regno)
2519               offset = -cfa_store.offset;
2520             else
2521               {
2522                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2523                 offset = -cfa_temp.offset;
2524               }
2525           }
2526           break;
2527
2528           /* Rule 14 */
2529         case POST_INC:
2530           gcc_assert (cfa_temp.reg
2531                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2532           offset = -cfa_temp.offset;
2533           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2534           break;
2535
2536         default:
2537           gcc_unreachable ();
2538         }
2539
2540         /* Rule 17 */
2541         /* If the source operand of this MEM operation is not a
2542            register, basically the source is return address.  Here
2543            we only care how much stack grew and we don't save it.  */
2544       if (!REG_P (src))
2545         break;
2546
2547       if (REGNO (src) != STACK_POINTER_REGNUM
2548           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2549           && (unsigned) REGNO (src) == cfa.reg)
2550         {
2551           /* We're storing the current CFA reg into the stack.  */
2552
2553           if (cfa.offset == 0)
2554             {
2555               /* Rule 19 */
2556               /* If stack is aligned, putting CFA reg into stack means
2557                  we can no longer use reg + offset to represent CFA.
2558                  Here we use DW_CFA_def_cfa_expression instead.  The
2559                  result of this expression equals to the original CFA
2560                  value.  */
2561               if (fde
2562                   && fde->stack_realign
2563                   && cfa.indirect == 0
2564                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2565                 {
2566                   dw_cfa_location cfa_exp;
2567
2568                   gcc_assert (fde->drap_reg == cfa.reg);
2569
2570                   cfa_exp.indirect = 1;
2571                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2572                   cfa_exp.base_offset = offset;
2573                   cfa_exp.offset = 0;
2574
2575                   fde->drap_reg_saved = 1;
2576
2577                   def_cfa_1 (label, &cfa_exp);
2578                   break;
2579                 }
2580
2581               /* If the source register is exactly the CFA, assume
2582                  we're saving SP like any other register; this happens
2583                  on the ARM.  */
2584               def_cfa_1 (label, &cfa);
2585               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2586               break;
2587             }
2588           else
2589             {
2590               /* Otherwise, we'll need to look in the stack to
2591                  calculate the CFA.  */
2592               rtx x = XEXP (dest, 0);
2593
2594               if (!REG_P (x))
2595                 x = XEXP (x, 0);
2596               gcc_assert (REG_P (x));
2597
2598               cfa.reg = REGNO (x);
2599               cfa.base_offset = offset;
2600               cfa.indirect = 1;
2601               def_cfa_1 (label, &cfa);
2602               break;
2603             }
2604         }
2605
2606       def_cfa_1 (label, &cfa);
2607       {
2608         span = targetm.dwarf_register_span (src);
2609
2610         if (!span)
2611           queue_reg_save (label, src, NULL_RTX, offset);
2612         else
2613           {
2614             /* We have a PARALLEL describing where the contents of SRC
2615                live.  Queue register saves for each piece of the
2616                PARALLEL.  */
2617             int par_index;
2618             int limit;
2619             HOST_WIDE_INT span_offset = offset;
2620
2621             gcc_assert (GET_CODE (span) == PARALLEL);
2622
2623             limit = XVECLEN (span, 0);
2624             for (par_index = 0; par_index < limit; par_index++)
2625               {
2626                 rtx elem = XVECEXP (span, 0, par_index);
2627
2628                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2629                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2630               }
2631           }
2632       }
2633       break;
2634
2635     default:
2636       gcc_unreachable ();
2637     }
2638 }
2639
2640 /* Record call frame debugging information for INSN, which either
2641    sets SP or FP (adjusting how we calculate the frame address) or saves a
2642    register to the stack.  If INSN is NULL_RTX, initialize our state.
2643
2644    If AFTER_P is false, we're being called before the insn is emitted,
2645    otherwise after.  Call instructions get invoked twice.  */
2646
2647 void
2648 dwarf2out_frame_debug (rtx insn, bool after_p)
2649 {
2650   const char *label;
2651   rtx note, n;
2652   bool handled_one = false;
2653
2654   if (insn == NULL_RTX)
2655     {
2656       size_t i;
2657
2658       /* Flush any queued register saves.  */
2659       flush_queued_reg_saves ();
2660
2661       /* Set up state for generating call frame debug info.  */
2662       lookup_cfa (&cfa);
2663       gcc_assert (cfa.reg
2664                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2665
2666       cfa.reg = STACK_POINTER_REGNUM;
2667       cfa_store = cfa;
2668       cfa_temp.reg = -1;
2669       cfa_temp.offset = 0;
2670
2671       for (i = 0; i < num_regs_saved_in_regs; i++)
2672         {
2673           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2674           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2675         }
2676       num_regs_saved_in_regs = 0;
2677
2678       if (barrier_args_size)
2679         {
2680           XDELETEVEC (barrier_args_size);
2681           barrier_args_size = NULL;
2682         }
2683       return;
2684     }
2685
2686   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2687     flush_queued_reg_saves ();
2688
2689   if (!RTX_FRAME_RELATED_P (insn))
2690     {
2691       /* ??? This should be done unconditionally since stack adjustments
2692          matter if the stack pointer is not the CFA register anymore but
2693          is still used to save registers.  */
2694       if (!ACCUMULATE_OUTGOING_ARGS)
2695         dwarf2out_notice_stack_adjust (insn, after_p);
2696       return;
2697     }
2698
2699   label = dwarf2out_cfi_label (false);
2700
2701   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2702     switch (REG_NOTE_KIND (note))
2703       {
2704       case REG_FRAME_RELATED_EXPR:
2705         insn = XEXP (note, 0);
2706         goto found;
2707
2708       case REG_CFA_DEF_CFA:
2709         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2710         handled_one = true;
2711         break;
2712
2713       case REG_CFA_ADJUST_CFA:
2714         n = XEXP (note, 0);
2715         if (n == NULL)
2716           {
2717             n = PATTERN (insn);
2718             if (GET_CODE (n) == PARALLEL)
2719               n = XVECEXP (n, 0, 0);
2720           }
2721         dwarf2out_frame_debug_adjust_cfa (n, label);
2722         handled_one = true;
2723         break;
2724
2725       case REG_CFA_OFFSET:
2726         n = XEXP (note, 0);
2727         if (n == NULL)
2728           n = single_set (insn);
2729         dwarf2out_frame_debug_cfa_offset (n, label);
2730         handled_one = true;
2731         break;
2732
2733       case REG_CFA_REGISTER:
2734         n = XEXP (note, 0);
2735         if (n == NULL)
2736           {
2737             n = PATTERN (insn);
2738             if (GET_CODE (n) == PARALLEL)
2739               n = XVECEXP (n, 0, 0);
2740           }
2741         dwarf2out_frame_debug_cfa_register (n, label);
2742         handled_one = true;
2743         break;
2744
2745       case REG_CFA_RESTORE:
2746         n = XEXP (note, 0);
2747         if (n == NULL)
2748           {
2749             n = PATTERN (insn);
2750             if (GET_CODE (n) == PARALLEL)
2751               n = XVECEXP (n, 0, 0);
2752             n = XEXP (n, 0);
2753           }
2754         dwarf2out_frame_debug_cfa_restore (n, label);
2755         handled_one = true;
2756         break;
2757
2758       case REG_CFA_SET_VDRAP:
2759         n = XEXP (note, 0);
2760         if (REG_P (n))
2761           {
2762             dw_fde_ref fde = current_fde ();
2763             if (fde)
2764               {
2765                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2766                 if (REG_P (n))
2767                   fde->vdrap_reg = REGNO (n);
2768               }
2769           }
2770         handled_one = true;
2771         break;
2772
2773       default:
2774         break;
2775       }
2776   if (handled_one)
2777     return;
2778
2779   insn = PATTERN (insn);
2780  found:
2781   dwarf2out_frame_debug_expr (insn, label);
2782 }
2783
2784 /* Determine if we need to save and restore CFI information around this
2785    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2786    we do need to save/restore, then emit the save now, and insert a
2787    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2788
2789 void
2790 dwarf2out_begin_epilogue (rtx insn)
2791 {
2792   bool saw_frp = false;
2793   rtx i;
2794
2795   /* Scan forward to the return insn, noticing if there are possible
2796      frame related insns.  */
2797   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2798     {
2799       if (!INSN_P (i))
2800         continue;
2801
2802       /* Look for both regular and sibcalls to end the block.  */
2803       if (returnjump_p (i))
2804         break;
2805       if (CALL_P (i) && SIBLING_CALL_P (i))
2806         break;
2807
2808       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2809         {
2810           int idx;
2811           rtx seq = PATTERN (i);
2812
2813           if (returnjump_p (XVECEXP (seq, 0, 0)))
2814             break;
2815           if (CALL_P (XVECEXP (seq, 0, 0))
2816               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2817             break;
2818
2819           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2820             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2821               saw_frp = true;
2822         }
2823
2824       if (RTX_FRAME_RELATED_P (i))
2825         saw_frp = true;
2826     }
2827
2828   /* If the port doesn't emit epilogue unwind info, we don't need a
2829      save/restore pair.  */
2830   if (!saw_frp)
2831     return;
2832
2833   /* Otherwise, search forward to see if the return insn was the last
2834      basic block of the function.  If so, we don't need save/restore.  */
2835   gcc_assert (i != NULL);
2836   i = next_real_insn (i);
2837   if (i == NULL)
2838     return;
2839
2840   /* Insert the restore before that next real insn in the stream, and before
2841      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2842      properly nested.  This should be after any label or alignment.  This
2843      will be pushed into the CFI stream by the function below.  */
2844   while (1)
2845     {
2846       rtx p = PREV_INSN (i);
2847       if (!NOTE_P (p))
2848         break;
2849       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2850         break;
2851       i = p;
2852     }
2853   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2854
2855   emit_cfa_remember = true;
2856
2857   /* And emulate the state save.  */
2858   gcc_assert (!cfa_remember.in_use);
2859   cfa_remember = cfa;
2860   cfa_remember.in_use = 1;
2861 }
2862
2863 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2864
2865 void
2866 dwarf2out_frame_debug_restore_state (void)
2867 {
2868   dw_cfi_ref cfi = new_cfi ();
2869   const char *label = dwarf2out_cfi_label (false);
2870
2871   cfi->dw_cfi_opc = DW_CFA_restore_state;
2872   add_fde_cfi (label, cfi);
2873
2874   gcc_assert (cfa_remember.in_use);
2875   cfa = cfa_remember;
2876   cfa_remember.in_use = 0;
2877 }
2878
2879 #endif
2880
2881 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2882 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2883  (enum dwarf_call_frame_info cfi);
2884
2885 static enum dw_cfi_oprnd_type
2886 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2887 {
2888   switch (cfi)
2889     {
2890     case DW_CFA_nop:
2891     case DW_CFA_GNU_window_save:
2892     case DW_CFA_remember_state:
2893     case DW_CFA_restore_state:
2894       return dw_cfi_oprnd_unused;
2895
2896     case DW_CFA_set_loc:
2897     case DW_CFA_advance_loc1:
2898     case DW_CFA_advance_loc2:
2899     case DW_CFA_advance_loc4:
2900     case DW_CFA_MIPS_advance_loc8:
2901       return dw_cfi_oprnd_addr;
2902
2903     case DW_CFA_offset:
2904     case DW_CFA_offset_extended:
2905     case DW_CFA_def_cfa:
2906     case DW_CFA_offset_extended_sf:
2907     case DW_CFA_def_cfa_sf:
2908     case DW_CFA_restore:
2909     case DW_CFA_restore_extended:
2910     case DW_CFA_undefined:
2911     case DW_CFA_same_value:
2912     case DW_CFA_def_cfa_register:
2913     case DW_CFA_register:
2914     case DW_CFA_expression:
2915       return dw_cfi_oprnd_reg_num;
2916
2917     case DW_CFA_def_cfa_offset:
2918     case DW_CFA_GNU_args_size:
2919     case DW_CFA_def_cfa_offset_sf:
2920       return dw_cfi_oprnd_offset;
2921
2922     case DW_CFA_def_cfa_expression:
2923       return dw_cfi_oprnd_loc;
2924
2925     default:
2926       gcc_unreachable ();
2927     }
2928 }
2929
2930 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2931 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2932  (enum dwarf_call_frame_info cfi);
2933
2934 static enum dw_cfi_oprnd_type
2935 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2936 {
2937   switch (cfi)
2938     {
2939     case DW_CFA_def_cfa:
2940     case DW_CFA_def_cfa_sf:
2941     case DW_CFA_offset:
2942     case DW_CFA_offset_extended_sf:
2943     case DW_CFA_offset_extended:
2944       return dw_cfi_oprnd_offset;
2945
2946     case DW_CFA_register:
2947       return dw_cfi_oprnd_reg_num;
2948
2949     case DW_CFA_expression:
2950       return dw_cfi_oprnd_loc;
2951
2952     default:
2953       return dw_cfi_oprnd_unused;
2954     }
2955 }
2956
2957 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2958
2959 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2960    switch to the data section instead, and write out a synthetic start label
2961    for collect2 the first time around.  */
2962
2963 static void
2964 switch_to_eh_frame_section (bool back)
2965 {
2966   tree label;
2967
2968 #ifdef EH_FRAME_SECTION_NAME
2969   if (eh_frame_section == 0)
2970     {
2971       int flags;
2972
2973       if (EH_TABLES_CAN_BE_READ_ONLY)
2974         {
2975           int fde_encoding;
2976           int per_encoding;
2977           int lsda_encoding;
2978
2979           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2980                                                        /*global=*/0);
2981           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2982                                                        /*global=*/1);
2983           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2984                                                         /*global=*/0);
2985           flags = ((! flag_pic
2986                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2987                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2988                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2992                    ? 0 : SECTION_WRITE);
2993         }
2994       else
2995         flags = SECTION_WRITE;
2996       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2997     }
2998 #endif
2999
3000   if (eh_frame_section)
3001     switch_to_section (eh_frame_section);
3002   else
3003     {
3004       /* We have no special eh_frame section.  Put the information in
3005          the data section and emit special labels to guide collect2.  */
3006       switch_to_section (data_section);
3007
3008       if (!back)
3009         {
3010           label = get_file_function_name ("F");
3011           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3012           targetm.asm_out.globalize_label (asm_out_file,
3013                                            IDENTIFIER_POINTER (label));
3014           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3015         }
3016     }
3017 }
3018
3019 /* Switch [BACK] to the eh or debug frame table section, depending on
3020    FOR_EH.  */
3021
3022 static void
3023 switch_to_frame_table_section (int for_eh, bool back)
3024 {
3025   if (for_eh)
3026     switch_to_eh_frame_section (back);
3027   else
3028     {
3029       if (!debug_frame_section)
3030         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3031                                            SECTION_DEBUG, NULL);
3032       switch_to_section (debug_frame_section);
3033     }
3034 }
3035
3036 /* Output a Call Frame Information opcode and its operand(s).  */
3037
3038 static void
3039 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3040 {
3041   unsigned long r;
3042   HOST_WIDE_INT off;
3043
3044   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3045     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3046                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3047                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3048                          ((unsigned HOST_WIDE_INT)
3049                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3050   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3051     {
3052       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3053       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3054                            "DW_CFA_offset, column %#lx", r);
3055       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3056       dw2_asm_output_data_uleb128 (off, NULL);
3057     }
3058   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3059     {
3060       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3061       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3062                            "DW_CFA_restore, column %#lx", r);
3063     }
3064   else
3065     {
3066       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3067                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3068
3069       switch (cfi->dw_cfi_opc)
3070         {
3071         case DW_CFA_set_loc:
3072           if (for_eh)
3073             dw2_asm_output_encoded_addr_rtx (
3074                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3075                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3076                 false, NULL);
3077           else
3078             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3079                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3080           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3081           break;
3082
3083         case DW_CFA_advance_loc1:
3084           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3085                                 fde->dw_fde_current_label, NULL);
3086           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3087           break;
3088
3089         case DW_CFA_advance_loc2:
3090           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3091                                 fde->dw_fde_current_label, NULL);
3092           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3093           break;
3094
3095         case DW_CFA_advance_loc4:
3096           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3097                                 fde->dw_fde_current_label, NULL);
3098           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3099           break;
3100
3101         case DW_CFA_MIPS_advance_loc8:
3102           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3103                                 fde->dw_fde_current_label, NULL);
3104           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3105           break;
3106
3107         case DW_CFA_offset_extended:
3108           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3109           dw2_asm_output_data_uleb128 (r, NULL);
3110           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3111           dw2_asm_output_data_uleb128 (off, NULL);
3112           break;
3113
3114         case DW_CFA_def_cfa:
3115           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3116           dw2_asm_output_data_uleb128 (r, NULL);
3117           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3118           break;
3119
3120         case DW_CFA_offset_extended_sf:
3121           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3122           dw2_asm_output_data_uleb128 (r, NULL);
3123           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3124           dw2_asm_output_data_sleb128 (off, NULL);
3125           break;
3126
3127         case DW_CFA_def_cfa_sf:
3128           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3129           dw2_asm_output_data_uleb128 (r, NULL);
3130           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3131           dw2_asm_output_data_sleb128 (off, NULL);
3132           break;
3133
3134         case DW_CFA_restore_extended:
3135         case DW_CFA_undefined:
3136         case DW_CFA_same_value:
3137         case DW_CFA_def_cfa_register:
3138           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3139           dw2_asm_output_data_uleb128 (r, NULL);
3140           break;
3141
3142         case DW_CFA_register:
3143           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3144           dw2_asm_output_data_uleb128 (r, NULL);
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           break;
3148
3149         case DW_CFA_def_cfa_offset:
3150         case DW_CFA_GNU_args_size:
3151           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3152           break;
3153
3154         case DW_CFA_def_cfa_offset_sf:
3155           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3156           dw2_asm_output_data_sleb128 (off, NULL);
3157           break;
3158
3159         case DW_CFA_GNU_window_save:
3160           break;
3161
3162         case DW_CFA_def_cfa_expression:
3163         case DW_CFA_expression:
3164           output_cfa_loc (cfi);
3165           break;
3166
3167         case DW_CFA_GNU_negative_offset_extended:
3168           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3169           gcc_unreachable ();
3170
3171         default:
3172           break;
3173         }
3174     }
3175 }
3176
3177 /* Similar, but do it via assembler directives instead.  */
3178
3179 static void
3180 output_cfi_directive (dw_cfi_ref cfi)
3181 {
3182   unsigned long r, r2;
3183
3184   switch (cfi->dw_cfi_opc)
3185     {
3186     case DW_CFA_advance_loc:
3187     case DW_CFA_advance_loc1:
3188     case DW_CFA_advance_loc2:
3189     case DW_CFA_advance_loc4:
3190     case DW_CFA_MIPS_advance_loc8:
3191     case DW_CFA_set_loc:
3192       /* Should only be created by add_fde_cfi in a code path not
3193          followed when emitting via directives.  The assembler is
3194          going to take care of this for us.  */
3195       gcc_unreachable ();
3196
3197     case DW_CFA_offset:
3198     case DW_CFA_offset_extended:
3199     case DW_CFA_offset_extended_sf:
3200       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3201       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3202                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3203       break;
3204
3205     case DW_CFA_restore:
3206     case DW_CFA_restore_extended:
3207       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3209       break;
3210
3211     case DW_CFA_undefined:
3212       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3213       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3214       break;
3215
3216     case DW_CFA_same_value:
3217       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3218       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3219       break;
3220
3221     case DW_CFA_def_cfa:
3222     case DW_CFA_def_cfa_sf:
3223       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3224       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3225                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3226       break;
3227
3228     case DW_CFA_def_cfa_register:
3229       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3230       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3231       break;
3232
3233     case DW_CFA_register:
3234       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3235       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3236       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3237       break;
3238
3239     case DW_CFA_def_cfa_offset:
3240     case DW_CFA_def_cfa_offset_sf:
3241       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3242                HOST_WIDE_INT_PRINT_DEC"\n",
3243                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3244       break;
3245
3246     case DW_CFA_remember_state:
3247       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3248       break;
3249     case DW_CFA_restore_state:
3250       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3251       break;
3252
3253     case DW_CFA_GNU_args_size:
3254       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3255       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3256       if (flag_debug_asm)
3257         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3258                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3259       fputc ('\n', asm_out_file);
3260       break;
3261
3262     case DW_CFA_GNU_window_save:
3263       fprintf (asm_out_file, "\t.cfi_window_save\n");
3264       break;
3265
3266     case DW_CFA_def_cfa_expression:
3267     case DW_CFA_expression:
3268       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3269       output_cfa_loc_raw (cfi);
3270       fputc ('\n', asm_out_file);
3271       break;
3272
3273     default:
3274       gcc_unreachable ();
3275     }
3276 }
3277
3278 DEF_VEC_P (dw_cfi_ref);
3279 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3280
3281 /* Output CFIs to bring current FDE to the same state as after executing
3282    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3283    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3284    other arguments to pass to output_cfi.  */
3285
3286 static void
3287 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3288 {
3289   struct dw_cfi_struct cfi_buf;
3290   dw_cfi_ref cfi2;
3291   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3292   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3293   unsigned int len, idx;
3294
3295   for (;; cfi = cfi->dw_cfi_next)
3296     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3297       {
3298       case DW_CFA_advance_loc:
3299       case DW_CFA_advance_loc1:
3300       case DW_CFA_advance_loc2:
3301       case DW_CFA_advance_loc4:
3302       case DW_CFA_MIPS_advance_loc8:
3303       case DW_CFA_set_loc:
3304         /* All advances should be ignored.  */
3305         break;
3306       case DW_CFA_remember_state:
3307         {
3308           dw_cfi_ref args_size = cfi_args_size;
3309
3310           /* Skip everything between .cfi_remember_state and
3311              .cfi_restore_state.  */
3312           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3313             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3314               break;
3315             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3316               args_size = cfi2;
3317             else
3318               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3319
3320           if (cfi2 == NULL)
3321             goto flush_all;
3322           else
3323             {
3324               cfi = cfi2;
3325               cfi_args_size = args_size;
3326             }
3327           break;
3328         }
3329       case DW_CFA_GNU_args_size:
3330         cfi_args_size = cfi;
3331         break;
3332       case DW_CFA_GNU_window_save:
3333         goto flush_all;
3334       case DW_CFA_offset:
3335       case DW_CFA_offset_extended:
3336       case DW_CFA_offset_extended_sf:
3337       case DW_CFA_restore:
3338       case DW_CFA_restore_extended:
3339       case DW_CFA_undefined:
3340       case DW_CFA_same_value:
3341       case DW_CFA_register:
3342       case DW_CFA_val_offset:
3343       case DW_CFA_val_offset_sf:
3344       case DW_CFA_expression:
3345       case DW_CFA_val_expression:
3346       case DW_CFA_GNU_negative_offset_extended:
3347         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3348           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3349                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3350         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3351         break;
3352       case DW_CFA_def_cfa:
3353       case DW_CFA_def_cfa_sf:
3354       case DW_CFA_def_cfa_expression:
3355         cfi_cfa = cfi;
3356         cfi_cfa_offset = cfi;
3357         break;
3358       case DW_CFA_def_cfa_register:
3359         cfi_cfa = cfi;
3360         break;
3361       case DW_CFA_def_cfa_offset:
3362       case DW_CFA_def_cfa_offset_sf:
3363         cfi_cfa_offset = cfi;
3364         break;
3365       case DW_CFA_nop:
3366         gcc_assert (cfi == NULL);
3367       flush_all:
3368         len = VEC_length (dw_cfi_ref, regs);
3369         for (idx = 0; idx < len; idx++)
3370           {
3371             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3372             if (cfi2 != NULL
3373                 && cfi2->dw_cfi_opc != DW_CFA_restore
3374                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3375               {
3376                 if (do_cfi_asm)
3377                   output_cfi_directive (cfi2);
3378                 else
3379                   output_cfi (cfi2, fde, for_eh);
3380               }
3381           }
3382         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3383           {
3384             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3385             cfi_buf = *cfi_cfa;
3386             switch (cfi_cfa_offset->dw_cfi_opc)
3387               {
3388               case DW_CFA_def_cfa_offset:
3389                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3390                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3391                 break;
3392               case DW_CFA_def_cfa_offset_sf:
3393                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3394                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3395                 break;
3396               case DW_CFA_def_cfa:
3397               case DW_CFA_def_cfa_sf:
3398                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3399                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3400                 break;
3401               default:
3402                 gcc_unreachable ();
3403               }
3404             cfi_cfa = &cfi_buf;
3405           }
3406         else if (cfi_cfa_offset)
3407           cfi_cfa = cfi_cfa_offset;
3408         if (cfi_cfa)
3409           {
3410             if (do_cfi_asm)
3411               output_cfi_directive (cfi_cfa);
3412             else
3413               output_cfi (cfi_cfa, fde, for_eh);
3414           }
3415         cfi_cfa = NULL;
3416         cfi_cfa_offset = NULL;
3417         if (cfi_args_size
3418             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3419           {
3420             if (do_cfi_asm)
3421               output_cfi_directive (cfi_args_size);
3422             else
3423               output_cfi (cfi_args_size, fde, for_eh);
3424           }
3425         cfi_args_size = NULL;
3426         if (cfi == NULL)
3427           {
3428             VEC_free (dw_cfi_ref, heap, regs);
3429             return;
3430           }
3431         else if (do_cfi_asm)
3432           output_cfi_directive (cfi);
3433         else
3434           output_cfi (cfi, fde, for_eh);
3435         break;
3436       default:
3437         gcc_unreachable ();
3438     }
3439 }
3440
3441 /* Output one FDE.  */
3442
3443 static void
3444 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3445             char *section_start_label, int fde_encoding, char *augmentation,
3446             bool any_lsda_needed, int lsda_encoding)
3447 {
3448   const char *begin, *end;
3449   static unsigned int j;
3450   char l1[20], l2[20];
3451   dw_cfi_ref cfi;
3452
3453   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3454                                 /* empty */ 0);
3455   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3456                                   for_eh + j);
3457   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3458   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3459   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3460     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3461                          " indicating 64-bit DWARF extension");
3462   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3463                         "FDE Length");
3464   ASM_OUTPUT_LABEL (asm_out_file, l1);
3465
3466   if (for_eh)
3467     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3468   else
3469     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3470                            debug_frame_section, "FDE CIE offset");
3471
3472   if (!fde->dw_fde_switched_sections)
3473     {
3474       begin = fde->dw_fde_begin;
3475       end = fde->dw_fde_end;
3476     }
3477   else
3478     {
3479       /* For the first section, prefer dw_fde_begin over
3480          dw_fde_{hot,cold}_section_label, as the latter
3481          might be separated from the real start of the
3482          function by alignment padding.  */
3483       if (!second)
3484         begin = fde->dw_fde_begin;
3485       else if (fde->dw_fde_switched_cold_to_hot)
3486         begin = fde->dw_fde_hot_section_label;
3487       else
3488         begin = fde->dw_fde_unlikely_section_label;
3489       if (second ^ fde->dw_fde_switched_cold_to_hot)
3490         end = fde->dw_fde_unlikely_section_end_label;
3491       else
3492         end = fde->dw_fde_hot_section_end_label;
3493     }
3494
3495   if (for_eh)
3496     {
3497       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3498       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3499       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3500                                        "FDE initial location");
3501       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3502                             end, begin, "FDE address range");
3503     }
3504   else
3505     {
3506       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3507       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3508     }
3509
3510   if (augmentation[0])
3511     {
3512       if (any_lsda_needed)
3513         {
3514           int size = size_of_encoded_value (lsda_encoding);
3515
3516           if (lsda_encoding == DW_EH_PE_aligned)
3517             {
3518               int offset = (  4         /* Length */
3519                             + 4         /* CIE offset */
3520                             + 2 * size_of_encoded_value (fde_encoding)
3521                             + 1         /* Augmentation size */ );
3522               int pad = -offset & (PTR_SIZE - 1);
3523
3524               size += pad;
3525               gcc_assert (size_of_uleb128 (size) == 1);
3526             }
3527
3528           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3529
3530           if (fde->uses_eh_lsda)
3531             {
3532               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3533                                            fde->funcdef_number);
3534               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3535                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3536                                                false,
3537                                                "Language Specific Data Area");
3538             }
3539           else
3540             {
3541               if (lsda_encoding == DW_EH_PE_aligned)
3542                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3543               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3544                                    "Language Specific Data Area (none)");
3545             }
3546         }
3547       else
3548         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3549     }
3550
3551   /* Loop through the Call Frame Instructions associated with
3552      this FDE.  */
3553   fde->dw_fde_current_label = begin;
3554   if (!fde->dw_fde_switched_sections)
3555     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3556       output_cfi (cfi, fde, for_eh);
3557   else if (!second)
3558     {
3559       if (fde->dw_fde_switch_cfi)
3560         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3561           {
3562             output_cfi (cfi, fde, for_eh);
3563             if (cfi == fde->dw_fde_switch_cfi)
3564               break;
3565           }
3566     }
3567   else
3568     {
3569       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3570
3571       if (fde->dw_fde_switch_cfi)
3572         {
3573           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3574           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3575           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3576           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3577         }
3578       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3579         output_cfi (cfi, fde, for_eh);
3580     }
3581
3582   /* If we are to emit a ref/link from function bodies to their frame tables,
3583      do it now.  This is typically performed to make sure that tables
3584      associated with functions are dragged with them and not discarded in
3585      garbage collecting links. We need to do this on a per function basis to
3586      cope with -ffunction-sections.  */
3587
3588 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3589   /* Switch to the function section, emit the ref to the tables, and
3590      switch *back* into the table section.  */
3591   switch_to_section (function_section (fde->decl));
3592   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3593   switch_to_frame_table_section (for_eh, true);
3594 #endif
3595
3596   /* Pad the FDE out to an address sized boundary.  */
3597   ASM_OUTPUT_ALIGN (asm_out_file,
3598                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3599   ASM_OUTPUT_LABEL (asm_out_file, l2);
3600
3601   j += 2;
3602 }
3603
3604 /* Output the call frame information used to record information
3605    that relates to calculating the frame pointer, and records the
3606    location of saved registers.  */
3607
3608 static void
3609 output_call_frame_info (int for_eh)
3610 {
3611   unsigned int i;
3612   dw_fde_ref fde;
3613   dw_cfi_ref cfi;
3614   char l1[20], l2[20], section_start_label[20];
3615   bool any_lsda_needed = false;
3616   char augmentation[6];
3617   int augmentation_size;
3618   int fde_encoding = DW_EH_PE_absptr;
3619   int per_encoding = DW_EH_PE_absptr;
3620   int lsda_encoding = DW_EH_PE_absptr;
3621   int return_reg;
3622   rtx personality = NULL;
3623   int dw_cie_version;
3624
3625   /* Don't emit a CIE if there won't be any FDEs.  */
3626   if (fde_table_in_use == 0)
3627     return;
3628
3629   /* Nothing to do if the assembler's doing it all.  */
3630   if (dwarf2out_do_cfi_asm ())
3631     return;
3632
3633   /* If we make FDEs linkonce, we may have to emit an empty label for
3634      an FDE that wouldn't otherwise be emitted.  We want to avoid
3635      having an FDE kept around when the function it refers to is
3636      discarded.  Example where this matters: a primary function
3637      template in C++ requires EH information, but an explicit
3638      specialization doesn't.  */
3639   if (TARGET_USES_WEAK_UNWIND_INFO
3640       && ! flag_asynchronous_unwind_tables
3641       && flag_exceptions
3642       && for_eh)
3643     for (i = 0; i < fde_table_in_use; i++)
3644       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3645           && !fde_table[i].uses_eh_lsda
3646           && ! DECL_WEAK (fde_table[i].decl))
3647         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3648                                       for_eh, /* empty */ 1);
3649
3650   /* If we don't have any functions we'll want to unwind out of, don't
3651      emit any EH unwind information.  Note that if exceptions aren't
3652      enabled, we won't have collected nothrow information, and if we
3653      asked for asynchronous tables, we always want this info.  */
3654   if (for_eh)
3655     {
3656       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3657
3658       for (i = 0; i < fde_table_in_use; i++)
3659         if (fde_table[i].uses_eh_lsda)
3660           any_eh_needed = any_lsda_needed = true;
3661         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3662           any_eh_needed = true;
3663         else if (! fde_table[i].nothrow
3664                  && ! fde_table[i].all_throwers_are_sibcalls)
3665           any_eh_needed = true;
3666
3667       if (! any_eh_needed)
3668         return;
3669     }
3670
3671   /* We're going to be generating comments, so turn on app.  */
3672   if (flag_debug_asm)
3673     app_enable ();
3674
3675   /* Switch to the proper frame section, first time.  */
3676   switch_to_frame_table_section (for_eh, false);
3677
3678   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3679   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3680
3681   /* Output the CIE.  */
3682   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3683   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3684   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3685     dw2_asm_output_data (4, 0xffffffff,
3686       "Initial length escape value indicating 64-bit DWARF extension");
3687   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3688                         "Length of Common Information Entry");
3689   ASM_OUTPUT_LABEL (asm_out_file, l1);
3690
3691   /* Now that the CIE pointer is PC-relative for EH,
3692      use 0 to identify the CIE.  */
3693   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3694                        (for_eh ? 0 : DWARF_CIE_ID),
3695                        "CIE Identifier Tag");
3696
3697   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3698      use CIE version 1, unless that would produce incorrect results
3699      due to overflowing the return register column.  */
3700   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3701   dw_cie_version = 1;
3702   if (return_reg >= 256 || dwarf_version > 2)
3703     dw_cie_version = 3;
3704   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3705
3706   augmentation[0] = 0;
3707   augmentation_size = 0;
3708
3709   personality = current_unit_personality;
3710   if (for_eh)
3711     {
3712       char *p;
3713
3714       /* Augmentation:
3715          z      Indicates that a uleb128 is present to size the
3716                 augmentation section.
3717          L      Indicates the encoding (and thus presence) of
3718                 an LSDA pointer in the FDE augmentation.
3719          R      Indicates a non-default pointer encoding for
3720                 FDE code pointers.
3721          P      Indicates the presence of an encoding + language
3722                 personality routine in the CIE augmentation.  */
3723
3724       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3725       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3726       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3727
3728       p = augmentation + 1;
3729       if (personality)
3730         {
3731           *p++ = 'P';
3732           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3733           assemble_external_libcall (personality);
3734         }
3735       if (any_lsda_needed)
3736         {
3737           *p++ = 'L';
3738           augmentation_size += 1;
3739         }
3740       if (fde_encoding != DW_EH_PE_absptr)
3741         {
3742           *p++ = 'R';
3743           augmentation_size += 1;
3744         }
3745       if (p > augmentation + 1)
3746         {
3747           augmentation[0] = 'z';
3748           *p = '\0';
3749         }
3750
3751       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3752       if (personality && per_encoding == DW_EH_PE_aligned)
3753         {
3754           int offset = (  4             /* Length */
3755                         + 4             /* CIE Id */
3756                         + 1             /* CIE version */
3757                         + strlen (augmentation) + 1     /* Augmentation */
3758                         + size_of_uleb128 (1)           /* Code alignment */
3759                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3760                         + 1             /* RA column */
3761                         + 1             /* Augmentation size */
3762                         + 1             /* Personality encoding */ );
3763           int pad = -offset & (PTR_SIZE - 1);
3764
3765           augmentation_size += pad;
3766
3767           /* Augmentations should be small, so there's scarce need to
3768              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3769           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3770         }
3771     }
3772
3773   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3774   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3775   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3776                                "CIE Data Alignment Factor");
3777
3778   if (dw_cie_version == 1)
3779     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3780   else
3781     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3782
3783   if (augmentation[0])
3784     {
3785       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3786       if (personality)
3787         {
3788           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3789                                eh_data_format_name (per_encoding));
3790           dw2_asm_output_encoded_addr_rtx (per_encoding,
3791                                            personality,
3792                                            true, NULL);
3793         }
3794
3795       if (any_lsda_needed)
3796         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3797                              eh_data_format_name (lsda_encoding));
3798
3799       if (fde_encoding != DW_EH_PE_absptr)
3800         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3801                              eh_data_format_name (fde_encoding));
3802     }
3803
3804   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3805     output_cfi (cfi, NULL, for_eh);
3806
3807   /* Pad the CIE out to an address sized boundary.  */
3808   ASM_OUTPUT_ALIGN (asm_out_file,
3809                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3810   ASM_OUTPUT_LABEL (asm_out_file, l2);
3811
3812   /* Loop through all of the FDE's.  */
3813   for (i = 0; i < fde_table_in_use; i++)
3814     {
3815       unsigned int k;
3816       fde = &fde_table[i];
3817
3818       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3819       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3820           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3821           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3822           && !fde->uses_eh_lsda)
3823         continue;
3824
3825       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3826         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3827                     augmentation, any_lsda_needed, lsda_encoding);
3828     }
3829
3830   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3831     dw2_asm_output_data (4, 0, "End of Table");
3832 #ifdef MIPS_DEBUGGING_INFO
3833   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3834      get a value of 0.  Putting .align 0 after the label fixes it.  */
3835   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3836 #endif
3837
3838   /* Turn off app to make assembly quicker.  */
3839   if (flag_debug_asm)
3840     app_disable ();
3841 }
3842
3843 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3844
3845 static void
3846 dwarf2out_do_cfi_startproc (bool second)
3847 {
3848   int enc;
3849   rtx ref;
3850   rtx personality = get_personality_function (current_function_decl);
3851
3852   fprintf (asm_out_file, "\t.cfi_startproc\n");
3853
3854   if (personality)
3855     {
3856       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3857       ref = personality;
3858
3859       /* ??? The GAS support isn't entirely consistent.  We have to
3860          handle indirect support ourselves, but PC-relative is done
3861          in the assembler.  Further, the assembler can't handle any
3862          of the weirder relocation types.  */
3863       if (enc & DW_EH_PE_indirect)
3864         ref = dw2_force_const_mem (ref, true);
3865
3866       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3867       output_addr_const (asm_out_file, ref);
3868       fputc ('\n', asm_out_file);
3869     }
3870
3871   if (crtl->uses_eh_lsda)
3872     {
3873       char lab[20];
3874
3875       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3876       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3877                                    current_function_funcdef_no);
3878       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3879       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3880
3881       if (enc & DW_EH_PE_indirect)
3882         ref = dw2_force_const_mem (ref, true);
3883
3884       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3885       output_addr_const (asm_out_file, ref);
3886       fputc ('\n', asm_out_file);
3887     }
3888 }
3889
3890 /* Output a marker (i.e. a label) for the beginning of a function, before
3891    the prologue.  */
3892
3893 void
3894 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3895                           const char *file ATTRIBUTE_UNUSED)
3896 {
3897   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3898   char * dup_label;
3899   dw_fde_ref fde;
3900   section *fnsec;
3901
3902   current_function_func_begin_label = NULL;
3903
3904 #ifdef TARGET_UNWIND_INFO
3905   /* ??? current_function_func_begin_label is also used by except.c
3906      for call-site information.  We must emit this label if it might
3907      be used.  */
3908   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3909       && ! dwarf2out_do_frame ())
3910     return;
3911 #else
3912   if (! dwarf2out_do_frame ())
3913     return;
3914 #endif
3915
3916   fnsec = function_section (current_function_decl);
3917   switch_to_section (fnsec);
3918   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3919                                current_function_funcdef_no);
3920   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3921                           current_function_funcdef_no);
3922   dup_label = xstrdup (label);
3923   current_function_func_begin_label = dup_label;
3924
3925 #ifdef TARGET_UNWIND_INFO
3926   /* We can elide the fde allocation if we're not emitting debug info.  */
3927   if (! dwarf2out_do_frame ())
3928     return;
3929 #endif
3930
3931   /* Expand the fde table if necessary.  */
3932   if (fde_table_in_use == fde_table_allocated)
3933     {
3934       fde_table_allocated += FDE_TABLE_INCREMENT;
3935       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3936       memset (fde_table + fde_table_in_use, 0,
3937               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3938     }
3939
3940   /* Record the FDE associated with this function.  */
3941   current_funcdef_fde = fde_table_in_use;
3942
3943   /* Add the new FDE at the end of the fde_table.  */
3944   fde = &fde_table[fde_table_in_use++];
3945   fde->decl = current_function_decl;
3946   fde->dw_fde_begin = dup_label;
3947   fde->dw_fde_current_label = dup_label;
3948   fde->dw_fde_hot_section_label = NULL;
3949   fde->dw_fde_hot_section_end_label = NULL;
3950   fde->dw_fde_unlikely_section_label = NULL;
3951   fde->dw_fde_unlikely_section_end_label = NULL;
3952   fde->dw_fde_switched_sections = 0;
3953   fde->dw_fde_switched_cold_to_hot = 0;
3954   fde->dw_fde_end = NULL;
3955   fde->dw_fde_cfi = NULL;
3956   fde->dw_fde_switch_cfi = NULL;
3957   fde->funcdef_number = current_function_funcdef_no;
3958   fde->nothrow = crtl->nothrow;
3959   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3960   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3961   fde->drap_reg = INVALID_REGNUM;
3962   fde->vdrap_reg = INVALID_REGNUM;
3963   if (flag_reorder_blocks_and_partition)
3964     {
3965       section *unlikelysec;
3966       if (first_function_block_is_cold)
3967         fde->in_std_section = 1;
3968       else
3969         fde->in_std_section
3970           = (fnsec == text_section
3971              || (cold_text_section && fnsec == cold_text_section));
3972       unlikelysec = unlikely_text_section ();
3973       fde->cold_in_std_section
3974         = (unlikelysec == text_section
3975            || (cold_text_section && unlikelysec == cold_text_section));
3976     }
3977   else
3978     {
3979       fde->in_std_section
3980         = (fnsec == text_section
3981            || (cold_text_section && fnsec == cold_text_section));
3982       fde->cold_in_std_section = 0;
3983     }
3984
3985   args_size = old_args_size = 0;
3986
3987   /* We only want to output line number information for the genuine dwarf2
3988      prologue case, not the eh frame case.  */
3989 #ifdef DWARF2_DEBUGGING_INFO
3990   if (file)
3991     dwarf2out_source_line (line, file, 0, true);
3992 #endif
3993
3994   if (dwarf2out_do_cfi_asm ())
3995     dwarf2out_do_cfi_startproc (false);
3996   else
3997     {
3998       rtx personality = get_personality_function (current_function_decl);
3999       if (!current_unit_personality)
4000         current_unit_personality = personality;
4001
4002       /* We cannot keep a current personality per function as without CFI
4003          asm at the point where we emit the CFI data there is no current
4004          function anymore.  */
4005       if (personality
4006           && current_unit_personality != personality)
4007         sorry ("Multiple EH personalities are supported only with assemblers "
4008                "supporting .cfi.personality directive.");
4009     }
4010 }
4011
4012 /* Output a marker (i.e. a label) for the absolute end of the generated code
4013    for a function definition.  This gets called *after* the epilogue code has
4014    been generated.  */
4015
4016 void
4017 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4018                         const char *file ATTRIBUTE_UNUSED)
4019 {
4020   dw_fde_ref fde;
4021   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4022
4023 #ifdef DWARF2_DEBUGGING_INFO
4024   last_var_location_insn = NULL_RTX;
4025 #endif
4026
4027   if (dwarf2out_do_cfi_asm ())
4028     fprintf (asm_out_file, "\t.cfi_endproc\n");
4029
4030   /* Output a label to mark the endpoint of the code generated for this
4031      function.  */
4032   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4033                                current_function_funcdef_no);
4034   ASM_OUTPUT_LABEL (asm_out_file, label);
4035   fde = current_fde ();
4036   gcc_assert (fde != NULL);
4037   fde->dw_fde_end = xstrdup (label);
4038 }
4039
4040 void
4041 dwarf2out_frame_init (void)
4042 {
4043   /* Allocate the initial hunk of the fde_table.  */
4044   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4045   fde_table_allocated = FDE_TABLE_INCREMENT;
4046   fde_table_in_use = 0;
4047
4048   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4049      sake of lookup_cfa.  */
4050
4051   /* On entry, the Canonical Frame Address is at SP.  */
4052   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4053
4054 #ifdef DWARF2_UNWIND_INFO
4055   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4056     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4057 #endif
4058 }
4059
4060 void
4061 dwarf2out_frame_finish (void)
4062 {
4063   /* Output call frame information.  */
4064   if (DWARF2_FRAME_INFO)
4065     output_call_frame_info (0);
4066
4067 #ifndef TARGET_UNWIND_INFO
4068   /* Output another copy for the unwinder.  */
4069   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4070     output_call_frame_info (1);
4071 #endif
4072 }
4073
4074 /* Note that the current function section is being used for code.  */
4075
4076 static void
4077 dwarf2out_note_section_used (void)
4078 {
4079   section *sec = current_function_section ();
4080   if (sec == text_section)
4081     text_section_used = true;
4082   else if (sec == cold_text_section)
4083     cold_text_section_used = true;
4084 }
4085
4086 void
4087 dwarf2out_switch_text_section (void)
4088 {
4089   dw_fde_ref fde = current_fde ();
4090
4091   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4092
4093   fde->dw_fde_switched_sections = 1;
4094   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4095
4096   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4097   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4098   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4099   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4100   have_multiple_function_sections = true;
4101
4102   /* Reset the current label on switching text sections, so that we
4103      don't attempt to advance_loc4 between labels in different sections.  */
4104   fde->dw_fde_current_label = NULL;
4105
4106   /* There is no need to mark used sections when not debugging.  */
4107   if (cold_text_section != NULL)
4108     dwarf2out_note_section_used ();
4109
4110   if (dwarf2out_do_cfi_asm ())
4111     fprintf (asm_out_file, "\t.cfi_endproc\n");
4112
4113   /* Now do the real section switch.  */
4114   switch_to_section (current_function_section ());
4115
4116   if (dwarf2out_do_cfi_asm ())
4117     {
4118       dwarf2out_do_cfi_startproc (true);
4119       /* As this is a different FDE, insert all current CFI instructions
4120          again.  */
4121       output_cfis (fde->dw_fde_cfi, true, fde, true);
4122     }
4123   else
4124     {
4125       dw_cfi_ref cfi = fde->dw_fde_cfi;
4126
4127       cfi = fde->dw_fde_cfi;
4128       if (cfi)
4129         while (cfi->dw_cfi_next != NULL)
4130           cfi = cfi->dw_cfi_next;
4131       fde->dw_fde_switch_cfi = cfi;
4132     }
4133 }
4134 #endif
4135 \f
4136 /* And now, the subset of the debugging information support code necessary
4137    for emitting location expressions.  */
4138
4139 /* Data about a single source file.  */
4140 struct GTY(()) dwarf_file_data {
4141   const char * filename;
4142   int emitted_number;
4143 };
4144
4145 typedef struct dw_val_struct *dw_val_ref;
4146 typedef struct die_struct *dw_die_ref;
4147 typedef const struct die_struct *const_dw_die_ref;
4148 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4149 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4150
4151 typedef struct GTY(()) deferred_locations_struct
4152 {
4153   tree variable;
4154   dw_die_ref die;
4155 } deferred_locations;
4156
4157 DEF_VEC_O(deferred_locations);
4158 DEF_VEC_ALLOC_O(deferred_locations,gc);
4159
4160 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4161
4162 DEF_VEC_P(dw_die_ref);
4163 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4164
4165 /* Each DIE may have a series of attribute/value pairs.  Values
4166    can take on several forms.  The forms that are used in this
4167    implementation are listed below.  */
4168
4169 enum dw_val_class
4170 {
4171   dw_val_class_addr,
4172   dw_val_class_offset,
4173   dw_val_class_loc,
4174   dw_val_class_loc_list,
4175   dw_val_class_range_list,
4176   dw_val_class_const,
4177   dw_val_class_unsigned_const,
4178   dw_val_class_const_double,
4179   dw_val_class_vec,
4180   dw_val_class_flag,
4181   dw_val_class_die_ref,
4182   dw_val_class_fde_ref,
4183   dw_val_class_lbl_id,
4184   dw_val_class_lineptr,
4185   dw_val_class_str,
4186   dw_val_class_macptr,
4187   dw_val_class_file,
4188   dw_val_class_data8
4189 };
4190
4191 /* Describe a floating point constant value, or a vector constant value.  */
4192
4193 typedef struct GTY(()) dw_vec_struct {
4194   unsigned char * GTY((length ("%h.length"))) array;
4195   unsigned length;
4196   unsigned elt_size;
4197 }
4198 dw_vec_const;
4199
4200 /* The dw_val_node describes an attribute's value, as it is
4201    represented internally.  */
4202
4203 typedef struct GTY(()) dw_val_struct {
4204   enum dw_val_class val_class;
4205   union dw_val_struct_union
4206     {
4207       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4208       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4209       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4210       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4211       HOST_WIDE_INT GTY ((default)) val_int;
4212       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4213       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4214       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4215       struct dw_val_die_union
4216         {
4217           dw_die_ref die;
4218           int external;
4219         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4220       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4221       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4222       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4223       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4224       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4225       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4226     }
4227   GTY ((desc ("%1.val_class"))) v;
4228 }
4229 dw_val_node;
4230
4231 /* Locations in memory are described using a sequence of stack machine
4232    operations.  */
4233
4234 typedef struct GTY(()) dw_loc_descr_struct {
4235   dw_loc_descr_ref dw_loc_next;
4236   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4237   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4238      from DW_OP_addr with a dtp-relative symbol relocation.  */
4239   unsigned int dtprel : 1;
4240   int dw_loc_addr;
4241   dw_val_node dw_loc_oprnd1;
4242   dw_val_node dw_loc_oprnd2;
4243 }
4244 dw_loc_descr_node;
4245
4246 /* Location lists are ranges + location descriptions for that range,
4247    so you can track variables that are in different places over
4248    their entire life.  */
4249 typedef struct GTY(()) dw_loc_list_struct {
4250   dw_loc_list_ref dw_loc_next;
4251   const char *begin; /* Label for begin address of range */
4252   const char *end;  /* Label for end address of range */
4253   char *ll_symbol; /* Label for beginning of location list.
4254                       Only on head of list */
4255   const char *section; /* Section this loclist is relative to */
4256   dw_loc_descr_ref expr;
4257 } dw_loc_list_node;
4258
4259 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4260
4261 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4262
4263 /* Convert a DWARF stack opcode into its string name.  */
4264
4265 static const char *
4266 dwarf_stack_op_name (unsigned int op)
4267 {
4268   switch (op)
4269     {
4270     case DW_OP_addr:
4271       return "DW_OP_addr";
4272     case DW_OP_deref:
4273       return "DW_OP_deref";
4274     case DW_OP_const1u:
4275       return "DW_OP_const1u";
4276     case DW_OP_const1s:
4277       return "DW_OP_const1s";
4278     case DW_OP_const2u:
4279       return "DW_OP_const2u";
4280     case DW_OP_const2s:
4281       return "DW_OP_const2s";
4282     case DW_OP_const4u:
4283       return "DW_OP_const4u";
4284     case DW_OP_const4s:
4285       return "DW_OP_const4s";
4286     case DW_OP_const8u:
4287       return "DW_OP_const8u";
4288     case DW_OP_const8s:
4289       return "DW_OP_const8s";
4290     case DW_OP_constu:
4291       return "DW_OP_constu";
4292     case DW_OP_consts:
4293       return "DW_OP_consts";
4294     case DW_OP_dup:
4295       return "DW_OP_dup";
4296     case DW_OP_drop:
4297       return "DW_OP_drop";
4298     case DW_OP_over:
4299       return "DW_OP_over";
4300     case DW_OP_pick:
4301       return "DW_OP_pick";
4302     case DW_OP_swap:
4303       return "DW_OP_swap";
4304     case DW_OP_rot:
4305       return "DW_OP_rot";
4306     case DW_OP_xderef:
4307       return "DW_OP_xderef";
4308     case DW_OP_abs:
4309       return "DW_OP_abs";
4310     case DW_OP_and:
4311       return "DW_OP_and";
4312     case DW_OP_div:
4313       return "DW_OP_div";
4314     case DW_OP_minus:
4315       return "DW_OP_minus";
4316     case DW_OP_mod:
4317       return "DW_OP_mod";
4318     case DW_OP_mul:
4319       return "DW_OP_mul";
4320     case DW_OP_neg:
4321       return "DW_OP_neg";
4322     case DW_OP_not:
4323       return "DW_OP_not";
4324     case DW_OP_or:
4325       return "DW_OP_or";
4326     case DW_OP_plus:
4327       return "DW_OP_plus";
4328     case DW_OP_plus_uconst:
4329       return "DW_OP_plus_uconst";
4330     case DW_OP_shl:
4331       return "DW_OP_shl";
4332     case DW_OP_shr:
4333       return "DW_OP_shr";
4334     case DW_OP_shra:
4335       return "DW_OP_shra";
4336     case DW_OP_xor:
4337       return "DW_OP_xor";
4338     case DW_OP_bra:
4339       return "DW_OP_bra";
4340     case DW_OP_eq:
4341       return "DW_OP_eq";
4342     case DW_OP_ge:
4343       return "DW_OP_ge";
4344     case DW_OP_gt:
4345       return "DW_OP_gt";
4346     case DW_OP_le:
4347       return "DW_OP_le";
4348     case DW_OP_lt:
4349       return "DW_OP_lt";
4350     case DW_OP_ne:
4351       return "DW_OP_ne";
4352     case DW_OP_skip:
4353       return "DW_OP_skip";
4354     case DW_OP_lit0:
4355       return "DW_OP_lit0";
4356     case DW_OP_lit1:
4357       return "DW_OP_lit1";
4358     case DW_OP_lit2:
4359       return "DW_OP_lit2";
4360     case DW_OP_lit3:
4361       return "DW_OP_lit3";
4362     case DW_OP_lit4:
4363       return "DW_OP_lit4";
4364     case DW_OP_lit5:
4365       return "DW_OP_lit5";
4366     case DW_OP_lit6:
4367       return "DW_OP_lit6";
4368     case DW_OP_lit7:
4369       return "DW_OP_lit7";
4370     case DW_OP_lit8:
4371       return "DW_OP_lit8";
4372     case DW_OP_lit9:
4373       return "DW_OP_lit9";
4374     case DW_OP_lit10:
4375       return "DW_OP_lit10";
4376     case DW_OP_lit11:
4377       return "DW_OP_lit11";
4378     case DW_OP_lit12:
4379       return "DW_OP_lit12";
4380     case DW_OP_lit13:
4381       return "DW_OP_lit13";
4382     case DW_OP_lit14:
4383       return "DW_OP_lit14";
4384     case DW_OP_lit15:
4385       return "DW_OP_lit15";
4386     case DW_OP_lit16:
4387       return "DW_OP_lit16";
4388     case DW_OP_lit17:
4389       return "DW_OP_lit17";
4390     case DW_OP_lit18:
4391       return "DW_OP_lit18";
4392     case DW_OP_lit19:
4393       return "DW_OP_lit19";
4394     case DW_OP_lit20:
4395       return "DW_OP_lit20";
4396     case DW_OP_lit21:
4397       return "DW_OP_lit21";
4398     case DW_OP_lit22:
4399       return "DW_OP_lit22";
4400     case DW_OP_lit23:
4401       return "DW_OP_lit23";
4402     case DW_OP_lit24:
4403       return "DW_OP_lit24";
4404     case DW_OP_lit25:
4405       return "DW_OP_lit25";
4406     case DW_OP_lit26:
4407       return "DW_OP_lit26";
4408     case DW_OP_lit27:
4409       return "DW_OP_lit27";
4410     case DW_OP_lit28:
4411       return "DW_OP_lit28";
4412     case DW_OP_lit29:
4413       return "DW_OP_lit29";
4414     case DW_OP_lit30:
4415       return "DW_OP_lit30";
4416     case DW_OP_lit31:
4417       return "DW_OP_lit31";
4418     case DW_OP_reg0:
4419       return "DW_OP_reg0";
4420     case DW_OP_reg1:
4421       return "DW_OP_reg1";
4422     case DW_OP_reg2:
4423       return "DW_OP_reg2";
4424     case DW_OP_reg3:
4425       return "DW_OP_reg3";
4426     case DW_OP_reg4:
4427       return "DW_OP_reg4";
4428     case DW_OP_reg5:
4429       return "DW_OP_reg5";
4430     case DW_OP_reg6:
4431       return "DW_OP_reg6";
4432     case DW_OP_reg7:
4433       return "DW_OP_reg7";
4434     case DW_OP_reg8:
4435       return "DW_OP_reg8";
4436     case DW_OP_reg9:
4437       return "DW_OP_reg9";
4438     case DW_OP_reg10:
4439       return "DW_OP_reg10";
4440     case DW_OP_reg11:
4441       return "DW_OP_reg11";
4442     case DW_OP_reg12:
4443       return "DW_OP_reg12";
4444     case DW_OP_reg13:
4445       return "DW_OP_reg13";
4446     case DW_OP_reg14:
4447       return "DW_OP_reg14";
4448     case DW_OP_reg15:
4449       return "DW_OP_reg15";
4450     case DW_OP_reg16:
4451       return "DW_OP_reg16";
4452     case DW_OP_reg17:
4453       return "DW_OP_reg17";
4454     case DW_OP_reg18:
4455       return "DW_OP_reg18";
4456     case DW_OP_reg19:
4457       return "DW_OP_reg19";
4458     case DW_OP_reg20:
4459       return "DW_OP_reg20";
4460     case DW_OP_reg21:
4461       return "DW_OP_reg21";
4462     case DW_OP_reg22:
4463       return "DW_OP_reg22";
4464     case DW_OP_reg23:
4465       return "DW_OP_reg23";
4466     case DW_OP_reg24:
4467       return "DW_OP_reg24";
4468     case DW_OP_reg25:
4469       return "DW_OP_reg25";
4470     case DW_OP_reg26:
4471       return "DW_OP_reg26";
4472     case DW_OP_reg27:
4473       return "DW_OP_reg27";
4474     case DW_OP_reg28:
4475       return "DW_OP_reg28";
4476     case DW_OP_reg29:
4477       return "DW_OP_reg29";
4478     case DW_OP_reg30:
4479       return "DW_OP_reg30";
4480     case DW_OP_reg31:
4481       return "DW_OP_reg31";
4482     case DW_OP_breg0:
4483       return "DW_OP_breg0";
4484     case DW_OP_breg1:
4485       return "DW_OP_breg1";
4486     case DW_OP_breg2:
4487       return "DW_OP_breg2";
4488     case DW_OP_breg3:
4489       return "DW_OP_breg3";
4490     case DW_OP_breg4:
4491       return "DW_OP_breg4";
4492     case DW_OP_breg5:
4493       return "DW_OP_breg5";
4494     case DW_OP_breg6:
4495       return "DW_OP_breg6";
4496     case DW_OP_breg7:
4497       return "DW_OP_breg7";
4498     case DW_OP_breg8:
4499       return "DW_OP_breg8";
4500     case DW_OP_breg9:
4501       return "DW_OP_breg9";
4502     case DW_OP_breg10:
4503       return "DW_OP_breg10";
4504     case DW_OP_breg11:
4505       return "DW_OP_breg11";
4506     case DW_OP_breg12:
4507       return "DW_OP_breg12";
4508     case DW_OP_breg13:
4509       return "DW_OP_breg13";
4510     case DW_OP_breg14:
4511       return "DW_OP_breg14";
4512     case DW_OP_breg15:
4513       return "DW_OP_breg15";
4514     case DW_OP_breg16:
4515       return "DW_OP_breg16";
4516     case DW_OP_breg17:
4517       return "DW_OP_breg17";
4518     case DW_OP_breg18:
4519       return "DW_OP_breg18";
4520     case DW_OP_breg19:
4521       return "DW_OP_breg19";
4522     case DW_OP_breg20:
4523       return "DW_OP_breg20";
4524     case DW_OP_breg21:
4525       return "DW_OP_breg21";
4526     case DW_OP_breg22:
4527       return "DW_OP_breg22";
4528     case DW_OP_breg23:
4529       return "DW_OP_breg23";
4530     case DW_OP_breg24:
4531       return "DW_OP_breg24";
4532     case DW_OP_breg25:
4533       return "DW_OP_breg25";
4534     case DW_OP_breg26:
4535       return "DW_OP_breg26";
4536     case DW_OP_breg27:
4537       return "DW_OP_breg27";
4538     case DW_OP_breg28:
4539       return "DW_OP_breg28";
4540     case DW_OP_breg29:
4541       return "DW_OP_breg29";
4542     case DW_OP_breg30:
4543       return "DW_OP_breg30";
4544     case DW_OP_breg31:
4545       return "DW_OP_breg31";
4546     case DW_OP_regx:
4547       return "DW_OP_regx";
4548     case DW_OP_fbreg:
4549       return "DW_OP_fbreg";
4550     case DW_OP_bregx:
4551       return "DW_OP_bregx";
4552     case DW_OP_piece:
4553       return "DW_OP_piece";
4554     case DW_OP_deref_size:
4555       return "DW_OP_deref_size";
4556     case DW_OP_xderef_size:
4557       return "DW_OP_xderef_size";
4558     case DW_OP_nop:
4559       return "DW_OP_nop";
4560
4561     case DW_OP_push_object_address:
4562       return "DW_OP_push_object_address";
4563     case DW_OP_call2:
4564       return "DW_OP_call2";
4565     case DW_OP_call4:
4566       return "DW_OP_call4";
4567     case DW_OP_call_ref:
4568       return "DW_OP_call_ref";
4569     case DW_OP_implicit_value:
4570       return "DW_OP_implicit_value";
4571     case DW_OP_stack_value:
4572       return "DW_OP_stack_value";
4573     case DW_OP_form_tls_address:
4574       return "DW_OP_form_tls_address";
4575     case DW_OP_call_frame_cfa:
4576       return "DW_OP_call_frame_cfa";
4577     case DW_OP_bit_piece:
4578       return "DW_OP_bit_piece";
4579
4580     case DW_OP_GNU_push_tls_address:
4581       return "DW_OP_GNU_push_tls_address";
4582     case DW_OP_GNU_uninit:
4583       return "DW_OP_GNU_uninit";
4584     case DW_OP_GNU_encoded_addr:
4585       return "DW_OP_GNU_encoded_addr";
4586
4587     default:
4588       return "OP_<unknown>";
4589     }
4590 }
4591
4592 /* Return a pointer to a newly allocated location description.  Location
4593    descriptions are simple expression terms that can be strung
4594    together to form more complicated location (address) descriptions.  */
4595
4596 static inline dw_loc_descr_ref
4597 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4598                unsigned HOST_WIDE_INT oprnd2)
4599 {
4600   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4601
4602   descr->dw_loc_opc = op;
4603   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4604   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4605   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4606   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4607
4608   return descr;
4609 }
4610
4611 /* Return a pointer to a newly allocated location description for
4612    REG and OFFSET.  */
4613
4614 static inline dw_loc_descr_ref
4615 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4616 {
4617   if (reg <= 31)
4618     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4619                           offset, 0);
4620   else
4621     return new_loc_descr (DW_OP_bregx, reg, offset);
4622 }
4623
4624 /* Add a location description term to a location description expression.  */
4625
4626 static inline void
4627 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4628 {
4629   dw_loc_descr_ref *d;
4630
4631   /* Find the end of the chain.  */
4632   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4633     ;
4634
4635   *d = descr;
4636 }
4637
4638 /* Add a constant OFFSET to a location expression.  */
4639
4640 static void
4641 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4642 {
4643   dw_loc_descr_ref loc;
4644   HOST_WIDE_INT *p;
4645
4646   gcc_assert (*list_head != NULL);
4647
4648   if (!offset)
4649     return;
4650
4651   /* Find the end of the chain.  */
4652   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4653     ;
4654
4655   p = NULL;
4656   if (loc->dw_loc_opc == DW_OP_fbreg
4657       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4658     p = &loc->dw_loc_oprnd1.v.val_int;
4659   else if (loc->dw_loc_opc == DW_OP_bregx)
4660     p = &loc->dw_loc_oprnd2.v.val_int;
4661
4662   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4663      offset.  Don't optimize if an signed integer overflow would happen.  */
4664   if (p != NULL
4665       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4666           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4667     *p += offset;
4668
4669   else if (offset > 0)
4670     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4671
4672   else
4673     {
4674       loc->dw_loc_next = int_loc_descriptor (offset);
4675       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4676     }
4677 }
4678
4679 #ifdef DWARF2_DEBUGGING_INFO
4680 /* Add a constant OFFSET to a location list.  */
4681
4682 static void
4683 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4684 {
4685   dw_loc_list_ref d;
4686   for (d = list_head; d != NULL; d = d->dw_loc_next)
4687     loc_descr_plus_const (&d->expr, offset);
4688 }
4689 #endif
4690
4691 /* Return the size of a location descriptor.  */
4692
4693 static unsigned long
4694 size_of_loc_descr (dw_loc_descr_ref loc)
4695 {
4696   unsigned long size = 1;
4697
4698   switch (loc->dw_loc_opc)
4699     {
4700     case DW_OP_addr:
4701       size += DWARF2_ADDR_SIZE;
4702       break;
4703     case DW_OP_const1u:
4704     case DW_OP_const1s:
4705       size += 1;
4706       break;
4707     case DW_OP_const2u:
4708     case DW_OP_const2s:
4709       size += 2;
4710       break;
4711     case DW_OP_const4u:
4712     case DW_OP_const4s:
4713       size += 4;
4714       break;
4715     case DW_OP_const8u:
4716     case DW_OP_const8s:
4717       size += 8;
4718       break;
4719     case DW_OP_constu:
4720       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4721       break;
4722     case DW_OP_consts:
4723       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4724       break;
4725     case DW_OP_pick:
4726       size += 1;
4727       break;
4728     case DW_OP_plus_uconst:
4729       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4730       break;
4731     case DW_OP_skip:
4732     case DW_OP_bra:
4733       size += 2;
4734       break;
4735     case DW_OP_breg0:
4736     case DW_OP_breg1:
4737     case DW_OP_breg2:
4738     case DW_OP_breg3:
4739     case DW_OP_breg4:
4740     case DW_OP_breg5:
4741     case DW_OP_breg6:
4742     case DW_OP_breg7:
4743     case DW_OP_breg8:
4744     case DW_OP_breg9:
4745     case DW_OP_breg10:
4746     case DW_OP_breg11:
4747     case DW_OP_breg12:
4748     case DW_OP_breg13:
4749     case DW_OP_breg14:
4750     case DW_OP_breg15:
4751     case DW_OP_breg16:
4752     case DW_OP_breg17:
4753     case DW_OP_breg18:
4754     case DW_OP_breg19:
4755     case DW_OP_breg20:
4756     case DW_OP_breg21:
4757     case DW_OP_breg22:
4758     case DW_OP_breg23:
4759     case DW_OP_breg24:
4760     case DW_OP_breg25:
4761     case DW_OP_breg26:
4762     case DW_OP_breg27:
4763     case DW_OP_breg28:
4764     case DW_OP_breg29:
4765     case DW_OP_breg30:
4766     case DW_OP_breg31:
4767       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4768       break;
4769     case DW_OP_regx:
4770       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4771       break;
4772     case DW_OP_fbreg:
4773       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4774       break;
4775     case DW_OP_bregx:
4776       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4777       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4778       break;
4779     case DW_OP_piece:
4780       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4781       break;
4782     case DW_OP_deref_size:
4783     case DW_OP_xderef_size:
4784       size += 1;
4785       break;
4786     case DW_OP_call2:
4787       size += 2;
4788       break;
4789     case DW_OP_call4:
4790       size += 4;
4791       break;
4792     case DW_OP_call_ref:
4793       size += DWARF2_ADDR_SIZE;
4794       break;
4795     case DW_OP_implicit_value:
4796       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4797               + loc->dw_loc_oprnd1.v.val_unsigned;
4798       break;
4799     default:
4800       break;
4801     }
4802
4803   return size;
4804 }
4805
4806 /* Return the size of a series of location descriptors.  */
4807
4808 static unsigned long
4809 size_of_locs (dw_loc_descr_ref loc)
4810 {
4811   dw_loc_descr_ref l;
4812   unsigned long size;
4813
4814   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4815      field, to avoid writing to a PCH file.  */
4816   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4817     {
4818       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4819         break;
4820       size += size_of_loc_descr (l);
4821     }
4822   if (! l)
4823     return size;
4824
4825   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4826     {
4827       l->dw_loc_addr = size;
4828       size += size_of_loc_descr (l);
4829     }
4830
4831   return size;
4832 }
4833
4834 #ifdef DWARF2_DEBUGGING_INFO
4835 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4836 #endif
4837
4838 /* Output location description stack opcode's operands (if any).  */
4839
4840 static void
4841 output_loc_operands (dw_loc_descr_ref loc)
4842 {
4843   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4844   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4845
4846   switch (loc->dw_loc_opc)
4847     {
4848 #ifdef DWARF2_DEBUGGING_INFO
4849     case DW_OP_const2u:
4850     case DW_OP_const2s:
4851       dw2_asm_output_data (2, val1->v.val_int, NULL);
4852       break;
4853     case DW_OP_const4u:
4854     case DW_OP_const4s:
4855       dw2_asm_output_data (4, val1->v.val_int, NULL);
4856       break;
4857     case DW_OP_const8u:
4858     case DW_OP_const8s:
4859       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4860       dw2_asm_output_data (8, val1->v.val_int, NULL);
4861       break;
4862     case DW_OP_skip:
4863     case DW_OP_bra:
4864       {
4865         int offset;
4866
4867         gcc_assert (val1->val_class == dw_val_class_loc);
4868         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4869
4870         dw2_asm_output_data (2, offset, NULL);
4871       }
4872       break;
4873     case DW_OP_implicit_value:
4874       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4875       switch (val2->val_class)
4876         {
4877         case dw_val_class_const:
4878           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4879           break;
4880         case dw_val_class_vec:
4881           {
4882             unsigned int elt_size = val2->v.val_vec.elt_size;
4883             unsigned int len = val2->v.val_vec.length;
4884             unsigned int i;
4885             unsigned char *p;
4886
4887             if (elt_size > sizeof (HOST_WIDE_INT))
4888               {
4889                 elt_size /= 2;
4890                 len *= 2;
4891               }
4892             for (i = 0, p = val2->v.val_vec.array;
4893                  i < len;
4894                  i++, p += elt_size)
4895               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4896                                    "fp or vector constant word %u", i);
4897           }
4898           break;
4899         case dw_val_class_const_double:
4900           {
4901             unsigned HOST_WIDE_INT first, second;
4902
4903             if (WORDS_BIG_ENDIAN)
4904               {
4905                 first = val2->v.val_double.high;
4906                 second = val2->v.val_double.low;
4907               }
4908             else
4909               {
4910                 first = val2->v.val_double.low;
4911                 second = val2->v.val_double.high;
4912               }
4913             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4914                                  first, NULL);
4915             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4916                                  second, NULL);
4917           }
4918           break;
4919         case dw_val_class_addr:
4920           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4921           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4922           break;
4923         default:
4924           gcc_unreachable ();
4925         }
4926       break;
4927 #else
4928     case DW_OP_const2u:
4929     case DW_OP_const2s:
4930     case DW_OP_const4u:
4931     case DW_OP_const4s:
4932     case DW_OP_const8u:
4933     case DW_OP_const8s:
4934     case DW_OP_skip:
4935     case DW_OP_bra:
4936     case DW_OP_implicit_value:
4937       /* We currently don't make any attempt to make sure these are
4938          aligned properly like we do for the main unwind info, so
4939          don't support emitting things larger than a byte if we're
4940          only doing unwinding.  */
4941       gcc_unreachable ();
4942 #endif
4943     case DW_OP_const1u:
4944     case DW_OP_const1s:
4945       dw2_asm_output_data (1, val1->v.val_int, NULL);
4946       break;
4947     case DW_OP_constu:
4948       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4949       break;
4950     case DW_OP_consts:
4951       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4952       break;
4953     case DW_OP_pick:
4954       dw2_asm_output_data (1, val1->v.val_int, NULL);
4955       break;
4956     case DW_OP_plus_uconst:
4957       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4958       break;
4959     case DW_OP_breg0:
4960     case DW_OP_breg1:
4961     case DW_OP_breg2:
4962     case DW_OP_breg3:
4963     case DW_OP_breg4:
4964     case DW_OP_breg5:
4965     case DW_OP_breg6:
4966     case DW_OP_breg7:
4967     case DW_OP_breg8:
4968     case DW_OP_breg9:
4969     case DW_OP_breg10:
4970     case DW_OP_breg11:
4971     case DW_OP_breg12:
4972     case DW_OP_breg13:
4973     case DW_OP_breg14:
4974     case DW_OP_breg15:
4975     case DW_OP_breg16:
4976     case DW_OP_breg17:
4977     case DW_OP_breg18:
4978     case DW_OP_breg19:
4979     case DW_OP_breg20:
4980     case DW_OP_breg21:
4981     case DW_OP_breg22:
4982     case DW_OP_breg23:
4983     case DW_OP_breg24:
4984     case DW_OP_breg25:
4985     case DW_OP_breg26:
4986     case DW_OP_breg27:
4987     case DW_OP_breg28:
4988     case DW_OP_breg29:
4989     case DW_OP_breg30:
4990     case DW_OP_breg31:
4991       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4992       break;
4993     case DW_OP_regx:
4994       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4995       break;
4996     case DW_OP_fbreg:
4997       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4998       break;
4999     case DW_OP_bregx:
5000       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5001       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5002       break;
5003     case DW_OP_piece:
5004       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5005       break;
5006     case DW_OP_deref_size:
5007     case DW_OP_xderef_size:
5008       dw2_asm_output_data (1, val1->v.val_int, NULL);
5009       break;
5010
5011     case DW_OP_addr:
5012       if (loc->dtprel)
5013         {
5014           if (targetm.asm_out.output_dwarf_dtprel)
5015             {
5016               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5017                                                    DWARF2_ADDR_SIZE,
5018                                                    val1->v.val_addr);
5019               fputc ('\n', asm_out_file);
5020             }
5021           else
5022             gcc_unreachable ();
5023         }
5024       else
5025         {
5026 #ifdef DWARF2_DEBUGGING_INFO
5027           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5028 #else
5029           gcc_unreachable ();
5030 #endif
5031         }
5032       break;
5033
5034     default:
5035       /* Other codes have no operands.  */
5036       break;
5037     }
5038 }
5039
5040 /* Output a sequence of location operations.  */
5041
5042 static void
5043 output_loc_sequence (dw_loc_descr_ref loc)
5044 {
5045   for (; loc != NULL; loc = loc->dw_loc_next)
5046     {
5047       /* Output the opcode.  */
5048       dw2_asm_output_data (1, loc->dw_loc_opc,
5049                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5050
5051       /* Output the operand(s) (if any).  */
5052       output_loc_operands (loc);
5053     }
5054 }
5055
5056 /* Output location description stack opcode's operands (if any).
5057    The output is single bytes on a line, suitable for .cfi_escape.  */
5058
5059 static void
5060 output_loc_operands_raw (dw_loc_descr_ref loc)
5061 {
5062   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5063   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5064
5065   switch (loc->dw_loc_opc)
5066     {
5067     case DW_OP_addr:
5068     case DW_OP_implicit_value:
5069       /* We cannot output addresses in .cfi_escape, only bytes.  */
5070       gcc_unreachable ();
5071
5072     case DW_OP_const1u:
5073     case DW_OP_const1s:
5074     case DW_OP_pick:
5075     case DW_OP_deref_size:
5076     case DW_OP_xderef_size:
5077       fputc (',', asm_out_file);
5078       dw2_asm_output_data_raw (1, val1->v.val_int);
5079       break;
5080
5081     case DW_OP_const2u:
5082     case DW_OP_const2s:
5083       fputc (',', asm_out_file);
5084       dw2_asm_output_data_raw (2, val1->v.val_int);
5085       break;
5086
5087     case DW_OP_const4u:
5088     case DW_OP_const4s:
5089       fputc (',', asm_out_file);
5090       dw2_asm_output_data_raw (4, val1->v.val_int);
5091       break;
5092
5093     case DW_OP_const8u:
5094     case DW_OP_const8s:
5095       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5096       fputc (',', asm_out_file);
5097       dw2_asm_output_data_raw (8, val1->v.val_int);
5098       break;
5099
5100     case DW_OP_skip:
5101     case DW_OP_bra:
5102       {
5103         int offset;
5104
5105         gcc_assert (val1->val_class == dw_val_class_loc);
5106         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5107
5108         fputc (',', asm_out_file);
5109         dw2_asm_output_data_raw (2, offset);
5110       }
5111       break;
5112
5113     case DW_OP_constu:
5114     case DW_OP_plus_uconst:
5115     case DW_OP_regx:
5116     case DW_OP_piece:
5117       fputc (',', asm_out_file);
5118       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5119       break;
5120
5121     case DW_OP_consts:
5122     case DW_OP_breg0:
5123     case DW_OP_breg1:
5124     case DW_OP_breg2:
5125     case DW_OP_breg3:
5126     case DW_OP_breg4:
5127     case DW_OP_breg5:
5128     case DW_OP_breg6:
5129     case DW_OP_breg7:
5130     case DW_OP_breg8:
5131     case DW_OP_breg9:
5132     case DW_OP_breg10:
5133     case DW_OP_breg11:
5134     case DW_OP_breg12:
5135     case DW_OP_breg13:
5136     case DW_OP_breg14:
5137     case DW_OP_breg15:
5138     case DW_OP_breg16:
5139     case DW_OP_breg17:
5140     case DW_OP_breg18:
5141     case DW_OP_breg19:
5142     case DW_OP_breg20:
5143     case DW_OP_breg21:
5144     case DW_OP_breg22:
5145     case DW_OP_breg23:
5146     case DW_OP_breg24:
5147     case DW_OP_breg25:
5148     case DW_OP_breg26:
5149     case DW_OP_breg27:
5150     case DW_OP_breg28:
5151     case DW_OP_breg29:
5152     case DW_OP_breg30:
5153     case DW_OP_breg31:
5154     case DW_OP_fbreg:
5155       fputc (',', asm_out_file);
5156       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5157       break;
5158
5159     case DW_OP_bregx:
5160       fputc (',', asm_out_file);
5161       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5162       fputc (',', asm_out_file);
5163       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5164       break;
5165
5166     default:
5167       /* Other codes have no operands.  */
5168       break;
5169     }
5170 }
5171
5172 static void
5173 output_loc_sequence_raw (dw_loc_descr_ref loc)
5174 {
5175   while (1)
5176     {
5177       /* Output the opcode.  */
5178       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5179       output_loc_operands_raw (loc);
5180
5181       if (!loc->dw_loc_next)
5182         break;
5183       loc = loc->dw_loc_next;
5184
5185       fputc (',', asm_out_file);
5186     }
5187 }
5188
5189 /* This routine will generate the correct assembly data for a location
5190    description based on a cfi entry with a complex address.  */
5191
5192 static void
5193 output_cfa_loc (dw_cfi_ref cfi)
5194 {
5195   dw_loc_descr_ref loc;
5196   unsigned long size;
5197
5198   if (cfi->dw_cfi_opc == DW_CFA_expression)
5199     {
5200       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5201       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5202     }
5203   else
5204     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5205
5206   /* Output the size of the block.  */
5207   size = size_of_locs (loc);
5208   dw2_asm_output_data_uleb128 (size, NULL);
5209
5210   /* Now output the operations themselves.  */
5211   output_loc_sequence (loc);
5212 }
5213
5214 /* Similar, but used for .cfi_escape.  */
5215
5216 static void
5217 output_cfa_loc_raw (dw_cfi_ref cfi)
5218 {
5219   dw_loc_descr_ref loc;
5220   unsigned long size;
5221
5222   if (cfi->dw_cfi_opc == DW_CFA_expression)
5223     {
5224       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5225       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5226     }
5227   else
5228     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5229
5230   /* Output the size of the block.  */
5231   size = size_of_locs (loc);
5232   dw2_asm_output_data_uleb128_raw (size);
5233   fputc (',', asm_out_file);
5234
5235   /* Now output the operations themselves.  */
5236   output_loc_sequence_raw (loc);
5237 }
5238
5239 /* This function builds a dwarf location descriptor sequence from a
5240    dw_cfa_location, adding the given OFFSET to the result of the
5241    expression.  */
5242
5243 static struct dw_loc_descr_struct *
5244 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5245 {
5246   struct dw_loc_descr_struct *head, *tmp;
5247
5248   offset += cfa->offset;
5249
5250   if (cfa->indirect)
5251     {
5252       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5253       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5254       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5255       add_loc_descr (&head, tmp);
5256       if (offset != 0)
5257         {
5258           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5259           add_loc_descr (&head, tmp);
5260         }
5261     }
5262   else
5263     head = new_reg_loc_descr (cfa->reg, offset);
5264
5265   return head;
5266 }
5267
5268 /* This function builds a dwarf location descriptor sequence for
5269    the address at OFFSET from the CFA when stack is aligned to
5270    ALIGNMENT byte.  */
5271
5272 static struct dw_loc_descr_struct *
5273 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5274 {
5275   struct dw_loc_descr_struct *head;
5276   unsigned int dwarf_fp
5277     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5278
5279  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5280   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5281     {
5282       head = new_reg_loc_descr (dwarf_fp, 0);
5283       add_loc_descr (&head, int_loc_descriptor (alignment));
5284       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5285       loc_descr_plus_const (&head, offset);
5286     }
5287   else
5288     head = new_reg_loc_descr (dwarf_fp, offset);
5289   return head;
5290 }
5291
5292 /* This function fills in aa dw_cfa_location structure from a dwarf location
5293    descriptor sequence.  */
5294
5295 static void
5296 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5297 {
5298   struct dw_loc_descr_struct *ptr;
5299   cfa->offset = 0;
5300   cfa->base_offset = 0;
5301   cfa->indirect = 0;
5302   cfa->reg = -1;
5303
5304   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5305     {
5306       enum dwarf_location_atom op = ptr->dw_loc_opc;
5307
5308       switch (op)
5309         {
5310         case DW_OP_reg0:
5311         case DW_OP_reg1:
5312         case DW_OP_reg2:
5313         case DW_OP_reg3:
5314         case DW_OP_reg4:
5315         case DW_OP_reg5:
5316         case DW_OP_reg6:
5317         case DW_OP_reg7:
5318         case DW_OP_reg8:
5319         case DW_OP_reg9:
5320         case DW_OP_reg10:
5321         case DW_OP_reg11:
5322         case DW_OP_reg12:
5323         case DW_OP_reg13:
5324         case DW_OP_reg14:
5325         case DW_OP_reg15:
5326         case DW_OP_reg16:
5327         case DW_OP_reg17:
5328         case DW_OP_reg18:
5329         case DW_OP_reg19:
5330         case DW_OP_reg20:
5331         case DW_OP_reg21:
5332         case DW_OP_reg22:
5333         case DW_OP_reg23:
5334         case DW_OP_reg24:
5335         case DW_OP_reg25:
5336         case DW_OP_reg26:
5337         case DW_OP_reg27:
5338         case DW_OP_reg28:
5339         case DW_OP_reg29:
5340         case DW_OP_reg30:
5341         case DW_OP_reg31:
5342           cfa->reg = op - DW_OP_reg0;
5343           break;
5344         case DW_OP_regx:
5345           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5346           break;
5347         case DW_OP_breg0:
5348         case DW_OP_breg1:
5349         case DW_OP_breg2:
5350         case DW_OP_breg3:
5351         case DW_OP_breg4:
5352         case DW_OP_breg5:
5353         case DW_OP_breg6:
5354         case DW_OP_breg7:
5355         case DW_OP_breg8:
5356         case DW_OP_breg9:
5357         case DW_OP_breg10:
5358         case DW_OP_breg11:
5359         case DW_OP_breg12:
5360         case DW_OP_breg13:
5361         case DW_OP_breg14:
5362         case DW_OP_breg15:
5363         case DW_OP_breg16:
5364         case DW_OP_breg17:
5365         case DW_OP_breg18:
5366         case DW_OP_breg19:
5367         case DW_OP_breg20:
5368         case DW_OP_breg21:
5369         case DW_OP_breg22:
5370         case DW_OP_breg23:
5371         case DW_OP_breg24:
5372         case DW_OP_breg25:
5373         case DW_OP_breg26:
5374         case DW_OP_breg27:
5375         case DW_OP_breg28:
5376         case DW_OP_breg29:
5377         case DW_OP_breg30:
5378         case DW_OP_breg31:
5379           cfa->reg = op - DW_OP_breg0;
5380           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5381           break;
5382         case DW_OP_bregx:
5383           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5384           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5385           break;
5386         case DW_OP_deref:
5387           cfa->indirect = 1;
5388           break;
5389         case DW_OP_plus_uconst:
5390           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5391           break;
5392         default:
5393           internal_error ("DW_LOC_OP %s not implemented",
5394                           dwarf_stack_op_name (ptr->dw_loc_opc));
5395         }
5396     }
5397 }
5398 #endif /* .debug_frame support */
5399 \f
5400 /* And now, the support for symbolic debugging information.  */
5401 #ifdef DWARF2_DEBUGGING_INFO
5402
5403 /* .debug_str support.  */
5404 static int output_indirect_string (void **, void *);
5405
5406 static void dwarf2out_init (const char *);
5407 static void dwarf2out_finish (const char *);
5408 static void dwarf2out_assembly_start (void);
5409 static void dwarf2out_define (unsigned int, const char *);
5410 static void dwarf2out_undef (unsigned int, const char *);
5411 static void dwarf2out_start_source_file (unsigned, const char *);
5412 static void dwarf2out_end_source_file (unsigned);
5413 static void dwarf2out_function_decl (tree);
5414 static void dwarf2out_begin_block (unsigned, unsigned);
5415 static void dwarf2out_end_block (unsigned, unsigned);
5416 static bool dwarf2out_ignore_block (const_tree);
5417 static void dwarf2out_global_decl (tree);
5418 static void dwarf2out_type_decl (tree, int);
5419 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5420 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5421                                                  dw_die_ref);
5422 static void dwarf2out_abstract_function (tree);
5423 static void dwarf2out_var_location (rtx);
5424 static void dwarf2out_direct_call (tree);
5425 static void dwarf2out_virtual_call_token (tree, int);
5426 static void dwarf2out_copy_call_info (rtx, rtx);
5427 static void dwarf2out_virtual_call (int);
5428 static void dwarf2out_begin_function (tree);
5429 static void dwarf2out_set_name (tree, tree);
5430
5431 /* The debug hooks structure.  */
5432
5433 const struct gcc_debug_hooks dwarf2_debug_hooks =
5434 {
5435   dwarf2out_init,
5436   dwarf2out_finish,
5437   dwarf2out_assembly_start,
5438   dwarf2out_define,
5439   dwarf2out_undef,
5440   dwarf2out_start_source_file,
5441   dwarf2out_end_source_file,
5442   dwarf2out_begin_block,
5443   dwarf2out_end_block,
5444   dwarf2out_ignore_block,
5445   dwarf2out_source_line,
5446   dwarf2out_begin_prologue,
5447   debug_nothing_int_charstar,   /* end_prologue */
5448   dwarf2out_end_epilogue,
5449   dwarf2out_begin_function,
5450   debug_nothing_int,            /* end_function */
5451   dwarf2out_function_decl,      /* function_decl */
5452   dwarf2out_global_decl,
5453   dwarf2out_type_decl,          /* type_decl */
5454   dwarf2out_imported_module_or_decl,
5455   debug_nothing_tree,           /* deferred_inline_function */
5456   /* The DWARF 2 backend tries to reduce debugging bloat by not
5457      emitting the abstract description of inline functions until
5458      something tries to reference them.  */
5459   dwarf2out_abstract_function,  /* outlining_inline_function */
5460   debug_nothing_rtx,            /* label */
5461   debug_nothing_int,            /* handle_pch */
5462   dwarf2out_var_location,
5463   dwarf2out_switch_text_section,
5464   dwarf2out_direct_call,
5465   dwarf2out_virtual_call_token,
5466   dwarf2out_copy_call_info,
5467   dwarf2out_virtual_call,
5468   dwarf2out_set_name,
5469   1                             /* start_end_main_source_file */
5470 };
5471 #endif
5472 \f
5473 /* NOTE: In the comments in this file, many references are made to
5474    "Debugging Information Entries".  This term is abbreviated as `DIE'
5475    throughout the remainder of this file.  */
5476
5477 /* An internal representation of the DWARF output is built, and then
5478    walked to generate the DWARF debugging info.  The walk of the internal
5479    representation is done after the entire program has been compiled.
5480    The types below are used to describe the internal representation.  */
5481
5482 /* Various DIE's use offsets relative to the beginning of the
5483    .debug_info section to refer to each other.  */
5484
5485 typedef long int dw_offset;
5486
5487 /* Define typedefs here to avoid circular dependencies.  */
5488
5489 typedef struct dw_attr_struct *dw_attr_ref;
5490 typedef struct dw_line_info_struct *dw_line_info_ref;
5491 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5492 typedef struct pubname_struct *pubname_ref;
5493 typedef struct dw_ranges_struct *dw_ranges_ref;
5494 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5495 typedef struct comdat_type_struct *comdat_type_node_ref;
5496
5497 /* Each entry in the line_info_table maintains the file and
5498    line number associated with the label generated for that
5499    entry.  The label gives the PC value associated with
5500    the line number entry.  */
5501
5502 typedef struct GTY(()) dw_line_info_struct {
5503   unsigned long dw_file_num;
5504   unsigned long dw_line_num;
5505 }
5506 dw_line_info_entry;
5507
5508 /* Line information for functions in separate sections; each one gets its
5509    own sequence.  */
5510 typedef struct GTY(()) dw_separate_line_info_struct {
5511   unsigned long dw_file_num;
5512   unsigned long dw_line_num;
5513   unsigned long function;
5514 }
5515 dw_separate_line_info_entry;
5516
5517 /* Each DIE attribute has a field specifying the attribute kind,
5518    a link to the next attribute in the chain, and an attribute value.
5519    Attributes are typically linked below the DIE they modify.  */
5520
5521 typedef struct GTY(()) dw_attr_struct {
5522   enum dwarf_attribute dw_attr;
5523   dw_val_node dw_attr_val;
5524 }
5525 dw_attr_node;
5526
5527 DEF_VEC_O(dw_attr_node);
5528 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5529
5530 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5531    The children of each node form a circular list linked by
5532    die_sib.  die_child points to the node *before* the "first" child node.  */
5533
5534 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5535   enum dwarf_tag die_tag;
5536   union die_symbol_or_type_node
5537     {
5538       char * GTY ((tag ("0"))) die_symbol;
5539       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5540     }
5541   GTY ((desc ("dwarf_version >= 4"))) die_id;
5542   VEC(dw_attr_node,gc) * die_attr;
5543   dw_die_ref die_parent;
5544   dw_die_ref die_child;
5545   dw_die_ref die_sib;
5546   dw_die_ref die_definition; /* ref from a specification to its definition */
5547   dw_offset die_offset;
5548   unsigned long die_abbrev;
5549   int die_mark;
5550   /* Die is used and must not be pruned as unused.  */
5551   int die_perennial_p;
5552   unsigned int decl_id;
5553 }
5554 die_node;
5555
5556 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5557 #define FOR_EACH_CHILD(die, c, expr) do {       \
5558   c = die->die_child;                           \
5559   if (c) do {                                   \
5560     c = c->die_sib;                             \
5561     expr;                                       \
5562   } while (c != die->die_child);                \
5563 } while (0)
5564
5565 /* The pubname structure */
5566
5567 typedef struct GTY(()) pubname_struct {
5568   dw_die_ref die;
5569   const char *name;
5570 }
5571 pubname_entry;
5572
5573 DEF_VEC_O(pubname_entry);
5574 DEF_VEC_ALLOC_O(pubname_entry, gc);
5575
5576 struct GTY(()) dw_ranges_struct {
5577   /* If this is positive, it's a block number, otherwise it's a
5578      bitwise-negated index into dw_ranges_by_label.  */
5579   int num;
5580 };
5581
5582 struct GTY(()) dw_ranges_by_label_struct {
5583   const char *begin;
5584   const char *end;
5585 };
5586
5587 /* The comdat type node structure.  */
5588 typedef struct GTY(()) comdat_type_struct
5589 {
5590   dw_die_ref root_die;
5591   dw_die_ref type_die;
5592   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5593   struct comdat_type_struct *next;
5594 }
5595 comdat_type_node;
5596
5597 /* The limbo die list structure.  */
5598 typedef struct GTY(()) limbo_die_struct {
5599   dw_die_ref die;
5600   tree created_for;
5601   struct limbo_die_struct *next;
5602 }
5603 limbo_die_node;
5604
5605 typedef struct GTY(()) skeleton_chain_struct
5606 {
5607   dw_die_ref old_die;
5608   dw_die_ref new_die;
5609   struct skeleton_chain_struct *parent;
5610 }
5611 skeleton_chain_node;
5612
5613 /* How to start an assembler comment.  */
5614 #ifndef ASM_COMMENT_START
5615 #define ASM_COMMENT_START ";#"
5616 #endif
5617
5618 /* Define a macro which returns nonzero for a TYPE_DECL which was
5619    implicitly generated for a tagged type.
5620
5621    Note that unlike the gcc front end (which generates a NULL named
5622    TYPE_DECL node for each complete tagged type, each array type, and
5623    each function type node created) the g++ front end generates a
5624    _named_ TYPE_DECL node for each tagged type node created.
5625    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5626    generate a DW_TAG_typedef DIE for them.  */
5627
5628 #define TYPE_DECL_IS_STUB(decl)                         \
5629   (DECL_NAME (decl) == NULL_TREE                        \
5630    || (DECL_ARTIFICIAL (decl)                           \
5631        && is_tagged_type (TREE_TYPE (decl))             \
5632        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5633            /* This is necessary for stub decls that     \
5634               appear in nested inline functions.  */    \
5635            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5636                && (decl_ultimate_origin (decl)          \
5637                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5638
5639 /* Information concerning the compilation unit's programming
5640    language, and compiler version.  */
5641
5642 /* Fixed size portion of the DWARF compilation unit header.  */
5643 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5644   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5645
5646 /* Fixed size portion of the DWARF comdat type unit header.  */
5647 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5648   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5649    + DWARF_OFFSET_SIZE)
5650
5651 /* Fixed size portion of public names info.  */
5652 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5653
5654 /* Fixed size portion of the address range info.  */
5655 #define DWARF_ARANGES_HEADER_SIZE                                       \
5656   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5657                 DWARF2_ADDR_SIZE * 2)                                   \
5658    - DWARF_INITIAL_LENGTH_SIZE)
5659
5660 /* Size of padding portion in the address range info.  It must be
5661    aligned to twice the pointer size.  */
5662 #define DWARF_ARANGES_PAD_SIZE \
5663   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5664                 DWARF2_ADDR_SIZE * 2)                              \
5665    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5666
5667 /* Use assembler line directives if available.  */
5668 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5669 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5670 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5671 #else
5672 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5673 #endif
5674 #endif
5675
5676 /* Minimum line offset in a special line info. opcode.
5677    This value was chosen to give a reasonable range of values.  */
5678 #define DWARF_LINE_BASE  -10
5679
5680 /* First special line opcode - leave room for the standard opcodes.  */
5681 #define DWARF_LINE_OPCODE_BASE  10
5682
5683 /* Range of line offsets in a special line info. opcode.  */
5684 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5685
5686 /* Flag that indicates the initial value of the is_stmt_start flag.
5687    In the present implementation, we do not mark any lines as
5688    the beginning of a source statement, because that information
5689    is not made available by the GCC front-end.  */
5690 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5691
5692 /* Maximum number of operations per instruction bundle.  */
5693 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5694 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5695 #endif
5696
5697 #ifdef DWARF2_DEBUGGING_INFO
5698 /* This location is used by calc_die_sizes() to keep track
5699    the offset of each DIE within the .debug_info section.  */
5700 static unsigned long next_die_offset;
5701 #endif
5702
5703 /* Record the root of the DIE's built for the current compilation unit.  */
5704 static GTY(()) dw_die_ref comp_unit_die;
5705
5706 /* A list of type DIEs that have been separated into comdat sections.  */
5707 static GTY(()) comdat_type_node *comdat_type_list;
5708
5709 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5710 static GTY(()) limbo_die_node *limbo_die_list;
5711
5712 /* A list of DIEs for which we may have to generate
5713    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5714 static GTY(()) limbo_die_node *deferred_asm_name;
5715
5716 /* Filenames referenced by this compilation unit.  */
5717 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5718
5719 /* A hash table of references to DIE's that describe declarations.
5720    The key is a DECL_UID() which is a unique number identifying each decl.  */
5721 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5722
5723 /* A hash table of references to DIE's that describe COMMON blocks.
5724    The key is DECL_UID() ^ die_parent.  */
5725 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5726
5727 typedef struct GTY(()) die_arg_entry_struct {
5728     dw_die_ref die;
5729     tree arg;
5730 } die_arg_entry;
5731
5732 DEF_VEC_O(die_arg_entry);
5733 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5734
5735 /* Node of the variable location list.  */
5736 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5737   rtx GTY (()) var_loc_note;
5738   const char * GTY (()) label;
5739   struct var_loc_node * GTY (()) next;
5740 };
5741
5742 /* Variable location list.  */
5743 struct GTY (()) var_loc_list_def {
5744   struct var_loc_node * GTY (()) first;
5745
5746   /* Do not mark the last element of the chained list because
5747      it is marked through the chain.  */
5748   struct var_loc_node * GTY ((skip ("%h"))) last;
5749
5750   /* DECL_UID of the variable decl.  */
5751   unsigned int decl_id;
5752 };
5753 typedef struct var_loc_list_def var_loc_list;
5754
5755
5756 /* Table of decl location linked lists.  */
5757 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5758
5759 /* A pointer to the base of a list of references to DIE's that
5760    are uniquely identified by their tag, presence/absence of
5761    children DIE's, and list of attribute/value pairs.  */
5762 static GTY((length ("abbrev_die_table_allocated")))
5763   dw_die_ref *abbrev_die_table;
5764
5765 /* Number of elements currently allocated for abbrev_die_table.  */
5766 static GTY(()) unsigned abbrev_die_table_allocated;
5767
5768 /* Number of elements in type_die_table currently in use.  */
5769 static GTY(()) unsigned abbrev_die_table_in_use;
5770
5771 /* Size (in elements) of increments by which we may expand the
5772    abbrev_die_table.  */
5773 #define ABBREV_DIE_TABLE_INCREMENT 256
5774
5775 /* A pointer to the base of a table that contains line information
5776    for each source code line in .text in the compilation unit.  */
5777 static GTY((length ("line_info_table_allocated")))
5778      dw_line_info_ref line_info_table;
5779
5780 /* Number of elements currently allocated for line_info_table.  */
5781 static GTY(()) unsigned line_info_table_allocated;
5782
5783 /* Number of elements in line_info_table currently in use.  */
5784 static GTY(()) unsigned line_info_table_in_use;
5785
5786 /* A pointer to the base of a table that contains line information
5787    for each source code line outside of .text in the compilation unit.  */
5788 static GTY ((length ("separate_line_info_table_allocated")))
5789      dw_separate_line_info_ref separate_line_info_table;
5790
5791 /* Number of elements currently allocated for separate_line_info_table.  */
5792 static GTY(()) unsigned separate_line_info_table_allocated;
5793
5794 /* Number of elements in separate_line_info_table currently in use.  */
5795 static GTY(()) unsigned separate_line_info_table_in_use;
5796
5797 /* Size (in elements) of increments by which we may expand the
5798    line_info_table.  */
5799 #define LINE_INFO_TABLE_INCREMENT 1024
5800
5801 /* A pointer to the base of a table that contains a list of publicly
5802    accessible names.  */
5803 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5804
5805 /* A pointer to the base of a table that contains a list of publicly
5806    accessible types.  */
5807 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5808
5809 /* Array of dies for which we should generate .debug_arange info.  */
5810 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5811
5812 /* Number of elements currently allocated for arange_table.  */
5813 static GTY(()) unsigned arange_table_allocated;
5814
5815 /* Number of elements in arange_table currently in use.  */
5816 static GTY(()) unsigned arange_table_in_use;
5817
5818 /* Size (in elements) of increments by which we may expand the
5819    arange_table.  */
5820 #define ARANGE_TABLE_INCREMENT 64
5821
5822 /* Array of dies for which we should generate .debug_ranges info.  */
5823 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5824
5825 /* Number of elements currently allocated for ranges_table.  */
5826 static GTY(()) unsigned ranges_table_allocated;
5827
5828 /* Number of elements in ranges_table currently in use.  */
5829 static GTY(()) unsigned ranges_table_in_use;
5830
5831 /* Array of pairs of labels referenced in ranges_table.  */
5832 static GTY ((length ("ranges_by_label_allocated")))
5833      dw_ranges_by_label_ref ranges_by_label;
5834
5835 /* Number of elements currently allocated for ranges_by_label.  */
5836 static GTY(()) unsigned ranges_by_label_allocated;
5837
5838 /* Number of elements in ranges_by_label currently in use.  */
5839 static GTY(()) unsigned ranges_by_label_in_use;
5840
5841 /* Size (in elements) of increments by which we may expand the
5842    ranges_table.  */
5843 #define RANGES_TABLE_INCREMENT 64
5844
5845 /* Whether we have location lists that need outputting */
5846 static GTY(()) bool have_location_lists;
5847
5848 /* Unique label counter.  */
5849 static GTY(()) unsigned int loclabel_num;
5850
5851 /* Unique label counter for point-of-call tables.  */
5852 static GTY(()) unsigned int poc_label_num;
5853
5854 /* The direct call table structure.  */
5855
5856 typedef struct GTY(()) dcall_struct {
5857   unsigned int poc_label_num;
5858   tree poc_decl;
5859   dw_die_ref targ_die;
5860 }
5861 dcall_entry;
5862
5863 DEF_VEC_O(dcall_entry);
5864 DEF_VEC_ALLOC_O(dcall_entry, gc);
5865
5866 /* The virtual call table structure.  */
5867
5868 typedef struct GTY(()) vcall_struct {
5869   unsigned int poc_label_num;
5870   unsigned int vtable_slot;
5871 }
5872 vcall_entry;
5873
5874 DEF_VEC_O(vcall_entry);
5875 DEF_VEC_ALLOC_O(vcall_entry, gc);
5876
5877 /* Pointers to the direct and virtual call tables.  */
5878 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5879 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5880
5881 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5882
5883 struct GTY (()) vcall_insn {
5884   int insn_uid;
5885   unsigned int vtable_slot;
5886 };
5887
5888 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5889
5890 #ifdef DWARF2_DEBUGGING_INFO
5891 /* Record whether the function being analyzed contains inlined functions.  */
5892 static int current_function_has_inlines;
5893 #endif
5894 #if 0 && defined (MIPS_DEBUGGING_INFO)
5895 static int comp_unit_has_inlines;
5896 #endif
5897
5898 /* The last file entry emitted by maybe_emit_file().  */
5899 static GTY(()) struct dwarf_file_data * last_emitted_file;
5900
5901 /* Number of internal labels generated by gen_internal_sym().  */
5902 static GTY(()) int label_num;
5903
5904 /* Cached result of previous call to lookup_filename.  */
5905 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5906
5907 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5908
5909 #ifdef DWARF2_DEBUGGING_INFO
5910
5911 /* Offset from the "steady-state frame pointer" to the frame base,
5912    within the current function.  */
5913 static HOST_WIDE_INT frame_pointer_fb_offset;
5914
5915 /* Forward declarations for functions defined in this file.  */
5916
5917 static int is_pseudo_reg (const_rtx);
5918 static tree type_main_variant (tree);
5919 static int is_tagged_type (const_tree);
5920 static const char *dwarf_tag_name (unsigned);
5921 static const char *dwarf_attr_name (unsigned);
5922 static const char *dwarf_form_name (unsigned);
5923 static tree decl_ultimate_origin (const_tree);
5924 static tree decl_class_context (tree);
5925 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5926 static inline enum dw_val_class AT_class (dw_attr_ref);
5927 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5928 static inline unsigned AT_flag (dw_attr_ref);
5929 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5930 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5931 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5932 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5933 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5934                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5935 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5936                                unsigned int, unsigned char *);
5937 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5938 static hashval_t debug_str_do_hash (const void *);
5939 static int debug_str_eq (const void *, const void *);
5940 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5941 static inline const char *AT_string (dw_attr_ref);
5942 static enum dwarf_form AT_string_form (dw_attr_ref);
5943 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5944 static void add_AT_specification (dw_die_ref, dw_die_ref);
5945 static inline dw_die_ref AT_ref (dw_attr_ref);
5946 static inline int AT_ref_external (dw_attr_ref);
5947 static inline void set_AT_ref_external (dw_attr_ref, int);
5948 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5949 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5950 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5951 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5952                              dw_loc_list_ref);
5953 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5954 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5955 static inline rtx AT_addr (dw_attr_ref);
5956 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5957 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5958 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5959 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5960                            unsigned HOST_WIDE_INT);
5961 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5962                                unsigned long);
5963 static inline const char *AT_lbl (dw_attr_ref);
5964 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5965 static const char *get_AT_low_pc (dw_die_ref);
5966 static const char *get_AT_hi_pc (dw_die_ref);
5967 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5968 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5969 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5970 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5971 static bool is_cxx (void);
5972 static bool is_fortran (void);
5973 static bool is_ada (void);
5974 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5975 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5976 static void add_child_die (dw_die_ref, dw_die_ref);
5977 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5978 static dw_die_ref lookup_type_die (tree);
5979 static void equate_type_number_to_die (tree, dw_die_ref);
5980 static hashval_t decl_die_table_hash (const void *);
5981 static int decl_die_table_eq (const void *, const void *);
5982 static dw_die_ref lookup_decl_die (tree);
5983 static hashval_t common_block_die_table_hash (const void *);
5984 static int common_block_die_table_eq (const void *, const void *);
5985 static hashval_t decl_loc_table_hash (const void *);
5986 static int decl_loc_table_eq (const void *, const void *);
5987 static var_loc_list *lookup_decl_loc (const_tree);
5988 static void equate_decl_number_to_die (tree, dw_die_ref);
5989 static struct var_loc_node *add_var_loc_to_decl (tree, rtx);
5990 static void print_spaces (FILE *);
5991 static void print_die (dw_die_ref, FILE *);
5992 static void print_dwarf_line_table (FILE *);
5993 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5994 static dw_die_ref pop_compile_unit (dw_die_ref);
5995 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5996 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5997 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5998 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
5999 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6000 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6001 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6002                                    struct md5_ctx *, int *);
6003 struct checksum_attributes;
6004 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6005 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6006 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6007 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6008 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6009 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6010 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6011 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6012 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6013 static void compute_section_prefix (dw_die_ref);
6014 static int is_type_die (dw_die_ref);
6015 static int is_comdat_die (dw_die_ref);
6016 static int is_symbol_die (dw_die_ref);
6017 static void assign_symbol_names (dw_die_ref);
6018 static void break_out_includes (dw_die_ref);
6019 static int is_declaration_die (dw_die_ref);
6020 static int should_move_die_to_comdat (dw_die_ref);
6021 static dw_die_ref clone_as_declaration (dw_die_ref);
6022 static dw_die_ref clone_die (dw_die_ref);
6023 static dw_die_ref clone_tree (dw_die_ref);
6024 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6025 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6026 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6027 static dw_die_ref generate_skeleton (dw_die_ref);
6028 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6029                                                          dw_die_ref);
6030 static void break_out_comdat_types (dw_die_ref);
6031 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6032 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6033 static void copy_decls_for_unworthy_types (dw_die_ref);
6034
6035 static hashval_t htab_cu_hash (const void *);
6036 static int htab_cu_eq (const void *, const void *);
6037 static void htab_cu_del (void *);
6038 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6039 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6040 static void add_sibling_attributes (dw_die_ref);
6041 static void build_abbrev_table (dw_die_ref);
6042 static void output_location_lists (dw_die_ref);
6043 static int constant_size (unsigned HOST_WIDE_INT);
6044 static unsigned long size_of_die (dw_die_ref);
6045 static void calc_die_sizes (dw_die_ref);
6046 static void mark_dies (dw_die_ref);
6047 static void unmark_dies (dw_die_ref);
6048 static void unmark_all_dies (dw_die_ref);
6049 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6050 static unsigned long size_of_aranges (void);
6051 static enum dwarf_form value_format (dw_attr_ref);
6052 static void output_value_format (dw_attr_ref);
6053 static void output_abbrev_section (void);
6054 static void output_die_symbol (dw_die_ref);
6055 static void output_die (dw_die_ref);
6056 static void output_compilation_unit_header (void);
6057 static void output_comp_unit (dw_die_ref, int);
6058 static void output_comdat_type_unit (comdat_type_node *);
6059 static const char *dwarf2_name (tree, int);
6060 static void add_pubname (tree, dw_die_ref);
6061 static void add_pubname_string (const char *, dw_die_ref);
6062 static void add_pubtype (tree, dw_die_ref);
6063 static void output_pubnames (VEC (pubname_entry,gc) *);
6064 static void add_arange (tree, dw_die_ref);
6065 static void output_aranges (void);
6066 static unsigned int add_ranges_num (int);
6067 static unsigned int add_ranges (const_tree);
6068 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6069                                   bool *);
6070 static void output_ranges (void);
6071 static void output_line_info (void);
6072 static void output_file_names (void);
6073 static dw_die_ref base_type_die (tree);
6074 static int is_base_type (tree);
6075 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6076 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6077 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6078 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6079 static int type_is_enum (const_tree);
6080 static unsigned int dbx_reg_number (const_rtx);
6081 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6082 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6083 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6084                                                 enum var_init_status);
6085 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6086                                                      enum var_init_status);
6087 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6088                                          enum var_init_status);
6089 static int is_based_loc (const_rtx);
6090 static int resolve_one_addr (rtx *, void *);
6091 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6092                                             enum var_init_status);
6093 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6094                                                enum var_init_status);
6095 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6096                                         enum var_init_status);
6097 static dw_loc_list_ref loc_list_from_tree (tree, int);
6098 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6099 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6100 static tree field_type (const_tree);
6101 static unsigned int simple_type_align_in_bits (const_tree);
6102 static unsigned int simple_decl_align_in_bits (const_tree);
6103 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6104 static HOST_WIDE_INT field_byte_offset (const_tree);
6105 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6106                                          dw_loc_list_ref);
6107 static void add_data_member_location_attribute (dw_die_ref, tree);
6108 static bool add_const_value_attribute (dw_die_ref, rtx);
6109 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6110 static void insert_float (const_rtx, unsigned char *);
6111 static rtx rtl_for_decl_location (tree);
6112 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6113                                                    enum dwarf_attribute);
6114 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6115 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6116 static void add_name_attribute (dw_die_ref, const char *);
6117 static void add_comp_dir_attribute (dw_die_ref);
6118 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6119 static void add_subscript_info (dw_die_ref, tree, bool);
6120 static void add_byte_size_attribute (dw_die_ref, tree);
6121 static void add_bit_offset_attribute (dw_die_ref, tree);
6122 static void add_bit_size_attribute (dw_die_ref, tree);
6123 static void add_prototyped_attribute (dw_die_ref, tree);
6124 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6125 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6126 static void add_src_coords_attributes (dw_die_ref, tree);
6127 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6128 static void push_decl_scope (tree);
6129 static void pop_decl_scope (void);
6130 static dw_die_ref scope_die_for (tree, dw_die_ref);
6131 static inline int local_scope_p (dw_die_ref);
6132 static inline int class_scope_p (dw_die_ref);
6133 static inline int class_or_namespace_scope_p (dw_die_ref);
6134 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6135 static void add_calling_convention_attribute (dw_die_ref, tree);
6136 static const char *type_tag (const_tree);
6137 static tree member_declared_type (const_tree);
6138 #if 0
6139 static const char *decl_start_label (tree);
6140 #endif
6141 static void gen_array_type_die (tree, dw_die_ref);
6142 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6143 #if 0
6144 static void gen_entry_point_die (tree, dw_die_ref);
6145 #endif
6146 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6147 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6148 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6149 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6150 static void gen_formal_types_die (tree, dw_die_ref);
6151 static void gen_subprogram_die (tree, dw_die_ref);
6152 static void gen_variable_die (tree, tree, dw_die_ref);
6153 static void gen_const_die (tree, dw_die_ref);
6154 static void gen_label_die (tree, dw_die_ref);
6155 static void gen_lexical_block_die (tree, dw_die_ref, int);
6156 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6157 static void gen_field_die (tree, dw_die_ref);
6158 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6159 static dw_die_ref gen_compile_unit_die (const char *);
6160 static void gen_inheritance_die (tree, tree, dw_die_ref);
6161 static void gen_member_die (tree, dw_die_ref);
6162 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6163                                                 enum debug_info_usage);
6164 static void gen_subroutine_type_die (tree, dw_die_ref);
6165 static void gen_typedef_die (tree, dw_die_ref);
6166 static void gen_type_die (tree, dw_die_ref);
6167 static void gen_block_die (tree, dw_die_ref, int);
6168 static void decls_for_scope (tree, dw_die_ref, int);
6169 static int is_redundant_typedef (const_tree);
6170 static inline dw_die_ref get_context_die (tree);
6171 static void gen_namespace_die (tree, dw_die_ref);
6172 static void gen_decl_die (tree, tree, dw_die_ref);
6173 static dw_die_ref force_decl_die (tree);
6174 static dw_die_ref force_type_die (tree);
6175 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6176 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6177 static struct dwarf_file_data * lookup_filename (const char *);
6178 static void retry_incomplete_types (void);
6179 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6180 static void gen_generic_params_dies (tree);
6181 static void splice_child_die (dw_die_ref, dw_die_ref);
6182 static int file_info_cmp (const void *, const void *);
6183 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6184                                      const char *, const char *);
6185 static void output_loc_list (dw_loc_list_ref);
6186 static char *gen_internal_sym (const char *);
6187
6188 static void prune_unmark_dies (dw_die_ref);
6189 static void prune_unused_types_mark (dw_die_ref, int);
6190 static void prune_unused_types_walk (dw_die_ref);
6191 static void prune_unused_types_walk_attribs (dw_die_ref);
6192 static void prune_unused_types_prune (dw_die_ref);
6193 static void prune_unused_types (void);
6194 static int maybe_emit_file (struct dwarf_file_data *fd);
6195 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6196 static void gen_remaining_tmpl_value_param_die_attribute (void);
6197
6198 /* Section names used to hold DWARF debugging information.  */
6199 #ifndef DEBUG_INFO_SECTION
6200 #define DEBUG_INFO_SECTION      ".debug_info"
6201 #endif
6202 #ifndef DEBUG_ABBREV_SECTION
6203 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6204 #endif
6205 #ifndef DEBUG_ARANGES_SECTION
6206 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6207 #endif
6208 #ifndef DEBUG_MACINFO_SECTION
6209 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6210 #endif
6211 #ifndef DEBUG_LINE_SECTION
6212 #define DEBUG_LINE_SECTION      ".debug_line"
6213 #endif
6214 #ifndef DEBUG_LOC_SECTION
6215 #define DEBUG_LOC_SECTION       ".debug_loc"
6216 #endif
6217 #ifndef DEBUG_PUBNAMES_SECTION
6218 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6219 #endif
6220 #ifndef DEBUG_PUBTYPES_SECTION
6221 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6222 #endif
6223 #ifndef DEBUG_DCALL_SECTION
6224 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6225 #endif
6226 #ifndef DEBUG_VCALL_SECTION
6227 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6228 #endif
6229 #ifndef DEBUG_STR_SECTION
6230 #define DEBUG_STR_SECTION       ".debug_str"
6231 #endif
6232 #ifndef DEBUG_RANGES_SECTION
6233 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6234 #endif
6235
6236 /* Standard ELF section names for compiled code and data.  */
6237 #ifndef TEXT_SECTION_NAME
6238 #define TEXT_SECTION_NAME       ".text"
6239 #endif
6240
6241 /* Section flags for .debug_str section.  */
6242 #define DEBUG_STR_SECTION_FLAGS \
6243   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6244    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6245    : SECTION_DEBUG)
6246
6247 /* Labels we insert at beginning sections we can reference instead of
6248    the section names themselves.  */
6249
6250 #ifndef TEXT_SECTION_LABEL
6251 #define TEXT_SECTION_LABEL              "Ltext"
6252 #endif
6253 #ifndef COLD_TEXT_SECTION_LABEL
6254 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6255 #endif
6256 #ifndef DEBUG_LINE_SECTION_LABEL
6257 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6258 #endif
6259 #ifndef DEBUG_INFO_SECTION_LABEL
6260 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6261 #endif
6262 #ifndef DEBUG_ABBREV_SECTION_LABEL
6263 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6264 #endif
6265 #ifndef DEBUG_LOC_SECTION_LABEL
6266 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6267 #endif
6268 #ifndef DEBUG_RANGES_SECTION_LABEL
6269 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6270 #endif
6271 #ifndef DEBUG_MACINFO_SECTION_LABEL
6272 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6273 #endif
6274
6275 /* Mangled name attribute to use.  This used to be a vendor extension
6276    until DWARF 4 standardized it.  */
6277 #define AT_linkage_name \
6278   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6279
6280
6281 /* Definitions of defaults for formats and names of various special
6282    (artificial) labels which may be generated within this file (when the -g
6283    options is used and DWARF2_DEBUGGING_INFO is in effect.
6284    If necessary, these may be overridden from within the tm.h file, but
6285    typically, overriding these defaults is unnecessary.  */
6286
6287 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6288 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6289 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6290 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6291 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6292 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6293 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6294 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6295 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6296 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6297
6298 #ifndef TEXT_END_LABEL
6299 #define TEXT_END_LABEL          "Letext"
6300 #endif
6301 #ifndef COLD_END_LABEL
6302 #define COLD_END_LABEL          "Letext_cold"
6303 #endif
6304 #ifndef BLOCK_BEGIN_LABEL
6305 #define BLOCK_BEGIN_LABEL       "LBB"
6306 #endif
6307 #ifndef BLOCK_END_LABEL
6308 #define BLOCK_END_LABEL         "LBE"
6309 #endif
6310 #ifndef LINE_CODE_LABEL
6311 #define LINE_CODE_LABEL         "LM"
6312 #endif
6313 #ifndef SEPARATE_LINE_CODE_LABEL
6314 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6315 #endif
6316
6317 \f
6318 /* We allow a language front-end to designate a function that is to be
6319    called to "demangle" any name before it is put into a DIE.  */
6320
6321 static const char *(*demangle_name_func) (const char *);
6322
6323 void
6324 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6325 {
6326   demangle_name_func = func;
6327 }
6328
6329 /* Test if rtl node points to a pseudo register.  */
6330
6331 static inline int
6332 is_pseudo_reg (const_rtx rtl)
6333 {
6334   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6335           || (GET_CODE (rtl) == SUBREG
6336               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6337 }
6338
6339 /* Return a reference to a type, with its const and volatile qualifiers
6340    removed.  */
6341
6342 static inline tree
6343 type_main_variant (tree type)
6344 {
6345   type = TYPE_MAIN_VARIANT (type);
6346
6347   /* ??? There really should be only one main variant among any group of
6348      variants of a given type (and all of the MAIN_VARIANT values for all
6349      members of the group should point to that one type) but sometimes the C
6350      front-end messes this up for array types, so we work around that bug
6351      here.  */
6352   if (TREE_CODE (type) == ARRAY_TYPE)
6353     while (type != TYPE_MAIN_VARIANT (type))
6354       type = TYPE_MAIN_VARIANT (type);
6355
6356   return type;
6357 }
6358
6359 /* Return nonzero if the given type node represents a tagged type.  */
6360
6361 static inline int
6362 is_tagged_type (const_tree type)
6363 {
6364   enum tree_code code = TREE_CODE (type);
6365
6366   return (code == RECORD_TYPE || code == UNION_TYPE
6367           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6368 }
6369
6370 /* Convert a DIE tag into its string name.  */
6371
6372 static const char *
6373 dwarf_tag_name (unsigned int tag)
6374 {
6375   switch (tag)
6376     {
6377     case DW_TAG_padding:
6378       return "DW_TAG_padding";
6379     case DW_TAG_array_type:
6380       return "DW_TAG_array_type";
6381     case DW_TAG_class_type:
6382       return "DW_TAG_class_type";
6383     case DW_TAG_entry_point:
6384       return "DW_TAG_entry_point";
6385     case DW_TAG_enumeration_type:
6386       return "DW_TAG_enumeration_type";
6387     case DW_TAG_formal_parameter:
6388       return "DW_TAG_formal_parameter";
6389     case DW_TAG_imported_declaration:
6390       return "DW_TAG_imported_declaration";
6391     case DW_TAG_label:
6392       return "DW_TAG_label";
6393     case DW_TAG_lexical_block:
6394       return "DW_TAG_lexical_block";
6395     case DW_TAG_member:
6396       return "DW_TAG_member";
6397     case DW_TAG_pointer_type:
6398       return "DW_TAG_pointer_type";
6399     case DW_TAG_reference_type:
6400       return "DW_TAG_reference_type";
6401     case DW_TAG_compile_unit:
6402       return "DW_TAG_compile_unit";
6403     case DW_TAG_string_type:
6404       return "DW_TAG_string_type";
6405     case DW_TAG_structure_type:
6406       return "DW_TAG_structure_type";
6407     case DW_TAG_subroutine_type:
6408       return "DW_TAG_subroutine_type";
6409     case DW_TAG_typedef:
6410       return "DW_TAG_typedef";
6411     case DW_TAG_union_type:
6412       return "DW_TAG_union_type";
6413     case DW_TAG_unspecified_parameters:
6414       return "DW_TAG_unspecified_parameters";
6415     case DW_TAG_variant:
6416       return "DW_TAG_variant";
6417     case DW_TAG_common_block:
6418       return "DW_TAG_common_block";
6419     case DW_TAG_common_inclusion:
6420       return "DW_TAG_common_inclusion";
6421     case DW_TAG_inheritance:
6422       return "DW_TAG_inheritance";
6423     case DW_TAG_inlined_subroutine:
6424       return "DW_TAG_inlined_subroutine";
6425     case DW_TAG_module:
6426       return "DW_TAG_module";
6427     case DW_TAG_ptr_to_member_type:
6428       return "DW_TAG_ptr_to_member_type";
6429     case DW_TAG_set_type:
6430       return "DW_TAG_set_type";
6431     case DW_TAG_subrange_type:
6432       return "DW_TAG_subrange_type";
6433     case DW_TAG_with_stmt:
6434       return "DW_TAG_with_stmt";
6435     case DW_TAG_access_declaration:
6436       return "DW_TAG_access_declaration";
6437     case DW_TAG_base_type:
6438       return "DW_TAG_base_type";
6439     case DW_TAG_catch_block:
6440       return "DW_TAG_catch_block";
6441     case DW_TAG_const_type:
6442       return "DW_TAG_const_type";
6443     case DW_TAG_constant:
6444       return "DW_TAG_constant";
6445     case DW_TAG_enumerator:
6446       return "DW_TAG_enumerator";
6447     case DW_TAG_file_type:
6448       return "DW_TAG_file_type";
6449     case DW_TAG_friend:
6450       return "DW_TAG_friend";
6451     case DW_TAG_namelist:
6452       return "DW_TAG_namelist";
6453     case DW_TAG_namelist_item:
6454       return "DW_TAG_namelist_item";
6455     case DW_TAG_packed_type:
6456       return "DW_TAG_packed_type";
6457     case DW_TAG_subprogram:
6458       return "DW_TAG_subprogram";
6459     case DW_TAG_template_type_param:
6460       return "DW_TAG_template_type_param";
6461     case DW_TAG_template_value_param:
6462       return "DW_TAG_template_value_param";
6463     case DW_TAG_thrown_type:
6464       return "DW_TAG_thrown_type";
6465     case DW_TAG_try_block:
6466       return "DW_TAG_try_block";
6467     case DW_TAG_variant_part:
6468       return "DW_TAG_variant_part";
6469     case DW_TAG_variable:
6470       return "DW_TAG_variable";
6471     case DW_TAG_volatile_type:
6472       return "DW_TAG_volatile_type";
6473     case DW_TAG_dwarf_procedure:
6474       return "DW_TAG_dwarf_procedure";
6475     case DW_TAG_restrict_type:
6476       return "DW_TAG_restrict_type";
6477     case DW_TAG_interface_type:
6478       return "DW_TAG_interface_type";
6479     case DW_TAG_namespace:
6480       return "DW_TAG_namespace";
6481     case DW_TAG_imported_module:
6482       return "DW_TAG_imported_module";
6483     case DW_TAG_unspecified_type:
6484       return "DW_TAG_unspecified_type";
6485     case DW_TAG_partial_unit:
6486       return "DW_TAG_partial_unit";
6487     case DW_TAG_imported_unit:
6488       return "DW_TAG_imported_unit";
6489     case DW_TAG_condition:
6490       return "DW_TAG_condition";
6491     case DW_TAG_shared_type:
6492       return "DW_TAG_shared_type";
6493     case DW_TAG_type_unit:
6494       return "DW_TAG_type_unit";
6495     case DW_TAG_rvalue_reference_type:
6496       return "DW_TAG_rvalue_reference_type";
6497     case DW_TAG_template_alias:
6498       return "DW_TAG_template_alias";
6499     case DW_TAG_GNU_template_parameter_pack:
6500       return "DW_TAG_GNU_template_parameter_pack";
6501     case DW_TAG_GNU_formal_parameter_pack:
6502       return "DW_TAG_GNU_formal_parameter_pack";
6503     case DW_TAG_MIPS_loop:
6504       return "DW_TAG_MIPS_loop";
6505     case DW_TAG_format_label:
6506       return "DW_TAG_format_label";
6507     case DW_TAG_function_template:
6508       return "DW_TAG_function_template";
6509     case DW_TAG_class_template:
6510       return "DW_TAG_class_template";
6511     case DW_TAG_GNU_BINCL:
6512       return "DW_TAG_GNU_BINCL";
6513     case DW_TAG_GNU_EINCL:
6514       return "DW_TAG_GNU_EINCL";
6515     case DW_TAG_GNU_template_template_param:
6516       return "DW_TAG_GNU_template_template_param";
6517     default:
6518       return "DW_TAG_<unknown>";
6519     }
6520 }
6521
6522 /* Convert a DWARF attribute code into its string name.  */
6523
6524 static const char *
6525 dwarf_attr_name (unsigned int attr)
6526 {
6527   switch (attr)
6528     {
6529     case DW_AT_sibling:
6530       return "DW_AT_sibling";
6531     case DW_AT_location:
6532       return "DW_AT_location";
6533     case DW_AT_name:
6534       return "DW_AT_name";
6535     case DW_AT_ordering:
6536       return "DW_AT_ordering";
6537     case DW_AT_subscr_data:
6538       return "DW_AT_subscr_data";
6539     case DW_AT_byte_size:
6540       return "DW_AT_byte_size";
6541     case DW_AT_bit_offset:
6542       return "DW_AT_bit_offset";
6543     case DW_AT_bit_size:
6544       return "DW_AT_bit_size";
6545     case DW_AT_element_list:
6546       return "DW_AT_element_list";
6547     case DW_AT_stmt_list:
6548       return "DW_AT_stmt_list";
6549     case DW_AT_low_pc:
6550       return "DW_AT_low_pc";
6551     case DW_AT_high_pc:
6552       return "DW_AT_high_pc";
6553     case DW_AT_language:
6554       return "DW_AT_language";
6555     case DW_AT_member:
6556       return "DW_AT_member";
6557     case DW_AT_discr:
6558       return "DW_AT_discr";
6559     case DW_AT_discr_value:
6560       return "DW_AT_discr_value";
6561     case DW_AT_visibility:
6562       return "DW_AT_visibility";
6563     case DW_AT_import:
6564       return "DW_AT_import";
6565     case DW_AT_string_length:
6566       return "DW_AT_string_length";
6567     case DW_AT_common_reference:
6568       return "DW_AT_common_reference";
6569     case DW_AT_comp_dir:
6570       return "DW_AT_comp_dir";
6571     case DW_AT_const_value:
6572       return "DW_AT_const_value";
6573     case DW_AT_containing_type:
6574       return "DW_AT_containing_type";
6575     case DW_AT_default_value:
6576       return "DW_AT_default_value";
6577     case DW_AT_inline:
6578       return "DW_AT_inline";
6579     case DW_AT_is_optional:
6580       return "DW_AT_is_optional";
6581     case DW_AT_lower_bound:
6582       return "DW_AT_lower_bound";
6583     case DW_AT_producer:
6584       return "DW_AT_producer";
6585     case DW_AT_prototyped:
6586       return "DW_AT_prototyped";
6587     case DW_AT_return_addr:
6588       return "DW_AT_return_addr";
6589     case DW_AT_start_scope:
6590       return "DW_AT_start_scope";
6591     case DW_AT_bit_stride:
6592       return "DW_AT_bit_stride";
6593     case DW_AT_upper_bound:
6594       return "DW_AT_upper_bound";
6595     case DW_AT_abstract_origin:
6596       return "DW_AT_abstract_origin";
6597     case DW_AT_accessibility:
6598       return "DW_AT_accessibility";
6599     case DW_AT_address_class:
6600       return "DW_AT_address_class";
6601     case DW_AT_artificial:
6602       return "DW_AT_artificial";
6603     case DW_AT_base_types:
6604       return "DW_AT_base_types";
6605     case DW_AT_calling_convention:
6606       return "DW_AT_calling_convention";
6607     case DW_AT_count:
6608       return "DW_AT_count";
6609     case DW_AT_data_member_location:
6610       return "DW_AT_data_member_location";
6611     case DW_AT_decl_column:
6612       return "DW_AT_decl_column";
6613     case DW_AT_decl_file:
6614       return "DW_AT_decl_file";
6615     case DW_AT_decl_line:
6616       return "DW_AT_decl_line";
6617     case DW_AT_declaration:
6618       return "DW_AT_declaration";
6619     case DW_AT_discr_list:
6620       return "DW_AT_discr_list";
6621     case DW_AT_encoding:
6622       return "DW_AT_encoding";
6623     case DW_AT_external:
6624       return "DW_AT_external";
6625     case DW_AT_explicit:
6626       return "DW_AT_explicit";
6627     case DW_AT_frame_base:
6628       return "DW_AT_frame_base";
6629     case DW_AT_friend:
6630       return "DW_AT_friend";
6631     case DW_AT_identifier_case:
6632       return "DW_AT_identifier_case";
6633     case DW_AT_macro_info:
6634       return "DW_AT_macro_info";
6635     case DW_AT_namelist_items:
6636       return "DW_AT_namelist_items";
6637     case DW_AT_priority:
6638       return "DW_AT_priority";
6639     case DW_AT_segment:
6640       return "DW_AT_segment";
6641     case DW_AT_specification:
6642       return "DW_AT_specification";
6643     case DW_AT_static_link:
6644       return "DW_AT_static_link";
6645     case DW_AT_type:
6646       return "DW_AT_type";
6647     case DW_AT_use_location:
6648       return "DW_AT_use_location";
6649     case DW_AT_variable_parameter:
6650       return "DW_AT_variable_parameter";
6651     case DW_AT_virtuality:
6652       return "DW_AT_virtuality";
6653     case DW_AT_vtable_elem_location:
6654       return "DW_AT_vtable_elem_location";
6655
6656     case DW_AT_allocated:
6657       return "DW_AT_allocated";
6658     case DW_AT_associated:
6659       return "DW_AT_associated";
6660     case DW_AT_data_location:
6661       return "DW_AT_data_location";
6662     case DW_AT_byte_stride:
6663       return "DW_AT_byte_stride";
6664     case DW_AT_entry_pc:
6665       return "DW_AT_entry_pc";
6666     case DW_AT_use_UTF8:
6667       return "DW_AT_use_UTF8";
6668     case DW_AT_extension:
6669       return "DW_AT_extension";
6670     case DW_AT_ranges:
6671       return "DW_AT_ranges";
6672     case DW_AT_trampoline:
6673       return "DW_AT_trampoline";
6674     case DW_AT_call_column:
6675       return "DW_AT_call_column";
6676     case DW_AT_call_file:
6677       return "DW_AT_call_file";
6678     case DW_AT_call_line:
6679       return "DW_AT_call_line";
6680
6681     case DW_AT_signature:
6682       return "DW_AT_signature";
6683     case DW_AT_main_subprogram:
6684       return "DW_AT_main_subprogram";
6685     case DW_AT_data_bit_offset:
6686       return "DW_AT_data_bit_offset";
6687     case DW_AT_const_expr:
6688       return "DW_AT_const_expr";
6689     case DW_AT_enum_class:
6690       return "DW_AT_enum_class";
6691     case DW_AT_linkage_name:
6692       return "DW_AT_linkage_name";
6693
6694     case DW_AT_MIPS_fde:
6695       return "DW_AT_MIPS_fde";
6696     case DW_AT_MIPS_loop_begin:
6697       return "DW_AT_MIPS_loop_begin";
6698     case DW_AT_MIPS_tail_loop_begin:
6699       return "DW_AT_MIPS_tail_loop_begin";
6700     case DW_AT_MIPS_epilog_begin:
6701       return "DW_AT_MIPS_epilog_begin";
6702     case DW_AT_MIPS_loop_unroll_factor:
6703       return "DW_AT_MIPS_loop_unroll_factor";
6704     case DW_AT_MIPS_software_pipeline_depth:
6705       return "DW_AT_MIPS_software_pipeline_depth";
6706     case DW_AT_MIPS_linkage_name:
6707       return "DW_AT_MIPS_linkage_name";
6708     case DW_AT_MIPS_stride:
6709       return "DW_AT_MIPS_stride";
6710     case DW_AT_MIPS_abstract_name:
6711       return "DW_AT_MIPS_abstract_name";
6712     case DW_AT_MIPS_clone_origin:
6713       return "DW_AT_MIPS_clone_origin";
6714     case DW_AT_MIPS_has_inlines:
6715       return "DW_AT_MIPS_has_inlines";
6716
6717     case DW_AT_sf_names:
6718       return "DW_AT_sf_names";
6719     case DW_AT_src_info:
6720       return "DW_AT_src_info";
6721     case DW_AT_mac_info:
6722       return "DW_AT_mac_info";
6723     case DW_AT_src_coords:
6724       return "DW_AT_src_coords";
6725     case DW_AT_body_begin:
6726       return "DW_AT_body_begin";
6727     case DW_AT_body_end:
6728       return "DW_AT_body_end";
6729     case DW_AT_GNU_vector:
6730       return "DW_AT_GNU_vector";
6731     case DW_AT_GNU_guarded_by:
6732       return "DW_AT_GNU_guarded_by";
6733     case DW_AT_GNU_pt_guarded_by:
6734       return "DW_AT_GNU_pt_guarded_by";
6735     case DW_AT_GNU_guarded:
6736       return "DW_AT_GNU_guarded";
6737     case DW_AT_GNU_pt_guarded:
6738       return "DW_AT_GNU_pt_guarded";
6739     case DW_AT_GNU_locks_excluded:
6740       return "DW_AT_GNU_locks_excluded";
6741     case DW_AT_GNU_exclusive_locks_required:
6742       return "DW_AT_GNU_exclusive_locks_required";
6743     case DW_AT_GNU_shared_locks_required:
6744       return "DW_AT_GNU_shared_locks_required";
6745     case DW_AT_GNU_odr_signature:
6746       return "DW_AT_GNU_odr_signature";
6747     case DW_AT_GNU_template_name:
6748       return "DW_AT_GNU_template_name";
6749
6750     case DW_AT_VMS_rtnbeg_pd_address:
6751       return "DW_AT_VMS_rtnbeg_pd_address";
6752
6753     default:
6754       return "DW_AT_<unknown>";
6755     }
6756 }
6757
6758 /* Convert a DWARF value form code into its string name.  */
6759
6760 static const char *
6761 dwarf_form_name (unsigned int form)
6762 {
6763   switch (form)
6764     {
6765     case DW_FORM_addr:
6766       return "DW_FORM_addr";
6767     case DW_FORM_block2:
6768       return "DW_FORM_block2";
6769     case DW_FORM_block4:
6770       return "DW_FORM_block4";
6771     case DW_FORM_data2:
6772       return "DW_FORM_data2";
6773     case DW_FORM_data4:
6774       return "DW_FORM_data4";
6775     case DW_FORM_data8:
6776       return "DW_FORM_data8";
6777     case DW_FORM_string:
6778       return "DW_FORM_string";
6779     case DW_FORM_block:
6780       return "DW_FORM_block";
6781     case DW_FORM_block1:
6782       return "DW_FORM_block1";
6783     case DW_FORM_data1:
6784       return "DW_FORM_data1";
6785     case DW_FORM_flag:
6786       return "DW_FORM_flag";
6787     case DW_FORM_sdata:
6788       return "DW_FORM_sdata";
6789     case DW_FORM_strp:
6790       return "DW_FORM_strp";
6791     case DW_FORM_udata:
6792       return "DW_FORM_udata";
6793     case DW_FORM_ref_addr:
6794       return "DW_FORM_ref_addr";
6795     case DW_FORM_ref1:
6796       return "DW_FORM_ref1";
6797     case DW_FORM_ref2:
6798       return "DW_FORM_ref2";
6799     case DW_FORM_ref4:
6800       return "DW_FORM_ref4";
6801     case DW_FORM_ref8:
6802       return "DW_FORM_ref8";
6803     case DW_FORM_ref_udata:
6804       return "DW_FORM_ref_udata";
6805     case DW_FORM_indirect:
6806       return "DW_FORM_indirect";
6807     case DW_FORM_sec_offset:
6808       return "DW_FORM_sec_offset";
6809     case DW_FORM_exprloc:
6810       return "DW_FORM_exprloc";
6811     case DW_FORM_flag_present:
6812       return "DW_FORM_flag_present";
6813     case DW_FORM_ref_sig8:
6814       return "DW_FORM_ref_sig8";
6815     default:
6816       return "DW_FORM_<unknown>";
6817     }
6818 }
6819 \f
6820 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6821    instance of an inlined instance of a decl which is local to an inline
6822    function, so we have to trace all of the way back through the origin chain
6823    to find out what sort of node actually served as the original seed for the
6824    given block.  */
6825
6826 static tree
6827 decl_ultimate_origin (const_tree decl)
6828 {
6829   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6830     return NULL_TREE;
6831
6832   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6833      nodes in the function to point to themselves; ignore that if
6834      we're trying to output the abstract instance of this function.  */
6835   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6836     return NULL_TREE;
6837
6838   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6839      most distant ancestor, this should never happen.  */
6840   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6841
6842   return DECL_ABSTRACT_ORIGIN (decl);
6843 }
6844
6845 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6846    of a virtual function may refer to a base class, so we check the 'this'
6847    parameter.  */
6848
6849 static tree
6850 decl_class_context (tree decl)
6851 {
6852   tree context = NULL_TREE;
6853
6854   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6855     context = DECL_CONTEXT (decl);
6856   else
6857     context = TYPE_MAIN_VARIANT
6858       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6859
6860   if (context && !TYPE_P (context))
6861     context = NULL_TREE;
6862
6863   return context;
6864 }
6865 \f
6866 /* Add an attribute/value pair to a DIE.  */
6867
6868 static inline void
6869 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6870 {
6871   /* Maybe this should be an assert?  */
6872   if (die == NULL)
6873     return;
6874
6875   if (die->die_attr == NULL)
6876     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6877   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6878 }
6879
6880 static inline enum dw_val_class
6881 AT_class (dw_attr_ref a)
6882 {
6883   return a->dw_attr_val.val_class;
6884 }
6885
6886 /* Add a flag value attribute to a DIE.  */
6887
6888 static inline void
6889 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6890 {
6891   dw_attr_node attr;
6892
6893   attr.dw_attr = attr_kind;
6894   attr.dw_attr_val.val_class = dw_val_class_flag;
6895   attr.dw_attr_val.v.val_flag = flag;
6896   add_dwarf_attr (die, &attr);
6897 }
6898
6899 static inline unsigned
6900 AT_flag (dw_attr_ref a)
6901 {
6902   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6903   return a->dw_attr_val.v.val_flag;
6904 }
6905
6906 /* Add a signed integer attribute value to a DIE.  */
6907
6908 static inline void
6909 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6910 {
6911   dw_attr_node attr;
6912
6913   attr.dw_attr = attr_kind;
6914   attr.dw_attr_val.val_class = dw_val_class_const;
6915   attr.dw_attr_val.v.val_int = int_val;
6916   add_dwarf_attr (die, &attr);
6917 }
6918
6919 static inline HOST_WIDE_INT
6920 AT_int (dw_attr_ref a)
6921 {
6922   gcc_assert (a && AT_class (a) == dw_val_class_const);
6923   return a->dw_attr_val.v.val_int;
6924 }
6925
6926 /* Add an unsigned integer attribute value to a DIE.  */
6927
6928 static inline void
6929 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6930                  unsigned HOST_WIDE_INT unsigned_val)
6931 {
6932   dw_attr_node attr;
6933
6934   attr.dw_attr = attr_kind;
6935   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6936   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6937   add_dwarf_attr (die, &attr);
6938 }
6939
6940 static inline unsigned HOST_WIDE_INT
6941 AT_unsigned (dw_attr_ref a)
6942 {
6943   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6944   return a->dw_attr_val.v.val_unsigned;
6945 }
6946
6947 /* Add an unsigned double integer attribute value to a DIE.  */
6948
6949 static inline void
6950 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6951                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6952 {
6953   dw_attr_node attr;
6954
6955   attr.dw_attr = attr_kind;
6956   attr.dw_attr_val.val_class = dw_val_class_const_double;
6957   attr.dw_attr_val.v.val_double.high = high;
6958   attr.dw_attr_val.v.val_double.low = low;
6959   add_dwarf_attr (die, &attr);
6960 }
6961
6962 /* Add a floating point attribute value to a DIE and return it.  */
6963
6964 static inline void
6965 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6966             unsigned int length, unsigned int elt_size, unsigned char *array)
6967 {
6968   dw_attr_node attr;
6969
6970   attr.dw_attr = attr_kind;
6971   attr.dw_attr_val.val_class = dw_val_class_vec;
6972   attr.dw_attr_val.v.val_vec.length = length;
6973   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6974   attr.dw_attr_val.v.val_vec.array = array;
6975   add_dwarf_attr (die, &attr);
6976 }
6977
6978 /* Add an 8-byte data attribute value to a DIE.  */
6979
6980 static inline void
6981 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6982               unsigned char data8[8])
6983 {
6984   dw_attr_node attr;
6985
6986   attr.dw_attr = attr_kind;
6987   attr.dw_attr_val.val_class = dw_val_class_data8;
6988   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6989   add_dwarf_attr (die, &attr);
6990 }
6991
6992 /* Hash and equality functions for debug_str_hash.  */
6993
6994 static hashval_t
6995 debug_str_do_hash (const void *x)
6996 {
6997   return htab_hash_string (((const struct indirect_string_node *)x)->str);
6998 }
6999
7000 static int
7001 debug_str_eq (const void *x1, const void *x2)
7002 {
7003   return strcmp ((((const struct indirect_string_node *)x1)->str),
7004                  (const char *)x2) == 0;
7005 }
7006
7007 /* Add STR to the indirect string hash table.  */
7008
7009 static struct indirect_string_node *
7010 find_AT_string (const char *str)
7011 {
7012   struct indirect_string_node *node;
7013   void **slot;
7014
7015   if (! debug_str_hash)
7016     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7017                                       debug_str_eq, NULL);
7018
7019   slot = htab_find_slot_with_hash (debug_str_hash, str,
7020                                    htab_hash_string (str), INSERT);
7021   if (*slot == NULL)
7022     {
7023       node = (struct indirect_string_node *)
7024                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7025       node->str = ggc_strdup (str);
7026       *slot = node;
7027     }
7028   else
7029     node = (struct indirect_string_node *) *slot;
7030
7031   node->refcount++;
7032   return node;
7033 }
7034
7035 /* Add a string attribute value to a DIE.  */
7036
7037 static inline void
7038 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7039 {
7040   dw_attr_node attr;
7041   struct indirect_string_node *node;
7042
7043   node = find_AT_string (str);
7044
7045   attr.dw_attr = attr_kind;
7046   attr.dw_attr_val.val_class = dw_val_class_str;
7047   attr.dw_attr_val.v.val_str = node;
7048   add_dwarf_attr (die, &attr);
7049 }
7050
7051 /* Create a label for an indirect string node, ensuring it is going to
7052    be output, unless its reference count goes down to zero.  */
7053
7054 static inline void
7055 gen_label_for_indirect_string (struct indirect_string_node *node)
7056 {
7057   char label[32];
7058
7059   if (node->label)
7060     return;
7061
7062   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7063   ++dw2_string_counter;
7064   node->label = xstrdup (label);
7065 }
7066
7067 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7068    debug string STR.  */
7069
7070 static inline rtx
7071 get_debug_string_label (const char *str)
7072 {
7073   struct indirect_string_node *node = find_AT_string (str);
7074
7075   debug_str_hash_forced = true;
7076
7077   gen_label_for_indirect_string (node);
7078
7079   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7080 }
7081
7082 static inline const char *
7083 AT_string (dw_attr_ref a)
7084 {
7085   gcc_assert (a && AT_class (a) == dw_val_class_str);
7086   return a->dw_attr_val.v.val_str->str;
7087 }
7088
7089 /* Find out whether a string should be output inline in DIE
7090    or out-of-line in .debug_str section.  */
7091
7092 static enum dwarf_form
7093 AT_string_form (dw_attr_ref a)
7094 {
7095   struct indirect_string_node *node;
7096   unsigned int len;
7097
7098   gcc_assert (a && AT_class (a) == dw_val_class_str);
7099
7100   node = a->dw_attr_val.v.val_str;
7101   if (node->form)
7102     return node->form;
7103
7104   len = strlen (node->str) + 1;
7105
7106   /* If the string is shorter or equal to the size of the reference, it is
7107      always better to put it inline.  */
7108   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7109     return node->form = DW_FORM_string;
7110
7111   /* If we cannot expect the linker to merge strings in .debug_str
7112      section, only put it into .debug_str if it is worth even in this
7113      single module.  */
7114   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7115       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7116       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7117     return node->form = DW_FORM_string;
7118
7119   gen_label_for_indirect_string (node);
7120
7121   return node->form = DW_FORM_strp;
7122 }
7123
7124 /* Add a DIE reference attribute value to a DIE.  */
7125
7126 static inline void
7127 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7128 {
7129   dw_attr_node attr;
7130
7131   attr.dw_attr = attr_kind;
7132   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7133   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7134   attr.dw_attr_val.v.val_die_ref.external = 0;
7135   add_dwarf_attr (die, &attr);
7136 }
7137
7138 /* Add an AT_specification attribute to a DIE, and also make the back
7139    pointer from the specification to the definition.  */
7140
7141 static inline void
7142 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7143 {
7144   add_AT_die_ref (die, DW_AT_specification, targ_die);
7145   gcc_assert (!targ_die->die_definition);
7146   targ_die->die_definition = die;
7147 }
7148
7149 static inline dw_die_ref
7150 AT_ref (dw_attr_ref a)
7151 {
7152   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7153   return a->dw_attr_val.v.val_die_ref.die;
7154 }
7155
7156 static inline int
7157 AT_ref_external (dw_attr_ref a)
7158 {
7159   if (a && AT_class (a) == dw_val_class_die_ref)
7160     return a->dw_attr_val.v.val_die_ref.external;
7161
7162   return 0;
7163 }
7164
7165 static inline void
7166 set_AT_ref_external (dw_attr_ref a, int i)
7167 {
7168   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7169   a->dw_attr_val.v.val_die_ref.external = i;
7170 }
7171
7172 /* Add an FDE reference attribute value to a DIE.  */
7173
7174 static inline void
7175 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7176 {
7177   dw_attr_node attr;
7178
7179   attr.dw_attr = attr_kind;
7180   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7181   attr.dw_attr_val.v.val_fde_index = targ_fde;
7182   add_dwarf_attr (die, &attr);
7183 }
7184
7185 /* Add a location description attribute value to a DIE.  */
7186
7187 static inline void
7188 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7189 {
7190   dw_attr_node attr;
7191
7192   attr.dw_attr = attr_kind;
7193   attr.dw_attr_val.val_class = dw_val_class_loc;
7194   attr.dw_attr_val.v.val_loc = loc;
7195   add_dwarf_attr (die, &attr);
7196 }
7197
7198 static inline dw_loc_descr_ref
7199 AT_loc (dw_attr_ref a)
7200 {
7201   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7202   return a->dw_attr_val.v.val_loc;
7203 }
7204
7205 static inline void
7206 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7207 {
7208   dw_attr_node attr;
7209
7210   attr.dw_attr = attr_kind;
7211   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7212   attr.dw_attr_val.v.val_loc_list = loc_list;
7213   add_dwarf_attr (die, &attr);
7214   have_location_lists = true;
7215 }
7216
7217 static inline dw_loc_list_ref
7218 AT_loc_list (dw_attr_ref a)
7219 {
7220   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7221   return a->dw_attr_val.v.val_loc_list;
7222 }
7223
7224 static inline dw_loc_list_ref *
7225 AT_loc_list_ptr (dw_attr_ref a)
7226 {
7227   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7228   return &a->dw_attr_val.v.val_loc_list;
7229 }
7230
7231 /* Add an address constant attribute value to a DIE.  */
7232
7233 static inline void
7234 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7235 {
7236   dw_attr_node attr;
7237
7238   attr.dw_attr = attr_kind;
7239   attr.dw_attr_val.val_class = dw_val_class_addr;
7240   attr.dw_attr_val.v.val_addr = addr;
7241   add_dwarf_attr (die, &attr);
7242 }
7243
7244 /* Get the RTX from to an address DIE attribute.  */
7245
7246 static inline rtx
7247 AT_addr (dw_attr_ref a)
7248 {
7249   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7250   return a->dw_attr_val.v.val_addr;
7251 }
7252
7253 /* Add a file attribute value to a DIE.  */
7254
7255 static inline void
7256 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7257              struct dwarf_file_data *fd)
7258 {
7259   dw_attr_node attr;
7260
7261   attr.dw_attr = attr_kind;
7262   attr.dw_attr_val.val_class = dw_val_class_file;
7263   attr.dw_attr_val.v.val_file = fd;
7264   add_dwarf_attr (die, &attr);
7265 }
7266
7267 /* Get the dwarf_file_data from a file DIE attribute.  */
7268
7269 static inline struct dwarf_file_data *
7270 AT_file (dw_attr_ref a)
7271 {
7272   gcc_assert (a && AT_class (a) == dw_val_class_file);
7273   return a->dw_attr_val.v.val_file;
7274 }
7275
7276 /* Add a label identifier attribute value to a DIE.  */
7277
7278 static inline void
7279 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7280 {
7281   dw_attr_node attr;
7282
7283   attr.dw_attr = attr_kind;
7284   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7285   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7286   add_dwarf_attr (die, &attr);
7287 }
7288
7289 /* Add a section offset attribute value to a DIE, an offset into the
7290    debug_line section.  */
7291
7292 static inline void
7293 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7294                 const char *label)
7295 {
7296   dw_attr_node attr;
7297
7298   attr.dw_attr = attr_kind;
7299   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7300   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7301   add_dwarf_attr (die, &attr);
7302 }
7303
7304 /* Add a section offset attribute value to a DIE, an offset into the
7305    debug_macinfo section.  */
7306
7307 static inline void
7308 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7309                const char *label)
7310 {
7311   dw_attr_node attr;
7312
7313   attr.dw_attr = attr_kind;
7314   attr.dw_attr_val.val_class = dw_val_class_macptr;
7315   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7316   add_dwarf_attr (die, &attr);
7317 }
7318
7319 /* Add an offset attribute value to a DIE.  */
7320
7321 static inline void
7322 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7323                unsigned HOST_WIDE_INT offset)
7324 {
7325   dw_attr_node attr;
7326
7327   attr.dw_attr = attr_kind;
7328   attr.dw_attr_val.val_class = dw_val_class_offset;
7329   attr.dw_attr_val.v.val_offset = offset;
7330   add_dwarf_attr (die, &attr);
7331 }
7332
7333 /* Add an range_list attribute value to a DIE.  */
7334
7335 static void
7336 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7337                    long unsigned int offset)
7338 {
7339   dw_attr_node attr;
7340
7341   attr.dw_attr = attr_kind;
7342   attr.dw_attr_val.val_class = dw_val_class_range_list;
7343   attr.dw_attr_val.v.val_offset = offset;
7344   add_dwarf_attr (die, &attr);
7345 }
7346
7347 static inline const char *
7348 AT_lbl (dw_attr_ref a)
7349 {
7350   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7351                     || AT_class (a) == dw_val_class_lineptr
7352                     || AT_class (a) == dw_val_class_macptr));
7353   return a->dw_attr_val.v.val_lbl_id;
7354 }
7355
7356 /* Get the attribute of type attr_kind.  */
7357
7358 static dw_attr_ref
7359 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7360 {
7361   dw_attr_ref a;
7362   unsigned ix;
7363   dw_die_ref spec = NULL;
7364
7365   if (! die)
7366     return NULL;
7367
7368   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7369     if (a->dw_attr == attr_kind)
7370       return a;
7371     else if (a->dw_attr == DW_AT_specification
7372              || a->dw_attr == DW_AT_abstract_origin)
7373       spec = AT_ref (a);
7374
7375   if (spec)
7376     return get_AT (spec, attr_kind);
7377
7378   return NULL;
7379 }
7380
7381 /* Return the "low pc" attribute value, typically associated with a subprogram
7382    DIE.  Return null if the "low pc" attribute is either not present, or if it
7383    cannot be represented as an assembler label identifier.  */
7384
7385 static inline const char *
7386 get_AT_low_pc (dw_die_ref die)
7387 {
7388   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7389
7390   return a ? AT_lbl (a) : NULL;
7391 }
7392
7393 /* Return the "high pc" attribute value, typically associated with a subprogram
7394    DIE.  Return null if the "high pc" attribute is either not present, or if it
7395    cannot be represented as an assembler label identifier.  */
7396
7397 static inline const char *
7398 get_AT_hi_pc (dw_die_ref die)
7399 {
7400   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7401
7402   return a ? AT_lbl (a) : NULL;
7403 }
7404
7405 /* Return the value of the string attribute designated by ATTR_KIND, or
7406    NULL if it is not present.  */
7407
7408 static inline const char *
7409 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7410 {
7411   dw_attr_ref a = get_AT (die, attr_kind);
7412
7413   return a ? AT_string (a) : NULL;
7414 }
7415
7416 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7417    if it is not present.  */
7418
7419 static inline int
7420 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7421 {
7422   dw_attr_ref a = get_AT (die, attr_kind);
7423
7424   return a ? AT_flag (a) : 0;
7425 }
7426
7427 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7428    if it is not present.  */
7429
7430 static inline unsigned
7431 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7432 {
7433   dw_attr_ref a = get_AT (die, attr_kind);
7434
7435   return a ? AT_unsigned (a) : 0;
7436 }
7437
7438 static inline dw_die_ref
7439 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7440 {
7441   dw_attr_ref a = get_AT (die, attr_kind);
7442
7443   return a ? AT_ref (a) : NULL;
7444 }
7445
7446 static inline struct dwarf_file_data *
7447 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7448 {
7449   dw_attr_ref a = get_AT (die, attr_kind);
7450
7451   return a ? AT_file (a) : NULL;
7452 }
7453
7454 /* Return TRUE if the language is C++.  */
7455
7456 static inline bool
7457 is_cxx (void)
7458 {
7459   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7460
7461   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7462 }
7463
7464 /* Return TRUE if the language is Fortran.  */
7465
7466 static inline bool
7467 is_fortran (void)
7468 {
7469   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7470
7471   return (lang == DW_LANG_Fortran77
7472           || lang == DW_LANG_Fortran90
7473           || lang == DW_LANG_Fortran95);
7474 }
7475
7476 /* Return TRUE if the language is Ada.  */
7477
7478 static inline bool
7479 is_ada (void)
7480 {
7481   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7482
7483   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7484 }
7485
7486 /* Remove the specified attribute if present.  */
7487
7488 static void
7489 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7490 {
7491   dw_attr_ref a;
7492   unsigned ix;
7493
7494   if (! die)
7495     return;
7496
7497   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7498     if (a->dw_attr == attr_kind)
7499       {
7500         if (AT_class (a) == dw_val_class_str)
7501           if (a->dw_attr_val.v.val_str->refcount)
7502             a->dw_attr_val.v.val_str->refcount--;
7503
7504         /* VEC_ordered_remove should help reduce the number of abbrevs
7505            that are needed.  */
7506         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7507         return;
7508       }
7509 }
7510
7511 /* Remove CHILD from its parent.  PREV must have the property that
7512    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7513
7514 static void
7515 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7516 {
7517   gcc_assert (child->die_parent == prev->die_parent);
7518   gcc_assert (prev->die_sib == child);
7519   if (prev == child)
7520     {
7521       gcc_assert (child->die_parent->die_child == child);
7522       prev = NULL;
7523     }
7524   else
7525     prev->die_sib = child->die_sib;
7526   if (child->die_parent->die_child == child)
7527     child->die_parent->die_child = prev;
7528 }
7529
7530 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7531    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7532
7533 static void
7534 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7535 {
7536   dw_die_ref parent = old_child->die_parent;
7537
7538   gcc_assert (parent == prev->die_parent);
7539   gcc_assert (prev->die_sib == old_child);
7540
7541   new_child->die_parent = parent;
7542   if (prev == old_child)
7543     {
7544       gcc_assert (parent->die_child == old_child);
7545       new_child->die_sib = new_child;
7546     }
7547   else
7548     {
7549       prev->die_sib = new_child;
7550       new_child->die_sib = old_child->die_sib;
7551     }
7552   if (old_child->die_parent->die_child == old_child)
7553     old_child->die_parent->die_child = new_child;
7554 }
7555
7556 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7557
7558 static void
7559 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7560 {
7561   dw_die_ref c;
7562   new_parent->die_child = old_parent->die_child;
7563   old_parent->die_child = NULL;
7564   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7565 }
7566
7567 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7568    matches TAG.  */
7569
7570 static void
7571 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7572 {
7573   dw_die_ref c;
7574
7575   c = die->die_child;
7576   if (c) do {
7577     dw_die_ref prev = c;
7578     c = c->die_sib;
7579     while (c->die_tag == tag)
7580       {
7581         remove_child_with_prev (c, prev);
7582         /* Might have removed every child.  */
7583         if (c == c->die_sib)
7584           return;
7585         c = c->die_sib;
7586       }
7587   } while (c != die->die_child);
7588 }
7589
7590 /* Add a CHILD_DIE as the last child of DIE.  */
7591
7592 static void
7593 add_child_die (dw_die_ref die, dw_die_ref child_die)
7594 {
7595   /* FIXME this should probably be an assert.  */
7596   if (! die || ! child_die)
7597     return;
7598   gcc_assert (die != child_die);
7599
7600   child_die->die_parent = die;
7601   if (die->die_child)
7602     {
7603       child_die->die_sib = die->die_child->die_sib;
7604       die->die_child->die_sib = child_die;
7605     }
7606   else
7607     child_die->die_sib = child_die;
7608   die->die_child = child_die;
7609 }
7610
7611 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7612    is the specification, to the end of PARENT's list of children.
7613    This is done by removing and re-adding it.  */
7614
7615 static void
7616 splice_child_die (dw_die_ref parent, dw_die_ref child)
7617 {
7618   dw_die_ref p;
7619
7620   /* We want the declaration DIE from inside the class, not the
7621      specification DIE at toplevel.  */
7622   if (child->die_parent != parent)
7623     {
7624       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7625
7626       if (tmp)
7627         child = tmp;
7628     }
7629
7630   gcc_assert (child->die_parent == parent
7631               || (child->die_parent
7632                   == get_AT_ref (parent, DW_AT_specification)));
7633
7634   for (p = child->die_parent->die_child; ; p = p->die_sib)
7635     if (p->die_sib == child)
7636       {
7637         remove_child_with_prev (child, p);
7638         break;
7639       }
7640
7641   add_child_die (parent, child);
7642 }
7643
7644 /* Return a pointer to a newly created DIE node.  */
7645
7646 static inline dw_die_ref
7647 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7648 {
7649   dw_die_ref die = GGC_CNEW (die_node);
7650
7651   die->die_tag = tag_value;
7652
7653   if (parent_die != NULL)
7654     add_child_die (parent_die, die);
7655   else
7656     {
7657       limbo_die_node *limbo_node;
7658
7659       limbo_node = GGC_CNEW (limbo_die_node);
7660       limbo_node->die = die;
7661       limbo_node->created_for = t;
7662       limbo_node->next = limbo_die_list;
7663       limbo_die_list = limbo_node;
7664     }
7665
7666   return die;
7667 }
7668
7669 /* Return the DIE associated with the given type specifier.  */
7670
7671 static inline dw_die_ref
7672 lookup_type_die (tree type)
7673 {
7674   return TYPE_SYMTAB_DIE (type);
7675 }
7676
7677 /* Equate a DIE to a given type specifier.  */
7678
7679 static inline void
7680 equate_type_number_to_die (tree type, dw_die_ref type_die)
7681 {
7682   TYPE_SYMTAB_DIE (type) = type_die;
7683 }
7684
7685 /* Returns a hash value for X (which really is a die_struct).  */
7686
7687 static hashval_t
7688 decl_die_table_hash (const void *x)
7689 {
7690   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7691 }
7692
7693 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7694
7695 static int
7696 decl_die_table_eq (const void *x, const void *y)
7697 {
7698   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7699 }
7700
7701 /* Return the DIE associated with a given declaration.  */
7702
7703 static inline dw_die_ref
7704 lookup_decl_die (tree decl)
7705 {
7706   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7707 }
7708
7709 /* Returns a hash value for X (which really is a var_loc_list).  */
7710
7711 static hashval_t
7712 decl_loc_table_hash (const void *x)
7713 {
7714   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7715 }
7716
7717 /* Return nonzero if decl_id of var_loc_list X is the same as
7718    UID of decl *Y.  */
7719
7720 static int
7721 decl_loc_table_eq (const void *x, const void *y)
7722 {
7723   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7724 }
7725
7726 /* Return the var_loc list associated with a given declaration.  */
7727
7728 static inline var_loc_list *
7729 lookup_decl_loc (const_tree decl)
7730 {
7731   if (!decl_loc_table)
7732     return NULL;
7733   return (var_loc_list *)
7734     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7735 }
7736
7737 /* Equate a DIE to a particular declaration.  */
7738
7739 static void
7740 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7741 {
7742   unsigned int decl_id = DECL_UID (decl);
7743   void **slot;
7744
7745   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7746   *slot = decl_die;
7747   decl_die->decl_id = decl_id;
7748 }
7749
7750 /* Add a variable location node to the linked list for DECL.  */
7751
7752 static struct var_loc_node *
7753 add_var_loc_to_decl (tree decl, rtx loc_note)
7754 {
7755   unsigned int decl_id = DECL_UID (decl);
7756   var_loc_list *temp;
7757   void **slot;
7758   struct var_loc_node *loc = NULL;
7759
7760   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7761   if (*slot == NULL)
7762     {
7763       temp = GGC_CNEW (var_loc_list);
7764       temp->decl_id = decl_id;
7765       *slot = temp;
7766     }
7767   else
7768     temp = (var_loc_list *) *slot;
7769
7770   if (temp->last)
7771     {
7772       /* If the current location is the same as the end of the list,
7773          and either both or neither of the locations is uninitialized,
7774          we have nothing to do.  */
7775       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7776                          NOTE_VAR_LOCATION_LOC (loc_note)))
7777           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7778                != NOTE_VAR_LOCATION_STATUS (loc_note))
7779               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7780                    == VAR_INIT_STATUS_UNINITIALIZED)
7781                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
7782                       == VAR_INIT_STATUS_UNINITIALIZED))))
7783         {
7784           /* Add LOC to the end of list and update LAST.  */
7785           loc = GGC_CNEW (struct var_loc_node);
7786           temp->last->next = loc;
7787           temp->last = loc;
7788         }
7789     }
7790   else
7791     {
7792       loc = GGC_CNEW (struct var_loc_node);
7793       temp->first = loc;
7794       temp->last = loc;
7795     }
7796   return loc;
7797 }
7798 \f
7799 /* Keep track of the number of spaces used to indent the
7800    output of the debugging routines that print the structure of
7801    the DIE internal representation.  */
7802 static int print_indent;
7803
7804 /* Indent the line the number of spaces given by print_indent.  */
7805
7806 static inline void
7807 print_spaces (FILE *outfile)
7808 {
7809   fprintf (outfile, "%*s", print_indent, "");
7810 }
7811
7812 /* Print a type signature in hex.  */
7813
7814 static inline void
7815 print_signature (FILE *outfile, char *sig)
7816 {
7817   int i;
7818
7819   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7820     fprintf (outfile, "%02x", sig[i] & 0xff);
7821 }
7822
7823 /* Print the information associated with a given DIE, and its children.
7824    This routine is a debugging aid only.  */
7825
7826 static void
7827 print_die (dw_die_ref die, FILE *outfile)
7828 {
7829   dw_attr_ref a;
7830   dw_die_ref c;
7831   unsigned ix;
7832
7833   print_spaces (outfile);
7834   fprintf (outfile, "DIE %4ld: %s\n",
7835            die->die_offset, dwarf_tag_name (die->die_tag));
7836   print_spaces (outfile);
7837   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7838   fprintf (outfile, " offset: %ld\n", die->die_offset);
7839   if (dwarf_version >= 4 && die->die_id.die_type_node)
7840     {
7841       print_spaces (outfile);
7842       fprintf (outfile, "  signature: ");
7843       print_signature (outfile, die->die_id.die_type_node->signature);
7844       fprintf (outfile, "\n");
7845     }
7846
7847   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7848     {
7849       print_spaces (outfile);
7850       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7851
7852       switch (AT_class (a))
7853         {
7854         case dw_val_class_addr:
7855           fprintf (outfile, "address");
7856           break;
7857         case dw_val_class_offset:
7858           fprintf (outfile, "offset");
7859           break;
7860         case dw_val_class_loc:
7861           fprintf (outfile, "location descriptor");
7862           break;
7863         case dw_val_class_loc_list:
7864           fprintf (outfile, "location list -> label:%s",
7865                    AT_loc_list (a)->ll_symbol);
7866           break;
7867         case dw_val_class_range_list:
7868           fprintf (outfile, "range list");
7869           break;
7870         case dw_val_class_const:
7871           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7872           break;
7873         case dw_val_class_unsigned_const:
7874           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7875           break;
7876         case dw_val_class_const_double:
7877           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7878                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7879                    a->dw_attr_val.v.val_double.high,
7880                    a->dw_attr_val.v.val_double.low);
7881           break;
7882         case dw_val_class_vec:
7883           fprintf (outfile, "floating-point or vector constant");
7884           break;
7885         case dw_val_class_flag:
7886           fprintf (outfile, "%u", AT_flag (a));
7887           break;
7888         case dw_val_class_die_ref:
7889           if (AT_ref (a) != NULL)
7890             {
7891               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7892                 {
7893                   fprintf (outfile, "die -> signature: ");
7894                   print_signature (outfile,
7895                                    AT_ref (a)->die_id.die_type_node->signature);
7896                 }
7897               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7898                 fprintf (outfile, "die -> label: %s",
7899                          AT_ref (a)->die_id.die_symbol);
7900               else
7901                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7902             }
7903           else
7904             fprintf (outfile, "die -> <null>");
7905           break;
7906         case dw_val_class_lbl_id:
7907         case dw_val_class_lineptr:
7908         case dw_val_class_macptr:
7909           fprintf (outfile, "label: %s", AT_lbl (a));
7910           break;
7911         case dw_val_class_str:
7912           if (AT_string (a) != NULL)
7913             fprintf (outfile, "\"%s\"", AT_string (a));
7914           else
7915             fprintf (outfile, "<null>");
7916           break;
7917         case dw_val_class_file:
7918           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7919                    AT_file (a)->emitted_number);
7920           break;
7921         case dw_val_class_data8:
7922           {
7923             int i;
7924
7925             for (i = 0; i < 8; i++)
7926               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7927             break;
7928           }
7929         default:
7930           break;
7931         }
7932
7933       fprintf (outfile, "\n");
7934     }
7935
7936   if (die->die_child != NULL)
7937     {
7938       print_indent += 4;
7939       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7940       print_indent -= 4;
7941     }
7942   if (print_indent == 0)
7943     fprintf (outfile, "\n");
7944 }
7945
7946 /* Print the contents of the source code line number correspondence table.
7947    This routine is a debugging aid only.  */
7948
7949 static void
7950 print_dwarf_line_table (FILE *outfile)
7951 {
7952   unsigned i;
7953   dw_line_info_ref line_info;
7954
7955   fprintf (outfile, "\n\nDWARF source line information\n");
7956   for (i = 1; i < line_info_table_in_use; i++)
7957     {
7958       line_info = &line_info_table[i];
7959       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7960                line_info->dw_file_num,
7961                line_info->dw_line_num);
7962     }
7963
7964   fprintf (outfile, "\n\n");
7965 }
7966
7967 /* Print the information collected for a given DIE.  */
7968
7969 void
7970 debug_dwarf_die (dw_die_ref die)
7971 {
7972   print_die (die, stderr);
7973 }
7974
7975 /* Print all DWARF information collected for the compilation unit.
7976    This routine is a debugging aid only.  */
7977
7978 void
7979 debug_dwarf (void)
7980 {
7981   print_indent = 0;
7982   print_die (comp_unit_die, stderr);
7983   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7984     print_dwarf_line_table (stderr);
7985 }
7986 \f
7987 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
7988    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
7989    DIE that marks the start of the DIEs for this include file.  */
7990
7991 static dw_die_ref
7992 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7993 {
7994   const char *filename = get_AT_string (bincl_die, DW_AT_name);
7995   dw_die_ref new_unit = gen_compile_unit_die (filename);
7996
7997   new_unit->die_sib = old_unit;
7998   return new_unit;
7999 }
8000
8001 /* Close an include-file CU and reopen the enclosing one.  */
8002
8003 static dw_die_ref
8004 pop_compile_unit (dw_die_ref old_unit)
8005 {
8006   dw_die_ref new_unit = old_unit->die_sib;
8007
8008   old_unit->die_sib = NULL;
8009   return new_unit;
8010 }
8011
8012 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8013 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8014
8015 /* Calculate the checksum of a location expression.  */
8016
8017 static inline void
8018 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8019 {
8020   int tem;
8021
8022   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8023   CHECKSUM (tem);
8024   CHECKSUM (loc->dw_loc_oprnd1);
8025   CHECKSUM (loc->dw_loc_oprnd2);
8026 }
8027
8028 /* Calculate the checksum of an attribute.  */
8029
8030 static void
8031 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8032 {
8033   dw_loc_descr_ref loc;
8034   rtx r;
8035
8036   CHECKSUM (at->dw_attr);
8037
8038   /* We don't care that this was compiled with a different compiler
8039      snapshot; if the output is the same, that's what matters.  */
8040   if (at->dw_attr == DW_AT_producer)
8041     return;
8042
8043   switch (AT_class (at))
8044     {
8045     case dw_val_class_const:
8046       CHECKSUM (at->dw_attr_val.v.val_int);
8047       break;
8048     case dw_val_class_unsigned_const:
8049       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8050       break;
8051     case dw_val_class_const_double:
8052       CHECKSUM (at->dw_attr_val.v.val_double);
8053       break;
8054     case dw_val_class_vec:
8055       CHECKSUM (at->dw_attr_val.v.val_vec);
8056       break;
8057     case dw_val_class_flag:
8058       CHECKSUM (at->dw_attr_val.v.val_flag);
8059       break;
8060     case dw_val_class_str:
8061       CHECKSUM_STRING (AT_string (at));
8062       break;
8063
8064     case dw_val_class_addr:
8065       r = AT_addr (at);
8066       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8067       CHECKSUM_STRING (XSTR (r, 0));
8068       break;
8069
8070     case dw_val_class_offset:
8071       CHECKSUM (at->dw_attr_val.v.val_offset);
8072       break;
8073
8074     case dw_val_class_loc:
8075       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8076         loc_checksum (loc, ctx);
8077       break;
8078
8079     case dw_val_class_die_ref:
8080       die_checksum (AT_ref (at), ctx, mark);
8081       break;
8082
8083     case dw_val_class_fde_ref:
8084     case dw_val_class_lbl_id:
8085     case dw_val_class_lineptr:
8086     case dw_val_class_macptr:
8087       break;
8088
8089     case dw_val_class_file:
8090       CHECKSUM_STRING (AT_file (at)->filename);
8091       break;
8092
8093     case dw_val_class_data8:
8094       CHECKSUM (at->dw_attr_val.v.val_data8);
8095       break;
8096
8097     default:
8098       break;
8099     }
8100 }
8101
8102 /* Calculate the checksum of a DIE.  */
8103
8104 static void
8105 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8106 {
8107   dw_die_ref c;
8108   dw_attr_ref a;
8109   unsigned ix;
8110
8111   /* To avoid infinite recursion.  */
8112   if (die->die_mark)
8113     {
8114       CHECKSUM (die->die_mark);
8115       return;
8116     }
8117   die->die_mark = ++(*mark);
8118
8119   CHECKSUM (die->die_tag);
8120
8121   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8122     attr_checksum (a, ctx, mark);
8123
8124   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8125 }
8126
8127 #undef CHECKSUM
8128 #undef CHECKSUM_STRING
8129
8130 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8131 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8132 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8133 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8134 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8135 #define CHECKSUM_ATTR(FOO) \
8136   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8137
8138 /* Calculate the checksum of a number in signed LEB128 format.  */
8139
8140 static void
8141 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8142 {
8143   unsigned char byte;
8144   bool more;
8145
8146   while (1)
8147     {
8148       byte = (value & 0x7f);
8149       value >>= 7;
8150       more = !((value == 0 && (byte & 0x40) == 0)
8151                 || (value == -1 && (byte & 0x40) != 0));
8152       if (more)
8153         byte |= 0x80;
8154       CHECKSUM (byte);
8155       if (!more)
8156         break;
8157     }
8158 }
8159
8160 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8161
8162 static void
8163 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8164 {
8165   while (1)
8166     {
8167       unsigned char byte = (value & 0x7f);
8168       value >>= 7;
8169       if (value != 0)
8170         /* More bytes to follow.  */
8171         byte |= 0x80;
8172       CHECKSUM (byte);
8173       if (value == 0)
8174         break;
8175     }
8176 }
8177
8178 /* Checksum the context of the DIE.  This adds the names of any
8179    surrounding namespaces or structures to the checksum.  */
8180
8181 static void
8182 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8183 {
8184   const char *name;
8185   dw_die_ref spec;
8186   int tag = die->die_tag;
8187
8188   if (tag != DW_TAG_namespace
8189       && tag != DW_TAG_structure_type
8190       && tag != DW_TAG_class_type)
8191     return;
8192
8193   name = get_AT_string (die, DW_AT_name);
8194
8195   spec = get_AT_ref (die, DW_AT_specification);
8196   if (spec != NULL)
8197     die = spec;
8198
8199   if (die->die_parent != NULL)
8200     checksum_die_context (die->die_parent, ctx);
8201
8202   CHECKSUM_ULEB128 ('C');
8203   CHECKSUM_ULEB128 (tag);
8204   if (name != NULL)
8205     CHECKSUM_STRING (name);
8206 }
8207
8208 /* Calculate the checksum of a location expression.  */
8209
8210 static inline void
8211 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8212 {
8213   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8214      were emitted as a DW_FORM_sdata instead of a location expression.  */
8215   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8216     {
8217       CHECKSUM_ULEB128 (DW_FORM_sdata);
8218       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8219       return;
8220     }
8221
8222   /* Otherwise, just checksum the raw location expression.  */
8223   while (loc != NULL)
8224     {
8225       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8226       CHECKSUM (loc->dw_loc_oprnd1);
8227       CHECKSUM (loc->dw_loc_oprnd2);
8228       loc = loc->dw_loc_next;
8229     }
8230 }
8231
8232 /* Calculate the checksum of an attribute.  */
8233
8234 static void
8235 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8236                        struct md5_ctx *ctx, int *mark)
8237 {
8238   dw_loc_descr_ref loc;
8239   rtx r;
8240
8241   if (AT_class (at) == dw_val_class_die_ref)
8242     {
8243       dw_die_ref target_die = AT_ref (at);
8244
8245       /* For pointer and reference types, we checksum only the (qualified)
8246          name of the target type (if there is a name).  For friend entries,
8247          we checksum only the (qualified) name of the target type or function.
8248          This allows the checksum to remain the same whether the target type
8249          is complete or not.  */
8250       if ((at->dw_attr == DW_AT_type
8251            && (tag == DW_TAG_pointer_type
8252                || tag == DW_TAG_reference_type
8253                || tag == DW_TAG_rvalue_reference_type
8254                || tag == DW_TAG_ptr_to_member_type))
8255           || (at->dw_attr == DW_AT_friend
8256               && tag == DW_TAG_friend))
8257         {
8258           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8259
8260           if (name_attr != NULL)
8261             {
8262               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8263
8264               if (decl == NULL)
8265                 decl = target_die;
8266               CHECKSUM_ULEB128 ('N');
8267               CHECKSUM_ULEB128 (at->dw_attr);
8268               if (decl->die_parent != NULL)
8269                 checksum_die_context (decl->die_parent, ctx);
8270               CHECKSUM_ULEB128 ('E');
8271               CHECKSUM_STRING (AT_string (name_attr));
8272               return;
8273             }
8274         }
8275
8276       /* For all other references to another DIE, we check to see if the
8277          target DIE has already been visited.  If it has, we emit a
8278          backward reference; if not, we descend recursively.  */
8279       if (target_die->die_mark > 0)
8280         {
8281           CHECKSUM_ULEB128 ('R');
8282           CHECKSUM_ULEB128 (at->dw_attr);
8283           CHECKSUM_ULEB128 (target_die->die_mark);
8284         }
8285       else
8286         {
8287           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8288
8289           if (decl == NULL)
8290             decl = target_die;
8291           target_die->die_mark = ++(*mark);
8292           CHECKSUM_ULEB128 ('T');
8293           CHECKSUM_ULEB128 (at->dw_attr);
8294           if (decl->die_parent != NULL)
8295             checksum_die_context (decl->die_parent, ctx);
8296           die_checksum_ordered (target_die, ctx, mark);
8297         }
8298       return;
8299     }
8300
8301   CHECKSUM_ULEB128 ('A');
8302   CHECKSUM_ULEB128 (at->dw_attr);
8303
8304   switch (AT_class (at))
8305     {
8306     case dw_val_class_const:
8307       CHECKSUM_ULEB128 (DW_FORM_sdata);
8308       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8309       break;
8310
8311     case dw_val_class_unsigned_const:
8312       CHECKSUM_ULEB128 (DW_FORM_sdata);
8313       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8314       break;
8315
8316     case dw_val_class_const_double:
8317       CHECKSUM_ULEB128 (DW_FORM_block);
8318       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8319       CHECKSUM (at->dw_attr_val.v.val_double);
8320       break;
8321
8322     case dw_val_class_vec:
8323       CHECKSUM_ULEB128 (DW_FORM_block);
8324       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8325       CHECKSUM (at->dw_attr_val.v.val_vec);
8326       break;
8327
8328     case dw_val_class_flag:
8329       CHECKSUM_ULEB128 (DW_FORM_flag);
8330       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8331       break;
8332
8333     case dw_val_class_str:
8334       CHECKSUM_ULEB128 (DW_FORM_string);
8335       CHECKSUM_STRING (AT_string (at));
8336       break;
8337
8338     case dw_val_class_addr:
8339       r = AT_addr (at);
8340       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8341       CHECKSUM_ULEB128 (DW_FORM_string);
8342       CHECKSUM_STRING (XSTR (r, 0));
8343       break;
8344
8345     case dw_val_class_offset:
8346       CHECKSUM_ULEB128 (DW_FORM_sdata);
8347       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8348       break;
8349
8350     case dw_val_class_loc:
8351       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8352         loc_checksum_ordered (loc, ctx);
8353       break;
8354
8355     case dw_val_class_fde_ref:
8356     case dw_val_class_lbl_id:
8357     case dw_val_class_lineptr:
8358     case dw_val_class_macptr:
8359       break;
8360
8361     case dw_val_class_file:
8362       CHECKSUM_ULEB128 (DW_FORM_string);
8363       CHECKSUM_STRING (AT_file (at)->filename);
8364       break;
8365
8366     case dw_val_class_data8:
8367       CHECKSUM (at->dw_attr_val.v.val_data8);
8368       break;
8369
8370     default:
8371       break;
8372     }
8373 }
8374
8375 struct checksum_attributes
8376 {
8377   dw_attr_ref at_name;
8378   dw_attr_ref at_type;
8379   dw_attr_ref at_friend;
8380   dw_attr_ref at_accessibility;
8381   dw_attr_ref at_address_class;
8382   dw_attr_ref at_allocated;
8383   dw_attr_ref at_artificial;
8384   dw_attr_ref at_associated;
8385   dw_attr_ref at_binary_scale;
8386   dw_attr_ref at_bit_offset;
8387   dw_attr_ref at_bit_size;
8388   dw_attr_ref at_bit_stride;
8389   dw_attr_ref at_byte_size;
8390   dw_attr_ref at_byte_stride;
8391   dw_attr_ref at_const_value;
8392   dw_attr_ref at_containing_type;
8393   dw_attr_ref at_count;
8394   dw_attr_ref at_data_location;
8395   dw_attr_ref at_data_member_location;
8396   dw_attr_ref at_decimal_scale;
8397   dw_attr_ref at_decimal_sign;
8398   dw_attr_ref at_default_value;
8399   dw_attr_ref at_digit_count;
8400   dw_attr_ref at_discr;
8401   dw_attr_ref at_discr_list;
8402   dw_attr_ref at_discr_value;
8403   dw_attr_ref at_encoding;
8404   dw_attr_ref at_endianity;
8405   dw_attr_ref at_explicit;
8406   dw_attr_ref at_is_optional;
8407   dw_attr_ref at_location;
8408   dw_attr_ref at_lower_bound;
8409   dw_attr_ref at_mutable;
8410   dw_attr_ref at_ordering;
8411   dw_attr_ref at_picture_string;
8412   dw_attr_ref at_prototyped;
8413   dw_attr_ref at_small;
8414   dw_attr_ref at_segment;
8415   dw_attr_ref at_string_length;
8416   dw_attr_ref at_threads_scaled;
8417   dw_attr_ref at_upper_bound;
8418   dw_attr_ref at_use_location;
8419   dw_attr_ref at_use_UTF8;
8420   dw_attr_ref at_variable_parameter;
8421   dw_attr_ref at_virtuality;
8422   dw_attr_ref at_visibility;
8423   dw_attr_ref at_vtable_elem_location;
8424 };
8425
8426 /* Collect the attributes that we will want to use for the checksum.  */
8427
8428 static void
8429 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8430 {
8431   dw_attr_ref a;
8432   unsigned ix;
8433
8434   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8435     {
8436       switch (a->dw_attr)
8437         {
8438         case DW_AT_name:
8439           attrs->at_name = a;
8440           break;
8441         case DW_AT_type:
8442           attrs->at_type = a;
8443           break;
8444         case DW_AT_friend:
8445           attrs->at_friend = a;
8446           break;
8447         case DW_AT_accessibility:
8448           attrs->at_accessibility = a;
8449           break;
8450         case DW_AT_address_class:
8451           attrs->at_address_class = a;
8452           break;
8453         case DW_AT_allocated:
8454           attrs->at_allocated = a;
8455           break;
8456         case DW_AT_artificial:
8457           attrs->at_artificial = a;
8458           break;
8459         case DW_AT_associated:
8460           attrs->at_associated = a;
8461           break;
8462         case DW_AT_binary_scale:
8463           attrs->at_binary_scale = a;
8464           break;
8465         case DW_AT_bit_offset:
8466           attrs->at_bit_offset = a;
8467           break;
8468         case DW_AT_bit_size:
8469           attrs->at_bit_size = a;
8470           break;
8471         case DW_AT_bit_stride:
8472           attrs->at_bit_stride = a;
8473           break;
8474         case DW_AT_byte_size:
8475           attrs->at_byte_size = a;
8476           break;
8477         case DW_AT_byte_stride:
8478           attrs->at_byte_stride = a;
8479           break;
8480         case DW_AT_const_value:
8481           attrs->at_const_value = a;
8482           break;
8483         case DW_AT_containing_type:
8484           attrs->at_containing_type = a;
8485           break;
8486         case DW_AT_count:
8487           attrs->at_count = a;
8488           break;
8489         case DW_AT_data_location:
8490           attrs->at_data_location = a;
8491           break;
8492         case DW_AT_data_member_location:
8493           attrs->at_data_member_location = a;
8494           break;
8495         case DW_AT_decimal_scale:
8496           attrs->at_decimal_scale = a;
8497           break;
8498         case DW_AT_decimal_sign:
8499           attrs->at_decimal_sign = a;
8500           break;
8501         case DW_AT_default_value:
8502           attrs->at_default_value = a;
8503           break;
8504         case DW_AT_digit_count:
8505           attrs->at_digit_count = a;
8506           break;
8507         case DW_AT_discr:
8508           attrs->at_discr = a;
8509           break;
8510         case DW_AT_discr_list:
8511           attrs->at_discr_list = a;
8512           break;
8513         case DW_AT_discr_value:
8514           attrs->at_discr_value = a;
8515           break;
8516         case DW_AT_encoding:
8517           attrs->at_encoding = a;
8518           break;
8519         case DW_AT_endianity:
8520           attrs->at_endianity = a;
8521           break;
8522         case DW_AT_explicit:
8523           attrs->at_explicit = a;
8524           break;
8525         case DW_AT_is_optional:
8526           attrs->at_is_optional = a;
8527           break;
8528         case DW_AT_location:
8529           attrs->at_location = a;
8530           break;
8531         case DW_AT_lower_bound:
8532           attrs->at_lower_bound = a;
8533           break;
8534         case DW_AT_mutable:
8535           attrs->at_mutable = a;
8536           break;
8537         case DW_AT_ordering:
8538           attrs->at_ordering = a;
8539           break;
8540         case DW_AT_picture_string:
8541           attrs->at_picture_string = a;
8542           break;
8543         case DW_AT_prototyped:
8544           attrs->at_prototyped = a;
8545           break;
8546         case DW_AT_small:
8547           attrs->at_small = a;
8548           break;
8549         case DW_AT_segment:
8550           attrs->at_segment = a;
8551           break;
8552         case DW_AT_string_length:
8553           attrs->at_string_length = a;
8554           break;
8555         case DW_AT_threads_scaled:
8556           attrs->at_threads_scaled = a;
8557           break;
8558         case DW_AT_upper_bound:
8559           attrs->at_upper_bound = a;
8560           break;
8561         case DW_AT_use_location:
8562           attrs->at_use_location = a;
8563           break;
8564         case DW_AT_use_UTF8:
8565           attrs->at_use_UTF8 = a;
8566           break;
8567         case DW_AT_variable_parameter:
8568           attrs->at_variable_parameter = a;
8569           break;
8570         case DW_AT_virtuality:
8571           attrs->at_virtuality = a;
8572           break;
8573         case DW_AT_visibility:
8574           attrs->at_visibility = a;
8575           break;
8576         case DW_AT_vtable_elem_location:
8577           attrs->at_vtable_elem_location = a;
8578           break;
8579         default:
8580           break;
8581         }
8582     }
8583 }
8584
8585 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8586
8587 static void
8588 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8589 {
8590   dw_die_ref c;
8591   dw_die_ref decl;
8592   struct checksum_attributes attrs;
8593
8594   CHECKSUM_ULEB128 ('D');
8595   CHECKSUM_ULEB128 (die->die_tag);
8596
8597   memset (&attrs, 0, sizeof (attrs));
8598
8599   decl = get_AT_ref (die, DW_AT_specification);
8600   if (decl != NULL)
8601     collect_checksum_attributes (&attrs, decl);
8602   collect_checksum_attributes (&attrs, die);
8603
8604   CHECKSUM_ATTR (attrs.at_name);
8605   CHECKSUM_ATTR (attrs.at_accessibility);
8606   CHECKSUM_ATTR (attrs.at_address_class);
8607   CHECKSUM_ATTR (attrs.at_allocated);
8608   CHECKSUM_ATTR (attrs.at_artificial);
8609   CHECKSUM_ATTR (attrs.at_associated);
8610   CHECKSUM_ATTR (attrs.at_binary_scale);
8611   CHECKSUM_ATTR (attrs.at_bit_offset);
8612   CHECKSUM_ATTR (attrs.at_bit_size);
8613   CHECKSUM_ATTR (attrs.at_bit_stride);
8614   CHECKSUM_ATTR (attrs.at_byte_size);
8615   CHECKSUM_ATTR (attrs.at_byte_stride);
8616   CHECKSUM_ATTR (attrs.at_const_value);
8617   CHECKSUM_ATTR (attrs.at_containing_type);
8618   CHECKSUM_ATTR (attrs.at_count);
8619   CHECKSUM_ATTR (attrs.at_data_location);
8620   CHECKSUM_ATTR (attrs.at_data_member_location);
8621   CHECKSUM_ATTR (attrs.at_decimal_scale);
8622   CHECKSUM_ATTR (attrs.at_decimal_sign);
8623   CHECKSUM_ATTR (attrs.at_default_value);
8624   CHECKSUM_ATTR (attrs.at_digit_count);
8625   CHECKSUM_ATTR (attrs.at_discr);
8626   CHECKSUM_ATTR (attrs.at_discr_list);
8627   CHECKSUM_ATTR (attrs.at_discr_value);
8628   CHECKSUM_ATTR (attrs.at_encoding);
8629   CHECKSUM_ATTR (attrs.at_endianity);
8630   CHECKSUM_ATTR (attrs.at_explicit);
8631   CHECKSUM_ATTR (attrs.at_is_optional);
8632   CHECKSUM_ATTR (attrs.at_location);
8633   CHECKSUM_ATTR (attrs.at_lower_bound);
8634   CHECKSUM_ATTR (attrs.at_mutable);
8635   CHECKSUM_ATTR (attrs.at_ordering);
8636   CHECKSUM_ATTR (attrs.at_picture_string);
8637   CHECKSUM_ATTR (attrs.at_prototyped);
8638   CHECKSUM_ATTR (attrs.at_small);
8639   CHECKSUM_ATTR (attrs.at_segment);
8640   CHECKSUM_ATTR (attrs.at_string_length);
8641   CHECKSUM_ATTR (attrs.at_threads_scaled);
8642   CHECKSUM_ATTR (attrs.at_upper_bound);
8643   CHECKSUM_ATTR (attrs.at_use_location);
8644   CHECKSUM_ATTR (attrs.at_use_UTF8);
8645   CHECKSUM_ATTR (attrs.at_variable_parameter);
8646   CHECKSUM_ATTR (attrs.at_virtuality);
8647   CHECKSUM_ATTR (attrs.at_visibility);
8648   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8649   CHECKSUM_ATTR (attrs.at_type);
8650   CHECKSUM_ATTR (attrs.at_friend);
8651
8652   /* Checksum the child DIEs, except for nested types and member functions.  */
8653   c = die->die_child;
8654   if (c) do {
8655     dw_attr_ref name_attr;
8656
8657     c = c->die_sib;
8658     name_attr = get_AT (c, DW_AT_name);
8659     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8660         && name_attr != NULL)
8661       {
8662         CHECKSUM_ULEB128 ('S');
8663         CHECKSUM_ULEB128 (c->die_tag);
8664         CHECKSUM_STRING (AT_string (name_attr));
8665       }
8666     else
8667       {
8668         /* Mark this DIE so it gets processed when unmarking.  */
8669         if (c->die_mark == 0)
8670           c->die_mark = -1;
8671         die_checksum_ordered (c, ctx, mark);
8672       }
8673   } while (c != die->die_child);
8674
8675   CHECKSUM_ULEB128 (0);
8676 }
8677
8678 #undef CHECKSUM
8679 #undef CHECKSUM_STRING
8680 #undef CHECKSUM_ATTR
8681 #undef CHECKSUM_LEB128
8682 #undef CHECKSUM_ULEB128
8683
8684 /* Generate the type signature for DIE.  This is computed by generating an
8685    MD5 checksum over the DIE's tag, its relevant attributes, and its
8686    children.  Attributes that are references to other DIEs are processed
8687    by recursion, using the MARK field to prevent infinite recursion.
8688    If the DIE is nested inside a namespace or another type, we also
8689    need to include that context in the signature.  The lower 64 bits
8690    of the resulting MD5 checksum comprise the signature.  */
8691
8692 static void
8693 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8694 {
8695   int mark;
8696   const char *name;
8697   unsigned char checksum[16];
8698   struct md5_ctx ctx;
8699   dw_die_ref decl;
8700
8701   name = get_AT_string (die, DW_AT_name);
8702   decl = get_AT_ref (die, DW_AT_specification);
8703
8704   /* First, compute a signature for just the type name (and its surrounding
8705      context, if any.  This is stored in the type unit DIE for link-time
8706      ODR (one-definition rule) checking.  */
8707
8708   if (is_cxx() && name != NULL)
8709     {
8710       md5_init_ctx (&ctx);
8711
8712       /* Checksum the names of surrounding namespaces and structures.  */
8713       if (decl != NULL && decl->die_parent != NULL)
8714         checksum_die_context (decl->die_parent, &ctx);
8715
8716       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8717       md5_process_bytes (name, strlen (name) + 1, &ctx);
8718       md5_finish_ctx (&ctx, checksum);
8719
8720       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8721     }
8722
8723   /* Next, compute the complete type signature.  */
8724
8725   md5_init_ctx (&ctx);
8726   mark = 1;
8727   die->die_mark = mark;
8728
8729   /* Checksum the names of surrounding namespaces and structures.  */
8730   if (decl != NULL && decl->die_parent != NULL)
8731     checksum_die_context (decl->die_parent, &ctx);
8732
8733   /* Checksum the DIE and its children.  */
8734   die_checksum_ordered (die, &ctx, &mark);
8735   unmark_all_dies (die);
8736   md5_finish_ctx (&ctx, checksum);
8737
8738   /* Store the signature in the type node and link the type DIE and the
8739      type node together.  */
8740   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8741           DWARF_TYPE_SIGNATURE_SIZE);
8742   die->die_id.die_type_node = type_node;
8743   type_node->type_die = die;
8744
8745   /* If the DIE is a specification, link its declaration to the type node
8746      as well.  */
8747   if (decl != NULL)
8748     decl->die_id.die_type_node = type_node;
8749 }
8750
8751 /* Do the location expressions look same?  */
8752 static inline int
8753 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8754 {
8755   return loc1->dw_loc_opc == loc2->dw_loc_opc
8756          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8757          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8758 }
8759
8760 /* Do the values look the same?  */
8761 static int
8762 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8763 {
8764   dw_loc_descr_ref loc1, loc2;
8765   rtx r1, r2;
8766
8767   if (v1->val_class != v2->val_class)
8768     return 0;
8769
8770   switch (v1->val_class)
8771     {
8772     case dw_val_class_const:
8773       return v1->v.val_int == v2->v.val_int;
8774     case dw_val_class_unsigned_const:
8775       return v1->v.val_unsigned == v2->v.val_unsigned;
8776     case dw_val_class_const_double:
8777       return v1->v.val_double.high == v2->v.val_double.high
8778              && v1->v.val_double.low == v2->v.val_double.low;
8779     case dw_val_class_vec:
8780       if (v1->v.val_vec.length != v2->v.val_vec.length
8781           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8782         return 0;
8783       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8784                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8785         return 0;
8786       return 1;
8787     case dw_val_class_flag:
8788       return v1->v.val_flag == v2->v.val_flag;
8789     case dw_val_class_str:
8790       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8791
8792     case dw_val_class_addr:
8793       r1 = v1->v.val_addr;
8794       r2 = v2->v.val_addr;
8795       if (GET_CODE (r1) != GET_CODE (r2))
8796         return 0;
8797       return !rtx_equal_p (r1, r2);
8798
8799     case dw_val_class_offset:
8800       return v1->v.val_offset == v2->v.val_offset;
8801
8802     case dw_val_class_loc:
8803       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8804            loc1 && loc2;
8805            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8806         if (!same_loc_p (loc1, loc2, mark))
8807           return 0;
8808       return !loc1 && !loc2;
8809
8810     case dw_val_class_die_ref:
8811       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8812
8813     case dw_val_class_fde_ref:
8814     case dw_val_class_lbl_id:
8815     case dw_val_class_lineptr:
8816     case dw_val_class_macptr:
8817       return 1;
8818
8819     case dw_val_class_file:
8820       return v1->v.val_file == v2->v.val_file;
8821
8822     case dw_val_class_data8:
8823       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8824
8825     default:
8826       return 1;
8827     }
8828 }
8829
8830 /* Do the attributes look the same?  */
8831
8832 static int
8833 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8834 {
8835   if (at1->dw_attr != at2->dw_attr)
8836     return 0;
8837
8838   /* We don't care that this was compiled with a different compiler
8839      snapshot; if the output is the same, that's what matters. */
8840   if (at1->dw_attr == DW_AT_producer)
8841     return 1;
8842
8843   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8844 }
8845
8846 /* Do the dies look the same?  */
8847
8848 static int
8849 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8850 {
8851   dw_die_ref c1, c2;
8852   dw_attr_ref a1;
8853   unsigned ix;
8854
8855   /* To avoid infinite recursion.  */
8856   if (die1->die_mark)
8857     return die1->die_mark == die2->die_mark;
8858   die1->die_mark = die2->die_mark = ++(*mark);
8859
8860   if (die1->die_tag != die2->die_tag)
8861     return 0;
8862
8863   if (VEC_length (dw_attr_node, die1->die_attr)
8864       != VEC_length (dw_attr_node, die2->die_attr))
8865     return 0;
8866
8867   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8868     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8869       return 0;
8870
8871   c1 = die1->die_child;
8872   c2 = die2->die_child;
8873   if (! c1)
8874     {
8875       if (c2)
8876         return 0;
8877     }
8878   else
8879     for (;;)
8880       {
8881         if (!same_die_p (c1, c2, mark))
8882           return 0;
8883         c1 = c1->die_sib;
8884         c2 = c2->die_sib;
8885         if (c1 == die1->die_child)
8886           {
8887             if (c2 == die2->die_child)
8888               break;
8889             else
8890               return 0;
8891           }
8892     }
8893
8894   return 1;
8895 }
8896
8897 /* Do the dies look the same?  Wrapper around same_die_p.  */
8898
8899 static int
8900 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8901 {
8902   int mark = 0;
8903   int ret = same_die_p (die1, die2, &mark);
8904
8905   unmark_all_dies (die1);
8906   unmark_all_dies (die2);
8907
8908   return ret;
8909 }
8910
8911 /* The prefix to attach to symbols on DIEs in the current comdat debug
8912    info section.  */
8913 static char *comdat_symbol_id;
8914
8915 /* The index of the current symbol within the current comdat CU.  */
8916 static unsigned int comdat_symbol_number;
8917
8918 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8919    children, and set comdat_symbol_id accordingly.  */
8920
8921 static void
8922 compute_section_prefix (dw_die_ref unit_die)
8923 {
8924   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8925   const char *base = die_name ? lbasename (die_name) : "anonymous";
8926   char *name = XALLOCAVEC (char, strlen (base) + 64);
8927   char *p;
8928   int i, mark;
8929   unsigned char checksum[16];
8930   struct md5_ctx ctx;
8931
8932   /* Compute the checksum of the DIE, then append part of it as hex digits to
8933      the name filename of the unit.  */
8934
8935   md5_init_ctx (&ctx);
8936   mark = 0;
8937   die_checksum (unit_die, &ctx, &mark);
8938   unmark_all_dies (unit_die);
8939   md5_finish_ctx (&ctx, checksum);
8940
8941   sprintf (name, "%s.", base);
8942   clean_symbol_name (name);
8943
8944   p = name + strlen (name);
8945   for (i = 0; i < 4; i++)
8946     {
8947       sprintf (p, "%.2x", checksum[i]);
8948       p += 2;
8949     }
8950
8951   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8952   comdat_symbol_number = 0;
8953 }
8954
8955 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8956
8957 static int
8958 is_type_die (dw_die_ref die)
8959 {
8960   switch (die->die_tag)
8961     {
8962     case DW_TAG_array_type:
8963     case DW_TAG_class_type:
8964     case DW_TAG_interface_type:
8965     case DW_TAG_enumeration_type:
8966     case DW_TAG_pointer_type:
8967     case DW_TAG_reference_type:
8968     case DW_TAG_rvalue_reference_type:
8969     case DW_TAG_string_type:
8970     case DW_TAG_structure_type:
8971     case DW_TAG_subroutine_type:
8972     case DW_TAG_union_type:
8973     case DW_TAG_ptr_to_member_type:
8974     case DW_TAG_set_type:
8975     case DW_TAG_subrange_type:
8976     case DW_TAG_base_type:
8977     case DW_TAG_const_type:
8978     case DW_TAG_file_type:
8979     case DW_TAG_packed_type:
8980     case DW_TAG_volatile_type:
8981     case DW_TAG_typedef:
8982       return 1;
8983     default:
8984       return 0;
8985     }
8986 }
8987
8988 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8989    Basically, we want to choose the bits that are likely to be shared between
8990    compilations (types) and leave out the bits that are specific to individual
8991    compilations (functions).  */
8992
8993 static int
8994 is_comdat_die (dw_die_ref c)
8995 {
8996   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
8997      we do for stabs.  The advantage is a greater likelihood of sharing between
8998      objects that don't include headers in the same order (and therefore would
8999      put the base types in a different comdat).  jason 8/28/00 */
9000
9001   if (c->die_tag == DW_TAG_base_type)
9002     return 0;
9003
9004   if (c->die_tag == DW_TAG_pointer_type
9005       || c->die_tag == DW_TAG_reference_type
9006       || c->die_tag == DW_TAG_rvalue_reference_type
9007       || c->die_tag == DW_TAG_const_type
9008       || c->die_tag == DW_TAG_volatile_type)
9009     {
9010       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9011
9012       return t ? is_comdat_die (t) : 0;
9013     }
9014
9015   return is_type_die (c);
9016 }
9017
9018 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9019    compilation unit.  */
9020
9021 static int
9022 is_symbol_die (dw_die_ref c)
9023 {
9024   return (is_type_die (c)
9025           || is_declaration_die (c)
9026           || c->die_tag == DW_TAG_namespace
9027           || c->die_tag == DW_TAG_module);
9028 }
9029
9030 static char *
9031 gen_internal_sym (const char *prefix)
9032 {
9033   char buf[256];
9034
9035   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9036   return xstrdup (buf);
9037 }
9038
9039 /* Assign symbols to all worthy DIEs under DIE.  */
9040
9041 static void
9042 assign_symbol_names (dw_die_ref die)
9043 {
9044   dw_die_ref c;
9045
9046   if (is_symbol_die (die))
9047     {
9048       if (comdat_symbol_id)
9049         {
9050           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9051
9052           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9053                    comdat_symbol_id, comdat_symbol_number++);
9054           die->die_id.die_symbol = xstrdup (p);
9055         }
9056       else
9057         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9058     }
9059
9060   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9061 }
9062
9063 struct cu_hash_table_entry
9064 {
9065   dw_die_ref cu;
9066   unsigned min_comdat_num, max_comdat_num;
9067   struct cu_hash_table_entry *next;
9068 };
9069
9070 /* Routines to manipulate hash table of CUs.  */
9071 static hashval_t
9072 htab_cu_hash (const void *of)
9073 {
9074   const struct cu_hash_table_entry *const entry =
9075     (const struct cu_hash_table_entry *) of;
9076
9077   return htab_hash_string (entry->cu->die_id.die_symbol);
9078 }
9079
9080 static int
9081 htab_cu_eq (const void *of1, const void *of2)
9082 {
9083   const struct cu_hash_table_entry *const entry1 =
9084     (const struct cu_hash_table_entry *) of1;
9085   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9086
9087   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9088 }
9089
9090 static void
9091 htab_cu_del (void *what)
9092 {
9093   struct cu_hash_table_entry *next,
9094     *entry = (struct cu_hash_table_entry *) what;
9095
9096   while (entry)
9097     {
9098       next = entry->next;
9099       free (entry);
9100       entry = next;
9101     }
9102 }
9103
9104 /* Check whether we have already seen this CU and set up SYM_NUM
9105    accordingly.  */
9106 static int
9107 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9108 {
9109   struct cu_hash_table_entry dummy;
9110   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9111
9112   dummy.max_comdat_num = 0;
9113
9114   slot = (struct cu_hash_table_entry **)
9115     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9116         INSERT);
9117   entry = *slot;
9118
9119   for (; entry; last = entry, entry = entry->next)
9120     {
9121       if (same_die_p_wrap (cu, entry->cu))
9122         break;
9123     }
9124
9125   if (entry)
9126     {
9127       *sym_num = entry->min_comdat_num;
9128       return 1;
9129     }
9130
9131   entry = XCNEW (struct cu_hash_table_entry);
9132   entry->cu = cu;
9133   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9134   entry->next = *slot;
9135   *slot = entry;
9136
9137   return 0;
9138 }
9139
9140 /* Record SYM_NUM to record of CU in HTABLE.  */
9141 static void
9142 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9143 {
9144   struct cu_hash_table_entry **slot, *entry;
9145
9146   slot = (struct cu_hash_table_entry **)
9147     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9148         NO_INSERT);
9149   entry = *slot;
9150
9151   entry->max_comdat_num = sym_num;
9152 }
9153
9154 /* Traverse the DIE (which is always comp_unit_die), and set up
9155    additional compilation units for each of the include files we see
9156    bracketed by BINCL/EINCL.  */
9157
9158 static void
9159 break_out_includes (dw_die_ref die)
9160 {
9161   dw_die_ref c;
9162   dw_die_ref unit = NULL;
9163   limbo_die_node *node, **pnode;
9164   htab_t cu_hash_table;
9165
9166   c = die->die_child;
9167   if (c) do {
9168     dw_die_ref prev = c;
9169     c = c->die_sib;
9170     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9171            || (unit && is_comdat_die (c)))
9172       {
9173         dw_die_ref next = c->die_sib;
9174
9175         /* This DIE is for a secondary CU; remove it from the main one.  */
9176         remove_child_with_prev (c, prev);
9177
9178         if (c->die_tag == DW_TAG_GNU_BINCL)
9179           unit = push_new_compile_unit (unit, c);
9180         else if (c->die_tag == DW_TAG_GNU_EINCL)
9181           unit = pop_compile_unit (unit);
9182         else
9183           add_child_die (unit, c);
9184         c = next;
9185         if (c == die->die_child)
9186           break;
9187       }
9188   } while (c != die->die_child);
9189
9190 #if 0
9191   /* We can only use this in debugging, since the frontend doesn't check
9192      to make sure that we leave every include file we enter.  */
9193   gcc_assert (!unit);
9194 #endif
9195
9196   assign_symbol_names (die);
9197   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9198   for (node = limbo_die_list, pnode = &limbo_die_list;
9199        node;
9200        node = node->next)
9201     {
9202       int is_dupl;
9203
9204       compute_section_prefix (node->die);
9205       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9206                         &comdat_symbol_number);
9207       assign_symbol_names (node->die);
9208       if (is_dupl)
9209         *pnode = node->next;
9210       else
9211         {
9212           pnode = &node->next;
9213           record_comdat_symbol_number (node->die, cu_hash_table,
9214                 comdat_symbol_number);
9215         }
9216     }
9217   htab_delete (cu_hash_table);
9218 }
9219
9220 /* Return non-zero if this DIE is a declaration.  */
9221
9222 static int
9223 is_declaration_die (dw_die_ref die)
9224 {
9225   dw_attr_ref a;
9226   unsigned ix;
9227
9228   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9229     if (a->dw_attr == DW_AT_declaration)
9230       return 1;
9231
9232   return 0;
9233 }
9234
9235 /* Return non-zero if this is a type DIE that should be moved to a
9236    COMDAT .debug_types section.  */
9237
9238 static int
9239 should_move_die_to_comdat (dw_die_ref die)
9240 {
9241   switch (die->die_tag)
9242     {
9243     case DW_TAG_class_type:
9244     case DW_TAG_structure_type:
9245     case DW_TAG_enumeration_type:
9246     case DW_TAG_union_type:
9247       /* Don't move declarations or inlined instances.  */
9248       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9249         return 0;
9250       return 1;
9251     case DW_TAG_array_type:
9252     case DW_TAG_interface_type:
9253     case DW_TAG_pointer_type:
9254     case DW_TAG_reference_type:
9255     case DW_TAG_rvalue_reference_type:
9256     case DW_TAG_string_type:
9257     case DW_TAG_subroutine_type:
9258     case DW_TAG_ptr_to_member_type:
9259     case DW_TAG_set_type:
9260     case DW_TAG_subrange_type:
9261     case DW_TAG_base_type:
9262     case DW_TAG_const_type:
9263     case DW_TAG_file_type:
9264     case DW_TAG_packed_type:
9265     case DW_TAG_volatile_type:
9266     case DW_TAG_typedef:
9267     default:
9268       return 0;
9269     }
9270 }
9271
9272 /* Make a clone of DIE.  */
9273
9274 static dw_die_ref
9275 clone_die (dw_die_ref die)
9276 {
9277   dw_die_ref clone;
9278   dw_attr_ref a;
9279   unsigned ix;
9280
9281   clone = GGC_CNEW (die_node);
9282   clone->die_tag = die->die_tag;
9283
9284   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9285     add_dwarf_attr (clone, a);
9286
9287   return clone;
9288 }
9289
9290 /* Make a clone of the tree rooted at DIE.  */
9291
9292 static dw_die_ref
9293 clone_tree (dw_die_ref die)
9294 {
9295   dw_die_ref c;
9296   dw_die_ref clone = clone_die (die);
9297
9298   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9299
9300   return clone;
9301 }
9302
9303 /* Make a clone of DIE as a declaration.  */
9304
9305 static dw_die_ref
9306 clone_as_declaration (dw_die_ref die)
9307 {
9308   dw_die_ref clone;
9309   dw_die_ref decl;
9310   dw_attr_ref a;
9311   unsigned ix;
9312
9313   /* If the DIE is already a declaration, just clone it.  */
9314   if (is_declaration_die (die))
9315     return clone_die (die);
9316
9317   /* If the DIE is a specification, just clone its declaration DIE.  */
9318   decl = get_AT_ref (die, DW_AT_specification);
9319   if (decl != NULL)
9320     return clone_die (decl);
9321
9322   clone = GGC_CNEW (die_node);
9323   clone->die_tag = die->die_tag;
9324
9325   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9326     {
9327       /* We don't want to copy over all attributes.
9328          For example we don't want DW_AT_byte_size because otherwise we will no
9329          longer have a declaration and GDB will treat it as a definition.  */
9330
9331       switch (a->dw_attr)
9332         {
9333         case DW_AT_artificial:
9334         case DW_AT_containing_type:
9335         case DW_AT_external:
9336         case DW_AT_name:
9337         case DW_AT_type:
9338         case DW_AT_virtuality:
9339         case DW_AT_linkage_name:
9340         case DW_AT_MIPS_linkage_name:
9341           add_dwarf_attr (clone, a);
9342           break;
9343         case DW_AT_byte_size:
9344         default:
9345           break;
9346         }
9347     }
9348
9349   if (die->die_id.die_type_node)
9350     add_AT_die_ref (clone, DW_AT_signature, die);
9351
9352   add_AT_flag (clone, DW_AT_declaration, 1);
9353   return clone;
9354 }
9355
9356 /* Copy the declaration context to the new compile unit DIE.  This includes
9357    any surrounding namespace or type declarations.  If the DIE has an
9358    AT_specification attribute, it also includes attributes and children
9359    attached to the specification.  */
9360
9361 static void
9362 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9363 {
9364   dw_die_ref decl;
9365   dw_die_ref new_decl;
9366
9367   decl = get_AT_ref (die, DW_AT_specification);
9368   if (decl == NULL)
9369     decl = die;
9370   else
9371     {
9372       unsigned ix;
9373       dw_die_ref c;
9374       dw_attr_ref a;
9375
9376       /* Copy the type node pointer from the new DIE to the original
9377          declaration DIE so we can forward references later.  */
9378       decl->die_id.die_type_node = die->die_id.die_type_node;
9379
9380       remove_AT (die, DW_AT_specification);
9381
9382       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9383         {
9384           if (a->dw_attr != DW_AT_name
9385               && a->dw_attr != DW_AT_declaration
9386               && a->dw_attr != DW_AT_external)
9387             add_dwarf_attr (die, a);
9388         }
9389
9390       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9391     }
9392
9393   if (decl->die_parent != NULL
9394       && decl->die_parent->die_tag != DW_TAG_compile_unit
9395       && decl->die_parent->die_tag != DW_TAG_type_unit)
9396     {
9397       new_decl = copy_ancestor_tree (unit, decl, NULL);
9398       if (new_decl != NULL)
9399         {
9400           remove_AT (new_decl, DW_AT_signature);
9401           add_AT_specification (die, new_decl);
9402         }
9403     }
9404 }
9405
9406 /* Generate the skeleton ancestor tree for the given NODE, then clone
9407    the DIE and add the clone into the tree.  */
9408
9409 static void
9410 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9411 {
9412   if (node->new_die != NULL)
9413     return;
9414
9415   node->new_die = clone_as_declaration (node->old_die);
9416
9417   if (node->parent != NULL)
9418     {
9419       generate_skeleton_ancestor_tree (node->parent);
9420       add_child_die (node->parent->new_die, node->new_die);
9421     }
9422 }
9423
9424 /* Generate a skeleton tree of DIEs containing any declarations that are
9425    found in the original tree.  We traverse the tree looking for declaration
9426    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9427
9428 static void
9429 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9430 {
9431   skeleton_chain_node node;
9432   dw_die_ref c;
9433   dw_die_ref first;
9434   dw_die_ref prev = NULL;
9435   dw_die_ref next = NULL;
9436
9437   node.parent = parent;
9438
9439   first = c = parent->old_die->die_child;
9440   if (c)
9441     next = c->die_sib;
9442   if (c) do {
9443     if (prev == NULL || prev->die_sib == c)
9444       prev = c;
9445     c = next;
9446     next = (c == first ? NULL : c->die_sib);
9447     node.old_die = c;
9448     node.new_die = NULL;
9449     if (is_declaration_die (c))
9450       {
9451         /* Clone the existing DIE, move the original to the skeleton
9452            tree (which is in the main CU), and put the clone, with
9453            all the original's children, where the original came from.  */
9454         dw_die_ref clone = clone_die (c);
9455         move_all_children (c, clone);
9456
9457         replace_child (c, clone, prev);
9458         generate_skeleton_ancestor_tree (parent);
9459         add_child_die (parent->new_die, c);
9460         node.new_die = c;
9461         c = clone;
9462       }
9463     generate_skeleton_bottom_up (&node);
9464   } while (next != NULL);
9465 }
9466
9467 /* Wrapper function for generate_skeleton_bottom_up.  */
9468
9469 static dw_die_ref
9470 generate_skeleton (dw_die_ref die)
9471 {
9472   skeleton_chain_node node;
9473
9474   node.old_die = die;
9475   node.new_die = NULL;
9476   node.parent = NULL;
9477
9478   /* If this type definition is nested inside another type,
9479      always leave at least a declaration in its place.  */
9480   if (die->die_parent != NULL && is_type_die (die->die_parent))
9481     node.new_die = clone_as_declaration (die);
9482
9483   generate_skeleton_bottom_up (&node);
9484   return node.new_die;
9485 }
9486
9487 /* Remove the DIE from its parent, possibly replacing it with a cloned
9488    declaration.  The original DIE will be moved to a new compile unit
9489    so that existing references to it follow it to the new location.  If
9490    any of the original DIE's descendants is a declaration, we need to
9491    replace the original DIE with a skeleton tree and move the
9492    declarations back into the skeleton tree.  */
9493
9494 static dw_die_ref
9495 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9496 {
9497   dw_die_ref skeleton;
9498
9499   skeleton = generate_skeleton (child);
9500   if (skeleton == NULL)
9501     remove_child_with_prev (child, prev);
9502   else
9503     {
9504       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9505       replace_child (child, skeleton, prev);
9506     }
9507
9508   return skeleton;
9509 }
9510
9511 /* Traverse the DIE and set up additional .debug_types sections for each
9512    type worthy of being placed in a COMDAT section.  */
9513
9514 static void
9515 break_out_comdat_types (dw_die_ref die)
9516 {
9517   dw_die_ref c;
9518   dw_die_ref first;
9519   dw_die_ref prev = NULL;
9520   dw_die_ref next = NULL;
9521   dw_die_ref unit = NULL;
9522
9523   first = c = die->die_child;
9524   if (c)
9525     next = c->die_sib;
9526   if (c) do {
9527     if (prev == NULL || prev->die_sib == c)
9528       prev = c;
9529     c = next;
9530     next = (c == first ? NULL : c->die_sib);
9531     if (should_move_die_to_comdat (c))
9532       {
9533         dw_die_ref replacement;
9534         comdat_type_node_ref type_node;
9535
9536         /* Create a new type unit DIE as the root for the new tree, and
9537            add it to the list of comdat types.  */
9538         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9539         add_AT_unsigned (unit, DW_AT_language,
9540                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9541         type_node = GGC_CNEW (comdat_type_node);
9542         type_node->root_die = unit;
9543         type_node->next = comdat_type_list;
9544         comdat_type_list = type_node;
9545
9546         /* Generate the type signature.  */
9547         generate_type_signature (c, type_node);
9548
9549         /* Copy the declaration context, attributes, and children of the
9550            declaration into the new compile unit DIE.  */
9551         copy_declaration_context (unit, c);
9552
9553         /* Remove this DIE from the main CU.  */
9554         replacement = remove_child_or_replace_with_skeleton (c, prev);
9555
9556         /* Break out nested types into their own type units.  */
9557         break_out_comdat_types (c);
9558
9559         /* Add the DIE to the new compunit.  */
9560         add_child_die (unit, c);
9561
9562         if (replacement != NULL)
9563           c = replacement;
9564       }
9565     else if (c->die_tag == DW_TAG_namespace
9566              || c->die_tag == DW_TAG_class_type
9567              || c->die_tag == DW_TAG_structure_type
9568              || c->die_tag == DW_TAG_union_type)
9569       {
9570         /* Look for nested types that can be broken out.  */
9571         break_out_comdat_types (c);
9572       }
9573   } while (next != NULL);
9574 }
9575
9576 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9577
9578 struct decl_table_entry
9579 {
9580   dw_die_ref orig;
9581   dw_die_ref copy;
9582 };
9583
9584 /* Routines to manipulate hash table of copied declarations.  */
9585
9586 static hashval_t
9587 htab_decl_hash (const void *of)
9588 {
9589   const struct decl_table_entry *const entry =
9590     (const struct decl_table_entry *) of;
9591
9592   return htab_hash_pointer (entry->orig);
9593 }
9594
9595 static int
9596 htab_decl_eq (const void *of1, const void *of2)
9597 {
9598   const struct decl_table_entry *const entry1 =
9599     (const struct decl_table_entry *) of1;
9600   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9601
9602   return entry1->orig == entry2;
9603 }
9604
9605 static void
9606 htab_decl_del (void *what)
9607 {
9608   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9609
9610   free (entry);
9611 }
9612
9613 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9614    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9615    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9616    to check if the ancestor has already been copied into UNIT.  */
9617
9618 static dw_die_ref
9619 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9620 {
9621   dw_die_ref parent = die->die_parent;
9622   dw_die_ref new_parent = unit;
9623   dw_die_ref copy;
9624   void **slot = NULL;
9625   struct decl_table_entry *entry = NULL;
9626
9627   if (decl_table)
9628     {
9629       /* Check if the entry has already been copied to UNIT.  */
9630       slot = htab_find_slot_with_hash (decl_table, die,
9631                                        htab_hash_pointer (die), INSERT);
9632       if (*slot != HTAB_EMPTY_ENTRY)
9633         {
9634           entry = (struct decl_table_entry *) *slot;
9635           return entry->copy;
9636         }
9637
9638       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9639       entry = XCNEW (struct decl_table_entry);
9640       entry->orig = die;
9641       entry->copy = NULL;
9642       *slot = entry;
9643     }
9644
9645   if (parent != NULL)
9646     {
9647       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9648       if (spec != NULL)
9649         parent = spec;
9650       if (parent->die_tag != DW_TAG_compile_unit
9651           && parent->die_tag != DW_TAG_type_unit)
9652         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9653     }
9654
9655   copy = clone_as_declaration (die);
9656   add_child_die (new_parent, copy);
9657
9658   if (decl_table != NULL)
9659     {
9660       /* Make sure the copy is marked as part of the type unit.  */
9661       copy->die_mark = 1;
9662       /* Record the pointer to the copy.  */
9663       entry->copy = copy;
9664     }
9665
9666   return copy;
9667 }
9668
9669 /* Walk the DIE and its children, looking for references to incomplete
9670    or trivial types that are unmarked (i.e., that are not in the current
9671    type_unit).  */
9672
9673 static void
9674 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9675 {
9676   dw_die_ref c;
9677   dw_attr_ref a;
9678   unsigned ix;
9679
9680   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9681     {
9682       if (AT_class (a) == dw_val_class_die_ref)
9683         {
9684           dw_die_ref targ = AT_ref (a);
9685           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9686           void **slot;
9687           struct decl_table_entry *entry;
9688
9689           if (targ->die_mark != 0 || type_node != NULL)
9690             continue;
9691
9692           slot = htab_find_slot_with_hash (decl_table, targ,
9693                                            htab_hash_pointer (targ), INSERT);
9694
9695           if (*slot != HTAB_EMPTY_ENTRY)
9696             {
9697               /* TARG has already been copied, so we just need to
9698                  modify the reference to point to the copy.  */
9699               entry = (struct decl_table_entry *) *slot;
9700               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9701             }
9702           else
9703             {
9704               dw_die_ref parent = unit;
9705               dw_die_ref copy = clone_tree (targ);
9706
9707               /* Make sure the cloned tree is marked as part of the
9708                  type unit.  */
9709               mark_dies (copy);
9710
9711               /* Record in DECL_TABLE that TARG has been copied.
9712                  Need to do this now, before the recursive call,
9713                  because DECL_TABLE may be expanded and SLOT
9714                  would no longer be a valid pointer.  */
9715               entry = XCNEW (struct decl_table_entry);
9716               entry->orig = targ;
9717               entry->copy = copy;
9718               *slot = entry;
9719
9720               /* If TARG has surrounding context, copy its ancestor tree
9721                  into the new type unit.  */
9722               if (targ->die_parent != NULL
9723                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9724                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9725                 parent = copy_ancestor_tree (unit, targ->die_parent,
9726                                              decl_table);
9727
9728               add_child_die (parent, copy);
9729               a->dw_attr_val.v.val_die_ref.die = copy;
9730
9731               /* Make sure the newly-copied DIE is walked.  If it was
9732                  installed in a previously-added context, it won't
9733                  get visited otherwise.  */
9734               if (parent != unit)
9735                 copy_decls_walk (unit, parent, decl_table);
9736             }
9737         }
9738     }
9739
9740   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9741 }
9742
9743 /* Copy declarations for "unworthy" types into the new comdat section.
9744    Incomplete types, modified types, and certain other types aren't broken
9745    out into comdat sections of their own, so they don't have a signature,
9746    and we need to copy the declaration into the same section so that we
9747    don't have an external reference.  */
9748
9749 static void
9750 copy_decls_for_unworthy_types (dw_die_ref unit)
9751 {
9752   htab_t decl_table;
9753
9754   mark_dies (unit);
9755   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9756   copy_decls_walk (unit, unit, decl_table);
9757   htab_delete (decl_table);
9758   unmark_dies (unit);
9759 }
9760
9761 /* Traverse the DIE and add a sibling attribute if it may have the
9762    effect of speeding up access to siblings.  To save some space,
9763    avoid generating sibling attributes for DIE's without children.  */
9764
9765 static void
9766 add_sibling_attributes (dw_die_ref die)
9767 {
9768   dw_die_ref c;
9769
9770   if (! die->die_child)
9771     return;
9772
9773   if (die->die_parent && die != die->die_parent->die_child)
9774     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9775
9776   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9777 }
9778
9779 /* Output all location lists for the DIE and its children.  */
9780
9781 static void
9782 output_location_lists (dw_die_ref die)
9783 {
9784   dw_die_ref c;
9785   dw_attr_ref a;
9786   unsigned ix;
9787
9788   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9789     if (AT_class (a) == dw_val_class_loc_list)
9790       output_loc_list (AT_loc_list (a));
9791
9792   FOR_EACH_CHILD (die, c, output_location_lists (c));
9793 }
9794
9795 /* The format of each DIE (and its attribute value pairs) is encoded in an
9796    abbreviation table.  This routine builds the abbreviation table and assigns
9797    a unique abbreviation id for each abbreviation entry.  The children of each
9798    die are visited recursively.  */
9799
9800 static void
9801 build_abbrev_table (dw_die_ref die)
9802 {
9803   unsigned long abbrev_id;
9804   unsigned int n_alloc;
9805   dw_die_ref c;
9806   dw_attr_ref a;
9807   unsigned ix;
9808
9809   /* Scan the DIE references, and mark as external any that refer to
9810      DIEs from other CUs (i.e. those which are not marked).  */
9811   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9812     if (AT_class (a) == dw_val_class_die_ref
9813         && AT_ref (a)->die_mark == 0)
9814       {
9815         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9816         set_AT_ref_external (a, 1);
9817       }
9818
9819   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9820     {
9821       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9822       dw_attr_ref die_a, abbrev_a;
9823       unsigned ix;
9824       bool ok = true;
9825
9826       if (abbrev->die_tag != die->die_tag)
9827         continue;
9828       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9829         continue;
9830
9831       if (VEC_length (dw_attr_node, abbrev->die_attr)
9832           != VEC_length (dw_attr_node, die->die_attr))
9833         continue;
9834
9835       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9836         {
9837           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9838           if ((abbrev_a->dw_attr != die_a->dw_attr)
9839               || (value_format (abbrev_a) != value_format (die_a)))
9840             {
9841               ok = false;
9842               break;
9843             }
9844         }
9845       if (ok)
9846         break;
9847     }
9848
9849   if (abbrev_id >= abbrev_die_table_in_use)
9850     {
9851       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9852         {
9853           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9854           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9855                                             n_alloc);
9856
9857           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9858                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9859           abbrev_die_table_allocated = n_alloc;
9860         }
9861
9862       ++abbrev_die_table_in_use;
9863       abbrev_die_table[abbrev_id] = die;
9864     }
9865
9866   die->die_abbrev = abbrev_id;
9867   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9868 }
9869 \f
9870 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9871
9872 static int
9873 constant_size (unsigned HOST_WIDE_INT value)
9874 {
9875   int log;
9876
9877   if (value == 0)
9878     log = 0;
9879   else
9880     log = floor_log2 (value);
9881
9882   log = log / 8;
9883   log = 1 << (floor_log2 (log) + 1);
9884
9885   return log;
9886 }
9887
9888 /* Return the size of a DIE as it is represented in the
9889    .debug_info section.  */
9890
9891 static unsigned long
9892 size_of_die (dw_die_ref die)
9893 {
9894   unsigned long size = 0;
9895   dw_attr_ref a;
9896   unsigned ix;
9897
9898   size += size_of_uleb128 (die->die_abbrev);
9899   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9900     {
9901       switch (AT_class (a))
9902         {
9903         case dw_val_class_addr:
9904           size += DWARF2_ADDR_SIZE;
9905           break;
9906         case dw_val_class_offset:
9907           size += DWARF_OFFSET_SIZE;
9908           break;
9909         case dw_val_class_loc:
9910           {
9911             unsigned long lsize = size_of_locs (AT_loc (a));
9912
9913             /* Block length.  */
9914             if (dwarf_version >= 4)
9915               size += size_of_uleb128 (lsize);
9916             else
9917               size += constant_size (lsize);
9918             size += lsize;
9919           }
9920           break;
9921         case dw_val_class_loc_list:
9922           size += DWARF_OFFSET_SIZE;
9923           break;
9924         case dw_val_class_range_list:
9925           size += DWARF_OFFSET_SIZE;
9926           break;
9927         case dw_val_class_const:
9928           size += size_of_sleb128 (AT_int (a));
9929           break;
9930         case dw_val_class_unsigned_const:
9931           size += constant_size (AT_unsigned (a));
9932           break;
9933         case dw_val_class_const_double:
9934           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9935           if (HOST_BITS_PER_WIDE_INT >= 64)
9936             size++; /* block */
9937           break;
9938         case dw_val_class_vec:
9939           size += constant_size (a->dw_attr_val.v.val_vec.length
9940                                  * a->dw_attr_val.v.val_vec.elt_size)
9941                   + a->dw_attr_val.v.val_vec.length
9942                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9943           break;
9944         case dw_val_class_flag:
9945           if (dwarf_version >= 4)
9946             /* Currently all add_AT_flag calls pass in 1 as last argument,
9947                so DW_FORM_flag_present can be used.  If that ever changes,
9948                we'll need to use DW_FORM_flag and have some optimization
9949                in build_abbrev_table that will change those to
9950                DW_FORM_flag_present if it is set to 1 in all DIEs using
9951                the same abbrev entry.  */
9952             gcc_assert (a->dw_attr_val.v.val_flag == 1);
9953           else
9954             size += 1;
9955           break;
9956         case dw_val_class_die_ref:
9957           if (AT_ref_external (a))
9958             {
9959               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9960                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9961                  is sized by target address length, whereas in DWARF3
9962                  it's always sized as an offset.  */
9963               if (dwarf_version >= 4)
9964                 size += DWARF_TYPE_SIGNATURE_SIZE;
9965               else if (dwarf_version == 2)
9966                 size += DWARF2_ADDR_SIZE;
9967               else
9968                 size += DWARF_OFFSET_SIZE;
9969             }
9970           else
9971             size += DWARF_OFFSET_SIZE;
9972           break;
9973         case dw_val_class_fde_ref:
9974           size += DWARF_OFFSET_SIZE;
9975           break;
9976         case dw_val_class_lbl_id:
9977           size += DWARF2_ADDR_SIZE;
9978           break;
9979         case dw_val_class_lineptr:
9980         case dw_val_class_macptr:
9981           size += DWARF_OFFSET_SIZE;
9982           break;
9983         case dw_val_class_str:
9984           if (AT_string_form (a) == DW_FORM_strp)
9985             size += DWARF_OFFSET_SIZE;
9986           else
9987             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9988           break;
9989         case dw_val_class_file:
9990           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9991           break;
9992         case dw_val_class_data8:
9993           size += 8;
9994           break;
9995         default:
9996           gcc_unreachable ();
9997         }
9998     }
9999
10000   return size;
10001 }
10002
10003 /* Size the debugging information associated with a given DIE.  Visits the
10004    DIE's children recursively.  Updates the global variable next_die_offset, on
10005    each time through.  Uses the current value of next_die_offset to update the
10006    die_offset field in each DIE.  */
10007
10008 static void
10009 calc_die_sizes (dw_die_ref die)
10010 {
10011   dw_die_ref c;
10012
10013   die->die_offset = next_die_offset;
10014   next_die_offset += size_of_die (die);
10015
10016   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10017
10018   if (die->die_child != NULL)
10019     /* Count the null byte used to terminate sibling lists.  */
10020     next_die_offset += 1;
10021 }
10022
10023 /* Set the marks for a die and its children.  We do this so
10024    that we know whether or not a reference needs to use FORM_ref_addr; only
10025    DIEs in the same CU will be marked.  We used to clear out the offset
10026    and use that as the flag, but ran into ordering problems.  */
10027
10028 static void
10029 mark_dies (dw_die_ref die)
10030 {
10031   dw_die_ref c;
10032
10033   gcc_assert (!die->die_mark);
10034
10035   die->die_mark = 1;
10036   FOR_EACH_CHILD (die, c, mark_dies (c));
10037 }
10038
10039 /* Clear the marks for a die and its children.  */
10040
10041 static void
10042 unmark_dies (dw_die_ref die)
10043 {
10044   dw_die_ref c;
10045
10046   if (dwarf_version < 4)
10047     gcc_assert (die->die_mark);
10048
10049   die->die_mark = 0;
10050   FOR_EACH_CHILD (die, c, unmark_dies (c));
10051 }
10052
10053 /* Clear the marks for a die, its children and referred dies.  */
10054
10055 static void
10056 unmark_all_dies (dw_die_ref die)
10057 {
10058   dw_die_ref c;
10059   dw_attr_ref a;
10060   unsigned ix;
10061
10062   if (!die->die_mark)
10063     return;
10064   die->die_mark = 0;
10065
10066   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10067
10068   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10069     if (AT_class (a) == dw_val_class_die_ref)
10070       unmark_all_dies (AT_ref (a));
10071 }
10072
10073 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10074    generated for the compilation unit.  */
10075
10076 static unsigned long
10077 size_of_pubnames (VEC (pubname_entry, gc) * names)
10078 {
10079   unsigned long size;
10080   unsigned i;
10081   pubname_ref p;
10082
10083   size = DWARF_PUBNAMES_HEADER_SIZE;
10084   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10085     if (names != pubtype_table
10086         || p->die->die_offset != 0
10087         || !flag_eliminate_unused_debug_types)
10088       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10089
10090   size += DWARF_OFFSET_SIZE;
10091   return size;
10092 }
10093
10094 /* Return the size of the information in the .debug_aranges section.  */
10095
10096 static unsigned long
10097 size_of_aranges (void)
10098 {
10099   unsigned long size;
10100
10101   size = DWARF_ARANGES_HEADER_SIZE;
10102
10103   /* Count the address/length pair for this compilation unit.  */
10104   if (text_section_used)
10105     size += 2 * DWARF2_ADDR_SIZE;
10106   if (cold_text_section_used)
10107     size += 2 * DWARF2_ADDR_SIZE;
10108   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10109
10110   /* Count the two zero words used to terminated the address range table.  */
10111   size += 2 * DWARF2_ADDR_SIZE;
10112   return size;
10113 }
10114 \f
10115 /* Select the encoding of an attribute value.  */
10116
10117 static enum dwarf_form
10118 value_format (dw_attr_ref a)
10119 {
10120   switch (a->dw_attr_val.val_class)
10121     {
10122     case dw_val_class_addr:
10123       /* Only very few attributes allow DW_FORM_addr.  */
10124       switch (a->dw_attr)
10125         {
10126         case DW_AT_low_pc:
10127         case DW_AT_high_pc:
10128         case DW_AT_entry_pc:
10129         case DW_AT_trampoline:
10130           return DW_FORM_addr;
10131         default:
10132           break;
10133         }
10134       switch (DWARF2_ADDR_SIZE)
10135         {
10136         case 1:
10137           return DW_FORM_data1;
10138         case 2:
10139           return DW_FORM_data2;
10140         case 4:
10141           return DW_FORM_data4;
10142         case 8:
10143           return DW_FORM_data8;
10144         default:
10145           gcc_unreachable ();
10146         }
10147     case dw_val_class_range_list:
10148     case dw_val_class_loc_list:
10149       if (dwarf_version >= 4)
10150         return DW_FORM_sec_offset;
10151       /* FALLTHRU */
10152     case dw_val_class_offset:
10153       switch (DWARF_OFFSET_SIZE)
10154         {
10155         case 4:
10156           return DW_FORM_data4;
10157         case 8:
10158           return DW_FORM_data8;
10159         default:
10160           gcc_unreachable ();
10161         }
10162     case dw_val_class_loc:
10163       if (dwarf_version >= 4)
10164         return DW_FORM_exprloc;
10165       switch (constant_size (size_of_locs (AT_loc (a))))
10166         {
10167         case 1:
10168           return DW_FORM_block1;
10169         case 2:
10170           return DW_FORM_block2;
10171         default:
10172           gcc_unreachable ();
10173         }
10174     case dw_val_class_const:
10175       return DW_FORM_sdata;
10176     case dw_val_class_unsigned_const:
10177       switch (constant_size (AT_unsigned (a)))
10178         {
10179         case 1:
10180           return DW_FORM_data1;
10181         case 2:
10182           return DW_FORM_data2;
10183         case 4:
10184           return DW_FORM_data4;
10185         case 8:
10186           return DW_FORM_data8;
10187         default:
10188           gcc_unreachable ();
10189         }
10190     case dw_val_class_const_double:
10191       switch (HOST_BITS_PER_WIDE_INT)
10192         {
10193         case 8:
10194           return DW_FORM_data2;
10195         case 16:
10196           return DW_FORM_data4;
10197         case 32:
10198           return DW_FORM_data8;
10199         case 64:
10200         default:
10201           return DW_FORM_block1;
10202         }
10203     case dw_val_class_vec:
10204       switch (constant_size (a->dw_attr_val.v.val_vec.length
10205                              * a->dw_attr_val.v.val_vec.elt_size))
10206         {
10207         case 1:
10208           return DW_FORM_block1;
10209         case 2:
10210           return DW_FORM_block2;
10211         case 4:
10212           return DW_FORM_block4;
10213         default:
10214           gcc_unreachable ();
10215         }
10216     case dw_val_class_flag:
10217       if (dwarf_version >= 4)
10218         {
10219           /* Currently all add_AT_flag calls pass in 1 as last argument,
10220              so DW_FORM_flag_present can be used.  If that ever changes,
10221              we'll need to use DW_FORM_flag and have some optimization
10222              in build_abbrev_table that will change those to
10223              DW_FORM_flag_present if it is set to 1 in all DIEs using
10224              the same abbrev entry.  */
10225           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10226           return DW_FORM_flag_present;
10227         }
10228       return DW_FORM_flag;
10229     case dw_val_class_die_ref:
10230       if (AT_ref_external (a))
10231         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10232       else
10233         return DW_FORM_ref;
10234     case dw_val_class_fde_ref:
10235       return DW_FORM_data;
10236     case dw_val_class_lbl_id:
10237       return DW_FORM_addr;
10238     case dw_val_class_lineptr:
10239     case dw_val_class_macptr:
10240       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10241     case dw_val_class_str:
10242       return AT_string_form (a);
10243     case dw_val_class_file:
10244       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10245         {
10246         case 1:
10247           return DW_FORM_data1;
10248         case 2:
10249           return DW_FORM_data2;
10250         case 4:
10251           return DW_FORM_data4;
10252         default:
10253           gcc_unreachable ();
10254         }
10255
10256     case dw_val_class_data8:
10257       return DW_FORM_data8;
10258
10259     default:
10260       gcc_unreachable ();
10261     }
10262 }
10263
10264 /* Output the encoding of an attribute value.  */
10265
10266 static void
10267 output_value_format (dw_attr_ref a)
10268 {
10269   enum dwarf_form form = value_format (a);
10270
10271   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10272 }
10273
10274 /* Output the .debug_abbrev section which defines the DIE abbreviation
10275    table.  */
10276
10277 static void
10278 output_abbrev_section (void)
10279 {
10280   unsigned long abbrev_id;
10281
10282   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10283     {
10284       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10285       unsigned ix;
10286       dw_attr_ref a_attr;
10287
10288       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10289       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10290                                    dwarf_tag_name (abbrev->die_tag));
10291
10292       if (abbrev->die_child != NULL)
10293         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10294       else
10295         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10296
10297       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10298            ix++)
10299         {
10300           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10301                                        dwarf_attr_name (a_attr->dw_attr));
10302           output_value_format (a_attr);
10303         }
10304
10305       dw2_asm_output_data (1, 0, NULL);
10306       dw2_asm_output_data (1, 0, NULL);
10307     }
10308
10309   /* Terminate the table.  */
10310   dw2_asm_output_data (1, 0, NULL);
10311 }
10312
10313 /* Output a symbol we can use to refer to this DIE from another CU.  */
10314
10315 static inline void
10316 output_die_symbol (dw_die_ref die)
10317 {
10318   char *sym = die->die_id.die_symbol;
10319
10320   if (sym == 0)
10321     return;
10322
10323   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10324     /* We make these global, not weak; if the target doesn't support
10325        .linkonce, it doesn't support combining the sections, so debugging
10326        will break.  */
10327     targetm.asm_out.globalize_label (asm_out_file, sym);
10328
10329   ASM_OUTPUT_LABEL (asm_out_file, sym);
10330 }
10331
10332 /* Return a new location list, given the begin and end range, and the
10333    expression.  */
10334
10335 static inline dw_loc_list_ref
10336 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10337               const char *section)
10338 {
10339   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10340
10341   retlist->begin = begin;
10342   retlist->end = end;
10343   retlist->expr = expr;
10344   retlist->section = section;
10345
10346   return retlist;
10347 }
10348
10349 /* Generate a new internal symbol for this location list node, if it
10350    hasn't got one yet.  */
10351
10352 static inline void
10353 gen_llsym (dw_loc_list_ref list)
10354 {
10355   gcc_assert (!list->ll_symbol);
10356   list->ll_symbol = gen_internal_sym ("LLST");
10357 }
10358
10359 /* Output the location list given to us.  */
10360
10361 static void
10362 output_loc_list (dw_loc_list_ref list_head)
10363 {
10364   dw_loc_list_ref curr = list_head;
10365
10366   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10367
10368   /* Walk the location list, and output each range + expression.  */
10369   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10370     {
10371       unsigned long size;
10372       /* Don't output an entry that starts and ends at the same address.  */
10373       if (strcmp (curr->begin, curr->end) == 0)
10374         continue;
10375       if (!have_multiple_function_sections)
10376         {
10377           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10378                                 "Location list begin address (%s)",
10379                                 list_head->ll_symbol);
10380           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10381                                 "Location list end address (%s)",
10382                                 list_head->ll_symbol);
10383         }
10384       else
10385         {
10386           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10387                                "Location list begin address (%s)",
10388                                list_head->ll_symbol);
10389           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10390                                "Location list end address (%s)",
10391                                list_head->ll_symbol);
10392         }
10393       size = size_of_locs (curr->expr);
10394
10395       /* Output the block length for this list of location operations.  */
10396       gcc_assert (size <= 0xffff);
10397       dw2_asm_output_data (2, size, "%s", "Location expression size");
10398
10399       output_loc_sequence (curr->expr);
10400     }
10401
10402   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10403                        "Location list terminator begin (%s)",
10404                        list_head->ll_symbol);
10405   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10406                        "Location list terminator end (%s)",
10407                        list_head->ll_symbol);
10408 }
10409
10410 /* Output a type signature.  */
10411
10412 static inline void
10413 output_signature (const char *sig, const char *name)
10414 {
10415   int i;
10416
10417   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10418     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10419 }
10420
10421 /* Output the DIE and its attributes.  Called recursively to generate
10422    the definitions of each child DIE.  */
10423
10424 static void
10425 output_die (dw_die_ref die)
10426 {
10427   dw_attr_ref a;
10428   dw_die_ref c;
10429   unsigned long size;
10430   unsigned ix;
10431
10432   /* If someone in another CU might refer to us, set up a symbol for
10433      them to point to.  */
10434   if (dwarf_version < 4 && die->die_id.die_symbol)
10435     output_die_symbol (die);
10436
10437   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10438                                (unsigned long)die->die_offset,
10439                                dwarf_tag_name (die->die_tag));
10440
10441   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10442     {
10443       const char *name = dwarf_attr_name (a->dw_attr);
10444
10445       switch (AT_class (a))
10446         {
10447         case dw_val_class_addr:
10448           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10449           break;
10450
10451         case dw_val_class_offset:
10452           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10453                                "%s", name);
10454           break;
10455
10456         case dw_val_class_range_list:
10457           {
10458             char *p = strchr (ranges_section_label, '\0');
10459
10460             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10461                      a->dw_attr_val.v.val_offset);
10462             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10463                                    debug_ranges_section, "%s", name);
10464             *p = '\0';
10465           }
10466           break;
10467
10468         case dw_val_class_loc:
10469           size = size_of_locs (AT_loc (a));
10470
10471           /* Output the block length for this list of location operations.  */
10472           if (dwarf_version >= 4)
10473             dw2_asm_output_data_uleb128 (size, "%s", name);
10474           else
10475             dw2_asm_output_data (constant_size (size), size, "%s", name);
10476
10477           output_loc_sequence (AT_loc (a));
10478           break;
10479
10480         case dw_val_class_const:
10481           /* ??? It would be slightly more efficient to use a scheme like is
10482              used for unsigned constants below, but gdb 4.x does not sign
10483              extend.  Gdb 5.x does sign extend.  */
10484           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10485           break;
10486
10487         case dw_val_class_unsigned_const:
10488           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10489                                AT_unsigned (a), "%s", name);
10490           break;
10491
10492         case dw_val_class_const_double:
10493           {
10494             unsigned HOST_WIDE_INT first, second;
10495
10496             if (HOST_BITS_PER_WIDE_INT >= 64)
10497               dw2_asm_output_data (1,
10498                                    2 * HOST_BITS_PER_WIDE_INT
10499                                    / HOST_BITS_PER_CHAR,
10500                                    NULL);
10501
10502             if (WORDS_BIG_ENDIAN)
10503               {
10504                 first = a->dw_attr_val.v.val_double.high;
10505                 second = a->dw_attr_val.v.val_double.low;
10506               }
10507             else
10508               {
10509                 first = a->dw_attr_val.v.val_double.low;
10510                 second = a->dw_attr_val.v.val_double.high;
10511               }
10512
10513             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10514                                  first, name);
10515             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10516                                  second, NULL);
10517           }
10518           break;
10519
10520         case dw_val_class_vec:
10521           {
10522             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10523             unsigned int len = a->dw_attr_val.v.val_vec.length;
10524             unsigned int i;
10525             unsigned char *p;
10526
10527             dw2_asm_output_data (constant_size (len * elt_size),
10528                                  len * elt_size, "%s", name);
10529             if (elt_size > sizeof (HOST_WIDE_INT))
10530               {
10531                 elt_size /= 2;
10532                 len *= 2;
10533               }
10534             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10535                  i < len;
10536                  i++, p += elt_size)
10537               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10538                                    "fp or vector constant word %u", i);
10539             break;
10540           }
10541
10542         case dw_val_class_flag:
10543           if (dwarf_version >= 4)
10544             {
10545               /* Currently all add_AT_flag calls pass in 1 as last argument,
10546                  so DW_FORM_flag_present can be used.  If that ever changes,
10547                  we'll need to use DW_FORM_flag and have some optimization
10548                  in build_abbrev_table that will change those to
10549                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10550                  the same abbrev entry.  */
10551               gcc_assert (AT_flag (a) == 1);
10552               if (flag_debug_asm)
10553                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10554                          ASM_COMMENT_START, name);
10555               break;
10556             }
10557           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10558           break;
10559
10560         case dw_val_class_loc_list:
10561           {
10562             char *sym = AT_loc_list (a)->ll_symbol;
10563
10564             gcc_assert (sym);
10565             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10566                                    "%s", name);
10567           }
10568           break;
10569
10570         case dw_val_class_die_ref:
10571           if (AT_ref_external (a))
10572             {
10573               if (dwarf_version >= 4)
10574                 {
10575                   comdat_type_node_ref type_node =
10576                     AT_ref (a)->die_id.die_type_node;
10577
10578                   gcc_assert (type_node);
10579                   output_signature (type_node->signature, name);
10580                 }
10581               else
10582                 {
10583                   char *sym = AT_ref (a)->die_id.die_symbol;
10584                   int size;
10585
10586                   gcc_assert (sym);
10587                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10588                      length, whereas in DWARF3 it's always sized as an
10589                      offset.  */
10590                   if (dwarf_version == 2)
10591                     size = DWARF2_ADDR_SIZE;
10592                   else
10593                     size = DWARF_OFFSET_SIZE;
10594                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10595                                          name);
10596                 }
10597             }
10598           else
10599             {
10600               gcc_assert (AT_ref (a)->die_offset);
10601               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10602                                    "%s", name);
10603             }
10604           break;
10605
10606         case dw_val_class_fde_ref:
10607           {
10608             char l1[20];
10609
10610             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10611                                          a->dw_attr_val.v.val_fde_index * 2);
10612             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10613                                    "%s", name);
10614           }
10615           break;
10616
10617         case dw_val_class_lbl_id:
10618           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10619           break;
10620
10621         case dw_val_class_lineptr:
10622           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10623                                  debug_line_section, "%s", name);
10624           break;
10625
10626         case dw_val_class_macptr:
10627           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10628                                  debug_macinfo_section, "%s", name);
10629           break;
10630
10631         case dw_val_class_str:
10632           if (AT_string_form (a) == DW_FORM_strp)
10633             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10634                                    a->dw_attr_val.v.val_str->label,
10635                                    debug_str_section,
10636                                    "%s: \"%s\"", name, AT_string (a));
10637           else
10638             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10639           break;
10640
10641         case dw_val_class_file:
10642           {
10643             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10644
10645             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10646                                  a->dw_attr_val.v.val_file->filename);
10647             break;
10648           }
10649
10650         case dw_val_class_data8:
10651           {
10652             int i;
10653
10654             for (i = 0; i < 8; i++)
10655               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10656                                    i == 0 ? "%s" : NULL, name);
10657             break;
10658           }
10659
10660         default:
10661           gcc_unreachable ();
10662         }
10663     }
10664
10665   FOR_EACH_CHILD (die, c, output_die (c));
10666
10667   /* Add null byte to terminate sibling list.  */
10668   if (die->die_child != NULL)
10669     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10670                          (unsigned long) die->die_offset);
10671 }
10672
10673 /* Output the compilation unit that appears at the beginning of the
10674    .debug_info section, and precedes the DIE descriptions.  */
10675
10676 static void
10677 output_compilation_unit_header (void)
10678 {
10679   int ver = dwarf_version;
10680
10681   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10682     dw2_asm_output_data (4, 0xffffffff,
10683       "Initial length escape value indicating 64-bit DWARF extension");
10684   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10685                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10686                        "Length of Compilation Unit Info");
10687   dw2_asm_output_data (2, ver, "DWARF version number");
10688   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10689                          debug_abbrev_section,
10690                          "Offset Into Abbrev. Section");
10691   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10692 }
10693
10694 /* Output the compilation unit DIE and its children.  */
10695
10696 static void
10697 output_comp_unit (dw_die_ref die, int output_if_empty)
10698 {
10699   const char *secname;
10700   char *oldsym, *tmp;
10701
10702   /* Unless we are outputting main CU, we may throw away empty ones.  */
10703   if (!output_if_empty && die->die_child == NULL)
10704     return;
10705
10706   /* Even if there are no children of this DIE, we must output the information
10707      about the compilation unit.  Otherwise, on an empty translation unit, we
10708      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10709      will then complain when examining the file.  First mark all the DIEs in
10710      this CU so we know which get local refs.  */
10711   mark_dies (die);
10712
10713   build_abbrev_table (die);
10714
10715   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10716   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10717   calc_die_sizes (die);
10718
10719   oldsym = die->die_id.die_symbol;
10720   if (oldsym)
10721     {
10722       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10723
10724       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10725       secname = tmp;
10726       die->die_id.die_symbol = NULL;
10727       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10728     }
10729   else
10730     switch_to_section (debug_info_section);
10731
10732   /* Output debugging information.  */
10733   output_compilation_unit_header ();
10734   output_die (die);
10735
10736   /* Leave the marks on the main CU, so we can check them in
10737      output_pubnames.  */
10738   if (oldsym)
10739     {
10740       unmark_dies (die);
10741       die->die_id.die_symbol = oldsym;
10742     }
10743 }
10744
10745 /* Output a comdat type unit DIE and its children.  */
10746
10747 static void
10748 output_comdat_type_unit (comdat_type_node *node)
10749 {
10750   const char *secname;
10751   char *tmp;
10752   int i;
10753 #if defined (OBJECT_FORMAT_ELF)
10754   tree comdat_key;
10755 #endif
10756
10757   /* First mark all the DIEs in this CU so we know which get local refs.  */
10758   mark_dies (node->root_die);
10759
10760   build_abbrev_table (node->root_die);
10761
10762   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10763   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10764   calc_die_sizes (node->root_die);
10765
10766 #if defined (OBJECT_FORMAT_ELF)
10767   secname = ".debug_types";
10768   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10769   sprintf (tmp, "wt.");
10770   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10771     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10772   comdat_key = get_identifier (tmp);
10773   targetm.asm_out.named_section (secname,
10774                                  SECTION_DEBUG | SECTION_LINKONCE,
10775                                  comdat_key);
10776 #else
10777   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10778   sprintf (tmp, ".gnu.linkonce.wt.");
10779   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10780     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10781   secname = tmp;
10782   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10783 #endif
10784
10785   /* Output debugging information.  */
10786   output_compilation_unit_header ();
10787   output_signature (node->signature, "Type Signature");
10788   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10789                        "Offset to Type DIE");
10790   output_die (node->root_die);
10791
10792   unmark_dies (node->root_die);
10793 }
10794
10795 /* Return the DWARF2/3 pubname associated with a decl.  */
10796
10797 static const char *
10798 dwarf2_name (tree decl, int scope)
10799 {
10800   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10801 }
10802
10803 /* Add a new entry to .debug_pubnames if appropriate.  */
10804
10805 static void
10806 add_pubname_string (const char *str, dw_die_ref die)
10807 {
10808   pubname_entry e;
10809
10810   e.die = die;
10811   e.name = xstrdup (str);
10812   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10813 }
10814
10815 static void
10816 add_pubname (tree decl, dw_die_ref die)
10817 {
10818   if (TREE_PUBLIC (decl))
10819     {
10820       const char *name = dwarf2_name (decl, 1);
10821       if (name)
10822         add_pubname_string (name, die);
10823     }
10824 }
10825
10826 /* Add a new entry to .debug_pubtypes if appropriate.  */
10827
10828 static void
10829 add_pubtype (tree decl, dw_die_ref die)
10830 {
10831   pubname_entry e;
10832
10833   e.name = NULL;
10834   if ((TREE_PUBLIC (decl)
10835        || die->die_parent == comp_unit_die)
10836       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10837     {
10838       e.die = die;
10839       if (TYPE_P (decl))
10840         {
10841           if (TYPE_NAME (decl))
10842             {
10843               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10844                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10845               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10846                        && DECL_NAME (TYPE_NAME (decl)))
10847                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10848               else
10849                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10850             }
10851         }
10852       else
10853         {
10854           e.name = dwarf2_name (decl, 1);
10855           if (e.name)
10856             e.name = xstrdup (e.name);
10857         }
10858
10859       /* If we don't have a name for the type, there's no point in adding
10860          it to the table.  */
10861       if (e.name && e.name[0] != '\0')
10862         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10863     }
10864 }
10865
10866 /* Output the public names table used to speed up access to externally
10867    visible names; or the public types table used to find type definitions.  */
10868
10869 static void
10870 output_pubnames (VEC (pubname_entry, gc) * names)
10871 {
10872   unsigned i;
10873   unsigned long pubnames_length = size_of_pubnames (names);
10874   pubname_ref pub;
10875
10876   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10877     dw2_asm_output_data (4, 0xffffffff,
10878       "Initial length escape value indicating 64-bit DWARF extension");
10879   if (names == pubname_table)
10880     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10881                          "Length of Public Names Info");
10882   else
10883     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10884                          "Length of Public Type Names Info");
10885   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10886   dw2_asm_output_data (2, 2, "DWARF Version");
10887   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10888                          debug_info_section,
10889                          "Offset of Compilation Unit Info");
10890   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10891                        "Compilation Unit Length");
10892
10893   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10894     {
10895       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10896       if (names == pubname_table)
10897         gcc_assert (pub->die->die_mark);
10898
10899       if (names != pubtype_table
10900           || pub->die->die_offset != 0
10901           || !flag_eliminate_unused_debug_types)
10902         {
10903           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10904                                "DIE offset");
10905
10906           dw2_asm_output_nstring (pub->name, -1, "external name");
10907         }
10908     }
10909
10910   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10911 }
10912
10913 /* Add a new entry to .debug_aranges if appropriate.  */
10914
10915 static void
10916 add_arange (tree decl, dw_die_ref die)
10917 {
10918   if (! DECL_SECTION_NAME (decl))
10919     return;
10920
10921   if (arange_table_in_use == arange_table_allocated)
10922     {
10923       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10924       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10925                                     arange_table_allocated);
10926       memset (arange_table + arange_table_in_use, 0,
10927               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10928     }
10929
10930   arange_table[arange_table_in_use++] = die;
10931 }
10932
10933 /* Output the information that goes into the .debug_aranges table.
10934    Namely, define the beginning and ending address range of the
10935    text section generated for this compilation unit.  */
10936
10937 static void
10938 output_aranges (void)
10939 {
10940   unsigned i;
10941   unsigned long aranges_length = size_of_aranges ();
10942
10943   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10944     dw2_asm_output_data (4, 0xffffffff,
10945       "Initial length escape value indicating 64-bit DWARF extension");
10946   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10947                        "Length of Address Ranges Info");
10948   /* Version number for aranges is still 2, even in DWARF3.  */
10949   dw2_asm_output_data (2, 2, "DWARF Version");
10950   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10951                          debug_info_section,
10952                          "Offset of Compilation Unit Info");
10953   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10954   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10955
10956   /* We need to align to twice the pointer size here.  */
10957   if (DWARF_ARANGES_PAD_SIZE)
10958     {
10959       /* Pad using a 2 byte words so that padding is correct for any
10960          pointer size.  */
10961       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10962                            2 * DWARF2_ADDR_SIZE);
10963       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10964         dw2_asm_output_data (2, 0, NULL);
10965     }
10966
10967   /* It is necessary not to output these entries if the sections were
10968      not used; if the sections were not used, the length will be 0 and
10969      the address may end up as 0 if the section is discarded by ld
10970      --gc-sections, leaving an invalid (0, 0) entry that can be
10971      confused with the terminator.  */
10972   if (text_section_used)
10973     {
10974       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10975       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10976                             text_section_label, "Length");
10977     }
10978   if (cold_text_section_used)
10979     {
10980       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10981                            "Address");
10982       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10983                             cold_text_section_label, "Length");
10984     }
10985
10986   for (i = 0; i < arange_table_in_use; i++)
10987     {
10988       dw_die_ref die = arange_table[i];
10989
10990       /* We shouldn't see aranges for DIEs outside of the main CU.  */
10991       gcc_assert (die->die_mark);
10992
10993       if (die->die_tag == DW_TAG_subprogram)
10994         {
10995           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
10996                                "Address");
10997           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
10998                                 get_AT_low_pc (die), "Length");
10999         }
11000       else
11001         {
11002           /* A static variable; extract the symbol from DW_AT_location.
11003              Note that this code isn't currently hit, as we only emit
11004              aranges for functions (jason 9/23/99).  */
11005           dw_attr_ref a = get_AT (die, DW_AT_location);
11006           dw_loc_descr_ref loc;
11007
11008           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11009
11010           loc = AT_loc (a);
11011           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11012
11013           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11014                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11015           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11016                                get_AT_unsigned (die, DW_AT_byte_size),
11017                                "Length");
11018         }
11019     }
11020
11021   /* Output the terminator words.  */
11022   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11023   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11024 }
11025
11026 /* Add a new entry to .debug_ranges.  Return the offset at which it
11027    was placed.  */
11028
11029 static unsigned int
11030 add_ranges_num (int num)
11031 {
11032   unsigned int in_use = ranges_table_in_use;
11033
11034   if (in_use == ranges_table_allocated)
11035     {
11036       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11037       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11038                                     ranges_table_allocated);
11039       memset (ranges_table + ranges_table_in_use, 0,
11040               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11041     }
11042
11043   ranges_table[in_use].num = num;
11044   ranges_table_in_use = in_use + 1;
11045
11046   return in_use * 2 * DWARF2_ADDR_SIZE;
11047 }
11048
11049 /* Add a new entry to .debug_ranges corresponding to a block, or a
11050    range terminator if BLOCK is NULL.  */
11051
11052 static unsigned int
11053 add_ranges (const_tree block)
11054 {
11055   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11056 }
11057
11058 /* Add a new entry to .debug_ranges corresponding to a pair of
11059    labels.  */
11060
11061 static void
11062 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11063                       bool *added)
11064 {
11065   unsigned int in_use = ranges_by_label_in_use;
11066   unsigned int offset;
11067
11068   if (in_use == ranges_by_label_allocated)
11069     {
11070       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11071       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11072                                        ranges_by_label,
11073                                        ranges_by_label_allocated);
11074       memset (ranges_by_label + ranges_by_label_in_use, 0,
11075               RANGES_TABLE_INCREMENT
11076               * sizeof (struct dw_ranges_by_label_struct));
11077     }
11078
11079   ranges_by_label[in_use].begin = begin;
11080   ranges_by_label[in_use].end = end;
11081   ranges_by_label_in_use = in_use + 1;
11082
11083   offset = add_ranges_num (-(int)in_use - 1);
11084   if (!*added)
11085     {
11086       add_AT_range_list (die, DW_AT_ranges, offset);
11087       *added = true;
11088     }
11089 }
11090
11091 static void
11092 output_ranges (void)
11093 {
11094   unsigned i;
11095   static const char *const start_fmt = "Offset %#x";
11096   const char *fmt = start_fmt;
11097
11098   for (i = 0; i < ranges_table_in_use; i++)
11099     {
11100       int block_num = ranges_table[i].num;
11101
11102       if (block_num > 0)
11103         {
11104           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11105           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11106
11107           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11108           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11109
11110           /* If all code is in the text section, then the compilation
11111              unit base address defaults to DW_AT_low_pc, which is the
11112              base of the text section.  */
11113           if (!have_multiple_function_sections)
11114             {
11115               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11116                                     text_section_label,
11117                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11118               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11119                                     text_section_label, NULL);
11120             }
11121
11122           /* Otherwise, the compilation unit base address is zero,
11123              which allows us to use absolute addresses, and not worry
11124              about whether the target supports cross-section
11125              arithmetic.  */
11126           else
11127             {
11128               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11129                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11130               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11131             }
11132
11133           fmt = NULL;
11134         }
11135
11136       /* Negative block_num stands for an index into ranges_by_label.  */
11137       else if (block_num < 0)
11138         {
11139           int lab_idx = - block_num - 1;
11140
11141           if (!have_multiple_function_sections)
11142             {
11143               gcc_unreachable ();
11144 #if 0
11145               /* If we ever use add_ranges_by_labels () for a single
11146                  function section, all we have to do is to take out
11147                  the #if 0 above.  */
11148               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11149                                     ranges_by_label[lab_idx].begin,
11150                                     text_section_label,
11151                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11152               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11153                                     ranges_by_label[lab_idx].end,
11154                                     text_section_label, NULL);
11155 #endif
11156             }
11157           else
11158             {
11159               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11160                                    ranges_by_label[lab_idx].begin,
11161                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11162               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11163                                    ranges_by_label[lab_idx].end,
11164                                    NULL);
11165             }
11166         }
11167       else
11168         {
11169           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11170           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11171           fmt = start_fmt;
11172         }
11173     }
11174 }
11175
11176 /* Data structure containing information about input files.  */
11177 struct file_info
11178 {
11179   const char *path;     /* Complete file name.  */
11180   const char *fname;    /* File name part.  */
11181   int length;           /* Length of entire string.  */
11182   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11183   int dir_idx;          /* Index in directory table.  */
11184 };
11185
11186 /* Data structure containing information about directories with source
11187    files.  */
11188 struct dir_info
11189 {
11190   const char *path;     /* Path including directory name.  */
11191   int length;           /* Path length.  */
11192   int prefix;           /* Index of directory entry which is a prefix.  */
11193   int count;            /* Number of files in this directory.  */
11194   int dir_idx;          /* Index of directory used as base.  */
11195 };
11196
11197 /* Callback function for file_info comparison.  We sort by looking at
11198    the directories in the path.  */
11199
11200 static int
11201 file_info_cmp (const void *p1, const void *p2)
11202 {
11203   const struct file_info *const s1 = (const struct file_info *) p1;
11204   const struct file_info *const s2 = (const struct file_info *) p2;
11205   const unsigned char *cp1;
11206   const unsigned char *cp2;
11207
11208   /* Take care of file names without directories.  We need to make sure that
11209      we return consistent values to qsort since some will get confused if
11210      we return the same value when identical operands are passed in opposite
11211      orders.  So if neither has a directory, return 0 and otherwise return
11212      1 or -1 depending on which one has the directory.  */
11213   if ((s1->path == s1->fname || s2->path == s2->fname))
11214     return (s2->path == s2->fname) - (s1->path == s1->fname);
11215
11216   cp1 = (const unsigned char *) s1->path;
11217   cp2 = (const unsigned char *) s2->path;
11218
11219   while (1)
11220     {
11221       ++cp1;
11222       ++cp2;
11223       /* Reached the end of the first path?  If so, handle like above.  */
11224       if ((cp1 == (const unsigned char *) s1->fname)
11225           || (cp2 == (const unsigned char *) s2->fname))
11226         return ((cp2 == (const unsigned char *) s2->fname)
11227                 - (cp1 == (const unsigned char *) s1->fname));
11228
11229       /* Character of current path component the same?  */
11230       else if (*cp1 != *cp2)
11231         return *cp1 - *cp2;
11232     }
11233 }
11234
11235 struct file_name_acquire_data
11236 {
11237   struct file_info *files;
11238   int used_files;
11239   int max_files;
11240 };
11241
11242 /* Traversal function for the hash table.  */
11243
11244 static int
11245 file_name_acquire (void ** slot, void *data)
11246 {
11247   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11248   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11249   struct file_info *fi;
11250   const char *f;
11251
11252   gcc_assert (fnad->max_files >= d->emitted_number);
11253
11254   if (! d->emitted_number)
11255     return 1;
11256
11257   gcc_assert (fnad->max_files != fnad->used_files);
11258
11259   fi = fnad->files + fnad->used_files++;
11260
11261   /* Skip all leading "./".  */
11262   f = d->filename;
11263   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11264     f += 2;
11265
11266   /* Create a new array entry.  */
11267   fi->path = f;
11268   fi->length = strlen (f);
11269   fi->file_idx = d;
11270
11271   /* Search for the file name part.  */
11272   f = strrchr (f, DIR_SEPARATOR);
11273 #if defined (DIR_SEPARATOR_2)
11274   {
11275     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11276
11277     if (g != NULL)
11278       {
11279         if (f == NULL || f < g)
11280           f = g;
11281       }
11282   }
11283 #endif
11284
11285   fi->fname = f == NULL ? fi->path : f + 1;
11286   return 1;
11287 }
11288
11289 /* Output the directory table and the file name table.  We try to minimize
11290    the total amount of memory needed.  A heuristic is used to avoid large
11291    slowdowns with many input files.  */
11292
11293 static void
11294 output_file_names (void)
11295 {
11296   struct file_name_acquire_data fnad;
11297   int numfiles;
11298   struct file_info *files;
11299   struct dir_info *dirs;
11300   int *saved;
11301   int *savehere;
11302   int *backmap;
11303   int ndirs;
11304   int idx_offset;
11305   int i;
11306
11307   if (!last_emitted_file)
11308     {
11309       dw2_asm_output_data (1, 0, "End directory table");
11310       dw2_asm_output_data (1, 0, "End file name table");
11311       return;
11312     }
11313
11314   numfiles = last_emitted_file->emitted_number;
11315
11316   /* Allocate the various arrays we need.  */
11317   files = XALLOCAVEC (struct file_info, numfiles);
11318   dirs = XALLOCAVEC (struct dir_info, numfiles);
11319
11320   fnad.files = files;
11321   fnad.used_files = 0;
11322   fnad.max_files = numfiles;
11323   htab_traverse (file_table, file_name_acquire, &fnad);
11324   gcc_assert (fnad.used_files == fnad.max_files);
11325
11326   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11327
11328   /* Find all the different directories used.  */
11329   dirs[0].path = files[0].path;
11330   dirs[0].length = files[0].fname - files[0].path;
11331   dirs[0].prefix = -1;
11332   dirs[0].count = 1;
11333   dirs[0].dir_idx = 0;
11334   files[0].dir_idx = 0;
11335   ndirs = 1;
11336
11337   for (i = 1; i < numfiles; i++)
11338     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11339         && memcmp (dirs[ndirs - 1].path, files[i].path,
11340                    dirs[ndirs - 1].length) == 0)
11341       {
11342         /* Same directory as last entry.  */
11343         files[i].dir_idx = ndirs - 1;
11344         ++dirs[ndirs - 1].count;
11345       }
11346     else
11347       {
11348         int j;
11349
11350         /* This is a new directory.  */
11351         dirs[ndirs].path = files[i].path;
11352         dirs[ndirs].length = files[i].fname - files[i].path;
11353         dirs[ndirs].count = 1;
11354         dirs[ndirs].dir_idx = ndirs;
11355         files[i].dir_idx = ndirs;
11356
11357         /* Search for a prefix.  */
11358         dirs[ndirs].prefix = -1;
11359         for (j = 0; j < ndirs; j++)
11360           if (dirs[j].length < dirs[ndirs].length
11361               && dirs[j].length > 1
11362               && (dirs[ndirs].prefix == -1
11363                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11364               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11365             dirs[ndirs].prefix = j;
11366
11367         ++ndirs;
11368       }
11369
11370   /* Now to the actual work.  We have to find a subset of the directories which
11371      allow expressing the file name using references to the directory table
11372      with the least amount of characters.  We do not do an exhaustive search
11373      where we would have to check out every combination of every single
11374      possible prefix.  Instead we use a heuristic which provides nearly optimal
11375      results in most cases and never is much off.  */
11376   saved = XALLOCAVEC (int, ndirs);
11377   savehere = XALLOCAVEC (int, ndirs);
11378
11379   memset (saved, '\0', ndirs * sizeof (saved[0]));
11380   for (i = 0; i < ndirs; i++)
11381     {
11382       int j;
11383       int total;
11384
11385       /* We can always save some space for the current directory.  But this
11386          does not mean it will be enough to justify adding the directory.  */
11387       savehere[i] = dirs[i].length;
11388       total = (savehere[i] - saved[i]) * dirs[i].count;
11389
11390       for (j = i + 1; j < ndirs; j++)
11391         {
11392           savehere[j] = 0;
11393           if (saved[j] < dirs[i].length)
11394             {
11395               /* Determine whether the dirs[i] path is a prefix of the
11396                  dirs[j] path.  */
11397               int k;
11398
11399               k = dirs[j].prefix;
11400               while (k != -1 && k != (int) i)
11401                 k = dirs[k].prefix;
11402
11403               if (k == (int) i)
11404                 {
11405                   /* Yes it is.  We can possibly save some memory by
11406                      writing the filenames in dirs[j] relative to
11407                      dirs[i].  */
11408                   savehere[j] = dirs[i].length;
11409                   total += (savehere[j] - saved[j]) * dirs[j].count;
11410                 }
11411             }
11412         }
11413
11414       /* Check whether we can save enough to justify adding the dirs[i]
11415          directory.  */
11416       if (total > dirs[i].length + 1)
11417         {
11418           /* It's worthwhile adding.  */
11419           for (j = i; j < ndirs; j++)
11420             if (savehere[j] > 0)
11421               {
11422                 /* Remember how much we saved for this directory so far.  */
11423                 saved[j] = savehere[j];
11424
11425                 /* Remember the prefix directory.  */
11426                 dirs[j].dir_idx = i;
11427               }
11428         }
11429     }
11430
11431   /* Emit the directory name table.  */
11432   idx_offset = dirs[0].length > 0 ? 1 : 0;
11433   for (i = 1 - idx_offset; i < ndirs; i++)
11434     dw2_asm_output_nstring (dirs[i].path,
11435                             dirs[i].length
11436                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11437                             "Directory Entry: %#x", i + idx_offset);
11438
11439   dw2_asm_output_data (1, 0, "End directory table");
11440
11441   /* We have to emit them in the order of emitted_number since that's
11442      used in the debug info generation.  To do this efficiently we
11443      generate a back-mapping of the indices first.  */
11444   backmap = XALLOCAVEC (int, numfiles);
11445   for (i = 0; i < numfiles; i++)
11446     backmap[files[i].file_idx->emitted_number - 1] = i;
11447
11448   /* Now write all the file names.  */
11449   for (i = 0; i < numfiles; i++)
11450     {
11451       int file_idx = backmap[i];
11452       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11453
11454 #ifdef VMS_DEBUGGING_INFO
11455 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11456
11457       /* Setting these fields can lead to debugger miscomparisons,
11458          but VMS Debug requires them to be set correctly.  */
11459
11460       int ver;
11461       long long cdt;
11462       long siz;
11463       int maxfilelen = strlen (files[file_idx].path)
11464                                + dirs[dir_idx].length
11465                                + MAX_VMS_VERSION_LEN + 1;
11466       char *filebuf = XALLOCAVEC (char, maxfilelen);
11467
11468       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11469       snprintf (filebuf, maxfilelen, "%s;%d",
11470                 files[file_idx].path + dirs[dir_idx].length, ver);
11471
11472       dw2_asm_output_nstring
11473         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11474
11475       /* Include directory index.  */
11476       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11477
11478       /* Modification time.  */
11479       dw2_asm_output_data_uleb128
11480         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11481           ? cdt : 0,
11482          NULL);
11483
11484       /* File length in bytes.  */
11485       dw2_asm_output_data_uleb128
11486         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11487           ? siz : 0,
11488          NULL);
11489 #else
11490       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11491                               "File Entry: %#x", (unsigned) i + 1);
11492
11493       /* Include directory index.  */
11494       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11495
11496       /* Modification time.  */
11497       dw2_asm_output_data_uleb128 (0, NULL);
11498
11499       /* File length in bytes.  */
11500       dw2_asm_output_data_uleb128 (0, NULL);
11501 #endif
11502     }
11503
11504   dw2_asm_output_data (1, 0, "End file name table");
11505 }
11506
11507
11508 /* Output the source line number correspondence information.  This
11509    information goes into the .debug_line section.  */
11510
11511 static void
11512 output_line_info (void)
11513 {
11514   char l1[20], l2[20], p1[20], p2[20];
11515   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11516   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11517   unsigned opc;
11518   unsigned n_op_args;
11519   unsigned long lt_index;
11520   unsigned long current_line;
11521   long line_offset;
11522   long line_delta;
11523   unsigned long current_file;
11524   unsigned long function;
11525   int ver = dwarf_version;
11526
11527   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11528   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11529   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11530   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11531
11532   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11533     dw2_asm_output_data (4, 0xffffffff,
11534       "Initial length escape value indicating 64-bit DWARF extension");
11535   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11536                         "Length of Source Line Info");
11537   ASM_OUTPUT_LABEL (asm_out_file, l1);
11538
11539   dw2_asm_output_data (2, ver, "DWARF Version");
11540   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11541   ASM_OUTPUT_LABEL (asm_out_file, p1);
11542
11543   /* Define the architecture-dependent minimum instruction length (in
11544    bytes).  In this implementation of DWARF, this field is used for
11545    information purposes only.  Since GCC generates assembly language,
11546    we have no a priori knowledge of how many instruction bytes are
11547    generated for each source line, and therefore can use only the
11548    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11549    commands.  Accordingly, we fix this as `1', which is "correct
11550    enough" for all architectures, and don't let the target override.  */
11551   dw2_asm_output_data (1, 1,
11552                        "Minimum Instruction Length");
11553
11554   if (ver >= 4)
11555     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11556                          "Maximum Operations Per Instruction");
11557   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11558                        "Default is_stmt_start flag");
11559   dw2_asm_output_data (1, DWARF_LINE_BASE,
11560                        "Line Base Value (Special Opcodes)");
11561   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11562                        "Line Range Value (Special Opcodes)");
11563   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11564                        "Special Opcode Base");
11565
11566   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11567     {
11568       switch (opc)
11569         {
11570         case DW_LNS_advance_pc:
11571         case DW_LNS_advance_line:
11572         case DW_LNS_set_file:
11573         case DW_LNS_set_column:
11574         case DW_LNS_fixed_advance_pc:
11575           n_op_args = 1;
11576           break;
11577         default:
11578           n_op_args = 0;
11579           break;
11580         }
11581
11582       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11583                            opc, n_op_args);
11584     }
11585
11586   /* Write out the information about the files we use.  */
11587   output_file_names ();
11588   ASM_OUTPUT_LABEL (asm_out_file, p2);
11589
11590   /* We used to set the address register to the first location in the text
11591      section here, but that didn't accomplish anything since we already
11592      have a line note for the opening brace of the first function.  */
11593
11594   /* Generate the line number to PC correspondence table, encoded as
11595      a series of state machine operations.  */
11596   current_file = 1;
11597   current_line = 1;
11598
11599   if (cfun && in_cold_section_p)
11600     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11601   else
11602     strcpy (prev_line_label, text_section_label);
11603   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11604     {
11605       dw_line_info_ref line_info = &line_info_table[lt_index];
11606
11607 #if 0
11608       /* Disable this optimization for now; GDB wants to see two line notes
11609          at the beginning of a function so it can find the end of the
11610          prologue.  */
11611
11612       /* Don't emit anything for redundant notes.  Just updating the
11613          address doesn't accomplish anything, because we already assume
11614          that anything after the last address is this line.  */
11615       if (line_info->dw_line_num == current_line
11616           && line_info->dw_file_num == current_file)
11617         continue;
11618 #endif
11619
11620       /* Emit debug info for the address of the current line.
11621
11622          Unfortunately, we have little choice here currently, and must always
11623          use the most general form.  GCC does not know the address delta
11624          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11625          attributes which will give an upper bound on the address range.  We
11626          could perhaps use length attributes to determine when it is safe to
11627          use DW_LNS_fixed_advance_pc.  */
11628
11629       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11630       if (0)
11631         {
11632           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11633           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11634                                "DW_LNS_fixed_advance_pc");
11635           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11636         }
11637       else
11638         {
11639           /* This can handle any delta.  This takes
11640              4+DWARF2_ADDR_SIZE bytes.  */
11641           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11642           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11643           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11644           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11645         }
11646
11647       strcpy (prev_line_label, line_label);
11648
11649       /* Emit debug info for the source file of the current line, if
11650          different from the previous line.  */
11651       if (line_info->dw_file_num != current_file)
11652         {
11653           current_file = line_info->dw_file_num;
11654           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11655           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11656         }
11657
11658       /* Emit debug info for the current line number, choosing the encoding
11659          that uses the least amount of space.  */
11660       if (line_info->dw_line_num != current_line)
11661         {
11662           line_offset = line_info->dw_line_num - current_line;
11663           line_delta = line_offset - DWARF_LINE_BASE;
11664           current_line = line_info->dw_line_num;
11665           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11666             /* This can handle deltas from -10 to 234, using the current
11667                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11668                takes 1 byte.  */
11669             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11670                                  "line %lu", current_line);
11671           else
11672             {
11673               /* This can handle any delta.  This takes at least 4 bytes,
11674                  depending on the value being encoded.  */
11675               dw2_asm_output_data (1, DW_LNS_advance_line,
11676                                    "advance to line %lu", current_line);
11677               dw2_asm_output_data_sleb128 (line_offset, NULL);
11678               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11679             }
11680         }
11681       else
11682         /* We still need to start a new row, so output a copy insn.  */
11683         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11684     }
11685
11686   /* Emit debug info for the address of the end of the function.  */
11687   if (0)
11688     {
11689       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11690                            "DW_LNS_fixed_advance_pc");
11691       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11692     }
11693   else
11694     {
11695       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11696       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11697       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11698       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11699     }
11700
11701   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11702   dw2_asm_output_data_uleb128 (1, NULL);
11703   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11704
11705   function = 0;
11706   current_file = 1;
11707   current_line = 1;
11708   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11709     {
11710       dw_separate_line_info_ref line_info
11711         = &separate_line_info_table[lt_index];
11712
11713 #if 0
11714       /* Don't emit anything for redundant notes.  */
11715       if (line_info->dw_line_num == current_line
11716           && line_info->dw_file_num == current_file
11717           && line_info->function == function)
11718         goto cont;
11719 #endif
11720
11721       /* Emit debug info for the address of the current line.  If this is
11722          a new function, or the first line of a function, then we need
11723          to handle it differently.  */
11724       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11725                                    lt_index);
11726       if (function != line_info->function)
11727         {
11728           function = line_info->function;
11729
11730           /* Set the address register to the first line in the function.  */
11731           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11732           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11733           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11734           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11735         }
11736       else
11737         {
11738           /* ??? See the DW_LNS_advance_pc comment above.  */
11739           if (0)
11740             {
11741               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11742                                    "DW_LNS_fixed_advance_pc");
11743               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11744             }
11745           else
11746             {
11747               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11748               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11749               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11750               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11751             }
11752         }
11753
11754       strcpy (prev_line_label, line_label);
11755
11756       /* Emit debug info for the source file of the current line, if
11757          different from the previous line.  */
11758       if (line_info->dw_file_num != current_file)
11759         {
11760           current_file = line_info->dw_file_num;
11761           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11762           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11763         }
11764
11765       /* Emit debug info for the current line number, choosing the encoding
11766          that uses the least amount of space.  */
11767       if (line_info->dw_line_num != current_line)
11768         {
11769           line_offset = line_info->dw_line_num - current_line;
11770           line_delta = line_offset - DWARF_LINE_BASE;
11771           current_line = line_info->dw_line_num;
11772           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11773             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11774                                  "line %lu", current_line);
11775           else
11776             {
11777               dw2_asm_output_data (1, DW_LNS_advance_line,
11778                                    "advance to line %lu", current_line);
11779               dw2_asm_output_data_sleb128 (line_offset, NULL);
11780               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11781             }
11782         }
11783       else
11784         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11785
11786 #if 0
11787     cont:
11788 #endif
11789
11790       lt_index++;
11791
11792       /* If we're done with a function, end its sequence.  */
11793       if (lt_index == separate_line_info_table_in_use
11794           || separate_line_info_table[lt_index].function != function)
11795         {
11796           current_file = 1;
11797           current_line = 1;
11798
11799           /* Emit debug info for the address of the end of the function.  */
11800           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11801           if (0)
11802             {
11803               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11804                                    "DW_LNS_fixed_advance_pc");
11805               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11806             }
11807           else
11808             {
11809               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11810               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11811               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11812               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11813             }
11814
11815           /* Output the marker for the end of this sequence.  */
11816           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11817           dw2_asm_output_data_uleb128 (1, NULL);
11818           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11819         }
11820     }
11821
11822   /* Output the marker for the end of the line number info.  */
11823   ASM_OUTPUT_LABEL (asm_out_file, l2);
11824 }
11825
11826 /* Return the size of the .debug_dcall table for the compilation unit.  */
11827
11828 static unsigned long
11829 size_of_dcall_table (void)
11830 {
11831   unsigned long size;
11832   unsigned int i;
11833   dcall_entry *p;
11834   tree last_poc_decl = NULL;
11835
11836   /* Header:  version + debug info section pointer + pointer size.  */
11837   size = 2 + DWARF_OFFSET_SIZE + 1;
11838
11839   /* Each entry:  code label + DIE offset.  */
11840   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11841     {
11842       gcc_assert (p->targ_die != NULL);
11843       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11844       if (p->poc_decl != last_poc_decl)
11845         {
11846           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11847           gcc_assert (poc_die);
11848           last_poc_decl = p->poc_decl;
11849           if (poc_die)
11850             size += (DWARF_OFFSET_SIZE
11851                      + size_of_uleb128 (poc_die->die_offset));
11852         }
11853       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11854     }
11855
11856   return size;
11857 }
11858
11859 /* Output the direct call table used to disambiguate PC values when
11860    identical function have been merged.  */
11861
11862 static void
11863 output_dcall_table (void)
11864 {
11865   unsigned i;
11866   unsigned long dcall_length = size_of_dcall_table ();
11867   dcall_entry *p;
11868   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11869   tree last_poc_decl = NULL;
11870
11871   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11872     dw2_asm_output_data (4, 0xffffffff,
11873       "Initial length escape value indicating 64-bit DWARF extension");
11874   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11875                        "Length of Direct Call Table");
11876   dw2_asm_output_data (2, 4, "Version number");
11877   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11878                          debug_info_section,
11879                          "Offset of Compilation Unit Info");
11880   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11881
11882   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11883     {
11884       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11885       if (p->poc_decl != last_poc_decl)
11886         {
11887           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11888           last_poc_decl = p->poc_decl;
11889           if (poc_die)
11890             {
11891               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11892               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11893                                            "Caller DIE offset");
11894             }
11895         }
11896       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11897       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11898       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11899                                    "Callee DIE offset");
11900     }
11901 }
11902 \f
11903 /* Return the size of the .debug_vcall table for the compilation unit.  */
11904
11905 static unsigned long
11906 size_of_vcall_table (void)
11907 {
11908   unsigned long size;
11909   unsigned int i;
11910   vcall_entry *p;
11911
11912   /* Header:  version + pointer size.  */
11913   size = 2 + 1;
11914
11915   /* Each entry:  code label + vtable slot index.  */
11916   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11917     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11918
11919   return size;
11920 }
11921
11922 /* Output the virtual call table used to disambiguate PC values when
11923    identical function have been merged.  */
11924
11925 static void
11926 output_vcall_table (void)
11927 {
11928   unsigned i;
11929   unsigned long vcall_length = size_of_vcall_table ();
11930   vcall_entry *p;
11931   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11932
11933   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11934     dw2_asm_output_data (4, 0xffffffff,
11935       "Initial length escape value indicating 64-bit DWARF extension");
11936   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11937                        "Length of Virtual Call Table");
11938   dw2_asm_output_data (2, 4, "Version number");
11939   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11940
11941   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11942     {
11943       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11944       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11945       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11946     }
11947 }
11948 \f
11949 /* Given a pointer to a tree node for some base type, return a pointer to
11950    a DIE that describes the given type.
11951
11952    This routine must only be called for GCC type nodes that correspond to
11953    Dwarf base (fundamental) types.  */
11954
11955 static dw_die_ref
11956 base_type_die (tree type)
11957 {
11958   dw_die_ref base_type_result;
11959   enum dwarf_type encoding;
11960
11961   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11962     return 0;
11963
11964   /* If this is a subtype that should not be emitted as a subrange type,
11965      use the base type.  See subrange_type_for_debug_p.  */
11966   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11967     type = TREE_TYPE (type);
11968
11969   switch (TREE_CODE (type))
11970     {
11971     case INTEGER_TYPE:
11972       if (TYPE_STRING_FLAG (type))
11973         {
11974           if (TYPE_UNSIGNED (type))
11975             encoding = DW_ATE_unsigned_char;
11976           else
11977             encoding = DW_ATE_signed_char;
11978         }
11979       else if (TYPE_UNSIGNED (type))
11980         encoding = DW_ATE_unsigned;
11981       else
11982         encoding = DW_ATE_signed;
11983       break;
11984
11985     case REAL_TYPE:
11986       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11987         {
11988           if (dwarf_version >= 3 || !dwarf_strict)
11989             encoding = DW_ATE_decimal_float;
11990           else
11991             encoding = DW_ATE_lo_user;
11992         }
11993       else
11994         encoding = DW_ATE_float;
11995       break;
11996
11997     case FIXED_POINT_TYPE:
11998       if (!(dwarf_version >= 3 || !dwarf_strict))
11999         encoding = DW_ATE_lo_user;
12000       else if (TYPE_UNSIGNED (type))
12001         encoding = DW_ATE_unsigned_fixed;
12002       else
12003         encoding = DW_ATE_signed_fixed;
12004       break;
12005
12006       /* Dwarf2 doesn't know anything about complex ints, so use
12007          a user defined type for it.  */
12008     case COMPLEX_TYPE:
12009       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12010         encoding = DW_ATE_complex_float;
12011       else
12012         encoding = DW_ATE_lo_user;
12013       break;
12014
12015     case BOOLEAN_TYPE:
12016       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12017       encoding = DW_ATE_boolean;
12018       break;
12019
12020     default:
12021       /* No other TREE_CODEs are Dwarf fundamental types.  */
12022       gcc_unreachable ();
12023     }
12024
12025   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12026
12027   /* This probably indicates a bug.  */
12028   if (! TYPE_NAME (type))
12029     add_name_attribute (base_type_result, "__unknown__");
12030
12031   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12032                    int_size_in_bytes (type));
12033   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12034
12035   return base_type_result;
12036 }
12037
12038 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12039    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12040
12041 static inline int
12042 is_base_type (tree type)
12043 {
12044   switch (TREE_CODE (type))
12045     {
12046     case ERROR_MARK:
12047     case VOID_TYPE:
12048     case INTEGER_TYPE:
12049     case REAL_TYPE:
12050     case FIXED_POINT_TYPE:
12051     case COMPLEX_TYPE:
12052     case BOOLEAN_TYPE:
12053       return 1;
12054
12055     case ARRAY_TYPE:
12056     case RECORD_TYPE:
12057     case UNION_TYPE:
12058     case QUAL_UNION_TYPE:
12059     case ENUMERAL_TYPE:
12060     case FUNCTION_TYPE:
12061     case METHOD_TYPE:
12062     case POINTER_TYPE:
12063     case REFERENCE_TYPE:
12064     case OFFSET_TYPE:
12065     case LANG_TYPE:
12066     case VECTOR_TYPE:
12067       return 0;
12068
12069     default:
12070       gcc_unreachable ();
12071     }
12072
12073   return 0;
12074 }
12075
12076 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12077    node, return the size in bits for the type if it is a constant, or else
12078    return the alignment for the type if the type's size is not constant, or
12079    else return BITS_PER_WORD if the type actually turns out to be an
12080    ERROR_MARK node.  */
12081
12082 static inline unsigned HOST_WIDE_INT
12083 simple_type_size_in_bits (const_tree type)
12084 {
12085   if (TREE_CODE (type) == ERROR_MARK)
12086     return BITS_PER_WORD;
12087   else if (TYPE_SIZE (type) == NULL_TREE)
12088     return 0;
12089   else if (host_integerp (TYPE_SIZE (type), 1))
12090     return tree_low_cst (TYPE_SIZE (type), 1);
12091   else
12092     return TYPE_ALIGN (type);
12093 }
12094
12095 /*  Given a pointer to a tree node for a subrange type, return a pointer
12096     to a DIE that describes the given type.  */
12097
12098 static dw_die_ref
12099 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12100 {
12101   dw_die_ref subrange_die;
12102   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12103
12104   if (context_die == NULL)
12105     context_die = comp_unit_die;
12106
12107   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12108
12109   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12110     {
12111       /* The size of the subrange type and its base type do not match,
12112          so we need to generate a size attribute for the subrange type.  */
12113       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12114     }
12115
12116   if (low)
12117     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12118   if (high)
12119     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12120
12121   return subrange_die;
12122 }
12123
12124 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12125    entry that chains various modifiers in front of the given type.  */
12126
12127 static dw_die_ref
12128 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12129                    dw_die_ref context_die)
12130 {
12131   enum tree_code code = TREE_CODE (type);
12132   dw_die_ref mod_type_die;
12133   dw_die_ref sub_die = NULL;
12134   tree item_type = NULL;
12135   tree qualified_type;
12136   tree name, low, high;
12137
12138   if (code == ERROR_MARK)
12139     return NULL;
12140
12141   /* See if we already have the appropriately qualified variant of
12142      this type.  */
12143   qualified_type
12144     = get_qualified_type (type,
12145                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12146                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12147
12148   /* If we do, then we can just use its DIE, if it exists.  */
12149   if (qualified_type)
12150     {
12151       mod_type_die = lookup_type_die (qualified_type);
12152       if (mod_type_die)
12153         return mod_type_die;
12154     }
12155
12156   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12157
12158   /* Handle C typedef types.  */
12159   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12160       && !DECL_ARTIFICIAL (name))
12161     {
12162       tree dtype = TREE_TYPE (name);
12163
12164       if (qualified_type == dtype)
12165         {
12166           /* For a named type, use the typedef.  */
12167           gen_type_die (qualified_type, context_die);
12168           return lookup_type_die (qualified_type);
12169         }
12170       else if (is_const_type < TYPE_READONLY (dtype)
12171                || is_volatile_type < TYPE_VOLATILE (dtype)
12172                || (is_const_type <= TYPE_READONLY (dtype)
12173                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12174                    && DECL_ORIGINAL_TYPE (name) != type))
12175         /* cv-unqualified version of named type.  Just use the unnamed
12176            type to which it refers.  */
12177         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12178                                   is_const_type, is_volatile_type,
12179                                   context_die);
12180       /* Else cv-qualified version of named type; fall through.  */
12181     }
12182
12183   if (is_const_type)
12184     {
12185       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12186       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12187     }
12188   else if (is_volatile_type)
12189     {
12190       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12191       sub_die = modified_type_die (type, 0, 0, context_die);
12192     }
12193   else if (code == POINTER_TYPE)
12194     {
12195       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12196       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12197                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12198       item_type = TREE_TYPE (type);
12199       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12200         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12201                          TYPE_ADDR_SPACE (item_type));
12202     }
12203   else if (code == REFERENCE_TYPE)
12204     {
12205       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12206         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12207                                 type);
12208       else
12209         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12210       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12211                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12212       item_type = TREE_TYPE (type);
12213       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12214         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12215                          TYPE_ADDR_SPACE (item_type));
12216     }
12217   else if (code == INTEGER_TYPE
12218            && TREE_TYPE (type) != NULL_TREE
12219            && subrange_type_for_debug_p (type, &low, &high))
12220     {
12221       mod_type_die = subrange_type_die (type, low, high, context_die);
12222       item_type = TREE_TYPE (type);
12223     }
12224   else if (is_base_type (type))
12225     mod_type_die = base_type_die (type);
12226   else
12227     {
12228       gen_type_die (type, context_die);
12229
12230       /* We have to get the type_main_variant here (and pass that to the
12231          `lookup_type_die' routine) because the ..._TYPE node we have
12232          might simply be a *copy* of some original type node (where the
12233          copy was created to help us keep track of typedef names) and
12234          that copy might have a different TYPE_UID from the original
12235          ..._TYPE node.  */
12236       if (TREE_CODE (type) != VECTOR_TYPE)
12237         return lookup_type_die (type_main_variant (type));
12238       else
12239         /* Vectors have the debugging information in the type,
12240            not the main variant.  */
12241         return lookup_type_die (type);
12242     }
12243
12244   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12245      don't output a DW_TAG_typedef, since there isn't one in the
12246      user's program; just attach a DW_AT_name to the type.
12247      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12248      if the base type already has the same name.  */
12249   if (name
12250       && ((TREE_CODE (name) != TYPE_DECL
12251            && (qualified_type == TYPE_MAIN_VARIANT (type)
12252                || (!is_const_type && !is_volatile_type)))
12253           || (TREE_CODE (name) == TYPE_DECL
12254               && TREE_TYPE (name) == qualified_type
12255               && DECL_NAME (name))))
12256     {
12257       if (TREE_CODE (name) == TYPE_DECL)
12258         /* Could just call add_name_and_src_coords_attributes here,
12259            but since this is a builtin type it doesn't have any
12260            useful source coordinates anyway.  */
12261         name = DECL_NAME (name);
12262       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12263     }
12264
12265   if (qualified_type)
12266     equate_type_number_to_die (qualified_type, mod_type_die);
12267
12268   if (item_type)
12269     /* We must do this after the equate_type_number_to_die call, in case
12270        this is a recursive type.  This ensures that the modified_type_die
12271        recursion will terminate even if the type is recursive.  Recursive
12272        types are possible in Ada.  */
12273     sub_die = modified_type_die (item_type,
12274                                  TYPE_READONLY (item_type),
12275                                  TYPE_VOLATILE (item_type),
12276                                  context_die);
12277
12278   if (sub_die != NULL)
12279     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12280
12281   return mod_type_die;
12282 }
12283
12284 /* Generate DIEs for the generic parameters of T.
12285    T must be either a generic type or a generic function.
12286    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12287
12288 static void
12289 gen_generic_params_dies (tree t)
12290 {
12291   tree parms, args;
12292   int parms_num, i;
12293   dw_die_ref die = NULL;
12294
12295   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12296     return;
12297
12298   if (TYPE_P (t))
12299     die = lookup_type_die (t);
12300   else if (DECL_P (t))
12301     die = lookup_decl_die (t);
12302
12303   gcc_assert (die);
12304
12305   parms = lang_hooks.get_innermost_generic_parms (t);
12306   if (!parms)
12307     /* T has no generic parameter. It means T is neither a generic type
12308        or function. End of story.  */
12309     return;
12310
12311   parms_num = TREE_VEC_LENGTH (parms);
12312   args = lang_hooks.get_innermost_generic_args (t);
12313   for (i = 0; i < parms_num; i++)
12314     {
12315       tree parm, arg, arg_pack_elems;
12316
12317       parm = TREE_VEC_ELT (parms, i);
12318       arg = TREE_VEC_ELT (args, i);
12319       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12320       gcc_assert (parm && TREE_VALUE (parm) && arg);
12321
12322       if (parm && TREE_VALUE (parm) && arg)
12323         {
12324           /* If PARM represents a template parameter pack,
12325              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12326              by DW_TAG_template_*_parameter DIEs for the argument
12327              pack elements of ARG. Note that ARG would then be
12328              an argument pack.  */
12329           if (arg_pack_elems)
12330             template_parameter_pack_die (TREE_VALUE (parm),
12331                                          arg_pack_elems,
12332                                          die);
12333           else
12334             generic_parameter_die (TREE_VALUE (parm), arg,
12335                                    true /* Emit DW_AT_name */, die);
12336         }
12337     }
12338 }
12339
12340 /* Create and return a DIE for PARM which should be
12341    the representation of a generic type parameter.
12342    For instance, in the C++ front end, PARM would be a template parameter.
12343    ARG is the argument to PARM.
12344    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12345    name of the PARM.
12346    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12347    as a child node.  */
12348
12349 static dw_die_ref
12350 generic_parameter_die (tree parm, tree arg,
12351                        bool emit_name_p,
12352                        dw_die_ref parent_die)
12353 {
12354   dw_die_ref tmpl_die = NULL;
12355   const char *name = NULL;
12356
12357   if (!parm || !DECL_NAME (parm) || !arg)
12358     return NULL;
12359
12360   /* We support non-type generic parameters and arguments,
12361      type generic parameters and arguments, as well as
12362      generic generic parameters (a.k.a. template template parameters in C++)
12363      and arguments.  */
12364   if (TREE_CODE (parm) == PARM_DECL)
12365     /* PARM is a nontype generic parameter  */
12366     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12367   else if (TREE_CODE (parm) == TYPE_DECL)
12368     /* PARM is a type generic parameter.  */
12369     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12370   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12371     /* PARM is a generic generic parameter.
12372        Its DIE is a GNU extension. It shall have a
12373        DW_AT_name attribute to represent the name of the template template
12374        parameter, and a DW_AT_GNU_template_name attribute to represent the
12375        name of the template template argument.  */
12376     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12377                         parent_die, parm);
12378   else
12379     gcc_unreachable ();
12380
12381   if (tmpl_die)
12382     {
12383       tree tmpl_type;
12384
12385       /* If PARM is a generic parameter pack, it means we are
12386          emitting debug info for a template argument pack element.
12387          In other terms, ARG is a template argument pack element.
12388          In that case, we don't emit any DW_AT_name attribute for
12389          the die.  */
12390       if (emit_name_p)
12391         {
12392           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12393           gcc_assert (name);
12394           add_AT_string (tmpl_die, DW_AT_name, name);
12395         }
12396
12397       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12398         {
12399           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12400              TMPL_DIE should have a child DW_AT_type attribute that is set
12401              to the type of the argument to PARM, which is ARG.
12402              If PARM is a type generic parameter, TMPL_DIE should have a
12403              child DW_AT_type that is set to ARG.  */
12404           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12405           add_type_attribute (tmpl_die, tmpl_type, 0,
12406                               TREE_THIS_VOLATILE (tmpl_type),
12407                               parent_die);
12408         }
12409       else
12410         {
12411           /* So TMPL_DIE is a DIE representing a
12412              a generic generic template parameter, a.k.a template template
12413              parameter in C++ and arg is a template.  */
12414
12415           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12416              to the name of the argument.  */
12417           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12418           if (name)
12419             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12420         }
12421
12422       if (TREE_CODE (parm) == PARM_DECL)
12423         /* So PARM is a non-type generic parameter.
12424            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12425            attribute of TMPL_DIE which value represents the value
12426            of ARG.
12427            We must be careful here:
12428            The value of ARG might reference some function decls.
12429            We might currently be emitting debug info for a generic
12430            type and types are emitted before function decls, we don't
12431            know if the function decls referenced by ARG will actually be
12432            emitted after cgraph computations.
12433            So must defer the generation of the DW_AT_const_value to
12434            after cgraph is ready.  */
12435         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12436     }
12437
12438   return tmpl_die;
12439 }
12440
12441 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12442    PARM_PACK must be a template parameter pack. The returned DIE
12443    will be child DIE of PARENT_DIE.  */
12444
12445 static dw_die_ref
12446 template_parameter_pack_die (tree parm_pack,
12447                              tree parm_pack_args,
12448                              dw_die_ref parent_die)
12449 {
12450   dw_die_ref die;
12451   int j;
12452
12453   gcc_assert (parent_die && parm_pack);
12454
12455   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12456   add_name_and_src_coords_attributes (die, parm_pack);
12457   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12458     generic_parameter_die (parm_pack,
12459                            TREE_VEC_ELT (parm_pack_args, j),
12460                            false /* Don't emit DW_AT_name */,
12461                            die);
12462   return die;
12463 }
12464
12465 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12466    an enumerated type.  */
12467
12468 static inline int
12469 type_is_enum (const_tree type)
12470 {
12471   return TREE_CODE (type) == ENUMERAL_TYPE;
12472 }
12473
12474 /* Return the DBX register number described by a given RTL node.  */
12475
12476 static unsigned int
12477 dbx_reg_number (const_rtx rtl)
12478 {
12479   unsigned regno = REGNO (rtl);
12480
12481   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12482
12483 #ifdef LEAF_REG_REMAP
12484   if (current_function_uses_only_leaf_regs)
12485     {
12486       int leaf_reg = LEAF_REG_REMAP (regno);
12487       if (leaf_reg != -1)
12488         regno = (unsigned) leaf_reg;
12489     }
12490 #endif
12491
12492   return DBX_REGISTER_NUMBER (regno);
12493 }
12494
12495 /* Optionally add a DW_OP_piece term to a location description expression.
12496    DW_OP_piece is only added if the location description expression already
12497    doesn't end with DW_OP_piece.  */
12498
12499 static void
12500 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12501 {
12502   dw_loc_descr_ref loc;
12503
12504   if (*list_head != NULL)
12505     {
12506       /* Find the end of the chain.  */
12507       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12508         ;
12509
12510       if (loc->dw_loc_opc != DW_OP_piece)
12511         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12512     }
12513 }
12514
12515 /* Return a location descriptor that designates a machine register or
12516    zero if there is none.  */
12517
12518 static dw_loc_descr_ref
12519 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12520 {
12521   rtx regs;
12522
12523   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12524     return 0;
12525
12526   regs = targetm.dwarf_register_span (rtl);
12527
12528   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12529     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12530   else
12531     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12532 }
12533
12534 /* Return a location descriptor that designates a machine register for
12535    a given hard register number.  */
12536
12537 static dw_loc_descr_ref
12538 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12539 {
12540   dw_loc_descr_ref reg_loc_descr;
12541
12542   if (regno <= 31)
12543     reg_loc_descr
12544       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12545   else
12546     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12547
12548   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12549     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12550
12551   return reg_loc_descr;
12552 }
12553
12554 /* Given an RTL of a register, return a location descriptor that
12555    designates a value that spans more than one register.  */
12556
12557 static dw_loc_descr_ref
12558 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12559                              enum var_init_status initialized)
12560 {
12561   int nregs, size, i;
12562   unsigned reg;
12563   dw_loc_descr_ref loc_result = NULL;
12564
12565   reg = REGNO (rtl);
12566 #ifdef LEAF_REG_REMAP
12567   if (current_function_uses_only_leaf_regs)
12568     {
12569       int leaf_reg = LEAF_REG_REMAP (reg);
12570       if (leaf_reg != -1)
12571         reg = (unsigned) leaf_reg;
12572     }
12573 #endif
12574   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12575   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12576
12577   /* Simple, contiguous registers.  */
12578   if (regs == NULL_RTX)
12579     {
12580       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12581
12582       loc_result = NULL;
12583       while (nregs--)
12584         {
12585           dw_loc_descr_ref t;
12586
12587           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12588                                       VAR_INIT_STATUS_INITIALIZED);
12589           add_loc_descr (&loc_result, t);
12590           add_loc_descr_op_piece (&loc_result, size);
12591           ++reg;
12592         }
12593       return loc_result;
12594     }
12595
12596   /* Now onto stupid register sets in non contiguous locations.  */
12597
12598   gcc_assert (GET_CODE (regs) == PARALLEL);
12599
12600   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12601   loc_result = NULL;
12602
12603   for (i = 0; i < XVECLEN (regs, 0); ++i)
12604     {
12605       dw_loc_descr_ref t;
12606
12607       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12608                                   VAR_INIT_STATUS_INITIALIZED);
12609       add_loc_descr (&loc_result, t);
12610       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12611       add_loc_descr_op_piece (&loc_result, size);
12612     }
12613
12614   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12615     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12616   return loc_result;
12617 }
12618
12619 #endif /* DWARF2_DEBUGGING_INFO */
12620
12621 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12622
12623 /* Return a location descriptor that designates a constant.  */
12624
12625 static dw_loc_descr_ref
12626 int_loc_descriptor (HOST_WIDE_INT i)
12627 {
12628   enum dwarf_location_atom op;
12629
12630   /* Pick the smallest representation of a constant, rather than just
12631      defaulting to the LEB encoding.  */
12632   if (i >= 0)
12633     {
12634       if (i <= 31)
12635         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12636       else if (i <= 0xff)
12637         op = DW_OP_const1u;
12638       else if (i <= 0xffff)
12639         op = DW_OP_const2u;
12640       else if (HOST_BITS_PER_WIDE_INT == 32
12641                || i <= 0xffffffff)
12642         op = DW_OP_const4u;
12643       else
12644         op = DW_OP_constu;
12645     }
12646   else
12647     {
12648       if (i >= -0x80)
12649         op = DW_OP_const1s;
12650       else if (i >= -0x8000)
12651         op = DW_OP_const2s;
12652       else if (HOST_BITS_PER_WIDE_INT == 32
12653                || i >= -0x80000000)
12654         op = DW_OP_const4s;
12655       else
12656         op = DW_OP_consts;
12657     }
12658
12659   return new_loc_descr (op, i, 0);
12660 }
12661 #endif
12662
12663 #ifdef DWARF2_DEBUGGING_INFO
12664 /* Return loc description representing "address" of integer value.
12665    This can appear only as toplevel expression.  */
12666
12667 static dw_loc_descr_ref
12668 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12669 {
12670   int litsize;
12671   dw_loc_descr_ref loc_result = NULL;
12672
12673   if (!(dwarf_version >= 4 || !dwarf_strict))
12674     return NULL;
12675
12676   if (i >= 0)
12677     {
12678       if (i <= 31)
12679         litsize = 1;
12680       else if (i <= 0xff)
12681         litsize = 2;
12682       else if (i <= 0xffff)
12683         litsize = 3;
12684       else if (HOST_BITS_PER_WIDE_INT == 32
12685                || i <= 0xffffffff)
12686         litsize = 5;
12687       else
12688         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12689     }
12690   else
12691     {
12692       if (i >= -0x80)
12693         litsize = 2;
12694       else if (i >= -0x8000)
12695         litsize = 3;
12696       else if (HOST_BITS_PER_WIDE_INT == 32
12697                || i >= -0x80000000)
12698         litsize = 5;
12699       else
12700         litsize = 1 + size_of_sleb128 (i);
12701     }
12702   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12703      is more compact.  For DW_OP_stack_value we need:
12704      litsize + 1 (DW_OP_stack_value)
12705      and for DW_OP_implicit_value:
12706      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12707   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12708     {
12709       loc_result = int_loc_descriptor (i);
12710       add_loc_descr (&loc_result,
12711                      new_loc_descr (DW_OP_stack_value, 0, 0));
12712       return loc_result;
12713     }
12714
12715   loc_result = new_loc_descr (DW_OP_implicit_value,
12716                               size, 0);
12717   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12718   loc_result->dw_loc_oprnd2.v.val_int = i;
12719   return loc_result;
12720 }
12721
12722 /* Return a location descriptor that designates a base+offset location.  */
12723
12724 static dw_loc_descr_ref
12725 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12726                  enum var_init_status initialized)
12727 {
12728   unsigned int regno;
12729   dw_loc_descr_ref result;
12730   dw_fde_ref fde = current_fde ();
12731
12732   /* We only use "frame base" when we're sure we're talking about the
12733      post-prologue local stack frame.  We do this by *not* running
12734      register elimination until this point, and recognizing the special
12735      argument pointer and soft frame pointer rtx's.  */
12736   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12737     {
12738       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12739
12740       if (elim != reg)
12741         {
12742           if (GET_CODE (elim) == PLUS)
12743             {
12744               offset += INTVAL (XEXP (elim, 1));
12745               elim = XEXP (elim, 0);
12746             }
12747           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12748                        && (elim == hard_frame_pointer_rtx
12749                            || elim == stack_pointer_rtx))
12750                       || elim == (frame_pointer_needed
12751                                   ? hard_frame_pointer_rtx
12752                                   : stack_pointer_rtx));
12753
12754           /* If drap register is used to align stack, use frame
12755              pointer + offset to access stack variables.  If stack
12756              is aligned without drap, use stack pointer + offset to
12757              access stack variables.  */
12758           if (crtl->stack_realign_tried
12759               && reg == frame_pointer_rtx)
12760             {
12761               int base_reg
12762                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12763                                       ? HARD_FRAME_POINTER_REGNUM
12764                                       : STACK_POINTER_REGNUM);
12765               return new_reg_loc_descr (base_reg, offset);
12766             }
12767
12768           offset += frame_pointer_fb_offset;
12769           return new_loc_descr (DW_OP_fbreg, offset, 0);
12770         }
12771     }
12772   else if (!optimize
12773            && fde
12774            && (fde->drap_reg == REGNO (reg)
12775                || fde->vdrap_reg == REGNO (reg)))
12776     {
12777       /* Use cfa+offset to represent the location of arguments passed
12778          on the stack when drap is used to align stack.
12779          Only do this when not optimizing, for optimized code var-tracking
12780          is supposed to track where the arguments live and the register
12781          used as vdrap or drap in some spot might be used for something
12782          else in other part of the routine.  */
12783       return new_loc_descr (DW_OP_fbreg, offset, 0);
12784     }
12785
12786   regno = dbx_reg_number (reg);
12787   if (regno <= 31)
12788     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12789                             offset, 0);
12790   else
12791     result = new_loc_descr (DW_OP_bregx, regno, offset);
12792
12793   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12794     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12795
12796   return result;
12797 }
12798
12799 /* Return true if this RTL expression describes a base+offset calculation.  */
12800
12801 static inline int
12802 is_based_loc (const_rtx rtl)
12803 {
12804   return (GET_CODE (rtl) == PLUS
12805           && ((REG_P (XEXP (rtl, 0))
12806                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12807                && CONST_INT_P (XEXP (rtl, 1)))));
12808 }
12809
12810 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12811    failed.  */
12812
12813 static dw_loc_descr_ref
12814 tls_mem_loc_descriptor (rtx mem)
12815 {
12816   tree base;
12817   dw_loc_descr_ref loc_result;
12818
12819   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12820     return NULL;
12821
12822   base = get_base_address (MEM_EXPR (mem));
12823   if (base == NULL
12824       || TREE_CODE (base) != VAR_DECL
12825       || !DECL_THREAD_LOCAL_P (base))
12826     return NULL;
12827
12828   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12829   if (loc_result == NULL)
12830     return NULL;
12831
12832   if (INTVAL (MEM_OFFSET (mem)))
12833     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12834
12835   return loc_result;
12836 }
12837
12838 /* Output debug info about reason why we failed to expand expression as dwarf
12839    expression.  */
12840
12841 static void
12842 expansion_failed (tree expr, rtx rtl, char const *reason)
12843 {
12844   if (dump_file && (dump_flags & TDF_DETAILS))
12845     {
12846       fprintf (dump_file, "Failed to expand as dwarf: ");
12847       if (expr)
12848         print_generic_expr (dump_file, expr, dump_flags);
12849       if (rtl)
12850         {
12851           fprintf (dump_file, "\n");
12852           print_rtl (dump_file, rtl);
12853         }
12854       fprintf (dump_file, "\nReason: %s\n", reason);
12855     }
12856 }
12857
12858 /* Helper function for const_ok_for_output, called either directly
12859    or via for_each_rtx.  */
12860
12861 static int
12862 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12863 {
12864   rtx rtl = *rtlp;
12865
12866   if (GET_CODE (rtl) == UNSPEC)
12867     {
12868       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12869          we can't express it in the debug info.  */
12870 #ifdef ENABLE_CHECKING
12871       inform (current_function_decl
12872               ? DECL_SOURCE_LOCATION (current_function_decl)
12873               : UNKNOWN_LOCATION,
12874               "non-delegitimized UNSPEC %d found in variable location",
12875               XINT (rtl, 1));
12876 #endif
12877       expansion_failed (NULL_TREE, rtl,
12878                         "UNSPEC hasn't been delegitimized.\n");
12879       return 1;
12880     }
12881
12882   if (GET_CODE (rtl) != SYMBOL_REF)
12883     return 0;
12884
12885   if (CONSTANT_POOL_ADDRESS_P (rtl))
12886     {
12887       bool marked;
12888       get_pool_constant_mark (rtl, &marked);
12889       /* If all references to this pool constant were optimized away,
12890          it was not output and thus we can't represent it.  */
12891       if (!marked)
12892         {
12893           expansion_failed (NULL_TREE, rtl,
12894                             "Constant was removed from constant pool.\n");
12895           return 1;
12896         }
12897     }
12898
12899   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12900     return 1;
12901
12902   /* Avoid references to external symbols in debug info, on several targets
12903      the linker might even refuse to link when linking a shared library,
12904      and in many other cases the relocations for .debug_info/.debug_loc are
12905      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12906      to be defined within the same shared library or executable are fine.  */
12907   if (SYMBOL_REF_EXTERNAL_P (rtl))
12908     {
12909       tree decl = SYMBOL_REF_DECL (rtl);
12910
12911       if (decl == NULL || !targetm.binds_local_p (decl))
12912         {
12913           expansion_failed (NULL_TREE, rtl,
12914                             "Symbol not defined in current TU.\n");
12915           return 1;
12916         }
12917     }
12918
12919   return 0;
12920 }
12921
12922 /* Return true if constant RTL can be emitted in DW_OP_addr or
12923    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12924    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12925
12926 static bool
12927 const_ok_for_output (rtx rtl)
12928 {
12929   if (GET_CODE (rtl) == SYMBOL_REF)
12930     return const_ok_for_output_1 (&rtl, NULL) == 0;
12931
12932   if (GET_CODE (rtl) == CONST)
12933     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12934
12935   return true;
12936 }
12937
12938 /* The following routine converts the RTL for a variable or parameter
12939    (resident in memory) into an equivalent Dwarf representation of a
12940    mechanism for getting the address of that same variable onto the top of a
12941    hypothetical "address evaluation" stack.
12942
12943    When creating memory location descriptors, we are effectively transforming
12944    the RTL for a memory-resident object into its Dwarf postfix expression
12945    equivalent.  This routine recursively descends an RTL tree, turning
12946    it into Dwarf postfix code as it goes.
12947
12948    MODE is the mode of the memory reference, needed to handle some
12949    autoincrement addressing modes.
12950
12951    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12952    location list for RTL.
12953
12954    Return 0 if we can't represent the location.  */
12955
12956 static dw_loc_descr_ref
12957 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12958                     enum var_init_status initialized)
12959 {
12960   dw_loc_descr_ref mem_loc_result = NULL;
12961   enum dwarf_location_atom op;
12962   dw_loc_descr_ref op0, op1;
12963
12964   /* Note that for a dynamically sized array, the location we will generate a
12965      description of here will be the lowest numbered location which is
12966      actually within the array.  That's *not* necessarily the same as the
12967      zeroth element of the array.  */
12968
12969   rtl = targetm.delegitimize_address (rtl);
12970
12971   switch (GET_CODE (rtl))
12972     {
12973     case POST_INC:
12974     case POST_DEC:
12975     case POST_MODIFY:
12976       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12977
12978     case SUBREG:
12979       /* The case of a subreg may arise when we have a local (register)
12980          variable or a formal (register) parameter which doesn't quite fill
12981          up an entire register.  For now, just assume that it is
12982          legitimate to make the Dwarf info refer to the whole register which
12983          contains the given subreg.  */
12984       if (!subreg_lowpart_p (rtl))
12985         break;
12986       rtl = SUBREG_REG (rtl);
12987       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12988         break;
12989       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12990         break;
12991       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12992       break;
12993
12994     case REG:
12995       /* Whenever a register number forms a part of the description of the
12996          method for calculating the (dynamic) address of a memory resident
12997          object, DWARF rules require the register number be referred to as
12998          a "base register".  This distinction is not based in any way upon
12999          what category of register the hardware believes the given register
13000          belongs to.  This is strictly DWARF terminology we're dealing with
13001          here. Note that in cases where the location of a memory-resident
13002          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13003          OP_CONST (0)) the actual DWARF location descriptor that we generate
13004          may just be OP_BASEREG (basereg).  This may look deceptively like
13005          the object in question was allocated to a register (rather than in
13006          memory) so DWARF consumers need to be aware of the subtle
13007          distinction between OP_REG and OP_BASEREG.  */
13008       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13009         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13010       else if (stack_realign_drap
13011                && crtl->drap_reg
13012                && crtl->args.internal_arg_pointer == rtl
13013                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13014         {
13015           /* If RTL is internal_arg_pointer, which has been optimized
13016              out, use DRAP instead.  */
13017           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13018                                             VAR_INIT_STATUS_INITIALIZED);
13019         }
13020       break;
13021
13022     case SIGN_EXTEND:
13023     case ZERO_EXTEND:
13024       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13025                                 VAR_INIT_STATUS_INITIALIZED);
13026       if (op0 == 0)
13027         break;
13028       else
13029         {
13030           int shift = DWARF2_ADDR_SIZE
13031                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13032           shift *= BITS_PER_UNIT;
13033           if (GET_CODE (rtl) == SIGN_EXTEND)
13034             op = DW_OP_shra;
13035           else
13036             op = DW_OP_shr;
13037           mem_loc_result = op0;
13038           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13039           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13040           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13041           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13042         }
13043       break;
13044
13045     case MEM:
13046       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13047                                            VAR_INIT_STATUS_INITIALIZED);
13048       if (mem_loc_result == NULL)
13049         mem_loc_result = tls_mem_loc_descriptor (rtl);
13050       if (mem_loc_result != 0)
13051         {
13052           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13053             {
13054               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13055               return 0;
13056             }
13057           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13058             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13059           else
13060             add_loc_descr (&mem_loc_result,
13061                            new_loc_descr (DW_OP_deref_size,
13062                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13063         }
13064       else
13065         {
13066           rtx new_rtl = avoid_constant_pool_reference (rtl);
13067           if (new_rtl != rtl)
13068             return mem_loc_descriptor (new_rtl, mode, initialized);
13069         }
13070       break;
13071
13072     case LO_SUM:
13073          rtl = XEXP (rtl, 1);
13074
13075       /* ... fall through ...  */
13076
13077     case LABEL_REF:
13078       /* Some ports can transform a symbol ref into a label ref, because
13079          the symbol ref is too far away and has to be dumped into a constant
13080          pool.  */
13081     case CONST:
13082     case SYMBOL_REF:
13083       if (GET_CODE (rtl) == SYMBOL_REF
13084           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13085         {
13086           dw_loc_descr_ref temp;
13087
13088           /* If this is not defined, we have no way to emit the data.  */
13089           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13090             break;
13091
13092           temp = new_loc_descr (DW_OP_addr, 0, 0);
13093           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13094           temp->dw_loc_oprnd1.v.val_addr = rtl;
13095           temp->dtprel = true;
13096
13097           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13098           add_loc_descr (&mem_loc_result, temp);
13099
13100           break;
13101         }
13102
13103       if (!const_ok_for_output (rtl))
13104         break;
13105
13106     symref:
13107       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13108       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13109       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13110       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13111       break;
13112
13113     case CONCAT:
13114     case CONCATN:
13115     case VAR_LOCATION:
13116       expansion_failed (NULL_TREE, rtl,
13117                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13118       return 0;
13119
13120     case PRE_MODIFY:
13121       /* Extract the PLUS expression nested inside and fall into
13122          PLUS code below.  */
13123       rtl = XEXP (rtl, 1);
13124       goto plus;
13125
13126     case PRE_INC:
13127     case PRE_DEC:
13128       /* Turn these into a PLUS expression and fall into the PLUS code
13129          below.  */
13130       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13131                           GEN_INT (GET_CODE (rtl) == PRE_INC
13132                                    ? GET_MODE_UNIT_SIZE (mode)
13133                                    : -GET_MODE_UNIT_SIZE (mode)));
13134
13135       /* ... fall through ...  */
13136
13137     case PLUS:
13138     plus:
13139       if (is_based_loc (rtl))
13140         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13141                                           INTVAL (XEXP (rtl, 1)),
13142                                           VAR_INIT_STATUS_INITIALIZED);
13143       else
13144         {
13145           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13146                                                VAR_INIT_STATUS_INITIALIZED);
13147           if (mem_loc_result == 0)
13148             break;
13149
13150           if (CONST_INT_P (XEXP (rtl, 1)))
13151             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13152           else
13153             {
13154               dw_loc_descr_ref mem_loc_result2
13155                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13156                                       VAR_INIT_STATUS_INITIALIZED);
13157               if (mem_loc_result2 == 0)
13158                 break;
13159               add_loc_descr (&mem_loc_result, mem_loc_result2);
13160               add_loc_descr (&mem_loc_result,
13161                              new_loc_descr (DW_OP_plus, 0, 0));
13162             }
13163         }
13164       break;
13165
13166     /* If a pseudo-reg is optimized away, it is possible for it to
13167        be replaced with a MEM containing a multiply or shift.  */
13168     case MINUS:
13169       op = DW_OP_minus;
13170       goto do_binop;
13171
13172     case MULT:
13173       op = DW_OP_mul;
13174       goto do_binop;
13175
13176     case DIV:
13177       op = DW_OP_div;
13178       goto do_binop;
13179
13180     case UMOD:
13181       op = DW_OP_mod;
13182       goto do_binop;
13183
13184     case ASHIFT:
13185       op = DW_OP_shl;
13186       goto do_binop;
13187
13188     case ASHIFTRT:
13189       op = DW_OP_shra;
13190       goto do_binop;
13191
13192     case LSHIFTRT:
13193       op = DW_OP_shr;
13194       goto do_binop;
13195
13196     case AND:
13197       op = DW_OP_and;
13198       goto do_binop;
13199
13200     case IOR:
13201       op = DW_OP_or;
13202       goto do_binop;
13203
13204     case XOR:
13205       op = DW_OP_xor;
13206       goto do_binop;
13207
13208     do_binop:
13209       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13210                                 VAR_INIT_STATUS_INITIALIZED);
13211       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13212                                 VAR_INIT_STATUS_INITIALIZED);
13213
13214       if (op0 == 0 || op1 == 0)
13215         break;
13216
13217       mem_loc_result = op0;
13218       add_loc_descr (&mem_loc_result, op1);
13219       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13220       break;
13221
13222     case MOD:
13223       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13224                                 VAR_INIT_STATUS_INITIALIZED);
13225       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13226                                 VAR_INIT_STATUS_INITIALIZED);
13227
13228       if (op0 == 0 || op1 == 0)
13229         break;
13230
13231       mem_loc_result = op0;
13232       add_loc_descr (&mem_loc_result, op1);
13233       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13234       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13235       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13236       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13237       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13238       break;
13239
13240     case NOT:
13241       op = DW_OP_not;
13242       goto do_unop;
13243
13244     case ABS:
13245       op = DW_OP_abs;
13246       goto do_unop;
13247
13248     case NEG:
13249       op = DW_OP_neg;
13250       goto do_unop;
13251
13252     do_unop:
13253       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13254                                 VAR_INIT_STATUS_INITIALIZED);
13255
13256       if (op0 == 0)
13257         break;
13258
13259       mem_loc_result = op0;
13260       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13261       break;
13262
13263     case CONST_INT:
13264       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13265       break;
13266
13267     case EQ:
13268       op = DW_OP_eq;
13269       goto do_scompare;
13270
13271     case GE:
13272       op = DW_OP_ge;
13273       goto do_scompare;
13274
13275     case GT:
13276       op = DW_OP_gt;
13277       goto do_scompare;
13278
13279     case LE:
13280       op = DW_OP_le;
13281       goto do_scompare;
13282
13283     case LT:
13284       op = DW_OP_lt;
13285       goto do_scompare;
13286
13287     case NE:
13288       op = DW_OP_ne;
13289       goto do_scompare;
13290
13291     do_scompare:
13292       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13293           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13294         break;
13295       else
13296         {
13297           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13298
13299           if (op_mode == VOIDmode)
13300             op_mode = GET_MODE (XEXP (rtl, 1));
13301           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13302             break;
13303
13304           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13305                                     VAR_INIT_STATUS_INITIALIZED);
13306           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13307                                     VAR_INIT_STATUS_INITIALIZED);
13308
13309           if (op0 == 0 || op1 == 0)
13310             break;
13311
13312           if (op_mode != VOIDmode
13313               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13314             {
13315               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13316               shift *= BITS_PER_UNIT;
13317               /* For eq/ne, if the operands are known to be zero-extended,
13318                  there is no need to do the fancy shifting up.  */
13319               if (op == DW_OP_eq || op == DW_OP_ne)
13320                 {
13321                   dw_loc_descr_ref last0, last1;
13322                   for (last0 = op0;
13323                        last0->dw_loc_next != NULL;
13324                        last0 = last0->dw_loc_next)
13325                     ;
13326                   for (last1 = op1;
13327                        last1->dw_loc_next != NULL;
13328                        last1 = last1->dw_loc_next)
13329                     ;
13330                   /* deref_size zero extends, and for constants we can check
13331                      whether they are zero extended or not.  */
13332                   if (((last0->dw_loc_opc == DW_OP_deref_size
13333                         && last0->dw_loc_oprnd1.v.val_int
13334                            <= GET_MODE_SIZE (op_mode))
13335                        || (CONST_INT_P (XEXP (rtl, 0))
13336                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13337                                == (INTVAL (XEXP (rtl, 0))
13338                                    & GET_MODE_MASK (op_mode))))
13339                       && ((last1->dw_loc_opc == DW_OP_deref_size
13340                            && last1->dw_loc_oprnd1.v.val_int
13341                               <= GET_MODE_SIZE (op_mode))
13342                           || (CONST_INT_P (XEXP (rtl, 1))
13343                               && (unsigned HOST_WIDE_INT)
13344                                  INTVAL (XEXP (rtl, 1))
13345                                  == (INTVAL (XEXP (rtl, 1))
13346                                      & GET_MODE_MASK (op_mode)))))
13347                     goto do_compare;
13348                 }
13349               add_loc_descr (&op0, int_loc_descriptor (shift));
13350               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13351               if (CONST_INT_P (XEXP (rtl, 1)))
13352                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13353               else
13354                 {
13355                   add_loc_descr (&op1, int_loc_descriptor (shift));
13356                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13357                 }
13358             }
13359         }
13360
13361     do_compare:
13362       mem_loc_result = op0;
13363       add_loc_descr (&mem_loc_result, op1);
13364       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13365       if (STORE_FLAG_VALUE != 1)
13366         {
13367           add_loc_descr (&mem_loc_result,
13368                          int_loc_descriptor (STORE_FLAG_VALUE));
13369           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13370         }
13371       break;
13372
13373     case GEU:
13374       op = DW_OP_ge;
13375       goto do_ucompare;
13376
13377     case GTU:
13378       op = DW_OP_gt;
13379       goto do_ucompare;
13380
13381     case LEU:
13382       op = DW_OP_le;
13383       goto do_ucompare;
13384
13385     case LTU:
13386       op = DW_OP_lt;
13387       goto do_ucompare;
13388
13389     do_ucompare:
13390       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13391           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13392         break;
13393       else
13394         {
13395           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13396
13397           if (op_mode == VOIDmode)
13398             op_mode = GET_MODE (XEXP (rtl, 1));
13399           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13400             break;
13401
13402           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13403                                     VAR_INIT_STATUS_INITIALIZED);
13404           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13405                                     VAR_INIT_STATUS_INITIALIZED);
13406
13407           if (op0 == 0 || op1 == 0)
13408             break;
13409
13410           if (op_mode != VOIDmode
13411               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13412             {
13413               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13414               dw_loc_descr_ref last0, last1;
13415               for (last0 = op0;
13416                    last0->dw_loc_next != NULL;
13417                    last0 = last0->dw_loc_next)
13418                 ;
13419               for (last1 = op1;
13420                    last1->dw_loc_next != NULL;
13421                    last1 = last1->dw_loc_next)
13422                 ;
13423               if (CONST_INT_P (XEXP (rtl, 0)))
13424                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13425               /* deref_size zero extends, so no need to mask it again.  */
13426               else if (last0->dw_loc_opc != DW_OP_deref_size
13427                        || last0->dw_loc_oprnd1.v.val_int
13428                           > GET_MODE_SIZE (op_mode))
13429                 {
13430                   add_loc_descr (&op0, int_loc_descriptor (mask));
13431                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13432                 }
13433               if (CONST_INT_P (XEXP (rtl, 1)))
13434                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13435               /* deref_size zero extends, so no need to mask it again.  */
13436               else if (last1->dw_loc_opc != DW_OP_deref_size
13437                        || last1->dw_loc_oprnd1.v.val_int
13438                           > GET_MODE_SIZE (op_mode))
13439                 {
13440                   add_loc_descr (&op1, int_loc_descriptor (mask));
13441                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13442                 }
13443             }
13444           else
13445             {
13446               HOST_WIDE_INT bias = 1;
13447               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13448               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13449               if (CONST_INT_P (XEXP (rtl, 1)))
13450                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13451                                           + INTVAL (XEXP (rtl, 1)));
13452               else
13453                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13454                                                     bias, 0));
13455             }
13456         }
13457       goto do_compare;
13458
13459     case SMIN:
13460     case SMAX:
13461     case UMIN:
13462     case UMAX:
13463       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13464           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13465           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13466         break;
13467
13468       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13469                                 VAR_INIT_STATUS_INITIALIZED);
13470       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13471                                 VAR_INIT_STATUS_INITIALIZED);
13472
13473       if (op0 == 0 || op1 == 0)
13474         break;
13475
13476       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13477       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13478       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13479       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13480         {
13481           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13482             {
13483               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13484               add_loc_descr (&op0, int_loc_descriptor (mask));
13485               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13486               add_loc_descr (&op1, int_loc_descriptor (mask));
13487               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13488             }
13489           else
13490             {
13491               HOST_WIDE_INT bias = 1;
13492               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13493               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13494               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13495             }
13496         }
13497       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13498         {
13499           int shift = DWARF2_ADDR_SIZE
13500                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13501           shift *= BITS_PER_UNIT;
13502           add_loc_descr (&op0, int_loc_descriptor (shift));
13503           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13504           add_loc_descr (&op1, int_loc_descriptor (shift));
13505           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13506         }
13507
13508       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13509         op = DW_OP_lt;
13510       else
13511         op = DW_OP_gt;
13512       mem_loc_result = op0;
13513       add_loc_descr (&mem_loc_result, op1);
13514       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13515       {
13516         dw_loc_descr_ref bra_node, drop_node;
13517
13518         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13519         add_loc_descr (&mem_loc_result, bra_node);
13520         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13521         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13522         add_loc_descr (&mem_loc_result, drop_node);
13523         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13524         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13525       }
13526       break;
13527
13528     case ZERO_EXTRACT:
13529     case SIGN_EXTRACT:
13530       if (CONST_INT_P (XEXP (rtl, 1))
13531           && CONST_INT_P (XEXP (rtl, 2))
13532           && ((unsigned) INTVAL (XEXP (rtl, 1))
13533               + (unsigned) INTVAL (XEXP (rtl, 2))
13534               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13535           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13536           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13537         {
13538           int shift, size;
13539           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13540                                     VAR_INIT_STATUS_INITIALIZED);
13541           if (op0 == 0)
13542             break;
13543           if (GET_CODE (rtl) == SIGN_EXTRACT)
13544             op = DW_OP_shra;
13545           else
13546             op = DW_OP_shr;
13547           mem_loc_result = op0;
13548           size = INTVAL (XEXP (rtl, 1));
13549           shift = INTVAL (XEXP (rtl, 2));
13550           if (BITS_BIG_ENDIAN)
13551             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13552                     - shift - size;
13553           if (shift + size != (int) DWARF2_ADDR_SIZE)
13554             {
13555               add_loc_descr (&mem_loc_result,
13556                              int_loc_descriptor (DWARF2_ADDR_SIZE
13557                                                  - shift - size));
13558               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13559             }
13560           if (size != (int) DWARF2_ADDR_SIZE)
13561             {
13562               add_loc_descr (&mem_loc_result,
13563                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13564               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13565             }
13566         }
13567       break;
13568
13569     case COMPARE:
13570     case IF_THEN_ELSE:
13571     case ROTATE:
13572     case ROTATERT:
13573     case TRUNCATE:
13574       /* In theory, we could implement the above.  */
13575       /* DWARF cannot represent the unsigned compare operations
13576          natively.  */
13577     case SS_MULT:
13578     case US_MULT:
13579     case SS_DIV:
13580     case US_DIV:
13581     case SS_PLUS:
13582     case US_PLUS:
13583     case SS_MINUS:
13584     case US_MINUS:
13585     case SS_NEG:
13586     case US_NEG:
13587     case SS_ABS:
13588     case SS_ASHIFT:
13589     case US_ASHIFT:
13590     case SS_TRUNCATE:
13591     case US_TRUNCATE:
13592     case UDIV:
13593     case UNORDERED:
13594     case ORDERED:
13595     case UNEQ:
13596     case UNGE:
13597     case UNGT:
13598     case UNLE:
13599     case UNLT:
13600     case LTGT:
13601     case FLOAT_EXTEND:
13602     case FLOAT_TRUNCATE:
13603     case FLOAT:
13604     case UNSIGNED_FLOAT:
13605     case FIX:
13606     case UNSIGNED_FIX:
13607     case FRACT_CONVERT:
13608     case UNSIGNED_FRACT_CONVERT:
13609     case SAT_FRACT:
13610     case UNSIGNED_SAT_FRACT:
13611     case SQRT:
13612     case BSWAP:
13613     case FFS:
13614     case CLZ:
13615     case CTZ:
13616     case POPCOUNT:
13617     case PARITY:
13618     case ASM_OPERANDS:
13619     case VEC_MERGE:
13620     case VEC_SELECT:
13621     case VEC_CONCAT:
13622     case VEC_DUPLICATE:
13623     case UNSPEC:
13624     case HIGH:
13625       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13626          can't express it in the debug info.  This can happen e.g. with some
13627          TLS UNSPECs.  */
13628       break;
13629
13630     case CONST_STRING:
13631       resolve_one_addr (&rtl, NULL);
13632       goto symref;
13633
13634     default:
13635 #ifdef ENABLE_CHECKING
13636       print_rtl (stderr, rtl);
13637       gcc_unreachable ();
13638 #else
13639       break;
13640 #endif
13641     }
13642
13643   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13644     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13645
13646   return mem_loc_result;
13647 }
13648
13649 /* Return a descriptor that describes the concatenation of two locations.
13650    This is typically a complex variable.  */
13651
13652 static dw_loc_descr_ref
13653 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13654 {
13655   dw_loc_descr_ref cc_loc_result = NULL;
13656   dw_loc_descr_ref x0_ref
13657     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13658   dw_loc_descr_ref x1_ref
13659     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13660
13661   if (x0_ref == 0 || x1_ref == 0)
13662     return 0;
13663
13664   cc_loc_result = x0_ref;
13665   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13666
13667   add_loc_descr (&cc_loc_result, x1_ref);
13668   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13669
13670   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13671     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13672
13673   return cc_loc_result;
13674 }
13675
13676 /* Return a descriptor that describes the concatenation of N
13677    locations.  */
13678
13679 static dw_loc_descr_ref
13680 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13681 {
13682   unsigned int i;
13683   dw_loc_descr_ref cc_loc_result = NULL;
13684   unsigned int n = XVECLEN (concatn, 0);
13685
13686   for (i = 0; i < n; ++i)
13687     {
13688       dw_loc_descr_ref ref;
13689       rtx x = XVECEXP (concatn, 0, i);
13690
13691       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13692       if (ref == NULL)
13693         return NULL;
13694
13695       add_loc_descr (&cc_loc_result, ref);
13696       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13697     }
13698
13699   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13700     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13701
13702   return cc_loc_result;
13703 }
13704
13705 /* Output a proper Dwarf location descriptor for a variable or parameter
13706    which is either allocated in a register or in a memory location.  For a
13707    register, we just generate an OP_REG and the register number.  For a
13708    memory location we provide a Dwarf postfix expression describing how to
13709    generate the (dynamic) address of the object onto the address stack.
13710
13711    MODE is mode of the decl if this loc_descriptor is going to be used in
13712    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13713    allowed, VOIDmode otherwise.
13714
13715    If we don't know how to describe it, return 0.  */
13716
13717 static dw_loc_descr_ref
13718 loc_descriptor (rtx rtl, enum machine_mode mode,
13719                 enum var_init_status initialized)
13720 {
13721   dw_loc_descr_ref loc_result = NULL;
13722
13723   switch (GET_CODE (rtl))
13724     {
13725     case SUBREG:
13726       /* The case of a subreg may arise when we have a local (register)
13727          variable or a formal (register) parameter which doesn't quite fill
13728          up an entire register.  For now, just assume that it is
13729          legitimate to make the Dwarf info refer to the whole register which
13730          contains the given subreg.  */
13731       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13732       break;
13733
13734     case REG:
13735       loc_result = reg_loc_descriptor (rtl, initialized);
13736       break;
13737
13738     case SIGN_EXTEND:
13739     case ZERO_EXTEND:
13740       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13741       break;
13742
13743     case MEM:
13744       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13745                                        initialized);
13746       if (loc_result == NULL)
13747         loc_result = tls_mem_loc_descriptor (rtl);
13748       if (loc_result == NULL)
13749         {
13750           rtx new_rtl = avoid_constant_pool_reference (rtl);
13751           if (new_rtl != rtl)
13752             loc_result = loc_descriptor (new_rtl, mode, initialized);
13753         }
13754       break;
13755
13756     case CONCAT:
13757       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13758                                           initialized);
13759       break;
13760
13761     case CONCATN:
13762       loc_result = concatn_loc_descriptor (rtl, initialized);
13763       break;
13764
13765     case VAR_LOCATION:
13766       /* Single part.  */
13767       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13768         {
13769           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13770           if (GET_CODE (loc) == EXPR_LIST)
13771             loc = XEXP (loc, 0);
13772           loc_result = loc_descriptor (loc, mode, initialized);
13773           break;
13774         }
13775
13776       rtl = XEXP (rtl, 1);
13777       /* FALLTHRU */
13778
13779     case PARALLEL:
13780       {
13781         rtvec par_elems = XVEC (rtl, 0);
13782         int num_elem = GET_NUM_ELEM (par_elems);
13783         enum machine_mode mode;
13784         int i;
13785
13786         /* Create the first one, so we have something to add to.  */
13787         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13788                                      VOIDmode, initialized);
13789         if (loc_result == NULL)
13790           return NULL;
13791         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13792         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13793         for (i = 1; i < num_elem; i++)
13794           {
13795             dw_loc_descr_ref temp;
13796
13797             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13798                                    VOIDmode, initialized);
13799             if (temp == NULL)
13800               return NULL;
13801             add_loc_descr (&loc_result, temp);
13802             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13803             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13804           }
13805       }
13806       break;
13807
13808     case CONST_INT:
13809       if (mode != VOIDmode && mode != BLKmode)
13810         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13811                                                     INTVAL (rtl));
13812       break;
13813
13814     case CONST_DOUBLE:
13815       if (mode == VOIDmode)
13816         mode = GET_MODE (rtl);
13817
13818       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13819         {
13820           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13821
13822           /* Note that a CONST_DOUBLE rtx could represent either an integer
13823              or a floating-point constant.  A CONST_DOUBLE is used whenever
13824              the constant requires more than one word in order to be
13825              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13826           loc_result = new_loc_descr (DW_OP_implicit_value,
13827                                       GET_MODE_SIZE (mode), 0);
13828           if (SCALAR_FLOAT_MODE_P (mode))
13829             {
13830               unsigned int length = GET_MODE_SIZE (mode);
13831               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13832
13833               insert_float (rtl, array);
13834               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13835               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13836               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13837               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13838             }
13839           else
13840             {
13841               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13842               loc_result->dw_loc_oprnd2.v.val_double.high
13843                 = CONST_DOUBLE_HIGH (rtl);
13844               loc_result->dw_loc_oprnd2.v.val_double.low
13845                 = CONST_DOUBLE_LOW (rtl);
13846             }
13847         }
13848       break;
13849
13850     case CONST_VECTOR:
13851       if (mode == VOIDmode)
13852         mode = GET_MODE (rtl);
13853
13854       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13855         {
13856           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13857           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13858           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13859           unsigned int i;
13860           unsigned char *p;
13861
13862           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13863           switch (GET_MODE_CLASS (mode))
13864             {
13865             case MODE_VECTOR_INT:
13866               for (i = 0, p = array; i < length; i++, p += elt_size)
13867                 {
13868                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13869                   HOST_WIDE_INT lo, hi;
13870
13871                   switch (GET_CODE (elt))
13872                     {
13873                     case CONST_INT:
13874                       lo = INTVAL (elt);
13875                       hi = -(lo < 0);
13876                       break;
13877
13878                     case CONST_DOUBLE:
13879                       lo = CONST_DOUBLE_LOW (elt);
13880                       hi = CONST_DOUBLE_HIGH (elt);
13881                       break;
13882
13883                     default:
13884                       gcc_unreachable ();
13885                     }
13886
13887                   if (elt_size <= sizeof (HOST_WIDE_INT))
13888                     insert_int (lo, elt_size, p);
13889                   else
13890                     {
13891                       unsigned char *p0 = p;
13892                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13893
13894                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13895                       if (WORDS_BIG_ENDIAN)
13896                         {
13897                           p0 = p1;
13898                           p1 = p;
13899                         }
13900                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13901                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13902                     }
13903                 }
13904               break;
13905
13906             case MODE_VECTOR_FLOAT:
13907               for (i = 0, p = array; i < length; i++, p += elt_size)
13908                 {
13909                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13910                   insert_float (elt, p);
13911                 }
13912               break;
13913
13914             default:
13915               gcc_unreachable ();
13916             }
13917
13918           loc_result = new_loc_descr (DW_OP_implicit_value,
13919                                       length * elt_size, 0);
13920           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13921           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13922           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13923           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13924         }
13925       break;
13926
13927     case CONST:
13928       if (mode == VOIDmode
13929           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13930           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13931           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13932         {
13933           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13934           break;
13935         }
13936       /* FALLTHROUGH */
13937     case SYMBOL_REF:
13938       if (!const_ok_for_output (rtl))
13939         break;
13940     case LABEL_REF:
13941       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13942           && (dwarf_version >= 4 || !dwarf_strict))
13943         {
13944           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13945           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13946           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13947           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13948           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13949         }
13950       break;
13951
13952     default:
13953       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13954           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13955           && (dwarf_version >= 4 || !dwarf_strict))
13956         {
13957           /* Value expression.  */
13958           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13959           if (loc_result)
13960             add_loc_descr (&loc_result,
13961                            new_loc_descr (DW_OP_stack_value, 0, 0));
13962         }
13963       break;
13964     }
13965
13966   return loc_result;
13967 }
13968
13969 /* We need to figure out what section we should use as the base for the
13970    address ranges where a given location is valid.
13971    1. If this particular DECL has a section associated with it, use that.
13972    2. If this function has a section associated with it, use that.
13973    3. Otherwise, use the text section.
13974    XXX: If you split a variable across multiple sections, we won't notice.  */
13975
13976 static const char *
13977 secname_for_decl (const_tree decl)
13978 {
13979   const char *secname;
13980
13981   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13982     {
13983       tree sectree = DECL_SECTION_NAME (decl);
13984       secname = TREE_STRING_POINTER (sectree);
13985     }
13986   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13987     {
13988       tree sectree = DECL_SECTION_NAME (current_function_decl);
13989       secname = TREE_STRING_POINTER (sectree);
13990     }
13991   else if (cfun && in_cold_section_p)
13992     secname = crtl->subsections.cold_section_label;
13993   else
13994     secname = text_section_label;
13995
13996   return secname;
13997 }
13998
13999 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14000
14001 static bool
14002 decl_by_reference_p (tree decl)
14003 {
14004   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14005            || TREE_CODE (decl) == VAR_DECL)
14006           && DECL_BY_REFERENCE (decl));
14007 }
14008
14009 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14010    for VARLOC.  */
14011
14012 static dw_loc_descr_ref
14013 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14014                enum var_init_status initialized)
14015 {
14016   int have_address = 0;
14017   dw_loc_descr_ref descr;
14018   enum machine_mode mode;
14019
14020   if (want_address != 2)
14021     {
14022       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14023       /* Single part.  */
14024       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14025         {
14026           varloc = PAT_VAR_LOCATION_LOC (varloc);
14027           if (GET_CODE (varloc) == EXPR_LIST)
14028             varloc = XEXP (varloc, 0);
14029           mode = GET_MODE (varloc);
14030           if (MEM_P (varloc))
14031             {
14032               rtx addr = XEXP (varloc, 0);
14033               descr = mem_loc_descriptor (addr, mode, initialized);
14034               if (descr)
14035                 have_address = 1;
14036               else
14037                 {
14038                   rtx x = avoid_constant_pool_reference (varloc);
14039                   if (x != varloc)
14040                     descr = mem_loc_descriptor (x, mode, initialized);
14041                 }
14042             }
14043           else
14044             descr = mem_loc_descriptor (varloc, mode, initialized);
14045         }
14046       else
14047         return 0;
14048     }
14049   else
14050     {
14051       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
14052       have_address = 1;
14053     }
14054
14055   if (!descr)
14056     return 0;
14057
14058   if (want_address == 2 && !have_address
14059       && (dwarf_version >= 4 || !dwarf_strict))
14060     {
14061       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14062         {
14063           expansion_failed (loc, NULL_RTX,
14064                             "DWARF address size mismatch");
14065           return 0;
14066         }
14067       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14068       have_address = 1;
14069     }
14070   /* Show if we can't fill the request for an address.  */
14071   if (want_address && !have_address)
14072     {
14073       expansion_failed (loc, NULL_RTX,
14074                         "Want address and only have value");
14075       return 0;
14076     }
14077
14078   /* If we've got an address and don't want one, dereference.  */
14079   if (!want_address && have_address)
14080     {
14081       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14082       enum dwarf_location_atom op;
14083
14084       if (size > DWARF2_ADDR_SIZE || size == -1)
14085         {
14086           expansion_failed (loc, NULL_RTX,
14087                             "DWARF address size mismatch");
14088           return 0;
14089         }
14090       else if (size == DWARF2_ADDR_SIZE)
14091         op = DW_OP_deref;
14092       else
14093         op = DW_OP_deref_size;
14094
14095       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14096     }
14097
14098   return descr;
14099 }
14100
14101 /* Return the dwarf representation of the location list LOC_LIST of
14102    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14103    function.  */
14104
14105 static dw_loc_list_ref
14106 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14107 {
14108   const char *endname, *secname;
14109   rtx varloc;
14110   enum var_init_status initialized;
14111   struct var_loc_node *node;
14112   dw_loc_descr_ref descr;
14113   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14114   dw_loc_list_ref list = NULL;
14115   dw_loc_list_ref *listp = &list;
14116
14117   /* Now that we know what section we are using for a base,
14118      actually construct the list of locations.
14119      The first location information is what is passed to the
14120      function that creates the location list, and the remaining
14121      locations just get added on to that list.
14122      Note that we only know the start address for a location
14123      (IE location changes), so to build the range, we use
14124      the range [current location start, next location start].
14125      This means we have to special case the last node, and generate
14126      a range of [last location start, end of function label].  */
14127
14128   secname = secname_for_decl (decl);
14129
14130   for (node = loc_list->first; node->next; node = node->next)
14131     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14132       {
14133         /* The variable has a location between NODE->LABEL and
14134            NODE->NEXT->LABEL.  */
14135         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14136         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14137         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14138         if (descr)
14139           {
14140             *listp = new_loc_list (descr, node->label, node->next->label,
14141                                    secname);
14142             listp = &(*listp)->dw_loc_next;
14143           }
14144       }
14145
14146   /* If the variable has a location at the last label
14147      it keeps its location until the end of function.  */
14148   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14149     {
14150       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14151       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14152       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14153       if (descr)
14154         {
14155           if (!current_function_decl)
14156             endname = text_end_label;
14157           else
14158             {
14159               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14160                                            current_function_funcdef_no);
14161               endname = ggc_strdup (label_id);
14162             }
14163
14164           *listp = new_loc_list (descr, node->label, endname, secname);
14165           listp = &(*listp)->dw_loc_next;
14166         }
14167     }
14168
14169   /* Try to avoid the overhead of a location list emitting a location
14170      expression instead, but only if we didn't have more than one
14171      location entry in the first place.  If some entries were not
14172      representable, we don't want to pretend a single entry that was
14173      applies to the entire scope in which the variable is
14174      available.  */
14175   if (list && loc_list->first->next)
14176     gen_llsym (list);
14177
14178   return list;
14179 }
14180
14181 /* Return if the loc_list has only single element and thus can be represented
14182    as location description.   */
14183
14184 static bool
14185 single_element_loc_list_p (dw_loc_list_ref list)
14186 {
14187   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14188   return !list->ll_symbol;
14189 }
14190
14191 /* To each location in list LIST add loc descr REF.  */
14192
14193 static void
14194 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14195 {
14196   dw_loc_descr_ref copy;
14197   add_loc_descr (&list->expr, ref);
14198   list = list->dw_loc_next;
14199   while (list)
14200     {
14201       copy = GGC_CNEW (dw_loc_descr_node);
14202       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14203       add_loc_descr (&list->expr, copy);
14204       while (copy->dw_loc_next)
14205         {
14206           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14207           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14208           copy->dw_loc_next = new_copy;
14209           copy = new_copy;
14210         }
14211       list = list->dw_loc_next;
14212     }
14213 }
14214
14215 /* Given two lists RET and LIST
14216    produce location list that is result of adding expression in LIST
14217    to expression in RET on each possition in program.
14218    Might be destructive on both RET and LIST.
14219
14220    TODO: We handle only simple cases of RET or LIST having at most one
14221    element. General case would inolve sorting the lists in program order
14222    and merging them that will need some additional work.
14223    Adding that will improve quality of debug info especially for SRA-ed
14224    structures.  */
14225
14226 static void
14227 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14228 {
14229   if (!list)
14230     return;
14231   if (!*ret)
14232     {
14233       *ret = list;
14234       return;
14235     }
14236   if (!list->dw_loc_next)
14237     {
14238       add_loc_descr_to_each (*ret, list->expr);
14239       return;
14240     }
14241   if (!(*ret)->dw_loc_next)
14242     {
14243       add_loc_descr_to_each (list, (*ret)->expr);
14244       *ret = list;
14245       return;
14246     }
14247   expansion_failed (NULL_TREE, NULL_RTX,
14248                     "Don't know how to merge two non-trivial"
14249                     " location lists.\n");
14250   *ret = NULL;
14251   return;
14252 }
14253
14254 /* LOC is constant expression.  Try a luck, look it up in constant
14255    pool and return its loc_descr of its address.  */
14256
14257 static dw_loc_descr_ref
14258 cst_pool_loc_descr (tree loc)
14259 {
14260   /* Get an RTL for this, if something has been emitted.  */
14261   rtx rtl = lookup_constant_def (loc);
14262   enum machine_mode mode;
14263
14264   if (!rtl || !MEM_P (rtl))
14265     {
14266       gcc_assert (!rtl);
14267       return 0;
14268     }
14269   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14270
14271   /* TODO: We might get more coverage if we was actually delaying expansion
14272      of all expressions till end of compilation when constant pools are fully
14273      populated.  */
14274   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14275     {
14276       expansion_failed (loc, NULL_RTX,
14277                         "CST value in contant pool but not marked.");
14278       return 0;
14279     }
14280   mode = GET_MODE (rtl);
14281   rtl = XEXP (rtl, 0);
14282   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14283 }
14284
14285 /* Return dw_loc_list representing address of addr_expr LOC
14286    by looking for innder INDIRECT_REF expression and turing it
14287    into simple arithmetics.  */
14288
14289 static dw_loc_list_ref
14290 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14291 {
14292   tree obj, offset;
14293   HOST_WIDE_INT bitsize, bitpos, bytepos;
14294   enum machine_mode mode;
14295   int volatilep;
14296   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14297   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14298
14299   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14300                              &bitsize, &bitpos, &offset, &mode,
14301                              &unsignedp, &volatilep, false);
14302   STRIP_NOPS (obj);
14303   if (bitpos % BITS_PER_UNIT)
14304     {
14305       expansion_failed (loc, NULL_RTX, "bitfield access");
14306       return 0;
14307     }
14308   if (!INDIRECT_REF_P (obj))
14309     {
14310       expansion_failed (obj,
14311                         NULL_RTX, "no indirect ref in inner refrence");
14312       return 0;
14313     }
14314   if (!offset && !bitpos)
14315     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14316   else if (toplev
14317            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14318            && (dwarf_version >= 4 || !dwarf_strict))
14319     {
14320       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14321       if (!list_ret)
14322         return 0;
14323       if (offset)
14324         {
14325           /* Variable offset.  */
14326           list_ret1 = loc_list_from_tree (offset, 0);
14327           if (list_ret1 == 0)
14328             return 0;
14329           add_loc_list (&list_ret, list_ret1);
14330           if (!list_ret)
14331             return 0;
14332           add_loc_descr_to_each (list_ret,
14333                                  new_loc_descr (DW_OP_plus, 0, 0));
14334         }
14335       bytepos = bitpos / BITS_PER_UNIT;
14336       if (bytepos > 0)
14337         add_loc_descr_to_each (list_ret,
14338                                new_loc_descr (DW_OP_plus_uconst,
14339                                               bytepos, 0));
14340       else if (bytepos < 0)
14341         loc_list_plus_const (list_ret, bytepos);
14342       add_loc_descr_to_each (list_ret,
14343                              new_loc_descr (DW_OP_stack_value, 0, 0));
14344     }
14345   return list_ret;
14346 }
14347
14348
14349 /* Generate Dwarf location list representing LOC.
14350    If WANT_ADDRESS is false, expression computing LOC will be computed
14351    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14352    if WANT_ADDRESS is 2, expression computing address useable in location
14353      will be returned (i.e. DW_OP_reg can be used
14354      to refer to register values).  */
14355
14356 static dw_loc_list_ref
14357 loc_list_from_tree (tree loc, int want_address)
14358 {
14359   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14360   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14361   int have_address = 0;
14362   enum dwarf_location_atom op;
14363
14364   /* ??? Most of the time we do not take proper care for sign/zero
14365      extending the values properly.  Hopefully this won't be a real
14366      problem...  */
14367
14368   switch (TREE_CODE (loc))
14369     {
14370     case ERROR_MARK:
14371       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14372       return 0;
14373
14374     case PLACEHOLDER_EXPR:
14375       /* This case involves extracting fields from an object to determine the
14376          position of other fields.  We don't try to encode this here.  The
14377          only user of this is Ada, which encodes the needed information using
14378          the names of types.  */
14379       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14380       return 0;
14381
14382     case CALL_EXPR:
14383       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14384       /* There are no opcodes for these operations.  */
14385       return 0;
14386
14387     case PREINCREMENT_EXPR:
14388     case PREDECREMENT_EXPR:
14389     case POSTINCREMENT_EXPR:
14390     case POSTDECREMENT_EXPR:
14391       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14392       /* There are no opcodes for these operations.  */
14393       return 0;
14394
14395     case ADDR_EXPR:
14396       /* If we already want an address, see if there is INDIRECT_REF inside
14397          e.g. for &this->field.  */
14398       if (want_address)
14399         {
14400           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14401                        (loc, want_address == 2);
14402           if (list_ret)
14403             have_address = 1;
14404           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14405                    && (ret = cst_pool_loc_descr (loc)))
14406             have_address = 1;
14407         }
14408         /* Otherwise, process the argument and look for the address.  */
14409       if (!list_ret && !ret)
14410         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14411       else
14412         {
14413           if (want_address)
14414             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14415           return NULL;
14416         }
14417       break;
14418
14419     case VAR_DECL:
14420       if (DECL_THREAD_LOCAL_P (loc))
14421         {
14422           rtx rtl;
14423           enum dwarf_location_atom first_op;
14424           enum dwarf_location_atom second_op;
14425           bool dtprel = false;
14426
14427           if (targetm.have_tls)
14428             {
14429               /* If this is not defined, we have no way to emit the
14430                  data.  */
14431               if (!targetm.asm_out.output_dwarf_dtprel)
14432                 return 0;
14433
14434                /* The way DW_OP_GNU_push_tls_address is specified, we
14435                   can only look up addresses of objects in the current
14436                   module.  */
14437               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14438                 return 0;
14439               first_op = DW_OP_addr;
14440               dtprel = true;
14441               second_op = DW_OP_GNU_push_tls_address;
14442             }
14443           else
14444             {
14445               if (!targetm.emutls.debug_form_tls_address
14446                   || !(dwarf_version >= 3 || !dwarf_strict))
14447                 return 0;
14448               loc = emutls_decl (loc);
14449               first_op = DW_OP_addr;
14450               second_op = DW_OP_form_tls_address;
14451             }
14452
14453           rtl = rtl_for_decl_location (loc);
14454           if (rtl == NULL_RTX)
14455             return 0;
14456
14457           if (!MEM_P (rtl))
14458             return 0;
14459           rtl = XEXP (rtl, 0);
14460           if (! CONSTANT_P (rtl))
14461             return 0;
14462
14463           ret = new_loc_descr (first_op, 0, 0);
14464           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14465           ret->dw_loc_oprnd1.v.val_addr = rtl;
14466           ret->dtprel = dtprel;
14467
14468           ret1 = new_loc_descr (second_op, 0, 0);
14469           add_loc_descr (&ret, ret1);
14470
14471           have_address = 1;
14472           break;
14473         }
14474       /* FALLTHRU */
14475
14476     case PARM_DECL:
14477       if (DECL_HAS_VALUE_EXPR_P (loc))
14478         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14479                                    want_address);
14480       /* FALLTHRU */
14481
14482     case RESULT_DECL:
14483     case FUNCTION_DECL:
14484       {
14485         rtx rtl;
14486         var_loc_list *loc_list = lookup_decl_loc (loc);
14487
14488         if (loc_list && loc_list->first)
14489           {
14490             list_ret = dw_loc_list (loc_list, loc, want_address);
14491             have_address = want_address != 0;
14492             break;
14493           }
14494         rtl = rtl_for_decl_location (loc);
14495         if (rtl == NULL_RTX)
14496           {
14497             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14498             return 0;
14499           }
14500         else if (CONST_INT_P (rtl))
14501           {
14502             HOST_WIDE_INT val = INTVAL (rtl);
14503             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14504               val &= GET_MODE_MASK (DECL_MODE (loc));
14505             ret = int_loc_descriptor (val);
14506           }
14507         else if (GET_CODE (rtl) == CONST_STRING)
14508           {
14509             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14510             return 0;
14511           }
14512         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14513           {
14514             ret = new_loc_descr (DW_OP_addr, 0, 0);
14515             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14516             ret->dw_loc_oprnd1.v.val_addr = rtl;
14517           }
14518         else
14519           {
14520             enum machine_mode mode;
14521
14522             /* Certain constructs can only be represented at top-level.  */
14523             if (want_address == 2)
14524               {
14525                 ret = loc_descriptor (rtl, VOIDmode,
14526                                       VAR_INIT_STATUS_INITIALIZED);
14527                 have_address = 1;
14528               }
14529             else
14530               {
14531                 mode = GET_MODE (rtl);
14532                 if (MEM_P (rtl))
14533                   {
14534                     rtl = XEXP (rtl, 0);
14535                     have_address = 1;
14536                   }
14537                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14538               }
14539             if (!ret)
14540               expansion_failed (loc, rtl,
14541                                 "failed to produce loc descriptor for rtl");
14542           }
14543       }
14544       break;
14545
14546     case INDIRECT_REF:
14547     case ALIGN_INDIRECT_REF:
14548     case MISALIGNED_INDIRECT_REF:
14549       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14550       have_address = 1;
14551       break;
14552
14553     case COMPOUND_EXPR:
14554       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14555
14556     CASE_CONVERT:
14557     case VIEW_CONVERT_EXPR:
14558     case SAVE_EXPR:
14559     case MODIFY_EXPR:
14560       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14561
14562     case COMPONENT_REF:
14563     case BIT_FIELD_REF:
14564     case ARRAY_REF:
14565     case ARRAY_RANGE_REF:
14566     case REALPART_EXPR:
14567     case IMAGPART_EXPR:
14568       {
14569         tree obj, offset;
14570         HOST_WIDE_INT bitsize, bitpos, bytepos;
14571         enum machine_mode mode;
14572         int volatilep;
14573         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14574
14575         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14576                                    &unsignedp, &volatilep, false);
14577
14578         gcc_assert (obj != loc);
14579
14580         list_ret = loc_list_from_tree (obj,
14581                                        want_address == 2
14582                                        && !bitpos && !offset ? 2 : 1);
14583         /* TODO: We can extract value of the small expression via shifting even
14584            for nonzero bitpos.  */
14585         if (list_ret == 0)
14586           return 0;
14587         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14588           {
14589             expansion_failed (loc, NULL_RTX,
14590                               "bitfield access");
14591             return 0;
14592           }
14593
14594         if (offset != NULL_TREE)
14595           {
14596             /* Variable offset.  */
14597             list_ret1 = loc_list_from_tree (offset, 0);
14598             if (list_ret1 == 0)
14599               return 0;
14600             add_loc_list (&list_ret, list_ret1);
14601             if (!list_ret)
14602               return 0;
14603             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14604           }
14605
14606         bytepos = bitpos / BITS_PER_UNIT;
14607         if (bytepos > 0)
14608           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14609         else if (bytepos < 0)
14610           loc_list_plus_const (list_ret, bytepos);
14611
14612         have_address = 1;
14613         break;
14614       }
14615
14616     case INTEGER_CST:
14617       if ((want_address || !host_integerp (loc, 0))
14618           && (ret = cst_pool_loc_descr (loc)))
14619         have_address = 1;
14620       else if (want_address == 2
14621                && host_integerp (loc, 0)
14622                && (ret = address_of_int_loc_descriptor
14623                            (int_size_in_bytes (TREE_TYPE (loc)),
14624                             tree_low_cst (loc, 0))))
14625         have_address = 1;
14626       else if (host_integerp (loc, 0))
14627         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14628       else
14629         {
14630           expansion_failed (loc, NULL_RTX,
14631                             "Integer operand is not host integer");
14632           return 0;
14633         }
14634       break;
14635
14636     case CONSTRUCTOR:
14637     case REAL_CST:
14638     case STRING_CST:
14639     case COMPLEX_CST:
14640       if ((ret = cst_pool_loc_descr (loc)))
14641         have_address = 1;
14642       else
14643       /* We can construct small constants here using int_loc_descriptor.  */
14644         expansion_failed (loc, NULL_RTX,
14645                           "constructor or constant not in constant pool");
14646       break;
14647
14648     case TRUTH_AND_EXPR:
14649     case TRUTH_ANDIF_EXPR:
14650     case BIT_AND_EXPR:
14651       op = DW_OP_and;
14652       goto do_binop;
14653
14654     case TRUTH_XOR_EXPR:
14655     case BIT_XOR_EXPR:
14656       op = DW_OP_xor;
14657       goto do_binop;
14658
14659     case TRUTH_OR_EXPR:
14660     case TRUTH_ORIF_EXPR:
14661     case BIT_IOR_EXPR:
14662       op = DW_OP_or;
14663       goto do_binop;
14664
14665     case FLOOR_DIV_EXPR:
14666     case CEIL_DIV_EXPR:
14667     case ROUND_DIV_EXPR:
14668     case TRUNC_DIV_EXPR:
14669       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14670         return 0;
14671       op = DW_OP_div;
14672       goto do_binop;
14673
14674     case MINUS_EXPR:
14675       op = DW_OP_minus;
14676       goto do_binop;
14677
14678     case FLOOR_MOD_EXPR:
14679     case CEIL_MOD_EXPR:
14680     case ROUND_MOD_EXPR:
14681     case TRUNC_MOD_EXPR:
14682       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14683         {
14684           op = DW_OP_mod;
14685           goto do_binop;
14686         }
14687       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14688       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14689       if (list_ret == 0 || list_ret1 == 0)
14690         return 0;
14691
14692       add_loc_list (&list_ret, list_ret1);
14693       if (list_ret == 0)
14694         return 0;
14695       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14696       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14697       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14698       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14699       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14700       break;
14701
14702     case MULT_EXPR:
14703       op = DW_OP_mul;
14704       goto do_binop;
14705
14706     case LSHIFT_EXPR:
14707       op = DW_OP_shl;
14708       goto do_binop;
14709
14710     case RSHIFT_EXPR:
14711       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14712       goto do_binop;
14713
14714     case POINTER_PLUS_EXPR:
14715     case PLUS_EXPR:
14716       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14717           && host_integerp (TREE_OPERAND (loc, 1), 0))
14718         {
14719           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14720           if (list_ret == 0)
14721             return 0;
14722
14723           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14724           break;
14725         }
14726
14727       op = DW_OP_plus;
14728       goto do_binop;
14729
14730     case LE_EXPR:
14731       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14732         return 0;
14733
14734       op = DW_OP_le;
14735       goto do_binop;
14736
14737     case GE_EXPR:
14738       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14739         return 0;
14740
14741       op = DW_OP_ge;
14742       goto do_binop;
14743
14744     case LT_EXPR:
14745       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14746         return 0;
14747
14748       op = DW_OP_lt;
14749       goto do_binop;
14750
14751     case GT_EXPR:
14752       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14753         return 0;
14754
14755       op = DW_OP_gt;
14756       goto do_binop;
14757
14758     case EQ_EXPR:
14759       op = DW_OP_eq;
14760       goto do_binop;
14761
14762     case NE_EXPR:
14763       op = DW_OP_ne;
14764       goto do_binop;
14765
14766     do_binop:
14767       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14768       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14769       if (list_ret == 0 || list_ret1 == 0)
14770         return 0;
14771
14772       add_loc_list (&list_ret, list_ret1);
14773       if (list_ret == 0)
14774         return 0;
14775       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14776       break;
14777
14778     case TRUTH_NOT_EXPR:
14779     case BIT_NOT_EXPR:
14780       op = DW_OP_not;
14781       goto do_unop;
14782
14783     case ABS_EXPR:
14784       op = DW_OP_abs;
14785       goto do_unop;
14786
14787     case NEGATE_EXPR:
14788       op = DW_OP_neg;
14789       goto do_unop;
14790
14791     do_unop:
14792       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14793       if (list_ret == 0)
14794         return 0;
14795
14796       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14797       break;
14798
14799     case MIN_EXPR:
14800     case MAX_EXPR:
14801       {
14802         const enum tree_code code =
14803           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14804
14805         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14806                       build2 (code, integer_type_node,
14807                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14808                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14809       }
14810
14811       /* ... fall through ...  */
14812
14813     case COND_EXPR:
14814       {
14815         dw_loc_descr_ref lhs
14816           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14817         dw_loc_list_ref rhs
14818           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14819         dw_loc_descr_ref bra_node, jump_node, tmp;
14820
14821         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14822         if (list_ret == 0 || lhs == 0 || rhs == 0)
14823           return 0;
14824
14825         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14826         add_loc_descr_to_each (list_ret, bra_node);
14827
14828         add_loc_list (&list_ret, rhs);
14829         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14830         add_loc_descr_to_each (list_ret, jump_node);
14831
14832         add_loc_descr_to_each (list_ret, lhs);
14833         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14834         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14835
14836         /* ??? Need a node to point the skip at.  Use a nop.  */
14837         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14838         add_loc_descr_to_each (list_ret, tmp);
14839         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14840         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14841       }
14842       break;
14843
14844     case FIX_TRUNC_EXPR:
14845       return 0;
14846
14847     default:
14848       /* Leave front-end specific codes as simply unknown.  This comes
14849          up, for instance, with the C STMT_EXPR.  */
14850       if ((unsigned int) TREE_CODE (loc)
14851           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14852         {
14853           expansion_failed (loc, NULL_RTX,
14854                             "language specific tree node");
14855           return 0;
14856         }
14857
14858 #ifdef ENABLE_CHECKING
14859       /* Otherwise this is a generic code; we should just lists all of
14860          these explicitly.  We forgot one.  */
14861       gcc_unreachable ();
14862 #else
14863       /* In a release build, we want to degrade gracefully: better to
14864          generate incomplete debugging information than to crash.  */
14865       return NULL;
14866 #endif
14867     }
14868
14869   if (!ret && !list_ret)
14870     return 0;
14871
14872   if (want_address == 2 && !have_address
14873       && (dwarf_version >= 4 || !dwarf_strict))
14874     {
14875       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14876         {
14877           expansion_failed (loc, NULL_RTX,
14878                             "DWARF address size mismatch");
14879           return 0;
14880         }
14881       if (ret)
14882         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14883       else
14884         add_loc_descr_to_each (list_ret,
14885                                new_loc_descr (DW_OP_stack_value, 0, 0));
14886       have_address = 1;
14887     }
14888   /* Show if we can't fill the request for an address.  */
14889   if (want_address && !have_address)
14890     {
14891       expansion_failed (loc, NULL_RTX,
14892                         "Want address and only have value");
14893       return 0;
14894     }
14895
14896   gcc_assert (!ret || !list_ret);
14897
14898   /* If we've got an address and don't want one, dereference.  */
14899   if (!want_address && have_address)
14900     {
14901       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14902
14903       if (size > DWARF2_ADDR_SIZE || size == -1)
14904         {
14905           expansion_failed (loc, NULL_RTX,
14906                             "DWARF address size mismatch");
14907           return 0;
14908         }
14909       else if (size == DWARF2_ADDR_SIZE)
14910         op = DW_OP_deref;
14911       else
14912         op = DW_OP_deref_size;
14913
14914       if (ret)
14915         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14916       else
14917         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14918     }
14919   if (ret)
14920     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14921
14922   return list_ret;
14923 }
14924
14925 /* Same as above but return only single location expression.  */
14926 static dw_loc_descr_ref
14927 loc_descriptor_from_tree (tree loc, int want_address)
14928 {
14929   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14930   if (!ret)
14931     return NULL;
14932   if (ret->dw_loc_next)
14933     {
14934       expansion_failed (loc, NULL_RTX,
14935                         "Location list where only loc descriptor needed");
14936       return NULL;
14937     }
14938   return ret->expr;
14939 }
14940
14941 /* Given a value, round it up to the lowest multiple of `boundary'
14942    which is not less than the value itself.  */
14943
14944 static inline HOST_WIDE_INT
14945 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14946 {
14947   return (((value + boundary - 1) / boundary) * boundary);
14948 }
14949
14950 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14951    pointer to the declared type for the relevant field variable, or return
14952    `integer_type_node' if the given node turns out to be an
14953    ERROR_MARK node.  */
14954
14955 static inline tree
14956 field_type (const_tree decl)
14957 {
14958   tree type;
14959
14960   if (TREE_CODE (decl) == ERROR_MARK)
14961     return integer_type_node;
14962
14963   type = DECL_BIT_FIELD_TYPE (decl);
14964   if (type == NULL_TREE)
14965     type = TREE_TYPE (decl);
14966
14967   return type;
14968 }
14969
14970 /* Given a pointer to a tree node, return the alignment in bits for
14971    it, or else return BITS_PER_WORD if the node actually turns out to
14972    be an ERROR_MARK node.  */
14973
14974 static inline unsigned
14975 simple_type_align_in_bits (const_tree type)
14976 {
14977   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14978 }
14979
14980 static inline unsigned
14981 simple_decl_align_in_bits (const_tree decl)
14982 {
14983   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14984 }
14985
14986 /* Return the result of rounding T up to ALIGN.  */
14987
14988 static inline HOST_WIDE_INT
14989 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14990 {
14991   /* We must be careful if T is negative because HOST_WIDE_INT can be
14992      either "above" or "below" unsigned int as per the C promotion
14993      rules, depending on the host, thus making the signedness of the
14994      direct multiplication and division unpredictable.  */
14995   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
14996
14997   u += align - 1;
14998   u /= align;
14999   u *= align;
15000
15001   return (HOST_WIDE_INT) u;
15002 }
15003
15004 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15005    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15006    or return 0 if we are unable to determine what that offset is, either
15007    because the argument turns out to be a pointer to an ERROR_MARK node, or
15008    because the offset is actually variable.  (We can't handle the latter case
15009    just yet).  */
15010
15011 static HOST_WIDE_INT
15012 field_byte_offset (const_tree decl)
15013 {
15014   HOST_WIDE_INT object_offset_in_bits;
15015   HOST_WIDE_INT bitpos_int;
15016
15017   if (TREE_CODE (decl) == ERROR_MARK)
15018     return 0;
15019
15020   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15021
15022   /* We cannot yet cope with fields whose positions are variable, so
15023      for now, when we see such things, we simply return 0.  Someday, we may
15024      be able to handle such cases, but it will be damn difficult.  */
15025   if (! host_integerp (bit_position (decl), 0))
15026     return 0;
15027
15028   bitpos_int = int_bit_position (decl);
15029
15030 #ifdef PCC_BITFIELD_TYPE_MATTERS
15031   if (PCC_BITFIELD_TYPE_MATTERS)
15032     {
15033       tree type;
15034       tree field_size_tree;
15035       HOST_WIDE_INT deepest_bitpos;
15036       unsigned HOST_WIDE_INT field_size_in_bits;
15037       unsigned int type_align_in_bits;
15038       unsigned int decl_align_in_bits;
15039       unsigned HOST_WIDE_INT type_size_in_bits;
15040
15041       type = field_type (decl);
15042       type_size_in_bits = simple_type_size_in_bits (type);
15043       type_align_in_bits = simple_type_align_in_bits (type);
15044
15045       field_size_tree = DECL_SIZE (decl);
15046
15047       /* The size could be unspecified if there was an error, or for
15048          a flexible array member.  */
15049       if (!field_size_tree)
15050         field_size_tree = bitsize_zero_node;
15051
15052       /* If the size of the field is not constant, use the type size.  */
15053       if (host_integerp (field_size_tree, 1))
15054         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15055       else
15056         field_size_in_bits = type_size_in_bits;
15057
15058       decl_align_in_bits = simple_decl_align_in_bits (decl);
15059
15060       /* The GCC front-end doesn't make any attempt to keep track of the
15061          starting bit offset (relative to the start of the containing
15062          structure type) of the hypothetical "containing object" for a
15063          bit-field.  Thus, when computing the byte offset value for the
15064          start of the "containing object" of a bit-field, we must deduce
15065          this information on our own. This can be rather tricky to do in
15066          some cases.  For example, handling the following structure type
15067          definition when compiling for an i386/i486 target (which only
15068          aligns long long's to 32-bit boundaries) can be very tricky:
15069
15070          struct S { int field1; long long field2:31; };
15071
15072          Fortunately, there is a simple rule-of-thumb which can be used
15073          in such cases.  When compiling for an i386/i486, GCC will
15074          allocate 8 bytes for the structure shown above.  It decides to
15075          do this based upon one simple rule for bit-field allocation.
15076          GCC allocates each "containing object" for each bit-field at
15077          the first (i.e. lowest addressed) legitimate alignment boundary
15078          (based upon the required minimum alignment for the declared
15079          type of the field) which it can possibly use, subject to the
15080          condition that there is still enough available space remaining
15081          in the containing object (when allocated at the selected point)
15082          to fully accommodate all of the bits of the bit-field itself.
15083
15084          This simple rule makes it obvious why GCC allocates 8 bytes for
15085          each object of the structure type shown above.  When looking
15086          for a place to allocate the "containing object" for `field2',
15087          the compiler simply tries to allocate a 64-bit "containing
15088          object" at each successive 32-bit boundary (starting at zero)
15089          until it finds a place to allocate that 64- bit field such that
15090          at least 31 contiguous (and previously unallocated) bits remain
15091          within that selected 64 bit field.  (As it turns out, for the
15092          example above, the compiler finds it is OK to allocate the
15093          "containing object" 64-bit field at bit-offset zero within the
15094          structure type.)
15095
15096          Here we attempt to work backwards from the limited set of facts
15097          we're given, and we try to deduce from those facts, where GCC
15098          must have believed that the containing object started (within
15099          the structure type). The value we deduce is then used (by the
15100          callers of this routine) to generate DW_AT_location and
15101          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15102          the case of DW_AT_location, regular fields as well).  */
15103
15104       /* Figure out the bit-distance from the start of the structure to
15105          the "deepest" bit of the bit-field.  */
15106       deepest_bitpos = bitpos_int + field_size_in_bits;
15107
15108       /* This is the tricky part.  Use some fancy footwork to deduce
15109          where the lowest addressed bit of the containing object must
15110          be.  */
15111       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15112
15113       /* Round up to type_align by default.  This works best for
15114          bitfields.  */
15115       object_offset_in_bits
15116         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15117
15118       if (object_offset_in_bits > bitpos_int)
15119         {
15120           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15121
15122           /* Round up to decl_align instead.  */
15123           object_offset_in_bits
15124             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15125         }
15126     }
15127   else
15128 #endif
15129     object_offset_in_bits = bitpos_int;
15130
15131   return object_offset_in_bits / BITS_PER_UNIT;
15132 }
15133 \f
15134 /* The following routines define various Dwarf attributes and any data
15135    associated with them.  */
15136
15137 /* Add a location description attribute value to a DIE.
15138
15139    This emits location attributes suitable for whole variables and
15140    whole parameters.  Note that the location attributes for struct fields are
15141    generated by the routine `data_member_location_attribute' below.  */
15142
15143 static inline void
15144 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15145                              dw_loc_list_ref descr)
15146 {
15147   if (descr == 0)
15148     return;
15149   if (single_element_loc_list_p (descr))
15150     add_AT_loc (die, attr_kind, descr->expr);
15151   else
15152     add_AT_loc_list (die, attr_kind, descr);
15153 }
15154
15155 /* Attach the specialized form of location attribute used for data members of
15156    struct and union types.  In the special case of a FIELD_DECL node which
15157    represents a bit-field, the "offset" part of this special location
15158    descriptor must indicate the distance in bytes from the lowest-addressed
15159    byte of the containing struct or union type to the lowest-addressed byte of
15160    the "containing object" for the bit-field.  (See the `field_byte_offset'
15161    function above).
15162
15163    For any given bit-field, the "containing object" is a hypothetical object
15164    (of some integral or enum type) within which the given bit-field lives.  The
15165    type of this hypothetical "containing object" is always the same as the
15166    declared type of the individual bit-field itself (for GCC anyway... the
15167    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15168    bytes) of the hypothetical "containing object" which will be given in the
15169    DW_AT_byte_size attribute for this bit-field.  (See the
15170    `byte_size_attribute' function below.)  It is also used when calculating the
15171    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15172    function below.)  */
15173
15174 static void
15175 add_data_member_location_attribute (dw_die_ref die, tree decl)
15176 {
15177   HOST_WIDE_INT offset;
15178   dw_loc_descr_ref loc_descr = 0;
15179
15180   if (TREE_CODE (decl) == TREE_BINFO)
15181     {
15182       /* We're working on the TAG_inheritance for a base class.  */
15183       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15184         {
15185           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15186              aren't at a fixed offset from all (sub)objects of the same
15187              type.  We need to extract the appropriate offset from our
15188              vtable.  The following dwarf expression means
15189
15190                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15191
15192              This is specific to the V3 ABI, of course.  */
15193
15194           dw_loc_descr_ref tmp;
15195
15196           /* Make a copy of the object address.  */
15197           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15198           add_loc_descr (&loc_descr, tmp);
15199
15200           /* Extract the vtable address.  */
15201           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15202           add_loc_descr (&loc_descr, tmp);
15203
15204           /* Calculate the address of the offset.  */
15205           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15206           gcc_assert (offset < 0);
15207
15208           tmp = int_loc_descriptor (-offset);
15209           add_loc_descr (&loc_descr, tmp);
15210           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15211           add_loc_descr (&loc_descr, tmp);
15212
15213           /* Extract the offset.  */
15214           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15215           add_loc_descr (&loc_descr, tmp);
15216
15217           /* Add it to the object address.  */
15218           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15219           add_loc_descr (&loc_descr, tmp);
15220         }
15221       else
15222         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15223     }
15224   else
15225     offset = field_byte_offset (decl);
15226
15227   if (! loc_descr)
15228     {
15229       if (dwarf_version > 2)
15230         {
15231           /* Don't need to output a location expression, just the constant. */
15232           add_AT_int (die, DW_AT_data_member_location, offset);
15233           return;
15234         }
15235       else
15236         {
15237           enum dwarf_location_atom op;
15238
15239           /* The DWARF2 standard says that we should assume that the structure
15240              address is already on the stack, so we can specify a structure
15241              field address by using DW_OP_plus_uconst.  */
15242
15243 #ifdef MIPS_DEBUGGING_INFO
15244           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15245              operator correctly.  It works only if we leave the offset on the
15246              stack.  */
15247           op = DW_OP_constu;
15248 #else
15249           op = DW_OP_plus_uconst;
15250 #endif
15251
15252           loc_descr = new_loc_descr (op, offset, 0);
15253         }
15254     }
15255
15256   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15257 }
15258
15259 /* Writes integer values to dw_vec_const array.  */
15260
15261 static void
15262 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15263 {
15264   while (size != 0)
15265     {
15266       *dest++ = val & 0xff;
15267       val >>= 8;
15268       --size;
15269     }
15270 }
15271
15272 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15273
15274 static HOST_WIDE_INT
15275 extract_int (const unsigned char *src, unsigned int size)
15276 {
15277   HOST_WIDE_INT val = 0;
15278
15279   src += size;
15280   while (size != 0)
15281     {
15282       val <<= 8;
15283       val |= *--src & 0xff;
15284       --size;
15285     }
15286   return val;
15287 }
15288
15289 /* Writes floating point values to dw_vec_const array.  */
15290
15291 static void
15292 insert_float (const_rtx rtl, unsigned char *array)
15293 {
15294   REAL_VALUE_TYPE rv;
15295   long val[4];
15296   int i;
15297
15298   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15299   real_to_target (val, &rv, GET_MODE (rtl));
15300
15301   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15302   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15303     {
15304       insert_int (val[i], 4, array);
15305       array += 4;
15306     }
15307 }
15308
15309 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15310    does not have a "location" either in memory or in a register.  These
15311    things can arise in GNU C when a constant is passed as an actual parameter
15312    to an inlined function.  They can also arise in C++ where declared
15313    constants do not necessarily get memory "homes".  */
15314
15315 static bool
15316 add_const_value_attribute (dw_die_ref die, rtx rtl)
15317 {
15318   switch (GET_CODE (rtl))
15319     {
15320     case CONST_INT:
15321       {
15322         HOST_WIDE_INT val = INTVAL (rtl);
15323
15324         if (val < 0)
15325           add_AT_int (die, DW_AT_const_value, val);
15326         else
15327           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15328       }
15329       return true;
15330
15331     case CONST_DOUBLE:
15332       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15333          floating-point constant.  A CONST_DOUBLE is used whenever the
15334          constant requires more than one word in order to be adequately
15335          represented.  */
15336       {
15337         enum machine_mode mode = GET_MODE (rtl);
15338
15339         if (SCALAR_FLOAT_MODE_P (mode))
15340           {
15341             unsigned int length = GET_MODE_SIZE (mode);
15342             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15343
15344             insert_float (rtl, array);
15345             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15346           }
15347         else
15348           add_AT_double (die, DW_AT_const_value,
15349                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15350       }
15351       return true;
15352
15353     case CONST_VECTOR:
15354       {
15355         enum machine_mode mode = GET_MODE (rtl);
15356         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15357         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15358         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15359         unsigned int i;
15360         unsigned char *p;
15361
15362         switch (GET_MODE_CLASS (mode))
15363           {
15364           case MODE_VECTOR_INT:
15365             for (i = 0, p = array; i < length; i++, p += elt_size)
15366               {
15367                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15368                 HOST_WIDE_INT lo, hi;
15369
15370                 switch (GET_CODE (elt))
15371                   {
15372                   case CONST_INT:
15373                     lo = INTVAL (elt);
15374                     hi = -(lo < 0);
15375                     break;
15376
15377                   case CONST_DOUBLE:
15378                     lo = CONST_DOUBLE_LOW (elt);
15379                     hi = CONST_DOUBLE_HIGH (elt);
15380                     break;
15381
15382                   default:
15383                     gcc_unreachable ();
15384                   }
15385
15386                 if (elt_size <= sizeof (HOST_WIDE_INT))
15387                   insert_int (lo, elt_size, p);
15388                 else
15389                   {
15390                     unsigned char *p0 = p;
15391                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15392
15393                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15394                     if (WORDS_BIG_ENDIAN)
15395                       {
15396                         p0 = p1;
15397                         p1 = p;
15398                       }
15399                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15400                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15401                   }
15402               }
15403             break;
15404
15405           case MODE_VECTOR_FLOAT:
15406             for (i = 0, p = array; i < length; i++, p += elt_size)
15407               {
15408                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15409                 insert_float (elt, p);
15410               }
15411             break;
15412
15413           default:
15414             gcc_unreachable ();
15415           }
15416
15417         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15418       }
15419       return true;
15420
15421     case CONST_STRING:
15422       if (dwarf_version >= 4 || !dwarf_strict)
15423         {
15424           dw_loc_descr_ref loc_result;
15425           resolve_one_addr (&rtl, NULL);
15426         rtl_addr:
15427           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15428           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15429           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15430           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15431           add_AT_loc (die, DW_AT_location, loc_result);
15432           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15433           return true;
15434         }
15435       return false;
15436
15437     case CONST:
15438       if (CONSTANT_P (XEXP (rtl, 0)))
15439         return add_const_value_attribute (die, XEXP (rtl, 0));
15440       /* FALLTHROUGH */
15441     case SYMBOL_REF:
15442       if (!const_ok_for_output (rtl))
15443         return false;
15444     case LABEL_REF:
15445       if (dwarf_version >= 4 || !dwarf_strict)
15446         goto rtl_addr;
15447       return false;
15448
15449     case PLUS:
15450       /* In cases where an inlined instance of an inline function is passed
15451          the address of an `auto' variable (which is local to the caller) we
15452          can get a situation where the DECL_RTL of the artificial local
15453          variable (for the inlining) which acts as a stand-in for the
15454          corresponding formal parameter (of the inline function) will look
15455          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15456          exactly a compile-time constant expression, but it isn't the address
15457          of the (artificial) local variable either.  Rather, it represents the
15458          *value* which the artificial local variable always has during its
15459          lifetime.  We currently have no way to represent such quasi-constant
15460          values in Dwarf, so for now we just punt and generate nothing.  */
15461       return false;
15462
15463     case HIGH:
15464     case CONST_FIXED:
15465       return false;
15466
15467     case MEM:
15468       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15469           && MEM_READONLY_P (rtl)
15470           && GET_MODE (rtl) == BLKmode)
15471         {
15472           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15473           return true;
15474         }
15475       return false;
15476
15477     default:
15478       /* No other kinds of rtx should be possible here.  */
15479       gcc_unreachable ();
15480     }
15481   return false;
15482 }
15483
15484 /* Determine whether the evaluation of EXPR references any variables
15485    or functions which aren't otherwise used (and therefore may not be
15486    output).  */
15487 static tree
15488 reference_to_unused (tree * tp, int * walk_subtrees,
15489                      void * data ATTRIBUTE_UNUSED)
15490 {
15491   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15492     *walk_subtrees = 0;
15493
15494   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15495       && ! TREE_ASM_WRITTEN (*tp))
15496     return *tp;
15497   /* ???  The C++ FE emits debug information for using decls, so
15498      putting gcc_unreachable here falls over.  See PR31899.  For now
15499      be conservative.  */
15500   else if (!cgraph_global_info_ready
15501            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15502     return *tp;
15503   else if (TREE_CODE (*tp) == VAR_DECL)
15504     {
15505       struct varpool_node *node = varpool_node (*tp);
15506       if (!node->needed)
15507         return *tp;
15508     }
15509   else if (TREE_CODE (*tp) == FUNCTION_DECL
15510            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15511     {
15512       /* The call graph machinery must have finished analyzing,
15513          optimizing and gimplifying the CU by now.
15514          So if *TP has no call graph node associated
15515          to it, it means *TP will not be emitted.  */
15516       if (!cgraph_get_node (*tp))
15517         return *tp;
15518     }
15519   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15520     return *tp;
15521
15522   return NULL_TREE;
15523 }
15524
15525 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15526    for use in a later add_const_value_attribute call.  */
15527
15528 static rtx
15529 rtl_for_decl_init (tree init, tree type)
15530 {
15531   rtx rtl = NULL_RTX;
15532
15533   /* If a variable is initialized with a string constant without embedded
15534      zeros, build CONST_STRING.  */
15535   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15536     {
15537       tree enttype = TREE_TYPE (type);
15538       tree domain = TYPE_DOMAIN (type);
15539       enum machine_mode mode = TYPE_MODE (enttype);
15540
15541       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15542           && domain
15543           && integer_zerop (TYPE_MIN_VALUE (domain))
15544           && compare_tree_int (TYPE_MAX_VALUE (domain),
15545                                TREE_STRING_LENGTH (init) - 1) == 0
15546           && ((size_t) TREE_STRING_LENGTH (init)
15547               == strlen (TREE_STRING_POINTER (init)) + 1))
15548         {
15549           rtl = gen_rtx_CONST_STRING (VOIDmode,
15550                                       ggc_strdup (TREE_STRING_POINTER (init)));
15551           rtl = gen_rtx_MEM (BLKmode, rtl);
15552           MEM_READONLY_P (rtl) = 1;
15553         }
15554     }
15555   /* Other aggregates, and complex values, could be represented using
15556      CONCAT: FIXME!  */
15557   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15558     ;
15559   /* Vectors only work if their mode is supported by the target.
15560      FIXME: generic vectors ought to work too.  */
15561   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15562     ;
15563   /* If the initializer is something that we know will expand into an
15564      immediate RTL constant, expand it now.  We must be careful not to
15565      reference variables which won't be output.  */
15566   else if (initializer_constant_valid_p (init, type)
15567            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15568     {
15569       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15570          possible.  */
15571       if (TREE_CODE (type) == VECTOR_TYPE)
15572         switch (TREE_CODE (init))
15573           {
15574           case VECTOR_CST:
15575             break;
15576           case CONSTRUCTOR:
15577             if (TREE_CONSTANT (init))
15578               {
15579                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15580                 bool constant_p = true;
15581                 tree value;
15582                 unsigned HOST_WIDE_INT ix;
15583
15584                 /* Even when ctor is constant, it might contain non-*_CST
15585                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15586                    belong into VECTOR_CST nodes.  */
15587                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15588                   if (!CONSTANT_CLASS_P (value))
15589                     {
15590                       constant_p = false;
15591                       break;
15592                     }
15593
15594                 if (constant_p)
15595                   {
15596                     init = build_vector_from_ctor (type, elts);
15597                     break;
15598                   }
15599               }
15600             /* FALLTHRU */
15601
15602           default:
15603             return NULL;
15604           }
15605
15606       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15607
15608       /* If expand_expr returns a MEM, it wasn't immediate.  */
15609       gcc_assert (!rtl || !MEM_P (rtl));
15610     }
15611
15612   return rtl;
15613 }
15614
15615 /* Generate RTL for the variable DECL to represent its location.  */
15616
15617 static rtx
15618 rtl_for_decl_location (tree decl)
15619 {
15620   rtx rtl;
15621
15622   /* Here we have to decide where we are going to say the parameter "lives"
15623      (as far as the debugger is concerned).  We only have a couple of
15624      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15625
15626      DECL_RTL normally indicates where the parameter lives during most of the
15627      activation of the function.  If optimization is enabled however, this
15628      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15629      that the parameter doesn't really live anywhere (as far as the code
15630      generation parts of GCC are concerned) during most of the function's
15631      activation.  That will happen (for example) if the parameter is never
15632      referenced within the function.
15633
15634      We could just generate a location descriptor here for all non-NULL
15635      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15636      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15637      where DECL_RTL is NULL or is a pseudo-reg.
15638
15639      Note however that we can only get away with using DECL_INCOMING_RTL as
15640      a backup substitute for DECL_RTL in certain limited cases.  In cases
15641      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15642      we can be sure that the parameter was passed using the same type as it is
15643      declared to have within the function, and that its DECL_INCOMING_RTL
15644      points us to a place where a value of that type is passed.
15645
15646      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15647      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15648      because in these cases DECL_INCOMING_RTL points us to a value of some
15649      type which is *different* from the type of the parameter itself.  Thus,
15650      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15651      such cases, the debugger would end up (for example) trying to fetch a
15652      `float' from a place which actually contains the first part of a
15653      `double'.  That would lead to really incorrect and confusing
15654      output at debug-time.
15655
15656      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15657      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15658      are a couple of exceptions however.  On little-endian machines we can
15659      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15660      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15661      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15662      when (on a little-endian machine) a non-prototyped function has a
15663      parameter declared to be of type `short' or `char'.  In such cases,
15664      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15665      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15666      passed `int' value.  If the debugger then uses that address to fetch
15667      a `short' or a `char' (on a little-endian machine) the result will be
15668      the correct data, so we allow for such exceptional cases below.
15669
15670      Note that our goal here is to describe the place where the given formal
15671      parameter lives during most of the function's activation (i.e. between the
15672      end of the prologue and the start of the epilogue).  We'll do that as best
15673      as we can. Note however that if the given formal parameter is modified
15674      sometime during the execution of the function, then a stack backtrace (at
15675      debug-time) will show the function as having been called with the *new*
15676      value rather than the value which was originally passed in.  This happens
15677      rarely enough that it is not a major problem, but it *is* a problem, and
15678      I'd like to fix it.
15679
15680      A future version of dwarf2out.c may generate two additional attributes for
15681      any given DW_TAG_formal_parameter DIE which will describe the "passed
15682      type" and the "passed location" for the given formal parameter in addition
15683      to the attributes we now generate to indicate the "declared type" and the
15684      "active location" for each parameter.  This additional set of attributes
15685      could be used by debuggers for stack backtraces. Separately, note that
15686      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15687      This happens (for example) for inlined-instances of inline function formal
15688      parameters which are never referenced.  This really shouldn't be
15689      happening.  All PARM_DECL nodes should get valid non-NULL
15690      DECL_INCOMING_RTL values.  FIXME.  */
15691
15692   /* Use DECL_RTL as the "location" unless we find something better.  */
15693   rtl = DECL_RTL_IF_SET (decl);
15694
15695   /* When generating abstract instances, ignore everything except
15696      constants, symbols living in memory, and symbols living in
15697      fixed registers.  */
15698   if (! reload_completed)
15699     {
15700       if (rtl
15701           && (CONSTANT_P (rtl)
15702               || (MEM_P (rtl)
15703                   && CONSTANT_P (XEXP (rtl, 0)))
15704               || (REG_P (rtl)
15705                   && TREE_CODE (decl) == VAR_DECL
15706                   && TREE_STATIC (decl))))
15707         {
15708           rtl = targetm.delegitimize_address (rtl);
15709           return rtl;
15710         }
15711       rtl = NULL_RTX;
15712     }
15713   else if (TREE_CODE (decl) == PARM_DECL)
15714     {
15715       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15716         {
15717           tree declared_type = TREE_TYPE (decl);
15718           tree passed_type = DECL_ARG_TYPE (decl);
15719           enum machine_mode dmode = TYPE_MODE (declared_type);
15720           enum machine_mode pmode = TYPE_MODE (passed_type);
15721
15722           /* This decl represents a formal parameter which was optimized out.
15723              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15724              all cases where (rtl == NULL_RTX) just below.  */
15725           if (dmode == pmode)
15726             rtl = DECL_INCOMING_RTL (decl);
15727           else if (SCALAR_INT_MODE_P (dmode)
15728                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15729                    && DECL_INCOMING_RTL (decl))
15730             {
15731               rtx inc = DECL_INCOMING_RTL (decl);
15732               if (REG_P (inc))
15733                 rtl = inc;
15734               else if (MEM_P (inc))
15735                 {
15736                   if (BYTES_BIG_ENDIAN)
15737                     rtl = adjust_address_nv (inc, dmode,
15738                                              GET_MODE_SIZE (pmode)
15739                                              - GET_MODE_SIZE (dmode));
15740                   else
15741                     rtl = inc;
15742                 }
15743             }
15744         }
15745
15746       /* If the parm was passed in registers, but lives on the stack, then
15747          make a big endian correction if the mode of the type of the
15748          parameter is not the same as the mode of the rtl.  */
15749       /* ??? This is the same series of checks that are made in dbxout.c before
15750          we reach the big endian correction code there.  It isn't clear if all
15751          of these checks are necessary here, but keeping them all is the safe
15752          thing to do.  */
15753       else if (MEM_P (rtl)
15754                && XEXP (rtl, 0) != const0_rtx
15755                && ! CONSTANT_P (XEXP (rtl, 0))
15756                /* Not passed in memory.  */
15757                && !MEM_P (DECL_INCOMING_RTL (decl))
15758                /* Not passed by invisible reference.  */
15759                && (!REG_P (XEXP (rtl, 0))
15760                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15761                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15762 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15763                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15764 #endif
15765                      )
15766                /* Big endian correction check.  */
15767                && BYTES_BIG_ENDIAN
15768                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15769                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15770                    < UNITS_PER_WORD))
15771         {
15772           int offset = (UNITS_PER_WORD
15773                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15774
15775           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15776                              plus_constant (XEXP (rtl, 0), offset));
15777         }
15778     }
15779   else if (TREE_CODE (decl) == VAR_DECL
15780            && rtl
15781            && MEM_P (rtl)
15782            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15783            && BYTES_BIG_ENDIAN)
15784     {
15785       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15786       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15787
15788       /* If a variable is declared "register" yet is smaller than
15789          a register, then if we store the variable to memory, it
15790          looks like we're storing a register-sized value, when in
15791          fact we are not.  We need to adjust the offset of the
15792          storage location to reflect the actual value's bytes,
15793          else gdb will not be able to display it.  */
15794       if (rsize > dsize)
15795         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15796                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15797     }
15798
15799   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15800      and will have been substituted directly into all expressions that use it.
15801      C does not have such a concept, but C++ and other languages do.  */
15802   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15803     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15804
15805   if (rtl)
15806     rtl = targetm.delegitimize_address (rtl);
15807
15808   /* If we don't look past the constant pool, we risk emitting a
15809      reference to a constant pool entry that isn't referenced from
15810      code, and thus is not emitted.  */
15811   if (rtl)
15812     rtl = avoid_constant_pool_reference (rtl);
15813
15814   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15815      in the current CU, resolve_addr will remove the expression referencing
15816      it.  */
15817   if (rtl == NULL_RTX
15818       && TREE_CODE (decl) == VAR_DECL
15819       && !DECL_EXTERNAL (decl)
15820       && TREE_STATIC (decl)
15821       && DECL_NAME (decl)
15822       && !DECL_HARD_REGISTER (decl)
15823       && DECL_MODE (decl) != VOIDmode)
15824     {
15825       rtl = make_decl_rtl_for_debug (decl);
15826       if (!MEM_P (rtl)
15827           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15828           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15829         rtl = NULL_RTX;
15830     }
15831
15832   return rtl;
15833 }
15834
15835 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15836    returned.  If so, the decl for the COMMON block is returned, and the
15837    value is the offset into the common block for the symbol.  */
15838
15839 static tree
15840 fortran_common (tree decl, HOST_WIDE_INT *value)
15841 {
15842   tree val_expr, cvar;
15843   enum machine_mode mode;
15844   HOST_WIDE_INT bitsize, bitpos;
15845   tree offset;
15846   int volatilep = 0, unsignedp = 0;
15847
15848   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15849      it does not have a value (the offset into the common area), or if it
15850      is thread local (as opposed to global) then it isn't common, and shouldn't
15851      be handled as such.  */
15852   if (TREE_CODE (decl) != VAR_DECL
15853       || !TREE_STATIC (decl)
15854       || !DECL_HAS_VALUE_EXPR_P (decl)
15855       || !is_fortran ())
15856     return NULL_TREE;
15857
15858   val_expr = DECL_VALUE_EXPR (decl);
15859   if (TREE_CODE (val_expr) != COMPONENT_REF)
15860     return NULL_TREE;
15861
15862   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15863                               &mode, &unsignedp, &volatilep, true);
15864
15865   if (cvar == NULL_TREE
15866       || TREE_CODE (cvar) != VAR_DECL
15867       || DECL_ARTIFICIAL (cvar)
15868       || !TREE_PUBLIC (cvar))
15869     return NULL_TREE;
15870
15871   *value = 0;
15872   if (offset != NULL)
15873     {
15874       if (!host_integerp (offset, 0))
15875         return NULL_TREE;
15876       *value = tree_low_cst (offset, 0);
15877     }
15878   if (bitpos != 0)
15879     *value += bitpos / BITS_PER_UNIT;
15880
15881   return cvar;
15882 }
15883
15884 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15885    data attribute for a variable or a parameter.  We generate the
15886    DW_AT_const_value attribute only in those cases where the given variable
15887    or parameter does not have a true "location" either in memory or in a
15888    register.  This can happen (for example) when a constant is passed as an
15889    actual argument in a call to an inline function.  (It's possible that
15890    these things can crop up in other ways also.)  Note that one type of
15891    constant value which can be passed into an inlined function is a constant
15892    pointer.  This can happen for example if an actual argument in an inlined
15893    function call evaluates to a compile-time constant address.  */
15894
15895 static bool
15896 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15897                                        enum dwarf_attribute attr)
15898 {
15899   rtx rtl;
15900   dw_loc_list_ref list;
15901   var_loc_list *loc_list;
15902
15903   if (TREE_CODE (decl) == ERROR_MARK)
15904     return false;
15905
15906   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15907               || TREE_CODE (decl) == RESULT_DECL);
15908
15909   /* Try to get some constant RTL for this decl, and use that as the value of
15910      the location.  */
15911
15912   rtl = rtl_for_decl_location (decl);
15913   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15914       && add_const_value_attribute (die, rtl))
15915     return true;
15916
15917   /* See if we have single element location list that is equivalent to
15918      a constant value.  That way we are better to use add_const_value_attribute
15919      rather than expanding constant value equivalent.  */
15920   loc_list = lookup_decl_loc (decl);
15921   if (loc_list
15922       && loc_list->first
15923       && loc_list->first == loc_list->last
15924       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15925       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15926     {
15927       struct var_loc_node *node;
15928
15929       node = loc_list->first;
15930       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15931       if (GET_CODE (rtl) == EXPR_LIST)
15932         rtl = XEXP (rtl, 0);
15933       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15934           && add_const_value_attribute (die, rtl))
15935          return true;
15936     }
15937   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15938   if (list)
15939     {
15940       add_AT_location_description (die, attr, list);
15941       return true;
15942     }
15943   /* None of that worked, so it must not really have a location;
15944      try adding a constant value attribute from the DECL_INITIAL.  */
15945   return tree_add_const_value_attribute_for_decl (die, decl);
15946 }
15947
15948 /* Add VARIABLE and DIE into deferred locations list.  */
15949
15950 static void
15951 defer_location (tree variable, dw_die_ref die)
15952 {
15953   deferred_locations entry;
15954   entry.variable = variable;
15955   entry.die = die;
15956   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15957 }
15958
15959 /* Helper function for tree_add_const_value_attribute.  Natively encode
15960    initializer INIT into an array.  Return true if successful.  */
15961
15962 static bool
15963 native_encode_initializer (tree init, unsigned char *array, int size)
15964 {
15965   tree type;
15966
15967   if (init == NULL_TREE)
15968     return false;
15969
15970   STRIP_NOPS (init);
15971   switch (TREE_CODE (init))
15972     {
15973     case STRING_CST:
15974       type = TREE_TYPE (init);
15975       if (TREE_CODE (type) == ARRAY_TYPE)
15976         {
15977           tree enttype = TREE_TYPE (type);
15978           enum machine_mode mode = TYPE_MODE (enttype);
15979
15980           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15981             return false;
15982           if (int_size_in_bytes (type) != size)
15983             return false;
15984           if (size > TREE_STRING_LENGTH (init))
15985             {
15986               memcpy (array, TREE_STRING_POINTER (init),
15987                       TREE_STRING_LENGTH (init));
15988               memset (array + TREE_STRING_LENGTH (init),
15989                       '\0', size - TREE_STRING_LENGTH (init));
15990             }
15991           else
15992             memcpy (array, TREE_STRING_POINTER (init), size);
15993           return true;
15994         }
15995       return false;
15996     case CONSTRUCTOR:
15997       type = TREE_TYPE (init);
15998       if (int_size_in_bytes (type) != size)
15999         return false;
16000       if (TREE_CODE (type) == ARRAY_TYPE)
16001         {
16002           HOST_WIDE_INT min_index;
16003           unsigned HOST_WIDE_INT cnt;
16004           int curpos = 0, fieldsize;
16005           constructor_elt *ce;
16006
16007           if (TYPE_DOMAIN (type) == NULL_TREE
16008               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16009             return false;
16010
16011           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16012           if (fieldsize <= 0)
16013             return false;
16014
16015           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16016           memset (array, '\0', size);
16017           for (cnt = 0;
16018                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16019                cnt++)
16020             {
16021               tree val = ce->value;
16022               tree index = ce->index;
16023               int pos = curpos;
16024               if (index && TREE_CODE (index) == RANGE_EXPR)
16025                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16026                       * fieldsize;
16027               else if (index)
16028                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16029
16030               if (val)
16031                 {
16032                   STRIP_NOPS (val);
16033                   if (!native_encode_initializer (val, array + pos, fieldsize))
16034                     return false;
16035                 }
16036               curpos = pos + fieldsize;
16037               if (index && TREE_CODE (index) == RANGE_EXPR)
16038                 {
16039                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16040                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16041                   while (count > 0)
16042                     {
16043                       if (val)
16044                         memcpy (array + curpos, array + pos, fieldsize);
16045                       curpos += fieldsize;
16046                     }
16047                 }
16048               gcc_assert (curpos <= size);
16049             }
16050           return true;
16051         }
16052       else if (TREE_CODE (type) == RECORD_TYPE
16053                || TREE_CODE (type) == UNION_TYPE)
16054         {
16055           tree field = NULL_TREE;
16056           unsigned HOST_WIDE_INT cnt;
16057           constructor_elt *ce;
16058
16059           if (int_size_in_bytes (type) != size)
16060             return false;
16061
16062           if (TREE_CODE (type) == RECORD_TYPE)
16063             field = TYPE_FIELDS (type);
16064
16065           for (cnt = 0;
16066                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16067                cnt++, field = field ? TREE_CHAIN (field) : 0)
16068             {
16069               tree val = ce->value;
16070               int pos, fieldsize;
16071
16072               if (ce->index != 0)
16073                 field = ce->index;
16074
16075               if (val)
16076                 STRIP_NOPS (val);
16077
16078               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16079                 return false;
16080
16081               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16082                   && TYPE_DOMAIN (TREE_TYPE (field))
16083                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16084                 return false;
16085               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16086                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16087                 return false;
16088               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16089               pos = int_byte_position (field);
16090               gcc_assert (pos + fieldsize <= size);
16091               if (val
16092                   && !native_encode_initializer (val, array + pos, fieldsize))
16093                 return false;
16094             }
16095           return true;
16096         }
16097       return false;
16098     case VIEW_CONVERT_EXPR:
16099     case NON_LVALUE_EXPR:
16100       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16101     default:
16102       return native_encode_expr (init, array, size) == size;
16103     }
16104 }
16105
16106 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16107    attribute is the const value T.  */
16108
16109 static bool
16110 tree_add_const_value_attribute (dw_die_ref die, tree t)
16111 {
16112   tree init;
16113   tree type = TREE_TYPE (t);
16114   rtx rtl;
16115
16116   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16117     return false;
16118
16119   init = t;
16120   gcc_assert (!DECL_P (init));
16121
16122   rtl = rtl_for_decl_init (init, type);
16123   if (rtl)
16124     return add_const_value_attribute (die, rtl);
16125   /* If the host and target are sane, try harder.  */
16126   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16127            && initializer_constant_valid_p (init, type))
16128     {
16129       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16130       if (size > 0 && (int) size == size)
16131         {
16132           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16133
16134           if (native_encode_initializer (init, array, size))
16135             {
16136               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16137               return true;
16138             }
16139         }
16140     }
16141   return false;
16142 }
16143
16144 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16145    attribute is the const value of T, where T is an integral constant
16146    variable with static storage duration
16147    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16148
16149 static bool
16150 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16151 {
16152
16153   if (!decl
16154       || (TREE_CODE (decl) != VAR_DECL
16155           && TREE_CODE (decl) != CONST_DECL))
16156     return false;
16157
16158     if (TREE_READONLY (decl)
16159         && ! TREE_THIS_VOLATILE (decl)
16160         && DECL_INITIAL (decl))
16161       /* OK */;
16162     else
16163       return false;
16164
16165   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16166   if (get_AT (var_die, DW_AT_const_value))
16167     return false;
16168
16169   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16170 }
16171
16172 /* Convert the CFI instructions for the current function into a
16173    location list.  This is used for DW_AT_frame_base when we targeting
16174    a dwarf2 consumer that does not support the dwarf3
16175    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16176    expressions.  */
16177
16178 static dw_loc_list_ref
16179 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16180 {
16181   dw_fde_ref fde;
16182   dw_loc_list_ref list, *list_tail;
16183   dw_cfi_ref cfi;
16184   dw_cfa_location last_cfa, next_cfa;
16185   const char *start_label, *last_label, *section;
16186   dw_cfa_location remember;
16187
16188   fde = current_fde ();
16189   gcc_assert (fde != NULL);
16190
16191   section = secname_for_decl (current_function_decl);
16192   list_tail = &list;
16193   list = NULL;
16194
16195   memset (&next_cfa, 0, sizeof (next_cfa));
16196   next_cfa.reg = INVALID_REGNUM;
16197   remember = next_cfa;
16198
16199   start_label = fde->dw_fde_begin;
16200
16201   /* ??? Bald assumption that the CIE opcode list does not contain
16202      advance opcodes.  */
16203   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16204     lookup_cfa_1 (cfi, &next_cfa, &remember);
16205
16206   last_cfa = next_cfa;
16207   last_label = start_label;
16208
16209   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16210     switch (cfi->dw_cfi_opc)
16211       {
16212       case DW_CFA_set_loc:
16213       case DW_CFA_advance_loc1:
16214       case DW_CFA_advance_loc2:
16215       case DW_CFA_advance_loc4:
16216         if (!cfa_equal_p (&last_cfa, &next_cfa))
16217           {
16218             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16219                                        start_label, last_label, section);
16220
16221             list_tail = &(*list_tail)->dw_loc_next;
16222             last_cfa = next_cfa;
16223             start_label = last_label;
16224           }
16225         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16226         break;
16227
16228       case DW_CFA_advance_loc:
16229         /* The encoding is complex enough that we should never emit this.  */
16230         gcc_unreachable ();
16231
16232       default:
16233         lookup_cfa_1 (cfi, &next_cfa, &remember);
16234         break;
16235       }
16236
16237   if (!cfa_equal_p (&last_cfa, &next_cfa))
16238     {
16239       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16240                                  start_label, last_label, section);
16241       list_tail = &(*list_tail)->dw_loc_next;
16242       start_label = last_label;
16243     }
16244
16245   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16246                              start_label, fde->dw_fde_end, section);
16247
16248   if (list && list->dw_loc_next)
16249     gen_llsym (list);
16250
16251   return list;
16252 }
16253
16254 /* Compute a displacement from the "steady-state frame pointer" to the
16255    frame base (often the same as the CFA), and store it in
16256    frame_pointer_fb_offset.  OFFSET is added to the displacement
16257    before the latter is negated.  */
16258
16259 static void
16260 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16261 {
16262   rtx reg, elim;
16263
16264 #ifdef FRAME_POINTER_CFA_OFFSET
16265   reg = frame_pointer_rtx;
16266   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16267 #else
16268   reg = arg_pointer_rtx;
16269   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16270 #endif
16271
16272   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16273   if (GET_CODE (elim) == PLUS)
16274     {
16275       offset += INTVAL (XEXP (elim, 1));
16276       elim = XEXP (elim, 0);
16277     }
16278
16279   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16280                && (elim == hard_frame_pointer_rtx
16281                    || elim == stack_pointer_rtx))
16282               || elim == (frame_pointer_needed
16283                           ? hard_frame_pointer_rtx
16284                           : stack_pointer_rtx));
16285
16286   frame_pointer_fb_offset = -offset;
16287 }
16288
16289 /* Generate a DW_AT_name attribute given some string value to be included as
16290    the value of the attribute.  */
16291
16292 static void
16293 add_name_attribute (dw_die_ref die, const char *name_string)
16294 {
16295   if (name_string != NULL && *name_string != 0)
16296     {
16297       if (demangle_name_func)
16298         name_string = (*demangle_name_func) (name_string);
16299
16300       add_AT_string (die, DW_AT_name, name_string);
16301     }
16302 }
16303
16304 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16305
16306 static void
16307 add_comp_dir_attribute (dw_die_ref die)
16308 {
16309   const char *wd = get_src_pwd ();
16310   char *wd1;
16311
16312   if (wd == NULL)
16313     return;
16314
16315   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16316     {
16317       int wdlen;
16318
16319       wdlen = strlen (wd);
16320       wd1 = GGC_NEWVEC (char, wdlen + 2);
16321       strcpy (wd1, wd);
16322       wd1 [wdlen] = DIR_SEPARATOR;
16323       wd1 [wdlen + 1] = 0;
16324       wd = wd1;
16325     }
16326
16327     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16328 }
16329
16330 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16331    default.  */
16332
16333 static int
16334 lower_bound_default (void)
16335 {
16336   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16337     {
16338     case DW_LANG_C:
16339     case DW_LANG_C89:
16340     case DW_LANG_C99:
16341     case DW_LANG_C_plus_plus:
16342     case DW_LANG_ObjC:
16343     case DW_LANG_ObjC_plus_plus:
16344     case DW_LANG_Java:
16345       return 0;
16346     case DW_LANG_Fortran77:
16347     case DW_LANG_Fortran90:
16348     case DW_LANG_Fortran95:
16349       return 1;
16350     case DW_LANG_UPC:
16351     case DW_LANG_D:
16352     case DW_LANG_Python:
16353       return dwarf_version >= 4 ? 0 : -1;
16354     case DW_LANG_Ada95:
16355     case DW_LANG_Ada83:
16356     case DW_LANG_Cobol74:
16357     case DW_LANG_Cobol85:
16358     case DW_LANG_Pascal83:
16359     case DW_LANG_Modula2:
16360     case DW_LANG_PLI:
16361       return dwarf_version >= 4 ? 1 : -1;
16362     default:
16363       return -1;
16364     }
16365 }
16366
16367 /* Given a tree node describing an array bound (either lower or upper) output
16368    a representation for that bound.  */
16369
16370 static void
16371 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16372 {
16373   switch (TREE_CODE (bound))
16374     {
16375     case ERROR_MARK:
16376       return;
16377
16378     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16379     case INTEGER_CST:
16380       {
16381         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16382         int dflt;
16383
16384         /* Use the default if possible.  */
16385         if (bound_attr == DW_AT_lower_bound
16386             && host_integerp (bound, 0)
16387             && (dflt = lower_bound_default ()) != -1
16388             && tree_low_cst (bound, 0) == dflt)
16389           ;
16390
16391         /* Otherwise represent the bound as an unsigned value with the
16392            precision of its type.  The precision and signedness of the
16393            type will be necessary to re-interpret it unambiguously.  */
16394         else if (prec < HOST_BITS_PER_WIDE_INT)
16395           {
16396             unsigned HOST_WIDE_INT mask
16397               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16398             add_AT_unsigned (subrange_die, bound_attr,
16399                              TREE_INT_CST_LOW (bound) & mask);
16400           }
16401         else if (prec == HOST_BITS_PER_WIDE_INT
16402                  || TREE_INT_CST_HIGH (bound) == 0)
16403           add_AT_unsigned (subrange_die, bound_attr,
16404                            TREE_INT_CST_LOW (bound));
16405         else
16406           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16407                          TREE_INT_CST_LOW (bound));
16408       }
16409       break;
16410
16411     CASE_CONVERT:
16412     case VIEW_CONVERT_EXPR:
16413       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16414       break;
16415
16416     case SAVE_EXPR:
16417       break;
16418
16419     case VAR_DECL:
16420     case PARM_DECL:
16421     case RESULT_DECL:
16422       {
16423         dw_die_ref decl_die = lookup_decl_die (bound);
16424
16425         /* ??? Can this happen, or should the variable have been bound
16426            first?  Probably it can, since I imagine that we try to create
16427            the types of parameters in the order in which they exist in
16428            the list, and won't have created a forward reference to a
16429            later parameter.  */
16430         if (decl_die != NULL)
16431           {
16432             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16433             break;
16434           }
16435       }
16436       /* FALLTHRU */
16437
16438     default:
16439       {
16440         /* Otherwise try to create a stack operation procedure to
16441            evaluate the value of the array bound.  */
16442
16443         dw_die_ref ctx, decl_die;
16444         dw_loc_list_ref list;
16445
16446         list = loc_list_from_tree (bound, 2);
16447         if (list == NULL || single_element_loc_list_p (list))
16448           {
16449             /* If DW_AT_*bound is not a reference nor constant, it is
16450                a DWARF expression rather than location description.
16451                For that loc_list_from_tree (bound, 0) is needed.
16452                If that fails to give a single element list,
16453                fall back to outputting this as a reference anyway.  */
16454             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16455             if (list2 && single_element_loc_list_p (list2))
16456               {
16457                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16458                 break;
16459               }
16460           }
16461         if (list == NULL)
16462           break;
16463
16464         if (current_function_decl == 0)
16465           ctx = comp_unit_die;
16466         else
16467           ctx = lookup_decl_die (current_function_decl);
16468
16469         decl_die = new_die (DW_TAG_variable, ctx, bound);
16470         add_AT_flag (decl_die, DW_AT_artificial, 1);
16471         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16472         add_AT_location_description (decl_die, DW_AT_location, list);
16473         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16474         break;
16475       }
16476     }
16477 }
16478
16479 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16480    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16481    Note that the block of subscript information for an array type also
16482    includes information about the element type of the given array type.  */
16483
16484 static void
16485 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16486 {
16487   unsigned dimension_number;
16488   tree lower, upper;
16489   dw_die_ref subrange_die;
16490
16491   for (dimension_number = 0;
16492        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16493        type = TREE_TYPE (type), dimension_number++)
16494     {
16495       tree domain = TYPE_DOMAIN (type);
16496
16497       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16498         break;
16499
16500       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16501          and (in GNU C only) variable bounds.  Handle all three forms
16502          here.  */
16503       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16504       if (domain)
16505         {
16506           /* We have an array type with specified bounds.  */
16507           lower = TYPE_MIN_VALUE (domain);
16508           upper = TYPE_MAX_VALUE (domain);
16509
16510           /* Define the index type.  */
16511           if (TREE_TYPE (domain))
16512             {
16513               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16514                  TREE_TYPE field.  We can't emit debug info for this
16515                  because it is an unnamed integral type.  */
16516               if (TREE_CODE (domain) == INTEGER_TYPE
16517                   && TYPE_NAME (domain) == NULL_TREE
16518                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16519                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16520                 ;
16521               else
16522                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16523                                     type_die);
16524             }
16525
16526           /* ??? If upper is NULL, the array has unspecified length,
16527              but it does have a lower bound.  This happens with Fortran
16528                dimension arr(N:*)
16529              Since the debugger is definitely going to need to know N
16530              to produce useful results, go ahead and output the lower
16531              bound solo, and hope the debugger can cope.  */
16532
16533           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16534           if (upper)
16535             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16536         }
16537
16538       /* Otherwise we have an array type with an unspecified length.  The
16539          DWARF-2 spec does not say how to handle this; let's just leave out the
16540          bounds.  */
16541     }
16542 }
16543
16544 static void
16545 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16546 {
16547   unsigned size;
16548
16549   switch (TREE_CODE (tree_node))
16550     {
16551     case ERROR_MARK:
16552       size = 0;
16553       break;
16554     case ENUMERAL_TYPE:
16555     case RECORD_TYPE:
16556     case UNION_TYPE:
16557     case QUAL_UNION_TYPE:
16558       size = int_size_in_bytes (tree_node);
16559       break;
16560     case FIELD_DECL:
16561       /* For a data member of a struct or union, the DW_AT_byte_size is
16562          generally given as the number of bytes normally allocated for an
16563          object of the *declared* type of the member itself.  This is true
16564          even for bit-fields.  */
16565       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16566       break;
16567     default:
16568       gcc_unreachable ();
16569     }
16570
16571   /* Note that `size' might be -1 when we get to this point.  If it is, that
16572      indicates that the byte size of the entity in question is variable.  We
16573      have no good way of expressing this fact in Dwarf at the present time,
16574      so just let the -1 pass on through.  */
16575   add_AT_unsigned (die, DW_AT_byte_size, size);
16576 }
16577
16578 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16579    which specifies the distance in bits from the highest order bit of the
16580    "containing object" for the bit-field to the highest order bit of the
16581    bit-field itself.
16582
16583    For any given bit-field, the "containing object" is a hypothetical object
16584    (of some integral or enum type) within which the given bit-field lives.  The
16585    type of this hypothetical "containing object" is always the same as the
16586    declared type of the individual bit-field itself.  The determination of the
16587    exact location of the "containing object" for a bit-field is rather
16588    complicated.  It's handled by the `field_byte_offset' function (above).
16589
16590    Note that it is the size (in bytes) of the hypothetical "containing object"
16591    which will be given in the DW_AT_byte_size attribute for this bit-field.
16592    (See `byte_size_attribute' above).  */
16593
16594 static inline void
16595 add_bit_offset_attribute (dw_die_ref die, tree decl)
16596 {
16597   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16598   tree type = DECL_BIT_FIELD_TYPE (decl);
16599   HOST_WIDE_INT bitpos_int;
16600   HOST_WIDE_INT highest_order_object_bit_offset;
16601   HOST_WIDE_INT highest_order_field_bit_offset;
16602   HOST_WIDE_INT unsigned bit_offset;
16603
16604   /* Must be a field and a bit field.  */
16605   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16606
16607   /* We can't yet handle bit-fields whose offsets are variable, so if we
16608      encounter such things, just return without generating any attribute
16609      whatsoever.  Likewise for variable or too large size.  */
16610   if (! host_integerp (bit_position (decl), 0)
16611       || ! host_integerp (DECL_SIZE (decl), 1))
16612     return;
16613
16614   bitpos_int = int_bit_position (decl);
16615
16616   /* Note that the bit offset is always the distance (in bits) from the
16617      highest-order bit of the "containing object" to the highest-order bit of
16618      the bit-field itself.  Since the "high-order end" of any object or field
16619      is different on big-endian and little-endian machines, the computation
16620      below must take account of these differences.  */
16621   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16622   highest_order_field_bit_offset = bitpos_int;
16623
16624   if (! BYTES_BIG_ENDIAN)
16625     {
16626       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16627       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16628     }
16629
16630   bit_offset
16631     = (! BYTES_BIG_ENDIAN
16632        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16633        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16634
16635   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16636 }
16637
16638 /* For a FIELD_DECL node which represents a bit field, output an attribute
16639    which specifies the length in bits of the given field.  */
16640
16641 static inline void
16642 add_bit_size_attribute (dw_die_ref die, tree decl)
16643 {
16644   /* Must be a field and a bit field.  */
16645   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16646               && DECL_BIT_FIELD_TYPE (decl));
16647
16648   if (host_integerp (DECL_SIZE (decl), 1))
16649     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16650 }
16651
16652 /* If the compiled language is ANSI C, then add a 'prototyped'
16653    attribute, if arg types are given for the parameters of a function.  */
16654
16655 static inline void
16656 add_prototyped_attribute (dw_die_ref die, tree func_type)
16657 {
16658   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16659       && TYPE_ARG_TYPES (func_type) != NULL)
16660     add_AT_flag (die, DW_AT_prototyped, 1);
16661 }
16662
16663 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16664    by looking in either the type declaration or object declaration
16665    equate table.  */
16666
16667 static inline dw_die_ref
16668 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16669 {
16670   dw_die_ref origin_die = NULL;
16671
16672   if (TREE_CODE (origin) != FUNCTION_DECL)
16673     {
16674       /* We may have gotten separated from the block for the inlined
16675          function, if we're in an exception handler or some such; make
16676          sure that the abstract function has been written out.
16677
16678          Doing this for nested functions is wrong, however; functions are
16679          distinct units, and our context might not even be inline.  */
16680       tree fn = origin;
16681
16682       if (TYPE_P (fn))
16683         fn = TYPE_STUB_DECL (fn);
16684
16685       fn = decl_function_context (fn);
16686       if (fn)
16687         dwarf2out_abstract_function (fn);
16688     }
16689
16690   if (DECL_P (origin))
16691     origin_die = lookup_decl_die (origin);
16692   else if (TYPE_P (origin))
16693     origin_die = lookup_type_die (origin);
16694
16695   /* XXX: Functions that are never lowered don't always have correct block
16696      trees (in the case of java, they simply have no block tree, in some other
16697      languages).  For these functions, there is nothing we can really do to
16698      output correct debug info for inlined functions in all cases.  Rather
16699      than die, we'll just produce deficient debug info now, in that we will
16700      have variables without a proper abstract origin.  In the future, when all
16701      functions are lowered, we should re-add a gcc_assert (origin_die)
16702      here.  */
16703
16704   if (origin_die)
16705     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16706   return origin_die;
16707 }
16708
16709 /* We do not currently support the pure_virtual attribute.  */
16710
16711 static inline void
16712 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16713 {
16714   if (DECL_VINDEX (func_decl))
16715     {
16716       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16717
16718       if (host_integerp (DECL_VINDEX (func_decl), 0))
16719         add_AT_loc (die, DW_AT_vtable_elem_location,
16720                     new_loc_descr (DW_OP_constu,
16721                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16722                                    0));
16723
16724       /* GNU extension: Record what type this method came from originally.  */
16725       if (debug_info_level > DINFO_LEVEL_TERSE
16726           && DECL_CONTEXT (func_decl))
16727         add_AT_die_ref (die, DW_AT_containing_type,
16728                         lookup_type_die (DECL_CONTEXT (func_decl)));
16729     }
16730 }
16731 \f
16732 /* Add source coordinate attributes for the given decl.  */
16733
16734 static void
16735 add_src_coords_attributes (dw_die_ref die, tree decl)
16736 {
16737   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16738
16739   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16740   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16741 }
16742
16743 /* Add a DW_AT_name attribute and source coordinate attribute for the
16744    given decl, but only if it actually has a name.  */
16745
16746 static void
16747 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16748 {
16749   tree decl_name;
16750
16751   decl_name = DECL_NAME (decl);
16752   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16753     {
16754       const char *name = dwarf2_name (decl, 0);
16755       if (name)
16756         add_name_attribute (die, name);
16757       if (! DECL_ARTIFICIAL (decl))
16758         add_src_coords_attributes (die, decl);
16759
16760       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16761           && TREE_PUBLIC (decl)
16762           && !DECL_ABSTRACT (decl)
16763           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16764           && !is_fortran ())
16765         {
16766           /* Defer until we have an assembler name set.  */
16767           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16768             {
16769               limbo_die_node *asm_name;
16770
16771               asm_name = GGC_CNEW (limbo_die_node);
16772               asm_name->die = die;
16773               asm_name->created_for = decl;
16774               asm_name->next = deferred_asm_name;
16775               deferred_asm_name = asm_name;
16776             }
16777           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16778             add_AT_string (die, AT_linkage_name,
16779                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16780         }
16781     }
16782
16783 #ifdef VMS_DEBUGGING_INFO
16784   /* Get the function's name, as described by its RTL.  This may be different
16785      from the DECL_NAME name used in the source file.  */
16786   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16787     {
16788       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16789                    XEXP (DECL_RTL (decl), 0));
16790       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16791     }
16792 #endif
16793 }
16794
16795 /* Push a new declaration scope.  */
16796
16797 static void
16798 push_decl_scope (tree scope)
16799 {
16800   VEC_safe_push (tree, gc, decl_scope_table, scope);
16801 }
16802
16803 /* Pop a declaration scope.  */
16804
16805 static inline void
16806 pop_decl_scope (void)
16807 {
16808   VEC_pop (tree, decl_scope_table);
16809 }
16810
16811 /* Return the DIE for the scope that immediately contains this type.
16812    Non-named types get global scope.  Named types nested in other
16813    types get their containing scope if it's open, or global scope
16814    otherwise.  All other types (i.e. function-local named types) get
16815    the current active scope.  */
16816
16817 static dw_die_ref
16818 scope_die_for (tree t, dw_die_ref context_die)
16819 {
16820   dw_die_ref scope_die = NULL;
16821   tree containing_scope;
16822   int i;
16823
16824   /* Non-types always go in the current scope.  */
16825   gcc_assert (TYPE_P (t));
16826
16827   containing_scope = TYPE_CONTEXT (t);
16828
16829   /* Use the containing namespace if it was passed in (for a declaration).  */
16830   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16831     {
16832       if (context_die == lookup_decl_die (containing_scope))
16833         /* OK */;
16834       else
16835         containing_scope = NULL_TREE;
16836     }
16837
16838   /* Ignore function type "scopes" from the C frontend.  They mean that
16839      a tagged type is local to a parmlist of a function declarator, but
16840      that isn't useful to DWARF.  */
16841   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16842     containing_scope = NULL_TREE;
16843
16844   if (containing_scope == NULL_TREE)
16845     scope_die = comp_unit_die;
16846   else if (TYPE_P (containing_scope))
16847     {
16848       /* For types, we can just look up the appropriate DIE.  But
16849          first we check to see if we're in the middle of emitting it
16850          so we know where the new DIE should go.  */
16851       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16852         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16853           break;
16854
16855       if (i < 0)
16856         {
16857           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16858                       || TREE_ASM_WRITTEN (containing_scope));
16859
16860           /* If none of the current dies are suitable, we get file scope.  */
16861           scope_die = comp_unit_die;
16862         }
16863       else
16864         scope_die = lookup_type_die (containing_scope);
16865     }
16866   else
16867     scope_die = context_die;
16868
16869   return scope_die;
16870 }
16871
16872 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16873
16874 static inline int
16875 local_scope_p (dw_die_ref context_die)
16876 {
16877   for (; context_die; context_die = context_die->die_parent)
16878     if (context_die->die_tag == DW_TAG_inlined_subroutine
16879         || context_die->die_tag == DW_TAG_subprogram)
16880       return 1;
16881
16882   return 0;
16883 }
16884
16885 /* Returns nonzero if CONTEXT_DIE is a class.  */
16886
16887 static inline int
16888 class_scope_p (dw_die_ref context_die)
16889 {
16890   return (context_die
16891           && (context_die->die_tag == DW_TAG_structure_type
16892               || context_die->die_tag == DW_TAG_class_type
16893               || context_die->die_tag == DW_TAG_interface_type
16894               || context_die->die_tag == DW_TAG_union_type));
16895 }
16896
16897 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16898    whether or not to treat a DIE in this context as a declaration.  */
16899
16900 static inline int
16901 class_or_namespace_scope_p (dw_die_ref context_die)
16902 {
16903   return (class_scope_p (context_die)
16904           || (context_die && context_die->die_tag == DW_TAG_namespace));
16905 }
16906
16907 /* Many forms of DIEs require a "type description" attribute.  This
16908    routine locates the proper "type descriptor" die for the type given
16909    by 'type', and adds a DW_AT_type attribute below the given die.  */
16910
16911 static void
16912 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16913                     int decl_volatile, dw_die_ref context_die)
16914 {
16915   enum tree_code code  = TREE_CODE (type);
16916   dw_die_ref type_die  = NULL;
16917
16918   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16919      or fixed-point type, use the inner type.  This is because we have no
16920      support for unnamed types in base_type_die.  This can happen if this is
16921      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16922   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16923       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16924     type = TREE_TYPE (type), code = TREE_CODE (type);
16925
16926   if (code == ERROR_MARK
16927       /* Handle a special case.  For functions whose return type is void, we
16928          generate *no* type attribute.  (Note that no object may have type
16929          `void', so this only applies to function return types).  */
16930       || code == VOID_TYPE)
16931     return;
16932
16933   type_die = modified_type_die (type,
16934                                 decl_const || TYPE_READONLY (type),
16935                                 decl_volatile || TYPE_VOLATILE (type),
16936                                 context_die);
16937
16938   if (type_die != NULL)
16939     add_AT_die_ref (object_die, DW_AT_type, type_die);
16940 }
16941
16942 /* Given an object die, add the calling convention attribute for the
16943    function call type.  */
16944 static void
16945 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16946 {
16947   enum dwarf_calling_convention value = DW_CC_normal;
16948
16949   value = ((enum dwarf_calling_convention)
16950            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16951
16952   /* DWARF doesn't provide a way to identify a program's source-level
16953      entry point.  DW_AT_calling_convention attributes are only meant
16954      to describe functions' calling conventions.  However, lacking a
16955      better way to signal the Fortran main program, we use this for the
16956      time being, following existing custom.  */
16957   if (is_fortran ()
16958       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16959     value = DW_CC_program;
16960
16961   /* Only add the attribute if the backend requests it, and
16962      is not DW_CC_normal.  */
16963   if (value && (value != DW_CC_normal))
16964     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16965 }
16966
16967 /* Given a tree pointer to a struct, class, union, or enum type node, return
16968    a pointer to the (string) tag name for the given type, or zero if the type
16969    was declared without a tag.  */
16970
16971 static const char *
16972 type_tag (const_tree type)
16973 {
16974   const char *name = 0;
16975
16976   if (TYPE_NAME (type) != 0)
16977     {
16978       tree t = 0;
16979
16980       /* Find the IDENTIFIER_NODE for the type name.  */
16981       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16982         t = TYPE_NAME (type);
16983
16984       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16985          a TYPE_DECL node, regardless of whether or not a `typedef' was
16986          involved.  */
16987       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16988                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16989         {
16990           /* We want to be extra verbose.  Don't call dwarf_name if
16991              DECL_NAME isn't set.  The default hook for decl_printable_name
16992              doesn't like that, and in this context it's correct to return
16993              0, instead of "<anonymous>" or the like.  */
16994           if (DECL_NAME (TYPE_NAME (type)))
16995             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16996         }
16997
16998       /* Now get the name as a string, or invent one.  */
16999       if (!name && t != 0)
17000         name = IDENTIFIER_POINTER (t);
17001     }
17002
17003   return (name == 0 || *name == '\0') ? 0 : name;
17004 }
17005
17006 /* Return the type associated with a data member, make a special check
17007    for bit field types.  */
17008
17009 static inline tree
17010 member_declared_type (const_tree member)
17011 {
17012   return (DECL_BIT_FIELD_TYPE (member)
17013           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17014 }
17015
17016 /* Get the decl's label, as described by its RTL. This may be different
17017    from the DECL_NAME name used in the source file.  */
17018
17019 #if 0
17020 static const char *
17021 decl_start_label (tree decl)
17022 {
17023   rtx x;
17024   const char *fnname;
17025
17026   x = DECL_RTL (decl);
17027   gcc_assert (MEM_P (x));
17028
17029   x = XEXP (x, 0);
17030   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17031
17032   fnname = XSTR (x, 0);
17033   return fnname;
17034 }
17035 #endif
17036 \f
17037 /* These routines generate the internal representation of the DIE's for
17038    the compilation unit.  Debugging information is collected by walking
17039    the declaration trees passed in from dwarf2out_decl().  */
17040
17041 static void
17042 gen_array_type_die (tree type, dw_die_ref context_die)
17043 {
17044   dw_die_ref scope_die = scope_die_for (type, context_die);
17045   dw_die_ref array_die;
17046
17047   /* GNU compilers represent multidimensional array types as sequences of one
17048      dimensional array types whose element types are themselves array types.
17049      We sometimes squish that down to a single array_type DIE with multiple
17050      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17051      say that we are allowed to do this kind of compression in C, because
17052      there is no difference between an array of arrays and a multidimensional
17053      array.  We don't do this for Ada to remain as close as possible to the
17054      actual representation, which is especially important against the language
17055      flexibilty wrt arrays of variable size.  */
17056
17057   bool collapse_nested_arrays = !is_ada ();
17058   tree element_type;
17059
17060   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17061      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17062   if (TYPE_STRING_FLAG (type)
17063       && TREE_CODE (type) == ARRAY_TYPE
17064       && is_fortran ()
17065       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17066     {
17067       HOST_WIDE_INT size;
17068
17069       array_die = new_die (DW_TAG_string_type, scope_die, type);
17070       add_name_attribute (array_die, type_tag (type));
17071       equate_type_number_to_die (type, array_die);
17072       size = int_size_in_bytes (type);
17073       if (size >= 0)
17074         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17075       else if (TYPE_DOMAIN (type) != NULL_TREE
17076                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17077                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17078         {
17079           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17080           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17081
17082           size = int_size_in_bytes (TREE_TYPE (szdecl));
17083           if (loc && size > 0)
17084             {
17085               add_AT_location_description (array_die, DW_AT_string_length, loc);
17086               if (size != DWARF2_ADDR_SIZE)
17087                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17088             }
17089         }
17090       return;
17091     }
17092
17093   /* ??? The SGI dwarf reader fails for array of array of enum types
17094      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17095      array type comes before the outer array type.  We thus call gen_type_die
17096      before we new_die and must prevent nested array types collapsing for this
17097      target.  */
17098
17099 #ifdef MIPS_DEBUGGING_INFO
17100   gen_type_die (TREE_TYPE (type), context_die);
17101   collapse_nested_arrays = false;
17102 #endif
17103
17104   array_die = new_die (DW_TAG_array_type, scope_die, type);
17105   add_name_attribute (array_die, type_tag (type));
17106   equate_type_number_to_die (type, array_die);
17107
17108   if (TREE_CODE (type) == VECTOR_TYPE)
17109     {
17110       /* The frontend feeds us a representation for the vector as a struct
17111          containing an array.  Pull out the array type.  */
17112       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17113       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17114     }
17115
17116   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17117   if (is_fortran ()
17118       && TREE_CODE (type) == ARRAY_TYPE
17119       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17120       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17121     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17122
17123 #if 0
17124   /* We default the array ordering.  SDB will probably do
17125      the right things even if DW_AT_ordering is not present.  It's not even
17126      an issue until we start to get into multidimensional arrays anyway.  If
17127      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17128      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17129      and when we find out that we need to put these in, we will only do so
17130      for multidimensional arrays.  */
17131   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17132 #endif
17133
17134 #ifdef MIPS_DEBUGGING_INFO
17135   /* The SGI compilers handle arrays of unknown bound by setting
17136      AT_declaration and not emitting any subrange DIEs.  */
17137   if (! TYPE_DOMAIN (type))
17138     add_AT_flag (array_die, DW_AT_declaration, 1);
17139   else
17140 #endif
17141     add_subscript_info (array_die, type, collapse_nested_arrays);
17142
17143   /* Add representation of the type of the elements of this array type and
17144      emit the corresponding DIE if we haven't done it already.  */
17145   element_type = TREE_TYPE (type);
17146   if (collapse_nested_arrays)
17147     while (TREE_CODE (element_type) == ARRAY_TYPE)
17148       {
17149         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17150           break;
17151         element_type = TREE_TYPE (element_type);
17152       }
17153
17154 #ifndef MIPS_DEBUGGING_INFO
17155   gen_type_die (element_type, context_die);
17156 #endif
17157
17158   add_type_attribute (array_die, element_type, 0, 0, context_die);
17159
17160   if (get_AT (array_die, DW_AT_name))
17161     add_pubtype (type, array_die);
17162 }
17163
17164 static dw_loc_descr_ref
17165 descr_info_loc (tree val, tree base_decl)
17166 {
17167   HOST_WIDE_INT size;
17168   dw_loc_descr_ref loc, loc2;
17169   enum dwarf_location_atom op;
17170
17171   if (val == base_decl)
17172     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17173
17174   switch (TREE_CODE (val))
17175     {
17176     CASE_CONVERT:
17177       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17178     case VAR_DECL:
17179       return loc_descriptor_from_tree (val, 0);
17180     case INTEGER_CST:
17181       if (host_integerp (val, 0))
17182         return int_loc_descriptor (tree_low_cst (val, 0));
17183       break;
17184     case INDIRECT_REF:
17185       size = int_size_in_bytes (TREE_TYPE (val));
17186       if (size < 0)
17187         break;
17188       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17189       if (!loc)
17190         break;
17191       if (size == DWARF2_ADDR_SIZE)
17192         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17193       else
17194         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17195       return loc;
17196     case POINTER_PLUS_EXPR:
17197     case PLUS_EXPR:
17198       if (host_integerp (TREE_OPERAND (val, 1), 1)
17199           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17200              < 16384)
17201         {
17202           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17203           if (!loc)
17204             break;
17205           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17206         }
17207       else
17208         {
17209           op = DW_OP_plus;
17210         do_binop:
17211           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17212           if (!loc)
17213             break;
17214           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17215           if (!loc2)
17216             break;
17217           add_loc_descr (&loc, loc2);
17218           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17219         }
17220       return loc;
17221     case MINUS_EXPR:
17222       op = DW_OP_minus;
17223       goto do_binop;
17224     case MULT_EXPR:
17225       op = DW_OP_mul;
17226       goto do_binop;
17227     case EQ_EXPR:
17228       op = DW_OP_eq;
17229       goto do_binop;
17230     case NE_EXPR:
17231       op = DW_OP_ne;
17232       goto do_binop;
17233     default:
17234       break;
17235     }
17236   return NULL;
17237 }
17238
17239 static void
17240 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17241                       tree val, tree base_decl)
17242 {
17243   dw_loc_descr_ref loc;
17244
17245   if (host_integerp (val, 0))
17246     {
17247       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17248       return;
17249     }
17250
17251   loc = descr_info_loc (val, base_decl);
17252   if (!loc)
17253     return;
17254
17255   add_AT_loc (die, attr, loc);
17256 }
17257
17258 /* This routine generates DIE for array with hidden descriptor, details
17259    are filled into *info by a langhook.  */
17260
17261 static void
17262 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17263                           dw_die_ref context_die)
17264 {
17265   dw_die_ref scope_die = scope_die_for (type, context_die);
17266   dw_die_ref array_die;
17267   int dim;
17268
17269   array_die = new_die (DW_TAG_array_type, scope_die, type);
17270   add_name_attribute (array_die, type_tag (type));
17271   equate_type_number_to_die (type, array_die);
17272
17273   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17274   if (is_fortran ()
17275       && info->ndimensions >= 2)
17276     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17277
17278   if (info->data_location)
17279     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17280                           info->base_decl);
17281   if (info->associated)
17282     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17283                           info->base_decl);
17284   if (info->allocated)
17285     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17286                           info->base_decl);
17287
17288   for (dim = 0; dim < info->ndimensions; dim++)
17289     {
17290       dw_die_ref subrange_die
17291         = new_die (DW_TAG_subrange_type, array_die, NULL);
17292
17293       if (info->dimen[dim].lower_bound)
17294         {
17295           /* If it is the default value, omit it.  */
17296           int dflt;
17297
17298           if (host_integerp (info->dimen[dim].lower_bound, 0)
17299               && (dflt = lower_bound_default ()) != -1
17300               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17301             ;
17302           else
17303             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17304                                   info->dimen[dim].lower_bound,
17305                                   info->base_decl);
17306         }
17307       if (info->dimen[dim].upper_bound)
17308         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17309                               info->dimen[dim].upper_bound,
17310                               info->base_decl);
17311       if (info->dimen[dim].stride)
17312         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17313                               info->dimen[dim].stride,
17314                               info->base_decl);
17315     }
17316
17317   gen_type_die (info->element_type, context_die);
17318   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17319
17320   if (get_AT (array_die, DW_AT_name))
17321     add_pubtype (type, array_die);
17322 }
17323
17324 #if 0
17325 static void
17326 gen_entry_point_die (tree decl, dw_die_ref context_die)
17327 {
17328   tree origin = decl_ultimate_origin (decl);
17329   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17330
17331   if (origin != NULL)
17332     add_abstract_origin_attribute (decl_die, origin);
17333   else
17334     {
17335       add_name_and_src_coords_attributes (decl_die, decl);
17336       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17337                           0, 0, context_die);
17338     }
17339
17340   if (DECL_ABSTRACT (decl))
17341     equate_decl_number_to_die (decl, decl_die);
17342   else
17343     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17344 }
17345 #endif
17346
17347 /* Walk through the list of incomplete types again, trying once more to
17348    emit full debugging info for them.  */
17349
17350 static void
17351 retry_incomplete_types (void)
17352 {
17353   int i;
17354
17355   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17356     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17357                                   DINFO_USAGE_DIR_USE))
17358       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17359 }
17360
17361 /* Determine what tag to use for a record type.  */
17362
17363 static enum dwarf_tag
17364 record_type_tag (tree type)
17365 {
17366   if (! lang_hooks.types.classify_record)
17367     return DW_TAG_structure_type;
17368
17369   switch (lang_hooks.types.classify_record (type))
17370     {
17371     case RECORD_IS_STRUCT:
17372       return DW_TAG_structure_type;
17373
17374     case RECORD_IS_CLASS:
17375       return DW_TAG_class_type;
17376
17377     case RECORD_IS_INTERFACE:
17378       if (dwarf_version >= 3 || !dwarf_strict)
17379         return DW_TAG_interface_type;
17380       return DW_TAG_structure_type;
17381
17382     default:
17383       gcc_unreachable ();
17384     }
17385 }
17386
17387 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17388    include all of the information about the enumeration values also. Each
17389    enumerated type name/value is listed as a child of the enumerated type
17390    DIE.  */
17391
17392 static dw_die_ref
17393 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17394 {
17395   dw_die_ref type_die = lookup_type_die (type);
17396
17397   if (type_die == NULL)
17398     {
17399       type_die = new_die (DW_TAG_enumeration_type,
17400                           scope_die_for (type, context_die), type);
17401       equate_type_number_to_die (type, type_die);
17402       add_name_attribute (type_die, type_tag (type));
17403       if ((dwarf_version >= 4 || !dwarf_strict)
17404           && ENUM_IS_SCOPED (type))
17405         add_AT_flag (type_die, DW_AT_enum_class, 1);
17406     }
17407   else if (! TYPE_SIZE (type))
17408     return type_die;
17409   else
17410     remove_AT (type_die, DW_AT_declaration);
17411
17412   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17413      given enum type is incomplete, do not generate the DW_AT_byte_size
17414      attribute or the DW_AT_element_list attribute.  */
17415   if (TYPE_SIZE (type))
17416     {
17417       tree link;
17418
17419       TREE_ASM_WRITTEN (type) = 1;
17420       add_byte_size_attribute (type_die, type);
17421       if (TYPE_STUB_DECL (type) != NULL_TREE)
17422         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17423
17424       /* If the first reference to this type was as the return type of an
17425          inline function, then it may not have a parent.  Fix this now.  */
17426       if (type_die->die_parent == NULL)
17427         add_child_die (scope_die_for (type, context_die), type_die);
17428
17429       for (link = TYPE_VALUES (type);
17430            link != NULL; link = TREE_CHAIN (link))
17431         {
17432           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17433           tree value = TREE_VALUE (link);
17434
17435           add_name_attribute (enum_die,
17436                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17437
17438           if (TREE_CODE (value) == CONST_DECL)
17439             value = DECL_INITIAL (value);
17440
17441           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17442             /* DWARF2 does not provide a way of indicating whether or
17443                not enumeration constants are signed or unsigned.  GDB
17444                always assumes the values are signed, so we output all
17445                values as if they were signed.  That means that
17446                enumeration constants with very large unsigned values
17447                will appear to have negative values in the debugger.  */
17448             add_AT_int (enum_die, DW_AT_const_value,
17449                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17450         }
17451     }
17452   else
17453     add_AT_flag (type_die, DW_AT_declaration, 1);
17454
17455   if (get_AT (type_die, DW_AT_name))
17456     add_pubtype (type, type_die);
17457
17458   return type_die;
17459 }
17460
17461 /* Generate a DIE to represent either a real live formal parameter decl or to
17462    represent just the type of some formal parameter position in some function
17463    type.
17464
17465    Note that this routine is a bit unusual because its argument may be a
17466    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17467    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17468    node.  If it's the former then this function is being called to output a
17469    DIE to represent a formal parameter object (or some inlining thereof).  If
17470    it's the latter, then this function is only being called to output a
17471    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17472    argument type of some subprogram type.
17473    If EMIT_NAME_P is true, name and source coordinate attributes
17474    are emitted.  */
17475
17476 static dw_die_ref
17477 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17478                           dw_die_ref context_die)
17479 {
17480   tree node_or_origin = node ? node : origin;
17481   tree ultimate_origin;
17482   dw_die_ref parm_die
17483     = new_die (DW_TAG_formal_parameter, context_die, node);
17484
17485   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17486     {
17487     case tcc_declaration:
17488       ultimate_origin = decl_ultimate_origin (node_or_origin);
17489       if (node || ultimate_origin)
17490         origin = ultimate_origin;
17491       if (origin != NULL)
17492         add_abstract_origin_attribute (parm_die, origin);
17493       else
17494         {
17495           tree type = TREE_TYPE (node);
17496           if (emit_name_p)
17497             add_name_and_src_coords_attributes (parm_die, node);
17498           if (decl_by_reference_p (node))
17499             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17500                                 context_die);
17501           else
17502             add_type_attribute (parm_die, type,
17503                                 TREE_READONLY (node),
17504                                 TREE_THIS_VOLATILE (node),
17505                                 context_die);
17506           if (DECL_ARTIFICIAL (node))
17507             add_AT_flag (parm_die, DW_AT_artificial, 1);
17508         }
17509
17510       if (node && node != origin)
17511         equate_decl_number_to_die (node, parm_die);
17512       if (! DECL_ABSTRACT (node_or_origin))
17513         add_location_or_const_value_attribute (parm_die, node_or_origin,
17514                                                DW_AT_location);
17515
17516       break;
17517
17518     case tcc_type:
17519       /* We were called with some kind of a ..._TYPE node.  */
17520       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17521       break;
17522
17523     default:
17524       gcc_unreachable ();
17525     }
17526
17527   return parm_die;
17528 }
17529
17530 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17531    children DW_TAG_formal_parameter DIEs representing the arguments of the
17532    parameter pack.
17533
17534    PARM_PACK must be a function parameter pack.
17535    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17536    must point to the subsequent arguments of the function PACK_ARG belongs to.
17537    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17538    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17539    following the last one for which a DIE was generated.  */
17540
17541 static dw_die_ref
17542 gen_formal_parameter_pack_die  (tree parm_pack,
17543                                 tree pack_arg,
17544                                 dw_die_ref subr_die,
17545                                 tree *next_arg)
17546 {
17547   tree arg;
17548   dw_die_ref parm_pack_die;
17549
17550   gcc_assert (parm_pack
17551               && lang_hooks.function_parameter_pack_p (parm_pack)
17552               && subr_die);
17553
17554   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17555   add_src_coords_attributes (parm_pack_die, parm_pack);
17556
17557   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17558     {
17559       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17560                                                                  parm_pack))
17561         break;
17562       gen_formal_parameter_die (arg, NULL,
17563                                 false /* Don't emit name attribute.  */,
17564                                 parm_pack_die);
17565     }
17566   if (next_arg)
17567     *next_arg = arg;
17568   return parm_pack_die;
17569 }
17570
17571 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17572    at the end of an (ANSI prototyped) formal parameters list.  */
17573
17574 static void
17575 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17576 {
17577   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17578 }
17579
17580 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17581    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17582    parameters as specified in some function type specification (except for
17583    those which appear as part of a function *definition*).  */
17584
17585 static void
17586 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17587 {
17588   tree link;
17589   tree formal_type = NULL;
17590   tree first_parm_type;
17591   tree arg;
17592
17593   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17594     {
17595       arg = DECL_ARGUMENTS (function_or_method_type);
17596       function_or_method_type = TREE_TYPE (function_or_method_type);
17597     }
17598   else
17599     arg = NULL_TREE;
17600
17601   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17602
17603   /* Make our first pass over the list of formal parameter types and output a
17604      DW_TAG_formal_parameter DIE for each one.  */
17605   for (link = first_parm_type; link; )
17606     {
17607       dw_die_ref parm_die;
17608
17609       formal_type = TREE_VALUE (link);
17610       if (formal_type == void_type_node)
17611         break;
17612
17613       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17614       parm_die = gen_formal_parameter_die (formal_type, NULL,
17615                                            true /* Emit name attribute.  */,
17616                                            context_die);
17617       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17618            && link == first_parm_type)
17619           || (arg && DECL_ARTIFICIAL (arg)))
17620         add_AT_flag (parm_die, DW_AT_artificial, 1);
17621
17622       link = TREE_CHAIN (link);
17623       if (arg)
17624         arg = TREE_CHAIN (arg);
17625     }
17626
17627   /* If this function type has an ellipsis, add a
17628      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17629   if (formal_type != void_type_node)
17630     gen_unspecified_parameters_die (function_or_method_type, context_die);
17631
17632   /* Make our second (and final) pass over the list of formal parameter types
17633      and output DIEs to represent those types (as necessary).  */
17634   for (link = TYPE_ARG_TYPES (function_or_method_type);
17635        link && TREE_VALUE (link);
17636        link = TREE_CHAIN (link))
17637     gen_type_die (TREE_VALUE (link), context_die);
17638 }
17639
17640 /* We want to generate the DIE for TYPE so that we can generate the
17641    die for MEMBER, which has been defined; we will need to refer back
17642    to the member declaration nested within TYPE.  If we're trying to
17643    generate minimal debug info for TYPE, processing TYPE won't do the
17644    trick; we need to attach the member declaration by hand.  */
17645
17646 static void
17647 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17648 {
17649   gen_type_die (type, context_die);
17650
17651   /* If we're trying to avoid duplicate debug info, we may not have
17652      emitted the member decl for this function.  Emit it now.  */
17653   if (TYPE_STUB_DECL (type)
17654       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17655       && ! lookup_decl_die (member))
17656     {
17657       dw_die_ref type_die;
17658       gcc_assert (!decl_ultimate_origin (member));
17659
17660       push_decl_scope (type);
17661       type_die = lookup_type_die (type);
17662       if (TREE_CODE (member) == FUNCTION_DECL)
17663         gen_subprogram_die (member, type_die);
17664       else if (TREE_CODE (member) == FIELD_DECL)
17665         {
17666           /* Ignore the nameless fields that are used to skip bits but handle
17667              C++ anonymous unions and structs.  */
17668           if (DECL_NAME (member) != NULL_TREE
17669               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17670               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17671             {
17672               gen_type_die (member_declared_type (member), type_die);
17673               gen_field_die (member, type_die);
17674             }
17675         }
17676       else
17677         gen_variable_die (member, NULL_TREE, type_die);
17678
17679       pop_decl_scope ();
17680     }
17681 }
17682
17683 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17684    may later generate inlined and/or out-of-line instances of.  */
17685
17686 static void
17687 dwarf2out_abstract_function (tree decl)
17688 {
17689   dw_die_ref old_die;
17690   tree save_fn;
17691   tree context;
17692   int was_abstract;
17693   htab_t old_decl_loc_table;
17694
17695   /* Make sure we have the actual abstract inline, not a clone.  */
17696   decl = DECL_ORIGIN (decl);
17697
17698   old_die = lookup_decl_die (decl);
17699   if (old_die && get_AT (old_die, DW_AT_inline))
17700     /* We've already generated the abstract instance.  */
17701     return;
17702
17703   /* We can be called while recursively when seeing block defining inlined subroutine
17704      DIE.  Be sure to not clobber the outer location table nor use it or we would
17705      get locations in abstract instantces.  */
17706   old_decl_loc_table = decl_loc_table;
17707   decl_loc_table = NULL;
17708
17709   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17710      we don't get confused by DECL_ABSTRACT.  */
17711   if (debug_info_level > DINFO_LEVEL_TERSE)
17712     {
17713       context = decl_class_context (decl);
17714       if (context)
17715         gen_type_die_for_member
17716           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17717     }
17718
17719   /* Pretend we've just finished compiling this function.  */
17720   save_fn = current_function_decl;
17721   current_function_decl = decl;
17722   push_cfun (DECL_STRUCT_FUNCTION (decl));
17723
17724   was_abstract = DECL_ABSTRACT (decl);
17725   set_decl_abstract_flags (decl, 1);
17726   dwarf2out_decl (decl);
17727   if (! was_abstract)
17728     set_decl_abstract_flags (decl, 0);
17729
17730   current_function_decl = save_fn;
17731   decl_loc_table = old_decl_loc_table;
17732   pop_cfun ();
17733 }
17734
17735 /* Helper function of premark_used_types() which gets called through
17736    htab_traverse.
17737
17738    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17739    marked as unused by prune_unused_types.  */
17740
17741 static int
17742 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17743 {
17744   tree type;
17745   dw_die_ref die;
17746
17747   type = (tree) *slot;
17748   die = lookup_type_die (type);
17749   if (die != NULL)
17750     die->die_perennial_p = 1;
17751   return 1;
17752 }
17753
17754 /* Helper function of premark_types_used_by_global_vars which gets called
17755    through htab_traverse.
17756
17757    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17758    marked as unused by prune_unused_types. The DIE of the type is marked
17759    only if the global variable using the type will actually be emitted.  */
17760
17761 static int
17762 premark_types_used_by_global_vars_helper (void **slot,
17763                                           void *data ATTRIBUTE_UNUSED)
17764 {
17765   struct types_used_by_vars_entry *entry;
17766   dw_die_ref die;
17767
17768   entry = (struct types_used_by_vars_entry *) *slot;
17769   gcc_assert (entry->type != NULL
17770               && entry->var_decl != NULL);
17771   die = lookup_type_die (entry->type);
17772   if (die)
17773     {
17774       /* Ask cgraph if the global variable really is to be emitted.
17775          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17776       struct varpool_node *node = varpool_node (entry->var_decl);
17777       if (node->needed)
17778         {
17779           die->die_perennial_p = 1;
17780           /* Keep the parent DIEs as well.  */
17781           while ((die = die->die_parent) && die->die_perennial_p == 0)
17782             die->die_perennial_p = 1;
17783         }
17784     }
17785   return 1;
17786 }
17787
17788 /* Mark all members of used_types_hash as perennial.  */
17789
17790 static void
17791 premark_used_types (void)
17792 {
17793   if (cfun && cfun->used_types_hash)
17794     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17795 }
17796
17797 /* Mark all members of types_used_by_vars_entry as perennial.  */
17798
17799 static void
17800 premark_types_used_by_global_vars (void)
17801 {
17802   if (types_used_by_vars_hash)
17803     htab_traverse (types_used_by_vars_hash,
17804                    premark_types_used_by_global_vars_helper, NULL);
17805 }
17806
17807 /* Generate a DIE to represent a declared function (either file-scope or
17808    block-local).  */
17809
17810 static void
17811 gen_subprogram_die (tree decl, dw_die_ref context_die)
17812 {
17813   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17814   tree origin = decl_ultimate_origin (decl);
17815   dw_die_ref subr_die;
17816   tree fn_arg_types;
17817   tree outer_scope;
17818   dw_die_ref old_die = lookup_decl_die (decl);
17819   int declaration = (current_function_decl != decl
17820                      || class_or_namespace_scope_p (context_die));
17821
17822   premark_used_types ();
17823
17824   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17825      started to generate the abstract instance of an inline, decided to output
17826      its containing class, and proceeded to emit the declaration of the inline
17827      from the member list for the class.  If so, DECLARATION takes priority;
17828      we'll get back to the abstract instance when done with the class.  */
17829
17830   /* The class-scope declaration DIE must be the primary DIE.  */
17831   if (origin && declaration && class_or_namespace_scope_p (context_die))
17832     {
17833       origin = NULL;
17834       gcc_assert (!old_die);
17835     }
17836
17837   /* Now that the C++ front end lazily declares artificial member fns, we
17838      might need to retrofit the declaration into its class.  */
17839   if (!declaration && !origin && !old_die
17840       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17841       && !class_or_namespace_scope_p (context_die)
17842       && debug_info_level > DINFO_LEVEL_TERSE)
17843     old_die = force_decl_die (decl);
17844
17845   if (origin != NULL)
17846     {
17847       gcc_assert (!declaration || local_scope_p (context_die));
17848
17849       /* Fixup die_parent for the abstract instance of a nested
17850          inline function.  */
17851       if (old_die && old_die->die_parent == NULL)
17852         add_child_die (context_die, old_die);
17853
17854       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17855       add_abstract_origin_attribute (subr_die, origin);
17856     }
17857   else if (old_die)
17858     {
17859       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17860       struct dwarf_file_data * file_index = lookup_filename (s.file);
17861
17862       if (!get_AT_flag (old_die, DW_AT_declaration)
17863           /* We can have a normal definition following an inline one in the
17864              case of redefinition of GNU C extern inlines.
17865              It seems reasonable to use AT_specification in this case.  */
17866           && !get_AT (old_die, DW_AT_inline))
17867         {
17868           /* Detect and ignore this case, where we are trying to output
17869              something we have already output.  */
17870           return;
17871         }
17872
17873       /* If the definition comes from the same place as the declaration,
17874          maybe use the old DIE.  We always want the DIE for this function
17875          that has the *_pc attributes to be under comp_unit_die so the
17876          debugger can find it.  We also need to do this for abstract
17877          instances of inlines, since the spec requires the out-of-line copy
17878          to have the same parent.  For local class methods, this doesn't
17879          apply; we just use the old DIE.  */
17880       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17881           && (DECL_ARTIFICIAL (decl)
17882               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17883                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17884                       == (unsigned) s.line))))
17885         {
17886           subr_die = old_die;
17887
17888           /* Clear out the declaration attribute and the formal parameters.
17889              Do not remove all children, because it is possible that this
17890              declaration die was forced using force_decl_die(). In such
17891              cases die that forced declaration die (e.g. TAG_imported_module)
17892              is one of the children that we do not want to remove.  */
17893           remove_AT (subr_die, DW_AT_declaration);
17894           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17895         }
17896       else
17897         {
17898           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17899           add_AT_specification (subr_die, old_die);
17900           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17901             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17902           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17903             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17904         }
17905     }
17906   else
17907     {
17908       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17909
17910       if (TREE_PUBLIC (decl))
17911         add_AT_flag (subr_die, DW_AT_external, 1);
17912
17913       add_name_and_src_coords_attributes (subr_die, decl);
17914       if (debug_info_level > DINFO_LEVEL_TERSE)
17915         {
17916           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17917           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17918                               0, 0, context_die);
17919         }
17920
17921       add_pure_or_virtual_attribute (subr_die, decl);
17922       if (DECL_ARTIFICIAL (decl))
17923         add_AT_flag (subr_die, DW_AT_artificial, 1);
17924
17925       if (TREE_PROTECTED (decl))
17926         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17927       else if (TREE_PRIVATE (decl))
17928         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17929     }
17930
17931   if (declaration)
17932     {
17933       if (!old_die || !get_AT (old_die, DW_AT_inline))
17934         {
17935           add_AT_flag (subr_die, DW_AT_declaration, 1);
17936
17937           /* If this is an explicit function declaration then generate
17938              a DW_AT_explicit attribute.  */
17939           if (lang_hooks.decls.function_decl_explicit_p (decl)
17940               && (dwarf_version >= 3 || !dwarf_strict))
17941             add_AT_flag (subr_die, DW_AT_explicit, 1);
17942
17943           /* The first time we see a member function, it is in the context of
17944              the class to which it belongs.  We make sure of this by emitting
17945              the class first.  The next time is the definition, which is
17946              handled above.  The two may come from the same source text.
17947
17948              Note that force_decl_die() forces function declaration die. It is
17949              later reused to represent definition.  */
17950           equate_decl_number_to_die (decl, subr_die);
17951         }
17952     }
17953   else if (DECL_ABSTRACT (decl))
17954     {
17955       if (DECL_DECLARED_INLINE_P (decl))
17956         {
17957           if (cgraph_function_possibly_inlined_p (decl))
17958             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17959           else
17960             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17961         }
17962       else
17963         {
17964           if (cgraph_function_possibly_inlined_p (decl))
17965             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17966           else
17967             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17968         }
17969
17970       if (DECL_DECLARED_INLINE_P (decl)
17971           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17972         add_AT_flag (subr_die, DW_AT_artificial, 1);
17973
17974       equate_decl_number_to_die (decl, subr_die);
17975     }
17976   else if (!DECL_EXTERNAL (decl))
17977     {
17978       HOST_WIDE_INT cfa_fb_offset;
17979
17980       if (!old_die || !get_AT (old_die, DW_AT_inline))
17981         equate_decl_number_to_die (decl, subr_die);
17982
17983       if (!flag_reorder_blocks_and_partition)
17984         {
17985           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17986                                        current_function_funcdef_no);
17987           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17988           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17989                                        current_function_funcdef_no);
17990           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17991
17992           add_pubname (decl, subr_die);
17993           add_arange (decl, subr_die);
17994         }
17995       else
17996         {  /* Do nothing for now; maybe need to duplicate die, one for
17997               hot section and one for cold section, then use the hot/cold
17998               section begin/end labels to generate the aranges...  */
17999           /*
18000             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18001             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18002             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18003             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18004
18005             add_pubname (decl, subr_die);
18006             add_arange (decl, subr_die);
18007             add_arange (decl, subr_die);
18008            */
18009         }
18010
18011 #ifdef MIPS_DEBUGGING_INFO
18012       /* Add a reference to the FDE for this routine.  */
18013       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18014 #endif
18015
18016       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18017
18018       /* We define the "frame base" as the function's CFA.  This is more
18019          convenient for several reasons: (1) It's stable across the prologue
18020          and epilogue, which makes it better than just a frame pointer,
18021          (2) With dwarf3, there exists a one-byte encoding that allows us
18022          to reference the .debug_frame data by proxy, but failing that,
18023          (3) We can at least reuse the code inspection and interpretation
18024          code that determines the CFA position at various points in the
18025          function.  */
18026       if (dwarf_version >= 3)
18027         {
18028           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18029           add_AT_loc (subr_die, DW_AT_frame_base, op);
18030         }
18031       else
18032         {
18033           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18034           if (list->dw_loc_next)
18035             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18036           else
18037             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18038         }
18039
18040       /* Compute a displacement from the "steady-state frame pointer" to
18041          the CFA.  The former is what all stack slots and argument slots
18042          will reference in the rtl; the later is what we've told the
18043          debugger about.  We'll need to adjust all frame_base references
18044          by this displacement.  */
18045       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18046
18047       if (cfun->static_chain_decl)
18048         add_AT_location_description (subr_die, DW_AT_static_link,
18049                  loc_list_from_tree (cfun->static_chain_decl, 2));
18050     }
18051
18052   /* Generate child dies for template paramaters.  */
18053   if (debug_info_level > DINFO_LEVEL_TERSE)
18054     gen_generic_params_dies (decl);
18055
18056   /* Now output descriptions of the arguments for this function. This gets
18057      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18058      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18059      `...' at the end of the formal parameter list.  In order to find out if
18060      there was a trailing ellipsis or not, we must instead look at the type
18061      associated with the FUNCTION_DECL.  This will be a node of type
18062      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18063      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18064      an ellipsis at the end.  */
18065
18066   /* In the case where we are describing a mere function declaration, all we
18067      need to do here (and all we *can* do here) is to describe the *types* of
18068      its formal parameters.  */
18069   if (debug_info_level <= DINFO_LEVEL_TERSE)
18070     ;
18071   else if (declaration)
18072     gen_formal_types_die (decl, subr_die);
18073   else
18074     {
18075       /* Generate DIEs to represent all known formal parameters.  */
18076       tree parm = DECL_ARGUMENTS (decl);
18077       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18078       tree generic_decl_parm = generic_decl
18079                                 ? DECL_ARGUMENTS (generic_decl)
18080                                 : NULL;
18081
18082       /* Now we want to walk the list of parameters of the function and
18083          emit their relevant DIEs.
18084
18085          We consider the case of DECL being an instance of a generic function
18086          as well as it being a normal function.
18087
18088          If DECL is an instance of a generic function we walk the
18089          parameters of the generic function declaration _and_ the parameters of
18090          DECL itself. This is useful because we want to emit specific DIEs for
18091          function parameter packs and those are declared as part of the
18092          generic function declaration. In that particular case,
18093          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18094          That DIE has children DIEs representing the set of arguments
18095          of the pack. Note that the set of pack arguments can be empty.
18096          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18097          children DIE.
18098
18099          Otherwise, we just consider the parameters of DECL.  */
18100       while (generic_decl_parm || parm)
18101         {
18102           if (generic_decl_parm
18103               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18104             gen_formal_parameter_pack_die (generic_decl_parm,
18105                                            parm, subr_die,
18106                                            &parm);
18107           else if (parm)
18108             {
18109               gen_decl_die (parm, NULL, subr_die);
18110               parm = TREE_CHAIN (parm);
18111             }
18112
18113           if (generic_decl_parm)
18114             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18115         }
18116
18117       /* Decide whether we need an unspecified_parameters DIE at the end.
18118          There are 2 more cases to do this for: 1) the ansi ... declaration -
18119          this is detectable when the end of the arg list is not a
18120          void_type_node 2) an unprototyped function declaration (not a
18121          definition).  This just means that we have no info about the
18122          parameters at all.  */
18123       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18124       if (fn_arg_types != NULL)
18125         {
18126           /* This is the prototyped case, check for....  */
18127           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18128             gen_unspecified_parameters_die (decl, subr_die);
18129         }
18130       else if (DECL_INITIAL (decl) == NULL_TREE)
18131         gen_unspecified_parameters_die (decl, subr_die);
18132     }
18133
18134   /* Output Dwarf info for all of the stuff within the body of the function
18135      (if it has one - it may be just a declaration).  */
18136   outer_scope = DECL_INITIAL (decl);
18137
18138   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18139      a function.  This BLOCK actually represents the outermost binding contour
18140      for the function, i.e. the contour in which the function's formal
18141      parameters and labels get declared. Curiously, it appears that the front
18142      end doesn't actually put the PARM_DECL nodes for the current function onto
18143      the BLOCK_VARS list for this outer scope, but are strung off of the
18144      DECL_ARGUMENTS list for the function instead.
18145
18146      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18147      the LABEL_DECL nodes for the function however, and we output DWARF info
18148      for those in decls_for_scope.  Just within the `outer_scope' there will be
18149      a BLOCK node representing the function's outermost pair of curly braces,
18150      and any blocks used for the base and member initializers of a C++
18151      constructor function.  */
18152   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18153     {
18154       /* Emit a DW_TAG_variable DIE for a named return value.  */
18155       if (DECL_NAME (DECL_RESULT (decl)))
18156         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18157
18158       current_function_has_inlines = 0;
18159       decls_for_scope (outer_scope, subr_die, 0);
18160
18161 #if 0 && defined (MIPS_DEBUGGING_INFO)
18162       if (current_function_has_inlines)
18163         {
18164           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18165           if (! comp_unit_has_inlines)
18166             {
18167               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18168               comp_unit_has_inlines = 1;
18169             }
18170         }
18171 #endif
18172     }
18173   /* Add the calling convention attribute if requested.  */
18174   add_calling_convention_attribute (subr_die, decl);
18175
18176 }
18177
18178 /* Returns a hash value for X (which really is a die_struct).  */
18179
18180 static hashval_t
18181 common_block_die_table_hash (const void *x)
18182 {
18183   const_dw_die_ref d = (const_dw_die_ref) x;
18184   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18185 }
18186
18187 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18188    as decl_id and die_parent of die_struct Y.  */
18189
18190 static int
18191 common_block_die_table_eq (const void *x, const void *y)
18192 {
18193   const_dw_die_ref d = (const_dw_die_ref) x;
18194   const_dw_die_ref e = (const_dw_die_ref) y;
18195   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18196 }
18197
18198 /* Generate a DIE to represent a declared data object.
18199    Either DECL or ORIGIN must be non-null.  */
18200
18201 static void
18202 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18203 {
18204   HOST_WIDE_INT off;
18205   tree com_decl;
18206   tree decl_or_origin = decl ? decl : origin;
18207   tree ultimate_origin;
18208   dw_die_ref var_die;
18209   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18210   dw_die_ref origin_die;
18211   int declaration = (DECL_EXTERNAL (decl_or_origin)
18212                      || class_or_namespace_scope_p (context_die));
18213
18214   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18215   if (decl || ultimate_origin)
18216     origin = ultimate_origin;
18217   com_decl = fortran_common (decl_or_origin, &off);
18218
18219   /* Symbol in common gets emitted as a child of the common block, in the form
18220      of a data member.  */
18221   if (com_decl)
18222     {
18223       dw_die_ref com_die;
18224       dw_loc_list_ref loc;
18225       die_node com_die_arg;
18226
18227       var_die = lookup_decl_die (decl_or_origin);
18228       if (var_die)
18229         {
18230           if (get_AT (var_die, DW_AT_location) == NULL)
18231             {
18232               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18233               if (loc)
18234                 {
18235                   if (off)
18236                     {
18237                       /* Optimize the common case.  */
18238                       if (single_element_loc_list_p (loc)
18239                           && loc->expr->dw_loc_opc == DW_OP_addr
18240                           && loc->expr->dw_loc_next == NULL
18241                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18242                              == SYMBOL_REF)
18243                         loc->expr->dw_loc_oprnd1.v.val_addr
18244                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18245                         else
18246                           loc_list_plus_const (loc, off);
18247                     }
18248                   add_AT_location_description (var_die, DW_AT_location, loc);
18249                   remove_AT (var_die, DW_AT_declaration);
18250                 }
18251             }
18252           return;
18253         }
18254
18255       if (common_block_die_table == NULL)
18256         common_block_die_table
18257           = htab_create_ggc (10, common_block_die_table_hash,
18258                              common_block_die_table_eq, NULL);
18259
18260       com_die_arg.decl_id = DECL_UID (com_decl);
18261       com_die_arg.die_parent = context_die;
18262       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18263       loc = loc_list_from_tree (com_decl, 2);
18264       if (com_die == NULL)
18265         {
18266           const char *cnam
18267             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18268           void **slot;
18269
18270           com_die = new_die (DW_TAG_common_block, context_die, decl);
18271           add_name_and_src_coords_attributes (com_die, com_decl);
18272           if (loc)
18273             {
18274               add_AT_location_description (com_die, DW_AT_location, loc);
18275               /* Avoid sharing the same loc descriptor between
18276                  DW_TAG_common_block and DW_TAG_variable.  */
18277               loc = loc_list_from_tree (com_decl, 2);
18278             }
18279           else if (DECL_EXTERNAL (decl))
18280             add_AT_flag (com_die, DW_AT_declaration, 1);
18281           add_pubname_string (cnam, com_die); /* ??? needed? */
18282           com_die->decl_id = DECL_UID (com_decl);
18283           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18284           *slot = (void *) com_die;
18285         }
18286       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18287         {
18288           add_AT_location_description (com_die, DW_AT_location, loc);
18289           loc = loc_list_from_tree (com_decl, 2);
18290           remove_AT (com_die, DW_AT_declaration);
18291         }
18292       var_die = new_die (DW_TAG_variable, com_die, decl);
18293       add_name_and_src_coords_attributes (var_die, decl);
18294       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18295                           TREE_THIS_VOLATILE (decl), context_die);
18296       add_AT_flag (var_die, DW_AT_external, 1);
18297       if (loc)
18298         {
18299           if (off)
18300             {
18301               /* Optimize the common case.  */
18302               if (single_element_loc_list_p (loc)
18303                   && loc->expr->dw_loc_opc == DW_OP_addr
18304                   && loc->expr->dw_loc_next == NULL
18305                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18306                 loc->expr->dw_loc_oprnd1.v.val_addr
18307                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18308               else
18309                 loc_list_plus_const (loc, off);
18310             }
18311           add_AT_location_description (var_die, DW_AT_location, loc);
18312         }
18313       else if (DECL_EXTERNAL (decl))
18314         add_AT_flag (var_die, DW_AT_declaration, 1);
18315       equate_decl_number_to_die (decl, var_die);
18316       return;
18317     }
18318
18319   /* If the compiler emitted a definition for the DECL declaration
18320      and if we already emitted a DIE for it, don't emit a second
18321      DIE for it again. Allow re-declarations of DECLs that are
18322      inside functions, though.  */
18323   if (old_die && declaration && !local_scope_p (context_die))
18324     return;
18325
18326   /* For static data members, the declaration in the class is supposed
18327      to have DW_TAG_member tag; the specification should still be
18328      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18329   if (declaration && class_scope_p (context_die))
18330     var_die = new_die (DW_TAG_member, context_die, decl);
18331   else
18332     var_die = new_die (DW_TAG_variable, context_die, decl);
18333
18334   origin_die = NULL;
18335   if (origin != NULL)
18336     origin_die = add_abstract_origin_attribute (var_die, origin);
18337
18338   /* Loop unrolling can create multiple blocks that refer to the same
18339      static variable, so we must test for the DW_AT_declaration flag.
18340
18341      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18342      copy decls and set the DECL_ABSTRACT flag on them instead of
18343      sharing them.
18344
18345      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18346
18347      ??? The declare_in_namespace support causes us to get two DIEs for one
18348      variable, both of which are declarations.  We want to avoid considering
18349      one to be a specification, so we must test that this DIE is not a
18350      declaration.  */
18351   else if (old_die && TREE_STATIC (decl) && ! declaration
18352            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18353     {
18354       /* This is a definition of a C++ class level static.  */
18355       add_AT_specification (var_die, old_die);
18356       if (DECL_NAME (decl))
18357         {
18358           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18359           struct dwarf_file_data * file_index = lookup_filename (s.file);
18360
18361           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18362             add_AT_file (var_die, DW_AT_decl_file, file_index);
18363
18364           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18365             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18366         }
18367     }
18368   else
18369     {
18370       tree type = TREE_TYPE (decl);
18371
18372       add_name_and_src_coords_attributes (var_die, decl);
18373       if (decl_by_reference_p (decl))
18374         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18375       else
18376         add_type_attribute (var_die, type, TREE_READONLY (decl),
18377                             TREE_THIS_VOLATILE (decl), context_die);
18378
18379       if (TREE_PUBLIC (decl))
18380         add_AT_flag (var_die, DW_AT_external, 1);
18381
18382       if (DECL_ARTIFICIAL (decl))
18383         add_AT_flag (var_die, DW_AT_artificial, 1);
18384
18385       if (TREE_PROTECTED (decl))
18386         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18387       else if (TREE_PRIVATE (decl))
18388         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18389     }
18390
18391   if (declaration)
18392     add_AT_flag (var_die, DW_AT_declaration, 1);
18393
18394   if (decl && (DECL_ABSTRACT (decl) || declaration))
18395     equate_decl_number_to_die (decl, var_die);
18396
18397   if (! declaration
18398       && (! DECL_ABSTRACT (decl_or_origin)
18399           /* Local static vars are shared between all clones/inlines,
18400              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18401              already set.  */
18402           || (TREE_CODE (decl_or_origin) == VAR_DECL
18403               && TREE_STATIC (decl_or_origin)
18404               && DECL_RTL_SET_P (decl_or_origin)))
18405       /* When abstract origin already has DW_AT_location attribute, no need
18406          to add it again.  */
18407       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18408     {
18409       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18410           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18411         defer_location (decl_or_origin, var_die);
18412       else
18413         add_location_or_const_value_attribute (var_die,
18414                                                decl_or_origin,
18415                                                DW_AT_location);
18416       add_pubname (decl_or_origin, var_die);
18417     }
18418   else
18419     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18420 }
18421
18422 /* Generate a DIE to represent a named constant.  */
18423
18424 static void
18425 gen_const_die (tree decl, dw_die_ref context_die)
18426 {
18427   dw_die_ref const_die;
18428   tree type = TREE_TYPE (decl);
18429
18430   const_die = new_die (DW_TAG_constant, context_die, decl);
18431   add_name_and_src_coords_attributes (const_die, decl);
18432   add_type_attribute (const_die, type, 1, 0, context_die);
18433   if (TREE_PUBLIC (decl))
18434     add_AT_flag (const_die, DW_AT_external, 1);
18435   if (DECL_ARTIFICIAL (decl))
18436     add_AT_flag (const_die, DW_AT_artificial, 1);
18437   tree_add_const_value_attribute_for_decl (const_die, decl);
18438 }
18439
18440 /* Generate a DIE to represent a label identifier.  */
18441
18442 static void
18443 gen_label_die (tree decl, dw_die_ref context_die)
18444 {
18445   tree origin = decl_ultimate_origin (decl);
18446   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18447   rtx insn;
18448   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18449
18450   if (origin != NULL)
18451     add_abstract_origin_attribute (lbl_die, origin);
18452   else
18453     add_name_and_src_coords_attributes (lbl_die, decl);
18454
18455   if (DECL_ABSTRACT (decl))
18456     equate_decl_number_to_die (decl, lbl_die);
18457   else
18458     {
18459       insn = DECL_RTL_IF_SET (decl);
18460
18461       /* Deleted labels are programmer specified labels which have been
18462          eliminated because of various optimizations.  We still emit them
18463          here so that it is possible to put breakpoints on them.  */
18464       if (insn
18465           && (LABEL_P (insn)
18466               || ((NOTE_P (insn)
18467                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18468         {
18469           /* When optimization is enabled (via -O) some parts of the compiler
18470              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18471              represent source-level labels which were explicitly declared by
18472              the user.  This really shouldn't be happening though, so catch
18473              it if it ever does happen.  */
18474           gcc_assert (!INSN_DELETED_P (insn));
18475
18476           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18477           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18478         }
18479     }
18480 }
18481
18482 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18483    attributes to the DIE for a block STMT, to describe where the inlined
18484    function was called from.  This is similar to add_src_coords_attributes.  */
18485
18486 static inline void
18487 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18488 {
18489   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18490
18491   if (dwarf_version >= 3 || !dwarf_strict)
18492     {
18493       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18494       add_AT_unsigned (die, DW_AT_call_line, s.line);
18495     }
18496 }
18497
18498
18499 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18500    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18501
18502 static inline void
18503 add_high_low_attributes (tree stmt, dw_die_ref die)
18504 {
18505   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18506
18507   if (BLOCK_FRAGMENT_CHAIN (stmt)
18508       && (dwarf_version >= 3 || !dwarf_strict))
18509     {
18510       tree chain;
18511
18512       if (inlined_function_outer_scope_p (stmt))
18513         {
18514           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18515                                        BLOCK_NUMBER (stmt));
18516           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18517         }
18518
18519       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18520
18521       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18522       do
18523         {
18524           add_ranges (chain);
18525           chain = BLOCK_FRAGMENT_CHAIN (chain);
18526         }
18527       while (chain);
18528       add_ranges (NULL);
18529     }
18530   else
18531     {
18532       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18533                                    BLOCK_NUMBER (stmt));
18534       add_AT_lbl_id (die, DW_AT_low_pc, label);
18535       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18536                                    BLOCK_NUMBER (stmt));
18537       add_AT_lbl_id (die, DW_AT_high_pc, label);
18538     }
18539 }
18540
18541 /* Generate a DIE for a lexical block.  */
18542
18543 static void
18544 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18545 {
18546   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18547
18548   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18549     add_high_low_attributes (stmt, stmt_die);
18550
18551   decls_for_scope (stmt, stmt_die, depth);
18552 }
18553
18554 /* Generate a DIE for an inlined subprogram.  */
18555
18556 static void
18557 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18558 {
18559   tree decl;
18560
18561   /* The instance of function that is effectively being inlined shall not
18562      be abstract.  */
18563   gcc_assert (! BLOCK_ABSTRACT (stmt));
18564
18565   decl = block_ultimate_origin (stmt);
18566
18567   /* Emit info for the abstract instance first, if we haven't yet.  We
18568      must emit this even if the block is abstract, otherwise when we
18569      emit the block below (or elsewhere), we may end up trying to emit
18570      a die whose origin die hasn't been emitted, and crashing.  */
18571   dwarf2out_abstract_function (decl);
18572
18573   if (! BLOCK_ABSTRACT (stmt))
18574     {
18575       dw_die_ref subr_die
18576         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18577
18578       add_abstract_origin_attribute (subr_die, decl);
18579       if (TREE_ASM_WRITTEN (stmt))
18580         add_high_low_attributes (stmt, subr_die);
18581       add_call_src_coords_attributes (stmt, subr_die);
18582
18583       decls_for_scope (stmt, subr_die, depth);
18584       current_function_has_inlines = 1;
18585     }
18586 }
18587
18588 /* Generate a DIE for a field in a record, or structure.  */
18589
18590 static void
18591 gen_field_die (tree decl, dw_die_ref context_die)
18592 {
18593   dw_die_ref decl_die;
18594
18595   if (TREE_TYPE (decl) == error_mark_node)
18596     return;
18597
18598   decl_die = new_die (DW_TAG_member, context_die, decl);
18599   add_name_and_src_coords_attributes (decl_die, decl);
18600   add_type_attribute (decl_die, member_declared_type (decl),
18601                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18602                       context_die);
18603
18604   if (DECL_BIT_FIELD_TYPE (decl))
18605     {
18606       add_byte_size_attribute (decl_die, decl);
18607       add_bit_size_attribute (decl_die, decl);
18608       add_bit_offset_attribute (decl_die, decl);
18609     }
18610
18611   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18612     add_data_member_location_attribute (decl_die, decl);
18613
18614   if (DECL_ARTIFICIAL (decl))
18615     add_AT_flag (decl_die, DW_AT_artificial, 1);
18616
18617   if (TREE_PROTECTED (decl))
18618     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18619   else if (TREE_PRIVATE (decl))
18620     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18621
18622   /* Equate decl number to die, so that we can look up this decl later on.  */
18623   equate_decl_number_to_die (decl, decl_die);
18624 }
18625
18626 #if 0
18627 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18628    Use modified_type_die instead.
18629    We keep this code here just in case these types of DIEs may be needed to
18630    represent certain things in other languages (e.g. Pascal) someday.  */
18631
18632 static void
18633 gen_pointer_type_die (tree type, dw_die_ref context_die)
18634 {
18635   dw_die_ref ptr_die
18636     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18637
18638   equate_type_number_to_die (type, ptr_die);
18639   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18640   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18641 }
18642
18643 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18644    Use modified_type_die instead.
18645    We keep this code here just in case these types of DIEs may be needed to
18646    represent certain things in other languages (e.g. Pascal) someday.  */
18647
18648 static void
18649 gen_reference_type_die (tree type, dw_die_ref context_die)
18650 {
18651   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18652
18653   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18654     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18655   else
18656     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18657
18658   equate_type_number_to_die (type, ref_die);
18659   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18660   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18661 }
18662 #endif
18663
18664 /* Generate a DIE for a pointer to a member type.  */
18665
18666 static void
18667 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18668 {
18669   dw_die_ref ptr_die
18670     = new_die (DW_TAG_ptr_to_member_type,
18671                scope_die_for (type, context_die), type);
18672
18673   equate_type_number_to_die (type, ptr_die);
18674   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18675                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18676   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18677 }
18678
18679 /* Generate the DIE for the compilation unit.  */
18680
18681 static dw_die_ref
18682 gen_compile_unit_die (const char *filename)
18683 {
18684   dw_die_ref die;
18685   char producer[250];
18686   const char *language_string = lang_hooks.name;
18687   int language;
18688
18689   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18690
18691   if (filename)
18692     {
18693       add_name_attribute (die, filename);
18694       /* Don't add cwd for <built-in>.  */
18695       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18696         add_comp_dir_attribute (die);
18697     }
18698
18699   sprintf (producer, "%s %s", language_string, version_string);
18700
18701 #ifdef MIPS_DEBUGGING_INFO
18702   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18703      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18704      not appear in the producer string, the debugger reaches the conclusion
18705      that the object file is stripped and has no debugging information.
18706      To get the MIPS/SGI debugger to believe that there is debugging
18707      information in the object file, we add a -g to the producer string.  */
18708   if (debug_info_level > DINFO_LEVEL_TERSE)
18709     strcat (producer, " -g");
18710 #endif
18711
18712   add_AT_string (die, DW_AT_producer, producer);
18713
18714   language = DW_LANG_C89;
18715   if (strcmp (language_string, "GNU C++") == 0)
18716     language = DW_LANG_C_plus_plus;
18717   else if (strcmp (language_string, "GNU F77") == 0)
18718     language = DW_LANG_Fortran77;
18719   else if (strcmp (language_string, "GNU Pascal") == 0)
18720     language = DW_LANG_Pascal83;
18721   else if (dwarf_version >= 3 || !dwarf_strict)
18722     {
18723       if (strcmp (language_string, "GNU Ada") == 0)
18724         language = DW_LANG_Ada95;
18725       else if (strcmp (language_string, "GNU Fortran") == 0)
18726         language = DW_LANG_Fortran95;
18727       else if (strcmp (language_string, "GNU Java") == 0)
18728         language = DW_LANG_Java;
18729       else if (strcmp (language_string, "GNU Objective-C") == 0)
18730         language = DW_LANG_ObjC;
18731       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18732         language = DW_LANG_ObjC_plus_plus;
18733     }
18734
18735   add_AT_unsigned (die, DW_AT_language, language);
18736   return die;
18737 }
18738
18739 /* Generate the DIE for a base class.  */
18740
18741 static void
18742 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18743 {
18744   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18745
18746   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18747   add_data_member_location_attribute (die, binfo);
18748
18749   if (BINFO_VIRTUAL_P (binfo))
18750     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18751
18752   if (access == access_public_node)
18753     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18754   else if (access == access_protected_node)
18755     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18756 }
18757
18758 /* Generate a DIE for a class member.  */
18759
18760 static void
18761 gen_member_die (tree type, dw_die_ref context_die)
18762 {
18763   tree member;
18764   tree binfo = TYPE_BINFO (type);
18765   dw_die_ref child;
18766
18767   /* If this is not an incomplete type, output descriptions of each of its
18768      members. Note that as we output the DIEs necessary to represent the
18769      members of this record or union type, we will also be trying to output
18770      DIEs to represent the *types* of those members. However the `type'
18771      function (above) will specifically avoid generating type DIEs for member
18772      types *within* the list of member DIEs for this (containing) type except
18773      for those types (of members) which are explicitly marked as also being
18774      members of this (containing) type themselves.  The g++ front- end can
18775      force any given type to be treated as a member of some other (containing)
18776      type by setting the TYPE_CONTEXT of the given (member) type to point to
18777      the TREE node representing the appropriate (containing) type.  */
18778
18779   /* First output info about the base classes.  */
18780   if (binfo)
18781     {
18782       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18783       int i;
18784       tree base;
18785
18786       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18787         gen_inheritance_die (base,
18788                              (accesses ? VEC_index (tree, accesses, i)
18789                               : access_public_node), context_die);
18790     }
18791
18792   /* Now output info about the data members and type members.  */
18793   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18794     {
18795       /* If we thought we were generating minimal debug info for TYPE
18796          and then changed our minds, some of the member declarations
18797          may have already been defined.  Don't define them again, but
18798          do put them in the right order.  */
18799
18800       child = lookup_decl_die (member);
18801       if (child)
18802         splice_child_die (context_die, child);
18803       else
18804         gen_decl_die (member, NULL, context_die);
18805     }
18806
18807   /* Now output info about the function members (if any).  */
18808   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18809     {
18810       /* Don't include clones in the member list.  */
18811       if (DECL_ABSTRACT_ORIGIN (member))
18812         continue;
18813
18814       child = lookup_decl_die (member);
18815       if (child)
18816         splice_child_die (context_die, child);
18817       else
18818         gen_decl_die (member, NULL, context_die);
18819     }
18820 }
18821
18822 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18823    is set, we pretend that the type was never defined, so we only get the
18824    member DIEs needed by later specification DIEs.  */
18825
18826 static void
18827 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18828                                 enum debug_info_usage usage)
18829 {
18830   dw_die_ref type_die = lookup_type_die (type);
18831   dw_die_ref scope_die = 0;
18832   int nested = 0;
18833   int complete = (TYPE_SIZE (type)
18834                   && (! TYPE_STUB_DECL (type)
18835                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18836   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18837   complete = complete && should_emit_struct_debug (type, usage);
18838
18839   if (type_die && ! complete)
18840     return;
18841
18842   if (TYPE_CONTEXT (type) != NULL_TREE
18843       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18844           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18845     nested = 1;
18846
18847   scope_die = scope_die_for (type, context_die);
18848
18849   if (! type_die || (nested && scope_die == comp_unit_die))
18850     /* First occurrence of type or toplevel definition of nested class.  */
18851     {
18852       dw_die_ref old_die = type_die;
18853
18854       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18855                           ? record_type_tag (type) : DW_TAG_union_type,
18856                           scope_die, type);
18857       equate_type_number_to_die (type, type_die);
18858       if (old_die)
18859         add_AT_specification (type_die, old_die);
18860       else
18861         add_name_attribute (type_die, type_tag (type));
18862     }
18863   else
18864     remove_AT (type_die, DW_AT_declaration);
18865
18866   /* Generate child dies for template paramaters.  */
18867   if (debug_info_level > DINFO_LEVEL_TERSE
18868       && COMPLETE_TYPE_P (type))
18869     gen_generic_params_dies (type);
18870
18871   /* If this type has been completed, then give it a byte_size attribute and
18872      then give a list of members.  */
18873   if (complete && !ns_decl)
18874     {
18875       /* Prevent infinite recursion in cases where the type of some member of
18876          this type is expressed in terms of this type itself.  */
18877       TREE_ASM_WRITTEN (type) = 1;
18878       add_byte_size_attribute (type_die, type);
18879       if (TYPE_STUB_DECL (type) != NULL_TREE)
18880         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18881
18882       /* If the first reference to this type was as the return type of an
18883          inline function, then it may not have a parent.  Fix this now.  */
18884       if (type_die->die_parent == NULL)
18885         add_child_die (scope_die, type_die);
18886
18887       push_decl_scope (type);
18888       gen_member_die (type, type_die);
18889       pop_decl_scope ();
18890
18891       /* GNU extension: Record what type our vtable lives in.  */
18892       if (TYPE_VFIELD (type))
18893         {
18894           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18895
18896           gen_type_die (vtype, context_die);
18897           add_AT_die_ref (type_die, DW_AT_containing_type,
18898                           lookup_type_die (vtype));
18899         }
18900     }
18901   else
18902     {
18903       add_AT_flag (type_die, DW_AT_declaration, 1);
18904
18905       /* We don't need to do this for function-local types.  */
18906       if (TYPE_STUB_DECL (type)
18907           && ! decl_function_context (TYPE_STUB_DECL (type)))
18908         VEC_safe_push (tree, gc, incomplete_types, type);
18909     }
18910
18911   if (get_AT (type_die, DW_AT_name))
18912     add_pubtype (type, type_die);
18913 }
18914
18915 /* Generate a DIE for a subroutine _type_.  */
18916
18917 static void
18918 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18919 {
18920   tree return_type = TREE_TYPE (type);
18921   dw_die_ref subr_die
18922     = new_die (DW_TAG_subroutine_type,
18923                scope_die_for (type, context_die), type);
18924
18925   equate_type_number_to_die (type, subr_die);
18926   add_prototyped_attribute (subr_die, type);
18927   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18928   gen_formal_types_die (type, subr_die);
18929
18930   if (get_AT (subr_die, DW_AT_name))
18931     add_pubtype (type, subr_die);
18932 }
18933
18934 /* Generate a DIE for a type definition.  */
18935
18936 static void
18937 gen_typedef_die (tree decl, dw_die_ref context_die)
18938 {
18939   dw_die_ref type_die;
18940   tree origin;
18941
18942   if (TREE_ASM_WRITTEN (decl))
18943     return;
18944
18945   TREE_ASM_WRITTEN (decl) = 1;
18946   type_die = new_die (DW_TAG_typedef, context_die, decl);
18947   origin = decl_ultimate_origin (decl);
18948   if (origin != NULL)
18949     add_abstract_origin_attribute (type_die, origin);
18950   else
18951     {
18952       tree type;
18953
18954       add_name_and_src_coords_attributes (type_die, decl);
18955       if (DECL_ORIGINAL_TYPE (decl))
18956         {
18957           type = DECL_ORIGINAL_TYPE (decl);
18958
18959           gcc_assert (type != TREE_TYPE (decl));
18960           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18961         }
18962       else
18963         type = TREE_TYPE (decl);
18964
18965       add_type_attribute (type_die, type, TREE_READONLY (decl),
18966                           TREE_THIS_VOLATILE (decl), context_die);
18967     }
18968
18969   if (DECL_ABSTRACT (decl))
18970     equate_decl_number_to_die (decl, type_die);
18971
18972   if (get_AT (type_die, DW_AT_name))
18973     add_pubtype (decl, type_die);
18974 }
18975
18976 /* Generate a type description DIE.  */
18977
18978 static void
18979 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18980                                 enum debug_info_usage usage)
18981 {
18982   int need_pop;
18983   struct array_descr_info info;
18984
18985   if (type == NULL_TREE || type == error_mark_node)
18986     return;
18987
18988   /* If TYPE is a typedef type variant, let's generate debug info
18989      for the parent typedef which TYPE is a type of.  */
18990   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18991       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18992     {
18993       if (TREE_ASM_WRITTEN (type))
18994         return;
18995
18996       /* Prevent broken recursion; we can't hand off to the same type.  */
18997       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18998
18999       /* Use the DIE of the containing namespace as the parent DIE of
19000          the type description DIE we want to generate.  */
19001       if (DECL_CONTEXT (TYPE_NAME (type))
19002           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19003         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19004
19005       TREE_ASM_WRITTEN (type) = 1;
19006       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19007       return;
19008     }
19009
19010   /* If this is an array type with hidden descriptor, handle it first.  */
19011   if (!TREE_ASM_WRITTEN (type)
19012       && lang_hooks.types.get_array_descr_info
19013       && lang_hooks.types.get_array_descr_info (type, &info)
19014       && (dwarf_version >= 3 || !dwarf_strict))
19015     {
19016       gen_descr_array_type_die (type, &info, context_die);
19017       TREE_ASM_WRITTEN (type) = 1;
19018       return;
19019     }
19020
19021   /* We are going to output a DIE to represent the unqualified version
19022      of this type (i.e. without any const or volatile qualifiers) so
19023      get the main variant (i.e. the unqualified version) of this type
19024      now.  (Vectors are special because the debugging info is in the
19025      cloned type itself).  */
19026   if (TREE_CODE (type) != VECTOR_TYPE)
19027     type = type_main_variant (type);
19028
19029   if (TREE_ASM_WRITTEN (type))
19030     return;
19031
19032   switch (TREE_CODE (type))
19033     {
19034     case ERROR_MARK:
19035       break;
19036
19037     case POINTER_TYPE:
19038     case REFERENCE_TYPE:
19039       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19040          ensures that the gen_type_die recursion will terminate even if the
19041          type is recursive.  Recursive types are possible in Ada.  */
19042       /* ??? We could perhaps do this for all types before the switch
19043          statement.  */
19044       TREE_ASM_WRITTEN (type) = 1;
19045
19046       /* For these types, all that is required is that we output a DIE (or a
19047          set of DIEs) to represent the "basis" type.  */
19048       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19049                                 DINFO_USAGE_IND_USE);
19050       break;
19051
19052     case OFFSET_TYPE:
19053       /* This code is used for C++ pointer-to-data-member types.
19054          Output a description of the relevant class type.  */
19055       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19056                                         DINFO_USAGE_IND_USE);
19057
19058       /* Output a description of the type of the object pointed to.  */
19059       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19060                                         DINFO_USAGE_IND_USE);
19061
19062       /* Now output a DIE to represent this pointer-to-data-member type
19063          itself.  */
19064       gen_ptr_to_mbr_type_die (type, context_die);
19065       break;
19066
19067     case FUNCTION_TYPE:
19068       /* Force out return type (in case it wasn't forced out already).  */
19069       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19070                                         DINFO_USAGE_DIR_USE);
19071       gen_subroutine_type_die (type, context_die);
19072       break;
19073
19074     case METHOD_TYPE:
19075       /* Force out return type (in case it wasn't forced out already).  */
19076       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19077                                         DINFO_USAGE_DIR_USE);
19078       gen_subroutine_type_die (type, context_die);
19079       break;
19080
19081     case ARRAY_TYPE:
19082       gen_array_type_die (type, context_die);
19083       break;
19084
19085     case VECTOR_TYPE:
19086       gen_array_type_die (type, context_die);
19087       break;
19088
19089     case ENUMERAL_TYPE:
19090     case RECORD_TYPE:
19091     case UNION_TYPE:
19092     case QUAL_UNION_TYPE:
19093       /* If this is a nested type whose containing class hasn't been written
19094          out yet, writing it out will cover this one, too.  This does not apply
19095          to instantiations of member class templates; they need to be added to
19096          the containing class as they are generated.  FIXME: This hurts the
19097          idea of combining type decls from multiple TUs, since we can't predict
19098          what set of template instantiations we'll get.  */
19099       if (TYPE_CONTEXT (type)
19100           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19101           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19102         {
19103           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19104
19105           if (TREE_ASM_WRITTEN (type))
19106             return;
19107
19108           /* If that failed, attach ourselves to the stub.  */
19109           push_decl_scope (TYPE_CONTEXT (type));
19110           context_die = lookup_type_die (TYPE_CONTEXT (type));
19111           need_pop = 1;
19112         }
19113       else if (TYPE_CONTEXT (type) != NULL_TREE
19114                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19115         {
19116           /* If this type is local to a function that hasn't been written
19117              out yet, use a NULL context for now; it will be fixed up in
19118              decls_for_scope.  */
19119           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19120           need_pop = 0;
19121         }
19122       else
19123         {
19124           context_die = declare_in_namespace (type, context_die);
19125           need_pop = 0;
19126         }
19127
19128       if (TREE_CODE (type) == ENUMERAL_TYPE)
19129         {
19130           /* This might have been written out by the call to
19131              declare_in_namespace.  */
19132           if (!TREE_ASM_WRITTEN (type))
19133             gen_enumeration_type_die (type, context_die);
19134         }
19135       else
19136         gen_struct_or_union_type_die (type, context_die, usage);
19137
19138       if (need_pop)
19139         pop_decl_scope ();
19140
19141       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19142          it up if it is ever completed.  gen_*_type_die will set it for us
19143          when appropriate.  */
19144       return;
19145
19146     case VOID_TYPE:
19147     case INTEGER_TYPE:
19148     case REAL_TYPE:
19149     case FIXED_POINT_TYPE:
19150     case COMPLEX_TYPE:
19151     case BOOLEAN_TYPE:
19152       /* No DIEs needed for fundamental types.  */
19153       break;
19154
19155     case LANG_TYPE:
19156       /* No Dwarf representation currently defined.  */
19157       break;
19158
19159     default:
19160       gcc_unreachable ();
19161     }
19162
19163   TREE_ASM_WRITTEN (type) = 1;
19164 }
19165
19166 static void
19167 gen_type_die (tree type, dw_die_ref context_die)
19168 {
19169   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19170 }
19171
19172 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19173    things which are local to the given block.  */
19174
19175 static void
19176 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19177 {
19178   int must_output_die = 0;
19179   bool inlined_func;
19180
19181   /* Ignore blocks that are NULL.  */
19182   if (stmt == NULL_TREE)
19183     return;
19184
19185   inlined_func = inlined_function_outer_scope_p (stmt);
19186
19187   /* If the block is one fragment of a non-contiguous block, do not
19188      process the variables, since they will have been done by the
19189      origin block.  Do process subblocks.  */
19190   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19191     {
19192       tree sub;
19193
19194       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19195         gen_block_die (sub, context_die, depth + 1);
19196
19197       return;
19198     }
19199
19200   /* Determine if we need to output any Dwarf DIEs at all to represent this
19201      block.  */
19202   if (inlined_func)
19203     /* The outer scopes for inlinings *must* always be represented.  We
19204        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19205     must_output_die = 1;
19206   else
19207     {
19208       /* Determine if this block directly contains any "significant"
19209          local declarations which we will need to output DIEs for.  */
19210       if (debug_info_level > DINFO_LEVEL_TERSE)
19211         /* We are not in terse mode so *any* local declaration counts
19212            as being a "significant" one.  */
19213         must_output_die = ((BLOCK_VARS (stmt) != NULL
19214                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19215                            && (TREE_USED (stmt)
19216                                || TREE_ASM_WRITTEN (stmt)
19217                                || BLOCK_ABSTRACT (stmt)));
19218       else if ((TREE_USED (stmt)
19219                 || TREE_ASM_WRITTEN (stmt)
19220                 || BLOCK_ABSTRACT (stmt))
19221                && !dwarf2out_ignore_block (stmt))
19222         must_output_die = 1;
19223     }
19224
19225   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19226      DIE for any block which contains no significant local declarations at
19227      all.  Rather, in such cases we just call `decls_for_scope' so that any
19228      needed Dwarf info for any sub-blocks will get properly generated. Note
19229      that in terse mode, our definition of what constitutes a "significant"
19230      local declaration gets restricted to include only inlined function
19231      instances and local (nested) function definitions.  */
19232   if (must_output_die)
19233     {
19234       if (inlined_func)
19235         {
19236           /* If STMT block is abstract, that means we have been called
19237              indirectly from dwarf2out_abstract_function.
19238              That function rightfully marks the descendent blocks (of
19239              the abstract function it is dealing with) as being abstract,
19240              precisely to prevent us from emitting any
19241              DW_TAG_inlined_subroutine DIE as a descendent
19242              of an abstract function instance. So in that case, we should
19243              not call gen_inlined_subroutine_die.
19244
19245              Later though, when cgraph asks dwarf2out to emit info
19246              for the concrete instance of the function decl into which
19247              the concrete instance of STMT got inlined, the later will lead
19248              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19249           if (! BLOCK_ABSTRACT (stmt))
19250             gen_inlined_subroutine_die (stmt, context_die, depth);
19251         }
19252       else
19253         gen_lexical_block_die (stmt, context_die, depth);
19254     }
19255   else
19256     decls_for_scope (stmt, context_die, depth);
19257 }
19258
19259 /* Process variable DECL (or variable with origin ORIGIN) within
19260    block STMT and add it to CONTEXT_DIE.  */
19261 static void
19262 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19263 {
19264   dw_die_ref die;
19265   tree decl_or_origin = decl ? decl : origin;
19266
19267   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19268     die = lookup_decl_die (decl_or_origin);
19269   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19270            && TYPE_DECL_IS_STUB (decl_or_origin))
19271     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19272   else
19273     die = NULL;
19274
19275   if (die != NULL && die->die_parent == NULL)
19276     add_child_die (context_die, die);
19277   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19278     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19279                                          stmt, context_die);
19280   else
19281     gen_decl_die (decl, origin, context_die);
19282 }
19283
19284 /* Generate all of the decls declared within a given scope and (recursively)
19285    all of its sub-blocks.  */
19286
19287 static void
19288 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19289 {
19290   tree decl;
19291   unsigned int i;
19292   tree subblocks;
19293
19294   /* Ignore NULL blocks.  */
19295   if (stmt == NULL_TREE)
19296     return;
19297
19298   /* Output the DIEs to represent all of the data objects and typedefs
19299      declared directly within this block but not within any nested
19300      sub-blocks.  Also, nested function and tag DIEs have been
19301      generated with a parent of NULL; fix that up now.  */
19302   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19303     process_scope_var (stmt, decl, NULL_TREE, context_die);
19304   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19305     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19306                        context_die);
19307
19308   /* If we're at -g1, we're not interested in subblocks.  */
19309   if (debug_info_level <= DINFO_LEVEL_TERSE)
19310     return;
19311
19312   /* Output the DIEs to represent all sub-blocks (and the items declared
19313      therein) of this block.  */
19314   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19315        subblocks != NULL;
19316        subblocks = BLOCK_CHAIN (subblocks))
19317     gen_block_die (subblocks, context_die, depth + 1);
19318 }
19319
19320 /* Is this a typedef we can avoid emitting?  */
19321
19322 static inline int
19323 is_redundant_typedef (const_tree decl)
19324 {
19325   if (TYPE_DECL_IS_STUB (decl))
19326     return 1;
19327
19328   if (DECL_ARTIFICIAL (decl)
19329       && DECL_CONTEXT (decl)
19330       && is_tagged_type (DECL_CONTEXT (decl))
19331       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19332       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19333     /* Also ignore the artificial member typedef for the class name.  */
19334     return 1;
19335
19336   return 0;
19337 }
19338
19339 /* Returns the DIE for a context.  */
19340
19341 static inline dw_die_ref
19342 get_context_die (tree context)
19343 {
19344   if (context)
19345     {
19346       /* Find die that represents this context.  */
19347       if (TYPE_P (context))
19348         return force_type_die (TYPE_MAIN_VARIANT (context));
19349       else
19350         return force_decl_die (context);
19351     }
19352   return comp_unit_die;
19353 }
19354
19355 /* Returns the DIE for decl.  A DIE will always be returned.  */
19356
19357 static dw_die_ref
19358 force_decl_die (tree decl)
19359 {
19360   dw_die_ref decl_die;
19361   unsigned saved_external_flag;
19362   tree save_fn = NULL_TREE;
19363   decl_die = lookup_decl_die (decl);
19364   if (!decl_die)
19365     {
19366       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19367
19368       decl_die = lookup_decl_die (decl);
19369       if (decl_die)
19370         return decl_die;
19371
19372       switch (TREE_CODE (decl))
19373         {
19374         case FUNCTION_DECL:
19375           /* Clear current_function_decl, so that gen_subprogram_die thinks
19376              that this is a declaration. At this point, we just want to force
19377              declaration die.  */
19378           save_fn = current_function_decl;
19379           current_function_decl = NULL_TREE;
19380           gen_subprogram_die (decl, context_die);
19381           current_function_decl = save_fn;
19382           break;
19383
19384         case VAR_DECL:
19385           /* Set external flag to force declaration die. Restore it after
19386            gen_decl_die() call.  */
19387           saved_external_flag = DECL_EXTERNAL (decl);
19388           DECL_EXTERNAL (decl) = 1;
19389           gen_decl_die (decl, NULL, context_die);
19390           DECL_EXTERNAL (decl) = saved_external_flag;
19391           break;
19392
19393         case NAMESPACE_DECL:
19394           if (dwarf_version >= 3 || !dwarf_strict)
19395             dwarf2out_decl (decl);
19396           else
19397             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19398             decl_die = comp_unit_die;
19399           break;
19400
19401         default:
19402           gcc_unreachable ();
19403         }
19404
19405       /* We should be able to find the DIE now.  */
19406       if (!decl_die)
19407         decl_die = lookup_decl_die (decl);
19408       gcc_assert (decl_die);
19409     }
19410
19411   return decl_die;
19412 }
19413
19414 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19415    always returned.  */
19416
19417 static dw_die_ref
19418 force_type_die (tree type)
19419 {
19420   dw_die_ref type_die;
19421
19422   type_die = lookup_type_die (type);
19423   if (!type_die)
19424     {
19425       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19426
19427       type_die = modified_type_die (type, TYPE_READONLY (type),
19428                                     TYPE_VOLATILE (type), context_die);
19429       gcc_assert (type_die);
19430     }
19431   return type_die;
19432 }
19433
19434 /* Force out any required namespaces to be able to output DECL,
19435    and return the new context_die for it, if it's changed.  */
19436
19437 static dw_die_ref
19438 setup_namespace_context (tree thing, dw_die_ref context_die)
19439 {
19440   tree context = (DECL_P (thing)
19441                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19442   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19443     /* Force out the namespace.  */
19444     context_die = force_decl_die (context);
19445
19446   return context_die;
19447 }
19448
19449 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19450    type) within its namespace, if appropriate.
19451
19452    For compatibility with older debuggers, namespace DIEs only contain
19453    declarations; all definitions are emitted at CU scope.  */
19454
19455 static dw_die_ref
19456 declare_in_namespace (tree thing, dw_die_ref context_die)
19457 {
19458   dw_die_ref ns_context;
19459
19460   if (debug_info_level <= DINFO_LEVEL_TERSE)
19461     return context_die;
19462
19463   /* If this decl is from an inlined function, then don't try to emit it in its
19464      namespace, as we will get confused.  It would have already been emitted
19465      when the abstract instance of the inline function was emitted anyways.  */
19466   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19467     return context_die;
19468
19469   ns_context = setup_namespace_context (thing, context_die);
19470
19471   if (ns_context != context_die)
19472     {
19473       if (is_fortran ())
19474         return ns_context;
19475       if (DECL_P (thing))
19476         gen_decl_die (thing, NULL, ns_context);
19477       else
19478         gen_type_die (thing, ns_context);
19479     }
19480   return context_die;
19481 }
19482
19483 /* Generate a DIE for a namespace or namespace alias.  */
19484
19485 static void
19486 gen_namespace_die (tree decl, dw_die_ref context_die)
19487 {
19488   dw_die_ref namespace_die;
19489
19490   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19491      they are an alias of.  */
19492   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19493     {
19494       /* Output a real namespace or module.  */
19495       context_die = setup_namespace_context (decl, comp_unit_die);
19496       namespace_die = new_die (is_fortran ()
19497                                ? DW_TAG_module : DW_TAG_namespace,
19498                                context_die, decl);
19499       /* For Fortran modules defined in different CU don't add src coords.  */
19500       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19501         {
19502           const char *name = dwarf2_name (decl, 0);
19503           if (name)
19504             add_name_attribute (namespace_die, name);
19505         }
19506       else
19507         add_name_and_src_coords_attributes (namespace_die, decl);
19508       if (DECL_EXTERNAL (decl))
19509         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19510       equate_decl_number_to_die (decl, namespace_die);
19511     }
19512   else
19513     {
19514       /* Output a namespace alias.  */
19515
19516       /* Force out the namespace we are an alias of, if necessary.  */
19517       dw_die_ref origin_die
19518         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19519
19520       if (DECL_CONTEXT (decl) == NULL_TREE
19521           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19522         context_die = setup_namespace_context (decl, comp_unit_die);
19523       /* Now create the namespace alias DIE.  */
19524       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19525       add_name_and_src_coords_attributes (namespace_die, decl);
19526       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19527       equate_decl_number_to_die (decl, namespace_die);
19528     }
19529 }
19530
19531 /* Generate Dwarf debug information for a decl described by DECL.  */
19532
19533 static void
19534 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19535 {
19536   tree decl_or_origin = decl ? decl : origin;
19537   tree class_origin = NULL, ultimate_origin;
19538
19539   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19540     return;
19541
19542   switch (TREE_CODE (decl_or_origin))
19543     {
19544     case ERROR_MARK:
19545       break;
19546
19547     case CONST_DECL:
19548       if (!is_fortran ())
19549         {
19550           /* The individual enumerators of an enum type get output when we output
19551              the Dwarf representation of the relevant enum type itself.  */
19552           break;
19553         }
19554
19555       /* Emit its type.  */
19556       gen_type_die (TREE_TYPE (decl), context_die);
19557
19558       /* And its containing namespace.  */
19559       context_die = declare_in_namespace (decl, context_die);
19560
19561       gen_const_die (decl, context_die);
19562       break;
19563
19564     case FUNCTION_DECL:
19565       /* Don't output any DIEs to represent mere function declarations,
19566          unless they are class members or explicit block externs.  */
19567       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19568           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19569           && (current_function_decl == NULL_TREE
19570               || DECL_ARTIFICIAL (decl_or_origin)))
19571         break;
19572
19573 #if 0
19574       /* FIXME */
19575       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19576          on local redeclarations of global functions.  That seems broken.  */
19577       if (current_function_decl != decl)
19578         /* This is only a declaration.  */;
19579 #endif
19580
19581       /* If we're emitting a clone, emit info for the abstract instance.  */
19582       if (origin || DECL_ORIGIN (decl) != decl)
19583         dwarf2out_abstract_function (origin
19584                                      ? DECL_ORIGIN (origin)
19585                                      : DECL_ABSTRACT_ORIGIN (decl));
19586
19587       /* If we're emitting an out-of-line copy of an inline function,
19588          emit info for the abstract instance and set up to refer to it.  */
19589       else if (cgraph_function_possibly_inlined_p (decl)
19590                && ! DECL_ABSTRACT (decl)
19591                && ! class_or_namespace_scope_p (context_die)
19592                /* dwarf2out_abstract_function won't emit a die if this is just
19593                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19594                   that case, because that works only if we have a die.  */
19595                && DECL_INITIAL (decl) != NULL_TREE)
19596         {
19597           dwarf2out_abstract_function (decl);
19598           set_decl_origin_self (decl);
19599         }
19600
19601       /* Otherwise we're emitting the primary DIE for this decl.  */
19602       else if (debug_info_level > DINFO_LEVEL_TERSE)
19603         {
19604           /* Before we describe the FUNCTION_DECL itself, make sure that we
19605              have described its return type.  */
19606           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19607
19608           /* And its virtual context.  */
19609           if (DECL_VINDEX (decl) != NULL_TREE)
19610             gen_type_die (DECL_CONTEXT (decl), context_die);
19611
19612           /* And its containing type.  */
19613           if (!origin)
19614             origin = decl_class_context (decl);
19615           if (origin != NULL_TREE)
19616             gen_type_die_for_member (origin, decl, context_die);
19617
19618           /* And its containing namespace.  */
19619           context_die = declare_in_namespace (decl, context_die);
19620         }
19621
19622       /* Now output a DIE to represent the function itself.  */
19623       if (decl)
19624         gen_subprogram_die (decl, context_die);
19625       break;
19626
19627     case TYPE_DECL:
19628       /* If we are in terse mode, don't generate any DIEs to represent any
19629          actual typedefs.  */
19630       if (debug_info_level <= DINFO_LEVEL_TERSE)
19631         break;
19632
19633       /* In the special case of a TYPE_DECL node representing the declaration
19634          of some type tag, if the given TYPE_DECL is marked as having been
19635          instantiated from some other (original) TYPE_DECL node (e.g. one which
19636          was generated within the original definition of an inline function) we
19637          used to generate a special (abbreviated) DW_TAG_structure_type,
19638          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19639          should be actually referencing those DIEs, as variable DIEs with that
19640          type would be emitted already in the abstract origin, so it was always
19641          removed during unused type prunning.  Don't add anything in this
19642          case.  */
19643       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19644         break;
19645
19646       if (is_redundant_typedef (decl))
19647         gen_type_die (TREE_TYPE (decl), context_die);
19648       else
19649         /* Output a DIE to represent the typedef itself.  */
19650         gen_typedef_die (decl, context_die);
19651       break;
19652
19653     case LABEL_DECL:
19654       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19655         gen_label_die (decl, context_die);
19656       break;
19657
19658     case VAR_DECL:
19659     case RESULT_DECL:
19660       /* If we are in terse mode, don't generate any DIEs to represent any
19661          variable declarations or definitions.  */
19662       if (debug_info_level <= DINFO_LEVEL_TERSE)
19663         break;
19664
19665       /* Output any DIEs that are needed to specify the type of this data
19666          object.  */
19667       if (decl_by_reference_p (decl_or_origin))
19668         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19669       else
19670         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19671
19672       /* And its containing type.  */
19673       class_origin = decl_class_context (decl_or_origin);
19674       if (class_origin != NULL_TREE)
19675         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19676
19677       /* And its containing namespace.  */
19678       context_die = declare_in_namespace (decl_or_origin, context_die);
19679
19680       /* Now output the DIE to represent the data object itself.  This gets
19681          complicated because of the possibility that the VAR_DECL really
19682          represents an inlined instance of a formal parameter for an inline
19683          function.  */
19684       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19685       if (ultimate_origin != NULL_TREE
19686           && TREE_CODE (ultimate_origin) == PARM_DECL)
19687         gen_formal_parameter_die (decl, origin,
19688                                   true /* Emit name attribute.  */,
19689                                   context_die);
19690       else
19691         gen_variable_die (decl, origin, context_die);
19692       break;
19693
19694     case FIELD_DECL:
19695       /* Ignore the nameless fields that are used to skip bits but handle C++
19696          anonymous unions and structs.  */
19697       if (DECL_NAME (decl) != NULL_TREE
19698           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19699           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19700         {
19701           gen_type_die (member_declared_type (decl), context_die);
19702           gen_field_die (decl, context_die);
19703         }
19704       break;
19705
19706     case PARM_DECL:
19707       if (DECL_BY_REFERENCE (decl_or_origin))
19708         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19709       else
19710         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19711       gen_formal_parameter_die (decl, origin,
19712                                 true /* Emit name attribute.  */,
19713                                 context_die);
19714       break;
19715
19716     case NAMESPACE_DECL:
19717     case IMPORTED_DECL:
19718       if (dwarf_version >= 3 || !dwarf_strict)
19719         gen_namespace_die (decl, context_die);
19720       break;
19721
19722     default:
19723       /* Probably some frontend-internal decl.  Assume we don't care.  */
19724       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19725       break;
19726     }
19727 }
19728 \f
19729 /* Output debug information for global decl DECL.  Called from toplev.c after
19730    compilation proper has finished.  */
19731
19732 static void
19733 dwarf2out_global_decl (tree decl)
19734 {
19735   /* Output DWARF2 information for file-scope tentative data object
19736      declarations, file-scope (extern) function declarations (which
19737      had no corresponding body) and file-scope tagged type declarations
19738      and definitions which have not yet been forced out.  */
19739   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19740     dwarf2out_decl (decl);
19741 }
19742
19743 /* Output debug information for type decl DECL.  Called from toplev.c
19744    and from language front ends (to record built-in types).  */
19745 static void
19746 dwarf2out_type_decl (tree decl, int local)
19747 {
19748   if (!local)
19749     dwarf2out_decl (decl);
19750 }
19751
19752 /* Output debug information for imported module or decl DECL.
19753    NAME is non-NULL name in the lexical block if the decl has been renamed.
19754    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19755    that DECL belongs to.
19756    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19757 static void
19758 dwarf2out_imported_module_or_decl_1 (tree decl,
19759                                      tree name,
19760                                      tree lexical_block,
19761                                      dw_die_ref lexical_block_die)
19762 {
19763   expanded_location xloc;
19764   dw_die_ref imported_die = NULL;
19765   dw_die_ref at_import_die;
19766
19767   if (TREE_CODE (decl) == IMPORTED_DECL)
19768     {
19769       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19770       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19771       gcc_assert (decl);
19772     }
19773   else
19774     xloc = expand_location (input_location);
19775
19776   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19777     {
19778       if (is_base_type (TREE_TYPE (decl)))
19779         at_import_die = base_type_die (TREE_TYPE (decl));
19780       else
19781         at_import_die = force_type_die (TREE_TYPE (decl));
19782       /* For namespace N { typedef void T; } using N::T; base_type_die
19783          returns NULL, but DW_TAG_imported_declaration requires
19784          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19785       if (!at_import_die)
19786         {
19787           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19788           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19789           at_import_die = lookup_type_die (TREE_TYPE (decl));
19790           gcc_assert (at_import_die);
19791         }
19792     }
19793   else
19794     {
19795       at_import_die = lookup_decl_die (decl);
19796       if (!at_import_die)
19797         {
19798           /* If we're trying to avoid duplicate debug info, we may not have
19799              emitted the member decl for this field.  Emit it now.  */
19800           if (TREE_CODE (decl) == FIELD_DECL)
19801             {
19802               tree type = DECL_CONTEXT (decl);
19803
19804               if (TYPE_CONTEXT (type)
19805                   && TYPE_P (TYPE_CONTEXT (type))
19806                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19807                                                 DINFO_USAGE_DIR_USE))
19808                 return;
19809               gen_type_die_for_member (type, decl,
19810                                        get_context_die (TYPE_CONTEXT (type)));
19811             }
19812           at_import_die = force_decl_die (decl);
19813         }
19814     }
19815
19816   if (TREE_CODE (decl) == NAMESPACE_DECL)
19817     {
19818       if (dwarf_version >= 3 || !dwarf_strict)
19819         imported_die = new_die (DW_TAG_imported_module,
19820                                 lexical_block_die,
19821                                 lexical_block);
19822       else
19823         return;
19824     }
19825   else
19826     imported_die = new_die (DW_TAG_imported_declaration,
19827                             lexical_block_die,
19828                             lexical_block);
19829
19830   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19831   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19832   if (name)
19833     add_AT_string (imported_die, DW_AT_name,
19834                    IDENTIFIER_POINTER (name));
19835   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19836 }
19837
19838 /* Output debug information for imported module or decl DECL.
19839    NAME is non-NULL name in context if the decl has been renamed.
19840    CHILD is true if decl is one of the renamed decls as part of
19841    importing whole module.  */
19842
19843 static void
19844 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19845                                    bool child)
19846 {
19847   /* dw_die_ref at_import_die;  */
19848   dw_die_ref scope_die;
19849
19850   if (debug_info_level <= DINFO_LEVEL_TERSE)
19851     return;
19852
19853   gcc_assert (decl);
19854
19855   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19856      We need decl DIE for reference and scope die. First, get DIE for the decl
19857      itself.  */
19858
19859   /* Get the scope die for decl context. Use comp_unit_die for global module
19860      or decl. If die is not found for non globals, force new die.  */
19861   if (context
19862       && TYPE_P (context)
19863       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19864     return;
19865
19866   if (!(dwarf_version >= 3 || !dwarf_strict))
19867     return;
19868
19869   scope_die = get_context_die (context);
19870
19871   if (child)
19872     {
19873       gcc_assert (scope_die->die_child);
19874       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19875       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19876       scope_die = scope_die->die_child;
19877     }
19878
19879   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19880   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19881
19882 }
19883
19884 /* Write the debugging output for DECL.  */
19885
19886 void
19887 dwarf2out_decl (tree decl)
19888 {
19889   dw_die_ref context_die = comp_unit_die;
19890
19891   switch (TREE_CODE (decl))
19892     {
19893     case ERROR_MARK:
19894       return;
19895
19896     case FUNCTION_DECL:
19897       /* What we would really like to do here is to filter out all mere
19898          file-scope declarations of file-scope functions which are never
19899          referenced later within this translation unit (and keep all of ones
19900          that *are* referenced later on) but we aren't clairvoyant, so we have
19901          no idea which functions will be referenced in the future (i.e. later
19902          on within the current translation unit). So here we just ignore all
19903          file-scope function declarations which are not also definitions.  If
19904          and when the debugger needs to know something about these functions,
19905          it will have to hunt around and find the DWARF information associated
19906          with the definition of the function.
19907
19908          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19909          nodes represent definitions and which ones represent mere
19910          declarations.  We have to check DECL_INITIAL instead. That's because
19911          the C front-end supports some weird semantics for "extern inline"
19912          function definitions.  These can get inlined within the current
19913          translation unit (and thus, we need to generate Dwarf info for their
19914          abstract instances so that the Dwarf info for the concrete inlined
19915          instances can have something to refer to) but the compiler never
19916          generates any out-of-lines instances of such things (despite the fact
19917          that they *are* definitions).
19918
19919          The important point is that the C front-end marks these "extern
19920          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19921          them anyway. Note that the C++ front-end also plays some similar games
19922          for inline function definitions appearing within include files which
19923          also contain `#pragma interface' pragmas.  */
19924       if (DECL_INITIAL (decl) == NULL_TREE)
19925         return;
19926
19927       /* If we're a nested function, initially use a parent of NULL; if we're
19928          a plain function, this will be fixed up in decls_for_scope.  If
19929          we're a method, it will be ignored, since we already have a DIE.  */
19930       if (decl_function_context (decl)
19931           /* But if we're in terse mode, we don't care about scope.  */
19932           && debug_info_level > DINFO_LEVEL_TERSE)
19933         context_die = NULL;
19934       break;
19935
19936     case VAR_DECL:
19937       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19938          declaration and if the declaration was never even referenced from
19939          within this entire compilation unit.  We suppress these DIEs in
19940          order to save space in the .debug section (by eliminating entries
19941          which are probably useless).  Note that we must not suppress
19942          block-local extern declarations (whether used or not) because that
19943          would screw-up the debugger's name lookup mechanism and cause it to
19944          miss things which really ought to be in scope at a given point.  */
19945       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19946         return;
19947
19948       /* For local statics lookup proper context die.  */
19949       if (TREE_STATIC (decl) && decl_function_context (decl))
19950         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19951
19952       /* If we are in terse mode, don't generate any DIEs to represent any
19953          variable declarations or definitions.  */
19954       if (debug_info_level <= DINFO_LEVEL_TERSE)
19955         return;
19956       break;
19957
19958     case CONST_DECL:
19959       if (debug_info_level <= DINFO_LEVEL_TERSE)
19960         return;
19961       if (!is_fortran ())
19962         return;
19963       if (TREE_STATIC (decl) && decl_function_context (decl))
19964         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19965       break;
19966
19967     case NAMESPACE_DECL:
19968     case IMPORTED_DECL:
19969       if (debug_info_level <= DINFO_LEVEL_TERSE)
19970         return;
19971       if (lookup_decl_die (decl) != NULL)
19972         return;
19973       break;
19974
19975     case TYPE_DECL:
19976       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19977       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19978         return;
19979
19980       /* Don't bother trying to generate any DIEs to represent any of the
19981          normal built-in types for the language we are compiling.  */
19982       if (DECL_IS_BUILTIN (decl))
19983         {
19984           /* OK, we need to generate one for `bool' so GDB knows what type
19985              comparisons have.  */
19986           if (is_cxx ()
19987               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19988               && ! DECL_IGNORED_P (decl))
19989             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19990
19991           return;
19992         }
19993
19994       /* If we are in terse mode, don't generate any DIEs for types.  */
19995       if (debug_info_level <= DINFO_LEVEL_TERSE)
19996         return;
19997
19998       /* If we're a function-scope tag, initially use a parent of NULL;
19999          this will be fixed up in decls_for_scope.  */
20000       if (decl_function_context (decl))
20001         context_die = NULL;
20002
20003       break;
20004
20005     default:
20006       return;
20007     }
20008
20009   gen_decl_die (decl, NULL, context_die);
20010 }
20011
20012 /* Write the debugging output for DECL.  */
20013
20014 static void
20015 dwarf2out_function_decl (tree decl)
20016 {
20017   dwarf2out_decl (decl);
20018
20019   htab_empty (decl_loc_table);
20020 }
20021
20022 /* Output a marker (i.e. a label) for the beginning of the generated code for
20023    a lexical block.  */
20024
20025 static void
20026 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20027                        unsigned int blocknum)
20028 {
20029   switch_to_section (current_function_section ());
20030   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20031 }
20032
20033 /* Output a marker (i.e. a label) for the end of the generated code for a
20034    lexical block.  */
20035
20036 static void
20037 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20038 {
20039   switch_to_section (current_function_section ());
20040   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20041 }
20042
20043 /* Returns nonzero if it is appropriate not to emit any debugging
20044    information for BLOCK, because it doesn't contain any instructions.
20045
20046    Don't allow this for blocks with nested functions or local classes
20047    as we would end up with orphans, and in the presence of scheduling
20048    we may end up calling them anyway.  */
20049
20050 static bool
20051 dwarf2out_ignore_block (const_tree block)
20052 {
20053   tree decl;
20054   unsigned int i;
20055
20056   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20057     if (TREE_CODE (decl) == FUNCTION_DECL
20058         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20059       return 0;
20060   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20061     {
20062       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20063       if (TREE_CODE (decl) == FUNCTION_DECL
20064           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20065       return 0;
20066     }
20067
20068   return 1;
20069 }
20070
20071 /* Hash table routines for file_hash.  */
20072
20073 static int
20074 file_table_eq (const void *p1_p, const void *p2_p)
20075 {
20076   const struct dwarf_file_data *const p1 =
20077     (const struct dwarf_file_data *) p1_p;
20078   const char *const p2 = (const char *) p2_p;
20079   return strcmp (p1->filename, p2) == 0;
20080 }
20081
20082 static hashval_t
20083 file_table_hash (const void *p_p)
20084 {
20085   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20086   return htab_hash_string (p->filename);
20087 }
20088
20089 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20090    dwarf2out.c) and return its "index".  The index of each (known) filename is
20091    just a unique number which is associated with only that one filename.  We
20092    need such numbers for the sake of generating labels (in the .debug_sfnames
20093    section) and references to those files numbers (in the .debug_srcinfo
20094    and.debug_macinfo sections).  If the filename given as an argument is not
20095    found in our current list, add it to the list and assign it the next
20096    available unique index number.  In order to speed up searches, we remember
20097    the index of the filename was looked up last.  This handles the majority of
20098    all searches.  */
20099
20100 static struct dwarf_file_data *
20101 lookup_filename (const char *file_name)
20102 {
20103   void ** slot;
20104   struct dwarf_file_data * created;
20105
20106   /* Check to see if the file name that was searched on the previous
20107      call matches this file name.  If so, return the index.  */
20108   if (file_table_last_lookup
20109       && (file_name == file_table_last_lookup->filename
20110           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20111     return file_table_last_lookup;
20112
20113   /* Didn't match the previous lookup, search the table.  */
20114   slot = htab_find_slot_with_hash (file_table, file_name,
20115                                    htab_hash_string (file_name), INSERT);
20116   if (*slot)
20117     return (struct dwarf_file_data *) *slot;
20118
20119   created = GGC_NEW (struct dwarf_file_data);
20120   created->filename = file_name;
20121   created->emitted_number = 0;
20122   *slot = created;
20123   return created;
20124 }
20125
20126 /* If the assembler will construct the file table, then translate the compiler
20127    internal file table number into the assembler file table number, and emit
20128    a .file directive if we haven't already emitted one yet.  The file table
20129    numbers are different because we prune debug info for unused variables and
20130    types, which may include filenames.  */
20131
20132 static int
20133 maybe_emit_file (struct dwarf_file_data * fd)
20134 {
20135   if (! fd->emitted_number)
20136     {
20137       if (last_emitted_file)
20138         fd->emitted_number = last_emitted_file->emitted_number + 1;
20139       else
20140         fd->emitted_number = 1;
20141       last_emitted_file = fd;
20142
20143       if (DWARF2_ASM_LINE_DEBUG_INFO)
20144         {
20145           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20146           output_quoted_string (asm_out_file,
20147                                 remap_debug_filename (fd->filename));
20148           fputc ('\n', asm_out_file);
20149         }
20150     }
20151
20152   return fd->emitted_number;
20153 }
20154
20155 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20156    That generation should happen after function debug info has been
20157    generated. The value of the attribute is the constant value of ARG.  */
20158
20159 static void
20160 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20161 {
20162   die_arg_entry entry;
20163
20164   if (!die || !arg)
20165     return;
20166
20167   if (!tmpl_value_parm_die_table)
20168     tmpl_value_parm_die_table
20169       = VEC_alloc (die_arg_entry, gc, 32);
20170
20171   entry.die = die;
20172   entry.arg = arg;
20173   VEC_safe_push (die_arg_entry, gc,
20174                  tmpl_value_parm_die_table,
20175                  &entry);
20176 }
20177
20178 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20179    by append_entry_to_tmpl_value_parm_die_table. This function must
20180    be called after function DIEs have been generated.  */
20181
20182 static void
20183 gen_remaining_tmpl_value_param_die_attribute (void)
20184 {
20185   if (tmpl_value_parm_die_table)
20186     {
20187       unsigned i;
20188       die_arg_entry *e;
20189
20190       for (i = 0;
20191            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20192            i++)
20193         tree_add_const_value_attribute (e->die, e->arg);
20194     }
20195 }
20196
20197
20198 /* Replace DW_AT_name for the decl with name.  */
20199
20200 static void
20201 dwarf2out_set_name (tree decl, tree name)
20202 {
20203   dw_die_ref die;
20204   dw_attr_ref attr;
20205   const char *dname;
20206
20207   die = TYPE_SYMTAB_DIE (decl);
20208   if (!die)
20209     return;
20210
20211   dname = dwarf2_name (name, 0);
20212   if (!dname)
20213     return;
20214
20215   attr = get_AT (die, DW_AT_name);
20216   if (attr)
20217     {
20218       struct indirect_string_node *node;
20219
20220       node = find_AT_string (dname);
20221       /* replace the string.  */
20222       attr->dw_attr_val.v.val_str = node;
20223     }
20224
20225   else
20226     add_name_attribute (die, dname);
20227 }
20228
20229 /* Called by the final INSN scan whenever we see a direct function call.
20230    Make an entry into the direct call table, recording the point of call
20231    and a reference to the target function's debug entry.  */
20232
20233 static void
20234 dwarf2out_direct_call (tree targ)
20235 {
20236   dcall_entry e;
20237   tree origin = decl_ultimate_origin (targ);
20238
20239   /* If this is a clone, use the abstract origin as the target.  */
20240   if (origin)
20241     targ = origin;
20242
20243   e.poc_label_num = poc_label_num++;
20244   e.poc_decl = current_function_decl;
20245   e.targ_die = force_decl_die (targ);
20246   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20247
20248   /* Drop a label at the return point to mark the point of call.  */
20249   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20250 }
20251
20252 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20253
20254 static hashval_t
20255 vcall_insn_table_hash (const void *x)
20256 {
20257   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20258 }
20259
20260 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20261    insnd_uid of *Y.  */
20262
20263 static int
20264 vcall_insn_table_eq (const void *x, const void *y)
20265 {
20266   return (((const struct vcall_insn *) x)->insn_uid
20267           == ((const struct vcall_insn *) y)->insn_uid);
20268 }
20269
20270 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20271
20272 static void
20273 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20274 {
20275   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20276   struct vcall_insn **slot;
20277
20278   gcc_assert (item);
20279   item->insn_uid = insn_uid;
20280   item->vtable_slot = vtable_slot;
20281   slot = (struct vcall_insn **)
20282       htab_find_slot_with_hash (vcall_insn_table, &item,
20283                                 (hashval_t) insn_uid, INSERT);
20284   *slot = item;
20285 }
20286
20287 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20288
20289 static unsigned int
20290 lookup_vcall_insn (unsigned int insn_uid)
20291 {
20292   struct vcall_insn item;
20293   struct vcall_insn *p;
20294
20295   item.insn_uid = insn_uid;
20296   item.vtable_slot = 0;
20297   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20298                                                  (void *) &item,
20299                                                  (hashval_t) insn_uid);
20300   if (p == NULL)
20301     return (unsigned int) -1;
20302   return p->vtable_slot;
20303 }
20304
20305
20306 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20307    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20308    is the vtable slot index that we will need to put in the virtual call
20309    table later.  */
20310
20311 static void
20312 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20313 {
20314   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20315     {
20316       tree token = OBJ_TYPE_REF_TOKEN (addr);
20317       if (TREE_CODE (token) == INTEGER_CST)
20318         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20319     }
20320 }
20321
20322 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20323    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20324    with NEW_INSN.  */
20325
20326 static void
20327 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20328 {
20329   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20330
20331   if (vtable_slot != (unsigned int) -1)
20332     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20333 }
20334
20335 /* Called by the final INSN scan whenever we see a virtual function call.
20336    Make an entry into the virtual call table, recording the point of call
20337    and the slot index of the vtable entry used to call the virtual member
20338    function.  The slot index was associated with the INSN_UID during the
20339    lowering to RTL.  */
20340
20341 static void
20342 dwarf2out_virtual_call (int insn_uid)
20343 {
20344   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20345   vcall_entry e;
20346
20347   if (vtable_slot == (unsigned int) -1)
20348     return;
20349
20350   e.poc_label_num = poc_label_num++;
20351   e.vtable_slot = vtable_slot;
20352   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20353
20354   /* Drop a label at the return point to mark the point of call.  */
20355   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20356 }
20357
20358 /* Called by the final INSN scan whenever we see a var location.  We
20359    use it to drop labels in the right places, and throw the location in
20360    our lookup table.  */
20361
20362 static void
20363 dwarf2out_var_location (rtx loc_note)
20364 {
20365   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20366   struct var_loc_node *newloc;
20367   rtx next_real;
20368   static const char *last_label;
20369   static const char *last_postcall_label;
20370   static bool last_in_cold_section_p;
20371   tree decl;
20372
20373   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20374     return;
20375
20376   next_real = next_real_insn (loc_note);
20377   /* If there are no instructions which would be affected by this note,
20378      don't do anything.  */
20379   if (next_real == NULL_RTX)
20380     return;
20381
20382   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20383   newloc = add_var_loc_to_decl (decl, loc_note);
20384   if (newloc == NULL)
20385     return;
20386
20387   /* If there were no real insns between note we processed last time
20388      and this note, use the label we emitted last time.  */
20389   if (last_var_location_insn == NULL_RTX
20390       || last_var_location_insn != next_real
20391       || last_in_cold_section_p != in_cold_section_p)
20392     {
20393       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20394       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20395       loclabel_num++;
20396       last_label = ggc_strdup (loclabel);
20397       last_postcall_label = NULL;
20398     }
20399   newloc->var_loc_note = loc_note;
20400   newloc->next = NULL;
20401
20402   if (!NOTE_DURING_CALL_P (loc_note))
20403     newloc->label = last_label;
20404   else
20405     {
20406       if (!last_postcall_label)
20407         {
20408           sprintf (loclabel, "%s-1", last_label);
20409           last_postcall_label = ggc_strdup (loclabel);
20410         }
20411       newloc->label = last_postcall_label;
20412     }
20413
20414   last_var_location_insn = next_real;
20415   last_in_cold_section_p = in_cold_section_p;
20416 }
20417
20418 /* We need to reset the locations at the beginning of each
20419    function. We can't do this in the end_function hook, because the
20420    declarations that use the locations won't have been output when
20421    that hook is called.  Also compute have_multiple_function_sections here.  */
20422
20423 static void
20424 dwarf2out_begin_function (tree fun)
20425 {
20426   if (function_section (fun) != text_section)
20427     have_multiple_function_sections = true;
20428
20429   dwarf2out_note_section_used ();
20430 }
20431
20432 /* Output a label to mark the beginning of a source code line entry
20433    and record information relating to this source line, in
20434    'line_info_table' for later output of the .debug_line section.  */
20435
20436 static void
20437 dwarf2out_source_line (unsigned int line, const char *filename,
20438                        int discriminator, bool is_stmt)
20439 {
20440   static bool last_is_stmt = true;
20441
20442   if (debug_info_level >= DINFO_LEVEL_NORMAL
20443       && line != 0)
20444     {
20445       int file_num = maybe_emit_file (lookup_filename (filename));
20446
20447       switch_to_section (current_function_section ());
20448
20449       /* If requested, emit something human-readable.  */
20450       if (flag_debug_asm)
20451         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20452                  filename, line);
20453
20454       if (DWARF2_ASM_LINE_DEBUG_INFO)
20455         {
20456           /* Emit the .loc directive understood by GNU as.  */
20457           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20458           if (is_stmt != last_is_stmt)
20459             {
20460               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20461               last_is_stmt = is_stmt;
20462             }
20463           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20464             fprintf (asm_out_file, " discriminator %d", discriminator);
20465           fputc ('\n', asm_out_file);
20466
20467           /* Indicate that line number info exists.  */
20468           line_info_table_in_use++;
20469         }
20470       else if (function_section (current_function_decl) != text_section)
20471         {
20472           dw_separate_line_info_ref line_info;
20473           targetm.asm_out.internal_label (asm_out_file,
20474                                           SEPARATE_LINE_CODE_LABEL,
20475                                           separate_line_info_table_in_use);
20476
20477           /* Expand the line info table if necessary.  */
20478           if (separate_line_info_table_in_use
20479               == separate_line_info_table_allocated)
20480             {
20481               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20482               separate_line_info_table
20483                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20484                                  separate_line_info_table,
20485                                  separate_line_info_table_allocated);
20486               memset (separate_line_info_table
20487                        + separate_line_info_table_in_use,
20488                       0,
20489                       (LINE_INFO_TABLE_INCREMENT
20490                        * sizeof (dw_separate_line_info_entry)));
20491             }
20492
20493           /* Add the new entry at the end of the line_info_table.  */
20494           line_info
20495             = &separate_line_info_table[separate_line_info_table_in_use++];
20496           line_info->dw_file_num = file_num;
20497           line_info->dw_line_num = line;
20498           line_info->function = current_function_funcdef_no;
20499         }
20500       else
20501         {
20502           dw_line_info_ref line_info;
20503
20504           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20505                                      line_info_table_in_use);
20506
20507           /* Expand the line info table if necessary.  */
20508           if (line_info_table_in_use == line_info_table_allocated)
20509             {
20510               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20511               line_info_table
20512                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20513                                  line_info_table_allocated);
20514               memset (line_info_table + line_info_table_in_use, 0,
20515                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20516             }
20517
20518           /* Add the new entry at the end of the line_info_table.  */
20519           line_info = &line_info_table[line_info_table_in_use++];
20520           line_info->dw_file_num = file_num;
20521           line_info->dw_line_num = line;
20522         }
20523     }
20524 }
20525
20526 /* Record the beginning of a new source file.  */
20527
20528 static void
20529 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20530 {
20531   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20532     {
20533       /* Record the beginning of the file for break_out_includes.  */
20534       dw_die_ref bincl_die;
20535
20536       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20537       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20538     }
20539
20540   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20541     {
20542       int file_num = maybe_emit_file (lookup_filename (filename));
20543
20544       switch_to_section (debug_macinfo_section);
20545       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20546       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20547                                    lineno);
20548
20549       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20550     }
20551 }
20552
20553 /* Record the end of a source file.  */
20554
20555 static void
20556 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20557 {
20558   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20559     /* Record the end of the file for break_out_includes.  */
20560     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20561
20562   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20563     {
20564       switch_to_section (debug_macinfo_section);
20565       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20566     }
20567 }
20568
20569 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20570    the tail part of the directive line, i.e. the part which is past the
20571    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20572
20573 static void
20574 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20575                   const char *buffer ATTRIBUTE_UNUSED)
20576 {
20577   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20578     {
20579       switch_to_section (debug_macinfo_section);
20580       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20581       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20582       dw2_asm_output_nstring (buffer, -1, "The macro");
20583     }
20584 }
20585
20586 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20587    the tail part of the directive line, i.e. the part which is past the
20588    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20589
20590 static void
20591 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20592                  const char *buffer ATTRIBUTE_UNUSED)
20593 {
20594   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20595     {
20596       switch_to_section (debug_macinfo_section);
20597       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20598       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20599       dw2_asm_output_nstring (buffer, -1, "The macro");
20600     }
20601 }
20602
20603 /* Set up for Dwarf output at the start of compilation.  */
20604
20605 static void
20606 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20607 {
20608   /* Allocate the file_table.  */
20609   file_table = htab_create_ggc (50, file_table_hash,
20610                                 file_table_eq, NULL);
20611
20612   /* Allocate the decl_die_table.  */
20613   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20614                                     decl_die_table_eq, NULL);
20615
20616   /* Allocate the decl_loc_table.  */
20617   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20618                                     decl_loc_table_eq, NULL);
20619
20620   /* Allocate the initial hunk of the decl_scope_table.  */
20621   decl_scope_table = VEC_alloc (tree, gc, 256);
20622
20623   /* Allocate the initial hunk of the abbrev_die_table.  */
20624   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20625   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20626   /* Zero-th entry is allocated, but unused.  */
20627   abbrev_die_table_in_use = 1;
20628
20629   /* Allocate the initial hunk of the line_info_table.  */
20630   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20631   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20632
20633   /* Zero-th entry is allocated, but unused.  */
20634   line_info_table_in_use = 1;
20635
20636   /* Allocate the pubtypes and pubnames vectors.  */
20637   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20638   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20639
20640   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20641   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20642                                       vcall_insn_table_eq, NULL);
20643
20644   /* Generate the initial DIE for the .debug section.  Note that the (string)
20645      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20646      will (typically) be a relative pathname and that this pathname should be
20647      taken as being relative to the directory from which the compiler was
20648      invoked when the given (base) source file was compiled.  We will fill
20649      in this value in dwarf2out_finish.  */
20650   comp_unit_die = gen_compile_unit_die (NULL);
20651
20652   incomplete_types = VEC_alloc (tree, gc, 64);
20653
20654   used_rtx_array = VEC_alloc (rtx, gc, 32);
20655
20656   debug_info_section = get_section (DEBUG_INFO_SECTION,
20657                                     SECTION_DEBUG, NULL);
20658   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20659                                       SECTION_DEBUG, NULL);
20660   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20661                                        SECTION_DEBUG, NULL);
20662   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20663                                        SECTION_DEBUG, NULL);
20664   debug_line_section = get_section (DEBUG_LINE_SECTION,
20665                                     SECTION_DEBUG, NULL);
20666   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20667                                    SECTION_DEBUG, NULL);
20668   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20669                                         SECTION_DEBUG, NULL);
20670   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20671                                         SECTION_DEBUG, NULL);
20672   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20673                                      SECTION_DEBUG, NULL);
20674   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20675                                      SECTION_DEBUG, NULL);
20676   debug_str_section = get_section (DEBUG_STR_SECTION,
20677                                    DEBUG_STR_SECTION_FLAGS, NULL);
20678   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20679                                       SECTION_DEBUG, NULL);
20680   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20681                                      SECTION_DEBUG, NULL);
20682
20683   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20684   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20685                                DEBUG_ABBREV_SECTION_LABEL, 0);
20686   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20687   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20688                                COLD_TEXT_SECTION_LABEL, 0);
20689   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20690
20691   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20692                                DEBUG_INFO_SECTION_LABEL, 0);
20693   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20694                                DEBUG_LINE_SECTION_LABEL, 0);
20695   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20696                                DEBUG_RANGES_SECTION_LABEL, 0);
20697   switch_to_section (debug_abbrev_section);
20698   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20699   switch_to_section (debug_info_section);
20700   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20701   switch_to_section (debug_line_section);
20702   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20703
20704   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20705     {
20706       switch_to_section (debug_macinfo_section);
20707       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20708                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20709       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20710     }
20711
20712   switch_to_section (text_section);
20713   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20714   if (flag_reorder_blocks_and_partition)
20715     {
20716       cold_text_section = unlikely_text_section ();
20717       switch_to_section (cold_text_section);
20718       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20719     }
20720
20721 }
20722
20723 /* Called before cgraph_optimize starts outputtting functions, variables
20724    and toplevel asms into assembly.  */
20725
20726 static void
20727 dwarf2out_assembly_start (void)
20728 {
20729   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20730     {
20731 #ifndef TARGET_UNWIND_INFO
20732       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20733 #endif
20734         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20735     }
20736 }
20737
20738 /* A helper function for dwarf2out_finish called through
20739    htab_traverse.  Emit one queued .debug_str string.  */
20740
20741 static int
20742 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20743 {
20744   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20745
20746   if (node->label && node->refcount)
20747     {
20748       switch_to_section (debug_str_section);
20749       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20750       assemble_string (node->str, strlen (node->str) + 1);
20751     }
20752
20753   return 1;
20754 }
20755
20756 #if ENABLE_ASSERT_CHECKING
20757 /* Verify that all marks are clear.  */
20758
20759 static void
20760 verify_marks_clear (dw_die_ref die)
20761 {
20762   dw_die_ref c;
20763
20764   gcc_assert (! die->die_mark);
20765   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20766 }
20767 #endif /* ENABLE_ASSERT_CHECKING */
20768
20769 /* Clear the marks for a die and its children.
20770    Be cool if the mark isn't set.  */
20771
20772 static void
20773 prune_unmark_dies (dw_die_ref die)
20774 {
20775   dw_die_ref c;
20776
20777   if (die->die_mark)
20778     die->die_mark = 0;
20779   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20780 }
20781
20782 /* Given DIE that we're marking as used, find any other dies
20783    it references as attributes and mark them as used.  */
20784
20785 static void
20786 prune_unused_types_walk_attribs (dw_die_ref die)
20787 {
20788   dw_attr_ref a;
20789   unsigned ix;
20790
20791   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20792     {
20793       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20794         {
20795           /* A reference to another DIE.
20796              Make sure that it will get emitted.
20797              If it was broken out into a comdat group, don't follow it.  */
20798           if (dwarf_version < 4
20799               || a->dw_attr == DW_AT_specification
20800               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20801             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20802         }
20803       /* Set the string's refcount to 0 so that prune_unused_types_mark
20804          accounts properly for it.  */
20805       if (AT_class (a) == dw_val_class_str)
20806         a->dw_attr_val.v.val_str->refcount = 0;
20807     }
20808 }
20809
20810
20811 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20812    to DIE's children.  */
20813
20814 static void
20815 prune_unused_types_mark (dw_die_ref die, int dokids)
20816 {
20817   dw_die_ref c;
20818
20819   if (die->die_mark == 0)
20820     {
20821       /* We haven't done this node yet.  Mark it as used.  */
20822       die->die_mark = 1;
20823
20824       /* We also have to mark its parents as used.
20825          (But we don't want to mark our parents' kids due to this.)  */
20826       if (die->die_parent)
20827         prune_unused_types_mark (die->die_parent, 0);
20828
20829       /* Mark any referenced nodes.  */
20830       prune_unused_types_walk_attribs (die);
20831
20832       /* If this node is a specification,
20833          also mark the definition, if it exists.  */
20834       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20835         prune_unused_types_mark (die->die_definition, 1);
20836     }
20837
20838   if (dokids && die->die_mark != 2)
20839     {
20840       /* We need to walk the children, but haven't done so yet.
20841          Remember that we've walked the kids.  */
20842       die->die_mark = 2;
20843
20844       /* If this is an array type, we need to make sure our
20845          kids get marked, even if they're types.  If we're
20846          breaking out types into comdat sections, do this
20847          for all type definitions.  */
20848       if (die->die_tag == DW_TAG_array_type
20849           || (dwarf_version >= 4
20850               && is_type_die (die) && ! is_declaration_die (die)))
20851         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20852       else
20853         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20854     }
20855 }
20856
20857 /* For local classes, look if any static member functions were emitted
20858    and if so, mark them.  */
20859
20860 static void
20861 prune_unused_types_walk_local_classes (dw_die_ref die)
20862 {
20863   dw_die_ref c;
20864
20865   if (die->die_mark == 2)
20866     return;
20867
20868   switch (die->die_tag)
20869     {
20870     case DW_TAG_structure_type:
20871     case DW_TAG_union_type:
20872     case DW_TAG_class_type:
20873       break;
20874
20875     case DW_TAG_subprogram:
20876       if (!get_AT_flag (die, DW_AT_declaration)
20877           || die->die_definition != NULL)
20878         prune_unused_types_mark (die, 1);
20879       return;
20880
20881     default:
20882       return;
20883     }
20884
20885   /* Mark children.  */
20886   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20887 }
20888
20889 /* Walk the tree DIE and mark types that we actually use.  */
20890
20891 static void
20892 prune_unused_types_walk (dw_die_ref die)
20893 {
20894   dw_die_ref c;
20895
20896   /* Don't do anything if this node is already marked and
20897      children have been marked as well.  */
20898   if (die->die_mark == 2)
20899     return;
20900
20901   switch (die->die_tag)
20902     {
20903     case DW_TAG_structure_type:
20904     case DW_TAG_union_type:
20905     case DW_TAG_class_type:
20906       if (die->die_perennial_p)
20907         break;
20908
20909       for (c = die->die_parent; c; c = c->die_parent)
20910         if (c->die_tag == DW_TAG_subprogram)
20911           break;
20912
20913       /* Finding used static member functions inside of classes
20914          is needed just for local classes, because for other classes
20915          static member function DIEs with DW_AT_specification
20916          are emitted outside of the DW_TAG_*_type.  If we ever change
20917          it, we'd need to call this even for non-local classes.  */
20918       if (c)
20919         prune_unused_types_walk_local_classes (die);
20920
20921       /* It's a type node --- don't mark it.  */
20922       return;
20923
20924     case DW_TAG_const_type:
20925     case DW_TAG_packed_type:
20926     case DW_TAG_pointer_type:
20927     case DW_TAG_reference_type:
20928     case DW_TAG_rvalue_reference_type:
20929     case DW_TAG_volatile_type:
20930     case DW_TAG_typedef:
20931     case DW_TAG_array_type:
20932     case DW_TAG_interface_type:
20933     case DW_TAG_friend:
20934     case DW_TAG_variant_part:
20935     case DW_TAG_enumeration_type:
20936     case DW_TAG_subroutine_type:
20937     case DW_TAG_string_type:
20938     case DW_TAG_set_type:
20939     case DW_TAG_subrange_type:
20940     case DW_TAG_ptr_to_member_type:
20941     case DW_TAG_file_type:
20942       if (die->die_perennial_p)
20943         break;
20944
20945       /* It's a type node --- don't mark it.  */
20946       return;
20947
20948     default:
20949       /* Mark everything else.  */
20950       break;
20951   }
20952
20953   if (die->die_mark == 0)
20954     {
20955       die->die_mark = 1;
20956
20957       /* Now, mark any dies referenced from here.  */
20958       prune_unused_types_walk_attribs (die);
20959     }
20960
20961   die->die_mark = 2;
20962
20963   /* Mark children.  */
20964   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20965 }
20966
20967 /* Increment the string counts on strings referred to from DIE's
20968    attributes.  */
20969
20970 static void
20971 prune_unused_types_update_strings (dw_die_ref die)
20972 {
20973   dw_attr_ref a;
20974   unsigned ix;
20975
20976   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20977     if (AT_class (a) == dw_val_class_str)
20978       {
20979         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20980         s->refcount++;
20981         /* Avoid unnecessarily putting strings that are used less than
20982            twice in the hash table.  */
20983         if (s->refcount
20984             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20985           {
20986             void ** slot;
20987             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20988                                              htab_hash_string (s->str),
20989                                              INSERT);
20990             gcc_assert (*slot == NULL);
20991             *slot = s;
20992           }
20993       }
20994 }
20995
20996 /* Remove from the tree DIE any dies that aren't marked.  */
20997
20998 static void
20999 prune_unused_types_prune (dw_die_ref die)
21000 {
21001   dw_die_ref c;
21002
21003   gcc_assert (die->die_mark);
21004   prune_unused_types_update_strings (die);
21005
21006   if (! die->die_child)
21007     return;
21008
21009   c = die->die_child;
21010   do {
21011     dw_die_ref prev = c;
21012     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21013       if (c == die->die_child)
21014         {
21015           /* No marked children between 'prev' and the end of the list.  */
21016           if (prev == c)
21017             /* No marked children at all.  */
21018             die->die_child = NULL;
21019           else
21020             {
21021               prev->die_sib = c->die_sib;
21022               die->die_child = prev;
21023             }
21024           return;
21025         }
21026
21027     if (c != prev->die_sib)
21028       prev->die_sib = c;
21029     prune_unused_types_prune (c);
21030   } while (c != die->die_child);
21031 }
21032
21033 /* A helper function for dwarf2out_finish called through
21034    htab_traverse.  Clear .debug_str strings that we haven't already
21035    decided to emit.  */
21036
21037 static int
21038 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21039 {
21040   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21041
21042   if (!node->label || !node->refcount)
21043     htab_clear_slot (debug_str_hash, h);
21044
21045   return 1;
21046 }
21047
21048 /* Remove dies representing declarations that we never use.  */
21049
21050 static void
21051 prune_unused_types (void)
21052 {
21053   unsigned int i;
21054   limbo_die_node *node;
21055   comdat_type_node *ctnode;
21056   pubname_ref pub;
21057   dcall_entry *dcall;
21058
21059 #if ENABLE_ASSERT_CHECKING
21060   /* All the marks should already be clear.  */
21061   verify_marks_clear (comp_unit_die);
21062   for (node = limbo_die_list; node; node = node->next)
21063     verify_marks_clear (node->die);
21064   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21065     verify_marks_clear (ctnode->root_die);
21066 #endif /* ENABLE_ASSERT_CHECKING */
21067
21068   /* Mark types that are used in global variables.  */
21069   premark_types_used_by_global_vars ();
21070
21071   /* Set the mark on nodes that are actually used.  */
21072   prune_unused_types_walk (comp_unit_die);
21073   for (node = limbo_die_list; node; node = node->next)
21074     prune_unused_types_walk (node->die);
21075   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21076     {
21077       prune_unused_types_walk (ctnode->root_die);
21078       prune_unused_types_mark (ctnode->type_die, 1);
21079     }
21080
21081   /* Also set the mark on nodes referenced from the
21082      pubname_table or arange_table.  */
21083   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21084     prune_unused_types_mark (pub->die, 1);
21085   for (i = 0; i < arange_table_in_use; i++)
21086     prune_unused_types_mark (arange_table[i], 1);
21087
21088   /* Mark nodes referenced from the direct call table.  */
21089   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21090     prune_unused_types_mark (dcall->targ_die, 1);
21091
21092   /* Get rid of nodes that aren't marked; and update the string counts.  */
21093   if (debug_str_hash && debug_str_hash_forced)
21094     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21095   else if (debug_str_hash)
21096     htab_empty (debug_str_hash);
21097   prune_unused_types_prune (comp_unit_die);
21098   for (node = limbo_die_list; node; node = node->next)
21099     prune_unused_types_prune (node->die);
21100   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21101     prune_unused_types_prune (ctnode->root_die);
21102
21103   /* Leave the marks clear.  */
21104   prune_unmark_dies (comp_unit_die);
21105   for (node = limbo_die_list; node; node = node->next)
21106     prune_unmark_dies (node->die);
21107   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21108     prune_unmark_dies (ctnode->root_die);
21109 }
21110
21111 /* Set the parameter to true if there are any relative pathnames in
21112    the file table.  */
21113 static int
21114 file_table_relative_p (void ** slot, void *param)
21115 {
21116   bool *p = (bool *) param;
21117   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21118   if (!IS_ABSOLUTE_PATH (d->filename))
21119     {
21120       *p = true;
21121       return 0;
21122     }
21123   return 1;
21124 }
21125
21126 /* Routines to manipulate hash table of comdat type units.  */
21127
21128 static hashval_t
21129 htab_ct_hash (const void *of)
21130 {
21131   hashval_t h;
21132   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21133
21134   memcpy (&h, type_node->signature, sizeof (h));
21135   return h;
21136 }
21137
21138 static int
21139 htab_ct_eq (const void *of1, const void *of2)
21140 {
21141   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21142   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21143
21144   return (! memcmp (type_node_1->signature, type_node_2->signature,
21145                     DWARF_TYPE_SIGNATURE_SIZE));
21146 }
21147
21148 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21149    to the location it would have been added, should we know its
21150    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21151    probably improve compactness of debug info, removing equivalent
21152    abbrevs, and hide any differences caused by deferring the
21153    computation of the assembler name, triggered by e.g. PCH.  */
21154
21155 static inline void
21156 move_linkage_attr (dw_die_ref die)
21157 {
21158   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21159   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21160
21161   gcc_assert (linkage.dw_attr == AT_linkage_name);
21162
21163   while (--ix > 0)
21164     {
21165       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21166
21167       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21168         break;
21169     }
21170
21171   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21172     {
21173       VEC_pop (dw_attr_node, die->die_attr);
21174       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21175     }
21176 }
21177
21178 /* Helper function for resolve_addr, attempt to resolve
21179    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21180    SYMBOL_REFs refer to variables emitted in the current CU.  */
21181
21182 static int
21183 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21184 {
21185   rtx rtl = *addr;
21186
21187   if (GET_CODE (rtl) == CONST_STRING)
21188     {
21189       size_t len = strlen (XSTR (rtl, 0)) + 1;
21190       tree t = build_string (len, XSTR (rtl, 0));
21191       tree tlen = build_int_cst (NULL_TREE, len - 1);
21192       TREE_TYPE (t)
21193         = build_array_type (char_type_node, build_index_type (tlen));
21194       rtl = lookup_constant_def (t);
21195       if (!rtl || !MEM_P (rtl))
21196         return 1;
21197       rtl = XEXP (rtl, 0);
21198       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21199       *addr = rtl;
21200       return 0;
21201     }
21202
21203   if (GET_CODE (rtl) == SYMBOL_REF
21204       && SYMBOL_REF_DECL (rtl)
21205       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21206       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21207     return 1;
21208
21209   if (GET_CODE (rtl) == CONST
21210       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21211     return 1;
21212
21213   return 0;
21214 }
21215
21216 /* Helper function for resolve_addr, handle one location
21217    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21218    the location list couldn't be resolved.  */
21219
21220 static bool
21221 resolve_addr_in_expr (dw_loc_descr_ref loc)
21222 {
21223   for (; loc; loc = loc->dw_loc_next)
21224     if ((loc->dw_loc_opc == DW_OP_addr
21225          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21226         || (loc->dw_loc_opc == DW_OP_implicit_value
21227             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21228             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21229       return false;
21230   return true;
21231 }
21232
21233 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21234    an address in .rodata section if the string literal is emitted there,
21235    or remove the containing location list or replace DW_AT_const_value
21236    with DW_AT_location and empty location expression, if it isn't found
21237    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21238    to something that has been emitted in the current CU.  */
21239
21240 static void
21241 resolve_addr (dw_die_ref die)
21242 {
21243   dw_die_ref c;
21244   dw_attr_ref a;
21245   dw_loc_list_ref *curr;
21246   unsigned ix;
21247
21248   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21249     switch (AT_class (a))
21250       {
21251       case dw_val_class_loc_list:
21252         curr = AT_loc_list_ptr (a);
21253         while (*curr)
21254           {
21255             if (!resolve_addr_in_expr ((*curr)->expr))
21256               {
21257                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21258                 if (next && (*curr)->ll_symbol)
21259                   {
21260                     gcc_assert (!next->ll_symbol);
21261                     next->ll_symbol = (*curr)->ll_symbol;
21262                   }
21263                 *curr = next;
21264               }
21265             else
21266               curr = &(*curr)->dw_loc_next;
21267           }
21268         if (!AT_loc_list (a))
21269           {
21270             remove_AT (die, a->dw_attr);
21271             ix--;
21272           }
21273         break;
21274       case dw_val_class_loc:
21275         if (!resolve_addr_in_expr (AT_loc (a)))
21276           {
21277             remove_AT (die, a->dw_attr);
21278             ix--;
21279           }
21280         break;
21281       case dw_val_class_addr:
21282         if (a->dw_attr == DW_AT_const_value
21283             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21284           {
21285             remove_AT (die, a->dw_attr);
21286             ix--;
21287           }
21288         break;
21289       default:
21290         break;
21291       }
21292
21293   FOR_EACH_CHILD (die, c, resolve_addr (c));
21294 }
21295
21296 /* Output stuff that dwarf requires at the end of every file,
21297    and generate the DWARF-2 debugging info.  */
21298
21299 static void
21300 dwarf2out_finish (const char *filename)
21301 {
21302   limbo_die_node *node, *next_node;
21303   comdat_type_node *ctnode;
21304   htab_t comdat_type_table;
21305   dw_die_ref die = 0;
21306   unsigned int i;
21307
21308   gen_remaining_tmpl_value_param_die_attribute ();
21309
21310   /* Add the name for the main input file now.  We delayed this from
21311      dwarf2out_init to avoid complications with PCH.  */
21312   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21313   if (!IS_ABSOLUTE_PATH (filename))
21314     add_comp_dir_attribute (comp_unit_die);
21315   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21316     {
21317       bool p = false;
21318       htab_traverse (file_table, file_table_relative_p, &p);
21319       if (p)
21320         add_comp_dir_attribute (comp_unit_die);
21321     }
21322
21323   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21324     {
21325       add_location_or_const_value_attribute (
21326         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21327         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21328         DW_AT_location);
21329     }
21330
21331   /* Traverse the limbo die list, and add parent/child links.  The only
21332      dies without parents that should be here are concrete instances of
21333      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21334      For concrete instances, we can get the parent die from the abstract
21335      instance.  */
21336   for (node = limbo_die_list; node; node = next_node)
21337     {
21338       next_node = node->next;
21339       die = node->die;
21340
21341       if (die->die_parent == NULL)
21342         {
21343           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21344
21345           if (origin)
21346             add_child_die (origin->die_parent, die);
21347           else if (die == comp_unit_die)
21348             ;
21349           else if (errorcount > 0 || sorrycount > 0)
21350             /* It's OK to be confused by errors in the input.  */
21351             add_child_die (comp_unit_die, die);
21352           else
21353             {
21354               /* In certain situations, the lexical block containing a
21355                  nested function can be optimized away, which results
21356                  in the nested function die being orphaned.  Likewise
21357                  with the return type of that nested function.  Force
21358                  this to be a child of the containing function.
21359
21360                  It may happen that even the containing function got fully
21361                  inlined and optimized out.  In that case we are lost and
21362                  assign the empty child.  This should not be big issue as
21363                  the function is likely unreachable too.  */
21364               tree context = NULL_TREE;
21365
21366               gcc_assert (node->created_for);
21367
21368               if (DECL_P (node->created_for))
21369                 context = DECL_CONTEXT (node->created_for);
21370               else if (TYPE_P (node->created_for))
21371                 context = TYPE_CONTEXT (node->created_for);
21372
21373               gcc_assert (context
21374                           && (TREE_CODE (context) == FUNCTION_DECL
21375                               || TREE_CODE (context) == NAMESPACE_DECL));
21376
21377               origin = lookup_decl_die (context);
21378               if (origin)
21379                 add_child_die (origin, die);
21380               else
21381                 add_child_die (comp_unit_die, die);
21382             }
21383         }
21384     }
21385
21386   limbo_die_list = NULL;
21387
21388   resolve_addr (comp_unit_die);
21389
21390   for (node = deferred_asm_name; node; node = node->next)
21391     {
21392       tree decl = node->created_for;
21393       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21394         {
21395           add_AT_string (node->die, AT_linkage_name,
21396                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21397           move_linkage_attr (node->die);
21398         }
21399     }
21400
21401   deferred_asm_name = NULL;
21402
21403   /* Walk through the list of incomplete types again, trying once more to
21404      emit full debugging info for them.  */
21405   retry_incomplete_types ();
21406
21407   if (flag_eliminate_unused_debug_types)
21408     prune_unused_types ();
21409
21410   /* Generate separate CUs for each of the include files we've seen.
21411      They will go into limbo_die_list.  */
21412   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21413     break_out_includes (comp_unit_die);
21414
21415   /* Generate separate COMDAT sections for type DIEs. */
21416   if (dwarf_version >= 4)
21417     {
21418       break_out_comdat_types (comp_unit_die);
21419
21420       /* Each new type_unit DIE was added to the limbo die list when created.
21421          Since these have all been added to comdat_type_list, clear the
21422          limbo die list.  */
21423       limbo_die_list = NULL;
21424
21425       /* For each new comdat type unit, copy declarations for incomplete
21426          types to make the new unit self-contained (i.e., no direct
21427          references to the main compile unit).  */
21428       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21429         copy_decls_for_unworthy_types (ctnode->root_die);
21430       copy_decls_for_unworthy_types (comp_unit_die);
21431
21432       /* In the process of copying declarations from one unit to another,
21433          we may have left some declarations behind that are no longer
21434          referenced.  Prune them.  */
21435       prune_unused_types ();
21436     }
21437
21438   /* Traverse the DIE's and add add sibling attributes to those DIE's
21439      that have children.  */
21440   add_sibling_attributes (comp_unit_die);
21441   for (node = limbo_die_list; node; node = node->next)
21442     add_sibling_attributes (node->die);
21443   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21444     add_sibling_attributes (ctnode->root_die);
21445
21446   /* Output a terminator label for the .text section.  */
21447   switch_to_section (text_section);
21448   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21449   if (flag_reorder_blocks_and_partition)
21450     {
21451       switch_to_section (unlikely_text_section ());
21452       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21453     }
21454
21455   /* We can only use the low/high_pc attributes if all of the code was
21456      in .text.  */
21457   if (!have_multiple_function_sections
21458       || !(dwarf_version >= 3 || !dwarf_strict))
21459     {
21460       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21461       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21462     }
21463
21464   else
21465     {
21466       unsigned fde_idx = 0;
21467       bool range_list_added = false;
21468
21469       /* We need to give .debug_loc and .debug_ranges an appropriate
21470          "base address".  Use zero so that these addresses become
21471          absolute.  Historically, we've emitted the unexpected
21472          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21473          Emit both to give time for other tools to adapt.  */
21474       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21475       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21476
21477       if (text_section_used)
21478         add_ranges_by_labels (comp_unit_die, text_section_label,
21479                               text_end_label, &range_list_added);
21480       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21481         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21482                               cold_end_label, &range_list_added);
21483
21484       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21485         {
21486           dw_fde_ref fde = &fde_table[fde_idx];
21487
21488           if (fde->dw_fde_switched_sections)
21489             {
21490               if (!fde->in_std_section)
21491                 add_ranges_by_labels (comp_unit_die,
21492                                       fde->dw_fde_hot_section_label,
21493                                       fde->dw_fde_hot_section_end_label,
21494                                       &range_list_added);
21495               if (!fde->cold_in_std_section)
21496                 add_ranges_by_labels (comp_unit_die,
21497                                       fde->dw_fde_unlikely_section_label,
21498                                       fde->dw_fde_unlikely_section_end_label,
21499                                       &range_list_added);
21500             }
21501           else if (!fde->in_std_section)
21502             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21503                                   fde->dw_fde_end, &range_list_added);
21504         }
21505
21506       if (range_list_added)
21507         add_ranges (NULL);
21508     }
21509
21510   /* Output location list section if necessary.  */
21511   if (have_location_lists)
21512     {
21513       /* Output the location lists info.  */
21514       switch_to_section (debug_loc_section);
21515       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21516                                    DEBUG_LOC_SECTION_LABEL, 0);
21517       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21518       output_location_lists (die);
21519     }
21520
21521   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21522     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21523                     debug_line_section_label);
21524
21525   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21526     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21527
21528   /* Output all of the compilation units.  We put the main one last so that
21529      the offsets are available to output_pubnames.  */
21530   for (node = limbo_die_list; node; node = node->next)
21531     output_comp_unit (node->die, 0);
21532
21533   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21534   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21535     {
21536       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21537
21538       /* Don't output duplicate types.  */
21539       if (*slot != HTAB_EMPTY_ENTRY)
21540         continue;
21541
21542       /* Add a pointer to the line table for the main compilation unit
21543          so that the debugger can make sense of DW_AT_decl_file
21544          attributes.  */
21545       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21546         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21547                         debug_line_section_label);
21548
21549       output_comdat_type_unit (ctnode);
21550       *slot = ctnode;
21551     }
21552   htab_delete (comdat_type_table);
21553
21554   /* Output the main compilation unit if non-empty or if .debug_macinfo
21555      has been emitted.  */
21556   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21557
21558   /* Output the abbreviation table.  */
21559   switch_to_section (debug_abbrev_section);
21560   output_abbrev_section ();
21561
21562   /* Output public names table if necessary.  */
21563   if (!VEC_empty (pubname_entry, pubname_table))
21564     {
21565       switch_to_section (debug_pubnames_section);
21566       output_pubnames (pubname_table);
21567     }
21568
21569   /* Output public types table if necessary.  */
21570   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21571      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21572      simply won't look for the section.  */
21573   if (!VEC_empty (pubname_entry, pubtype_table))
21574     {
21575       switch_to_section (debug_pubtypes_section);
21576       output_pubnames (pubtype_table);
21577     }
21578
21579   /* Output direct and virtual call tables if necessary.  */
21580   if (!VEC_empty (dcall_entry, dcall_table))
21581     {
21582       switch_to_section (debug_dcall_section);
21583       output_dcall_table ();
21584     }
21585   if (!VEC_empty (vcall_entry, vcall_table))
21586     {
21587       switch_to_section (debug_vcall_section);
21588       output_vcall_table ();
21589     }
21590
21591   /* Output the address range information.  We only put functions in the arange
21592      table, so don't write it out if we don't have any.  */
21593   if (fde_table_in_use)
21594     {
21595       switch_to_section (debug_aranges_section);
21596       output_aranges ();
21597     }
21598
21599   /* Output ranges section if necessary.  */
21600   if (ranges_table_in_use)
21601     {
21602       switch_to_section (debug_ranges_section);
21603       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21604       output_ranges ();
21605     }
21606
21607   /* Output the source line correspondence table.  We must do this
21608      even if there is no line information.  Otherwise, on an empty
21609      translation unit, we will generate a present, but empty,
21610      .debug_info section.  IRIX 6.5 `nm' will then complain when
21611      examining the file.  This is done late so that any filenames
21612      used by the debug_info section are marked as 'used'.  */
21613   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21614     {
21615       switch_to_section (debug_line_section);
21616       output_line_info ();
21617     }
21618
21619   /* Have to end the macro section.  */
21620   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21621     {
21622       switch_to_section (debug_macinfo_section);
21623       dw2_asm_output_data (1, 0, "End compilation unit");
21624     }
21625
21626   /* If we emitted any DW_FORM_strp form attribute, output the string
21627      table too.  */
21628   if (debug_str_hash)
21629     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21630 }
21631 #else
21632
21633 /* This should never be used, but its address is needed for comparisons.  */
21634 const struct gcc_debug_hooks dwarf2_debug_hooks =
21635 {
21636   0,            /* init */
21637   0,            /* finish */
21638   0,            /* assembly_start */
21639   0,            /* define */
21640   0,            /* undef */
21641   0,            /* start_source_file */
21642   0,            /* end_source_file */
21643   0,            /* begin_block */
21644   0,            /* end_block */
21645   0,            /* ignore_block */
21646   0,            /* source_line */
21647   0,            /* begin_prologue */
21648   0,            /* end_prologue */
21649   0,            /* end_epilogue */
21650   0,            /* begin_function */
21651   0,            /* end_function */
21652   0,            /* function_decl */
21653   0,            /* global_decl */
21654   0,            /* type_decl */
21655   0,            /* imported_module_or_decl */
21656   0,            /* deferred_inline_function */
21657   0,            /* outlining_inline_function */
21658   0,            /* label */
21659   0,            /* handle_pch */
21660   0,            /* var_location */
21661   0,            /* switch_text_section */
21662   0,            /* direct_call */
21663   0,            /* virtual_call_token */
21664   0,            /* copy_call_info */
21665   0,            /* virtual_call */
21666   0,            /* set_name */
21667   0             /* start_end_main_source_file */
21668 };
21669
21670 #endif /* DWARF2_DEBUGGING_INFO */
21671
21672 #include "gt-dwarf2out.h"