OSDN Git Service

21a3f75f85516b08f681ed49b4d17aa25c454f4f
[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   if (dw_cie_version >= 4)
3775     {
3776       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3777       dw2_asm_output_data (1, 0, "CIE Segment Size");
3778     }
3779   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3780   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3781                                "CIE Data Alignment Factor");
3782
3783   if (dw_cie_version == 1)
3784     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3785   else
3786     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3787
3788   if (augmentation[0])
3789     {
3790       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3791       if (personality)
3792         {
3793           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3794                                eh_data_format_name (per_encoding));
3795           dw2_asm_output_encoded_addr_rtx (per_encoding,
3796                                            personality,
3797                                            true, NULL);
3798         }
3799
3800       if (any_lsda_needed)
3801         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3802                              eh_data_format_name (lsda_encoding));
3803
3804       if (fde_encoding != DW_EH_PE_absptr)
3805         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3806                              eh_data_format_name (fde_encoding));
3807     }
3808
3809   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3810     output_cfi (cfi, NULL, for_eh);
3811
3812   /* Pad the CIE out to an address sized boundary.  */
3813   ASM_OUTPUT_ALIGN (asm_out_file,
3814                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3815   ASM_OUTPUT_LABEL (asm_out_file, l2);
3816
3817   /* Loop through all of the FDE's.  */
3818   for (i = 0; i < fde_table_in_use; i++)
3819     {
3820       unsigned int k;
3821       fde = &fde_table[i];
3822
3823       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3824       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3825           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3826           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3827           && !fde->uses_eh_lsda)
3828         continue;
3829
3830       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3831         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3832                     augmentation, any_lsda_needed, lsda_encoding);
3833     }
3834
3835   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3836     dw2_asm_output_data (4, 0, "End of Table");
3837 #ifdef MIPS_DEBUGGING_INFO
3838   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3839      get a value of 0.  Putting .align 0 after the label fixes it.  */
3840   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3841 #endif
3842
3843   /* Turn off app to make assembly quicker.  */
3844   if (flag_debug_asm)
3845     app_disable ();
3846 }
3847
3848 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3849
3850 static void
3851 dwarf2out_do_cfi_startproc (bool second)
3852 {
3853   int enc;
3854   rtx ref;
3855   rtx personality = get_personality_function (current_function_decl);
3856
3857   fprintf (asm_out_file, "\t.cfi_startproc\n");
3858
3859   if (personality)
3860     {
3861       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3862       ref = personality;
3863
3864       /* ??? The GAS support isn't entirely consistent.  We have to
3865          handle indirect support ourselves, but PC-relative is done
3866          in the assembler.  Further, the assembler can't handle any
3867          of the weirder relocation types.  */
3868       if (enc & DW_EH_PE_indirect)
3869         ref = dw2_force_const_mem (ref, true);
3870
3871       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3872       output_addr_const (asm_out_file, ref);
3873       fputc ('\n', asm_out_file);
3874     }
3875
3876   if (crtl->uses_eh_lsda)
3877     {
3878       char lab[20];
3879
3880       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3881       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3882                                    current_function_funcdef_no);
3883       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3884       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3885
3886       if (enc & DW_EH_PE_indirect)
3887         ref = dw2_force_const_mem (ref, true);
3888
3889       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3890       output_addr_const (asm_out_file, ref);
3891       fputc ('\n', asm_out_file);
3892     }
3893 }
3894
3895 /* Output a marker (i.e. a label) for the beginning of a function, before
3896    the prologue.  */
3897
3898 void
3899 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3900                           const char *file ATTRIBUTE_UNUSED)
3901 {
3902   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3903   char * dup_label;
3904   dw_fde_ref fde;
3905   section *fnsec;
3906
3907   current_function_func_begin_label = NULL;
3908
3909 #ifdef TARGET_UNWIND_INFO
3910   /* ??? current_function_func_begin_label is also used by except.c
3911      for call-site information.  We must emit this label if it might
3912      be used.  */
3913   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3914       && ! dwarf2out_do_frame ())
3915     return;
3916 #else
3917   if (! dwarf2out_do_frame ())
3918     return;
3919 #endif
3920
3921   fnsec = function_section (current_function_decl);
3922   switch_to_section (fnsec);
3923   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3924                                current_function_funcdef_no);
3925   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3926                           current_function_funcdef_no);
3927   dup_label = xstrdup (label);
3928   current_function_func_begin_label = dup_label;
3929
3930 #ifdef TARGET_UNWIND_INFO
3931   /* We can elide the fde allocation if we're not emitting debug info.  */
3932   if (! dwarf2out_do_frame ())
3933     return;
3934 #endif
3935
3936   /* Expand the fde table if necessary.  */
3937   if (fde_table_in_use == fde_table_allocated)
3938     {
3939       fde_table_allocated += FDE_TABLE_INCREMENT;
3940       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3941       memset (fde_table + fde_table_in_use, 0,
3942               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3943     }
3944
3945   /* Record the FDE associated with this function.  */
3946   current_funcdef_fde = fde_table_in_use;
3947
3948   /* Add the new FDE at the end of the fde_table.  */
3949   fde = &fde_table[fde_table_in_use++];
3950   fde->decl = current_function_decl;
3951   fde->dw_fde_begin = dup_label;
3952   fde->dw_fde_current_label = dup_label;
3953   fde->dw_fde_hot_section_label = NULL;
3954   fde->dw_fde_hot_section_end_label = NULL;
3955   fde->dw_fde_unlikely_section_label = NULL;
3956   fde->dw_fde_unlikely_section_end_label = NULL;
3957   fde->dw_fde_switched_sections = 0;
3958   fde->dw_fde_switched_cold_to_hot = 0;
3959   fde->dw_fde_end = NULL;
3960   fde->dw_fde_cfi = NULL;
3961   fde->dw_fde_switch_cfi = NULL;
3962   fde->funcdef_number = current_function_funcdef_no;
3963   fde->nothrow = crtl->nothrow;
3964   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3965   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3966   fde->drap_reg = INVALID_REGNUM;
3967   fde->vdrap_reg = INVALID_REGNUM;
3968   if (flag_reorder_blocks_and_partition)
3969     {
3970       section *unlikelysec;
3971       if (first_function_block_is_cold)
3972         fde->in_std_section = 1;
3973       else
3974         fde->in_std_section
3975           = (fnsec == text_section
3976              || (cold_text_section && fnsec == cold_text_section));
3977       unlikelysec = unlikely_text_section ();
3978       fde->cold_in_std_section
3979         = (unlikelysec == text_section
3980            || (cold_text_section && unlikelysec == cold_text_section));
3981     }
3982   else
3983     {
3984       fde->in_std_section
3985         = (fnsec == text_section
3986            || (cold_text_section && fnsec == cold_text_section));
3987       fde->cold_in_std_section = 0;
3988     }
3989
3990   args_size = old_args_size = 0;
3991
3992   /* We only want to output line number information for the genuine dwarf2
3993      prologue case, not the eh frame case.  */
3994 #ifdef DWARF2_DEBUGGING_INFO
3995   if (file)
3996     dwarf2out_source_line (line, file, 0, true);
3997 #endif
3998
3999   if (dwarf2out_do_cfi_asm ())
4000     dwarf2out_do_cfi_startproc (false);
4001   else
4002     {
4003       rtx personality = get_personality_function (current_function_decl);
4004       if (!current_unit_personality)
4005         current_unit_personality = personality;
4006
4007       /* We cannot keep a current personality per function as without CFI
4008          asm at the point where we emit the CFI data there is no current
4009          function anymore.  */
4010       if (personality
4011           && current_unit_personality != personality)
4012         sorry ("Multiple EH personalities are supported only with assemblers "
4013                "supporting .cfi.personality directive.");
4014     }
4015 }
4016
4017 /* Output a marker (i.e. a label) for the absolute end of the generated code
4018    for a function definition.  This gets called *after* the epilogue code has
4019    been generated.  */
4020
4021 void
4022 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4023                         const char *file ATTRIBUTE_UNUSED)
4024 {
4025   dw_fde_ref fde;
4026   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4027
4028 #ifdef DWARF2_DEBUGGING_INFO
4029   last_var_location_insn = NULL_RTX;
4030 #endif
4031
4032   if (dwarf2out_do_cfi_asm ())
4033     fprintf (asm_out_file, "\t.cfi_endproc\n");
4034
4035   /* Output a label to mark the endpoint of the code generated for this
4036      function.  */
4037   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4038                                current_function_funcdef_no);
4039   ASM_OUTPUT_LABEL (asm_out_file, label);
4040   fde = current_fde ();
4041   gcc_assert (fde != NULL);
4042   fde->dw_fde_end = xstrdup (label);
4043 }
4044
4045 void
4046 dwarf2out_frame_init (void)
4047 {
4048   /* Allocate the initial hunk of the fde_table.  */
4049   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4050   fde_table_allocated = FDE_TABLE_INCREMENT;
4051   fde_table_in_use = 0;
4052
4053   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4054      sake of lookup_cfa.  */
4055
4056   /* On entry, the Canonical Frame Address is at SP.  */
4057   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4058
4059 #ifdef DWARF2_UNWIND_INFO
4060   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4061     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4062 #endif
4063 }
4064
4065 void
4066 dwarf2out_frame_finish (void)
4067 {
4068   /* Output call frame information.  */
4069   if (DWARF2_FRAME_INFO)
4070     output_call_frame_info (0);
4071
4072 #ifndef TARGET_UNWIND_INFO
4073   /* Output another copy for the unwinder.  */
4074   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4075     output_call_frame_info (1);
4076 #endif
4077 }
4078
4079 /* Note that the current function section is being used for code.  */
4080
4081 static void
4082 dwarf2out_note_section_used (void)
4083 {
4084   section *sec = current_function_section ();
4085   if (sec == text_section)
4086     text_section_used = true;
4087   else if (sec == cold_text_section)
4088     cold_text_section_used = true;
4089 }
4090
4091 void
4092 dwarf2out_switch_text_section (void)
4093 {
4094   dw_fde_ref fde = current_fde ();
4095
4096   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4097
4098   fde->dw_fde_switched_sections = 1;
4099   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4100
4101   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4102   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4103   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4104   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4105   have_multiple_function_sections = true;
4106
4107   /* Reset the current label on switching text sections, so that we
4108      don't attempt to advance_loc4 between labels in different sections.  */
4109   fde->dw_fde_current_label = NULL;
4110
4111   /* There is no need to mark used sections when not debugging.  */
4112   if (cold_text_section != NULL)
4113     dwarf2out_note_section_used ();
4114
4115   if (dwarf2out_do_cfi_asm ())
4116     fprintf (asm_out_file, "\t.cfi_endproc\n");
4117
4118   /* Now do the real section switch.  */
4119   switch_to_section (current_function_section ());
4120
4121   if (dwarf2out_do_cfi_asm ())
4122     {
4123       dwarf2out_do_cfi_startproc (true);
4124       /* As this is a different FDE, insert all current CFI instructions
4125          again.  */
4126       output_cfis (fde->dw_fde_cfi, true, fde, true);
4127     }
4128   else
4129     {
4130       dw_cfi_ref cfi = fde->dw_fde_cfi;
4131
4132       cfi = fde->dw_fde_cfi;
4133       if (cfi)
4134         while (cfi->dw_cfi_next != NULL)
4135           cfi = cfi->dw_cfi_next;
4136       fde->dw_fde_switch_cfi = cfi;
4137     }
4138 }
4139 #endif
4140 \f
4141 /* And now, the subset of the debugging information support code necessary
4142    for emitting location expressions.  */
4143
4144 /* Data about a single source file.  */
4145 struct GTY(()) dwarf_file_data {
4146   const char * filename;
4147   int emitted_number;
4148 };
4149
4150 typedef struct dw_val_struct *dw_val_ref;
4151 typedef struct die_struct *dw_die_ref;
4152 typedef const struct die_struct *const_dw_die_ref;
4153 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4154 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4155
4156 typedef struct GTY(()) deferred_locations_struct
4157 {
4158   tree variable;
4159   dw_die_ref die;
4160 } deferred_locations;
4161
4162 DEF_VEC_O(deferred_locations);
4163 DEF_VEC_ALLOC_O(deferred_locations,gc);
4164
4165 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4166
4167 DEF_VEC_P(dw_die_ref);
4168 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4169
4170 /* Each DIE may have a series of attribute/value pairs.  Values
4171    can take on several forms.  The forms that are used in this
4172    implementation are listed below.  */
4173
4174 enum dw_val_class
4175 {
4176   dw_val_class_addr,
4177   dw_val_class_offset,
4178   dw_val_class_loc,
4179   dw_val_class_loc_list,
4180   dw_val_class_range_list,
4181   dw_val_class_const,
4182   dw_val_class_unsigned_const,
4183   dw_val_class_const_double,
4184   dw_val_class_vec,
4185   dw_val_class_flag,
4186   dw_val_class_die_ref,
4187   dw_val_class_fde_ref,
4188   dw_val_class_lbl_id,
4189   dw_val_class_lineptr,
4190   dw_val_class_str,
4191   dw_val_class_macptr,
4192   dw_val_class_file,
4193   dw_val_class_data8
4194 };
4195
4196 /* Describe a floating point constant value, or a vector constant value.  */
4197
4198 typedef struct GTY(()) dw_vec_struct {
4199   unsigned char * GTY((length ("%h.length"))) array;
4200   unsigned length;
4201   unsigned elt_size;
4202 }
4203 dw_vec_const;
4204
4205 /* The dw_val_node describes an attribute's value, as it is
4206    represented internally.  */
4207
4208 typedef struct GTY(()) dw_val_struct {
4209   enum dw_val_class val_class;
4210   union dw_val_struct_union
4211     {
4212       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4213       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4214       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4215       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4216       HOST_WIDE_INT GTY ((default)) val_int;
4217       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4218       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4219       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4220       struct dw_val_die_union
4221         {
4222           dw_die_ref die;
4223           int external;
4224         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4225       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4226       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4227       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4228       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4229       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4230       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4231     }
4232   GTY ((desc ("%1.val_class"))) v;
4233 }
4234 dw_val_node;
4235
4236 /* Locations in memory are described using a sequence of stack machine
4237    operations.  */
4238
4239 typedef struct GTY(()) dw_loc_descr_struct {
4240   dw_loc_descr_ref dw_loc_next;
4241   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4242   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4243      from DW_OP_addr with a dtp-relative symbol relocation.  */
4244   unsigned int dtprel : 1;
4245   int dw_loc_addr;
4246   dw_val_node dw_loc_oprnd1;
4247   dw_val_node dw_loc_oprnd2;
4248 }
4249 dw_loc_descr_node;
4250
4251 /* Location lists are ranges + location descriptions for that range,
4252    so you can track variables that are in different places over
4253    their entire life.  */
4254 typedef struct GTY(()) dw_loc_list_struct {
4255   dw_loc_list_ref dw_loc_next;
4256   const char *begin; /* Label for begin address of range */
4257   const char *end;  /* Label for end address of range */
4258   char *ll_symbol; /* Label for beginning of location list.
4259                       Only on head of list */
4260   const char *section; /* Section this loclist is relative to */
4261   dw_loc_descr_ref expr;
4262 } dw_loc_list_node;
4263
4264 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4265
4266 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4267
4268 /* Convert a DWARF stack opcode into its string name.  */
4269
4270 static const char *
4271 dwarf_stack_op_name (unsigned int op)
4272 {
4273   switch (op)
4274     {
4275     case DW_OP_addr:
4276       return "DW_OP_addr";
4277     case DW_OP_deref:
4278       return "DW_OP_deref";
4279     case DW_OP_const1u:
4280       return "DW_OP_const1u";
4281     case DW_OP_const1s:
4282       return "DW_OP_const1s";
4283     case DW_OP_const2u:
4284       return "DW_OP_const2u";
4285     case DW_OP_const2s:
4286       return "DW_OP_const2s";
4287     case DW_OP_const4u:
4288       return "DW_OP_const4u";
4289     case DW_OP_const4s:
4290       return "DW_OP_const4s";
4291     case DW_OP_const8u:
4292       return "DW_OP_const8u";
4293     case DW_OP_const8s:
4294       return "DW_OP_const8s";
4295     case DW_OP_constu:
4296       return "DW_OP_constu";
4297     case DW_OP_consts:
4298       return "DW_OP_consts";
4299     case DW_OP_dup:
4300       return "DW_OP_dup";
4301     case DW_OP_drop:
4302       return "DW_OP_drop";
4303     case DW_OP_over:
4304       return "DW_OP_over";
4305     case DW_OP_pick:
4306       return "DW_OP_pick";
4307     case DW_OP_swap:
4308       return "DW_OP_swap";
4309     case DW_OP_rot:
4310       return "DW_OP_rot";
4311     case DW_OP_xderef:
4312       return "DW_OP_xderef";
4313     case DW_OP_abs:
4314       return "DW_OP_abs";
4315     case DW_OP_and:
4316       return "DW_OP_and";
4317     case DW_OP_div:
4318       return "DW_OP_div";
4319     case DW_OP_minus:
4320       return "DW_OP_minus";
4321     case DW_OP_mod:
4322       return "DW_OP_mod";
4323     case DW_OP_mul:
4324       return "DW_OP_mul";
4325     case DW_OP_neg:
4326       return "DW_OP_neg";
4327     case DW_OP_not:
4328       return "DW_OP_not";
4329     case DW_OP_or:
4330       return "DW_OP_or";
4331     case DW_OP_plus:
4332       return "DW_OP_plus";
4333     case DW_OP_plus_uconst:
4334       return "DW_OP_plus_uconst";
4335     case DW_OP_shl:
4336       return "DW_OP_shl";
4337     case DW_OP_shr:
4338       return "DW_OP_shr";
4339     case DW_OP_shra:
4340       return "DW_OP_shra";
4341     case DW_OP_xor:
4342       return "DW_OP_xor";
4343     case DW_OP_bra:
4344       return "DW_OP_bra";
4345     case DW_OP_eq:
4346       return "DW_OP_eq";
4347     case DW_OP_ge:
4348       return "DW_OP_ge";
4349     case DW_OP_gt:
4350       return "DW_OP_gt";
4351     case DW_OP_le:
4352       return "DW_OP_le";
4353     case DW_OP_lt:
4354       return "DW_OP_lt";
4355     case DW_OP_ne:
4356       return "DW_OP_ne";
4357     case DW_OP_skip:
4358       return "DW_OP_skip";
4359     case DW_OP_lit0:
4360       return "DW_OP_lit0";
4361     case DW_OP_lit1:
4362       return "DW_OP_lit1";
4363     case DW_OP_lit2:
4364       return "DW_OP_lit2";
4365     case DW_OP_lit3:
4366       return "DW_OP_lit3";
4367     case DW_OP_lit4:
4368       return "DW_OP_lit4";
4369     case DW_OP_lit5:
4370       return "DW_OP_lit5";
4371     case DW_OP_lit6:
4372       return "DW_OP_lit6";
4373     case DW_OP_lit7:
4374       return "DW_OP_lit7";
4375     case DW_OP_lit8:
4376       return "DW_OP_lit8";
4377     case DW_OP_lit9:
4378       return "DW_OP_lit9";
4379     case DW_OP_lit10:
4380       return "DW_OP_lit10";
4381     case DW_OP_lit11:
4382       return "DW_OP_lit11";
4383     case DW_OP_lit12:
4384       return "DW_OP_lit12";
4385     case DW_OP_lit13:
4386       return "DW_OP_lit13";
4387     case DW_OP_lit14:
4388       return "DW_OP_lit14";
4389     case DW_OP_lit15:
4390       return "DW_OP_lit15";
4391     case DW_OP_lit16:
4392       return "DW_OP_lit16";
4393     case DW_OP_lit17:
4394       return "DW_OP_lit17";
4395     case DW_OP_lit18:
4396       return "DW_OP_lit18";
4397     case DW_OP_lit19:
4398       return "DW_OP_lit19";
4399     case DW_OP_lit20:
4400       return "DW_OP_lit20";
4401     case DW_OP_lit21:
4402       return "DW_OP_lit21";
4403     case DW_OP_lit22:
4404       return "DW_OP_lit22";
4405     case DW_OP_lit23:
4406       return "DW_OP_lit23";
4407     case DW_OP_lit24:
4408       return "DW_OP_lit24";
4409     case DW_OP_lit25:
4410       return "DW_OP_lit25";
4411     case DW_OP_lit26:
4412       return "DW_OP_lit26";
4413     case DW_OP_lit27:
4414       return "DW_OP_lit27";
4415     case DW_OP_lit28:
4416       return "DW_OP_lit28";
4417     case DW_OP_lit29:
4418       return "DW_OP_lit29";
4419     case DW_OP_lit30:
4420       return "DW_OP_lit30";
4421     case DW_OP_lit31:
4422       return "DW_OP_lit31";
4423     case DW_OP_reg0:
4424       return "DW_OP_reg0";
4425     case DW_OP_reg1:
4426       return "DW_OP_reg1";
4427     case DW_OP_reg2:
4428       return "DW_OP_reg2";
4429     case DW_OP_reg3:
4430       return "DW_OP_reg3";
4431     case DW_OP_reg4:
4432       return "DW_OP_reg4";
4433     case DW_OP_reg5:
4434       return "DW_OP_reg5";
4435     case DW_OP_reg6:
4436       return "DW_OP_reg6";
4437     case DW_OP_reg7:
4438       return "DW_OP_reg7";
4439     case DW_OP_reg8:
4440       return "DW_OP_reg8";
4441     case DW_OP_reg9:
4442       return "DW_OP_reg9";
4443     case DW_OP_reg10:
4444       return "DW_OP_reg10";
4445     case DW_OP_reg11:
4446       return "DW_OP_reg11";
4447     case DW_OP_reg12:
4448       return "DW_OP_reg12";
4449     case DW_OP_reg13:
4450       return "DW_OP_reg13";
4451     case DW_OP_reg14:
4452       return "DW_OP_reg14";
4453     case DW_OP_reg15:
4454       return "DW_OP_reg15";
4455     case DW_OP_reg16:
4456       return "DW_OP_reg16";
4457     case DW_OP_reg17:
4458       return "DW_OP_reg17";
4459     case DW_OP_reg18:
4460       return "DW_OP_reg18";
4461     case DW_OP_reg19:
4462       return "DW_OP_reg19";
4463     case DW_OP_reg20:
4464       return "DW_OP_reg20";
4465     case DW_OP_reg21:
4466       return "DW_OP_reg21";
4467     case DW_OP_reg22:
4468       return "DW_OP_reg22";
4469     case DW_OP_reg23:
4470       return "DW_OP_reg23";
4471     case DW_OP_reg24:
4472       return "DW_OP_reg24";
4473     case DW_OP_reg25:
4474       return "DW_OP_reg25";
4475     case DW_OP_reg26:
4476       return "DW_OP_reg26";
4477     case DW_OP_reg27:
4478       return "DW_OP_reg27";
4479     case DW_OP_reg28:
4480       return "DW_OP_reg28";
4481     case DW_OP_reg29:
4482       return "DW_OP_reg29";
4483     case DW_OP_reg30:
4484       return "DW_OP_reg30";
4485     case DW_OP_reg31:
4486       return "DW_OP_reg31";
4487     case DW_OP_breg0:
4488       return "DW_OP_breg0";
4489     case DW_OP_breg1:
4490       return "DW_OP_breg1";
4491     case DW_OP_breg2:
4492       return "DW_OP_breg2";
4493     case DW_OP_breg3:
4494       return "DW_OP_breg3";
4495     case DW_OP_breg4:
4496       return "DW_OP_breg4";
4497     case DW_OP_breg5:
4498       return "DW_OP_breg5";
4499     case DW_OP_breg6:
4500       return "DW_OP_breg6";
4501     case DW_OP_breg7:
4502       return "DW_OP_breg7";
4503     case DW_OP_breg8:
4504       return "DW_OP_breg8";
4505     case DW_OP_breg9:
4506       return "DW_OP_breg9";
4507     case DW_OP_breg10:
4508       return "DW_OP_breg10";
4509     case DW_OP_breg11:
4510       return "DW_OP_breg11";
4511     case DW_OP_breg12:
4512       return "DW_OP_breg12";
4513     case DW_OP_breg13:
4514       return "DW_OP_breg13";
4515     case DW_OP_breg14:
4516       return "DW_OP_breg14";
4517     case DW_OP_breg15:
4518       return "DW_OP_breg15";
4519     case DW_OP_breg16:
4520       return "DW_OP_breg16";
4521     case DW_OP_breg17:
4522       return "DW_OP_breg17";
4523     case DW_OP_breg18:
4524       return "DW_OP_breg18";
4525     case DW_OP_breg19:
4526       return "DW_OP_breg19";
4527     case DW_OP_breg20:
4528       return "DW_OP_breg20";
4529     case DW_OP_breg21:
4530       return "DW_OP_breg21";
4531     case DW_OP_breg22:
4532       return "DW_OP_breg22";
4533     case DW_OP_breg23:
4534       return "DW_OP_breg23";
4535     case DW_OP_breg24:
4536       return "DW_OP_breg24";
4537     case DW_OP_breg25:
4538       return "DW_OP_breg25";
4539     case DW_OP_breg26:
4540       return "DW_OP_breg26";
4541     case DW_OP_breg27:
4542       return "DW_OP_breg27";
4543     case DW_OP_breg28:
4544       return "DW_OP_breg28";
4545     case DW_OP_breg29:
4546       return "DW_OP_breg29";
4547     case DW_OP_breg30:
4548       return "DW_OP_breg30";
4549     case DW_OP_breg31:
4550       return "DW_OP_breg31";
4551     case DW_OP_regx:
4552       return "DW_OP_regx";
4553     case DW_OP_fbreg:
4554       return "DW_OP_fbreg";
4555     case DW_OP_bregx:
4556       return "DW_OP_bregx";
4557     case DW_OP_piece:
4558       return "DW_OP_piece";
4559     case DW_OP_deref_size:
4560       return "DW_OP_deref_size";
4561     case DW_OP_xderef_size:
4562       return "DW_OP_xderef_size";
4563     case DW_OP_nop:
4564       return "DW_OP_nop";
4565
4566     case DW_OP_push_object_address:
4567       return "DW_OP_push_object_address";
4568     case DW_OP_call2:
4569       return "DW_OP_call2";
4570     case DW_OP_call4:
4571       return "DW_OP_call4";
4572     case DW_OP_call_ref:
4573       return "DW_OP_call_ref";
4574     case DW_OP_implicit_value:
4575       return "DW_OP_implicit_value";
4576     case DW_OP_stack_value:
4577       return "DW_OP_stack_value";
4578     case DW_OP_form_tls_address:
4579       return "DW_OP_form_tls_address";
4580     case DW_OP_call_frame_cfa:
4581       return "DW_OP_call_frame_cfa";
4582     case DW_OP_bit_piece:
4583       return "DW_OP_bit_piece";
4584
4585     case DW_OP_GNU_push_tls_address:
4586       return "DW_OP_GNU_push_tls_address";
4587     case DW_OP_GNU_uninit:
4588       return "DW_OP_GNU_uninit";
4589     case DW_OP_GNU_encoded_addr:
4590       return "DW_OP_GNU_encoded_addr";
4591
4592     default:
4593       return "OP_<unknown>";
4594     }
4595 }
4596
4597 /* Return a pointer to a newly allocated location description.  Location
4598    descriptions are simple expression terms that can be strung
4599    together to form more complicated location (address) descriptions.  */
4600
4601 static inline dw_loc_descr_ref
4602 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4603                unsigned HOST_WIDE_INT oprnd2)
4604 {
4605   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4606
4607   descr->dw_loc_opc = op;
4608   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4609   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4610   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4611   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4612
4613   return descr;
4614 }
4615
4616 /* Return a pointer to a newly allocated location description for
4617    REG and OFFSET.  */
4618
4619 static inline dw_loc_descr_ref
4620 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4621 {
4622   if (reg <= 31)
4623     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4624                           offset, 0);
4625   else
4626     return new_loc_descr (DW_OP_bregx, reg, offset);
4627 }
4628
4629 /* Add a location description term to a location description expression.  */
4630
4631 static inline void
4632 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4633 {
4634   dw_loc_descr_ref *d;
4635
4636   /* Find the end of the chain.  */
4637   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4638     ;
4639
4640   *d = descr;
4641 }
4642
4643 /* Add a constant OFFSET to a location expression.  */
4644
4645 static void
4646 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4647 {
4648   dw_loc_descr_ref loc;
4649   HOST_WIDE_INT *p;
4650
4651   gcc_assert (*list_head != NULL);
4652
4653   if (!offset)
4654     return;
4655
4656   /* Find the end of the chain.  */
4657   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4658     ;
4659
4660   p = NULL;
4661   if (loc->dw_loc_opc == DW_OP_fbreg
4662       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4663     p = &loc->dw_loc_oprnd1.v.val_int;
4664   else if (loc->dw_loc_opc == DW_OP_bregx)
4665     p = &loc->dw_loc_oprnd2.v.val_int;
4666
4667   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4668      offset.  Don't optimize if an signed integer overflow would happen.  */
4669   if (p != NULL
4670       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4671           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4672     *p += offset;
4673
4674   else if (offset > 0)
4675     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4676
4677   else
4678     {
4679       loc->dw_loc_next = int_loc_descriptor (offset);
4680       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4681     }
4682 }
4683
4684 #ifdef DWARF2_DEBUGGING_INFO
4685 /* Add a constant OFFSET to a location list.  */
4686
4687 static void
4688 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4689 {
4690   dw_loc_list_ref d;
4691   for (d = list_head; d != NULL; d = d->dw_loc_next)
4692     loc_descr_plus_const (&d->expr, offset);
4693 }
4694 #endif
4695
4696 /* Return the size of a location descriptor.  */
4697
4698 static unsigned long
4699 size_of_loc_descr (dw_loc_descr_ref loc)
4700 {
4701   unsigned long size = 1;
4702
4703   switch (loc->dw_loc_opc)
4704     {
4705     case DW_OP_addr:
4706       size += DWARF2_ADDR_SIZE;
4707       break;
4708     case DW_OP_const1u:
4709     case DW_OP_const1s:
4710       size += 1;
4711       break;
4712     case DW_OP_const2u:
4713     case DW_OP_const2s:
4714       size += 2;
4715       break;
4716     case DW_OP_const4u:
4717     case DW_OP_const4s:
4718       size += 4;
4719       break;
4720     case DW_OP_const8u:
4721     case DW_OP_const8s:
4722       size += 8;
4723       break;
4724     case DW_OP_constu:
4725       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4726       break;
4727     case DW_OP_consts:
4728       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4729       break;
4730     case DW_OP_pick:
4731       size += 1;
4732       break;
4733     case DW_OP_plus_uconst:
4734       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4735       break;
4736     case DW_OP_skip:
4737     case DW_OP_bra:
4738       size += 2;
4739       break;
4740     case DW_OP_breg0:
4741     case DW_OP_breg1:
4742     case DW_OP_breg2:
4743     case DW_OP_breg3:
4744     case DW_OP_breg4:
4745     case DW_OP_breg5:
4746     case DW_OP_breg6:
4747     case DW_OP_breg7:
4748     case DW_OP_breg8:
4749     case DW_OP_breg9:
4750     case DW_OP_breg10:
4751     case DW_OP_breg11:
4752     case DW_OP_breg12:
4753     case DW_OP_breg13:
4754     case DW_OP_breg14:
4755     case DW_OP_breg15:
4756     case DW_OP_breg16:
4757     case DW_OP_breg17:
4758     case DW_OP_breg18:
4759     case DW_OP_breg19:
4760     case DW_OP_breg20:
4761     case DW_OP_breg21:
4762     case DW_OP_breg22:
4763     case DW_OP_breg23:
4764     case DW_OP_breg24:
4765     case DW_OP_breg25:
4766     case DW_OP_breg26:
4767     case DW_OP_breg27:
4768     case DW_OP_breg28:
4769     case DW_OP_breg29:
4770     case DW_OP_breg30:
4771     case DW_OP_breg31:
4772       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4773       break;
4774     case DW_OP_regx:
4775       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4776       break;
4777     case DW_OP_fbreg:
4778       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4779       break;
4780     case DW_OP_bregx:
4781       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4782       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4783       break;
4784     case DW_OP_piece:
4785       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4786       break;
4787     case DW_OP_deref_size:
4788     case DW_OP_xderef_size:
4789       size += 1;
4790       break;
4791     case DW_OP_call2:
4792       size += 2;
4793       break;
4794     case DW_OP_call4:
4795       size += 4;
4796       break;
4797     case DW_OP_call_ref:
4798       size += DWARF2_ADDR_SIZE;
4799       break;
4800     case DW_OP_implicit_value:
4801       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4802               + loc->dw_loc_oprnd1.v.val_unsigned;
4803       break;
4804     default:
4805       break;
4806     }
4807
4808   return size;
4809 }
4810
4811 /* Return the size of a series of location descriptors.  */
4812
4813 static unsigned long
4814 size_of_locs (dw_loc_descr_ref loc)
4815 {
4816   dw_loc_descr_ref l;
4817   unsigned long size;
4818
4819   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4820      field, to avoid writing to a PCH file.  */
4821   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4822     {
4823       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4824         break;
4825       size += size_of_loc_descr (l);
4826     }
4827   if (! l)
4828     return size;
4829
4830   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4831     {
4832       l->dw_loc_addr = size;
4833       size += size_of_loc_descr (l);
4834     }
4835
4836   return size;
4837 }
4838
4839 #ifdef DWARF2_DEBUGGING_INFO
4840 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4841 #endif
4842
4843 /* Output location description stack opcode's operands (if any).  */
4844
4845 static void
4846 output_loc_operands (dw_loc_descr_ref loc)
4847 {
4848   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4849   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4850
4851   switch (loc->dw_loc_opc)
4852     {
4853 #ifdef DWARF2_DEBUGGING_INFO
4854     case DW_OP_const2u:
4855     case DW_OP_const2s:
4856       dw2_asm_output_data (2, val1->v.val_int, NULL);
4857       break;
4858     case DW_OP_const4u:
4859     case DW_OP_const4s:
4860       dw2_asm_output_data (4, val1->v.val_int, NULL);
4861       break;
4862     case DW_OP_const8u:
4863     case DW_OP_const8s:
4864       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4865       dw2_asm_output_data (8, val1->v.val_int, NULL);
4866       break;
4867     case DW_OP_skip:
4868     case DW_OP_bra:
4869       {
4870         int offset;
4871
4872         gcc_assert (val1->val_class == dw_val_class_loc);
4873         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4874
4875         dw2_asm_output_data (2, offset, NULL);
4876       }
4877       break;
4878     case DW_OP_implicit_value:
4879       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4880       switch (val2->val_class)
4881         {
4882         case dw_val_class_const:
4883           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4884           break;
4885         case dw_val_class_vec:
4886           {
4887             unsigned int elt_size = val2->v.val_vec.elt_size;
4888             unsigned int len = val2->v.val_vec.length;
4889             unsigned int i;
4890             unsigned char *p;
4891
4892             if (elt_size > sizeof (HOST_WIDE_INT))
4893               {
4894                 elt_size /= 2;
4895                 len *= 2;
4896               }
4897             for (i = 0, p = val2->v.val_vec.array;
4898                  i < len;
4899                  i++, p += elt_size)
4900               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4901                                    "fp or vector constant word %u", i);
4902           }
4903           break;
4904         case dw_val_class_const_double:
4905           {
4906             unsigned HOST_WIDE_INT first, second;
4907
4908             if (WORDS_BIG_ENDIAN)
4909               {
4910                 first = val2->v.val_double.high;
4911                 second = val2->v.val_double.low;
4912               }
4913             else
4914               {
4915                 first = val2->v.val_double.low;
4916                 second = val2->v.val_double.high;
4917               }
4918             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4919                                  first, NULL);
4920             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4921                                  second, NULL);
4922           }
4923           break;
4924         case dw_val_class_addr:
4925           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4926           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4927           break;
4928         default:
4929           gcc_unreachable ();
4930         }
4931       break;
4932 #else
4933     case DW_OP_const2u:
4934     case DW_OP_const2s:
4935     case DW_OP_const4u:
4936     case DW_OP_const4s:
4937     case DW_OP_const8u:
4938     case DW_OP_const8s:
4939     case DW_OP_skip:
4940     case DW_OP_bra:
4941     case DW_OP_implicit_value:
4942       /* We currently don't make any attempt to make sure these are
4943          aligned properly like we do for the main unwind info, so
4944          don't support emitting things larger than a byte if we're
4945          only doing unwinding.  */
4946       gcc_unreachable ();
4947 #endif
4948     case DW_OP_const1u:
4949     case DW_OP_const1s:
4950       dw2_asm_output_data (1, val1->v.val_int, NULL);
4951       break;
4952     case DW_OP_constu:
4953       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4954       break;
4955     case DW_OP_consts:
4956       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4957       break;
4958     case DW_OP_pick:
4959       dw2_asm_output_data (1, val1->v.val_int, NULL);
4960       break;
4961     case DW_OP_plus_uconst:
4962       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4963       break;
4964     case DW_OP_breg0:
4965     case DW_OP_breg1:
4966     case DW_OP_breg2:
4967     case DW_OP_breg3:
4968     case DW_OP_breg4:
4969     case DW_OP_breg5:
4970     case DW_OP_breg6:
4971     case DW_OP_breg7:
4972     case DW_OP_breg8:
4973     case DW_OP_breg9:
4974     case DW_OP_breg10:
4975     case DW_OP_breg11:
4976     case DW_OP_breg12:
4977     case DW_OP_breg13:
4978     case DW_OP_breg14:
4979     case DW_OP_breg15:
4980     case DW_OP_breg16:
4981     case DW_OP_breg17:
4982     case DW_OP_breg18:
4983     case DW_OP_breg19:
4984     case DW_OP_breg20:
4985     case DW_OP_breg21:
4986     case DW_OP_breg22:
4987     case DW_OP_breg23:
4988     case DW_OP_breg24:
4989     case DW_OP_breg25:
4990     case DW_OP_breg26:
4991     case DW_OP_breg27:
4992     case DW_OP_breg28:
4993     case DW_OP_breg29:
4994     case DW_OP_breg30:
4995     case DW_OP_breg31:
4996       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4997       break;
4998     case DW_OP_regx:
4999       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5000       break;
5001     case DW_OP_fbreg:
5002       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5003       break;
5004     case DW_OP_bregx:
5005       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5006       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5007       break;
5008     case DW_OP_piece:
5009       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5010       break;
5011     case DW_OP_deref_size:
5012     case DW_OP_xderef_size:
5013       dw2_asm_output_data (1, val1->v.val_int, NULL);
5014       break;
5015
5016     case DW_OP_addr:
5017       if (loc->dtprel)
5018         {
5019           if (targetm.asm_out.output_dwarf_dtprel)
5020             {
5021               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5022                                                    DWARF2_ADDR_SIZE,
5023                                                    val1->v.val_addr);
5024               fputc ('\n', asm_out_file);
5025             }
5026           else
5027             gcc_unreachable ();
5028         }
5029       else
5030         {
5031 #ifdef DWARF2_DEBUGGING_INFO
5032           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5033 #else
5034           gcc_unreachable ();
5035 #endif
5036         }
5037       break;
5038
5039     default:
5040       /* Other codes have no operands.  */
5041       break;
5042     }
5043 }
5044
5045 /* Output a sequence of location operations.  */
5046
5047 static void
5048 output_loc_sequence (dw_loc_descr_ref loc)
5049 {
5050   for (; loc != NULL; loc = loc->dw_loc_next)
5051     {
5052       /* Output the opcode.  */
5053       dw2_asm_output_data (1, loc->dw_loc_opc,
5054                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5055
5056       /* Output the operand(s) (if any).  */
5057       output_loc_operands (loc);
5058     }
5059 }
5060
5061 /* Output location description stack opcode's operands (if any).
5062    The output is single bytes on a line, suitable for .cfi_escape.  */
5063
5064 static void
5065 output_loc_operands_raw (dw_loc_descr_ref loc)
5066 {
5067   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5068   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5069
5070   switch (loc->dw_loc_opc)
5071     {
5072     case DW_OP_addr:
5073     case DW_OP_implicit_value:
5074       /* We cannot output addresses in .cfi_escape, only bytes.  */
5075       gcc_unreachable ();
5076
5077     case DW_OP_const1u:
5078     case DW_OP_const1s:
5079     case DW_OP_pick:
5080     case DW_OP_deref_size:
5081     case DW_OP_xderef_size:
5082       fputc (',', asm_out_file);
5083       dw2_asm_output_data_raw (1, val1->v.val_int);
5084       break;
5085
5086     case DW_OP_const2u:
5087     case DW_OP_const2s:
5088       fputc (',', asm_out_file);
5089       dw2_asm_output_data_raw (2, val1->v.val_int);
5090       break;
5091
5092     case DW_OP_const4u:
5093     case DW_OP_const4s:
5094       fputc (',', asm_out_file);
5095       dw2_asm_output_data_raw (4, val1->v.val_int);
5096       break;
5097
5098     case DW_OP_const8u:
5099     case DW_OP_const8s:
5100       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5101       fputc (',', asm_out_file);
5102       dw2_asm_output_data_raw (8, val1->v.val_int);
5103       break;
5104
5105     case DW_OP_skip:
5106     case DW_OP_bra:
5107       {
5108         int offset;
5109
5110         gcc_assert (val1->val_class == dw_val_class_loc);
5111         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5112
5113         fputc (',', asm_out_file);
5114         dw2_asm_output_data_raw (2, offset);
5115       }
5116       break;
5117
5118     case DW_OP_constu:
5119     case DW_OP_plus_uconst:
5120     case DW_OP_regx:
5121     case DW_OP_piece:
5122       fputc (',', asm_out_file);
5123       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5124       break;
5125
5126     case DW_OP_consts:
5127     case DW_OP_breg0:
5128     case DW_OP_breg1:
5129     case DW_OP_breg2:
5130     case DW_OP_breg3:
5131     case DW_OP_breg4:
5132     case DW_OP_breg5:
5133     case DW_OP_breg6:
5134     case DW_OP_breg7:
5135     case DW_OP_breg8:
5136     case DW_OP_breg9:
5137     case DW_OP_breg10:
5138     case DW_OP_breg11:
5139     case DW_OP_breg12:
5140     case DW_OP_breg13:
5141     case DW_OP_breg14:
5142     case DW_OP_breg15:
5143     case DW_OP_breg16:
5144     case DW_OP_breg17:
5145     case DW_OP_breg18:
5146     case DW_OP_breg19:
5147     case DW_OP_breg20:
5148     case DW_OP_breg21:
5149     case DW_OP_breg22:
5150     case DW_OP_breg23:
5151     case DW_OP_breg24:
5152     case DW_OP_breg25:
5153     case DW_OP_breg26:
5154     case DW_OP_breg27:
5155     case DW_OP_breg28:
5156     case DW_OP_breg29:
5157     case DW_OP_breg30:
5158     case DW_OP_breg31:
5159     case DW_OP_fbreg:
5160       fputc (',', asm_out_file);
5161       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5162       break;
5163
5164     case DW_OP_bregx:
5165       fputc (',', asm_out_file);
5166       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5167       fputc (',', asm_out_file);
5168       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5169       break;
5170
5171     default:
5172       /* Other codes have no operands.  */
5173       break;
5174     }
5175 }
5176
5177 static void
5178 output_loc_sequence_raw (dw_loc_descr_ref loc)
5179 {
5180   while (1)
5181     {
5182       /* Output the opcode.  */
5183       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5184       output_loc_operands_raw (loc);
5185
5186       if (!loc->dw_loc_next)
5187         break;
5188       loc = loc->dw_loc_next;
5189
5190       fputc (',', asm_out_file);
5191     }
5192 }
5193
5194 /* This routine will generate the correct assembly data for a location
5195    description based on a cfi entry with a complex address.  */
5196
5197 static void
5198 output_cfa_loc (dw_cfi_ref cfi)
5199 {
5200   dw_loc_descr_ref loc;
5201   unsigned long size;
5202
5203   if (cfi->dw_cfi_opc == DW_CFA_expression)
5204     {
5205       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5206       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5207     }
5208   else
5209     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5210
5211   /* Output the size of the block.  */
5212   size = size_of_locs (loc);
5213   dw2_asm_output_data_uleb128 (size, NULL);
5214
5215   /* Now output the operations themselves.  */
5216   output_loc_sequence (loc);
5217 }
5218
5219 /* Similar, but used for .cfi_escape.  */
5220
5221 static void
5222 output_cfa_loc_raw (dw_cfi_ref cfi)
5223 {
5224   dw_loc_descr_ref loc;
5225   unsigned long size;
5226
5227   if (cfi->dw_cfi_opc == DW_CFA_expression)
5228     {
5229       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5230       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5231     }
5232   else
5233     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5234
5235   /* Output the size of the block.  */
5236   size = size_of_locs (loc);
5237   dw2_asm_output_data_uleb128_raw (size);
5238   fputc (',', asm_out_file);
5239
5240   /* Now output the operations themselves.  */
5241   output_loc_sequence_raw (loc);
5242 }
5243
5244 /* This function builds a dwarf location descriptor sequence from a
5245    dw_cfa_location, adding the given OFFSET to the result of the
5246    expression.  */
5247
5248 static struct dw_loc_descr_struct *
5249 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5250 {
5251   struct dw_loc_descr_struct *head, *tmp;
5252
5253   offset += cfa->offset;
5254
5255   if (cfa->indirect)
5256     {
5257       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5258       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5259       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5260       add_loc_descr (&head, tmp);
5261       if (offset != 0)
5262         {
5263           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5264           add_loc_descr (&head, tmp);
5265         }
5266     }
5267   else
5268     head = new_reg_loc_descr (cfa->reg, offset);
5269
5270   return head;
5271 }
5272
5273 /* This function builds a dwarf location descriptor sequence for
5274    the address at OFFSET from the CFA when stack is aligned to
5275    ALIGNMENT byte.  */
5276
5277 static struct dw_loc_descr_struct *
5278 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5279 {
5280   struct dw_loc_descr_struct *head;
5281   unsigned int dwarf_fp
5282     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5283
5284  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5285   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5286     {
5287       head = new_reg_loc_descr (dwarf_fp, 0);
5288       add_loc_descr (&head, int_loc_descriptor (alignment));
5289       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5290       loc_descr_plus_const (&head, offset);
5291     }
5292   else
5293     head = new_reg_loc_descr (dwarf_fp, offset);
5294   return head;
5295 }
5296
5297 /* This function fills in aa dw_cfa_location structure from a dwarf location
5298    descriptor sequence.  */
5299
5300 static void
5301 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5302 {
5303   struct dw_loc_descr_struct *ptr;
5304   cfa->offset = 0;
5305   cfa->base_offset = 0;
5306   cfa->indirect = 0;
5307   cfa->reg = -1;
5308
5309   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5310     {
5311       enum dwarf_location_atom op = ptr->dw_loc_opc;
5312
5313       switch (op)
5314         {
5315         case DW_OP_reg0:
5316         case DW_OP_reg1:
5317         case DW_OP_reg2:
5318         case DW_OP_reg3:
5319         case DW_OP_reg4:
5320         case DW_OP_reg5:
5321         case DW_OP_reg6:
5322         case DW_OP_reg7:
5323         case DW_OP_reg8:
5324         case DW_OP_reg9:
5325         case DW_OP_reg10:
5326         case DW_OP_reg11:
5327         case DW_OP_reg12:
5328         case DW_OP_reg13:
5329         case DW_OP_reg14:
5330         case DW_OP_reg15:
5331         case DW_OP_reg16:
5332         case DW_OP_reg17:
5333         case DW_OP_reg18:
5334         case DW_OP_reg19:
5335         case DW_OP_reg20:
5336         case DW_OP_reg21:
5337         case DW_OP_reg22:
5338         case DW_OP_reg23:
5339         case DW_OP_reg24:
5340         case DW_OP_reg25:
5341         case DW_OP_reg26:
5342         case DW_OP_reg27:
5343         case DW_OP_reg28:
5344         case DW_OP_reg29:
5345         case DW_OP_reg30:
5346         case DW_OP_reg31:
5347           cfa->reg = op - DW_OP_reg0;
5348           break;
5349         case DW_OP_regx:
5350           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5351           break;
5352         case DW_OP_breg0:
5353         case DW_OP_breg1:
5354         case DW_OP_breg2:
5355         case DW_OP_breg3:
5356         case DW_OP_breg4:
5357         case DW_OP_breg5:
5358         case DW_OP_breg6:
5359         case DW_OP_breg7:
5360         case DW_OP_breg8:
5361         case DW_OP_breg9:
5362         case DW_OP_breg10:
5363         case DW_OP_breg11:
5364         case DW_OP_breg12:
5365         case DW_OP_breg13:
5366         case DW_OP_breg14:
5367         case DW_OP_breg15:
5368         case DW_OP_breg16:
5369         case DW_OP_breg17:
5370         case DW_OP_breg18:
5371         case DW_OP_breg19:
5372         case DW_OP_breg20:
5373         case DW_OP_breg21:
5374         case DW_OP_breg22:
5375         case DW_OP_breg23:
5376         case DW_OP_breg24:
5377         case DW_OP_breg25:
5378         case DW_OP_breg26:
5379         case DW_OP_breg27:
5380         case DW_OP_breg28:
5381         case DW_OP_breg29:
5382         case DW_OP_breg30:
5383         case DW_OP_breg31:
5384           cfa->reg = op - DW_OP_breg0;
5385           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5386           break;
5387         case DW_OP_bregx:
5388           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5389           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5390           break;
5391         case DW_OP_deref:
5392           cfa->indirect = 1;
5393           break;
5394         case DW_OP_plus_uconst:
5395           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5396           break;
5397         default:
5398           internal_error ("DW_LOC_OP %s not implemented",
5399                           dwarf_stack_op_name (ptr->dw_loc_opc));
5400         }
5401     }
5402 }
5403 #endif /* .debug_frame support */
5404 \f
5405 /* And now, the support for symbolic debugging information.  */
5406 #ifdef DWARF2_DEBUGGING_INFO
5407
5408 /* .debug_str support.  */
5409 static int output_indirect_string (void **, void *);
5410
5411 static void dwarf2out_init (const char *);
5412 static void dwarf2out_finish (const char *);
5413 static void dwarf2out_assembly_start (void);
5414 static void dwarf2out_define (unsigned int, const char *);
5415 static void dwarf2out_undef (unsigned int, const char *);
5416 static void dwarf2out_start_source_file (unsigned, const char *);
5417 static void dwarf2out_end_source_file (unsigned);
5418 static void dwarf2out_function_decl (tree);
5419 static void dwarf2out_begin_block (unsigned, unsigned);
5420 static void dwarf2out_end_block (unsigned, unsigned);
5421 static bool dwarf2out_ignore_block (const_tree);
5422 static void dwarf2out_global_decl (tree);
5423 static void dwarf2out_type_decl (tree, int);
5424 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5425 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5426                                                  dw_die_ref);
5427 static void dwarf2out_abstract_function (tree);
5428 static void dwarf2out_var_location (rtx);
5429 static void dwarf2out_direct_call (tree);
5430 static void dwarf2out_virtual_call_token (tree, int);
5431 static void dwarf2out_copy_call_info (rtx, rtx);
5432 static void dwarf2out_virtual_call (int);
5433 static void dwarf2out_begin_function (tree);
5434 static void dwarf2out_set_name (tree, tree);
5435
5436 /* The debug hooks structure.  */
5437
5438 const struct gcc_debug_hooks dwarf2_debug_hooks =
5439 {
5440   dwarf2out_init,
5441   dwarf2out_finish,
5442   dwarf2out_assembly_start,
5443   dwarf2out_define,
5444   dwarf2out_undef,
5445   dwarf2out_start_source_file,
5446   dwarf2out_end_source_file,
5447   dwarf2out_begin_block,
5448   dwarf2out_end_block,
5449   dwarf2out_ignore_block,
5450   dwarf2out_source_line,
5451   dwarf2out_begin_prologue,
5452   debug_nothing_int_charstar,   /* end_prologue */
5453   dwarf2out_end_epilogue,
5454   dwarf2out_begin_function,
5455   debug_nothing_int,            /* end_function */
5456   dwarf2out_function_decl,      /* function_decl */
5457   dwarf2out_global_decl,
5458   dwarf2out_type_decl,          /* type_decl */
5459   dwarf2out_imported_module_or_decl,
5460   debug_nothing_tree,           /* deferred_inline_function */
5461   /* The DWARF 2 backend tries to reduce debugging bloat by not
5462      emitting the abstract description of inline functions until
5463      something tries to reference them.  */
5464   dwarf2out_abstract_function,  /* outlining_inline_function */
5465   debug_nothing_rtx,            /* label */
5466   debug_nothing_int,            /* handle_pch */
5467   dwarf2out_var_location,
5468   dwarf2out_switch_text_section,
5469   dwarf2out_direct_call,
5470   dwarf2out_virtual_call_token,
5471   dwarf2out_copy_call_info,
5472   dwarf2out_virtual_call,
5473   dwarf2out_set_name,
5474   1                             /* start_end_main_source_file */
5475 };
5476 #endif
5477 \f
5478 /* NOTE: In the comments in this file, many references are made to
5479    "Debugging Information Entries".  This term is abbreviated as `DIE'
5480    throughout the remainder of this file.  */
5481
5482 /* An internal representation of the DWARF output is built, and then
5483    walked to generate the DWARF debugging info.  The walk of the internal
5484    representation is done after the entire program has been compiled.
5485    The types below are used to describe the internal representation.  */
5486
5487 /* Various DIE's use offsets relative to the beginning of the
5488    .debug_info section to refer to each other.  */
5489
5490 typedef long int dw_offset;
5491
5492 /* Define typedefs here to avoid circular dependencies.  */
5493
5494 typedef struct dw_attr_struct *dw_attr_ref;
5495 typedef struct dw_line_info_struct *dw_line_info_ref;
5496 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5497 typedef struct pubname_struct *pubname_ref;
5498 typedef struct dw_ranges_struct *dw_ranges_ref;
5499 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5500 typedef struct comdat_type_struct *comdat_type_node_ref;
5501
5502 /* Each entry in the line_info_table maintains the file and
5503    line number associated with the label generated for that
5504    entry.  The label gives the PC value associated with
5505    the line number entry.  */
5506
5507 typedef struct GTY(()) dw_line_info_struct {
5508   unsigned long dw_file_num;
5509   unsigned long dw_line_num;
5510 }
5511 dw_line_info_entry;
5512
5513 /* Line information for functions in separate sections; each one gets its
5514    own sequence.  */
5515 typedef struct GTY(()) dw_separate_line_info_struct {
5516   unsigned long dw_file_num;
5517   unsigned long dw_line_num;
5518   unsigned long function;
5519 }
5520 dw_separate_line_info_entry;
5521
5522 /* Each DIE attribute has a field specifying the attribute kind,
5523    a link to the next attribute in the chain, and an attribute value.
5524    Attributes are typically linked below the DIE they modify.  */
5525
5526 typedef struct GTY(()) dw_attr_struct {
5527   enum dwarf_attribute dw_attr;
5528   dw_val_node dw_attr_val;
5529 }
5530 dw_attr_node;
5531
5532 DEF_VEC_O(dw_attr_node);
5533 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5534
5535 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5536    The children of each node form a circular list linked by
5537    die_sib.  die_child points to the node *before* the "first" child node.  */
5538
5539 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5540   enum dwarf_tag die_tag;
5541   union die_symbol_or_type_node
5542     {
5543       char * GTY ((tag ("0"))) die_symbol;
5544       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5545     }
5546   GTY ((desc ("dwarf_version >= 4"))) die_id;
5547   VEC(dw_attr_node,gc) * die_attr;
5548   dw_die_ref die_parent;
5549   dw_die_ref die_child;
5550   dw_die_ref die_sib;
5551   dw_die_ref die_definition; /* ref from a specification to its definition */
5552   dw_offset die_offset;
5553   unsigned long die_abbrev;
5554   int die_mark;
5555   /* Die is used and must not be pruned as unused.  */
5556   int die_perennial_p;
5557   unsigned int decl_id;
5558 }
5559 die_node;
5560
5561 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5562 #define FOR_EACH_CHILD(die, c, expr) do {       \
5563   c = die->die_child;                           \
5564   if (c) do {                                   \
5565     c = c->die_sib;                             \
5566     expr;                                       \
5567   } while (c != die->die_child);                \
5568 } while (0)
5569
5570 /* The pubname structure */
5571
5572 typedef struct GTY(()) pubname_struct {
5573   dw_die_ref die;
5574   const char *name;
5575 }
5576 pubname_entry;
5577
5578 DEF_VEC_O(pubname_entry);
5579 DEF_VEC_ALLOC_O(pubname_entry, gc);
5580
5581 struct GTY(()) dw_ranges_struct {
5582   /* If this is positive, it's a block number, otherwise it's a
5583      bitwise-negated index into dw_ranges_by_label.  */
5584   int num;
5585 };
5586
5587 struct GTY(()) dw_ranges_by_label_struct {
5588   const char *begin;
5589   const char *end;
5590 };
5591
5592 /* The comdat type node structure.  */
5593 typedef struct GTY(()) comdat_type_struct
5594 {
5595   dw_die_ref root_die;
5596   dw_die_ref type_die;
5597   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5598   struct comdat_type_struct *next;
5599 }
5600 comdat_type_node;
5601
5602 /* The limbo die list structure.  */
5603 typedef struct GTY(()) limbo_die_struct {
5604   dw_die_ref die;
5605   tree created_for;
5606   struct limbo_die_struct *next;
5607 }
5608 limbo_die_node;
5609
5610 typedef struct GTY(()) skeleton_chain_struct
5611 {
5612   dw_die_ref old_die;
5613   dw_die_ref new_die;
5614   struct skeleton_chain_struct *parent;
5615 }
5616 skeleton_chain_node;
5617
5618 /* How to start an assembler comment.  */
5619 #ifndef ASM_COMMENT_START
5620 #define ASM_COMMENT_START ";#"
5621 #endif
5622
5623 /* Define a macro which returns nonzero for a TYPE_DECL which was
5624    implicitly generated for a tagged type.
5625
5626    Note that unlike the gcc front end (which generates a NULL named
5627    TYPE_DECL node for each complete tagged type, each array type, and
5628    each function type node created) the g++ front end generates a
5629    _named_ TYPE_DECL node for each tagged type node created.
5630    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5631    generate a DW_TAG_typedef DIE for them.  */
5632
5633 #define TYPE_DECL_IS_STUB(decl)                         \
5634   (DECL_NAME (decl) == NULL_TREE                        \
5635    || (DECL_ARTIFICIAL (decl)                           \
5636        && is_tagged_type (TREE_TYPE (decl))             \
5637        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5638            /* This is necessary for stub decls that     \
5639               appear in nested inline functions.  */    \
5640            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5641                && (decl_ultimate_origin (decl)          \
5642                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5643
5644 /* Information concerning the compilation unit's programming
5645    language, and compiler version.  */
5646
5647 /* Fixed size portion of the DWARF compilation unit header.  */
5648 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5649   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5650
5651 /* Fixed size portion of the DWARF comdat type unit header.  */
5652 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5653   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5654    + DWARF_OFFSET_SIZE)
5655
5656 /* Fixed size portion of public names info.  */
5657 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5658
5659 /* Fixed size portion of the address range info.  */
5660 #define DWARF_ARANGES_HEADER_SIZE                                       \
5661   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5662                 DWARF2_ADDR_SIZE * 2)                                   \
5663    - DWARF_INITIAL_LENGTH_SIZE)
5664
5665 /* Size of padding portion in the address range info.  It must be
5666    aligned to twice the pointer size.  */
5667 #define DWARF_ARANGES_PAD_SIZE \
5668   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5669                 DWARF2_ADDR_SIZE * 2)                              \
5670    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5671
5672 /* Use assembler line directives if available.  */
5673 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5674 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5675 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5676 #else
5677 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5678 #endif
5679 #endif
5680
5681 /* Minimum line offset in a special line info. opcode.
5682    This value was chosen to give a reasonable range of values.  */
5683 #define DWARF_LINE_BASE  -10
5684
5685 /* First special line opcode - leave room for the standard opcodes.  */
5686 #define DWARF_LINE_OPCODE_BASE  10
5687
5688 /* Range of line offsets in a special line info. opcode.  */
5689 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5690
5691 /* Flag that indicates the initial value of the is_stmt_start flag.
5692    In the present implementation, we do not mark any lines as
5693    the beginning of a source statement, because that information
5694    is not made available by the GCC front-end.  */
5695 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5696
5697 /* Maximum number of operations per instruction bundle.  */
5698 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5699 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5700 #endif
5701
5702 #ifdef DWARF2_DEBUGGING_INFO
5703 /* This location is used by calc_die_sizes() to keep track
5704    the offset of each DIE within the .debug_info section.  */
5705 static unsigned long next_die_offset;
5706 #endif
5707
5708 /* Record the root of the DIE's built for the current compilation unit.  */
5709 static GTY(()) dw_die_ref comp_unit_die;
5710
5711 /* A list of type DIEs that have been separated into comdat sections.  */
5712 static GTY(()) comdat_type_node *comdat_type_list;
5713
5714 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5715 static GTY(()) limbo_die_node *limbo_die_list;
5716
5717 /* A list of DIEs for which we may have to generate
5718    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5719 static GTY(()) limbo_die_node *deferred_asm_name;
5720
5721 /* Filenames referenced by this compilation unit.  */
5722 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5723
5724 /* A hash table of references to DIE's that describe declarations.
5725    The key is a DECL_UID() which is a unique number identifying each decl.  */
5726 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5727
5728 /* A hash table of references to DIE's that describe COMMON blocks.
5729    The key is DECL_UID() ^ die_parent.  */
5730 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5731
5732 typedef struct GTY(()) die_arg_entry_struct {
5733     dw_die_ref die;
5734     tree arg;
5735 } die_arg_entry;
5736
5737 DEF_VEC_O(die_arg_entry);
5738 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5739
5740 /* Node of the variable location list.  */
5741 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5742   rtx GTY (()) var_loc_note;
5743   const char * GTY (()) label;
5744   struct var_loc_node * GTY (()) next;
5745 };
5746
5747 /* Variable location list.  */
5748 struct GTY (()) var_loc_list_def {
5749   struct var_loc_node * GTY (()) first;
5750
5751   /* Do not mark the last element of the chained list because
5752      it is marked through the chain.  */
5753   struct var_loc_node * GTY ((skip ("%h"))) last;
5754
5755   /* DECL_UID of the variable decl.  */
5756   unsigned int decl_id;
5757 };
5758 typedef struct var_loc_list_def var_loc_list;
5759
5760
5761 /* Table of decl location linked lists.  */
5762 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5763
5764 /* A pointer to the base of a list of references to DIE's that
5765    are uniquely identified by their tag, presence/absence of
5766    children DIE's, and list of attribute/value pairs.  */
5767 static GTY((length ("abbrev_die_table_allocated")))
5768   dw_die_ref *abbrev_die_table;
5769
5770 /* Number of elements currently allocated for abbrev_die_table.  */
5771 static GTY(()) unsigned abbrev_die_table_allocated;
5772
5773 /* Number of elements in type_die_table currently in use.  */
5774 static GTY(()) unsigned abbrev_die_table_in_use;
5775
5776 /* Size (in elements) of increments by which we may expand the
5777    abbrev_die_table.  */
5778 #define ABBREV_DIE_TABLE_INCREMENT 256
5779
5780 /* A pointer to the base of a table that contains line information
5781    for each source code line in .text in the compilation unit.  */
5782 static GTY((length ("line_info_table_allocated")))
5783      dw_line_info_ref line_info_table;
5784
5785 /* Number of elements currently allocated for line_info_table.  */
5786 static GTY(()) unsigned line_info_table_allocated;
5787
5788 /* Number of elements in line_info_table currently in use.  */
5789 static GTY(()) unsigned line_info_table_in_use;
5790
5791 /* A pointer to the base of a table that contains line information
5792    for each source code line outside of .text in the compilation unit.  */
5793 static GTY ((length ("separate_line_info_table_allocated")))
5794      dw_separate_line_info_ref separate_line_info_table;
5795
5796 /* Number of elements currently allocated for separate_line_info_table.  */
5797 static GTY(()) unsigned separate_line_info_table_allocated;
5798
5799 /* Number of elements in separate_line_info_table currently in use.  */
5800 static GTY(()) unsigned separate_line_info_table_in_use;
5801
5802 /* Size (in elements) of increments by which we may expand the
5803    line_info_table.  */
5804 #define LINE_INFO_TABLE_INCREMENT 1024
5805
5806 /* A pointer to the base of a table that contains a list of publicly
5807    accessible names.  */
5808 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5809
5810 /* A pointer to the base of a table that contains a list of publicly
5811    accessible types.  */
5812 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5813
5814 /* Array of dies for which we should generate .debug_arange info.  */
5815 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5816
5817 /* Number of elements currently allocated for arange_table.  */
5818 static GTY(()) unsigned arange_table_allocated;
5819
5820 /* Number of elements in arange_table currently in use.  */
5821 static GTY(()) unsigned arange_table_in_use;
5822
5823 /* Size (in elements) of increments by which we may expand the
5824    arange_table.  */
5825 #define ARANGE_TABLE_INCREMENT 64
5826
5827 /* Array of dies for which we should generate .debug_ranges info.  */
5828 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5829
5830 /* Number of elements currently allocated for ranges_table.  */
5831 static GTY(()) unsigned ranges_table_allocated;
5832
5833 /* Number of elements in ranges_table currently in use.  */
5834 static GTY(()) unsigned ranges_table_in_use;
5835
5836 /* Array of pairs of labels referenced in ranges_table.  */
5837 static GTY ((length ("ranges_by_label_allocated")))
5838      dw_ranges_by_label_ref ranges_by_label;
5839
5840 /* Number of elements currently allocated for ranges_by_label.  */
5841 static GTY(()) unsigned ranges_by_label_allocated;
5842
5843 /* Number of elements in ranges_by_label currently in use.  */
5844 static GTY(()) unsigned ranges_by_label_in_use;
5845
5846 /* Size (in elements) of increments by which we may expand the
5847    ranges_table.  */
5848 #define RANGES_TABLE_INCREMENT 64
5849
5850 /* Whether we have location lists that need outputting */
5851 static GTY(()) bool have_location_lists;
5852
5853 /* Unique label counter.  */
5854 static GTY(()) unsigned int loclabel_num;
5855
5856 /* Unique label counter for point-of-call tables.  */
5857 static GTY(()) unsigned int poc_label_num;
5858
5859 /* The direct call table structure.  */
5860
5861 typedef struct GTY(()) dcall_struct {
5862   unsigned int poc_label_num;
5863   tree poc_decl;
5864   dw_die_ref targ_die;
5865 }
5866 dcall_entry;
5867
5868 DEF_VEC_O(dcall_entry);
5869 DEF_VEC_ALLOC_O(dcall_entry, gc);
5870
5871 /* The virtual call table structure.  */
5872
5873 typedef struct GTY(()) vcall_struct {
5874   unsigned int poc_label_num;
5875   unsigned int vtable_slot;
5876 }
5877 vcall_entry;
5878
5879 DEF_VEC_O(vcall_entry);
5880 DEF_VEC_ALLOC_O(vcall_entry, gc);
5881
5882 /* Pointers to the direct and virtual call tables.  */
5883 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5884 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5885
5886 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5887
5888 struct GTY (()) vcall_insn {
5889   int insn_uid;
5890   unsigned int vtable_slot;
5891 };
5892
5893 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5894
5895 #ifdef DWARF2_DEBUGGING_INFO
5896 /* Record whether the function being analyzed contains inlined functions.  */
5897 static int current_function_has_inlines;
5898 #endif
5899 #if 0 && defined (MIPS_DEBUGGING_INFO)
5900 static int comp_unit_has_inlines;
5901 #endif
5902
5903 /* The last file entry emitted by maybe_emit_file().  */
5904 static GTY(()) struct dwarf_file_data * last_emitted_file;
5905
5906 /* Number of internal labels generated by gen_internal_sym().  */
5907 static GTY(()) int label_num;
5908
5909 /* Cached result of previous call to lookup_filename.  */
5910 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5911
5912 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5913
5914 #ifdef DWARF2_DEBUGGING_INFO
5915
5916 /* Offset from the "steady-state frame pointer" to the frame base,
5917    within the current function.  */
5918 static HOST_WIDE_INT frame_pointer_fb_offset;
5919
5920 /* Forward declarations for functions defined in this file.  */
5921
5922 static int is_pseudo_reg (const_rtx);
5923 static tree type_main_variant (tree);
5924 static int is_tagged_type (const_tree);
5925 static const char *dwarf_tag_name (unsigned);
5926 static const char *dwarf_attr_name (unsigned);
5927 static const char *dwarf_form_name (unsigned);
5928 static tree decl_ultimate_origin (const_tree);
5929 static tree decl_class_context (tree);
5930 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5931 static inline enum dw_val_class AT_class (dw_attr_ref);
5932 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5933 static inline unsigned AT_flag (dw_attr_ref);
5934 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5935 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5936 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5937 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5938 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5939                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5940 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5941                                unsigned int, unsigned char *);
5942 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5943 static hashval_t debug_str_do_hash (const void *);
5944 static int debug_str_eq (const void *, const void *);
5945 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5946 static inline const char *AT_string (dw_attr_ref);
5947 static enum dwarf_form AT_string_form (dw_attr_ref);
5948 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5949 static void add_AT_specification (dw_die_ref, dw_die_ref);
5950 static inline dw_die_ref AT_ref (dw_attr_ref);
5951 static inline int AT_ref_external (dw_attr_ref);
5952 static inline void set_AT_ref_external (dw_attr_ref, int);
5953 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5954 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5955 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5956 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5957                              dw_loc_list_ref);
5958 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5959 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5960 static inline rtx AT_addr (dw_attr_ref);
5961 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5962 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5963 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5964 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5965                            unsigned HOST_WIDE_INT);
5966 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5967                                unsigned long);
5968 static inline const char *AT_lbl (dw_attr_ref);
5969 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5970 static const char *get_AT_low_pc (dw_die_ref);
5971 static const char *get_AT_hi_pc (dw_die_ref);
5972 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5973 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5974 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5975 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5976 static bool is_cxx (void);
5977 static bool is_fortran (void);
5978 static bool is_ada (void);
5979 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5980 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5981 static void add_child_die (dw_die_ref, dw_die_ref);
5982 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5983 static dw_die_ref lookup_type_die (tree);
5984 static void equate_type_number_to_die (tree, dw_die_ref);
5985 static hashval_t decl_die_table_hash (const void *);
5986 static int decl_die_table_eq (const void *, const void *);
5987 static dw_die_ref lookup_decl_die (tree);
5988 static hashval_t common_block_die_table_hash (const void *);
5989 static int common_block_die_table_eq (const void *, const void *);
5990 static hashval_t decl_loc_table_hash (const void *);
5991 static int decl_loc_table_eq (const void *, const void *);
5992 static var_loc_list *lookup_decl_loc (const_tree);
5993 static void equate_decl_number_to_die (tree, dw_die_ref);
5994 static struct var_loc_node *add_var_loc_to_decl (tree, rtx);
5995 static void print_spaces (FILE *);
5996 static void print_die (dw_die_ref, FILE *);
5997 static void print_dwarf_line_table (FILE *);
5998 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5999 static dw_die_ref pop_compile_unit (dw_die_ref);
6000 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6001 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6002 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6003 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6004 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6005 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6006 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6007                                    struct md5_ctx *, int *);
6008 struct checksum_attributes;
6009 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6010 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6011 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6012 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6013 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6014 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6015 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6016 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6017 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6018 static void compute_section_prefix (dw_die_ref);
6019 static int is_type_die (dw_die_ref);
6020 static int is_comdat_die (dw_die_ref);
6021 static int is_symbol_die (dw_die_ref);
6022 static void assign_symbol_names (dw_die_ref);
6023 static void break_out_includes (dw_die_ref);
6024 static int is_declaration_die (dw_die_ref);
6025 static int should_move_die_to_comdat (dw_die_ref);
6026 static dw_die_ref clone_as_declaration (dw_die_ref);
6027 static dw_die_ref clone_die (dw_die_ref);
6028 static dw_die_ref clone_tree (dw_die_ref);
6029 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6030 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6031 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6032 static dw_die_ref generate_skeleton (dw_die_ref);
6033 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6034                                                          dw_die_ref);
6035 static void break_out_comdat_types (dw_die_ref);
6036 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6037 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6038 static void copy_decls_for_unworthy_types (dw_die_ref);
6039
6040 static hashval_t htab_cu_hash (const void *);
6041 static int htab_cu_eq (const void *, const void *);
6042 static void htab_cu_del (void *);
6043 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6044 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6045 static void add_sibling_attributes (dw_die_ref);
6046 static void build_abbrev_table (dw_die_ref);
6047 static void output_location_lists (dw_die_ref);
6048 static int constant_size (unsigned HOST_WIDE_INT);
6049 static unsigned long size_of_die (dw_die_ref);
6050 static void calc_die_sizes (dw_die_ref);
6051 static void mark_dies (dw_die_ref);
6052 static void unmark_dies (dw_die_ref);
6053 static void unmark_all_dies (dw_die_ref);
6054 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6055 static unsigned long size_of_aranges (void);
6056 static enum dwarf_form value_format (dw_attr_ref);
6057 static void output_value_format (dw_attr_ref);
6058 static void output_abbrev_section (void);
6059 static void output_die_symbol (dw_die_ref);
6060 static void output_die (dw_die_ref);
6061 static void output_compilation_unit_header (void);
6062 static void output_comp_unit (dw_die_ref, int);
6063 static void output_comdat_type_unit (comdat_type_node *);
6064 static const char *dwarf2_name (tree, int);
6065 static void add_pubname (tree, dw_die_ref);
6066 static void add_pubname_string (const char *, dw_die_ref);
6067 static void add_pubtype (tree, dw_die_ref);
6068 static void output_pubnames (VEC (pubname_entry,gc) *);
6069 static void add_arange (tree, dw_die_ref);
6070 static void output_aranges (void);
6071 static unsigned int add_ranges_num (int);
6072 static unsigned int add_ranges (const_tree);
6073 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6074                                   bool *);
6075 static void output_ranges (void);
6076 static void output_line_info (void);
6077 static void output_file_names (void);
6078 static dw_die_ref base_type_die (tree);
6079 static int is_base_type (tree);
6080 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6081 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6082 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6083 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6084 static int type_is_enum (const_tree);
6085 static unsigned int dbx_reg_number (const_rtx);
6086 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6087 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6088 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6089                                                 enum var_init_status);
6090 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6091                                                      enum var_init_status);
6092 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6093                                          enum var_init_status);
6094 static int is_based_loc (const_rtx);
6095 static int resolve_one_addr (rtx *, void *);
6096 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6097                                             enum var_init_status);
6098 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6099                                                enum var_init_status);
6100 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6101                                         enum var_init_status);
6102 static dw_loc_list_ref loc_list_from_tree (tree, int);
6103 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6104 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6105 static tree field_type (const_tree);
6106 static unsigned int simple_type_align_in_bits (const_tree);
6107 static unsigned int simple_decl_align_in_bits (const_tree);
6108 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6109 static HOST_WIDE_INT field_byte_offset (const_tree);
6110 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6111                                          dw_loc_list_ref);
6112 static void add_data_member_location_attribute (dw_die_ref, tree);
6113 static bool add_const_value_attribute (dw_die_ref, rtx);
6114 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6115 static void insert_float (const_rtx, unsigned char *);
6116 static rtx rtl_for_decl_location (tree);
6117 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6118                                                    enum dwarf_attribute);
6119 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6120 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6121 static void add_name_attribute (dw_die_ref, const char *);
6122 static void add_comp_dir_attribute (dw_die_ref);
6123 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6124 static void add_subscript_info (dw_die_ref, tree, bool);
6125 static void add_byte_size_attribute (dw_die_ref, tree);
6126 static void add_bit_offset_attribute (dw_die_ref, tree);
6127 static void add_bit_size_attribute (dw_die_ref, tree);
6128 static void add_prototyped_attribute (dw_die_ref, tree);
6129 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6130 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6131 static void add_src_coords_attributes (dw_die_ref, tree);
6132 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6133 static void push_decl_scope (tree);
6134 static void pop_decl_scope (void);
6135 static dw_die_ref scope_die_for (tree, dw_die_ref);
6136 static inline int local_scope_p (dw_die_ref);
6137 static inline int class_scope_p (dw_die_ref);
6138 static inline int class_or_namespace_scope_p (dw_die_ref);
6139 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6140 static void add_calling_convention_attribute (dw_die_ref, tree);
6141 static const char *type_tag (const_tree);
6142 static tree member_declared_type (const_tree);
6143 #if 0
6144 static const char *decl_start_label (tree);
6145 #endif
6146 static void gen_array_type_die (tree, dw_die_ref);
6147 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6148 #if 0
6149 static void gen_entry_point_die (tree, dw_die_ref);
6150 #endif
6151 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6152 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6153 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6154 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6155 static void gen_formal_types_die (tree, dw_die_ref);
6156 static void gen_subprogram_die (tree, dw_die_ref);
6157 static void gen_variable_die (tree, tree, dw_die_ref);
6158 static void gen_const_die (tree, dw_die_ref);
6159 static void gen_label_die (tree, dw_die_ref);
6160 static void gen_lexical_block_die (tree, dw_die_ref, int);
6161 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6162 static void gen_field_die (tree, dw_die_ref);
6163 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6164 static dw_die_ref gen_compile_unit_die (const char *);
6165 static void gen_inheritance_die (tree, tree, dw_die_ref);
6166 static void gen_member_die (tree, dw_die_ref);
6167 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6168                                                 enum debug_info_usage);
6169 static void gen_subroutine_type_die (tree, dw_die_ref);
6170 static void gen_typedef_die (tree, dw_die_ref);
6171 static void gen_type_die (tree, dw_die_ref);
6172 static void gen_block_die (tree, dw_die_ref, int);
6173 static void decls_for_scope (tree, dw_die_ref, int);
6174 static int is_redundant_typedef (const_tree);
6175 static inline dw_die_ref get_context_die (tree);
6176 static void gen_namespace_die (tree, dw_die_ref);
6177 static void gen_decl_die (tree, tree, dw_die_ref);
6178 static dw_die_ref force_decl_die (tree);
6179 static dw_die_ref force_type_die (tree);
6180 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6181 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6182 static struct dwarf_file_data * lookup_filename (const char *);
6183 static void retry_incomplete_types (void);
6184 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6185 static void gen_generic_params_dies (tree);
6186 static void splice_child_die (dw_die_ref, dw_die_ref);
6187 static int file_info_cmp (const void *, const void *);
6188 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6189                                      const char *, const char *);
6190 static void output_loc_list (dw_loc_list_ref);
6191 static char *gen_internal_sym (const char *);
6192
6193 static void prune_unmark_dies (dw_die_ref);
6194 static void prune_unused_types_mark (dw_die_ref, int);
6195 static void prune_unused_types_walk (dw_die_ref);
6196 static void prune_unused_types_walk_attribs (dw_die_ref);
6197 static void prune_unused_types_prune (dw_die_ref);
6198 static void prune_unused_types (void);
6199 static int maybe_emit_file (struct dwarf_file_data *fd);
6200 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6201 static void gen_remaining_tmpl_value_param_die_attribute (void);
6202
6203 /* Section names used to hold DWARF debugging information.  */
6204 #ifndef DEBUG_INFO_SECTION
6205 #define DEBUG_INFO_SECTION      ".debug_info"
6206 #endif
6207 #ifndef DEBUG_ABBREV_SECTION
6208 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6209 #endif
6210 #ifndef DEBUG_ARANGES_SECTION
6211 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6212 #endif
6213 #ifndef DEBUG_MACINFO_SECTION
6214 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6215 #endif
6216 #ifndef DEBUG_LINE_SECTION
6217 #define DEBUG_LINE_SECTION      ".debug_line"
6218 #endif
6219 #ifndef DEBUG_LOC_SECTION
6220 #define DEBUG_LOC_SECTION       ".debug_loc"
6221 #endif
6222 #ifndef DEBUG_PUBNAMES_SECTION
6223 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6224 #endif
6225 #ifndef DEBUG_PUBTYPES_SECTION
6226 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6227 #endif
6228 #ifndef DEBUG_DCALL_SECTION
6229 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6230 #endif
6231 #ifndef DEBUG_VCALL_SECTION
6232 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6233 #endif
6234 #ifndef DEBUG_STR_SECTION
6235 #define DEBUG_STR_SECTION       ".debug_str"
6236 #endif
6237 #ifndef DEBUG_RANGES_SECTION
6238 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6239 #endif
6240
6241 /* Standard ELF section names for compiled code and data.  */
6242 #ifndef TEXT_SECTION_NAME
6243 #define TEXT_SECTION_NAME       ".text"
6244 #endif
6245
6246 /* Section flags for .debug_str section.  */
6247 #define DEBUG_STR_SECTION_FLAGS \
6248   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6249    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6250    : SECTION_DEBUG)
6251
6252 /* Labels we insert at beginning sections we can reference instead of
6253    the section names themselves.  */
6254
6255 #ifndef TEXT_SECTION_LABEL
6256 #define TEXT_SECTION_LABEL              "Ltext"
6257 #endif
6258 #ifndef COLD_TEXT_SECTION_LABEL
6259 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6260 #endif
6261 #ifndef DEBUG_LINE_SECTION_LABEL
6262 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6263 #endif
6264 #ifndef DEBUG_INFO_SECTION_LABEL
6265 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6266 #endif
6267 #ifndef DEBUG_ABBREV_SECTION_LABEL
6268 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6269 #endif
6270 #ifndef DEBUG_LOC_SECTION_LABEL
6271 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6272 #endif
6273 #ifndef DEBUG_RANGES_SECTION_LABEL
6274 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6275 #endif
6276 #ifndef DEBUG_MACINFO_SECTION_LABEL
6277 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6278 #endif
6279
6280 /* Mangled name attribute to use.  This used to be a vendor extension
6281    until DWARF 4 standardized it.  */
6282 #define AT_linkage_name \
6283   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6284
6285
6286 /* Definitions of defaults for formats and names of various special
6287    (artificial) labels which may be generated within this file (when the -g
6288    options is used and DWARF2_DEBUGGING_INFO is in effect.
6289    If necessary, these may be overridden from within the tm.h file, but
6290    typically, overriding these defaults is unnecessary.  */
6291
6292 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6293 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6294 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6295 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6296 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6297 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6298 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6299 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6300 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6301 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6302
6303 #ifndef TEXT_END_LABEL
6304 #define TEXT_END_LABEL          "Letext"
6305 #endif
6306 #ifndef COLD_END_LABEL
6307 #define COLD_END_LABEL          "Letext_cold"
6308 #endif
6309 #ifndef BLOCK_BEGIN_LABEL
6310 #define BLOCK_BEGIN_LABEL       "LBB"
6311 #endif
6312 #ifndef BLOCK_END_LABEL
6313 #define BLOCK_END_LABEL         "LBE"
6314 #endif
6315 #ifndef LINE_CODE_LABEL
6316 #define LINE_CODE_LABEL         "LM"
6317 #endif
6318 #ifndef SEPARATE_LINE_CODE_LABEL
6319 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6320 #endif
6321
6322 \f
6323 /* We allow a language front-end to designate a function that is to be
6324    called to "demangle" any name before it is put into a DIE.  */
6325
6326 static const char *(*demangle_name_func) (const char *);
6327
6328 void
6329 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6330 {
6331   demangle_name_func = func;
6332 }
6333
6334 /* Test if rtl node points to a pseudo register.  */
6335
6336 static inline int
6337 is_pseudo_reg (const_rtx rtl)
6338 {
6339   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6340           || (GET_CODE (rtl) == SUBREG
6341               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6342 }
6343
6344 /* Return a reference to a type, with its const and volatile qualifiers
6345    removed.  */
6346
6347 static inline tree
6348 type_main_variant (tree type)
6349 {
6350   type = TYPE_MAIN_VARIANT (type);
6351
6352   /* ??? There really should be only one main variant among any group of
6353      variants of a given type (and all of the MAIN_VARIANT values for all
6354      members of the group should point to that one type) but sometimes the C
6355      front-end messes this up for array types, so we work around that bug
6356      here.  */
6357   if (TREE_CODE (type) == ARRAY_TYPE)
6358     while (type != TYPE_MAIN_VARIANT (type))
6359       type = TYPE_MAIN_VARIANT (type);
6360
6361   return type;
6362 }
6363
6364 /* Return nonzero if the given type node represents a tagged type.  */
6365
6366 static inline int
6367 is_tagged_type (const_tree type)
6368 {
6369   enum tree_code code = TREE_CODE (type);
6370
6371   return (code == RECORD_TYPE || code == UNION_TYPE
6372           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6373 }
6374
6375 /* Convert a DIE tag into its string name.  */
6376
6377 static const char *
6378 dwarf_tag_name (unsigned int tag)
6379 {
6380   switch (tag)
6381     {
6382     case DW_TAG_padding:
6383       return "DW_TAG_padding";
6384     case DW_TAG_array_type:
6385       return "DW_TAG_array_type";
6386     case DW_TAG_class_type:
6387       return "DW_TAG_class_type";
6388     case DW_TAG_entry_point:
6389       return "DW_TAG_entry_point";
6390     case DW_TAG_enumeration_type:
6391       return "DW_TAG_enumeration_type";
6392     case DW_TAG_formal_parameter:
6393       return "DW_TAG_formal_parameter";
6394     case DW_TAG_imported_declaration:
6395       return "DW_TAG_imported_declaration";
6396     case DW_TAG_label:
6397       return "DW_TAG_label";
6398     case DW_TAG_lexical_block:
6399       return "DW_TAG_lexical_block";
6400     case DW_TAG_member:
6401       return "DW_TAG_member";
6402     case DW_TAG_pointer_type:
6403       return "DW_TAG_pointer_type";
6404     case DW_TAG_reference_type:
6405       return "DW_TAG_reference_type";
6406     case DW_TAG_compile_unit:
6407       return "DW_TAG_compile_unit";
6408     case DW_TAG_string_type:
6409       return "DW_TAG_string_type";
6410     case DW_TAG_structure_type:
6411       return "DW_TAG_structure_type";
6412     case DW_TAG_subroutine_type:
6413       return "DW_TAG_subroutine_type";
6414     case DW_TAG_typedef:
6415       return "DW_TAG_typedef";
6416     case DW_TAG_union_type:
6417       return "DW_TAG_union_type";
6418     case DW_TAG_unspecified_parameters:
6419       return "DW_TAG_unspecified_parameters";
6420     case DW_TAG_variant:
6421       return "DW_TAG_variant";
6422     case DW_TAG_common_block:
6423       return "DW_TAG_common_block";
6424     case DW_TAG_common_inclusion:
6425       return "DW_TAG_common_inclusion";
6426     case DW_TAG_inheritance:
6427       return "DW_TAG_inheritance";
6428     case DW_TAG_inlined_subroutine:
6429       return "DW_TAG_inlined_subroutine";
6430     case DW_TAG_module:
6431       return "DW_TAG_module";
6432     case DW_TAG_ptr_to_member_type:
6433       return "DW_TAG_ptr_to_member_type";
6434     case DW_TAG_set_type:
6435       return "DW_TAG_set_type";
6436     case DW_TAG_subrange_type:
6437       return "DW_TAG_subrange_type";
6438     case DW_TAG_with_stmt:
6439       return "DW_TAG_with_stmt";
6440     case DW_TAG_access_declaration:
6441       return "DW_TAG_access_declaration";
6442     case DW_TAG_base_type:
6443       return "DW_TAG_base_type";
6444     case DW_TAG_catch_block:
6445       return "DW_TAG_catch_block";
6446     case DW_TAG_const_type:
6447       return "DW_TAG_const_type";
6448     case DW_TAG_constant:
6449       return "DW_TAG_constant";
6450     case DW_TAG_enumerator:
6451       return "DW_TAG_enumerator";
6452     case DW_TAG_file_type:
6453       return "DW_TAG_file_type";
6454     case DW_TAG_friend:
6455       return "DW_TAG_friend";
6456     case DW_TAG_namelist:
6457       return "DW_TAG_namelist";
6458     case DW_TAG_namelist_item:
6459       return "DW_TAG_namelist_item";
6460     case DW_TAG_packed_type:
6461       return "DW_TAG_packed_type";
6462     case DW_TAG_subprogram:
6463       return "DW_TAG_subprogram";
6464     case DW_TAG_template_type_param:
6465       return "DW_TAG_template_type_param";
6466     case DW_TAG_template_value_param:
6467       return "DW_TAG_template_value_param";
6468     case DW_TAG_thrown_type:
6469       return "DW_TAG_thrown_type";
6470     case DW_TAG_try_block:
6471       return "DW_TAG_try_block";
6472     case DW_TAG_variant_part:
6473       return "DW_TAG_variant_part";
6474     case DW_TAG_variable:
6475       return "DW_TAG_variable";
6476     case DW_TAG_volatile_type:
6477       return "DW_TAG_volatile_type";
6478     case DW_TAG_dwarf_procedure:
6479       return "DW_TAG_dwarf_procedure";
6480     case DW_TAG_restrict_type:
6481       return "DW_TAG_restrict_type";
6482     case DW_TAG_interface_type:
6483       return "DW_TAG_interface_type";
6484     case DW_TAG_namespace:
6485       return "DW_TAG_namespace";
6486     case DW_TAG_imported_module:
6487       return "DW_TAG_imported_module";
6488     case DW_TAG_unspecified_type:
6489       return "DW_TAG_unspecified_type";
6490     case DW_TAG_partial_unit:
6491       return "DW_TAG_partial_unit";
6492     case DW_TAG_imported_unit:
6493       return "DW_TAG_imported_unit";
6494     case DW_TAG_condition:
6495       return "DW_TAG_condition";
6496     case DW_TAG_shared_type:
6497       return "DW_TAG_shared_type";
6498     case DW_TAG_type_unit:
6499       return "DW_TAG_type_unit";
6500     case DW_TAG_rvalue_reference_type:
6501       return "DW_TAG_rvalue_reference_type";
6502     case DW_TAG_template_alias:
6503       return "DW_TAG_template_alias";
6504     case DW_TAG_GNU_template_parameter_pack:
6505       return "DW_TAG_GNU_template_parameter_pack";
6506     case DW_TAG_GNU_formal_parameter_pack:
6507       return "DW_TAG_GNU_formal_parameter_pack";
6508     case DW_TAG_MIPS_loop:
6509       return "DW_TAG_MIPS_loop";
6510     case DW_TAG_format_label:
6511       return "DW_TAG_format_label";
6512     case DW_TAG_function_template:
6513       return "DW_TAG_function_template";
6514     case DW_TAG_class_template:
6515       return "DW_TAG_class_template";
6516     case DW_TAG_GNU_BINCL:
6517       return "DW_TAG_GNU_BINCL";
6518     case DW_TAG_GNU_EINCL:
6519       return "DW_TAG_GNU_EINCL";
6520     case DW_TAG_GNU_template_template_param:
6521       return "DW_TAG_GNU_template_template_param";
6522     default:
6523       return "DW_TAG_<unknown>";
6524     }
6525 }
6526
6527 /* Convert a DWARF attribute code into its string name.  */
6528
6529 static const char *
6530 dwarf_attr_name (unsigned int attr)
6531 {
6532   switch (attr)
6533     {
6534     case DW_AT_sibling:
6535       return "DW_AT_sibling";
6536     case DW_AT_location:
6537       return "DW_AT_location";
6538     case DW_AT_name:
6539       return "DW_AT_name";
6540     case DW_AT_ordering:
6541       return "DW_AT_ordering";
6542     case DW_AT_subscr_data:
6543       return "DW_AT_subscr_data";
6544     case DW_AT_byte_size:
6545       return "DW_AT_byte_size";
6546     case DW_AT_bit_offset:
6547       return "DW_AT_bit_offset";
6548     case DW_AT_bit_size:
6549       return "DW_AT_bit_size";
6550     case DW_AT_element_list:
6551       return "DW_AT_element_list";
6552     case DW_AT_stmt_list:
6553       return "DW_AT_stmt_list";
6554     case DW_AT_low_pc:
6555       return "DW_AT_low_pc";
6556     case DW_AT_high_pc:
6557       return "DW_AT_high_pc";
6558     case DW_AT_language:
6559       return "DW_AT_language";
6560     case DW_AT_member:
6561       return "DW_AT_member";
6562     case DW_AT_discr:
6563       return "DW_AT_discr";
6564     case DW_AT_discr_value:
6565       return "DW_AT_discr_value";
6566     case DW_AT_visibility:
6567       return "DW_AT_visibility";
6568     case DW_AT_import:
6569       return "DW_AT_import";
6570     case DW_AT_string_length:
6571       return "DW_AT_string_length";
6572     case DW_AT_common_reference:
6573       return "DW_AT_common_reference";
6574     case DW_AT_comp_dir:
6575       return "DW_AT_comp_dir";
6576     case DW_AT_const_value:
6577       return "DW_AT_const_value";
6578     case DW_AT_containing_type:
6579       return "DW_AT_containing_type";
6580     case DW_AT_default_value:
6581       return "DW_AT_default_value";
6582     case DW_AT_inline:
6583       return "DW_AT_inline";
6584     case DW_AT_is_optional:
6585       return "DW_AT_is_optional";
6586     case DW_AT_lower_bound:
6587       return "DW_AT_lower_bound";
6588     case DW_AT_producer:
6589       return "DW_AT_producer";
6590     case DW_AT_prototyped:
6591       return "DW_AT_prototyped";
6592     case DW_AT_return_addr:
6593       return "DW_AT_return_addr";
6594     case DW_AT_start_scope:
6595       return "DW_AT_start_scope";
6596     case DW_AT_bit_stride:
6597       return "DW_AT_bit_stride";
6598     case DW_AT_upper_bound:
6599       return "DW_AT_upper_bound";
6600     case DW_AT_abstract_origin:
6601       return "DW_AT_abstract_origin";
6602     case DW_AT_accessibility:
6603       return "DW_AT_accessibility";
6604     case DW_AT_address_class:
6605       return "DW_AT_address_class";
6606     case DW_AT_artificial:
6607       return "DW_AT_artificial";
6608     case DW_AT_base_types:
6609       return "DW_AT_base_types";
6610     case DW_AT_calling_convention:
6611       return "DW_AT_calling_convention";
6612     case DW_AT_count:
6613       return "DW_AT_count";
6614     case DW_AT_data_member_location:
6615       return "DW_AT_data_member_location";
6616     case DW_AT_decl_column:
6617       return "DW_AT_decl_column";
6618     case DW_AT_decl_file:
6619       return "DW_AT_decl_file";
6620     case DW_AT_decl_line:
6621       return "DW_AT_decl_line";
6622     case DW_AT_declaration:
6623       return "DW_AT_declaration";
6624     case DW_AT_discr_list:
6625       return "DW_AT_discr_list";
6626     case DW_AT_encoding:
6627       return "DW_AT_encoding";
6628     case DW_AT_external:
6629       return "DW_AT_external";
6630     case DW_AT_explicit:
6631       return "DW_AT_explicit";
6632     case DW_AT_frame_base:
6633       return "DW_AT_frame_base";
6634     case DW_AT_friend:
6635       return "DW_AT_friend";
6636     case DW_AT_identifier_case:
6637       return "DW_AT_identifier_case";
6638     case DW_AT_macro_info:
6639       return "DW_AT_macro_info";
6640     case DW_AT_namelist_items:
6641       return "DW_AT_namelist_items";
6642     case DW_AT_priority:
6643       return "DW_AT_priority";
6644     case DW_AT_segment:
6645       return "DW_AT_segment";
6646     case DW_AT_specification:
6647       return "DW_AT_specification";
6648     case DW_AT_static_link:
6649       return "DW_AT_static_link";
6650     case DW_AT_type:
6651       return "DW_AT_type";
6652     case DW_AT_use_location:
6653       return "DW_AT_use_location";
6654     case DW_AT_variable_parameter:
6655       return "DW_AT_variable_parameter";
6656     case DW_AT_virtuality:
6657       return "DW_AT_virtuality";
6658     case DW_AT_vtable_elem_location:
6659       return "DW_AT_vtable_elem_location";
6660
6661     case DW_AT_allocated:
6662       return "DW_AT_allocated";
6663     case DW_AT_associated:
6664       return "DW_AT_associated";
6665     case DW_AT_data_location:
6666       return "DW_AT_data_location";
6667     case DW_AT_byte_stride:
6668       return "DW_AT_byte_stride";
6669     case DW_AT_entry_pc:
6670       return "DW_AT_entry_pc";
6671     case DW_AT_use_UTF8:
6672       return "DW_AT_use_UTF8";
6673     case DW_AT_extension:
6674       return "DW_AT_extension";
6675     case DW_AT_ranges:
6676       return "DW_AT_ranges";
6677     case DW_AT_trampoline:
6678       return "DW_AT_trampoline";
6679     case DW_AT_call_column:
6680       return "DW_AT_call_column";
6681     case DW_AT_call_file:
6682       return "DW_AT_call_file";
6683     case DW_AT_call_line:
6684       return "DW_AT_call_line";
6685
6686     case DW_AT_signature:
6687       return "DW_AT_signature";
6688     case DW_AT_main_subprogram:
6689       return "DW_AT_main_subprogram";
6690     case DW_AT_data_bit_offset:
6691       return "DW_AT_data_bit_offset";
6692     case DW_AT_const_expr:
6693       return "DW_AT_const_expr";
6694     case DW_AT_enum_class:
6695       return "DW_AT_enum_class";
6696     case DW_AT_linkage_name:
6697       return "DW_AT_linkage_name";
6698
6699     case DW_AT_MIPS_fde:
6700       return "DW_AT_MIPS_fde";
6701     case DW_AT_MIPS_loop_begin:
6702       return "DW_AT_MIPS_loop_begin";
6703     case DW_AT_MIPS_tail_loop_begin:
6704       return "DW_AT_MIPS_tail_loop_begin";
6705     case DW_AT_MIPS_epilog_begin:
6706       return "DW_AT_MIPS_epilog_begin";
6707     case DW_AT_MIPS_loop_unroll_factor:
6708       return "DW_AT_MIPS_loop_unroll_factor";
6709     case DW_AT_MIPS_software_pipeline_depth:
6710       return "DW_AT_MIPS_software_pipeline_depth";
6711     case DW_AT_MIPS_linkage_name:
6712       return "DW_AT_MIPS_linkage_name";
6713     case DW_AT_MIPS_stride:
6714       return "DW_AT_MIPS_stride";
6715     case DW_AT_MIPS_abstract_name:
6716       return "DW_AT_MIPS_abstract_name";
6717     case DW_AT_MIPS_clone_origin:
6718       return "DW_AT_MIPS_clone_origin";
6719     case DW_AT_MIPS_has_inlines:
6720       return "DW_AT_MIPS_has_inlines";
6721
6722     case DW_AT_sf_names:
6723       return "DW_AT_sf_names";
6724     case DW_AT_src_info:
6725       return "DW_AT_src_info";
6726     case DW_AT_mac_info:
6727       return "DW_AT_mac_info";
6728     case DW_AT_src_coords:
6729       return "DW_AT_src_coords";
6730     case DW_AT_body_begin:
6731       return "DW_AT_body_begin";
6732     case DW_AT_body_end:
6733       return "DW_AT_body_end";
6734     case DW_AT_GNU_vector:
6735       return "DW_AT_GNU_vector";
6736     case DW_AT_GNU_guarded_by:
6737       return "DW_AT_GNU_guarded_by";
6738     case DW_AT_GNU_pt_guarded_by:
6739       return "DW_AT_GNU_pt_guarded_by";
6740     case DW_AT_GNU_guarded:
6741       return "DW_AT_GNU_guarded";
6742     case DW_AT_GNU_pt_guarded:
6743       return "DW_AT_GNU_pt_guarded";
6744     case DW_AT_GNU_locks_excluded:
6745       return "DW_AT_GNU_locks_excluded";
6746     case DW_AT_GNU_exclusive_locks_required:
6747       return "DW_AT_GNU_exclusive_locks_required";
6748     case DW_AT_GNU_shared_locks_required:
6749       return "DW_AT_GNU_shared_locks_required";
6750     case DW_AT_GNU_odr_signature:
6751       return "DW_AT_GNU_odr_signature";
6752     case DW_AT_GNU_template_name:
6753       return "DW_AT_GNU_template_name";
6754
6755     case DW_AT_VMS_rtnbeg_pd_address:
6756       return "DW_AT_VMS_rtnbeg_pd_address";
6757
6758     default:
6759       return "DW_AT_<unknown>";
6760     }
6761 }
6762
6763 /* Convert a DWARF value form code into its string name.  */
6764
6765 static const char *
6766 dwarf_form_name (unsigned int form)
6767 {
6768   switch (form)
6769     {
6770     case DW_FORM_addr:
6771       return "DW_FORM_addr";
6772     case DW_FORM_block2:
6773       return "DW_FORM_block2";
6774     case DW_FORM_block4:
6775       return "DW_FORM_block4";
6776     case DW_FORM_data2:
6777       return "DW_FORM_data2";
6778     case DW_FORM_data4:
6779       return "DW_FORM_data4";
6780     case DW_FORM_data8:
6781       return "DW_FORM_data8";
6782     case DW_FORM_string:
6783       return "DW_FORM_string";
6784     case DW_FORM_block:
6785       return "DW_FORM_block";
6786     case DW_FORM_block1:
6787       return "DW_FORM_block1";
6788     case DW_FORM_data1:
6789       return "DW_FORM_data1";
6790     case DW_FORM_flag:
6791       return "DW_FORM_flag";
6792     case DW_FORM_sdata:
6793       return "DW_FORM_sdata";
6794     case DW_FORM_strp:
6795       return "DW_FORM_strp";
6796     case DW_FORM_udata:
6797       return "DW_FORM_udata";
6798     case DW_FORM_ref_addr:
6799       return "DW_FORM_ref_addr";
6800     case DW_FORM_ref1:
6801       return "DW_FORM_ref1";
6802     case DW_FORM_ref2:
6803       return "DW_FORM_ref2";
6804     case DW_FORM_ref4:
6805       return "DW_FORM_ref4";
6806     case DW_FORM_ref8:
6807       return "DW_FORM_ref8";
6808     case DW_FORM_ref_udata:
6809       return "DW_FORM_ref_udata";
6810     case DW_FORM_indirect:
6811       return "DW_FORM_indirect";
6812     case DW_FORM_sec_offset:
6813       return "DW_FORM_sec_offset";
6814     case DW_FORM_exprloc:
6815       return "DW_FORM_exprloc";
6816     case DW_FORM_flag_present:
6817       return "DW_FORM_flag_present";
6818     case DW_FORM_ref_sig8:
6819       return "DW_FORM_ref_sig8";
6820     default:
6821       return "DW_FORM_<unknown>";
6822     }
6823 }
6824 \f
6825 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6826    instance of an inlined instance of a decl which is local to an inline
6827    function, so we have to trace all of the way back through the origin chain
6828    to find out what sort of node actually served as the original seed for the
6829    given block.  */
6830
6831 static tree
6832 decl_ultimate_origin (const_tree decl)
6833 {
6834   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6835     return NULL_TREE;
6836
6837   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6838      nodes in the function to point to themselves; ignore that if
6839      we're trying to output the abstract instance of this function.  */
6840   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6841     return NULL_TREE;
6842
6843   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6844      most distant ancestor, this should never happen.  */
6845   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6846
6847   return DECL_ABSTRACT_ORIGIN (decl);
6848 }
6849
6850 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6851    of a virtual function may refer to a base class, so we check the 'this'
6852    parameter.  */
6853
6854 static tree
6855 decl_class_context (tree decl)
6856 {
6857   tree context = NULL_TREE;
6858
6859   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6860     context = DECL_CONTEXT (decl);
6861   else
6862     context = TYPE_MAIN_VARIANT
6863       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6864
6865   if (context && !TYPE_P (context))
6866     context = NULL_TREE;
6867
6868   return context;
6869 }
6870 \f
6871 /* Add an attribute/value pair to a DIE.  */
6872
6873 static inline void
6874 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6875 {
6876   /* Maybe this should be an assert?  */
6877   if (die == NULL)
6878     return;
6879
6880   if (die->die_attr == NULL)
6881     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6882   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6883 }
6884
6885 static inline enum dw_val_class
6886 AT_class (dw_attr_ref a)
6887 {
6888   return a->dw_attr_val.val_class;
6889 }
6890
6891 /* Add a flag value attribute to a DIE.  */
6892
6893 static inline void
6894 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6895 {
6896   dw_attr_node attr;
6897
6898   attr.dw_attr = attr_kind;
6899   attr.dw_attr_val.val_class = dw_val_class_flag;
6900   attr.dw_attr_val.v.val_flag = flag;
6901   add_dwarf_attr (die, &attr);
6902 }
6903
6904 static inline unsigned
6905 AT_flag (dw_attr_ref a)
6906 {
6907   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6908   return a->dw_attr_val.v.val_flag;
6909 }
6910
6911 /* Add a signed integer attribute value to a DIE.  */
6912
6913 static inline void
6914 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6915 {
6916   dw_attr_node attr;
6917
6918   attr.dw_attr = attr_kind;
6919   attr.dw_attr_val.val_class = dw_val_class_const;
6920   attr.dw_attr_val.v.val_int = int_val;
6921   add_dwarf_attr (die, &attr);
6922 }
6923
6924 static inline HOST_WIDE_INT
6925 AT_int (dw_attr_ref a)
6926 {
6927   gcc_assert (a && AT_class (a) == dw_val_class_const);
6928   return a->dw_attr_val.v.val_int;
6929 }
6930
6931 /* Add an unsigned integer attribute value to a DIE.  */
6932
6933 static inline void
6934 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6935                  unsigned HOST_WIDE_INT unsigned_val)
6936 {
6937   dw_attr_node attr;
6938
6939   attr.dw_attr = attr_kind;
6940   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6941   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6942   add_dwarf_attr (die, &attr);
6943 }
6944
6945 static inline unsigned HOST_WIDE_INT
6946 AT_unsigned (dw_attr_ref a)
6947 {
6948   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6949   return a->dw_attr_val.v.val_unsigned;
6950 }
6951
6952 /* Add an unsigned double integer attribute value to a DIE.  */
6953
6954 static inline void
6955 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6956                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6957 {
6958   dw_attr_node attr;
6959
6960   attr.dw_attr = attr_kind;
6961   attr.dw_attr_val.val_class = dw_val_class_const_double;
6962   attr.dw_attr_val.v.val_double.high = high;
6963   attr.dw_attr_val.v.val_double.low = low;
6964   add_dwarf_attr (die, &attr);
6965 }
6966
6967 /* Add a floating point attribute value to a DIE and return it.  */
6968
6969 static inline void
6970 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6971             unsigned int length, unsigned int elt_size, unsigned char *array)
6972 {
6973   dw_attr_node attr;
6974
6975   attr.dw_attr = attr_kind;
6976   attr.dw_attr_val.val_class = dw_val_class_vec;
6977   attr.dw_attr_val.v.val_vec.length = length;
6978   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6979   attr.dw_attr_val.v.val_vec.array = array;
6980   add_dwarf_attr (die, &attr);
6981 }
6982
6983 /* Add an 8-byte data attribute value to a DIE.  */
6984
6985 static inline void
6986 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6987               unsigned char data8[8])
6988 {
6989   dw_attr_node attr;
6990
6991   attr.dw_attr = attr_kind;
6992   attr.dw_attr_val.val_class = dw_val_class_data8;
6993   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6994   add_dwarf_attr (die, &attr);
6995 }
6996
6997 /* Hash and equality functions for debug_str_hash.  */
6998
6999 static hashval_t
7000 debug_str_do_hash (const void *x)
7001 {
7002   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7003 }
7004
7005 static int
7006 debug_str_eq (const void *x1, const void *x2)
7007 {
7008   return strcmp ((((const struct indirect_string_node *)x1)->str),
7009                  (const char *)x2) == 0;
7010 }
7011
7012 /* Add STR to the indirect string hash table.  */
7013
7014 static struct indirect_string_node *
7015 find_AT_string (const char *str)
7016 {
7017   struct indirect_string_node *node;
7018   void **slot;
7019
7020   if (! debug_str_hash)
7021     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7022                                       debug_str_eq, NULL);
7023
7024   slot = htab_find_slot_with_hash (debug_str_hash, str,
7025                                    htab_hash_string (str), INSERT);
7026   if (*slot == NULL)
7027     {
7028       node = (struct indirect_string_node *)
7029                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7030       node->str = ggc_strdup (str);
7031       *slot = node;
7032     }
7033   else
7034     node = (struct indirect_string_node *) *slot;
7035
7036   node->refcount++;
7037   return node;
7038 }
7039
7040 /* Add a string attribute value to a DIE.  */
7041
7042 static inline void
7043 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7044 {
7045   dw_attr_node attr;
7046   struct indirect_string_node *node;
7047
7048   node = find_AT_string (str);
7049
7050   attr.dw_attr = attr_kind;
7051   attr.dw_attr_val.val_class = dw_val_class_str;
7052   attr.dw_attr_val.v.val_str = node;
7053   add_dwarf_attr (die, &attr);
7054 }
7055
7056 /* Create a label for an indirect string node, ensuring it is going to
7057    be output, unless its reference count goes down to zero.  */
7058
7059 static inline void
7060 gen_label_for_indirect_string (struct indirect_string_node *node)
7061 {
7062   char label[32];
7063
7064   if (node->label)
7065     return;
7066
7067   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7068   ++dw2_string_counter;
7069   node->label = xstrdup (label);
7070 }
7071
7072 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7073    debug string STR.  */
7074
7075 static inline rtx
7076 get_debug_string_label (const char *str)
7077 {
7078   struct indirect_string_node *node = find_AT_string (str);
7079
7080   debug_str_hash_forced = true;
7081
7082   gen_label_for_indirect_string (node);
7083
7084   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7085 }
7086
7087 static inline const char *
7088 AT_string (dw_attr_ref a)
7089 {
7090   gcc_assert (a && AT_class (a) == dw_val_class_str);
7091   return a->dw_attr_val.v.val_str->str;
7092 }
7093
7094 /* Find out whether a string should be output inline in DIE
7095    or out-of-line in .debug_str section.  */
7096
7097 static enum dwarf_form
7098 AT_string_form (dw_attr_ref a)
7099 {
7100   struct indirect_string_node *node;
7101   unsigned int len;
7102
7103   gcc_assert (a && AT_class (a) == dw_val_class_str);
7104
7105   node = a->dw_attr_val.v.val_str;
7106   if (node->form)
7107     return node->form;
7108
7109   len = strlen (node->str) + 1;
7110
7111   /* If the string is shorter or equal to the size of the reference, it is
7112      always better to put it inline.  */
7113   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7114     return node->form = DW_FORM_string;
7115
7116   /* If we cannot expect the linker to merge strings in .debug_str
7117      section, only put it into .debug_str if it is worth even in this
7118      single module.  */
7119   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7120       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7121       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7122     return node->form = DW_FORM_string;
7123
7124   gen_label_for_indirect_string (node);
7125
7126   return node->form = DW_FORM_strp;
7127 }
7128
7129 /* Add a DIE reference attribute value to a DIE.  */
7130
7131 static inline void
7132 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7133 {
7134   dw_attr_node attr;
7135
7136   attr.dw_attr = attr_kind;
7137   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7138   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7139   attr.dw_attr_val.v.val_die_ref.external = 0;
7140   add_dwarf_attr (die, &attr);
7141 }
7142
7143 /* Add an AT_specification attribute to a DIE, and also make the back
7144    pointer from the specification to the definition.  */
7145
7146 static inline void
7147 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7148 {
7149   add_AT_die_ref (die, DW_AT_specification, targ_die);
7150   gcc_assert (!targ_die->die_definition);
7151   targ_die->die_definition = die;
7152 }
7153
7154 static inline dw_die_ref
7155 AT_ref (dw_attr_ref a)
7156 {
7157   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7158   return a->dw_attr_val.v.val_die_ref.die;
7159 }
7160
7161 static inline int
7162 AT_ref_external (dw_attr_ref a)
7163 {
7164   if (a && AT_class (a) == dw_val_class_die_ref)
7165     return a->dw_attr_val.v.val_die_ref.external;
7166
7167   return 0;
7168 }
7169
7170 static inline void
7171 set_AT_ref_external (dw_attr_ref a, int i)
7172 {
7173   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7174   a->dw_attr_val.v.val_die_ref.external = i;
7175 }
7176
7177 /* Add an FDE reference attribute value to a DIE.  */
7178
7179 static inline void
7180 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7181 {
7182   dw_attr_node attr;
7183
7184   attr.dw_attr = attr_kind;
7185   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7186   attr.dw_attr_val.v.val_fde_index = targ_fde;
7187   add_dwarf_attr (die, &attr);
7188 }
7189
7190 /* Add a location description attribute value to a DIE.  */
7191
7192 static inline void
7193 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7194 {
7195   dw_attr_node attr;
7196
7197   attr.dw_attr = attr_kind;
7198   attr.dw_attr_val.val_class = dw_val_class_loc;
7199   attr.dw_attr_val.v.val_loc = loc;
7200   add_dwarf_attr (die, &attr);
7201 }
7202
7203 static inline dw_loc_descr_ref
7204 AT_loc (dw_attr_ref a)
7205 {
7206   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7207   return a->dw_attr_val.v.val_loc;
7208 }
7209
7210 static inline void
7211 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7212 {
7213   dw_attr_node attr;
7214
7215   attr.dw_attr = attr_kind;
7216   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7217   attr.dw_attr_val.v.val_loc_list = loc_list;
7218   add_dwarf_attr (die, &attr);
7219   have_location_lists = true;
7220 }
7221
7222 static inline dw_loc_list_ref
7223 AT_loc_list (dw_attr_ref a)
7224 {
7225   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7226   return a->dw_attr_val.v.val_loc_list;
7227 }
7228
7229 static inline dw_loc_list_ref *
7230 AT_loc_list_ptr (dw_attr_ref a)
7231 {
7232   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7233   return &a->dw_attr_val.v.val_loc_list;
7234 }
7235
7236 /* Add an address constant attribute value to a DIE.  */
7237
7238 static inline void
7239 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7240 {
7241   dw_attr_node attr;
7242
7243   attr.dw_attr = attr_kind;
7244   attr.dw_attr_val.val_class = dw_val_class_addr;
7245   attr.dw_attr_val.v.val_addr = addr;
7246   add_dwarf_attr (die, &attr);
7247 }
7248
7249 /* Get the RTX from to an address DIE attribute.  */
7250
7251 static inline rtx
7252 AT_addr (dw_attr_ref a)
7253 {
7254   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7255   return a->dw_attr_val.v.val_addr;
7256 }
7257
7258 /* Add a file attribute value to a DIE.  */
7259
7260 static inline void
7261 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7262              struct dwarf_file_data *fd)
7263 {
7264   dw_attr_node attr;
7265
7266   attr.dw_attr = attr_kind;
7267   attr.dw_attr_val.val_class = dw_val_class_file;
7268   attr.dw_attr_val.v.val_file = fd;
7269   add_dwarf_attr (die, &attr);
7270 }
7271
7272 /* Get the dwarf_file_data from a file DIE attribute.  */
7273
7274 static inline struct dwarf_file_data *
7275 AT_file (dw_attr_ref a)
7276 {
7277   gcc_assert (a && AT_class (a) == dw_val_class_file);
7278   return a->dw_attr_val.v.val_file;
7279 }
7280
7281 /* Add a label identifier attribute value to a DIE.  */
7282
7283 static inline void
7284 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7285 {
7286   dw_attr_node attr;
7287
7288   attr.dw_attr = attr_kind;
7289   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7290   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7291   add_dwarf_attr (die, &attr);
7292 }
7293
7294 /* Add a section offset attribute value to a DIE, an offset into the
7295    debug_line section.  */
7296
7297 static inline void
7298 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7299                 const char *label)
7300 {
7301   dw_attr_node attr;
7302
7303   attr.dw_attr = attr_kind;
7304   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7305   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7306   add_dwarf_attr (die, &attr);
7307 }
7308
7309 /* Add a section offset attribute value to a DIE, an offset into the
7310    debug_macinfo section.  */
7311
7312 static inline void
7313 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7314                const char *label)
7315 {
7316   dw_attr_node attr;
7317
7318   attr.dw_attr = attr_kind;
7319   attr.dw_attr_val.val_class = dw_val_class_macptr;
7320   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7321   add_dwarf_attr (die, &attr);
7322 }
7323
7324 /* Add an offset attribute value to a DIE.  */
7325
7326 static inline void
7327 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7328                unsigned HOST_WIDE_INT offset)
7329 {
7330   dw_attr_node attr;
7331
7332   attr.dw_attr = attr_kind;
7333   attr.dw_attr_val.val_class = dw_val_class_offset;
7334   attr.dw_attr_val.v.val_offset = offset;
7335   add_dwarf_attr (die, &attr);
7336 }
7337
7338 /* Add an range_list attribute value to a DIE.  */
7339
7340 static void
7341 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7342                    long unsigned int offset)
7343 {
7344   dw_attr_node attr;
7345
7346   attr.dw_attr = attr_kind;
7347   attr.dw_attr_val.val_class = dw_val_class_range_list;
7348   attr.dw_attr_val.v.val_offset = offset;
7349   add_dwarf_attr (die, &attr);
7350 }
7351
7352 static inline const char *
7353 AT_lbl (dw_attr_ref a)
7354 {
7355   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7356                     || AT_class (a) == dw_val_class_lineptr
7357                     || AT_class (a) == dw_val_class_macptr));
7358   return a->dw_attr_val.v.val_lbl_id;
7359 }
7360
7361 /* Get the attribute of type attr_kind.  */
7362
7363 static dw_attr_ref
7364 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7365 {
7366   dw_attr_ref a;
7367   unsigned ix;
7368   dw_die_ref spec = NULL;
7369
7370   if (! die)
7371     return NULL;
7372
7373   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7374     if (a->dw_attr == attr_kind)
7375       return a;
7376     else if (a->dw_attr == DW_AT_specification
7377              || a->dw_attr == DW_AT_abstract_origin)
7378       spec = AT_ref (a);
7379
7380   if (spec)
7381     return get_AT (spec, attr_kind);
7382
7383   return NULL;
7384 }
7385
7386 /* Return the "low pc" attribute value, typically associated with a subprogram
7387    DIE.  Return null if the "low pc" attribute is either not present, or if it
7388    cannot be represented as an assembler label identifier.  */
7389
7390 static inline const char *
7391 get_AT_low_pc (dw_die_ref die)
7392 {
7393   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7394
7395   return a ? AT_lbl (a) : NULL;
7396 }
7397
7398 /* Return the "high pc" attribute value, typically associated with a subprogram
7399    DIE.  Return null if the "high pc" attribute is either not present, or if it
7400    cannot be represented as an assembler label identifier.  */
7401
7402 static inline const char *
7403 get_AT_hi_pc (dw_die_ref die)
7404 {
7405   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7406
7407   return a ? AT_lbl (a) : NULL;
7408 }
7409
7410 /* Return the value of the string attribute designated by ATTR_KIND, or
7411    NULL if it is not present.  */
7412
7413 static inline const char *
7414 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7415 {
7416   dw_attr_ref a = get_AT (die, attr_kind);
7417
7418   return a ? AT_string (a) : NULL;
7419 }
7420
7421 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7422    if it is not present.  */
7423
7424 static inline int
7425 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7426 {
7427   dw_attr_ref a = get_AT (die, attr_kind);
7428
7429   return a ? AT_flag (a) : 0;
7430 }
7431
7432 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7433    if it is not present.  */
7434
7435 static inline unsigned
7436 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7437 {
7438   dw_attr_ref a = get_AT (die, attr_kind);
7439
7440   return a ? AT_unsigned (a) : 0;
7441 }
7442
7443 static inline dw_die_ref
7444 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7445 {
7446   dw_attr_ref a = get_AT (die, attr_kind);
7447
7448   return a ? AT_ref (a) : NULL;
7449 }
7450
7451 static inline struct dwarf_file_data *
7452 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7453 {
7454   dw_attr_ref a = get_AT (die, attr_kind);
7455
7456   return a ? AT_file (a) : NULL;
7457 }
7458
7459 /* Return TRUE if the language is C++.  */
7460
7461 static inline bool
7462 is_cxx (void)
7463 {
7464   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7465
7466   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7467 }
7468
7469 /* Return TRUE if the language is Fortran.  */
7470
7471 static inline bool
7472 is_fortran (void)
7473 {
7474   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7475
7476   return (lang == DW_LANG_Fortran77
7477           || lang == DW_LANG_Fortran90
7478           || lang == DW_LANG_Fortran95);
7479 }
7480
7481 /* Return TRUE if the language is Ada.  */
7482
7483 static inline bool
7484 is_ada (void)
7485 {
7486   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7487
7488   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7489 }
7490
7491 /* Remove the specified attribute if present.  */
7492
7493 static void
7494 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7495 {
7496   dw_attr_ref a;
7497   unsigned ix;
7498
7499   if (! die)
7500     return;
7501
7502   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7503     if (a->dw_attr == attr_kind)
7504       {
7505         if (AT_class (a) == dw_val_class_str)
7506           if (a->dw_attr_val.v.val_str->refcount)
7507             a->dw_attr_val.v.val_str->refcount--;
7508
7509         /* VEC_ordered_remove should help reduce the number of abbrevs
7510            that are needed.  */
7511         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7512         return;
7513       }
7514 }
7515
7516 /* Remove CHILD from its parent.  PREV must have the property that
7517    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7518
7519 static void
7520 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7521 {
7522   gcc_assert (child->die_parent == prev->die_parent);
7523   gcc_assert (prev->die_sib == child);
7524   if (prev == child)
7525     {
7526       gcc_assert (child->die_parent->die_child == child);
7527       prev = NULL;
7528     }
7529   else
7530     prev->die_sib = child->die_sib;
7531   if (child->die_parent->die_child == child)
7532     child->die_parent->die_child = prev;
7533 }
7534
7535 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7536    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7537
7538 static void
7539 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7540 {
7541   dw_die_ref parent = old_child->die_parent;
7542
7543   gcc_assert (parent == prev->die_parent);
7544   gcc_assert (prev->die_sib == old_child);
7545
7546   new_child->die_parent = parent;
7547   if (prev == old_child)
7548     {
7549       gcc_assert (parent->die_child == old_child);
7550       new_child->die_sib = new_child;
7551     }
7552   else
7553     {
7554       prev->die_sib = new_child;
7555       new_child->die_sib = old_child->die_sib;
7556     }
7557   if (old_child->die_parent->die_child == old_child)
7558     old_child->die_parent->die_child = new_child;
7559 }
7560
7561 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7562
7563 static void
7564 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7565 {
7566   dw_die_ref c;
7567   new_parent->die_child = old_parent->die_child;
7568   old_parent->die_child = NULL;
7569   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7570 }
7571
7572 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7573    matches TAG.  */
7574
7575 static void
7576 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7577 {
7578   dw_die_ref c;
7579
7580   c = die->die_child;
7581   if (c) do {
7582     dw_die_ref prev = c;
7583     c = c->die_sib;
7584     while (c->die_tag == tag)
7585       {
7586         remove_child_with_prev (c, prev);
7587         /* Might have removed every child.  */
7588         if (c == c->die_sib)
7589           return;
7590         c = c->die_sib;
7591       }
7592   } while (c != die->die_child);
7593 }
7594
7595 /* Add a CHILD_DIE as the last child of DIE.  */
7596
7597 static void
7598 add_child_die (dw_die_ref die, dw_die_ref child_die)
7599 {
7600   /* FIXME this should probably be an assert.  */
7601   if (! die || ! child_die)
7602     return;
7603   gcc_assert (die != child_die);
7604
7605   child_die->die_parent = die;
7606   if (die->die_child)
7607     {
7608       child_die->die_sib = die->die_child->die_sib;
7609       die->die_child->die_sib = child_die;
7610     }
7611   else
7612     child_die->die_sib = child_die;
7613   die->die_child = child_die;
7614 }
7615
7616 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7617    is the specification, to the end of PARENT's list of children.
7618    This is done by removing and re-adding it.  */
7619
7620 static void
7621 splice_child_die (dw_die_ref parent, dw_die_ref child)
7622 {
7623   dw_die_ref p;
7624
7625   /* We want the declaration DIE from inside the class, not the
7626      specification DIE at toplevel.  */
7627   if (child->die_parent != parent)
7628     {
7629       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7630
7631       if (tmp)
7632         child = tmp;
7633     }
7634
7635   gcc_assert (child->die_parent == parent
7636               || (child->die_parent
7637                   == get_AT_ref (parent, DW_AT_specification)));
7638
7639   for (p = child->die_parent->die_child; ; p = p->die_sib)
7640     if (p->die_sib == child)
7641       {
7642         remove_child_with_prev (child, p);
7643         break;
7644       }
7645
7646   add_child_die (parent, child);
7647 }
7648
7649 /* Return a pointer to a newly created DIE node.  */
7650
7651 static inline dw_die_ref
7652 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7653 {
7654   dw_die_ref die = GGC_CNEW (die_node);
7655
7656   die->die_tag = tag_value;
7657
7658   if (parent_die != NULL)
7659     add_child_die (parent_die, die);
7660   else
7661     {
7662       limbo_die_node *limbo_node;
7663
7664       limbo_node = GGC_CNEW (limbo_die_node);
7665       limbo_node->die = die;
7666       limbo_node->created_for = t;
7667       limbo_node->next = limbo_die_list;
7668       limbo_die_list = limbo_node;
7669     }
7670
7671   return die;
7672 }
7673
7674 /* Return the DIE associated with the given type specifier.  */
7675
7676 static inline dw_die_ref
7677 lookup_type_die (tree type)
7678 {
7679   return TYPE_SYMTAB_DIE (type);
7680 }
7681
7682 /* Equate a DIE to a given type specifier.  */
7683
7684 static inline void
7685 equate_type_number_to_die (tree type, dw_die_ref type_die)
7686 {
7687   TYPE_SYMTAB_DIE (type) = type_die;
7688 }
7689
7690 /* Returns a hash value for X (which really is a die_struct).  */
7691
7692 static hashval_t
7693 decl_die_table_hash (const void *x)
7694 {
7695   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7696 }
7697
7698 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7699
7700 static int
7701 decl_die_table_eq (const void *x, const void *y)
7702 {
7703   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7704 }
7705
7706 /* Return the DIE associated with a given declaration.  */
7707
7708 static inline dw_die_ref
7709 lookup_decl_die (tree decl)
7710 {
7711   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7712 }
7713
7714 /* Returns a hash value for X (which really is a var_loc_list).  */
7715
7716 static hashval_t
7717 decl_loc_table_hash (const void *x)
7718 {
7719   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7720 }
7721
7722 /* Return nonzero if decl_id of var_loc_list X is the same as
7723    UID of decl *Y.  */
7724
7725 static int
7726 decl_loc_table_eq (const void *x, const void *y)
7727 {
7728   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7729 }
7730
7731 /* Return the var_loc list associated with a given declaration.  */
7732
7733 static inline var_loc_list *
7734 lookup_decl_loc (const_tree decl)
7735 {
7736   if (!decl_loc_table)
7737     return NULL;
7738   return (var_loc_list *)
7739     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7740 }
7741
7742 /* Equate a DIE to a particular declaration.  */
7743
7744 static void
7745 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7746 {
7747   unsigned int decl_id = DECL_UID (decl);
7748   void **slot;
7749
7750   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7751   *slot = decl_die;
7752   decl_die->decl_id = decl_id;
7753 }
7754
7755 /* Add a variable location node to the linked list for DECL.  */
7756
7757 static struct var_loc_node *
7758 add_var_loc_to_decl (tree decl, rtx loc_note)
7759 {
7760   unsigned int decl_id = DECL_UID (decl);
7761   var_loc_list *temp;
7762   void **slot;
7763   struct var_loc_node *loc = NULL;
7764
7765   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7766   if (*slot == NULL)
7767     {
7768       temp = GGC_CNEW (var_loc_list);
7769       temp->decl_id = decl_id;
7770       *slot = temp;
7771     }
7772   else
7773     temp = (var_loc_list *) *slot;
7774
7775   if (temp->last)
7776     {
7777       /* If the current location is the same as the end of the list,
7778          and either both or neither of the locations is uninitialized,
7779          we have nothing to do.  */
7780       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7781                          NOTE_VAR_LOCATION_LOC (loc_note)))
7782           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7783                != NOTE_VAR_LOCATION_STATUS (loc_note))
7784               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7785                    == VAR_INIT_STATUS_UNINITIALIZED)
7786                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
7787                       == VAR_INIT_STATUS_UNINITIALIZED))))
7788         {
7789           /* Add LOC to the end of list and update LAST.  */
7790           loc = GGC_CNEW (struct var_loc_node);
7791           temp->last->next = loc;
7792           temp->last = loc;
7793         }
7794     }
7795   else
7796     {
7797       loc = GGC_CNEW (struct var_loc_node);
7798       temp->first = loc;
7799       temp->last = loc;
7800     }
7801   return loc;
7802 }
7803 \f
7804 /* Keep track of the number of spaces used to indent the
7805    output of the debugging routines that print the structure of
7806    the DIE internal representation.  */
7807 static int print_indent;
7808
7809 /* Indent the line the number of spaces given by print_indent.  */
7810
7811 static inline void
7812 print_spaces (FILE *outfile)
7813 {
7814   fprintf (outfile, "%*s", print_indent, "");
7815 }
7816
7817 /* Print a type signature in hex.  */
7818
7819 static inline void
7820 print_signature (FILE *outfile, char *sig)
7821 {
7822   int i;
7823
7824   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7825     fprintf (outfile, "%02x", sig[i] & 0xff);
7826 }
7827
7828 /* Print the information associated with a given DIE, and its children.
7829    This routine is a debugging aid only.  */
7830
7831 static void
7832 print_die (dw_die_ref die, FILE *outfile)
7833 {
7834   dw_attr_ref a;
7835   dw_die_ref c;
7836   unsigned ix;
7837
7838   print_spaces (outfile);
7839   fprintf (outfile, "DIE %4ld: %s\n",
7840            die->die_offset, dwarf_tag_name (die->die_tag));
7841   print_spaces (outfile);
7842   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7843   fprintf (outfile, " offset: %ld\n", die->die_offset);
7844   if (dwarf_version >= 4 && die->die_id.die_type_node)
7845     {
7846       print_spaces (outfile);
7847       fprintf (outfile, "  signature: ");
7848       print_signature (outfile, die->die_id.die_type_node->signature);
7849       fprintf (outfile, "\n");
7850     }
7851
7852   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7853     {
7854       print_spaces (outfile);
7855       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7856
7857       switch (AT_class (a))
7858         {
7859         case dw_val_class_addr:
7860           fprintf (outfile, "address");
7861           break;
7862         case dw_val_class_offset:
7863           fprintf (outfile, "offset");
7864           break;
7865         case dw_val_class_loc:
7866           fprintf (outfile, "location descriptor");
7867           break;
7868         case dw_val_class_loc_list:
7869           fprintf (outfile, "location list -> label:%s",
7870                    AT_loc_list (a)->ll_symbol);
7871           break;
7872         case dw_val_class_range_list:
7873           fprintf (outfile, "range list");
7874           break;
7875         case dw_val_class_const:
7876           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7877           break;
7878         case dw_val_class_unsigned_const:
7879           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7880           break;
7881         case dw_val_class_const_double:
7882           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7883                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7884                    a->dw_attr_val.v.val_double.high,
7885                    a->dw_attr_val.v.val_double.low);
7886           break;
7887         case dw_val_class_vec:
7888           fprintf (outfile, "floating-point or vector constant");
7889           break;
7890         case dw_val_class_flag:
7891           fprintf (outfile, "%u", AT_flag (a));
7892           break;
7893         case dw_val_class_die_ref:
7894           if (AT_ref (a) != NULL)
7895             {
7896               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7897                 {
7898                   fprintf (outfile, "die -> signature: ");
7899                   print_signature (outfile,
7900                                    AT_ref (a)->die_id.die_type_node->signature);
7901                 }
7902               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7903                 fprintf (outfile, "die -> label: %s",
7904                          AT_ref (a)->die_id.die_symbol);
7905               else
7906                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7907             }
7908           else
7909             fprintf (outfile, "die -> <null>");
7910           break;
7911         case dw_val_class_lbl_id:
7912         case dw_val_class_lineptr:
7913         case dw_val_class_macptr:
7914           fprintf (outfile, "label: %s", AT_lbl (a));
7915           break;
7916         case dw_val_class_str:
7917           if (AT_string (a) != NULL)
7918             fprintf (outfile, "\"%s\"", AT_string (a));
7919           else
7920             fprintf (outfile, "<null>");
7921           break;
7922         case dw_val_class_file:
7923           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7924                    AT_file (a)->emitted_number);
7925           break;
7926         case dw_val_class_data8:
7927           {
7928             int i;
7929
7930             for (i = 0; i < 8; i++)
7931               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7932             break;
7933           }
7934         default:
7935           break;
7936         }
7937
7938       fprintf (outfile, "\n");
7939     }
7940
7941   if (die->die_child != NULL)
7942     {
7943       print_indent += 4;
7944       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7945       print_indent -= 4;
7946     }
7947   if (print_indent == 0)
7948     fprintf (outfile, "\n");
7949 }
7950
7951 /* Print the contents of the source code line number correspondence table.
7952    This routine is a debugging aid only.  */
7953
7954 static void
7955 print_dwarf_line_table (FILE *outfile)
7956 {
7957   unsigned i;
7958   dw_line_info_ref line_info;
7959
7960   fprintf (outfile, "\n\nDWARF source line information\n");
7961   for (i = 1; i < line_info_table_in_use; i++)
7962     {
7963       line_info = &line_info_table[i];
7964       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7965                line_info->dw_file_num,
7966                line_info->dw_line_num);
7967     }
7968
7969   fprintf (outfile, "\n\n");
7970 }
7971
7972 /* Print the information collected for a given DIE.  */
7973
7974 void
7975 debug_dwarf_die (dw_die_ref die)
7976 {
7977   print_die (die, stderr);
7978 }
7979
7980 /* Print all DWARF information collected for the compilation unit.
7981    This routine is a debugging aid only.  */
7982
7983 void
7984 debug_dwarf (void)
7985 {
7986   print_indent = 0;
7987   print_die (comp_unit_die, stderr);
7988   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7989     print_dwarf_line_table (stderr);
7990 }
7991 \f
7992 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
7993    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
7994    DIE that marks the start of the DIEs for this include file.  */
7995
7996 static dw_die_ref
7997 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
7998 {
7999   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8000   dw_die_ref new_unit = gen_compile_unit_die (filename);
8001
8002   new_unit->die_sib = old_unit;
8003   return new_unit;
8004 }
8005
8006 /* Close an include-file CU and reopen the enclosing one.  */
8007
8008 static dw_die_ref
8009 pop_compile_unit (dw_die_ref old_unit)
8010 {
8011   dw_die_ref new_unit = old_unit->die_sib;
8012
8013   old_unit->die_sib = NULL;
8014   return new_unit;
8015 }
8016
8017 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8018 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8019
8020 /* Calculate the checksum of a location expression.  */
8021
8022 static inline void
8023 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8024 {
8025   int tem;
8026
8027   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8028   CHECKSUM (tem);
8029   CHECKSUM (loc->dw_loc_oprnd1);
8030   CHECKSUM (loc->dw_loc_oprnd2);
8031 }
8032
8033 /* Calculate the checksum of an attribute.  */
8034
8035 static void
8036 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8037 {
8038   dw_loc_descr_ref loc;
8039   rtx r;
8040
8041   CHECKSUM (at->dw_attr);
8042
8043   /* We don't care that this was compiled with a different compiler
8044      snapshot; if the output is the same, that's what matters.  */
8045   if (at->dw_attr == DW_AT_producer)
8046     return;
8047
8048   switch (AT_class (at))
8049     {
8050     case dw_val_class_const:
8051       CHECKSUM (at->dw_attr_val.v.val_int);
8052       break;
8053     case dw_val_class_unsigned_const:
8054       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8055       break;
8056     case dw_val_class_const_double:
8057       CHECKSUM (at->dw_attr_val.v.val_double);
8058       break;
8059     case dw_val_class_vec:
8060       CHECKSUM (at->dw_attr_val.v.val_vec);
8061       break;
8062     case dw_val_class_flag:
8063       CHECKSUM (at->dw_attr_val.v.val_flag);
8064       break;
8065     case dw_val_class_str:
8066       CHECKSUM_STRING (AT_string (at));
8067       break;
8068
8069     case dw_val_class_addr:
8070       r = AT_addr (at);
8071       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8072       CHECKSUM_STRING (XSTR (r, 0));
8073       break;
8074
8075     case dw_val_class_offset:
8076       CHECKSUM (at->dw_attr_val.v.val_offset);
8077       break;
8078
8079     case dw_val_class_loc:
8080       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8081         loc_checksum (loc, ctx);
8082       break;
8083
8084     case dw_val_class_die_ref:
8085       die_checksum (AT_ref (at), ctx, mark);
8086       break;
8087
8088     case dw_val_class_fde_ref:
8089     case dw_val_class_lbl_id:
8090     case dw_val_class_lineptr:
8091     case dw_val_class_macptr:
8092       break;
8093
8094     case dw_val_class_file:
8095       CHECKSUM_STRING (AT_file (at)->filename);
8096       break;
8097
8098     case dw_val_class_data8:
8099       CHECKSUM (at->dw_attr_val.v.val_data8);
8100       break;
8101
8102     default:
8103       break;
8104     }
8105 }
8106
8107 /* Calculate the checksum of a DIE.  */
8108
8109 static void
8110 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8111 {
8112   dw_die_ref c;
8113   dw_attr_ref a;
8114   unsigned ix;
8115
8116   /* To avoid infinite recursion.  */
8117   if (die->die_mark)
8118     {
8119       CHECKSUM (die->die_mark);
8120       return;
8121     }
8122   die->die_mark = ++(*mark);
8123
8124   CHECKSUM (die->die_tag);
8125
8126   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8127     attr_checksum (a, ctx, mark);
8128
8129   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8130 }
8131
8132 #undef CHECKSUM
8133 #undef CHECKSUM_STRING
8134
8135 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8136 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8137 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8138 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8139 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8140 #define CHECKSUM_ATTR(FOO) \
8141   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8142
8143 /* Calculate the checksum of a number in signed LEB128 format.  */
8144
8145 static void
8146 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8147 {
8148   unsigned char byte;
8149   bool more;
8150
8151   while (1)
8152     {
8153       byte = (value & 0x7f);
8154       value >>= 7;
8155       more = !((value == 0 && (byte & 0x40) == 0)
8156                 || (value == -1 && (byte & 0x40) != 0));
8157       if (more)
8158         byte |= 0x80;
8159       CHECKSUM (byte);
8160       if (!more)
8161         break;
8162     }
8163 }
8164
8165 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8166
8167 static void
8168 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8169 {
8170   while (1)
8171     {
8172       unsigned char byte = (value & 0x7f);
8173       value >>= 7;
8174       if (value != 0)
8175         /* More bytes to follow.  */
8176         byte |= 0x80;
8177       CHECKSUM (byte);
8178       if (value == 0)
8179         break;
8180     }
8181 }
8182
8183 /* Checksum the context of the DIE.  This adds the names of any
8184    surrounding namespaces or structures to the checksum.  */
8185
8186 static void
8187 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8188 {
8189   const char *name;
8190   dw_die_ref spec;
8191   int tag = die->die_tag;
8192
8193   if (tag != DW_TAG_namespace
8194       && tag != DW_TAG_structure_type
8195       && tag != DW_TAG_class_type)
8196     return;
8197
8198   name = get_AT_string (die, DW_AT_name);
8199
8200   spec = get_AT_ref (die, DW_AT_specification);
8201   if (spec != NULL)
8202     die = spec;
8203
8204   if (die->die_parent != NULL)
8205     checksum_die_context (die->die_parent, ctx);
8206
8207   CHECKSUM_ULEB128 ('C');
8208   CHECKSUM_ULEB128 (tag);
8209   if (name != NULL)
8210     CHECKSUM_STRING (name);
8211 }
8212
8213 /* Calculate the checksum of a location expression.  */
8214
8215 static inline void
8216 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8217 {
8218   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8219      were emitted as a DW_FORM_sdata instead of a location expression.  */
8220   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8221     {
8222       CHECKSUM_ULEB128 (DW_FORM_sdata);
8223       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8224       return;
8225     }
8226
8227   /* Otherwise, just checksum the raw location expression.  */
8228   while (loc != NULL)
8229     {
8230       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8231       CHECKSUM (loc->dw_loc_oprnd1);
8232       CHECKSUM (loc->dw_loc_oprnd2);
8233       loc = loc->dw_loc_next;
8234     }
8235 }
8236
8237 /* Calculate the checksum of an attribute.  */
8238
8239 static void
8240 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8241                        struct md5_ctx *ctx, int *mark)
8242 {
8243   dw_loc_descr_ref loc;
8244   rtx r;
8245
8246   if (AT_class (at) == dw_val_class_die_ref)
8247     {
8248       dw_die_ref target_die = AT_ref (at);
8249
8250       /* For pointer and reference types, we checksum only the (qualified)
8251          name of the target type (if there is a name).  For friend entries,
8252          we checksum only the (qualified) name of the target type or function.
8253          This allows the checksum to remain the same whether the target type
8254          is complete or not.  */
8255       if ((at->dw_attr == DW_AT_type
8256            && (tag == DW_TAG_pointer_type
8257                || tag == DW_TAG_reference_type
8258                || tag == DW_TAG_rvalue_reference_type
8259                || tag == DW_TAG_ptr_to_member_type))
8260           || (at->dw_attr == DW_AT_friend
8261               && tag == DW_TAG_friend))
8262         {
8263           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8264
8265           if (name_attr != NULL)
8266             {
8267               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8268
8269               if (decl == NULL)
8270                 decl = target_die;
8271               CHECKSUM_ULEB128 ('N');
8272               CHECKSUM_ULEB128 (at->dw_attr);
8273               if (decl->die_parent != NULL)
8274                 checksum_die_context (decl->die_parent, ctx);
8275               CHECKSUM_ULEB128 ('E');
8276               CHECKSUM_STRING (AT_string (name_attr));
8277               return;
8278             }
8279         }
8280
8281       /* For all other references to another DIE, we check to see if the
8282          target DIE has already been visited.  If it has, we emit a
8283          backward reference; if not, we descend recursively.  */
8284       if (target_die->die_mark > 0)
8285         {
8286           CHECKSUM_ULEB128 ('R');
8287           CHECKSUM_ULEB128 (at->dw_attr);
8288           CHECKSUM_ULEB128 (target_die->die_mark);
8289         }
8290       else
8291         {
8292           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8293
8294           if (decl == NULL)
8295             decl = target_die;
8296           target_die->die_mark = ++(*mark);
8297           CHECKSUM_ULEB128 ('T');
8298           CHECKSUM_ULEB128 (at->dw_attr);
8299           if (decl->die_parent != NULL)
8300             checksum_die_context (decl->die_parent, ctx);
8301           die_checksum_ordered (target_die, ctx, mark);
8302         }
8303       return;
8304     }
8305
8306   CHECKSUM_ULEB128 ('A');
8307   CHECKSUM_ULEB128 (at->dw_attr);
8308
8309   switch (AT_class (at))
8310     {
8311     case dw_val_class_const:
8312       CHECKSUM_ULEB128 (DW_FORM_sdata);
8313       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8314       break;
8315
8316     case dw_val_class_unsigned_const:
8317       CHECKSUM_ULEB128 (DW_FORM_sdata);
8318       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8319       break;
8320
8321     case dw_val_class_const_double:
8322       CHECKSUM_ULEB128 (DW_FORM_block);
8323       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8324       CHECKSUM (at->dw_attr_val.v.val_double);
8325       break;
8326
8327     case dw_val_class_vec:
8328       CHECKSUM_ULEB128 (DW_FORM_block);
8329       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8330       CHECKSUM (at->dw_attr_val.v.val_vec);
8331       break;
8332
8333     case dw_val_class_flag:
8334       CHECKSUM_ULEB128 (DW_FORM_flag);
8335       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8336       break;
8337
8338     case dw_val_class_str:
8339       CHECKSUM_ULEB128 (DW_FORM_string);
8340       CHECKSUM_STRING (AT_string (at));
8341       break;
8342
8343     case dw_val_class_addr:
8344       r = AT_addr (at);
8345       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8346       CHECKSUM_ULEB128 (DW_FORM_string);
8347       CHECKSUM_STRING (XSTR (r, 0));
8348       break;
8349
8350     case dw_val_class_offset:
8351       CHECKSUM_ULEB128 (DW_FORM_sdata);
8352       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8353       break;
8354
8355     case dw_val_class_loc:
8356       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8357         loc_checksum_ordered (loc, ctx);
8358       break;
8359
8360     case dw_val_class_fde_ref:
8361     case dw_val_class_lbl_id:
8362     case dw_val_class_lineptr:
8363     case dw_val_class_macptr:
8364       break;
8365
8366     case dw_val_class_file:
8367       CHECKSUM_ULEB128 (DW_FORM_string);
8368       CHECKSUM_STRING (AT_file (at)->filename);
8369       break;
8370
8371     case dw_val_class_data8:
8372       CHECKSUM (at->dw_attr_val.v.val_data8);
8373       break;
8374
8375     default:
8376       break;
8377     }
8378 }
8379
8380 struct checksum_attributes
8381 {
8382   dw_attr_ref at_name;
8383   dw_attr_ref at_type;
8384   dw_attr_ref at_friend;
8385   dw_attr_ref at_accessibility;
8386   dw_attr_ref at_address_class;
8387   dw_attr_ref at_allocated;
8388   dw_attr_ref at_artificial;
8389   dw_attr_ref at_associated;
8390   dw_attr_ref at_binary_scale;
8391   dw_attr_ref at_bit_offset;
8392   dw_attr_ref at_bit_size;
8393   dw_attr_ref at_bit_stride;
8394   dw_attr_ref at_byte_size;
8395   dw_attr_ref at_byte_stride;
8396   dw_attr_ref at_const_value;
8397   dw_attr_ref at_containing_type;
8398   dw_attr_ref at_count;
8399   dw_attr_ref at_data_location;
8400   dw_attr_ref at_data_member_location;
8401   dw_attr_ref at_decimal_scale;
8402   dw_attr_ref at_decimal_sign;
8403   dw_attr_ref at_default_value;
8404   dw_attr_ref at_digit_count;
8405   dw_attr_ref at_discr;
8406   dw_attr_ref at_discr_list;
8407   dw_attr_ref at_discr_value;
8408   dw_attr_ref at_encoding;
8409   dw_attr_ref at_endianity;
8410   dw_attr_ref at_explicit;
8411   dw_attr_ref at_is_optional;
8412   dw_attr_ref at_location;
8413   dw_attr_ref at_lower_bound;
8414   dw_attr_ref at_mutable;
8415   dw_attr_ref at_ordering;
8416   dw_attr_ref at_picture_string;
8417   dw_attr_ref at_prototyped;
8418   dw_attr_ref at_small;
8419   dw_attr_ref at_segment;
8420   dw_attr_ref at_string_length;
8421   dw_attr_ref at_threads_scaled;
8422   dw_attr_ref at_upper_bound;
8423   dw_attr_ref at_use_location;
8424   dw_attr_ref at_use_UTF8;
8425   dw_attr_ref at_variable_parameter;
8426   dw_attr_ref at_virtuality;
8427   dw_attr_ref at_visibility;
8428   dw_attr_ref at_vtable_elem_location;
8429 };
8430
8431 /* Collect the attributes that we will want to use for the checksum.  */
8432
8433 static void
8434 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8435 {
8436   dw_attr_ref a;
8437   unsigned ix;
8438
8439   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8440     {
8441       switch (a->dw_attr)
8442         {
8443         case DW_AT_name:
8444           attrs->at_name = a;
8445           break;
8446         case DW_AT_type:
8447           attrs->at_type = a;
8448           break;
8449         case DW_AT_friend:
8450           attrs->at_friend = a;
8451           break;
8452         case DW_AT_accessibility:
8453           attrs->at_accessibility = a;
8454           break;
8455         case DW_AT_address_class:
8456           attrs->at_address_class = a;
8457           break;
8458         case DW_AT_allocated:
8459           attrs->at_allocated = a;
8460           break;
8461         case DW_AT_artificial:
8462           attrs->at_artificial = a;
8463           break;
8464         case DW_AT_associated:
8465           attrs->at_associated = a;
8466           break;
8467         case DW_AT_binary_scale:
8468           attrs->at_binary_scale = a;
8469           break;
8470         case DW_AT_bit_offset:
8471           attrs->at_bit_offset = a;
8472           break;
8473         case DW_AT_bit_size:
8474           attrs->at_bit_size = a;
8475           break;
8476         case DW_AT_bit_stride:
8477           attrs->at_bit_stride = a;
8478           break;
8479         case DW_AT_byte_size:
8480           attrs->at_byte_size = a;
8481           break;
8482         case DW_AT_byte_stride:
8483           attrs->at_byte_stride = a;
8484           break;
8485         case DW_AT_const_value:
8486           attrs->at_const_value = a;
8487           break;
8488         case DW_AT_containing_type:
8489           attrs->at_containing_type = a;
8490           break;
8491         case DW_AT_count:
8492           attrs->at_count = a;
8493           break;
8494         case DW_AT_data_location:
8495           attrs->at_data_location = a;
8496           break;
8497         case DW_AT_data_member_location:
8498           attrs->at_data_member_location = a;
8499           break;
8500         case DW_AT_decimal_scale:
8501           attrs->at_decimal_scale = a;
8502           break;
8503         case DW_AT_decimal_sign:
8504           attrs->at_decimal_sign = a;
8505           break;
8506         case DW_AT_default_value:
8507           attrs->at_default_value = a;
8508           break;
8509         case DW_AT_digit_count:
8510           attrs->at_digit_count = a;
8511           break;
8512         case DW_AT_discr:
8513           attrs->at_discr = a;
8514           break;
8515         case DW_AT_discr_list:
8516           attrs->at_discr_list = a;
8517           break;
8518         case DW_AT_discr_value:
8519           attrs->at_discr_value = a;
8520           break;
8521         case DW_AT_encoding:
8522           attrs->at_encoding = a;
8523           break;
8524         case DW_AT_endianity:
8525           attrs->at_endianity = a;
8526           break;
8527         case DW_AT_explicit:
8528           attrs->at_explicit = a;
8529           break;
8530         case DW_AT_is_optional:
8531           attrs->at_is_optional = a;
8532           break;
8533         case DW_AT_location:
8534           attrs->at_location = a;
8535           break;
8536         case DW_AT_lower_bound:
8537           attrs->at_lower_bound = a;
8538           break;
8539         case DW_AT_mutable:
8540           attrs->at_mutable = a;
8541           break;
8542         case DW_AT_ordering:
8543           attrs->at_ordering = a;
8544           break;
8545         case DW_AT_picture_string:
8546           attrs->at_picture_string = a;
8547           break;
8548         case DW_AT_prototyped:
8549           attrs->at_prototyped = a;
8550           break;
8551         case DW_AT_small:
8552           attrs->at_small = a;
8553           break;
8554         case DW_AT_segment:
8555           attrs->at_segment = a;
8556           break;
8557         case DW_AT_string_length:
8558           attrs->at_string_length = a;
8559           break;
8560         case DW_AT_threads_scaled:
8561           attrs->at_threads_scaled = a;
8562           break;
8563         case DW_AT_upper_bound:
8564           attrs->at_upper_bound = a;
8565           break;
8566         case DW_AT_use_location:
8567           attrs->at_use_location = a;
8568           break;
8569         case DW_AT_use_UTF8:
8570           attrs->at_use_UTF8 = a;
8571           break;
8572         case DW_AT_variable_parameter:
8573           attrs->at_variable_parameter = a;
8574           break;
8575         case DW_AT_virtuality:
8576           attrs->at_virtuality = a;
8577           break;
8578         case DW_AT_visibility:
8579           attrs->at_visibility = a;
8580           break;
8581         case DW_AT_vtable_elem_location:
8582           attrs->at_vtable_elem_location = a;
8583           break;
8584         default:
8585           break;
8586         }
8587     }
8588 }
8589
8590 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8591
8592 static void
8593 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8594 {
8595   dw_die_ref c;
8596   dw_die_ref decl;
8597   struct checksum_attributes attrs;
8598
8599   CHECKSUM_ULEB128 ('D');
8600   CHECKSUM_ULEB128 (die->die_tag);
8601
8602   memset (&attrs, 0, sizeof (attrs));
8603
8604   decl = get_AT_ref (die, DW_AT_specification);
8605   if (decl != NULL)
8606     collect_checksum_attributes (&attrs, decl);
8607   collect_checksum_attributes (&attrs, die);
8608
8609   CHECKSUM_ATTR (attrs.at_name);
8610   CHECKSUM_ATTR (attrs.at_accessibility);
8611   CHECKSUM_ATTR (attrs.at_address_class);
8612   CHECKSUM_ATTR (attrs.at_allocated);
8613   CHECKSUM_ATTR (attrs.at_artificial);
8614   CHECKSUM_ATTR (attrs.at_associated);
8615   CHECKSUM_ATTR (attrs.at_binary_scale);
8616   CHECKSUM_ATTR (attrs.at_bit_offset);
8617   CHECKSUM_ATTR (attrs.at_bit_size);
8618   CHECKSUM_ATTR (attrs.at_bit_stride);
8619   CHECKSUM_ATTR (attrs.at_byte_size);
8620   CHECKSUM_ATTR (attrs.at_byte_stride);
8621   CHECKSUM_ATTR (attrs.at_const_value);
8622   CHECKSUM_ATTR (attrs.at_containing_type);
8623   CHECKSUM_ATTR (attrs.at_count);
8624   CHECKSUM_ATTR (attrs.at_data_location);
8625   CHECKSUM_ATTR (attrs.at_data_member_location);
8626   CHECKSUM_ATTR (attrs.at_decimal_scale);
8627   CHECKSUM_ATTR (attrs.at_decimal_sign);
8628   CHECKSUM_ATTR (attrs.at_default_value);
8629   CHECKSUM_ATTR (attrs.at_digit_count);
8630   CHECKSUM_ATTR (attrs.at_discr);
8631   CHECKSUM_ATTR (attrs.at_discr_list);
8632   CHECKSUM_ATTR (attrs.at_discr_value);
8633   CHECKSUM_ATTR (attrs.at_encoding);
8634   CHECKSUM_ATTR (attrs.at_endianity);
8635   CHECKSUM_ATTR (attrs.at_explicit);
8636   CHECKSUM_ATTR (attrs.at_is_optional);
8637   CHECKSUM_ATTR (attrs.at_location);
8638   CHECKSUM_ATTR (attrs.at_lower_bound);
8639   CHECKSUM_ATTR (attrs.at_mutable);
8640   CHECKSUM_ATTR (attrs.at_ordering);
8641   CHECKSUM_ATTR (attrs.at_picture_string);
8642   CHECKSUM_ATTR (attrs.at_prototyped);
8643   CHECKSUM_ATTR (attrs.at_small);
8644   CHECKSUM_ATTR (attrs.at_segment);
8645   CHECKSUM_ATTR (attrs.at_string_length);
8646   CHECKSUM_ATTR (attrs.at_threads_scaled);
8647   CHECKSUM_ATTR (attrs.at_upper_bound);
8648   CHECKSUM_ATTR (attrs.at_use_location);
8649   CHECKSUM_ATTR (attrs.at_use_UTF8);
8650   CHECKSUM_ATTR (attrs.at_variable_parameter);
8651   CHECKSUM_ATTR (attrs.at_virtuality);
8652   CHECKSUM_ATTR (attrs.at_visibility);
8653   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8654   CHECKSUM_ATTR (attrs.at_type);
8655   CHECKSUM_ATTR (attrs.at_friend);
8656
8657   /* Checksum the child DIEs, except for nested types and member functions.  */
8658   c = die->die_child;
8659   if (c) do {
8660     dw_attr_ref name_attr;
8661
8662     c = c->die_sib;
8663     name_attr = get_AT (c, DW_AT_name);
8664     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8665         && name_attr != NULL)
8666       {
8667         CHECKSUM_ULEB128 ('S');
8668         CHECKSUM_ULEB128 (c->die_tag);
8669         CHECKSUM_STRING (AT_string (name_attr));
8670       }
8671     else
8672       {
8673         /* Mark this DIE so it gets processed when unmarking.  */
8674         if (c->die_mark == 0)
8675           c->die_mark = -1;
8676         die_checksum_ordered (c, ctx, mark);
8677       }
8678   } while (c != die->die_child);
8679
8680   CHECKSUM_ULEB128 (0);
8681 }
8682
8683 #undef CHECKSUM
8684 #undef CHECKSUM_STRING
8685 #undef CHECKSUM_ATTR
8686 #undef CHECKSUM_LEB128
8687 #undef CHECKSUM_ULEB128
8688
8689 /* Generate the type signature for DIE.  This is computed by generating an
8690    MD5 checksum over the DIE's tag, its relevant attributes, and its
8691    children.  Attributes that are references to other DIEs are processed
8692    by recursion, using the MARK field to prevent infinite recursion.
8693    If the DIE is nested inside a namespace or another type, we also
8694    need to include that context in the signature.  The lower 64 bits
8695    of the resulting MD5 checksum comprise the signature.  */
8696
8697 static void
8698 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8699 {
8700   int mark;
8701   const char *name;
8702   unsigned char checksum[16];
8703   struct md5_ctx ctx;
8704   dw_die_ref decl;
8705
8706   name = get_AT_string (die, DW_AT_name);
8707   decl = get_AT_ref (die, DW_AT_specification);
8708
8709   /* First, compute a signature for just the type name (and its surrounding
8710      context, if any.  This is stored in the type unit DIE for link-time
8711      ODR (one-definition rule) checking.  */
8712
8713   if (is_cxx() && name != NULL)
8714     {
8715       md5_init_ctx (&ctx);
8716
8717       /* Checksum the names of surrounding namespaces and structures.  */
8718       if (decl != NULL && decl->die_parent != NULL)
8719         checksum_die_context (decl->die_parent, &ctx);
8720
8721       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8722       md5_process_bytes (name, strlen (name) + 1, &ctx);
8723       md5_finish_ctx (&ctx, checksum);
8724
8725       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8726     }
8727
8728   /* Next, compute the complete type signature.  */
8729
8730   md5_init_ctx (&ctx);
8731   mark = 1;
8732   die->die_mark = mark;
8733
8734   /* Checksum the names of surrounding namespaces and structures.  */
8735   if (decl != NULL && decl->die_parent != NULL)
8736     checksum_die_context (decl->die_parent, &ctx);
8737
8738   /* Checksum the DIE and its children.  */
8739   die_checksum_ordered (die, &ctx, &mark);
8740   unmark_all_dies (die);
8741   md5_finish_ctx (&ctx, checksum);
8742
8743   /* Store the signature in the type node and link the type DIE and the
8744      type node together.  */
8745   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8746           DWARF_TYPE_SIGNATURE_SIZE);
8747   die->die_id.die_type_node = type_node;
8748   type_node->type_die = die;
8749
8750   /* If the DIE is a specification, link its declaration to the type node
8751      as well.  */
8752   if (decl != NULL)
8753     decl->die_id.die_type_node = type_node;
8754 }
8755
8756 /* Do the location expressions look same?  */
8757 static inline int
8758 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8759 {
8760   return loc1->dw_loc_opc == loc2->dw_loc_opc
8761          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8762          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8763 }
8764
8765 /* Do the values look the same?  */
8766 static int
8767 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8768 {
8769   dw_loc_descr_ref loc1, loc2;
8770   rtx r1, r2;
8771
8772   if (v1->val_class != v2->val_class)
8773     return 0;
8774
8775   switch (v1->val_class)
8776     {
8777     case dw_val_class_const:
8778       return v1->v.val_int == v2->v.val_int;
8779     case dw_val_class_unsigned_const:
8780       return v1->v.val_unsigned == v2->v.val_unsigned;
8781     case dw_val_class_const_double:
8782       return v1->v.val_double.high == v2->v.val_double.high
8783              && v1->v.val_double.low == v2->v.val_double.low;
8784     case dw_val_class_vec:
8785       if (v1->v.val_vec.length != v2->v.val_vec.length
8786           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8787         return 0;
8788       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8789                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8790         return 0;
8791       return 1;
8792     case dw_val_class_flag:
8793       return v1->v.val_flag == v2->v.val_flag;
8794     case dw_val_class_str:
8795       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8796
8797     case dw_val_class_addr:
8798       r1 = v1->v.val_addr;
8799       r2 = v2->v.val_addr;
8800       if (GET_CODE (r1) != GET_CODE (r2))
8801         return 0;
8802       return !rtx_equal_p (r1, r2);
8803
8804     case dw_val_class_offset:
8805       return v1->v.val_offset == v2->v.val_offset;
8806
8807     case dw_val_class_loc:
8808       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8809            loc1 && loc2;
8810            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8811         if (!same_loc_p (loc1, loc2, mark))
8812           return 0;
8813       return !loc1 && !loc2;
8814
8815     case dw_val_class_die_ref:
8816       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8817
8818     case dw_val_class_fde_ref:
8819     case dw_val_class_lbl_id:
8820     case dw_val_class_lineptr:
8821     case dw_val_class_macptr:
8822       return 1;
8823
8824     case dw_val_class_file:
8825       return v1->v.val_file == v2->v.val_file;
8826
8827     case dw_val_class_data8:
8828       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8829
8830     default:
8831       return 1;
8832     }
8833 }
8834
8835 /* Do the attributes look the same?  */
8836
8837 static int
8838 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8839 {
8840   if (at1->dw_attr != at2->dw_attr)
8841     return 0;
8842
8843   /* We don't care that this was compiled with a different compiler
8844      snapshot; if the output is the same, that's what matters. */
8845   if (at1->dw_attr == DW_AT_producer)
8846     return 1;
8847
8848   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8849 }
8850
8851 /* Do the dies look the same?  */
8852
8853 static int
8854 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8855 {
8856   dw_die_ref c1, c2;
8857   dw_attr_ref a1;
8858   unsigned ix;
8859
8860   /* To avoid infinite recursion.  */
8861   if (die1->die_mark)
8862     return die1->die_mark == die2->die_mark;
8863   die1->die_mark = die2->die_mark = ++(*mark);
8864
8865   if (die1->die_tag != die2->die_tag)
8866     return 0;
8867
8868   if (VEC_length (dw_attr_node, die1->die_attr)
8869       != VEC_length (dw_attr_node, die2->die_attr))
8870     return 0;
8871
8872   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8873     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8874       return 0;
8875
8876   c1 = die1->die_child;
8877   c2 = die2->die_child;
8878   if (! c1)
8879     {
8880       if (c2)
8881         return 0;
8882     }
8883   else
8884     for (;;)
8885       {
8886         if (!same_die_p (c1, c2, mark))
8887           return 0;
8888         c1 = c1->die_sib;
8889         c2 = c2->die_sib;
8890         if (c1 == die1->die_child)
8891           {
8892             if (c2 == die2->die_child)
8893               break;
8894             else
8895               return 0;
8896           }
8897     }
8898
8899   return 1;
8900 }
8901
8902 /* Do the dies look the same?  Wrapper around same_die_p.  */
8903
8904 static int
8905 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8906 {
8907   int mark = 0;
8908   int ret = same_die_p (die1, die2, &mark);
8909
8910   unmark_all_dies (die1);
8911   unmark_all_dies (die2);
8912
8913   return ret;
8914 }
8915
8916 /* The prefix to attach to symbols on DIEs in the current comdat debug
8917    info section.  */
8918 static char *comdat_symbol_id;
8919
8920 /* The index of the current symbol within the current comdat CU.  */
8921 static unsigned int comdat_symbol_number;
8922
8923 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8924    children, and set comdat_symbol_id accordingly.  */
8925
8926 static void
8927 compute_section_prefix (dw_die_ref unit_die)
8928 {
8929   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8930   const char *base = die_name ? lbasename (die_name) : "anonymous";
8931   char *name = XALLOCAVEC (char, strlen (base) + 64);
8932   char *p;
8933   int i, mark;
8934   unsigned char checksum[16];
8935   struct md5_ctx ctx;
8936
8937   /* Compute the checksum of the DIE, then append part of it as hex digits to
8938      the name filename of the unit.  */
8939
8940   md5_init_ctx (&ctx);
8941   mark = 0;
8942   die_checksum (unit_die, &ctx, &mark);
8943   unmark_all_dies (unit_die);
8944   md5_finish_ctx (&ctx, checksum);
8945
8946   sprintf (name, "%s.", base);
8947   clean_symbol_name (name);
8948
8949   p = name + strlen (name);
8950   for (i = 0; i < 4; i++)
8951     {
8952       sprintf (p, "%.2x", checksum[i]);
8953       p += 2;
8954     }
8955
8956   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8957   comdat_symbol_number = 0;
8958 }
8959
8960 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8961
8962 static int
8963 is_type_die (dw_die_ref die)
8964 {
8965   switch (die->die_tag)
8966     {
8967     case DW_TAG_array_type:
8968     case DW_TAG_class_type:
8969     case DW_TAG_interface_type:
8970     case DW_TAG_enumeration_type:
8971     case DW_TAG_pointer_type:
8972     case DW_TAG_reference_type:
8973     case DW_TAG_rvalue_reference_type:
8974     case DW_TAG_string_type:
8975     case DW_TAG_structure_type:
8976     case DW_TAG_subroutine_type:
8977     case DW_TAG_union_type:
8978     case DW_TAG_ptr_to_member_type:
8979     case DW_TAG_set_type:
8980     case DW_TAG_subrange_type:
8981     case DW_TAG_base_type:
8982     case DW_TAG_const_type:
8983     case DW_TAG_file_type:
8984     case DW_TAG_packed_type:
8985     case DW_TAG_volatile_type:
8986     case DW_TAG_typedef:
8987       return 1;
8988     default:
8989       return 0;
8990     }
8991 }
8992
8993 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
8994    Basically, we want to choose the bits that are likely to be shared between
8995    compilations (types) and leave out the bits that are specific to individual
8996    compilations (functions).  */
8997
8998 static int
8999 is_comdat_die (dw_die_ref c)
9000 {
9001   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9002      we do for stabs.  The advantage is a greater likelihood of sharing between
9003      objects that don't include headers in the same order (and therefore would
9004      put the base types in a different comdat).  jason 8/28/00 */
9005
9006   if (c->die_tag == DW_TAG_base_type)
9007     return 0;
9008
9009   if (c->die_tag == DW_TAG_pointer_type
9010       || c->die_tag == DW_TAG_reference_type
9011       || c->die_tag == DW_TAG_rvalue_reference_type
9012       || c->die_tag == DW_TAG_const_type
9013       || c->die_tag == DW_TAG_volatile_type)
9014     {
9015       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9016
9017       return t ? is_comdat_die (t) : 0;
9018     }
9019
9020   return is_type_die (c);
9021 }
9022
9023 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9024    compilation unit.  */
9025
9026 static int
9027 is_symbol_die (dw_die_ref c)
9028 {
9029   return (is_type_die (c)
9030           || is_declaration_die (c)
9031           || c->die_tag == DW_TAG_namespace
9032           || c->die_tag == DW_TAG_module);
9033 }
9034
9035 static char *
9036 gen_internal_sym (const char *prefix)
9037 {
9038   char buf[256];
9039
9040   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9041   return xstrdup (buf);
9042 }
9043
9044 /* Assign symbols to all worthy DIEs under DIE.  */
9045
9046 static void
9047 assign_symbol_names (dw_die_ref die)
9048 {
9049   dw_die_ref c;
9050
9051   if (is_symbol_die (die))
9052     {
9053       if (comdat_symbol_id)
9054         {
9055           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9056
9057           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9058                    comdat_symbol_id, comdat_symbol_number++);
9059           die->die_id.die_symbol = xstrdup (p);
9060         }
9061       else
9062         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9063     }
9064
9065   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9066 }
9067
9068 struct cu_hash_table_entry
9069 {
9070   dw_die_ref cu;
9071   unsigned min_comdat_num, max_comdat_num;
9072   struct cu_hash_table_entry *next;
9073 };
9074
9075 /* Routines to manipulate hash table of CUs.  */
9076 static hashval_t
9077 htab_cu_hash (const void *of)
9078 {
9079   const struct cu_hash_table_entry *const entry =
9080     (const struct cu_hash_table_entry *) of;
9081
9082   return htab_hash_string (entry->cu->die_id.die_symbol);
9083 }
9084
9085 static int
9086 htab_cu_eq (const void *of1, const void *of2)
9087 {
9088   const struct cu_hash_table_entry *const entry1 =
9089     (const struct cu_hash_table_entry *) of1;
9090   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9091
9092   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9093 }
9094
9095 static void
9096 htab_cu_del (void *what)
9097 {
9098   struct cu_hash_table_entry *next,
9099     *entry = (struct cu_hash_table_entry *) what;
9100
9101   while (entry)
9102     {
9103       next = entry->next;
9104       free (entry);
9105       entry = next;
9106     }
9107 }
9108
9109 /* Check whether we have already seen this CU and set up SYM_NUM
9110    accordingly.  */
9111 static int
9112 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9113 {
9114   struct cu_hash_table_entry dummy;
9115   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9116
9117   dummy.max_comdat_num = 0;
9118
9119   slot = (struct cu_hash_table_entry **)
9120     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9121         INSERT);
9122   entry = *slot;
9123
9124   for (; entry; last = entry, entry = entry->next)
9125     {
9126       if (same_die_p_wrap (cu, entry->cu))
9127         break;
9128     }
9129
9130   if (entry)
9131     {
9132       *sym_num = entry->min_comdat_num;
9133       return 1;
9134     }
9135
9136   entry = XCNEW (struct cu_hash_table_entry);
9137   entry->cu = cu;
9138   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9139   entry->next = *slot;
9140   *slot = entry;
9141
9142   return 0;
9143 }
9144
9145 /* Record SYM_NUM to record of CU in HTABLE.  */
9146 static void
9147 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9148 {
9149   struct cu_hash_table_entry **slot, *entry;
9150
9151   slot = (struct cu_hash_table_entry **)
9152     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9153         NO_INSERT);
9154   entry = *slot;
9155
9156   entry->max_comdat_num = sym_num;
9157 }
9158
9159 /* Traverse the DIE (which is always comp_unit_die), and set up
9160    additional compilation units for each of the include files we see
9161    bracketed by BINCL/EINCL.  */
9162
9163 static void
9164 break_out_includes (dw_die_ref die)
9165 {
9166   dw_die_ref c;
9167   dw_die_ref unit = NULL;
9168   limbo_die_node *node, **pnode;
9169   htab_t cu_hash_table;
9170
9171   c = die->die_child;
9172   if (c) do {
9173     dw_die_ref prev = c;
9174     c = c->die_sib;
9175     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9176            || (unit && is_comdat_die (c)))
9177       {
9178         dw_die_ref next = c->die_sib;
9179
9180         /* This DIE is for a secondary CU; remove it from the main one.  */
9181         remove_child_with_prev (c, prev);
9182
9183         if (c->die_tag == DW_TAG_GNU_BINCL)
9184           unit = push_new_compile_unit (unit, c);
9185         else if (c->die_tag == DW_TAG_GNU_EINCL)
9186           unit = pop_compile_unit (unit);
9187         else
9188           add_child_die (unit, c);
9189         c = next;
9190         if (c == die->die_child)
9191           break;
9192       }
9193   } while (c != die->die_child);
9194
9195 #if 0
9196   /* We can only use this in debugging, since the frontend doesn't check
9197      to make sure that we leave every include file we enter.  */
9198   gcc_assert (!unit);
9199 #endif
9200
9201   assign_symbol_names (die);
9202   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9203   for (node = limbo_die_list, pnode = &limbo_die_list;
9204        node;
9205        node = node->next)
9206     {
9207       int is_dupl;
9208
9209       compute_section_prefix (node->die);
9210       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9211                         &comdat_symbol_number);
9212       assign_symbol_names (node->die);
9213       if (is_dupl)
9214         *pnode = node->next;
9215       else
9216         {
9217           pnode = &node->next;
9218           record_comdat_symbol_number (node->die, cu_hash_table,
9219                 comdat_symbol_number);
9220         }
9221     }
9222   htab_delete (cu_hash_table);
9223 }
9224
9225 /* Return non-zero if this DIE is a declaration.  */
9226
9227 static int
9228 is_declaration_die (dw_die_ref die)
9229 {
9230   dw_attr_ref a;
9231   unsigned ix;
9232
9233   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9234     if (a->dw_attr == DW_AT_declaration)
9235       return 1;
9236
9237   return 0;
9238 }
9239
9240 /* Return non-zero if this is a type DIE that should be moved to a
9241    COMDAT .debug_types section.  */
9242
9243 static int
9244 should_move_die_to_comdat (dw_die_ref die)
9245 {
9246   switch (die->die_tag)
9247     {
9248     case DW_TAG_class_type:
9249     case DW_TAG_structure_type:
9250     case DW_TAG_enumeration_type:
9251     case DW_TAG_union_type:
9252       /* Don't move declarations or inlined instances.  */
9253       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9254         return 0;
9255       return 1;
9256     case DW_TAG_array_type:
9257     case DW_TAG_interface_type:
9258     case DW_TAG_pointer_type:
9259     case DW_TAG_reference_type:
9260     case DW_TAG_rvalue_reference_type:
9261     case DW_TAG_string_type:
9262     case DW_TAG_subroutine_type:
9263     case DW_TAG_ptr_to_member_type:
9264     case DW_TAG_set_type:
9265     case DW_TAG_subrange_type:
9266     case DW_TAG_base_type:
9267     case DW_TAG_const_type:
9268     case DW_TAG_file_type:
9269     case DW_TAG_packed_type:
9270     case DW_TAG_volatile_type:
9271     case DW_TAG_typedef:
9272     default:
9273       return 0;
9274     }
9275 }
9276
9277 /* Make a clone of DIE.  */
9278
9279 static dw_die_ref
9280 clone_die (dw_die_ref die)
9281 {
9282   dw_die_ref clone;
9283   dw_attr_ref a;
9284   unsigned ix;
9285
9286   clone = GGC_CNEW (die_node);
9287   clone->die_tag = die->die_tag;
9288
9289   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9290     add_dwarf_attr (clone, a);
9291
9292   return clone;
9293 }
9294
9295 /* Make a clone of the tree rooted at DIE.  */
9296
9297 static dw_die_ref
9298 clone_tree (dw_die_ref die)
9299 {
9300   dw_die_ref c;
9301   dw_die_ref clone = clone_die (die);
9302
9303   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9304
9305   return clone;
9306 }
9307
9308 /* Make a clone of DIE as a declaration.  */
9309
9310 static dw_die_ref
9311 clone_as_declaration (dw_die_ref die)
9312 {
9313   dw_die_ref clone;
9314   dw_die_ref decl;
9315   dw_attr_ref a;
9316   unsigned ix;
9317
9318   /* If the DIE is already a declaration, just clone it.  */
9319   if (is_declaration_die (die))
9320     return clone_die (die);
9321
9322   /* If the DIE is a specification, just clone its declaration DIE.  */
9323   decl = get_AT_ref (die, DW_AT_specification);
9324   if (decl != NULL)
9325     return clone_die (decl);
9326
9327   clone = GGC_CNEW (die_node);
9328   clone->die_tag = die->die_tag;
9329
9330   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9331     {
9332       /* We don't want to copy over all attributes.
9333          For example we don't want DW_AT_byte_size because otherwise we will no
9334          longer have a declaration and GDB will treat it as a definition.  */
9335
9336       switch (a->dw_attr)
9337         {
9338         case DW_AT_artificial:
9339         case DW_AT_containing_type:
9340         case DW_AT_external:
9341         case DW_AT_name:
9342         case DW_AT_type:
9343         case DW_AT_virtuality:
9344         case DW_AT_linkage_name:
9345         case DW_AT_MIPS_linkage_name:
9346           add_dwarf_attr (clone, a);
9347           break;
9348         case DW_AT_byte_size:
9349         default:
9350           break;
9351         }
9352     }
9353
9354   if (die->die_id.die_type_node)
9355     add_AT_die_ref (clone, DW_AT_signature, die);
9356
9357   add_AT_flag (clone, DW_AT_declaration, 1);
9358   return clone;
9359 }
9360
9361 /* Copy the declaration context to the new compile unit DIE.  This includes
9362    any surrounding namespace or type declarations.  If the DIE has an
9363    AT_specification attribute, it also includes attributes and children
9364    attached to the specification.  */
9365
9366 static void
9367 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9368 {
9369   dw_die_ref decl;
9370   dw_die_ref new_decl;
9371
9372   decl = get_AT_ref (die, DW_AT_specification);
9373   if (decl == NULL)
9374     decl = die;
9375   else
9376     {
9377       unsigned ix;
9378       dw_die_ref c;
9379       dw_attr_ref a;
9380
9381       /* Copy the type node pointer from the new DIE to the original
9382          declaration DIE so we can forward references later.  */
9383       decl->die_id.die_type_node = die->die_id.die_type_node;
9384
9385       remove_AT (die, DW_AT_specification);
9386
9387       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9388         {
9389           if (a->dw_attr != DW_AT_name
9390               && a->dw_attr != DW_AT_declaration
9391               && a->dw_attr != DW_AT_external)
9392             add_dwarf_attr (die, a);
9393         }
9394
9395       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9396     }
9397
9398   if (decl->die_parent != NULL
9399       && decl->die_parent->die_tag != DW_TAG_compile_unit
9400       && decl->die_parent->die_tag != DW_TAG_type_unit)
9401     {
9402       new_decl = copy_ancestor_tree (unit, decl, NULL);
9403       if (new_decl != NULL)
9404         {
9405           remove_AT (new_decl, DW_AT_signature);
9406           add_AT_specification (die, new_decl);
9407         }
9408     }
9409 }
9410
9411 /* Generate the skeleton ancestor tree for the given NODE, then clone
9412    the DIE and add the clone into the tree.  */
9413
9414 static void
9415 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9416 {
9417   if (node->new_die != NULL)
9418     return;
9419
9420   node->new_die = clone_as_declaration (node->old_die);
9421
9422   if (node->parent != NULL)
9423     {
9424       generate_skeleton_ancestor_tree (node->parent);
9425       add_child_die (node->parent->new_die, node->new_die);
9426     }
9427 }
9428
9429 /* Generate a skeleton tree of DIEs containing any declarations that are
9430    found in the original tree.  We traverse the tree looking for declaration
9431    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9432
9433 static void
9434 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9435 {
9436   skeleton_chain_node node;
9437   dw_die_ref c;
9438   dw_die_ref first;
9439   dw_die_ref prev = NULL;
9440   dw_die_ref next = NULL;
9441
9442   node.parent = parent;
9443
9444   first = c = parent->old_die->die_child;
9445   if (c)
9446     next = c->die_sib;
9447   if (c) do {
9448     if (prev == NULL || prev->die_sib == c)
9449       prev = c;
9450     c = next;
9451     next = (c == first ? NULL : c->die_sib);
9452     node.old_die = c;
9453     node.new_die = NULL;
9454     if (is_declaration_die (c))
9455       {
9456         /* Clone the existing DIE, move the original to the skeleton
9457            tree (which is in the main CU), and put the clone, with
9458            all the original's children, where the original came from.  */
9459         dw_die_ref clone = clone_die (c);
9460         move_all_children (c, clone);
9461
9462         replace_child (c, clone, prev);
9463         generate_skeleton_ancestor_tree (parent);
9464         add_child_die (parent->new_die, c);
9465         node.new_die = c;
9466         c = clone;
9467       }
9468     generate_skeleton_bottom_up (&node);
9469   } while (next != NULL);
9470 }
9471
9472 /* Wrapper function for generate_skeleton_bottom_up.  */
9473
9474 static dw_die_ref
9475 generate_skeleton (dw_die_ref die)
9476 {
9477   skeleton_chain_node node;
9478
9479   node.old_die = die;
9480   node.new_die = NULL;
9481   node.parent = NULL;
9482
9483   /* If this type definition is nested inside another type,
9484      always leave at least a declaration in its place.  */
9485   if (die->die_parent != NULL && is_type_die (die->die_parent))
9486     node.new_die = clone_as_declaration (die);
9487
9488   generate_skeleton_bottom_up (&node);
9489   return node.new_die;
9490 }
9491
9492 /* Remove the DIE from its parent, possibly replacing it with a cloned
9493    declaration.  The original DIE will be moved to a new compile unit
9494    so that existing references to it follow it to the new location.  If
9495    any of the original DIE's descendants is a declaration, we need to
9496    replace the original DIE with a skeleton tree and move the
9497    declarations back into the skeleton tree.  */
9498
9499 static dw_die_ref
9500 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9501 {
9502   dw_die_ref skeleton;
9503
9504   skeleton = generate_skeleton (child);
9505   if (skeleton == NULL)
9506     remove_child_with_prev (child, prev);
9507   else
9508     {
9509       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9510       replace_child (child, skeleton, prev);
9511     }
9512
9513   return skeleton;
9514 }
9515
9516 /* Traverse the DIE and set up additional .debug_types sections for each
9517    type worthy of being placed in a COMDAT section.  */
9518
9519 static void
9520 break_out_comdat_types (dw_die_ref die)
9521 {
9522   dw_die_ref c;
9523   dw_die_ref first;
9524   dw_die_ref prev = NULL;
9525   dw_die_ref next = NULL;
9526   dw_die_ref unit = NULL;
9527
9528   first = c = die->die_child;
9529   if (c)
9530     next = c->die_sib;
9531   if (c) do {
9532     if (prev == NULL || prev->die_sib == c)
9533       prev = c;
9534     c = next;
9535     next = (c == first ? NULL : c->die_sib);
9536     if (should_move_die_to_comdat (c))
9537       {
9538         dw_die_ref replacement;
9539         comdat_type_node_ref type_node;
9540
9541         /* Create a new type unit DIE as the root for the new tree, and
9542            add it to the list of comdat types.  */
9543         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9544         add_AT_unsigned (unit, DW_AT_language,
9545                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9546         type_node = GGC_CNEW (comdat_type_node);
9547         type_node->root_die = unit;
9548         type_node->next = comdat_type_list;
9549         comdat_type_list = type_node;
9550
9551         /* Generate the type signature.  */
9552         generate_type_signature (c, type_node);
9553
9554         /* Copy the declaration context, attributes, and children of the
9555            declaration into the new compile unit DIE.  */
9556         copy_declaration_context (unit, c);
9557
9558         /* Remove this DIE from the main CU.  */
9559         replacement = remove_child_or_replace_with_skeleton (c, prev);
9560
9561         /* Break out nested types into their own type units.  */
9562         break_out_comdat_types (c);
9563
9564         /* Add the DIE to the new compunit.  */
9565         add_child_die (unit, c);
9566
9567         if (replacement != NULL)
9568           c = replacement;
9569       }
9570     else if (c->die_tag == DW_TAG_namespace
9571              || c->die_tag == DW_TAG_class_type
9572              || c->die_tag == DW_TAG_structure_type
9573              || c->die_tag == DW_TAG_union_type)
9574       {
9575         /* Look for nested types that can be broken out.  */
9576         break_out_comdat_types (c);
9577       }
9578   } while (next != NULL);
9579 }
9580
9581 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9582
9583 struct decl_table_entry
9584 {
9585   dw_die_ref orig;
9586   dw_die_ref copy;
9587 };
9588
9589 /* Routines to manipulate hash table of copied declarations.  */
9590
9591 static hashval_t
9592 htab_decl_hash (const void *of)
9593 {
9594   const struct decl_table_entry *const entry =
9595     (const struct decl_table_entry *) of;
9596
9597   return htab_hash_pointer (entry->orig);
9598 }
9599
9600 static int
9601 htab_decl_eq (const void *of1, const void *of2)
9602 {
9603   const struct decl_table_entry *const entry1 =
9604     (const struct decl_table_entry *) of1;
9605   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9606
9607   return entry1->orig == entry2;
9608 }
9609
9610 static void
9611 htab_decl_del (void *what)
9612 {
9613   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9614
9615   free (entry);
9616 }
9617
9618 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9619    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9620    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9621    to check if the ancestor has already been copied into UNIT.  */
9622
9623 static dw_die_ref
9624 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9625 {
9626   dw_die_ref parent = die->die_parent;
9627   dw_die_ref new_parent = unit;
9628   dw_die_ref copy;
9629   void **slot = NULL;
9630   struct decl_table_entry *entry = NULL;
9631
9632   if (decl_table)
9633     {
9634       /* Check if the entry has already been copied to UNIT.  */
9635       slot = htab_find_slot_with_hash (decl_table, die,
9636                                        htab_hash_pointer (die), INSERT);
9637       if (*slot != HTAB_EMPTY_ENTRY)
9638         {
9639           entry = (struct decl_table_entry *) *slot;
9640           return entry->copy;
9641         }
9642
9643       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9644       entry = XCNEW (struct decl_table_entry);
9645       entry->orig = die;
9646       entry->copy = NULL;
9647       *slot = entry;
9648     }
9649
9650   if (parent != NULL)
9651     {
9652       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9653       if (spec != NULL)
9654         parent = spec;
9655       if (parent->die_tag != DW_TAG_compile_unit
9656           && parent->die_tag != DW_TAG_type_unit)
9657         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9658     }
9659
9660   copy = clone_as_declaration (die);
9661   add_child_die (new_parent, copy);
9662
9663   if (decl_table != NULL)
9664     {
9665       /* Make sure the copy is marked as part of the type unit.  */
9666       copy->die_mark = 1;
9667       /* Record the pointer to the copy.  */
9668       entry->copy = copy;
9669     }
9670
9671   return copy;
9672 }
9673
9674 /* Walk the DIE and its children, looking for references to incomplete
9675    or trivial types that are unmarked (i.e., that are not in the current
9676    type_unit).  */
9677
9678 static void
9679 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9680 {
9681   dw_die_ref c;
9682   dw_attr_ref a;
9683   unsigned ix;
9684
9685   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9686     {
9687       if (AT_class (a) == dw_val_class_die_ref)
9688         {
9689           dw_die_ref targ = AT_ref (a);
9690           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9691           void **slot;
9692           struct decl_table_entry *entry;
9693
9694           if (targ->die_mark != 0 || type_node != NULL)
9695             continue;
9696
9697           slot = htab_find_slot_with_hash (decl_table, targ,
9698                                            htab_hash_pointer (targ), INSERT);
9699
9700           if (*slot != HTAB_EMPTY_ENTRY)
9701             {
9702               /* TARG has already been copied, so we just need to
9703                  modify the reference to point to the copy.  */
9704               entry = (struct decl_table_entry *) *slot;
9705               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9706             }
9707           else
9708             {
9709               dw_die_ref parent = unit;
9710               dw_die_ref copy = clone_tree (targ);
9711
9712               /* Make sure the cloned tree is marked as part of the
9713                  type unit.  */
9714               mark_dies (copy);
9715
9716               /* Record in DECL_TABLE that TARG has been copied.
9717                  Need to do this now, before the recursive call,
9718                  because DECL_TABLE may be expanded and SLOT
9719                  would no longer be a valid pointer.  */
9720               entry = XCNEW (struct decl_table_entry);
9721               entry->orig = targ;
9722               entry->copy = copy;
9723               *slot = entry;
9724
9725               /* If TARG has surrounding context, copy its ancestor tree
9726                  into the new type unit.  */
9727               if (targ->die_parent != NULL
9728                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9729                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9730                 parent = copy_ancestor_tree (unit, targ->die_parent,
9731                                              decl_table);
9732
9733               add_child_die (parent, copy);
9734               a->dw_attr_val.v.val_die_ref.die = copy;
9735
9736               /* Make sure the newly-copied DIE is walked.  If it was
9737                  installed in a previously-added context, it won't
9738                  get visited otherwise.  */
9739               if (parent != unit)
9740                 copy_decls_walk (unit, parent, decl_table);
9741             }
9742         }
9743     }
9744
9745   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9746 }
9747
9748 /* Copy declarations for "unworthy" types into the new comdat section.
9749    Incomplete types, modified types, and certain other types aren't broken
9750    out into comdat sections of their own, so they don't have a signature,
9751    and we need to copy the declaration into the same section so that we
9752    don't have an external reference.  */
9753
9754 static void
9755 copy_decls_for_unworthy_types (dw_die_ref unit)
9756 {
9757   htab_t decl_table;
9758
9759   mark_dies (unit);
9760   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9761   copy_decls_walk (unit, unit, decl_table);
9762   htab_delete (decl_table);
9763   unmark_dies (unit);
9764 }
9765
9766 /* Traverse the DIE and add a sibling attribute if it may have the
9767    effect of speeding up access to siblings.  To save some space,
9768    avoid generating sibling attributes for DIE's without children.  */
9769
9770 static void
9771 add_sibling_attributes (dw_die_ref die)
9772 {
9773   dw_die_ref c;
9774
9775   if (! die->die_child)
9776     return;
9777
9778   if (die->die_parent && die != die->die_parent->die_child)
9779     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9780
9781   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9782 }
9783
9784 /* Output all location lists for the DIE and its children.  */
9785
9786 static void
9787 output_location_lists (dw_die_ref die)
9788 {
9789   dw_die_ref c;
9790   dw_attr_ref a;
9791   unsigned ix;
9792
9793   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9794     if (AT_class (a) == dw_val_class_loc_list)
9795       output_loc_list (AT_loc_list (a));
9796
9797   FOR_EACH_CHILD (die, c, output_location_lists (c));
9798 }
9799
9800 /* The format of each DIE (and its attribute value pairs) is encoded in an
9801    abbreviation table.  This routine builds the abbreviation table and assigns
9802    a unique abbreviation id for each abbreviation entry.  The children of each
9803    die are visited recursively.  */
9804
9805 static void
9806 build_abbrev_table (dw_die_ref die)
9807 {
9808   unsigned long abbrev_id;
9809   unsigned int n_alloc;
9810   dw_die_ref c;
9811   dw_attr_ref a;
9812   unsigned ix;
9813
9814   /* Scan the DIE references, and mark as external any that refer to
9815      DIEs from other CUs (i.e. those which are not marked).  */
9816   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9817     if (AT_class (a) == dw_val_class_die_ref
9818         && AT_ref (a)->die_mark == 0)
9819       {
9820         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9821         set_AT_ref_external (a, 1);
9822       }
9823
9824   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9825     {
9826       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9827       dw_attr_ref die_a, abbrev_a;
9828       unsigned ix;
9829       bool ok = true;
9830
9831       if (abbrev->die_tag != die->die_tag)
9832         continue;
9833       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9834         continue;
9835
9836       if (VEC_length (dw_attr_node, abbrev->die_attr)
9837           != VEC_length (dw_attr_node, die->die_attr))
9838         continue;
9839
9840       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9841         {
9842           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9843           if ((abbrev_a->dw_attr != die_a->dw_attr)
9844               || (value_format (abbrev_a) != value_format (die_a)))
9845             {
9846               ok = false;
9847               break;
9848             }
9849         }
9850       if (ok)
9851         break;
9852     }
9853
9854   if (abbrev_id >= abbrev_die_table_in_use)
9855     {
9856       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9857         {
9858           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9859           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9860                                             n_alloc);
9861
9862           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9863                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9864           abbrev_die_table_allocated = n_alloc;
9865         }
9866
9867       ++abbrev_die_table_in_use;
9868       abbrev_die_table[abbrev_id] = die;
9869     }
9870
9871   die->die_abbrev = abbrev_id;
9872   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9873 }
9874 \f
9875 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9876
9877 static int
9878 constant_size (unsigned HOST_WIDE_INT value)
9879 {
9880   int log;
9881
9882   if (value == 0)
9883     log = 0;
9884   else
9885     log = floor_log2 (value);
9886
9887   log = log / 8;
9888   log = 1 << (floor_log2 (log) + 1);
9889
9890   return log;
9891 }
9892
9893 /* Return the size of a DIE as it is represented in the
9894    .debug_info section.  */
9895
9896 static unsigned long
9897 size_of_die (dw_die_ref die)
9898 {
9899   unsigned long size = 0;
9900   dw_attr_ref a;
9901   unsigned ix;
9902
9903   size += size_of_uleb128 (die->die_abbrev);
9904   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9905     {
9906       switch (AT_class (a))
9907         {
9908         case dw_val_class_addr:
9909           size += DWARF2_ADDR_SIZE;
9910           break;
9911         case dw_val_class_offset:
9912           size += DWARF_OFFSET_SIZE;
9913           break;
9914         case dw_val_class_loc:
9915           {
9916             unsigned long lsize = size_of_locs (AT_loc (a));
9917
9918             /* Block length.  */
9919             if (dwarf_version >= 4)
9920               size += size_of_uleb128 (lsize);
9921             else
9922               size += constant_size (lsize);
9923             size += lsize;
9924           }
9925           break;
9926         case dw_val_class_loc_list:
9927           size += DWARF_OFFSET_SIZE;
9928           break;
9929         case dw_val_class_range_list:
9930           size += DWARF_OFFSET_SIZE;
9931           break;
9932         case dw_val_class_const:
9933           size += size_of_sleb128 (AT_int (a));
9934           break;
9935         case dw_val_class_unsigned_const:
9936           size += constant_size (AT_unsigned (a));
9937           break;
9938         case dw_val_class_const_double:
9939           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9940           if (HOST_BITS_PER_WIDE_INT >= 64)
9941             size++; /* block */
9942           break;
9943         case dw_val_class_vec:
9944           size += constant_size (a->dw_attr_val.v.val_vec.length
9945                                  * a->dw_attr_val.v.val_vec.elt_size)
9946                   + a->dw_attr_val.v.val_vec.length
9947                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9948           break;
9949         case dw_val_class_flag:
9950           if (dwarf_version >= 4)
9951             /* Currently all add_AT_flag calls pass in 1 as last argument,
9952                so DW_FORM_flag_present can be used.  If that ever changes,
9953                we'll need to use DW_FORM_flag and have some optimization
9954                in build_abbrev_table that will change those to
9955                DW_FORM_flag_present if it is set to 1 in all DIEs using
9956                the same abbrev entry.  */
9957             gcc_assert (a->dw_attr_val.v.val_flag == 1);
9958           else
9959             size += 1;
9960           break;
9961         case dw_val_class_die_ref:
9962           if (AT_ref_external (a))
9963             {
9964               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9965                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9966                  is sized by target address length, whereas in DWARF3
9967                  it's always sized as an offset.  */
9968               if (dwarf_version >= 4)
9969                 size += DWARF_TYPE_SIGNATURE_SIZE;
9970               else if (dwarf_version == 2)
9971                 size += DWARF2_ADDR_SIZE;
9972               else
9973                 size += DWARF_OFFSET_SIZE;
9974             }
9975           else
9976             size += DWARF_OFFSET_SIZE;
9977           break;
9978         case dw_val_class_fde_ref:
9979           size += DWARF_OFFSET_SIZE;
9980           break;
9981         case dw_val_class_lbl_id:
9982           size += DWARF2_ADDR_SIZE;
9983           break;
9984         case dw_val_class_lineptr:
9985         case dw_val_class_macptr:
9986           size += DWARF_OFFSET_SIZE;
9987           break;
9988         case dw_val_class_str:
9989           if (AT_string_form (a) == DW_FORM_strp)
9990             size += DWARF_OFFSET_SIZE;
9991           else
9992             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9993           break;
9994         case dw_val_class_file:
9995           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
9996           break;
9997         case dw_val_class_data8:
9998           size += 8;
9999           break;
10000         default:
10001           gcc_unreachable ();
10002         }
10003     }
10004
10005   return size;
10006 }
10007
10008 /* Size the debugging information associated with a given DIE.  Visits the
10009    DIE's children recursively.  Updates the global variable next_die_offset, on
10010    each time through.  Uses the current value of next_die_offset to update the
10011    die_offset field in each DIE.  */
10012
10013 static void
10014 calc_die_sizes (dw_die_ref die)
10015 {
10016   dw_die_ref c;
10017
10018   die->die_offset = next_die_offset;
10019   next_die_offset += size_of_die (die);
10020
10021   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10022
10023   if (die->die_child != NULL)
10024     /* Count the null byte used to terminate sibling lists.  */
10025     next_die_offset += 1;
10026 }
10027
10028 /* Set the marks for a die and its children.  We do this so
10029    that we know whether or not a reference needs to use FORM_ref_addr; only
10030    DIEs in the same CU will be marked.  We used to clear out the offset
10031    and use that as the flag, but ran into ordering problems.  */
10032
10033 static void
10034 mark_dies (dw_die_ref die)
10035 {
10036   dw_die_ref c;
10037
10038   gcc_assert (!die->die_mark);
10039
10040   die->die_mark = 1;
10041   FOR_EACH_CHILD (die, c, mark_dies (c));
10042 }
10043
10044 /* Clear the marks for a die and its children.  */
10045
10046 static void
10047 unmark_dies (dw_die_ref die)
10048 {
10049   dw_die_ref c;
10050
10051   if (dwarf_version < 4)
10052     gcc_assert (die->die_mark);
10053
10054   die->die_mark = 0;
10055   FOR_EACH_CHILD (die, c, unmark_dies (c));
10056 }
10057
10058 /* Clear the marks for a die, its children and referred dies.  */
10059
10060 static void
10061 unmark_all_dies (dw_die_ref die)
10062 {
10063   dw_die_ref c;
10064   dw_attr_ref a;
10065   unsigned ix;
10066
10067   if (!die->die_mark)
10068     return;
10069   die->die_mark = 0;
10070
10071   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10072
10073   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10074     if (AT_class (a) == dw_val_class_die_ref)
10075       unmark_all_dies (AT_ref (a));
10076 }
10077
10078 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10079    generated for the compilation unit.  */
10080
10081 static unsigned long
10082 size_of_pubnames (VEC (pubname_entry, gc) * names)
10083 {
10084   unsigned long size;
10085   unsigned i;
10086   pubname_ref p;
10087
10088   size = DWARF_PUBNAMES_HEADER_SIZE;
10089   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10090     if (names != pubtype_table
10091         || p->die->die_offset != 0
10092         || !flag_eliminate_unused_debug_types)
10093       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10094
10095   size += DWARF_OFFSET_SIZE;
10096   return size;
10097 }
10098
10099 /* Return the size of the information in the .debug_aranges section.  */
10100
10101 static unsigned long
10102 size_of_aranges (void)
10103 {
10104   unsigned long size;
10105
10106   size = DWARF_ARANGES_HEADER_SIZE;
10107
10108   /* Count the address/length pair for this compilation unit.  */
10109   if (text_section_used)
10110     size += 2 * DWARF2_ADDR_SIZE;
10111   if (cold_text_section_used)
10112     size += 2 * DWARF2_ADDR_SIZE;
10113   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10114
10115   /* Count the two zero words used to terminated the address range table.  */
10116   size += 2 * DWARF2_ADDR_SIZE;
10117   return size;
10118 }
10119 \f
10120 /* Select the encoding of an attribute value.  */
10121
10122 static enum dwarf_form
10123 value_format (dw_attr_ref a)
10124 {
10125   switch (a->dw_attr_val.val_class)
10126     {
10127     case dw_val_class_addr:
10128       /* Only very few attributes allow DW_FORM_addr.  */
10129       switch (a->dw_attr)
10130         {
10131         case DW_AT_low_pc:
10132         case DW_AT_high_pc:
10133         case DW_AT_entry_pc:
10134         case DW_AT_trampoline:
10135           return DW_FORM_addr;
10136         default:
10137           break;
10138         }
10139       switch (DWARF2_ADDR_SIZE)
10140         {
10141         case 1:
10142           return DW_FORM_data1;
10143         case 2:
10144           return DW_FORM_data2;
10145         case 4:
10146           return DW_FORM_data4;
10147         case 8:
10148           return DW_FORM_data8;
10149         default:
10150           gcc_unreachable ();
10151         }
10152     case dw_val_class_range_list:
10153     case dw_val_class_loc_list:
10154       if (dwarf_version >= 4)
10155         return DW_FORM_sec_offset;
10156       /* FALLTHRU */
10157     case dw_val_class_offset:
10158       switch (DWARF_OFFSET_SIZE)
10159         {
10160         case 4:
10161           return DW_FORM_data4;
10162         case 8:
10163           return DW_FORM_data8;
10164         default:
10165           gcc_unreachable ();
10166         }
10167     case dw_val_class_loc:
10168       if (dwarf_version >= 4)
10169         return DW_FORM_exprloc;
10170       switch (constant_size (size_of_locs (AT_loc (a))))
10171         {
10172         case 1:
10173           return DW_FORM_block1;
10174         case 2:
10175           return DW_FORM_block2;
10176         default:
10177           gcc_unreachable ();
10178         }
10179     case dw_val_class_const:
10180       return DW_FORM_sdata;
10181     case dw_val_class_unsigned_const:
10182       switch (constant_size (AT_unsigned (a)))
10183         {
10184         case 1:
10185           return DW_FORM_data1;
10186         case 2:
10187           return DW_FORM_data2;
10188         case 4:
10189           return DW_FORM_data4;
10190         case 8:
10191           return DW_FORM_data8;
10192         default:
10193           gcc_unreachable ();
10194         }
10195     case dw_val_class_const_double:
10196       switch (HOST_BITS_PER_WIDE_INT)
10197         {
10198         case 8:
10199           return DW_FORM_data2;
10200         case 16:
10201           return DW_FORM_data4;
10202         case 32:
10203           return DW_FORM_data8;
10204         case 64:
10205         default:
10206           return DW_FORM_block1;
10207         }
10208     case dw_val_class_vec:
10209       switch (constant_size (a->dw_attr_val.v.val_vec.length
10210                              * a->dw_attr_val.v.val_vec.elt_size))
10211         {
10212         case 1:
10213           return DW_FORM_block1;
10214         case 2:
10215           return DW_FORM_block2;
10216         case 4:
10217           return DW_FORM_block4;
10218         default:
10219           gcc_unreachable ();
10220         }
10221     case dw_val_class_flag:
10222       if (dwarf_version >= 4)
10223         {
10224           /* Currently all add_AT_flag calls pass in 1 as last argument,
10225              so DW_FORM_flag_present can be used.  If that ever changes,
10226              we'll need to use DW_FORM_flag and have some optimization
10227              in build_abbrev_table that will change those to
10228              DW_FORM_flag_present if it is set to 1 in all DIEs using
10229              the same abbrev entry.  */
10230           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10231           return DW_FORM_flag_present;
10232         }
10233       return DW_FORM_flag;
10234     case dw_val_class_die_ref:
10235       if (AT_ref_external (a))
10236         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10237       else
10238         return DW_FORM_ref;
10239     case dw_val_class_fde_ref:
10240       return DW_FORM_data;
10241     case dw_val_class_lbl_id:
10242       return DW_FORM_addr;
10243     case dw_val_class_lineptr:
10244     case dw_val_class_macptr:
10245       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10246     case dw_val_class_str:
10247       return AT_string_form (a);
10248     case dw_val_class_file:
10249       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10250         {
10251         case 1:
10252           return DW_FORM_data1;
10253         case 2:
10254           return DW_FORM_data2;
10255         case 4:
10256           return DW_FORM_data4;
10257         default:
10258           gcc_unreachable ();
10259         }
10260
10261     case dw_val_class_data8:
10262       return DW_FORM_data8;
10263
10264     default:
10265       gcc_unreachable ();
10266     }
10267 }
10268
10269 /* Output the encoding of an attribute value.  */
10270
10271 static void
10272 output_value_format (dw_attr_ref a)
10273 {
10274   enum dwarf_form form = value_format (a);
10275
10276   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10277 }
10278
10279 /* Output the .debug_abbrev section which defines the DIE abbreviation
10280    table.  */
10281
10282 static void
10283 output_abbrev_section (void)
10284 {
10285   unsigned long abbrev_id;
10286
10287   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10288     {
10289       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10290       unsigned ix;
10291       dw_attr_ref a_attr;
10292
10293       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10294       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10295                                    dwarf_tag_name (abbrev->die_tag));
10296
10297       if (abbrev->die_child != NULL)
10298         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10299       else
10300         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10301
10302       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10303            ix++)
10304         {
10305           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10306                                        dwarf_attr_name (a_attr->dw_attr));
10307           output_value_format (a_attr);
10308         }
10309
10310       dw2_asm_output_data (1, 0, NULL);
10311       dw2_asm_output_data (1, 0, NULL);
10312     }
10313
10314   /* Terminate the table.  */
10315   dw2_asm_output_data (1, 0, NULL);
10316 }
10317
10318 /* Output a symbol we can use to refer to this DIE from another CU.  */
10319
10320 static inline void
10321 output_die_symbol (dw_die_ref die)
10322 {
10323   char *sym = die->die_id.die_symbol;
10324
10325   if (sym == 0)
10326     return;
10327
10328   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10329     /* We make these global, not weak; if the target doesn't support
10330        .linkonce, it doesn't support combining the sections, so debugging
10331        will break.  */
10332     targetm.asm_out.globalize_label (asm_out_file, sym);
10333
10334   ASM_OUTPUT_LABEL (asm_out_file, sym);
10335 }
10336
10337 /* Return a new location list, given the begin and end range, and the
10338    expression.  */
10339
10340 static inline dw_loc_list_ref
10341 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10342               const char *section)
10343 {
10344   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10345
10346   retlist->begin = begin;
10347   retlist->end = end;
10348   retlist->expr = expr;
10349   retlist->section = section;
10350
10351   return retlist;
10352 }
10353
10354 /* Generate a new internal symbol for this location list node, if it
10355    hasn't got one yet.  */
10356
10357 static inline void
10358 gen_llsym (dw_loc_list_ref list)
10359 {
10360   gcc_assert (!list->ll_symbol);
10361   list->ll_symbol = gen_internal_sym ("LLST");
10362 }
10363
10364 /* Output the location list given to us.  */
10365
10366 static void
10367 output_loc_list (dw_loc_list_ref list_head)
10368 {
10369   dw_loc_list_ref curr = list_head;
10370
10371   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10372
10373   /* Walk the location list, and output each range + expression.  */
10374   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10375     {
10376       unsigned long size;
10377       /* Don't output an entry that starts and ends at the same address.  */
10378       if (strcmp (curr->begin, curr->end) == 0)
10379         continue;
10380       if (!have_multiple_function_sections)
10381         {
10382           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10383                                 "Location list begin address (%s)",
10384                                 list_head->ll_symbol);
10385           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10386                                 "Location list end address (%s)",
10387                                 list_head->ll_symbol);
10388         }
10389       else
10390         {
10391           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10392                                "Location list begin address (%s)",
10393                                list_head->ll_symbol);
10394           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10395                                "Location list end address (%s)",
10396                                list_head->ll_symbol);
10397         }
10398       size = size_of_locs (curr->expr);
10399
10400       /* Output the block length for this list of location operations.  */
10401       gcc_assert (size <= 0xffff);
10402       dw2_asm_output_data (2, size, "%s", "Location expression size");
10403
10404       output_loc_sequence (curr->expr);
10405     }
10406
10407   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10408                        "Location list terminator begin (%s)",
10409                        list_head->ll_symbol);
10410   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10411                        "Location list terminator end (%s)",
10412                        list_head->ll_symbol);
10413 }
10414
10415 /* Output a type signature.  */
10416
10417 static inline void
10418 output_signature (const char *sig, const char *name)
10419 {
10420   int i;
10421
10422   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10423     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10424 }
10425
10426 /* Output the DIE and its attributes.  Called recursively to generate
10427    the definitions of each child DIE.  */
10428
10429 static void
10430 output_die (dw_die_ref die)
10431 {
10432   dw_attr_ref a;
10433   dw_die_ref c;
10434   unsigned long size;
10435   unsigned ix;
10436
10437   /* If someone in another CU might refer to us, set up a symbol for
10438      them to point to.  */
10439   if (dwarf_version < 4 && die->die_id.die_symbol)
10440     output_die_symbol (die);
10441
10442   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10443                                (unsigned long)die->die_offset,
10444                                dwarf_tag_name (die->die_tag));
10445
10446   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10447     {
10448       const char *name = dwarf_attr_name (a->dw_attr);
10449
10450       switch (AT_class (a))
10451         {
10452         case dw_val_class_addr:
10453           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10454           break;
10455
10456         case dw_val_class_offset:
10457           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10458                                "%s", name);
10459           break;
10460
10461         case dw_val_class_range_list:
10462           {
10463             char *p = strchr (ranges_section_label, '\0');
10464
10465             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10466                      a->dw_attr_val.v.val_offset);
10467             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10468                                    debug_ranges_section, "%s", name);
10469             *p = '\0';
10470           }
10471           break;
10472
10473         case dw_val_class_loc:
10474           size = size_of_locs (AT_loc (a));
10475
10476           /* Output the block length for this list of location operations.  */
10477           if (dwarf_version >= 4)
10478             dw2_asm_output_data_uleb128 (size, "%s", name);
10479           else
10480             dw2_asm_output_data (constant_size (size), size, "%s", name);
10481
10482           output_loc_sequence (AT_loc (a));
10483           break;
10484
10485         case dw_val_class_const:
10486           /* ??? It would be slightly more efficient to use a scheme like is
10487              used for unsigned constants below, but gdb 4.x does not sign
10488              extend.  Gdb 5.x does sign extend.  */
10489           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10490           break;
10491
10492         case dw_val_class_unsigned_const:
10493           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10494                                AT_unsigned (a), "%s", name);
10495           break;
10496
10497         case dw_val_class_const_double:
10498           {
10499             unsigned HOST_WIDE_INT first, second;
10500
10501             if (HOST_BITS_PER_WIDE_INT >= 64)
10502               dw2_asm_output_data (1,
10503                                    2 * HOST_BITS_PER_WIDE_INT
10504                                    / HOST_BITS_PER_CHAR,
10505                                    NULL);
10506
10507             if (WORDS_BIG_ENDIAN)
10508               {
10509                 first = a->dw_attr_val.v.val_double.high;
10510                 second = a->dw_attr_val.v.val_double.low;
10511               }
10512             else
10513               {
10514                 first = a->dw_attr_val.v.val_double.low;
10515                 second = a->dw_attr_val.v.val_double.high;
10516               }
10517
10518             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10519                                  first, name);
10520             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10521                                  second, NULL);
10522           }
10523           break;
10524
10525         case dw_val_class_vec:
10526           {
10527             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10528             unsigned int len = a->dw_attr_val.v.val_vec.length;
10529             unsigned int i;
10530             unsigned char *p;
10531
10532             dw2_asm_output_data (constant_size (len * elt_size),
10533                                  len * elt_size, "%s", name);
10534             if (elt_size > sizeof (HOST_WIDE_INT))
10535               {
10536                 elt_size /= 2;
10537                 len *= 2;
10538               }
10539             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10540                  i < len;
10541                  i++, p += elt_size)
10542               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10543                                    "fp or vector constant word %u", i);
10544             break;
10545           }
10546
10547         case dw_val_class_flag:
10548           if (dwarf_version >= 4)
10549             {
10550               /* Currently all add_AT_flag calls pass in 1 as last argument,
10551                  so DW_FORM_flag_present can be used.  If that ever changes,
10552                  we'll need to use DW_FORM_flag and have some optimization
10553                  in build_abbrev_table that will change those to
10554                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10555                  the same abbrev entry.  */
10556               gcc_assert (AT_flag (a) == 1);
10557               if (flag_debug_asm)
10558                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10559                          ASM_COMMENT_START, name);
10560               break;
10561             }
10562           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10563           break;
10564
10565         case dw_val_class_loc_list:
10566           {
10567             char *sym = AT_loc_list (a)->ll_symbol;
10568
10569             gcc_assert (sym);
10570             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10571                                    "%s", name);
10572           }
10573           break;
10574
10575         case dw_val_class_die_ref:
10576           if (AT_ref_external (a))
10577             {
10578               if (dwarf_version >= 4)
10579                 {
10580                   comdat_type_node_ref type_node =
10581                     AT_ref (a)->die_id.die_type_node;
10582
10583                   gcc_assert (type_node);
10584                   output_signature (type_node->signature, name);
10585                 }
10586               else
10587                 {
10588                   char *sym = AT_ref (a)->die_id.die_symbol;
10589                   int size;
10590
10591                   gcc_assert (sym);
10592                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10593                      length, whereas in DWARF3 it's always sized as an
10594                      offset.  */
10595                   if (dwarf_version == 2)
10596                     size = DWARF2_ADDR_SIZE;
10597                   else
10598                     size = DWARF_OFFSET_SIZE;
10599                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10600                                          name);
10601                 }
10602             }
10603           else
10604             {
10605               gcc_assert (AT_ref (a)->die_offset);
10606               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10607                                    "%s", name);
10608             }
10609           break;
10610
10611         case dw_val_class_fde_ref:
10612           {
10613             char l1[20];
10614
10615             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10616                                          a->dw_attr_val.v.val_fde_index * 2);
10617             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10618                                    "%s", name);
10619           }
10620           break;
10621
10622         case dw_val_class_lbl_id:
10623           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10624           break;
10625
10626         case dw_val_class_lineptr:
10627           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10628                                  debug_line_section, "%s", name);
10629           break;
10630
10631         case dw_val_class_macptr:
10632           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10633                                  debug_macinfo_section, "%s", name);
10634           break;
10635
10636         case dw_val_class_str:
10637           if (AT_string_form (a) == DW_FORM_strp)
10638             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10639                                    a->dw_attr_val.v.val_str->label,
10640                                    debug_str_section,
10641                                    "%s: \"%s\"", name, AT_string (a));
10642           else
10643             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10644           break;
10645
10646         case dw_val_class_file:
10647           {
10648             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10649
10650             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10651                                  a->dw_attr_val.v.val_file->filename);
10652             break;
10653           }
10654
10655         case dw_val_class_data8:
10656           {
10657             int i;
10658
10659             for (i = 0; i < 8; i++)
10660               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10661                                    i == 0 ? "%s" : NULL, name);
10662             break;
10663           }
10664
10665         default:
10666           gcc_unreachable ();
10667         }
10668     }
10669
10670   FOR_EACH_CHILD (die, c, output_die (c));
10671
10672   /* Add null byte to terminate sibling list.  */
10673   if (die->die_child != NULL)
10674     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10675                          (unsigned long) die->die_offset);
10676 }
10677
10678 /* Output the compilation unit that appears at the beginning of the
10679    .debug_info section, and precedes the DIE descriptions.  */
10680
10681 static void
10682 output_compilation_unit_header (void)
10683 {
10684   int ver = dwarf_version;
10685
10686   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10687     dw2_asm_output_data (4, 0xffffffff,
10688       "Initial length escape value indicating 64-bit DWARF extension");
10689   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10690                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10691                        "Length of Compilation Unit Info");
10692   dw2_asm_output_data (2, ver, "DWARF version number");
10693   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10694                          debug_abbrev_section,
10695                          "Offset Into Abbrev. Section");
10696   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10697 }
10698
10699 /* Output the compilation unit DIE and its children.  */
10700
10701 static void
10702 output_comp_unit (dw_die_ref die, int output_if_empty)
10703 {
10704   const char *secname;
10705   char *oldsym, *tmp;
10706
10707   /* Unless we are outputting main CU, we may throw away empty ones.  */
10708   if (!output_if_empty && die->die_child == NULL)
10709     return;
10710
10711   /* Even if there are no children of this DIE, we must output the information
10712      about the compilation unit.  Otherwise, on an empty translation unit, we
10713      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10714      will then complain when examining the file.  First mark all the DIEs in
10715      this CU so we know which get local refs.  */
10716   mark_dies (die);
10717
10718   build_abbrev_table (die);
10719
10720   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10721   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10722   calc_die_sizes (die);
10723
10724   oldsym = die->die_id.die_symbol;
10725   if (oldsym)
10726     {
10727       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10728
10729       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10730       secname = tmp;
10731       die->die_id.die_symbol = NULL;
10732       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10733     }
10734   else
10735     switch_to_section (debug_info_section);
10736
10737   /* Output debugging information.  */
10738   output_compilation_unit_header ();
10739   output_die (die);
10740
10741   /* Leave the marks on the main CU, so we can check them in
10742      output_pubnames.  */
10743   if (oldsym)
10744     {
10745       unmark_dies (die);
10746       die->die_id.die_symbol = oldsym;
10747     }
10748 }
10749
10750 /* Output a comdat type unit DIE and its children.  */
10751
10752 static void
10753 output_comdat_type_unit (comdat_type_node *node)
10754 {
10755   const char *secname;
10756   char *tmp;
10757   int i;
10758 #if defined (OBJECT_FORMAT_ELF)
10759   tree comdat_key;
10760 #endif
10761
10762   /* First mark all the DIEs in this CU so we know which get local refs.  */
10763   mark_dies (node->root_die);
10764
10765   build_abbrev_table (node->root_die);
10766
10767   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10768   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10769   calc_die_sizes (node->root_die);
10770
10771 #if defined (OBJECT_FORMAT_ELF)
10772   secname = ".debug_types";
10773   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10774   sprintf (tmp, "wt.");
10775   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10776     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10777   comdat_key = get_identifier (tmp);
10778   targetm.asm_out.named_section (secname,
10779                                  SECTION_DEBUG | SECTION_LINKONCE,
10780                                  comdat_key);
10781 #else
10782   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10783   sprintf (tmp, ".gnu.linkonce.wt.");
10784   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10785     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10786   secname = tmp;
10787   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10788 #endif
10789
10790   /* Output debugging information.  */
10791   output_compilation_unit_header ();
10792   output_signature (node->signature, "Type Signature");
10793   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10794                        "Offset to Type DIE");
10795   output_die (node->root_die);
10796
10797   unmark_dies (node->root_die);
10798 }
10799
10800 /* Return the DWARF2/3 pubname associated with a decl.  */
10801
10802 static const char *
10803 dwarf2_name (tree decl, int scope)
10804 {
10805   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10806 }
10807
10808 /* Add a new entry to .debug_pubnames if appropriate.  */
10809
10810 static void
10811 add_pubname_string (const char *str, dw_die_ref die)
10812 {
10813   pubname_entry e;
10814
10815   e.die = die;
10816   e.name = xstrdup (str);
10817   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10818 }
10819
10820 static void
10821 add_pubname (tree decl, dw_die_ref die)
10822 {
10823   if (TREE_PUBLIC (decl))
10824     {
10825       const char *name = dwarf2_name (decl, 1);
10826       if (name)
10827         add_pubname_string (name, die);
10828     }
10829 }
10830
10831 /* Add a new entry to .debug_pubtypes if appropriate.  */
10832
10833 static void
10834 add_pubtype (tree decl, dw_die_ref die)
10835 {
10836   pubname_entry e;
10837
10838   e.name = NULL;
10839   if ((TREE_PUBLIC (decl)
10840        || die->die_parent == comp_unit_die)
10841       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10842     {
10843       e.die = die;
10844       if (TYPE_P (decl))
10845         {
10846           if (TYPE_NAME (decl))
10847             {
10848               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10849                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10850               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10851                        && DECL_NAME (TYPE_NAME (decl)))
10852                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10853               else
10854                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10855             }
10856         }
10857       else
10858         {
10859           e.name = dwarf2_name (decl, 1);
10860           if (e.name)
10861             e.name = xstrdup (e.name);
10862         }
10863
10864       /* If we don't have a name for the type, there's no point in adding
10865          it to the table.  */
10866       if (e.name && e.name[0] != '\0')
10867         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10868     }
10869 }
10870
10871 /* Output the public names table used to speed up access to externally
10872    visible names; or the public types table used to find type definitions.  */
10873
10874 static void
10875 output_pubnames (VEC (pubname_entry, gc) * names)
10876 {
10877   unsigned i;
10878   unsigned long pubnames_length = size_of_pubnames (names);
10879   pubname_ref pub;
10880
10881   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10882     dw2_asm_output_data (4, 0xffffffff,
10883       "Initial length escape value indicating 64-bit DWARF extension");
10884   if (names == pubname_table)
10885     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10886                          "Length of Public Names Info");
10887   else
10888     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10889                          "Length of Public Type Names Info");
10890   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10891   dw2_asm_output_data (2, 2, "DWARF Version");
10892   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10893                          debug_info_section,
10894                          "Offset of Compilation Unit Info");
10895   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10896                        "Compilation Unit Length");
10897
10898   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10899     {
10900       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10901       if (names == pubname_table)
10902         gcc_assert (pub->die->die_mark);
10903
10904       if (names != pubtype_table
10905           || pub->die->die_offset != 0
10906           || !flag_eliminate_unused_debug_types)
10907         {
10908           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10909                                "DIE offset");
10910
10911           dw2_asm_output_nstring (pub->name, -1, "external name");
10912         }
10913     }
10914
10915   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10916 }
10917
10918 /* Add a new entry to .debug_aranges if appropriate.  */
10919
10920 static void
10921 add_arange (tree decl, dw_die_ref die)
10922 {
10923   if (! DECL_SECTION_NAME (decl))
10924     return;
10925
10926   if (arange_table_in_use == arange_table_allocated)
10927     {
10928       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10929       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10930                                     arange_table_allocated);
10931       memset (arange_table + arange_table_in_use, 0,
10932               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10933     }
10934
10935   arange_table[arange_table_in_use++] = die;
10936 }
10937
10938 /* Output the information that goes into the .debug_aranges table.
10939    Namely, define the beginning and ending address range of the
10940    text section generated for this compilation unit.  */
10941
10942 static void
10943 output_aranges (void)
10944 {
10945   unsigned i;
10946   unsigned long aranges_length = size_of_aranges ();
10947
10948   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10949     dw2_asm_output_data (4, 0xffffffff,
10950       "Initial length escape value indicating 64-bit DWARF extension");
10951   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10952                        "Length of Address Ranges Info");
10953   /* Version number for aranges is still 2, even in DWARF3.  */
10954   dw2_asm_output_data (2, 2, "DWARF Version");
10955   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10956                          debug_info_section,
10957                          "Offset of Compilation Unit Info");
10958   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10959   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10960
10961   /* We need to align to twice the pointer size here.  */
10962   if (DWARF_ARANGES_PAD_SIZE)
10963     {
10964       /* Pad using a 2 byte words so that padding is correct for any
10965          pointer size.  */
10966       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10967                            2 * DWARF2_ADDR_SIZE);
10968       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10969         dw2_asm_output_data (2, 0, NULL);
10970     }
10971
10972   /* It is necessary not to output these entries if the sections were
10973      not used; if the sections were not used, the length will be 0 and
10974      the address may end up as 0 if the section is discarded by ld
10975      --gc-sections, leaving an invalid (0, 0) entry that can be
10976      confused with the terminator.  */
10977   if (text_section_used)
10978     {
10979       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10980       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10981                             text_section_label, "Length");
10982     }
10983   if (cold_text_section_used)
10984     {
10985       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10986                            "Address");
10987       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10988                             cold_text_section_label, "Length");
10989     }
10990
10991   for (i = 0; i < arange_table_in_use; i++)
10992     {
10993       dw_die_ref die = arange_table[i];
10994
10995       /* We shouldn't see aranges for DIEs outside of the main CU.  */
10996       gcc_assert (die->die_mark);
10997
10998       if (die->die_tag == DW_TAG_subprogram)
10999         {
11000           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11001                                "Address");
11002           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11003                                 get_AT_low_pc (die), "Length");
11004         }
11005       else
11006         {
11007           /* A static variable; extract the symbol from DW_AT_location.
11008              Note that this code isn't currently hit, as we only emit
11009              aranges for functions (jason 9/23/99).  */
11010           dw_attr_ref a = get_AT (die, DW_AT_location);
11011           dw_loc_descr_ref loc;
11012
11013           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11014
11015           loc = AT_loc (a);
11016           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11017
11018           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11019                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11020           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11021                                get_AT_unsigned (die, DW_AT_byte_size),
11022                                "Length");
11023         }
11024     }
11025
11026   /* Output the terminator words.  */
11027   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11028   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11029 }
11030
11031 /* Add a new entry to .debug_ranges.  Return the offset at which it
11032    was placed.  */
11033
11034 static unsigned int
11035 add_ranges_num (int num)
11036 {
11037   unsigned int in_use = ranges_table_in_use;
11038
11039   if (in_use == ranges_table_allocated)
11040     {
11041       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11042       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11043                                     ranges_table_allocated);
11044       memset (ranges_table + ranges_table_in_use, 0,
11045               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11046     }
11047
11048   ranges_table[in_use].num = num;
11049   ranges_table_in_use = in_use + 1;
11050
11051   return in_use * 2 * DWARF2_ADDR_SIZE;
11052 }
11053
11054 /* Add a new entry to .debug_ranges corresponding to a block, or a
11055    range terminator if BLOCK is NULL.  */
11056
11057 static unsigned int
11058 add_ranges (const_tree block)
11059 {
11060   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11061 }
11062
11063 /* Add a new entry to .debug_ranges corresponding to a pair of
11064    labels.  */
11065
11066 static void
11067 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11068                       bool *added)
11069 {
11070   unsigned int in_use = ranges_by_label_in_use;
11071   unsigned int offset;
11072
11073   if (in_use == ranges_by_label_allocated)
11074     {
11075       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11076       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11077                                        ranges_by_label,
11078                                        ranges_by_label_allocated);
11079       memset (ranges_by_label + ranges_by_label_in_use, 0,
11080               RANGES_TABLE_INCREMENT
11081               * sizeof (struct dw_ranges_by_label_struct));
11082     }
11083
11084   ranges_by_label[in_use].begin = begin;
11085   ranges_by_label[in_use].end = end;
11086   ranges_by_label_in_use = in_use + 1;
11087
11088   offset = add_ranges_num (-(int)in_use - 1);
11089   if (!*added)
11090     {
11091       add_AT_range_list (die, DW_AT_ranges, offset);
11092       *added = true;
11093     }
11094 }
11095
11096 static void
11097 output_ranges (void)
11098 {
11099   unsigned i;
11100   static const char *const start_fmt = "Offset %#x";
11101   const char *fmt = start_fmt;
11102
11103   for (i = 0; i < ranges_table_in_use; i++)
11104     {
11105       int block_num = ranges_table[i].num;
11106
11107       if (block_num > 0)
11108         {
11109           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11110           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11111
11112           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11113           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11114
11115           /* If all code is in the text section, then the compilation
11116              unit base address defaults to DW_AT_low_pc, which is the
11117              base of the text section.  */
11118           if (!have_multiple_function_sections)
11119             {
11120               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11121                                     text_section_label,
11122                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11123               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11124                                     text_section_label, NULL);
11125             }
11126
11127           /* Otherwise, the compilation unit base address is zero,
11128              which allows us to use absolute addresses, and not worry
11129              about whether the target supports cross-section
11130              arithmetic.  */
11131           else
11132             {
11133               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11134                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11135               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11136             }
11137
11138           fmt = NULL;
11139         }
11140
11141       /* Negative block_num stands for an index into ranges_by_label.  */
11142       else if (block_num < 0)
11143         {
11144           int lab_idx = - block_num - 1;
11145
11146           if (!have_multiple_function_sections)
11147             {
11148               gcc_unreachable ();
11149 #if 0
11150               /* If we ever use add_ranges_by_labels () for a single
11151                  function section, all we have to do is to take out
11152                  the #if 0 above.  */
11153               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11154                                     ranges_by_label[lab_idx].begin,
11155                                     text_section_label,
11156                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11157               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11158                                     ranges_by_label[lab_idx].end,
11159                                     text_section_label, NULL);
11160 #endif
11161             }
11162           else
11163             {
11164               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11165                                    ranges_by_label[lab_idx].begin,
11166                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11167               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11168                                    ranges_by_label[lab_idx].end,
11169                                    NULL);
11170             }
11171         }
11172       else
11173         {
11174           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11175           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11176           fmt = start_fmt;
11177         }
11178     }
11179 }
11180
11181 /* Data structure containing information about input files.  */
11182 struct file_info
11183 {
11184   const char *path;     /* Complete file name.  */
11185   const char *fname;    /* File name part.  */
11186   int length;           /* Length of entire string.  */
11187   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11188   int dir_idx;          /* Index in directory table.  */
11189 };
11190
11191 /* Data structure containing information about directories with source
11192    files.  */
11193 struct dir_info
11194 {
11195   const char *path;     /* Path including directory name.  */
11196   int length;           /* Path length.  */
11197   int prefix;           /* Index of directory entry which is a prefix.  */
11198   int count;            /* Number of files in this directory.  */
11199   int dir_idx;          /* Index of directory used as base.  */
11200 };
11201
11202 /* Callback function for file_info comparison.  We sort by looking at
11203    the directories in the path.  */
11204
11205 static int
11206 file_info_cmp (const void *p1, const void *p2)
11207 {
11208   const struct file_info *const s1 = (const struct file_info *) p1;
11209   const struct file_info *const s2 = (const struct file_info *) p2;
11210   const unsigned char *cp1;
11211   const unsigned char *cp2;
11212
11213   /* Take care of file names without directories.  We need to make sure that
11214      we return consistent values to qsort since some will get confused if
11215      we return the same value when identical operands are passed in opposite
11216      orders.  So if neither has a directory, return 0 and otherwise return
11217      1 or -1 depending on which one has the directory.  */
11218   if ((s1->path == s1->fname || s2->path == s2->fname))
11219     return (s2->path == s2->fname) - (s1->path == s1->fname);
11220
11221   cp1 = (const unsigned char *) s1->path;
11222   cp2 = (const unsigned char *) s2->path;
11223
11224   while (1)
11225     {
11226       ++cp1;
11227       ++cp2;
11228       /* Reached the end of the first path?  If so, handle like above.  */
11229       if ((cp1 == (const unsigned char *) s1->fname)
11230           || (cp2 == (const unsigned char *) s2->fname))
11231         return ((cp2 == (const unsigned char *) s2->fname)
11232                 - (cp1 == (const unsigned char *) s1->fname));
11233
11234       /* Character of current path component the same?  */
11235       else if (*cp1 != *cp2)
11236         return *cp1 - *cp2;
11237     }
11238 }
11239
11240 struct file_name_acquire_data
11241 {
11242   struct file_info *files;
11243   int used_files;
11244   int max_files;
11245 };
11246
11247 /* Traversal function for the hash table.  */
11248
11249 static int
11250 file_name_acquire (void ** slot, void *data)
11251 {
11252   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11253   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11254   struct file_info *fi;
11255   const char *f;
11256
11257   gcc_assert (fnad->max_files >= d->emitted_number);
11258
11259   if (! d->emitted_number)
11260     return 1;
11261
11262   gcc_assert (fnad->max_files != fnad->used_files);
11263
11264   fi = fnad->files + fnad->used_files++;
11265
11266   /* Skip all leading "./".  */
11267   f = d->filename;
11268   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11269     f += 2;
11270
11271   /* Create a new array entry.  */
11272   fi->path = f;
11273   fi->length = strlen (f);
11274   fi->file_idx = d;
11275
11276   /* Search for the file name part.  */
11277   f = strrchr (f, DIR_SEPARATOR);
11278 #if defined (DIR_SEPARATOR_2)
11279   {
11280     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11281
11282     if (g != NULL)
11283       {
11284         if (f == NULL || f < g)
11285           f = g;
11286       }
11287   }
11288 #endif
11289
11290   fi->fname = f == NULL ? fi->path : f + 1;
11291   return 1;
11292 }
11293
11294 /* Output the directory table and the file name table.  We try to minimize
11295    the total amount of memory needed.  A heuristic is used to avoid large
11296    slowdowns with many input files.  */
11297
11298 static void
11299 output_file_names (void)
11300 {
11301   struct file_name_acquire_data fnad;
11302   int numfiles;
11303   struct file_info *files;
11304   struct dir_info *dirs;
11305   int *saved;
11306   int *savehere;
11307   int *backmap;
11308   int ndirs;
11309   int idx_offset;
11310   int i;
11311
11312   if (!last_emitted_file)
11313     {
11314       dw2_asm_output_data (1, 0, "End directory table");
11315       dw2_asm_output_data (1, 0, "End file name table");
11316       return;
11317     }
11318
11319   numfiles = last_emitted_file->emitted_number;
11320
11321   /* Allocate the various arrays we need.  */
11322   files = XALLOCAVEC (struct file_info, numfiles);
11323   dirs = XALLOCAVEC (struct dir_info, numfiles);
11324
11325   fnad.files = files;
11326   fnad.used_files = 0;
11327   fnad.max_files = numfiles;
11328   htab_traverse (file_table, file_name_acquire, &fnad);
11329   gcc_assert (fnad.used_files == fnad.max_files);
11330
11331   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11332
11333   /* Find all the different directories used.  */
11334   dirs[0].path = files[0].path;
11335   dirs[0].length = files[0].fname - files[0].path;
11336   dirs[0].prefix = -1;
11337   dirs[0].count = 1;
11338   dirs[0].dir_idx = 0;
11339   files[0].dir_idx = 0;
11340   ndirs = 1;
11341
11342   for (i = 1; i < numfiles; i++)
11343     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11344         && memcmp (dirs[ndirs - 1].path, files[i].path,
11345                    dirs[ndirs - 1].length) == 0)
11346       {
11347         /* Same directory as last entry.  */
11348         files[i].dir_idx = ndirs - 1;
11349         ++dirs[ndirs - 1].count;
11350       }
11351     else
11352       {
11353         int j;
11354
11355         /* This is a new directory.  */
11356         dirs[ndirs].path = files[i].path;
11357         dirs[ndirs].length = files[i].fname - files[i].path;
11358         dirs[ndirs].count = 1;
11359         dirs[ndirs].dir_idx = ndirs;
11360         files[i].dir_idx = ndirs;
11361
11362         /* Search for a prefix.  */
11363         dirs[ndirs].prefix = -1;
11364         for (j = 0; j < ndirs; j++)
11365           if (dirs[j].length < dirs[ndirs].length
11366               && dirs[j].length > 1
11367               && (dirs[ndirs].prefix == -1
11368                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11369               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11370             dirs[ndirs].prefix = j;
11371
11372         ++ndirs;
11373       }
11374
11375   /* Now to the actual work.  We have to find a subset of the directories which
11376      allow expressing the file name using references to the directory table
11377      with the least amount of characters.  We do not do an exhaustive search
11378      where we would have to check out every combination of every single
11379      possible prefix.  Instead we use a heuristic which provides nearly optimal
11380      results in most cases and never is much off.  */
11381   saved = XALLOCAVEC (int, ndirs);
11382   savehere = XALLOCAVEC (int, ndirs);
11383
11384   memset (saved, '\0', ndirs * sizeof (saved[0]));
11385   for (i = 0; i < ndirs; i++)
11386     {
11387       int j;
11388       int total;
11389
11390       /* We can always save some space for the current directory.  But this
11391          does not mean it will be enough to justify adding the directory.  */
11392       savehere[i] = dirs[i].length;
11393       total = (savehere[i] - saved[i]) * dirs[i].count;
11394
11395       for (j = i + 1; j < ndirs; j++)
11396         {
11397           savehere[j] = 0;
11398           if (saved[j] < dirs[i].length)
11399             {
11400               /* Determine whether the dirs[i] path is a prefix of the
11401                  dirs[j] path.  */
11402               int k;
11403
11404               k = dirs[j].prefix;
11405               while (k != -1 && k != (int) i)
11406                 k = dirs[k].prefix;
11407
11408               if (k == (int) i)
11409                 {
11410                   /* Yes it is.  We can possibly save some memory by
11411                      writing the filenames in dirs[j] relative to
11412                      dirs[i].  */
11413                   savehere[j] = dirs[i].length;
11414                   total += (savehere[j] - saved[j]) * dirs[j].count;
11415                 }
11416             }
11417         }
11418
11419       /* Check whether we can save enough to justify adding the dirs[i]
11420          directory.  */
11421       if (total > dirs[i].length + 1)
11422         {
11423           /* It's worthwhile adding.  */
11424           for (j = i; j < ndirs; j++)
11425             if (savehere[j] > 0)
11426               {
11427                 /* Remember how much we saved for this directory so far.  */
11428                 saved[j] = savehere[j];
11429
11430                 /* Remember the prefix directory.  */
11431                 dirs[j].dir_idx = i;
11432               }
11433         }
11434     }
11435
11436   /* Emit the directory name table.  */
11437   idx_offset = dirs[0].length > 0 ? 1 : 0;
11438   for (i = 1 - idx_offset; i < ndirs; i++)
11439     dw2_asm_output_nstring (dirs[i].path,
11440                             dirs[i].length
11441                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11442                             "Directory Entry: %#x", i + idx_offset);
11443
11444   dw2_asm_output_data (1, 0, "End directory table");
11445
11446   /* We have to emit them in the order of emitted_number since that's
11447      used in the debug info generation.  To do this efficiently we
11448      generate a back-mapping of the indices first.  */
11449   backmap = XALLOCAVEC (int, numfiles);
11450   for (i = 0; i < numfiles; i++)
11451     backmap[files[i].file_idx->emitted_number - 1] = i;
11452
11453   /* Now write all the file names.  */
11454   for (i = 0; i < numfiles; i++)
11455     {
11456       int file_idx = backmap[i];
11457       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11458
11459 #ifdef VMS_DEBUGGING_INFO
11460 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11461
11462       /* Setting these fields can lead to debugger miscomparisons,
11463          but VMS Debug requires them to be set correctly.  */
11464
11465       int ver;
11466       long long cdt;
11467       long siz;
11468       int maxfilelen = strlen (files[file_idx].path)
11469                                + dirs[dir_idx].length
11470                                + MAX_VMS_VERSION_LEN + 1;
11471       char *filebuf = XALLOCAVEC (char, maxfilelen);
11472
11473       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11474       snprintf (filebuf, maxfilelen, "%s;%d",
11475                 files[file_idx].path + dirs[dir_idx].length, ver);
11476
11477       dw2_asm_output_nstring
11478         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11479
11480       /* Include directory index.  */
11481       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11482
11483       /* Modification time.  */
11484       dw2_asm_output_data_uleb128
11485         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11486           ? cdt : 0,
11487          NULL);
11488
11489       /* File length in bytes.  */
11490       dw2_asm_output_data_uleb128
11491         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11492           ? siz : 0,
11493          NULL);
11494 #else
11495       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11496                               "File Entry: %#x", (unsigned) i + 1);
11497
11498       /* Include directory index.  */
11499       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11500
11501       /* Modification time.  */
11502       dw2_asm_output_data_uleb128 (0, NULL);
11503
11504       /* File length in bytes.  */
11505       dw2_asm_output_data_uleb128 (0, NULL);
11506 #endif
11507     }
11508
11509   dw2_asm_output_data (1, 0, "End file name table");
11510 }
11511
11512
11513 /* Output the source line number correspondence information.  This
11514    information goes into the .debug_line section.  */
11515
11516 static void
11517 output_line_info (void)
11518 {
11519   char l1[20], l2[20], p1[20], p2[20];
11520   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11521   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11522   unsigned opc;
11523   unsigned n_op_args;
11524   unsigned long lt_index;
11525   unsigned long current_line;
11526   long line_offset;
11527   long line_delta;
11528   unsigned long current_file;
11529   unsigned long function;
11530   int ver = dwarf_version;
11531
11532   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11533   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11534   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11535   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11536
11537   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11538     dw2_asm_output_data (4, 0xffffffff,
11539       "Initial length escape value indicating 64-bit DWARF extension");
11540   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11541                         "Length of Source Line Info");
11542   ASM_OUTPUT_LABEL (asm_out_file, l1);
11543
11544   dw2_asm_output_data (2, ver, "DWARF Version");
11545   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11546   ASM_OUTPUT_LABEL (asm_out_file, p1);
11547
11548   /* Define the architecture-dependent minimum instruction length (in
11549    bytes).  In this implementation of DWARF, this field is used for
11550    information purposes only.  Since GCC generates assembly language,
11551    we have no a priori knowledge of how many instruction bytes are
11552    generated for each source line, and therefore can use only the
11553    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11554    commands.  Accordingly, we fix this as `1', which is "correct
11555    enough" for all architectures, and don't let the target override.  */
11556   dw2_asm_output_data (1, 1,
11557                        "Minimum Instruction Length");
11558
11559   if (ver >= 4)
11560     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11561                          "Maximum Operations Per Instruction");
11562   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11563                        "Default is_stmt_start flag");
11564   dw2_asm_output_data (1, DWARF_LINE_BASE,
11565                        "Line Base Value (Special Opcodes)");
11566   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11567                        "Line Range Value (Special Opcodes)");
11568   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11569                        "Special Opcode Base");
11570
11571   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11572     {
11573       switch (opc)
11574         {
11575         case DW_LNS_advance_pc:
11576         case DW_LNS_advance_line:
11577         case DW_LNS_set_file:
11578         case DW_LNS_set_column:
11579         case DW_LNS_fixed_advance_pc:
11580           n_op_args = 1;
11581           break;
11582         default:
11583           n_op_args = 0;
11584           break;
11585         }
11586
11587       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11588                            opc, n_op_args);
11589     }
11590
11591   /* Write out the information about the files we use.  */
11592   output_file_names ();
11593   ASM_OUTPUT_LABEL (asm_out_file, p2);
11594
11595   /* We used to set the address register to the first location in the text
11596      section here, but that didn't accomplish anything since we already
11597      have a line note for the opening brace of the first function.  */
11598
11599   /* Generate the line number to PC correspondence table, encoded as
11600      a series of state machine operations.  */
11601   current_file = 1;
11602   current_line = 1;
11603
11604   if (cfun && in_cold_section_p)
11605     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11606   else
11607     strcpy (prev_line_label, text_section_label);
11608   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11609     {
11610       dw_line_info_ref line_info = &line_info_table[lt_index];
11611
11612 #if 0
11613       /* Disable this optimization for now; GDB wants to see two line notes
11614          at the beginning of a function so it can find the end of the
11615          prologue.  */
11616
11617       /* Don't emit anything for redundant notes.  Just updating the
11618          address doesn't accomplish anything, because we already assume
11619          that anything after the last address is this line.  */
11620       if (line_info->dw_line_num == current_line
11621           && line_info->dw_file_num == current_file)
11622         continue;
11623 #endif
11624
11625       /* Emit debug info for the address of the current line.
11626
11627          Unfortunately, we have little choice here currently, and must always
11628          use the most general form.  GCC does not know the address delta
11629          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11630          attributes which will give an upper bound on the address range.  We
11631          could perhaps use length attributes to determine when it is safe to
11632          use DW_LNS_fixed_advance_pc.  */
11633
11634       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11635       if (0)
11636         {
11637           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11638           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11639                                "DW_LNS_fixed_advance_pc");
11640           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11641         }
11642       else
11643         {
11644           /* This can handle any delta.  This takes
11645              4+DWARF2_ADDR_SIZE bytes.  */
11646           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11647           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11648           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11649           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11650         }
11651
11652       strcpy (prev_line_label, line_label);
11653
11654       /* Emit debug info for the source file of the current line, if
11655          different from the previous line.  */
11656       if (line_info->dw_file_num != current_file)
11657         {
11658           current_file = line_info->dw_file_num;
11659           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11660           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11661         }
11662
11663       /* Emit debug info for the current line number, choosing the encoding
11664          that uses the least amount of space.  */
11665       if (line_info->dw_line_num != current_line)
11666         {
11667           line_offset = line_info->dw_line_num - current_line;
11668           line_delta = line_offset - DWARF_LINE_BASE;
11669           current_line = line_info->dw_line_num;
11670           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11671             /* This can handle deltas from -10 to 234, using the current
11672                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11673                takes 1 byte.  */
11674             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11675                                  "line %lu", current_line);
11676           else
11677             {
11678               /* This can handle any delta.  This takes at least 4 bytes,
11679                  depending on the value being encoded.  */
11680               dw2_asm_output_data (1, DW_LNS_advance_line,
11681                                    "advance to line %lu", current_line);
11682               dw2_asm_output_data_sleb128 (line_offset, NULL);
11683               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11684             }
11685         }
11686       else
11687         /* We still need to start a new row, so output a copy insn.  */
11688         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11689     }
11690
11691   /* Emit debug info for the address of the end of the function.  */
11692   if (0)
11693     {
11694       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11695                            "DW_LNS_fixed_advance_pc");
11696       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11697     }
11698   else
11699     {
11700       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11701       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11702       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11703       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11704     }
11705
11706   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11707   dw2_asm_output_data_uleb128 (1, NULL);
11708   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11709
11710   function = 0;
11711   current_file = 1;
11712   current_line = 1;
11713   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11714     {
11715       dw_separate_line_info_ref line_info
11716         = &separate_line_info_table[lt_index];
11717
11718 #if 0
11719       /* Don't emit anything for redundant notes.  */
11720       if (line_info->dw_line_num == current_line
11721           && line_info->dw_file_num == current_file
11722           && line_info->function == function)
11723         goto cont;
11724 #endif
11725
11726       /* Emit debug info for the address of the current line.  If this is
11727          a new function, or the first line of a function, then we need
11728          to handle it differently.  */
11729       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11730                                    lt_index);
11731       if (function != line_info->function)
11732         {
11733           function = line_info->function;
11734
11735           /* Set the address register to the first line in the function.  */
11736           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11737           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11738           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11739           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11740         }
11741       else
11742         {
11743           /* ??? See the DW_LNS_advance_pc comment above.  */
11744           if (0)
11745             {
11746               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11747                                    "DW_LNS_fixed_advance_pc");
11748               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11749             }
11750           else
11751             {
11752               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11753               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11754               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11755               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11756             }
11757         }
11758
11759       strcpy (prev_line_label, line_label);
11760
11761       /* Emit debug info for the source file of the current line, if
11762          different from the previous line.  */
11763       if (line_info->dw_file_num != current_file)
11764         {
11765           current_file = line_info->dw_file_num;
11766           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11767           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11768         }
11769
11770       /* Emit debug info for the current line number, choosing the encoding
11771          that uses the least amount of space.  */
11772       if (line_info->dw_line_num != current_line)
11773         {
11774           line_offset = line_info->dw_line_num - current_line;
11775           line_delta = line_offset - DWARF_LINE_BASE;
11776           current_line = line_info->dw_line_num;
11777           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11778             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11779                                  "line %lu", current_line);
11780           else
11781             {
11782               dw2_asm_output_data (1, DW_LNS_advance_line,
11783                                    "advance to line %lu", current_line);
11784               dw2_asm_output_data_sleb128 (line_offset, NULL);
11785               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11786             }
11787         }
11788       else
11789         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11790
11791 #if 0
11792     cont:
11793 #endif
11794
11795       lt_index++;
11796
11797       /* If we're done with a function, end its sequence.  */
11798       if (lt_index == separate_line_info_table_in_use
11799           || separate_line_info_table[lt_index].function != function)
11800         {
11801           current_file = 1;
11802           current_line = 1;
11803
11804           /* Emit debug info for the address of the end of the function.  */
11805           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11806           if (0)
11807             {
11808               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11809                                    "DW_LNS_fixed_advance_pc");
11810               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11811             }
11812           else
11813             {
11814               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11815               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11816               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11817               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11818             }
11819
11820           /* Output the marker for the end of this sequence.  */
11821           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11822           dw2_asm_output_data_uleb128 (1, NULL);
11823           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11824         }
11825     }
11826
11827   /* Output the marker for the end of the line number info.  */
11828   ASM_OUTPUT_LABEL (asm_out_file, l2);
11829 }
11830
11831 /* Return the size of the .debug_dcall table for the compilation unit.  */
11832
11833 static unsigned long
11834 size_of_dcall_table (void)
11835 {
11836   unsigned long size;
11837   unsigned int i;
11838   dcall_entry *p;
11839   tree last_poc_decl = NULL;
11840
11841   /* Header:  version + debug info section pointer + pointer size.  */
11842   size = 2 + DWARF_OFFSET_SIZE + 1;
11843
11844   /* Each entry:  code label + DIE offset.  */
11845   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11846     {
11847       gcc_assert (p->targ_die != NULL);
11848       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11849       if (p->poc_decl != last_poc_decl)
11850         {
11851           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11852           gcc_assert (poc_die);
11853           last_poc_decl = p->poc_decl;
11854           if (poc_die)
11855             size += (DWARF_OFFSET_SIZE
11856                      + size_of_uleb128 (poc_die->die_offset));
11857         }
11858       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11859     }
11860
11861   return size;
11862 }
11863
11864 /* Output the direct call table used to disambiguate PC values when
11865    identical function have been merged.  */
11866
11867 static void
11868 output_dcall_table (void)
11869 {
11870   unsigned i;
11871   unsigned long dcall_length = size_of_dcall_table ();
11872   dcall_entry *p;
11873   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11874   tree last_poc_decl = NULL;
11875
11876   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11877     dw2_asm_output_data (4, 0xffffffff,
11878       "Initial length escape value indicating 64-bit DWARF extension");
11879   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11880                        "Length of Direct Call Table");
11881   dw2_asm_output_data (2, 4, "Version number");
11882   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11883                          debug_info_section,
11884                          "Offset of Compilation Unit Info");
11885   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11886
11887   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11888     {
11889       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11890       if (p->poc_decl != last_poc_decl)
11891         {
11892           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11893           last_poc_decl = p->poc_decl;
11894           if (poc_die)
11895             {
11896               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11897               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11898                                            "Caller DIE offset");
11899             }
11900         }
11901       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11902       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11903       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11904                                    "Callee DIE offset");
11905     }
11906 }
11907 \f
11908 /* Return the size of the .debug_vcall table for the compilation unit.  */
11909
11910 static unsigned long
11911 size_of_vcall_table (void)
11912 {
11913   unsigned long size;
11914   unsigned int i;
11915   vcall_entry *p;
11916
11917   /* Header:  version + pointer size.  */
11918   size = 2 + 1;
11919
11920   /* Each entry:  code label + vtable slot index.  */
11921   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11922     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11923
11924   return size;
11925 }
11926
11927 /* Output the virtual call table used to disambiguate PC values when
11928    identical function have been merged.  */
11929
11930 static void
11931 output_vcall_table (void)
11932 {
11933   unsigned i;
11934   unsigned long vcall_length = size_of_vcall_table ();
11935   vcall_entry *p;
11936   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11937
11938   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11939     dw2_asm_output_data (4, 0xffffffff,
11940       "Initial length escape value indicating 64-bit DWARF extension");
11941   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11942                        "Length of Virtual Call Table");
11943   dw2_asm_output_data (2, 4, "Version number");
11944   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11945
11946   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11947     {
11948       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11949       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11950       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11951     }
11952 }
11953 \f
11954 /* Given a pointer to a tree node for some base type, return a pointer to
11955    a DIE that describes the given type.
11956
11957    This routine must only be called for GCC type nodes that correspond to
11958    Dwarf base (fundamental) types.  */
11959
11960 static dw_die_ref
11961 base_type_die (tree type)
11962 {
11963   dw_die_ref base_type_result;
11964   enum dwarf_type encoding;
11965
11966   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11967     return 0;
11968
11969   /* If this is a subtype that should not be emitted as a subrange type,
11970      use the base type.  See subrange_type_for_debug_p.  */
11971   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11972     type = TREE_TYPE (type);
11973
11974   switch (TREE_CODE (type))
11975     {
11976     case INTEGER_TYPE:
11977       if (TYPE_STRING_FLAG (type))
11978         {
11979           if (TYPE_UNSIGNED (type))
11980             encoding = DW_ATE_unsigned_char;
11981           else
11982             encoding = DW_ATE_signed_char;
11983         }
11984       else if (TYPE_UNSIGNED (type))
11985         encoding = DW_ATE_unsigned;
11986       else
11987         encoding = DW_ATE_signed;
11988       break;
11989
11990     case REAL_TYPE:
11991       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
11992         {
11993           if (dwarf_version >= 3 || !dwarf_strict)
11994             encoding = DW_ATE_decimal_float;
11995           else
11996             encoding = DW_ATE_lo_user;
11997         }
11998       else
11999         encoding = DW_ATE_float;
12000       break;
12001
12002     case FIXED_POINT_TYPE:
12003       if (!(dwarf_version >= 3 || !dwarf_strict))
12004         encoding = DW_ATE_lo_user;
12005       else if (TYPE_UNSIGNED (type))
12006         encoding = DW_ATE_unsigned_fixed;
12007       else
12008         encoding = DW_ATE_signed_fixed;
12009       break;
12010
12011       /* Dwarf2 doesn't know anything about complex ints, so use
12012          a user defined type for it.  */
12013     case COMPLEX_TYPE:
12014       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12015         encoding = DW_ATE_complex_float;
12016       else
12017         encoding = DW_ATE_lo_user;
12018       break;
12019
12020     case BOOLEAN_TYPE:
12021       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12022       encoding = DW_ATE_boolean;
12023       break;
12024
12025     default:
12026       /* No other TREE_CODEs are Dwarf fundamental types.  */
12027       gcc_unreachable ();
12028     }
12029
12030   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12031
12032   /* This probably indicates a bug.  */
12033   if (! TYPE_NAME (type))
12034     add_name_attribute (base_type_result, "__unknown__");
12035
12036   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12037                    int_size_in_bytes (type));
12038   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12039
12040   return base_type_result;
12041 }
12042
12043 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12044    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12045
12046 static inline int
12047 is_base_type (tree type)
12048 {
12049   switch (TREE_CODE (type))
12050     {
12051     case ERROR_MARK:
12052     case VOID_TYPE:
12053     case INTEGER_TYPE:
12054     case REAL_TYPE:
12055     case FIXED_POINT_TYPE:
12056     case COMPLEX_TYPE:
12057     case BOOLEAN_TYPE:
12058       return 1;
12059
12060     case ARRAY_TYPE:
12061     case RECORD_TYPE:
12062     case UNION_TYPE:
12063     case QUAL_UNION_TYPE:
12064     case ENUMERAL_TYPE:
12065     case FUNCTION_TYPE:
12066     case METHOD_TYPE:
12067     case POINTER_TYPE:
12068     case REFERENCE_TYPE:
12069     case OFFSET_TYPE:
12070     case LANG_TYPE:
12071     case VECTOR_TYPE:
12072       return 0;
12073
12074     default:
12075       gcc_unreachable ();
12076     }
12077
12078   return 0;
12079 }
12080
12081 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12082    node, return the size in bits for the type if it is a constant, or else
12083    return the alignment for the type if the type's size is not constant, or
12084    else return BITS_PER_WORD if the type actually turns out to be an
12085    ERROR_MARK node.  */
12086
12087 static inline unsigned HOST_WIDE_INT
12088 simple_type_size_in_bits (const_tree type)
12089 {
12090   if (TREE_CODE (type) == ERROR_MARK)
12091     return BITS_PER_WORD;
12092   else if (TYPE_SIZE (type) == NULL_TREE)
12093     return 0;
12094   else if (host_integerp (TYPE_SIZE (type), 1))
12095     return tree_low_cst (TYPE_SIZE (type), 1);
12096   else
12097     return TYPE_ALIGN (type);
12098 }
12099
12100 /*  Given a pointer to a tree node for a subrange type, return a pointer
12101     to a DIE that describes the given type.  */
12102
12103 static dw_die_ref
12104 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12105 {
12106   dw_die_ref subrange_die;
12107   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12108
12109   if (context_die == NULL)
12110     context_die = comp_unit_die;
12111
12112   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12113
12114   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12115     {
12116       /* The size of the subrange type and its base type do not match,
12117          so we need to generate a size attribute for the subrange type.  */
12118       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12119     }
12120
12121   if (low)
12122     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12123   if (high)
12124     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12125
12126   return subrange_die;
12127 }
12128
12129 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12130    entry that chains various modifiers in front of the given type.  */
12131
12132 static dw_die_ref
12133 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12134                    dw_die_ref context_die)
12135 {
12136   enum tree_code code = TREE_CODE (type);
12137   dw_die_ref mod_type_die;
12138   dw_die_ref sub_die = NULL;
12139   tree item_type = NULL;
12140   tree qualified_type;
12141   tree name, low, high;
12142
12143   if (code == ERROR_MARK)
12144     return NULL;
12145
12146   /* See if we already have the appropriately qualified variant of
12147      this type.  */
12148   qualified_type
12149     = get_qualified_type (type,
12150                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12151                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12152
12153   /* If we do, then we can just use its DIE, if it exists.  */
12154   if (qualified_type)
12155     {
12156       mod_type_die = lookup_type_die (qualified_type);
12157       if (mod_type_die)
12158         return mod_type_die;
12159     }
12160
12161   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12162
12163   /* Handle C typedef types.  */
12164   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12165       && !DECL_ARTIFICIAL (name))
12166     {
12167       tree dtype = TREE_TYPE (name);
12168
12169       if (qualified_type == dtype)
12170         {
12171           /* For a named type, use the typedef.  */
12172           gen_type_die (qualified_type, context_die);
12173           return lookup_type_die (qualified_type);
12174         }
12175       else if (is_const_type < TYPE_READONLY (dtype)
12176                || is_volatile_type < TYPE_VOLATILE (dtype)
12177                || (is_const_type <= TYPE_READONLY (dtype)
12178                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12179                    && DECL_ORIGINAL_TYPE (name) != type))
12180         /* cv-unqualified version of named type.  Just use the unnamed
12181            type to which it refers.  */
12182         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12183                                   is_const_type, is_volatile_type,
12184                                   context_die);
12185       /* Else cv-qualified version of named type; fall through.  */
12186     }
12187
12188   if (is_const_type)
12189     {
12190       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12191       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12192     }
12193   else if (is_volatile_type)
12194     {
12195       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12196       sub_die = modified_type_die (type, 0, 0, context_die);
12197     }
12198   else if (code == POINTER_TYPE)
12199     {
12200       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12201       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12202                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12203       item_type = TREE_TYPE (type);
12204       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12205         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12206                          TYPE_ADDR_SPACE (item_type));
12207     }
12208   else if (code == REFERENCE_TYPE)
12209     {
12210       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12211         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12212                                 type);
12213       else
12214         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12215       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12216                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12217       item_type = TREE_TYPE (type);
12218       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12219         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12220                          TYPE_ADDR_SPACE (item_type));
12221     }
12222   else if (code == INTEGER_TYPE
12223            && TREE_TYPE (type) != NULL_TREE
12224            && subrange_type_for_debug_p (type, &low, &high))
12225     {
12226       mod_type_die = subrange_type_die (type, low, high, context_die);
12227       item_type = TREE_TYPE (type);
12228     }
12229   else if (is_base_type (type))
12230     mod_type_die = base_type_die (type);
12231   else
12232     {
12233       gen_type_die (type, context_die);
12234
12235       /* We have to get the type_main_variant here (and pass that to the
12236          `lookup_type_die' routine) because the ..._TYPE node we have
12237          might simply be a *copy* of some original type node (where the
12238          copy was created to help us keep track of typedef names) and
12239          that copy might have a different TYPE_UID from the original
12240          ..._TYPE node.  */
12241       if (TREE_CODE (type) != VECTOR_TYPE)
12242         return lookup_type_die (type_main_variant (type));
12243       else
12244         /* Vectors have the debugging information in the type,
12245            not the main variant.  */
12246         return lookup_type_die (type);
12247     }
12248
12249   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12250      don't output a DW_TAG_typedef, since there isn't one in the
12251      user's program; just attach a DW_AT_name to the type.
12252      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12253      if the base type already has the same name.  */
12254   if (name
12255       && ((TREE_CODE (name) != TYPE_DECL
12256            && (qualified_type == TYPE_MAIN_VARIANT (type)
12257                || (!is_const_type && !is_volatile_type)))
12258           || (TREE_CODE (name) == TYPE_DECL
12259               && TREE_TYPE (name) == qualified_type
12260               && DECL_NAME (name))))
12261     {
12262       if (TREE_CODE (name) == TYPE_DECL)
12263         /* Could just call add_name_and_src_coords_attributes here,
12264            but since this is a builtin type it doesn't have any
12265            useful source coordinates anyway.  */
12266         name = DECL_NAME (name);
12267       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12268     }
12269
12270   if (qualified_type)
12271     equate_type_number_to_die (qualified_type, mod_type_die);
12272
12273   if (item_type)
12274     /* We must do this after the equate_type_number_to_die call, in case
12275        this is a recursive type.  This ensures that the modified_type_die
12276        recursion will terminate even if the type is recursive.  Recursive
12277        types are possible in Ada.  */
12278     sub_die = modified_type_die (item_type,
12279                                  TYPE_READONLY (item_type),
12280                                  TYPE_VOLATILE (item_type),
12281                                  context_die);
12282
12283   if (sub_die != NULL)
12284     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12285
12286   return mod_type_die;
12287 }
12288
12289 /* Generate DIEs for the generic parameters of T.
12290    T must be either a generic type or a generic function.
12291    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12292
12293 static void
12294 gen_generic_params_dies (tree t)
12295 {
12296   tree parms, args;
12297   int parms_num, i;
12298   dw_die_ref die = NULL;
12299
12300   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12301     return;
12302
12303   if (TYPE_P (t))
12304     die = lookup_type_die (t);
12305   else if (DECL_P (t))
12306     die = lookup_decl_die (t);
12307
12308   gcc_assert (die);
12309
12310   parms = lang_hooks.get_innermost_generic_parms (t);
12311   if (!parms)
12312     /* T has no generic parameter. It means T is neither a generic type
12313        or function. End of story.  */
12314     return;
12315
12316   parms_num = TREE_VEC_LENGTH (parms);
12317   args = lang_hooks.get_innermost_generic_args (t);
12318   for (i = 0; i < parms_num; i++)
12319     {
12320       tree parm, arg, arg_pack_elems;
12321
12322       parm = TREE_VEC_ELT (parms, i);
12323       arg = TREE_VEC_ELT (args, i);
12324       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12325       gcc_assert (parm && TREE_VALUE (parm) && arg);
12326
12327       if (parm && TREE_VALUE (parm) && arg)
12328         {
12329           /* If PARM represents a template parameter pack,
12330              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12331              by DW_TAG_template_*_parameter DIEs for the argument
12332              pack elements of ARG. Note that ARG would then be
12333              an argument pack.  */
12334           if (arg_pack_elems)
12335             template_parameter_pack_die (TREE_VALUE (parm),
12336                                          arg_pack_elems,
12337                                          die);
12338           else
12339             generic_parameter_die (TREE_VALUE (parm), arg,
12340                                    true /* Emit DW_AT_name */, die);
12341         }
12342     }
12343 }
12344
12345 /* Create and return a DIE for PARM which should be
12346    the representation of a generic type parameter.
12347    For instance, in the C++ front end, PARM would be a template parameter.
12348    ARG is the argument to PARM.
12349    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12350    name of the PARM.
12351    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12352    as a child node.  */
12353
12354 static dw_die_ref
12355 generic_parameter_die (tree parm, tree arg,
12356                        bool emit_name_p,
12357                        dw_die_ref parent_die)
12358 {
12359   dw_die_ref tmpl_die = NULL;
12360   const char *name = NULL;
12361
12362   if (!parm || !DECL_NAME (parm) || !arg)
12363     return NULL;
12364
12365   /* We support non-type generic parameters and arguments,
12366      type generic parameters and arguments, as well as
12367      generic generic parameters (a.k.a. template template parameters in C++)
12368      and arguments.  */
12369   if (TREE_CODE (parm) == PARM_DECL)
12370     /* PARM is a nontype generic parameter  */
12371     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12372   else if (TREE_CODE (parm) == TYPE_DECL)
12373     /* PARM is a type generic parameter.  */
12374     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12375   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12376     /* PARM is a generic generic parameter.
12377        Its DIE is a GNU extension. It shall have a
12378        DW_AT_name attribute to represent the name of the template template
12379        parameter, and a DW_AT_GNU_template_name attribute to represent the
12380        name of the template template argument.  */
12381     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12382                         parent_die, parm);
12383   else
12384     gcc_unreachable ();
12385
12386   if (tmpl_die)
12387     {
12388       tree tmpl_type;
12389
12390       /* If PARM is a generic parameter pack, it means we are
12391          emitting debug info for a template argument pack element.
12392          In other terms, ARG is a template argument pack element.
12393          In that case, we don't emit any DW_AT_name attribute for
12394          the die.  */
12395       if (emit_name_p)
12396         {
12397           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12398           gcc_assert (name);
12399           add_AT_string (tmpl_die, DW_AT_name, name);
12400         }
12401
12402       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12403         {
12404           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12405              TMPL_DIE should have a child DW_AT_type attribute that is set
12406              to the type of the argument to PARM, which is ARG.
12407              If PARM is a type generic parameter, TMPL_DIE should have a
12408              child DW_AT_type that is set to ARG.  */
12409           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12410           add_type_attribute (tmpl_die, tmpl_type, 0,
12411                               TREE_THIS_VOLATILE (tmpl_type),
12412                               parent_die);
12413         }
12414       else
12415         {
12416           /* So TMPL_DIE is a DIE representing a
12417              a generic generic template parameter, a.k.a template template
12418              parameter in C++ and arg is a template.  */
12419
12420           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12421              to the name of the argument.  */
12422           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12423           if (name)
12424             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12425         }
12426
12427       if (TREE_CODE (parm) == PARM_DECL)
12428         /* So PARM is a non-type generic parameter.
12429            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12430            attribute of TMPL_DIE which value represents the value
12431            of ARG.
12432            We must be careful here:
12433            The value of ARG might reference some function decls.
12434            We might currently be emitting debug info for a generic
12435            type and types are emitted before function decls, we don't
12436            know if the function decls referenced by ARG will actually be
12437            emitted after cgraph computations.
12438            So must defer the generation of the DW_AT_const_value to
12439            after cgraph is ready.  */
12440         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12441     }
12442
12443   return tmpl_die;
12444 }
12445
12446 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12447    PARM_PACK must be a template parameter pack. The returned DIE
12448    will be child DIE of PARENT_DIE.  */
12449
12450 static dw_die_ref
12451 template_parameter_pack_die (tree parm_pack,
12452                              tree parm_pack_args,
12453                              dw_die_ref parent_die)
12454 {
12455   dw_die_ref die;
12456   int j;
12457
12458   gcc_assert (parent_die && parm_pack);
12459
12460   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12461   add_name_and_src_coords_attributes (die, parm_pack);
12462   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12463     generic_parameter_die (parm_pack,
12464                            TREE_VEC_ELT (parm_pack_args, j),
12465                            false /* Don't emit DW_AT_name */,
12466                            die);
12467   return die;
12468 }
12469
12470 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12471    an enumerated type.  */
12472
12473 static inline int
12474 type_is_enum (const_tree type)
12475 {
12476   return TREE_CODE (type) == ENUMERAL_TYPE;
12477 }
12478
12479 /* Return the DBX register number described by a given RTL node.  */
12480
12481 static unsigned int
12482 dbx_reg_number (const_rtx rtl)
12483 {
12484   unsigned regno = REGNO (rtl);
12485
12486   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12487
12488 #ifdef LEAF_REG_REMAP
12489   if (current_function_uses_only_leaf_regs)
12490     {
12491       int leaf_reg = LEAF_REG_REMAP (regno);
12492       if (leaf_reg != -1)
12493         regno = (unsigned) leaf_reg;
12494     }
12495 #endif
12496
12497   return DBX_REGISTER_NUMBER (regno);
12498 }
12499
12500 /* Optionally add a DW_OP_piece term to a location description expression.
12501    DW_OP_piece is only added if the location description expression already
12502    doesn't end with DW_OP_piece.  */
12503
12504 static void
12505 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12506 {
12507   dw_loc_descr_ref loc;
12508
12509   if (*list_head != NULL)
12510     {
12511       /* Find the end of the chain.  */
12512       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12513         ;
12514
12515       if (loc->dw_loc_opc != DW_OP_piece)
12516         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12517     }
12518 }
12519
12520 /* Return a location descriptor that designates a machine register or
12521    zero if there is none.  */
12522
12523 static dw_loc_descr_ref
12524 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12525 {
12526   rtx regs;
12527
12528   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12529     return 0;
12530
12531   regs = targetm.dwarf_register_span (rtl);
12532
12533   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12534     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12535   else
12536     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12537 }
12538
12539 /* Return a location descriptor that designates a machine register for
12540    a given hard register number.  */
12541
12542 static dw_loc_descr_ref
12543 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12544 {
12545   dw_loc_descr_ref reg_loc_descr;
12546
12547   if (regno <= 31)
12548     reg_loc_descr
12549       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12550   else
12551     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12552
12553   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12554     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12555
12556   return reg_loc_descr;
12557 }
12558
12559 /* Given an RTL of a register, return a location descriptor that
12560    designates a value that spans more than one register.  */
12561
12562 static dw_loc_descr_ref
12563 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12564                              enum var_init_status initialized)
12565 {
12566   int nregs, size, i;
12567   unsigned reg;
12568   dw_loc_descr_ref loc_result = NULL;
12569
12570   reg = REGNO (rtl);
12571 #ifdef LEAF_REG_REMAP
12572   if (current_function_uses_only_leaf_regs)
12573     {
12574       int leaf_reg = LEAF_REG_REMAP (reg);
12575       if (leaf_reg != -1)
12576         reg = (unsigned) leaf_reg;
12577     }
12578 #endif
12579   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12580   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12581
12582   /* Simple, contiguous registers.  */
12583   if (regs == NULL_RTX)
12584     {
12585       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12586
12587       loc_result = NULL;
12588       while (nregs--)
12589         {
12590           dw_loc_descr_ref t;
12591
12592           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12593                                       VAR_INIT_STATUS_INITIALIZED);
12594           add_loc_descr (&loc_result, t);
12595           add_loc_descr_op_piece (&loc_result, size);
12596           ++reg;
12597         }
12598       return loc_result;
12599     }
12600
12601   /* Now onto stupid register sets in non contiguous locations.  */
12602
12603   gcc_assert (GET_CODE (regs) == PARALLEL);
12604
12605   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12606   loc_result = NULL;
12607
12608   for (i = 0; i < XVECLEN (regs, 0); ++i)
12609     {
12610       dw_loc_descr_ref t;
12611
12612       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12613                                   VAR_INIT_STATUS_INITIALIZED);
12614       add_loc_descr (&loc_result, t);
12615       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12616       add_loc_descr_op_piece (&loc_result, size);
12617     }
12618
12619   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12620     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12621   return loc_result;
12622 }
12623
12624 #endif /* DWARF2_DEBUGGING_INFO */
12625
12626 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12627
12628 /* Return a location descriptor that designates a constant.  */
12629
12630 static dw_loc_descr_ref
12631 int_loc_descriptor (HOST_WIDE_INT i)
12632 {
12633   enum dwarf_location_atom op;
12634
12635   /* Pick the smallest representation of a constant, rather than just
12636      defaulting to the LEB encoding.  */
12637   if (i >= 0)
12638     {
12639       if (i <= 31)
12640         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12641       else if (i <= 0xff)
12642         op = DW_OP_const1u;
12643       else if (i <= 0xffff)
12644         op = DW_OP_const2u;
12645       else if (HOST_BITS_PER_WIDE_INT == 32
12646                || i <= 0xffffffff)
12647         op = DW_OP_const4u;
12648       else
12649         op = DW_OP_constu;
12650     }
12651   else
12652     {
12653       if (i >= -0x80)
12654         op = DW_OP_const1s;
12655       else if (i >= -0x8000)
12656         op = DW_OP_const2s;
12657       else if (HOST_BITS_PER_WIDE_INT == 32
12658                || i >= -0x80000000)
12659         op = DW_OP_const4s;
12660       else
12661         op = DW_OP_consts;
12662     }
12663
12664   return new_loc_descr (op, i, 0);
12665 }
12666 #endif
12667
12668 #ifdef DWARF2_DEBUGGING_INFO
12669 /* Return loc description representing "address" of integer value.
12670    This can appear only as toplevel expression.  */
12671
12672 static dw_loc_descr_ref
12673 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12674 {
12675   int litsize;
12676   dw_loc_descr_ref loc_result = NULL;
12677
12678   if (!(dwarf_version >= 4 || !dwarf_strict))
12679     return NULL;
12680
12681   if (i >= 0)
12682     {
12683       if (i <= 31)
12684         litsize = 1;
12685       else if (i <= 0xff)
12686         litsize = 2;
12687       else if (i <= 0xffff)
12688         litsize = 3;
12689       else if (HOST_BITS_PER_WIDE_INT == 32
12690                || i <= 0xffffffff)
12691         litsize = 5;
12692       else
12693         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12694     }
12695   else
12696     {
12697       if (i >= -0x80)
12698         litsize = 2;
12699       else if (i >= -0x8000)
12700         litsize = 3;
12701       else if (HOST_BITS_PER_WIDE_INT == 32
12702                || i >= -0x80000000)
12703         litsize = 5;
12704       else
12705         litsize = 1 + size_of_sleb128 (i);
12706     }
12707   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12708      is more compact.  For DW_OP_stack_value we need:
12709      litsize + 1 (DW_OP_stack_value)
12710      and for DW_OP_implicit_value:
12711      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12712   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12713     {
12714       loc_result = int_loc_descriptor (i);
12715       add_loc_descr (&loc_result,
12716                      new_loc_descr (DW_OP_stack_value, 0, 0));
12717       return loc_result;
12718     }
12719
12720   loc_result = new_loc_descr (DW_OP_implicit_value,
12721                               size, 0);
12722   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12723   loc_result->dw_loc_oprnd2.v.val_int = i;
12724   return loc_result;
12725 }
12726
12727 /* Return a location descriptor that designates a base+offset location.  */
12728
12729 static dw_loc_descr_ref
12730 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12731                  enum var_init_status initialized)
12732 {
12733   unsigned int regno;
12734   dw_loc_descr_ref result;
12735   dw_fde_ref fde = current_fde ();
12736
12737   /* We only use "frame base" when we're sure we're talking about the
12738      post-prologue local stack frame.  We do this by *not* running
12739      register elimination until this point, and recognizing the special
12740      argument pointer and soft frame pointer rtx's.  */
12741   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12742     {
12743       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12744
12745       if (elim != reg)
12746         {
12747           if (GET_CODE (elim) == PLUS)
12748             {
12749               offset += INTVAL (XEXP (elim, 1));
12750               elim = XEXP (elim, 0);
12751             }
12752           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12753                        && (elim == hard_frame_pointer_rtx
12754                            || elim == stack_pointer_rtx))
12755                       || elim == (frame_pointer_needed
12756                                   ? hard_frame_pointer_rtx
12757                                   : stack_pointer_rtx));
12758
12759           /* If drap register is used to align stack, use frame
12760              pointer + offset to access stack variables.  If stack
12761              is aligned without drap, use stack pointer + offset to
12762              access stack variables.  */
12763           if (crtl->stack_realign_tried
12764               && reg == frame_pointer_rtx)
12765             {
12766               int base_reg
12767                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12768                                       ? HARD_FRAME_POINTER_REGNUM
12769                                       : STACK_POINTER_REGNUM);
12770               return new_reg_loc_descr (base_reg, offset);
12771             }
12772
12773           offset += frame_pointer_fb_offset;
12774           return new_loc_descr (DW_OP_fbreg, offset, 0);
12775         }
12776     }
12777   else if (!optimize
12778            && fde
12779            && (fde->drap_reg == REGNO (reg)
12780                || fde->vdrap_reg == REGNO (reg)))
12781     {
12782       /* Use cfa+offset to represent the location of arguments passed
12783          on the stack when drap is used to align stack.
12784          Only do this when not optimizing, for optimized code var-tracking
12785          is supposed to track where the arguments live and the register
12786          used as vdrap or drap in some spot might be used for something
12787          else in other part of the routine.  */
12788       return new_loc_descr (DW_OP_fbreg, offset, 0);
12789     }
12790
12791   regno = dbx_reg_number (reg);
12792   if (regno <= 31)
12793     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12794                             offset, 0);
12795   else
12796     result = new_loc_descr (DW_OP_bregx, regno, offset);
12797
12798   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12799     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12800
12801   return result;
12802 }
12803
12804 /* Return true if this RTL expression describes a base+offset calculation.  */
12805
12806 static inline int
12807 is_based_loc (const_rtx rtl)
12808 {
12809   return (GET_CODE (rtl) == PLUS
12810           && ((REG_P (XEXP (rtl, 0))
12811                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12812                && CONST_INT_P (XEXP (rtl, 1)))));
12813 }
12814
12815 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12816    failed.  */
12817
12818 static dw_loc_descr_ref
12819 tls_mem_loc_descriptor (rtx mem)
12820 {
12821   tree base;
12822   dw_loc_descr_ref loc_result;
12823
12824   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12825     return NULL;
12826
12827   base = get_base_address (MEM_EXPR (mem));
12828   if (base == NULL
12829       || TREE_CODE (base) != VAR_DECL
12830       || !DECL_THREAD_LOCAL_P (base))
12831     return NULL;
12832
12833   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12834   if (loc_result == NULL)
12835     return NULL;
12836
12837   if (INTVAL (MEM_OFFSET (mem)))
12838     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12839
12840   return loc_result;
12841 }
12842
12843 /* Output debug info about reason why we failed to expand expression as dwarf
12844    expression.  */
12845
12846 static void
12847 expansion_failed (tree expr, rtx rtl, char const *reason)
12848 {
12849   if (dump_file && (dump_flags & TDF_DETAILS))
12850     {
12851       fprintf (dump_file, "Failed to expand as dwarf: ");
12852       if (expr)
12853         print_generic_expr (dump_file, expr, dump_flags);
12854       if (rtl)
12855         {
12856           fprintf (dump_file, "\n");
12857           print_rtl (dump_file, rtl);
12858         }
12859       fprintf (dump_file, "\nReason: %s\n", reason);
12860     }
12861 }
12862
12863 /* Helper function for const_ok_for_output, called either directly
12864    or via for_each_rtx.  */
12865
12866 static int
12867 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12868 {
12869   rtx rtl = *rtlp;
12870
12871   if (GET_CODE (rtl) == UNSPEC)
12872     {
12873       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12874          we can't express it in the debug info.  */
12875 #ifdef ENABLE_CHECKING
12876       inform (current_function_decl
12877               ? DECL_SOURCE_LOCATION (current_function_decl)
12878               : UNKNOWN_LOCATION,
12879               "non-delegitimized UNSPEC %d found in variable location",
12880               XINT (rtl, 1));
12881 #endif
12882       expansion_failed (NULL_TREE, rtl,
12883                         "UNSPEC hasn't been delegitimized.\n");
12884       return 1;
12885     }
12886
12887   if (GET_CODE (rtl) != SYMBOL_REF)
12888     return 0;
12889
12890   if (CONSTANT_POOL_ADDRESS_P (rtl))
12891     {
12892       bool marked;
12893       get_pool_constant_mark (rtl, &marked);
12894       /* If all references to this pool constant were optimized away,
12895          it was not output and thus we can't represent it.  */
12896       if (!marked)
12897         {
12898           expansion_failed (NULL_TREE, rtl,
12899                             "Constant was removed from constant pool.\n");
12900           return 1;
12901         }
12902     }
12903
12904   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12905     return 1;
12906
12907   /* Avoid references to external symbols in debug info, on several targets
12908      the linker might even refuse to link when linking a shared library,
12909      and in many other cases the relocations for .debug_info/.debug_loc are
12910      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12911      to be defined within the same shared library or executable are fine.  */
12912   if (SYMBOL_REF_EXTERNAL_P (rtl))
12913     {
12914       tree decl = SYMBOL_REF_DECL (rtl);
12915
12916       if (decl == NULL || !targetm.binds_local_p (decl))
12917         {
12918           expansion_failed (NULL_TREE, rtl,
12919                             "Symbol not defined in current TU.\n");
12920           return 1;
12921         }
12922     }
12923
12924   return 0;
12925 }
12926
12927 /* Return true if constant RTL can be emitted in DW_OP_addr or
12928    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12929    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12930
12931 static bool
12932 const_ok_for_output (rtx rtl)
12933 {
12934   if (GET_CODE (rtl) == SYMBOL_REF)
12935     return const_ok_for_output_1 (&rtl, NULL) == 0;
12936
12937   if (GET_CODE (rtl) == CONST)
12938     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12939
12940   return true;
12941 }
12942
12943 /* The following routine converts the RTL for a variable or parameter
12944    (resident in memory) into an equivalent Dwarf representation of a
12945    mechanism for getting the address of that same variable onto the top of a
12946    hypothetical "address evaluation" stack.
12947
12948    When creating memory location descriptors, we are effectively transforming
12949    the RTL for a memory-resident object into its Dwarf postfix expression
12950    equivalent.  This routine recursively descends an RTL tree, turning
12951    it into Dwarf postfix code as it goes.
12952
12953    MODE is the mode of the memory reference, needed to handle some
12954    autoincrement addressing modes.
12955
12956    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12957    location list for RTL.
12958
12959    Return 0 if we can't represent the location.  */
12960
12961 static dw_loc_descr_ref
12962 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12963                     enum var_init_status initialized)
12964 {
12965   dw_loc_descr_ref mem_loc_result = NULL;
12966   enum dwarf_location_atom op;
12967   dw_loc_descr_ref op0, op1;
12968
12969   /* Note that for a dynamically sized array, the location we will generate a
12970      description of here will be the lowest numbered location which is
12971      actually within the array.  That's *not* necessarily the same as the
12972      zeroth element of the array.  */
12973
12974   rtl = targetm.delegitimize_address (rtl);
12975
12976   switch (GET_CODE (rtl))
12977     {
12978     case POST_INC:
12979     case POST_DEC:
12980     case POST_MODIFY:
12981       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12982
12983     case SUBREG:
12984       /* The case of a subreg may arise when we have a local (register)
12985          variable or a formal (register) parameter which doesn't quite fill
12986          up an entire register.  For now, just assume that it is
12987          legitimate to make the Dwarf info refer to the whole register which
12988          contains the given subreg.  */
12989       if (!subreg_lowpart_p (rtl))
12990         break;
12991       rtl = SUBREG_REG (rtl);
12992       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
12993         break;
12994       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
12995         break;
12996       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
12997       break;
12998
12999     case REG:
13000       /* Whenever a register number forms a part of the description of the
13001          method for calculating the (dynamic) address of a memory resident
13002          object, DWARF rules require the register number be referred to as
13003          a "base register".  This distinction is not based in any way upon
13004          what category of register the hardware believes the given register
13005          belongs to.  This is strictly DWARF terminology we're dealing with
13006          here. Note that in cases where the location of a memory-resident
13007          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13008          OP_CONST (0)) the actual DWARF location descriptor that we generate
13009          may just be OP_BASEREG (basereg).  This may look deceptively like
13010          the object in question was allocated to a register (rather than in
13011          memory) so DWARF consumers need to be aware of the subtle
13012          distinction between OP_REG and OP_BASEREG.  */
13013       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13014         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13015       else if (stack_realign_drap
13016                && crtl->drap_reg
13017                && crtl->args.internal_arg_pointer == rtl
13018                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13019         {
13020           /* If RTL is internal_arg_pointer, which has been optimized
13021              out, use DRAP instead.  */
13022           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13023                                             VAR_INIT_STATUS_INITIALIZED);
13024         }
13025       break;
13026
13027     case SIGN_EXTEND:
13028     case ZERO_EXTEND:
13029       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13030                                 VAR_INIT_STATUS_INITIALIZED);
13031       if (op0 == 0)
13032         break;
13033       else
13034         {
13035           int shift = DWARF2_ADDR_SIZE
13036                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13037           shift *= BITS_PER_UNIT;
13038           if (GET_CODE (rtl) == SIGN_EXTEND)
13039             op = DW_OP_shra;
13040           else
13041             op = DW_OP_shr;
13042           mem_loc_result = op0;
13043           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13044           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13045           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13046           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13047         }
13048       break;
13049
13050     case MEM:
13051       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13052                                            VAR_INIT_STATUS_INITIALIZED);
13053       if (mem_loc_result == NULL)
13054         mem_loc_result = tls_mem_loc_descriptor (rtl);
13055       if (mem_loc_result != 0)
13056         {
13057           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13058             {
13059               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13060               return 0;
13061             }
13062           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13063             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13064           else
13065             add_loc_descr (&mem_loc_result,
13066                            new_loc_descr (DW_OP_deref_size,
13067                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13068         }
13069       else
13070         {
13071           rtx new_rtl = avoid_constant_pool_reference (rtl);
13072           if (new_rtl != rtl)
13073             return mem_loc_descriptor (new_rtl, mode, initialized);
13074         }
13075       break;
13076
13077     case LO_SUM:
13078          rtl = XEXP (rtl, 1);
13079
13080       /* ... fall through ...  */
13081
13082     case LABEL_REF:
13083       /* Some ports can transform a symbol ref into a label ref, because
13084          the symbol ref is too far away and has to be dumped into a constant
13085          pool.  */
13086     case CONST:
13087     case SYMBOL_REF:
13088       if (GET_CODE (rtl) == SYMBOL_REF
13089           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13090         {
13091           dw_loc_descr_ref temp;
13092
13093           /* If this is not defined, we have no way to emit the data.  */
13094           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13095             break;
13096
13097           temp = new_loc_descr (DW_OP_addr, 0, 0);
13098           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13099           temp->dw_loc_oprnd1.v.val_addr = rtl;
13100           temp->dtprel = true;
13101
13102           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13103           add_loc_descr (&mem_loc_result, temp);
13104
13105           break;
13106         }
13107
13108       if (!const_ok_for_output (rtl))
13109         break;
13110
13111     symref:
13112       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13113       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13114       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13115       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13116       break;
13117
13118     case CONCAT:
13119     case CONCATN:
13120     case VAR_LOCATION:
13121       expansion_failed (NULL_TREE, rtl,
13122                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13123       return 0;
13124
13125     case PRE_MODIFY:
13126       /* Extract the PLUS expression nested inside and fall into
13127          PLUS code below.  */
13128       rtl = XEXP (rtl, 1);
13129       goto plus;
13130
13131     case PRE_INC:
13132     case PRE_DEC:
13133       /* Turn these into a PLUS expression and fall into the PLUS code
13134          below.  */
13135       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13136                           GEN_INT (GET_CODE (rtl) == PRE_INC
13137                                    ? GET_MODE_UNIT_SIZE (mode)
13138                                    : -GET_MODE_UNIT_SIZE (mode)));
13139
13140       /* ... fall through ...  */
13141
13142     case PLUS:
13143     plus:
13144       if (is_based_loc (rtl))
13145         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13146                                           INTVAL (XEXP (rtl, 1)),
13147                                           VAR_INIT_STATUS_INITIALIZED);
13148       else
13149         {
13150           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13151                                                VAR_INIT_STATUS_INITIALIZED);
13152           if (mem_loc_result == 0)
13153             break;
13154
13155           if (CONST_INT_P (XEXP (rtl, 1)))
13156             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13157           else
13158             {
13159               dw_loc_descr_ref mem_loc_result2
13160                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13161                                       VAR_INIT_STATUS_INITIALIZED);
13162               if (mem_loc_result2 == 0)
13163                 break;
13164               add_loc_descr (&mem_loc_result, mem_loc_result2);
13165               add_loc_descr (&mem_loc_result,
13166                              new_loc_descr (DW_OP_plus, 0, 0));
13167             }
13168         }
13169       break;
13170
13171     /* If a pseudo-reg is optimized away, it is possible for it to
13172        be replaced with a MEM containing a multiply or shift.  */
13173     case MINUS:
13174       op = DW_OP_minus;
13175       goto do_binop;
13176
13177     case MULT:
13178       op = DW_OP_mul;
13179       goto do_binop;
13180
13181     case DIV:
13182       op = DW_OP_div;
13183       goto do_binop;
13184
13185     case UMOD:
13186       op = DW_OP_mod;
13187       goto do_binop;
13188
13189     case ASHIFT:
13190       op = DW_OP_shl;
13191       goto do_binop;
13192
13193     case ASHIFTRT:
13194       op = DW_OP_shra;
13195       goto do_binop;
13196
13197     case LSHIFTRT:
13198       op = DW_OP_shr;
13199       goto do_binop;
13200
13201     case AND:
13202       op = DW_OP_and;
13203       goto do_binop;
13204
13205     case IOR:
13206       op = DW_OP_or;
13207       goto do_binop;
13208
13209     case XOR:
13210       op = DW_OP_xor;
13211       goto do_binop;
13212
13213     do_binop:
13214       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13215                                 VAR_INIT_STATUS_INITIALIZED);
13216       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13217                                 VAR_INIT_STATUS_INITIALIZED);
13218
13219       if (op0 == 0 || op1 == 0)
13220         break;
13221
13222       mem_loc_result = op0;
13223       add_loc_descr (&mem_loc_result, op1);
13224       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13225       break;
13226
13227     case MOD:
13228       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13229                                 VAR_INIT_STATUS_INITIALIZED);
13230       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13231                                 VAR_INIT_STATUS_INITIALIZED);
13232
13233       if (op0 == 0 || op1 == 0)
13234         break;
13235
13236       mem_loc_result = op0;
13237       add_loc_descr (&mem_loc_result, op1);
13238       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13239       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13240       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13241       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13242       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13243       break;
13244
13245     case NOT:
13246       op = DW_OP_not;
13247       goto do_unop;
13248
13249     case ABS:
13250       op = DW_OP_abs;
13251       goto do_unop;
13252
13253     case NEG:
13254       op = DW_OP_neg;
13255       goto do_unop;
13256
13257     do_unop:
13258       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13259                                 VAR_INIT_STATUS_INITIALIZED);
13260
13261       if (op0 == 0)
13262         break;
13263
13264       mem_loc_result = op0;
13265       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13266       break;
13267
13268     case CONST_INT:
13269       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13270       break;
13271
13272     case EQ:
13273       op = DW_OP_eq;
13274       goto do_scompare;
13275
13276     case GE:
13277       op = DW_OP_ge;
13278       goto do_scompare;
13279
13280     case GT:
13281       op = DW_OP_gt;
13282       goto do_scompare;
13283
13284     case LE:
13285       op = DW_OP_le;
13286       goto do_scompare;
13287
13288     case LT:
13289       op = DW_OP_lt;
13290       goto do_scompare;
13291
13292     case NE:
13293       op = DW_OP_ne;
13294       goto do_scompare;
13295
13296     do_scompare:
13297       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13298           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13299         break;
13300       else
13301         {
13302           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13303
13304           if (op_mode == VOIDmode)
13305             op_mode = GET_MODE (XEXP (rtl, 1));
13306           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13307             break;
13308
13309           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13310                                     VAR_INIT_STATUS_INITIALIZED);
13311           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13312                                     VAR_INIT_STATUS_INITIALIZED);
13313
13314           if (op0 == 0 || op1 == 0)
13315             break;
13316
13317           if (op_mode != VOIDmode
13318               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13319             {
13320               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13321               shift *= BITS_PER_UNIT;
13322               /* For eq/ne, if the operands are known to be zero-extended,
13323                  there is no need to do the fancy shifting up.  */
13324               if (op == DW_OP_eq || op == DW_OP_ne)
13325                 {
13326                   dw_loc_descr_ref last0, last1;
13327                   for (last0 = op0;
13328                        last0->dw_loc_next != NULL;
13329                        last0 = last0->dw_loc_next)
13330                     ;
13331                   for (last1 = op1;
13332                        last1->dw_loc_next != NULL;
13333                        last1 = last1->dw_loc_next)
13334                     ;
13335                   /* deref_size zero extends, and for constants we can check
13336                      whether they are zero extended or not.  */
13337                   if (((last0->dw_loc_opc == DW_OP_deref_size
13338                         && last0->dw_loc_oprnd1.v.val_int
13339                            <= GET_MODE_SIZE (op_mode))
13340                        || (CONST_INT_P (XEXP (rtl, 0))
13341                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13342                                == (INTVAL (XEXP (rtl, 0))
13343                                    & GET_MODE_MASK (op_mode))))
13344                       && ((last1->dw_loc_opc == DW_OP_deref_size
13345                            && last1->dw_loc_oprnd1.v.val_int
13346                               <= GET_MODE_SIZE (op_mode))
13347                           || (CONST_INT_P (XEXP (rtl, 1))
13348                               && (unsigned HOST_WIDE_INT)
13349                                  INTVAL (XEXP (rtl, 1))
13350                                  == (INTVAL (XEXP (rtl, 1))
13351                                      & GET_MODE_MASK (op_mode)))))
13352                     goto do_compare;
13353                 }
13354               add_loc_descr (&op0, int_loc_descriptor (shift));
13355               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13356               if (CONST_INT_P (XEXP (rtl, 1)))
13357                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13358               else
13359                 {
13360                   add_loc_descr (&op1, int_loc_descriptor (shift));
13361                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13362                 }
13363             }
13364         }
13365
13366     do_compare:
13367       mem_loc_result = op0;
13368       add_loc_descr (&mem_loc_result, op1);
13369       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13370       if (STORE_FLAG_VALUE != 1)
13371         {
13372           add_loc_descr (&mem_loc_result,
13373                          int_loc_descriptor (STORE_FLAG_VALUE));
13374           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13375         }
13376       break;
13377
13378     case GEU:
13379       op = DW_OP_ge;
13380       goto do_ucompare;
13381
13382     case GTU:
13383       op = DW_OP_gt;
13384       goto do_ucompare;
13385
13386     case LEU:
13387       op = DW_OP_le;
13388       goto do_ucompare;
13389
13390     case LTU:
13391       op = DW_OP_lt;
13392       goto do_ucompare;
13393
13394     do_ucompare:
13395       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13396           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13397         break;
13398       else
13399         {
13400           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13401
13402           if (op_mode == VOIDmode)
13403             op_mode = GET_MODE (XEXP (rtl, 1));
13404           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13405             break;
13406
13407           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13408                                     VAR_INIT_STATUS_INITIALIZED);
13409           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13410                                     VAR_INIT_STATUS_INITIALIZED);
13411
13412           if (op0 == 0 || op1 == 0)
13413             break;
13414
13415           if (op_mode != VOIDmode
13416               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13417             {
13418               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13419               dw_loc_descr_ref last0, last1;
13420               for (last0 = op0;
13421                    last0->dw_loc_next != NULL;
13422                    last0 = last0->dw_loc_next)
13423                 ;
13424               for (last1 = op1;
13425                    last1->dw_loc_next != NULL;
13426                    last1 = last1->dw_loc_next)
13427                 ;
13428               if (CONST_INT_P (XEXP (rtl, 0)))
13429                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13430               /* deref_size zero extends, so no need to mask it again.  */
13431               else if (last0->dw_loc_opc != DW_OP_deref_size
13432                        || last0->dw_loc_oprnd1.v.val_int
13433                           > GET_MODE_SIZE (op_mode))
13434                 {
13435                   add_loc_descr (&op0, int_loc_descriptor (mask));
13436                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13437                 }
13438               if (CONST_INT_P (XEXP (rtl, 1)))
13439                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13440               /* deref_size zero extends, so no need to mask it again.  */
13441               else if (last1->dw_loc_opc != DW_OP_deref_size
13442                        || last1->dw_loc_oprnd1.v.val_int
13443                           > GET_MODE_SIZE (op_mode))
13444                 {
13445                   add_loc_descr (&op1, int_loc_descriptor (mask));
13446                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13447                 }
13448             }
13449           else
13450             {
13451               HOST_WIDE_INT bias = 1;
13452               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13453               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13454               if (CONST_INT_P (XEXP (rtl, 1)))
13455                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13456                                           + INTVAL (XEXP (rtl, 1)));
13457               else
13458                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13459                                                     bias, 0));
13460             }
13461         }
13462       goto do_compare;
13463
13464     case SMIN:
13465     case SMAX:
13466     case UMIN:
13467     case UMAX:
13468       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13469           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13470           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13471         break;
13472
13473       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13474                                 VAR_INIT_STATUS_INITIALIZED);
13475       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13476                                 VAR_INIT_STATUS_INITIALIZED);
13477
13478       if (op0 == 0 || op1 == 0)
13479         break;
13480
13481       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13482       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13483       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13484       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13485         {
13486           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13487             {
13488               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13489               add_loc_descr (&op0, int_loc_descriptor (mask));
13490               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13491               add_loc_descr (&op1, int_loc_descriptor (mask));
13492               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13493             }
13494           else
13495             {
13496               HOST_WIDE_INT bias = 1;
13497               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13498               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13499               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13500             }
13501         }
13502       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13503         {
13504           int shift = DWARF2_ADDR_SIZE
13505                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13506           shift *= BITS_PER_UNIT;
13507           add_loc_descr (&op0, int_loc_descriptor (shift));
13508           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13509           add_loc_descr (&op1, int_loc_descriptor (shift));
13510           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13511         }
13512
13513       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13514         op = DW_OP_lt;
13515       else
13516         op = DW_OP_gt;
13517       mem_loc_result = op0;
13518       add_loc_descr (&mem_loc_result, op1);
13519       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13520       {
13521         dw_loc_descr_ref bra_node, drop_node;
13522
13523         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13524         add_loc_descr (&mem_loc_result, bra_node);
13525         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13526         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13527         add_loc_descr (&mem_loc_result, drop_node);
13528         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13529         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13530       }
13531       break;
13532
13533     case ZERO_EXTRACT:
13534     case SIGN_EXTRACT:
13535       if (CONST_INT_P (XEXP (rtl, 1))
13536           && CONST_INT_P (XEXP (rtl, 2))
13537           && ((unsigned) INTVAL (XEXP (rtl, 1))
13538               + (unsigned) INTVAL (XEXP (rtl, 2))
13539               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13540           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13541           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13542         {
13543           int shift, size;
13544           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13545                                     VAR_INIT_STATUS_INITIALIZED);
13546           if (op0 == 0)
13547             break;
13548           if (GET_CODE (rtl) == SIGN_EXTRACT)
13549             op = DW_OP_shra;
13550           else
13551             op = DW_OP_shr;
13552           mem_loc_result = op0;
13553           size = INTVAL (XEXP (rtl, 1));
13554           shift = INTVAL (XEXP (rtl, 2));
13555           if (BITS_BIG_ENDIAN)
13556             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13557                     - shift - size;
13558           if (shift + size != (int) DWARF2_ADDR_SIZE)
13559             {
13560               add_loc_descr (&mem_loc_result,
13561                              int_loc_descriptor (DWARF2_ADDR_SIZE
13562                                                  - shift - size));
13563               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13564             }
13565           if (size != (int) DWARF2_ADDR_SIZE)
13566             {
13567               add_loc_descr (&mem_loc_result,
13568                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13569               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13570             }
13571         }
13572       break;
13573
13574     case COMPARE:
13575     case IF_THEN_ELSE:
13576     case ROTATE:
13577     case ROTATERT:
13578     case TRUNCATE:
13579       /* In theory, we could implement the above.  */
13580       /* DWARF cannot represent the unsigned compare operations
13581          natively.  */
13582     case SS_MULT:
13583     case US_MULT:
13584     case SS_DIV:
13585     case US_DIV:
13586     case SS_PLUS:
13587     case US_PLUS:
13588     case SS_MINUS:
13589     case US_MINUS:
13590     case SS_NEG:
13591     case US_NEG:
13592     case SS_ABS:
13593     case SS_ASHIFT:
13594     case US_ASHIFT:
13595     case SS_TRUNCATE:
13596     case US_TRUNCATE:
13597     case UDIV:
13598     case UNORDERED:
13599     case ORDERED:
13600     case UNEQ:
13601     case UNGE:
13602     case UNGT:
13603     case UNLE:
13604     case UNLT:
13605     case LTGT:
13606     case FLOAT_EXTEND:
13607     case FLOAT_TRUNCATE:
13608     case FLOAT:
13609     case UNSIGNED_FLOAT:
13610     case FIX:
13611     case UNSIGNED_FIX:
13612     case FRACT_CONVERT:
13613     case UNSIGNED_FRACT_CONVERT:
13614     case SAT_FRACT:
13615     case UNSIGNED_SAT_FRACT:
13616     case SQRT:
13617     case BSWAP:
13618     case FFS:
13619     case CLZ:
13620     case CTZ:
13621     case POPCOUNT:
13622     case PARITY:
13623     case ASM_OPERANDS:
13624     case VEC_MERGE:
13625     case VEC_SELECT:
13626     case VEC_CONCAT:
13627     case VEC_DUPLICATE:
13628     case UNSPEC:
13629     case HIGH:
13630       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13631          can't express it in the debug info.  This can happen e.g. with some
13632          TLS UNSPECs.  */
13633       break;
13634
13635     case CONST_STRING:
13636       resolve_one_addr (&rtl, NULL);
13637       goto symref;
13638
13639     default:
13640 #ifdef ENABLE_CHECKING
13641       print_rtl (stderr, rtl);
13642       gcc_unreachable ();
13643 #else
13644       break;
13645 #endif
13646     }
13647
13648   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13649     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13650
13651   return mem_loc_result;
13652 }
13653
13654 /* Return a descriptor that describes the concatenation of two locations.
13655    This is typically a complex variable.  */
13656
13657 static dw_loc_descr_ref
13658 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13659 {
13660   dw_loc_descr_ref cc_loc_result = NULL;
13661   dw_loc_descr_ref x0_ref
13662     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13663   dw_loc_descr_ref x1_ref
13664     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13665
13666   if (x0_ref == 0 || x1_ref == 0)
13667     return 0;
13668
13669   cc_loc_result = x0_ref;
13670   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13671
13672   add_loc_descr (&cc_loc_result, x1_ref);
13673   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13674
13675   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13676     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13677
13678   return cc_loc_result;
13679 }
13680
13681 /* Return a descriptor that describes the concatenation of N
13682    locations.  */
13683
13684 static dw_loc_descr_ref
13685 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13686 {
13687   unsigned int i;
13688   dw_loc_descr_ref cc_loc_result = NULL;
13689   unsigned int n = XVECLEN (concatn, 0);
13690
13691   for (i = 0; i < n; ++i)
13692     {
13693       dw_loc_descr_ref ref;
13694       rtx x = XVECEXP (concatn, 0, i);
13695
13696       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13697       if (ref == NULL)
13698         return NULL;
13699
13700       add_loc_descr (&cc_loc_result, ref);
13701       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13702     }
13703
13704   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13705     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13706
13707   return cc_loc_result;
13708 }
13709
13710 /* Output a proper Dwarf location descriptor for a variable or parameter
13711    which is either allocated in a register or in a memory location.  For a
13712    register, we just generate an OP_REG and the register number.  For a
13713    memory location we provide a Dwarf postfix expression describing how to
13714    generate the (dynamic) address of the object onto the address stack.
13715
13716    MODE is mode of the decl if this loc_descriptor is going to be used in
13717    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13718    allowed, VOIDmode otherwise.
13719
13720    If we don't know how to describe it, return 0.  */
13721
13722 static dw_loc_descr_ref
13723 loc_descriptor (rtx rtl, enum machine_mode mode,
13724                 enum var_init_status initialized)
13725 {
13726   dw_loc_descr_ref loc_result = NULL;
13727
13728   switch (GET_CODE (rtl))
13729     {
13730     case SUBREG:
13731       /* The case of a subreg may arise when we have a local (register)
13732          variable or a formal (register) parameter which doesn't quite fill
13733          up an entire register.  For now, just assume that it is
13734          legitimate to make the Dwarf info refer to the whole register which
13735          contains the given subreg.  */
13736       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13737       break;
13738
13739     case REG:
13740       loc_result = reg_loc_descriptor (rtl, initialized);
13741       break;
13742
13743     case SIGN_EXTEND:
13744     case ZERO_EXTEND:
13745       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13746       break;
13747
13748     case MEM:
13749       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13750                                        initialized);
13751       if (loc_result == NULL)
13752         loc_result = tls_mem_loc_descriptor (rtl);
13753       if (loc_result == NULL)
13754         {
13755           rtx new_rtl = avoid_constant_pool_reference (rtl);
13756           if (new_rtl != rtl)
13757             loc_result = loc_descriptor (new_rtl, mode, initialized);
13758         }
13759       break;
13760
13761     case CONCAT:
13762       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13763                                           initialized);
13764       break;
13765
13766     case CONCATN:
13767       loc_result = concatn_loc_descriptor (rtl, initialized);
13768       break;
13769
13770     case VAR_LOCATION:
13771       /* Single part.  */
13772       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13773         {
13774           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13775           if (GET_CODE (loc) == EXPR_LIST)
13776             loc = XEXP (loc, 0);
13777           loc_result = loc_descriptor (loc, mode, initialized);
13778           break;
13779         }
13780
13781       rtl = XEXP (rtl, 1);
13782       /* FALLTHRU */
13783
13784     case PARALLEL:
13785       {
13786         rtvec par_elems = XVEC (rtl, 0);
13787         int num_elem = GET_NUM_ELEM (par_elems);
13788         enum machine_mode mode;
13789         int i;
13790
13791         /* Create the first one, so we have something to add to.  */
13792         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13793                                      VOIDmode, initialized);
13794         if (loc_result == NULL)
13795           return NULL;
13796         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13797         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13798         for (i = 1; i < num_elem; i++)
13799           {
13800             dw_loc_descr_ref temp;
13801
13802             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13803                                    VOIDmode, initialized);
13804             if (temp == NULL)
13805               return NULL;
13806             add_loc_descr (&loc_result, temp);
13807             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13808             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13809           }
13810       }
13811       break;
13812
13813     case CONST_INT:
13814       if (mode != VOIDmode && mode != BLKmode)
13815         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13816                                                     INTVAL (rtl));
13817       break;
13818
13819     case CONST_DOUBLE:
13820       if (mode == VOIDmode)
13821         mode = GET_MODE (rtl);
13822
13823       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13824         {
13825           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13826
13827           /* Note that a CONST_DOUBLE rtx could represent either an integer
13828              or a floating-point constant.  A CONST_DOUBLE is used whenever
13829              the constant requires more than one word in order to be
13830              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13831           loc_result = new_loc_descr (DW_OP_implicit_value,
13832                                       GET_MODE_SIZE (mode), 0);
13833           if (SCALAR_FLOAT_MODE_P (mode))
13834             {
13835               unsigned int length = GET_MODE_SIZE (mode);
13836               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13837
13838               insert_float (rtl, array);
13839               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13840               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13841               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13842               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13843             }
13844           else
13845             {
13846               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13847               loc_result->dw_loc_oprnd2.v.val_double.high
13848                 = CONST_DOUBLE_HIGH (rtl);
13849               loc_result->dw_loc_oprnd2.v.val_double.low
13850                 = CONST_DOUBLE_LOW (rtl);
13851             }
13852         }
13853       break;
13854
13855     case CONST_VECTOR:
13856       if (mode == VOIDmode)
13857         mode = GET_MODE (rtl);
13858
13859       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13860         {
13861           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13862           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13863           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13864           unsigned int i;
13865           unsigned char *p;
13866
13867           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13868           switch (GET_MODE_CLASS (mode))
13869             {
13870             case MODE_VECTOR_INT:
13871               for (i = 0, p = array; i < length; i++, p += elt_size)
13872                 {
13873                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13874                   HOST_WIDE_INT lo, hi;
13875
13876                   switch (GET_CODE (elt))
13877                     {
13878                     case CONST_INT:
13879                       lo = INTVAL (elt);
13880                       hi = -(lo < 0);
13881                       break;
13882
13883                     case CONST_DOUBLE:
13884                       lo = CONST_DOUBLE_LOW (elt);
13885                       hi = CONST_DOUBLE_HIGH (elt);
13886                       break;
13887
13888                     default:
13889                       gcc_unreachable ();
13890                     }
13891
13892                   if (elt_size <= sizeof (HOST_WIDE_INT))
13893                     insert_int (lo, elt_size, p);
13894                   else
13895                     {
13896                       unsigned char *p0 = p;
13897                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13898
13899                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13900                       if (WORDS_BIG_ENDIAN)
13901                         {
13902                           p0 = p1;
13903                           p1 = p;
13904                         }
13905                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13906                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13907                     }
13908                 }
13909               break;
13910
13911             case MODE_VECTOR_FLOAT:
13912               for (i = 0, p = array; i < length; i++, p += elt_size)
13913                 {
13914                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13915                   insert_float (elt, p);
13916                 }
13917               break;
13918
13919             default:
13920               gcc_unreachable ();
13921             }
13922
13923           loc_result = new_loc_descr (DW_OP_implicit_value,
13924                                       length * elt_size, 0);
13925           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13926           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13927           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13928           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13929         }
13930       break;
13931
13932     case CONST:
13933       if (mode == VOIDmode
13934           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13935           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13936           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13937         {
13938           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13939           break;
13940         }
13941       /* FALLTHROUGH */
13942     case SYMBOL_REF:
13943       if (!const_ok_for_output (rtl))
13944         break;
13945     case LABEL_REF:
13946       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13947           && (dwarf_version >= 4 || !dwarf_strict))
13948         {
13949           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13950           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13951           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13952           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13953           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13954         }
13955       break;
13956
13957     default:
13958       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13959           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13960           && (dwarf_version >= 4 || !dwarf_strict))
13961         {
13962           /* Value expression.  */
13963           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13964           if (loc_result)
13965             add_loc_descr (&loc_result,
13966                            new_loc_descr (DW_OP_stack_value, 0, 0));
13967         }
13968       break;
13969     }
13970
13971   return loc_result;
13972 }
13973
13974 /* We need to figure out what section we should use as the base for the
13975    address ranges where a given location is valid.
13976    1. If this particular DECL has a section associated with it, use that.
13977    2. If this function has a section associated with it, use that.
13978    3. Otherwise, use the text section.
13979    XXX: If you split a variable across multiple sections, we won't notice.  */
13980
13981 static const char *
13982 secname_for_decl (const_tree decl)
13983 {
13984   const char *secname;
13985
13986   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13987     {
13988       tree sectree = DECL_SECTION_NAME (decl);
13989       secname = TREE_STRING_POINTER (sectree);
13990     }
13991   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13992     {
13993       tree sectree = DECL_SECTION_NAME (current_function_decl);
13994       secname = TREE_STRING_POINTER (sectree);
13995     }
13996   else if (cfun && in_cold_section_p)
13997     secname = crtl->subsections.cold_section_label;
13998   else
13999     secname = text_section_label;
14000
14001   return secname;
14002 }
14003
14004 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14005
14006 static bool
14007 decl_by_reference_p (tree decl)
14008 {
14009   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14010            || TREE_CODE (decl) == VAR_DECL)
14011           && DECL_BY_REFERENCE (decl));
14012 }
14013
14014 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14015    for VARLOC.  */
14016
14017 static dw_loc_descr_ref
14018 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14019                enum var_init_status initialized)
14020 {
14021   int have_address = 0;
14022   dw_loc_descr_ref descr;
14023   enum machine_mode mode;
14024
14025   if (want_address != 2)
14026     {
14027       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14028       /* Single part.  */
14029       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14030         {
14031           varloc = PAT_VAR_LOCATION_LOC (varloc);
14032           if (GET_CODE (varloc) == EXPR_LIST)
14033             varloc = XEXP (varloc, 0);
14034           mode = GET_MODE (varloc);
14035           if (MEM_P (varloc))
14036             {
14037               rtx addr = XEXP (varloc, 0);
14038               descr = mem_loc_descriptor (addr, mode, initialized);
14039               if (descr)
14040                 have_address = 1;
14041               else
14042                 {
14043                   rtx x = avoid_constant_pool_reference (varloc);
14044                   if (x != varloc)
14045                     descr = mem_loc_descriptor (x, mode, initialized);
14046                 }
14047             }
14048           else
14049             descr = mem_loc_descriptor (varloc, mode, initialized);
14050         }
14051       else
14052         return 0;
14053     }
14054   else
14055     {
14056       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
14057       have_address = 1;
14058     }
14059
14060   if (!descr)
14061     return 0;
14062
14063   if (want_address == 2 && !have_address
14064       && (dwarf_version >= 4 || !dwarf_strict))
14065     {
14066       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14067         {
14068           expansion_failed (loc, NULL_RTX,
14069                             "DWARF address size mismatch");
14070           return 0;
14071         }
14072       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14073       have_address = 1;
14074     }
14075   /* Show if we can't fill the request for an address.  */
14076   if (want_address && !have_address)
14077     {
14078       expansion_failed (loc, NULL_RTX,
14079                         "Want address and only have value");
14080       return 0;
14081     }
14082
14083   /* If we've got an address and don't want one, dereference.  */
14084   if (!want_address && have_address)
14085     {
14086       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14087       enum dwarf_location_atom op;
14088
14089       if (size > DWARF2_ADDR_SIZE || size == -1)
14090         {
14091           expansion_failed (loc, NULL_RTX,
14092                             "DWARF address size mismatch");
14093           return 0;
14094         }
14095       else if (size == DWARF2_ADDR_SIZE)
14096         op = DW_OP_deref;
14097       else
14098         op = DW_OP_deref_size;
14099
14100       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14101     }
14102
14103   return descr;
14104 }
14105
14106 /* Return the dwarf representation of the location list LOC_LIST of
14107    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14108    function.  */
14109
14110 static dw_loc_list_ref
14111 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14112 {
14113   const char *endname, *secname;
14114   rtx varloc;
14115   enum var_init_status initialized;
14116   struct var_loc_node *node;
14117   dw_loc_descr_ref descr;
14118   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14119   dw_loc_list_ref list = NULL;
14120   dw_loc_list_ref *listp = &list;
14121
14122   /* Now that we know what section we are using for a base,
14123      actually construct the list of locations.
14124      The first location information is what is passed to the
14125      function that creates the location list, and the remaining
14126      locations just get added on to that list.
14127      Note that we only know the start address for a location
14128      (IE location changes), so to build the range, we use
14129      the range [current location start, next location start].
14130      This means we have to special case the last node, and generate
14131      a range of [last location start, end of function label].  */
14132
14133   secname = secname_for_decl (decl);
14134
14135   for (node = loc_list->first; node->next; node = node->next)
14136     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14137       {
14138         /* The variable has a location between NODE->LABEL and
14139            NODE->NEXT->LABEL.  */
14140         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14141         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14142         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14143         if (descr)
14144           {
14145             *listp = new_loc_list (descr, node->label, node->next->label,
14146                                    secname);
14147             listp = &(*listp)->dw_loc_next;
14148           }
14149       }
14150
14151   /* If the variable has a location at the last label
14152      it keeps its location until the end of function.  */
14153   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14154     {
14155       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14156       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14157       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14158       if (descr)
14159         {
14160           if (!current_function_decl)
14161             endname = text_end_label;
14162           else
14163             {
14164               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14165                                            current_function_funcdef_no);
14166               endname = ggc_strdup (label_id);
14167             }
14168
14169           *listp = new_loc_list (descr, node->label, endname, secname);
14170           listp = &(*listp)->dw_loc_next;
14171         }
14172     }
14173
14174   /* Try to avoid the overhead of a location list emitting a location
14175      expression instead, but only if we didn't have more than one
14176      location entry in the first place.  If some entries were not
14177      representable, we don't want to pretend a single entry that was
14178      applies to the entire scope in which the variable is
14179      available.  */
14180   if (list && loc_list->first->next)
14181     gen_llsym (list);
14182
14183   return list;
14184 }
14185
14186 /* Return if the loc_list has only single element and thus can be represented
14187    as location description.   */
14188
14189 static bool
14190 single_element_loc_list_p (dw_loc_list_ref list)
14191 {
14192   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14193   return !list->ll_symbol;
14194 }
14195
14196 /* To each location in list LIST add loc descr REF.  */
14197
14198 static void
14199 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14200 {
14201   dw_loc_descr_ref copy;
14202   add_loc_descr (&list->expr, ref);
14203   list = list->dw_loc_next;
14204   while (list)
14205     {
14206       copy = GGC_CNEW (dw_loc_descr_node);
14207       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14208       add_loc_descr (&list->expr, copy);
14209       while (copy->dw_loc_next)
14210         {
14211           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14212           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14213           copy->dw_loc_next = new_copy;
14214           copy = new_copy;
14215         }
14216       list = list->dw_loc_next;
14217     }
14218 }
14219
14220 /* Given two lists RET and LIST
14221    produce location list that is result of adding expression in LIST
14222    to expression in RET on each possition in program.
14223    Might be destructive on both RET and LIST.
14224
14225    TODO: We handle only simple cases of RET or LIST having at most one
14226    element. General case would inolve sorting the lists in program order
14227    and merging them that will need some additional work.
14228    Adding that will improve quality of debug info especially for SRA-ed
14229    structures.  */
14230
14231 static void
14232 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14233 {
14234   if (!list)
14235     return;
14236   if (!*ret)
14237     {
14238       *ret = list;
14239       return;
14240     }
14241   if (!list->dw_loc_next)
14242     {
14243       add_loc_descr_to_each (*ret, list->expr);
14244       return;
14245     }
14246   if (!(*ret)->dw_loc_next)
14247     {
14248       add_loc_descr_to_each (list, (*ret)->expr);
14249       *ret = list;
14250       return;
14251     }
14252   expansion_failed (NULL_TREE, NULL_RTX,
14253                     "Don't know how to merge two non-trivial"
14254                     " location lists.\n");
14255   *ret = NULL;
14256   return;
14257 }
14258
14259 /* LOC is constant expression.  Try a luck, look it up in constant
14260    pool and return its loc_descr of its address.  */
14261
14262 static dw_loc_descr_ref
14263 cst_pool_loc_descr (tree loc)
14264 {
14265   /* Get an RTL for this, if something has been emitted.  */
14266   rtx rtl = lookup_constant_def (loc);
14267   enum machine_mode mode;
14268
14269   if (!rtl || !MEM_P (rtl))
14270     {
14271       gcc_assert (!rtl);
14272       return 0;
14273     }
14274   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14275
14276   /* TODO: We might get more coverage if we was actually delaying expansion
14277      of all expressions till end of compilation when constant pools are fully
14278      populated.  */
14279   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14280     {
14281       expansion_failed (loc, NULL_RTX,
14282                         "CST value in contant pool but not marked.");
14283       return 0;
14284     }
14285   mode = GET_MODE (rtl);
14286   rtl = XEXP (rtl, 0);
14287   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14288 }
14289
14290 /* Return dw_loc_list representing address of addr_expr LOC
14291    by looking for innder INDIRECT_REF expression and turing it
14292    into simple arithmetics.  */
14293
14294 static dw_loc_list_ref
14295 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14296 {
14297   tree obj, offset;
14298   HOST_WIDE_INT bitsize, bitpos, bytepos;
14299   enum machine_mode mode;
14300   int volatilep;
14301   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14302   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14303
14304   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14305                              &bitsize, &bitpos, &offset, &mode,
14306                              &unsignedp, &volatilep, false);
14307   STRIP_NOPS (obj);
14308   if (bitpos % BITS_PER_UNIT)
14309     {
14310       expansion_failed (loc, NULL_RTX, "bitfield access");
14311       return 0;
14312     }
14313   if (!INDIRECT_REF_P (obj))
14314     {
14315       expansion_failed (obj,
14316                         NULL_RTX, "no indirect ref in inner refrence");
14317       return 0;
14318     }
14319   if (!offset && !bitpos)
14320     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14321   else if (toplev
14322            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14323            && (dwarf_version >= 4 || !dwarf_strict))
14324     {
14325       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14326       if (!list_ret)
14327         return 0;
14328       if (offset)
14329         {
14330           /* Variable offset.  */
14331           list_ret1 = loc_list_from_tree (offset, 0);
14332           if (list_ret1 == 0)
14333             return 0;
14334           add_loc_list (&list_ret, list_ret1);
14335           if (!list_ret)
14336             return 0;
14337           add_loc_descr_to_each (list_ret,
14338                                  new_loc_descr (DW_OP_plus, 0, 0));
14339         }
14340       bytepos = bitpos / BITS_PER_UNIT;
14341       if (bytepos > 0)
14342         add_loc_descr_to_each (list_ret,
14343                                new_loc_descr (DW_OP_plus_uconst,
14344                                               bytepos, 0));
14345       else if (bytepos < 0)
14346         loc_list_plus_const (list_ret, bytepos);
14347       add_loc_descr_to_each (list_ret,
14348                              new_loc_descr (DW_OP_stack_value, 0, 0));
14349     }
14350   return list_ret;
14351 }
14352
14353
14354 /* Generate Dwarf location list representing LOC.
14355    If WANT_ADDRESS is false, expression computing LOC will be computed
14356    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14357    if WANT_ADDRESS is 2, expression computing address useable in location
14358      will be returned (i.e. DW_OP_reg can be used
14359      to refer to register values).  */
14360
14361 static dw_loc_list_ref
14362 loc_list_from_tree (tree loc, int want_address)
14363 {
14364   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14365   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14366   int have_address = 0;
14367   enum dwarf_location_atom op;
14368
14369   /* ??? Most of the time we do not take proper care for sign/zero
14370      extending the values properly.  Hopefully this won't be a real
14371      problem...  */
14372
14373   switch (TREE_CODE (loc))
14374     {
14375     case ERROR_MARK:
14376       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14377       return 0;
14378
14379     case PLACEHOLDER_EXPR:
14380       /* This case involves extracting fields from an object to determine the
14381          position of other fields.  We don't try to encode this here.  The
14382          only user of this is Ada, which encodes the needed information using
14383          the names of types.  */
14384       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14385       return 0;
14386
14387     case CALL_EXPR:
14388       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14389       /* There are no opcodes for these operations.  */
14390       return 0;
14391
14392     case PREINCREMENT_EXPR:
14393     case PREDECREMENT_EXPR:
14394     case POSTINCREMENT_EXPR:
14395     case POSTDECREMENT_EXPR:
14396       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14397       /* There are no opcodes for these operations.  */
14398       return 0;
14399
14400     case ADDR_EXPR:
14401       /* If we already want an address, see if there is INDIRECT_REF inside
14402          e.g. for &this->field.  */
14403       if (want_address)
14404         {
14405           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14406                        (loc, want_address == 2);
14407           if (list_ret)
14408             have_address = 1;
14409           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14410                    && (ret = cst_pool_loc_descr (loc)))
14411             have_address = 1;
14412         }
14413         /* Otherwise, process the argument and look for the address.  */
14414       if (!list_ret && !ret)
14415         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14416       else
14417         {
14418           if (want_address)
14419             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14420           return NULL;
14421         }
14422       break;
14423
14424     case VAR_DECL:
14425       if (DECL_THREAD_LOCAL_P (loc))
14426         {
14427           rtx rtl;
14428           enum dwarf_location_atom first_op;
14429           enum dwarf_location_atom second_op;
14430           bool dtprel = false;
14431
14432           if (targetm.have_tls)
14433             {
14434               /* If this is not defined, we have no way to emit the
14435                  data.  */
14436               if (!targetm.asm_out.output_dwarf_dtprel)
14437                 return 0;
14438
14439                /* The way DW_OP_GNU_push_tls_address is specified, we
14440                   can only look up addresses of objects in the current
14441                   module.  */
14442               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14443                 return 0;
14444               first_op = DW_OP_addr;
14445               dtprel = true;
14446               second_op = DW_OP_GNU_push_tls_address;
14447             }
14448           else
14449             {
14450               if (!targetm.emutls.debug_form_tls_address
14451                   || !(dwarf_version >= 3 || !dwarf_strict))
14452                 return 0;
14453               loc = emutls_decl (loc);
14454               first_op = DW_OP_addr;
14455               second_op = DW_OP_form_tls_address;
14456             }
14457
14458           rtl = rtl_for_decl_location (loc);
14459           if (rtl == NULL_RTX)
14460             return 0;
14461
14462           if (!MEM_P (rtl))
14463             return 0;
14464           rtl = XEXP (rtl, 0);
14465           if (! CONSTANT_P (rtl))
14466             return 0;
14467
14468           ret = new_loc_descr (first_op, 0, 0);
14469           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14470           ret->dw_loc_oprnd1.v.val_addr = rtl;
14471           ret->dtprel = dtprel;
14472
14473           ret1 = new_loc_descr (second_op, 0, 0);
14474           add_loc_descr (&ret, ret1);
14475
14476           have_address = 1;
14477           break;
14478         }
14479       /* FALLTHRU */
14480
14481     case PARM_DECL:
14482       if (DECL_HAS_VALUE_EXPR_P (loc))
14483         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14484                                    want_address);
14485       /* FALLTHRU */
14486
14487     case RESULT_DECL:
14488     case FUNCTION_DECL:
14489       {
14490         rtx rtl;
14491         var_loc_list *loc_list = lookup_decl_loc (loc);
14492
14493         if (loc_list && loc_list->first)
14494           {
14495             list_ret = dw_loc_list (loc_list, loc, want_address);
14496             have_address = want_address != 0;
14497             break;
14498           }
14499         rtl = rtl_for_decl_location (loc);
14500         if (rtl == NULL_RTX)
14501           {
14502             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14503             return 0;
14504           }
14505         else if (CONST_INT_P (rtl))
14506           {
14507             HOST_WIDE_INT val = INTVAL (rtl);
14508             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14509               val &= GET_MODE_MASK (DECL_MODE (loc));
14510             ret = int_loc_descriptor (val);
14511           }
14512         else if (GET_CODE (rtl) == CONST_STRING)
14513           {
14514             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14515             return 0;
14516           }
14517         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14518           {
14519             ret = new_loc_descr (DW_OP_addr, 0, 0);
14520             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14521             ret->dw_loc_oprnd1.v.val_addr = rtl;
14522           }
14523         else
14524           {
14525             enum machine_mode mode;
14526
14527             /* Certain constructs can only be represented at top-level.  */
14528             if (want_address == 2)
14529               {
14530                 ret = loc_descriptor (rtl, VOIDmode,
14531                                       VAR_INIT_STATUS_INITIALIZED);
14532                 have_address = 1;
14533               }
14534             else
14535               {
14536                 mode = GET_MODE (rtl);
14537                 if (MEM_P (rtl))
14538                   {
14539                     rtl = XEXP (rtl, 0);
14540                     have_address = 1;
14541                   }
14542                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14543               }
14544             if (!ret)
14545               expansion_failed (loc, rtl,
14546                                 "failed to produce loc descriptor for rtl");
14547           }
14548       }
14549       break;
14550
14551     case INDIRECT_REF:
14552     case ALIGN_INDIRECT_REF:
14553     case MISALIGNED_INDIRECT_REF:
14554       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14555       have_address = 1;
14556       break;
14557
14558     case COMPOUND_EXPR:
14559       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14560
14561     CASE_CONVERT:
14562     case VIEW_CONVERT_EXPR:
14563     case SAVE_EXPR:
14564     case MODIFY_EXPR:
14565       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14566
14567     case COMPONENT_REF:
14568     case BIT_FIELD_REF:
14569     case ARRAY_REF:
14570     case ARRAY_RANGE_REF:
14571     case REALPART_EXPR:
14572     case IMAGPART_EXPR:
14573       {
14574         tree obj, offset;
14575         HOST_WIDE_INT bitsize, bitpos, bytepos;
14576         enum machine_mode mode;
14577         int volatilep;
14578         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14579
14580         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14581                                    &unsignedp, &volatilep, false);
14582
14583         gcc_assert (obj != loc);
14584
14585         list_ret = loc_list_from_tree (obj,
14586                                        want_address == 2
14587                                        && !bitpos && !offset ? 2 : 1);
14588         /* TODO: We can extract value of the small expression via shifting even
14589            for nonzero bitpos.  */
14590         if (list_ret == 0)
14591           return 0;
14592         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14593           {
14594             expansion_failed (loc, NULL_RTX,
14595                               "bitfield access");
14596             return 0;
14597           }
14598
14599         if (offset != NULL_TREE)
14600           {
14601             /* Variable offset.  */
14602             list_ret1 = loc_list_from_tree (offset, 0);
14603             if (list_ret1 == 0)
14604               return 0;
14605             add_loc_list (&list_ret, list_ret1);
14606             if (!list_ret)
14607               return 0;
14608             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14609           }
14610
14611         bytepos = bitpos / BITS_PER_UNIT;
14612         if (bytepos > 0)
14613           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14614         else if (bytepos < 0)
14615           loc_list_plus_const (list_ret, bytepos);
14616
14617         have_address = 1;
14618         break;
14619       }
14620
14621     case INTEGER_CST:
14622       if ((want_address || !host_integerp (loc, 0))
14623           && (ret = cst_pool_loc_descr (loc)))
14624         have_address = 1;
14625       else if (want_address == 2
14626                && host_integerp (loc, 0)
14627                && (ret = address_of_int_loc_descriptor
14628                            (int_size_in_bytes (TREE_TYPE (loc)),
14629                             tree_low_cst (loc, 0))))
14630         have_address = 1;
14631       else if (host_integerp (loc, 0))
14632         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14633       else
14634         {
14635           expansion_failed (loc, NULL_RTX,
14636                             "Integer operand is not host integer");
14637           return 0;
14638         }
14639       break;
14640
14641     case CONSTRUCTOR:
14642     case REAL_CST:
14643     case STRING_CST:
14644     case COMPLEX_CST:
14645       if ((ret = cst_pool_loc_descr (loc)))
14646         have_address = 1;
14647       else
14648       /* We can construct small constants here using int_loc_descriptor.  */
14649         expansion_failed (loc, NULL_RTX,
14650                           "constructor or constant not in constant pool");
14651       break;
14652
14653     case TRUTH_AND_EXPR:
14654     case TRUTH_ANDIF_EXPR:
14655     case BIT_AND_EXPR:
14656       op = DW_OP_and;
14657       goto do_binop;
14658
14659     case TRUTH_XOR_EXPR:
14660     case BIT_XOR_EXPR:
14661       op = DW_OP_xor;
14662       goto do_binop;
14663
14664     case TRUTH_OR_EXPR:
14665     case TRUTH_ORIF_EXPR:
14666     case BIT_IOR_EXPR:
14667       op = DW_OP_or;
14668       goto do_binop;
14669
14670     case FLOOR_DIV_EXPR:
14671     case CEIL_DIV_EXPR:
14672     case ROUND_DIV_EXPR:
14673     case TRUNC_DIV_EXPR:
14674       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14675         return 0;
14676       op = DW_OP_div;
14677       goto do_binop;
14678
14679     case MINUS_EXPR:
14680       op = DW_OP_minus;
14681       goto do_binop;
14682
14683     case FLOOR_MOD_EXPR:
14684     case CEIL_MOD_EXPR:
14685     case ROUND_MOD_EXPR:
14686     case TRUNC_MOD_EXPR:
14687       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14688         {
14689           op = DW_OP_mod;
14690           goto do_binop;
14691         }
14692       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14693       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14694       if (list_ret == 0 || list_ret1 == 0)
14695         return 0;
14696
14697       add_loc_list (&list_ret, list_ret1);
14698       if (list_ret == 0)
14699         return 0;
14700       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14701       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14702       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14703       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14704       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14705       break;
14706
14707     case MULT_EXPR:
14708       op = DW_OP_mul;
14709       goto do_binop;
14710
14711     case LSHIFT_EXPR:
14712       op = DW_OP_shl;
14713       goto do_binop;
14714
14715     case RSHIFT_EXPR:
14716       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14717       goto do_binop;
14718
14719     case POINTER_PLUS_EXPR:
14720     case PLUS_EXPR:
14721       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14722           && host_integerp (TREE_OPERAND (loc, 1), 0))
14723         {
14724           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14725           if (list_ret == 0)
14726             return 0;
14727
14728           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14729           break;
14730         }
14731
14732       op = DW_OP_plus;
14733       goto do_binop;
14734
14735     case LE_EXPR:
14736       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14737         return 0;
14738
14739       op = DW_OP_le;
14740       goto do_binop;
14741
14742     case GE_EXPR:
14743       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14744         return 0;
14745
14746       op = DW_OP_ge;
14747       goto do_binop;
14748
14749     case LT_EXPR:
14750       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14751         return 0;
14752
14753       op = DW_OP_lt;
14754       goto do_binop;
14755
14756     case GT_EXPR:
14757       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14758         return 0;
14759
14760       op = DW_OP_gt;
14761       goto do_binop;
14762
14763     case EQ_EXPR:
14764       op = DW_OP_eq;
14765       goto do_binop;
14766
14767     case NE_EXPR:
14768       op = DW_OP_ne;
14769       goto do_binop;
14770
14771     do_binop:
14772       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14773       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14774       if (list_ret == 0 || list_ret1 == 0)
14775         return 0;
14776
14777       add_loc_list (&list_ret, list_ret1);
14778       if (list_ret == 0)
14779         return 0;
14780       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14781       break;
14782
14783     case TRUTH_NOT_EXPR:
14784     case BIT_NOT_EXPR:
14785       op = DW_OP_not;
14786       goto do_unop;
14787
14788     case ABS_EXPR:
14789       op = DW_OP_abs;
14790       goto do_unop;
14791
14792     case NEGATE_EXPR:
14793       op = DW_OP_neg;
14794       goto do_unop;
14795
14796     do_unop:
14797       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14798       if (list_ret == 0)
14799         return 0;
14800
14801       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14802       break;
14803
14804     case MIN_EXPR:
14805     case MAX_EXPR:
14806       {
14807         const enum tree_code code =
14808           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14809
14810         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14811                       build2 (code, integer_type_node,
14812                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14813                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14814       }
14815
14816       /* ... fall through ...  */
14817
14818     case COND_EXPR:
14819       {
14820         dw_loc_descr_ref lhs
14821           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14822         dw_loc_list_ref rhs
14823           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14824         dw_loc_descr_ref bra_node, jump_node, tmp;
14825
14826         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14827         if (list_ret == 0 || lhs == 0 || rhs == 0)
14828           return 0;
14829
14830         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14831         add_loc_descr_to_each (list_ret, bra_node);
14832
14833         add_loc_list (&list_ret, rhs);
14834         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14835         add_loc_descr_to_each (list_ret, jump_node);
14836
14837         add_loc_descr_to_each (list_ret, lhs);
14838         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14839         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14840
14841         /* ??? Need a node to point the skip at.  Use a nop.  */
14842         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14843         add_loc_descr_to_each (list_ret, tmp);
14844         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14845         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14846       }
14847       break;
14848
14849     case FIX_TRUNC_EXPR:
14850       return 0;
14851
14852     default:
14853       /* Leave front-end specific codes as simply unknown.  This comes
14854          up, for instance, with the C STMT_EXPR.  */
14855       if ((unsigned int) TREE_CODE (loc)
14856           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14857         {
14858           expansion_failed (loc, NULL_RTX,
14859                             "language specific tree node");
14860           return 0;
14861         }
14862
14863 #ifdef ENABLE_CHECKING
14864       /* Otherwise this is a generic code; we should just lists all of
14865          these explicitly.  We forgot one.  */
14866       gcc_unreachable ();
14867 #else
14868       /* In a release build, we want to degrade gracefully: better to
14869          generate incomplete debugging information than to crash.  */
14870       return NULL;
14871 #endif
14872     }
14873
14874   if (!ret && !list_ret)
14875     return 0;
14876
14877   if (want_address == 2 && !have_address
14878       && (dwarf_version >= 4 || !dwarf_strict))
14879     {
14880       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14881         {
14882           expansion_failed (loc, NULL_RTX,
14883                             "DWARF address size mismatch");
14884           return 0;
14885         }
14886       if (ret)
14887         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14888       else
14889         add_loc_descr_to_each (list_ret,
14890                                new_loc_descr (DW_OP_stack_value, 0, 0));
14891       have_address = 1;
14892     }
14893   /* Show if we can't fill the request for an address.  */
14894   if (want_address && !have_address)
14895     {
14896       expansion_failed (loc, NULL_RTX,
14897                         "Want address and only have value");
14898       return 0;
14899     }
14900
14901   gcc_assert (!ret || !list_ret);
14902
14903   /* If we've got an address and don't want one, dereference.  */
14904   if (!want_address && have_address)
14905     {
14906       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14907
14908       if (size > DWARF2_ADDR_SIZE || size == -1)
14909         {
14910           expansion_failed (loc, NULL_RTX,
14911                             "DWARF address size mismatch");
14912           return 0;
14913         }
14914       else if (size == DWARF2_ADDR_SIZE)
14915         op = DW_OP_deref;
14916       else
14917         op = DW_OP_deref_size;
14918
14919       if (ret)
14920         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14921       else
14922         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14923     }
14924   if (ret)
14925     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14926
14927   return list_ret;
14928 }
14929
14930 /* Same as above but return only single location expression.  */
14931 static dw_loc_descr_ref
14932 loc_descriptor_from_tree (tree loc, int want_address)
14933 {
14934   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14935   if (!ret)
14936     return NULL;
14937   if (ret->dw_loc_next)
14938     {
14939       expansion_failed (loc, NULL_RTX,
14940                         "Location list where only loc descriptor needed");
14941       return NULL;
14942     }
14943   return ret->expr;
14944 }
14945
14946 /* Given a value, round it up to the lowest multiple of `boundary'
14947    which is not less than the value itself.  */
14948
14949 static inline HOST_WIDE_INT
14950 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14951 {
14952   return (((value + boundary - 1) / boundary) * boundary);
14953 }
14954
14955 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14956    pointer to the declared type for the relevant field variable, or return
14957    `integer_type_node' if the given node turns out to be an
14958    ERROR_MARK node.  */
14959
14960 static inline tree
14961 field_type (const_tree decl)
14962 {
14963   tree type;
14964
14965   if (TREE_CODE (decl) == ERROR_MARK)
14966     return integer_type_node;
14967
14968   type = DECL_BIT_FIELD_TYPE (decl);
14969   if (type == NULL_TREE)
14970     type = TREE_TYPE (decl);
14971
14972   return type;
14973 }
14974
14975 /* Given a pointer to a tree node, return the alignment in bits for
14976    it, or else return BITS_PER_WORD if the node actually turns out to
14977    be an ERROR_MARK node.  */
14978
14979 static inline unsigned
14980 simple_type_align_in_bits (const_tree type)
14981 {
14982   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14983 }
14984
14985 static inline unsigned
14986 simple_decl_align_in_bits (const_tree decl)
14987 {
14988   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14989 }
14990
14991 /* Return the result of rounding T up to ALIGN.  */
14992
14993 static inline HOST_WIDE_INT
14994 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
14995 {
14996   /* We must be careful if T is negative because HOST_WIDE_INT can be
14997      either "above" or "below" unsigned int as per the C promotion
14998      rules, depending on the host, thus making the signedness of the
14999      direct multiplication and division unpredictable.  */
15000   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
15001
15002   u += align - 1;
15003   u /= align;
15004   u *= align;
15005
15006   return (HOST_WIDE_INT) u;
15007 }
15008
15009 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15010    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15011    or return 0 if we are unable to determine what that offset is, either
15012    because the argument turns out to be a pointer to an ERROR_MARK node, or
15013    because the offset is actually variable.  (We can't handle the latter case
15014    just yet).  */
15015
15016 static HOST_WIDE_INT
15017 field_byte_offset (const_tree decl)
15018 {
15019   HOST_WIDE_INT object_offset_in_bits;
15020   HOST_WIDE_INT bitpos_int;
15021
15022   if (TREE_CODE (decl) == ERROR_MARK)
15023     return 0;
15024
15025   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15026
15027   /* We cannot yet cope with fields whose positions are variable, so
15028      for now, when we see such things, we simply return 0.  Someday, we may
15029      be able to handle such cases, but it will be damn difficult.  */
15030   if (! host_integerp (bit_position (decl), 0))
15031     return 0;
15032
15033   bitpos_int = int_bit_position (decl);
15034
15035 #ifdef PCC_BITFIELD_TYPE_MATTERS
15036   if (PCC_BITFIELD_TYPE_MATTERS)
15037     {
15038       tree type;
15039       tree field_size_tree;
15040       HOST_WIDE_INT deepest_bitpos;
15041       unsigned HOST_WIDE_INT field_size_in_bits;
15042       unsigned int type_align_in_bits;
15043       unsigned int decl_align_in_bits;
15044       unsigned HOST_WIDE_INT type_size_in_bits;
15045
15046       type = field_type (decl);
15047       type_size_in_bits = simple_type_size_in_bits (type);
15048       type_align_in_bits = simple_type_align_in_bits (type);
15049
15050       field_size_tree = DECL_SIZE (decl);
15051
15052       /* The size could be unspecified if there was an error, or for
15053          a flexible array member.  */
15054       if (!field_size_tree)
15055         field_size_tree = bitsize_zero_node;
15056
15057       /* If the size of the field is not constant, use the type size.  */
15058       if (host_integerp (field_size_tree, 1))
15059         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15060       else
15061         field_size_in_bits = type_size_in_bits;
15062
15063       decl_align_in_bits = simple_decl_align_in_bits (decl);
15064
15065       /* The GCC front-end doesn't make any attempt to keep track of the
15066          starting bit offset (relative to the start of the containing
15067          structure type) of the hypothetical "containing object" for a
15068          bit-field.  Thus, when computing the byte offset value for the
15069          start of the "containing object" of a bit-field, we must deduce
15070          this information on our own. This can be rather tricky to do in
15071          some cases.  For example, handling the following structure type
15072          definition when compiling for an i386/i486 target (which only
15073          aligns long long's to 32-bit boundaries) can be very tricky:
15074
15075          struct S { int field1; long long field2:31; };
15076
15077          Fortunately, there is a simple rule-of-thumb which can be used
15078          in such cases.  When compiling for an i386/i486, GCC will
15079          allocate 8 bytes for the structure shown above.  It decides to
15080          do this based upon one simple rule for bit-field allocation.
15081          GCC allocates each "containing object" for each bit-field at
15082          the first (i.e. lowest addressed) legitimate alignment boundary
15083          (based upon the required minimum alignment for the declared
15084          type of the field) which it can possibly use, subject to the
15085          condition that there is still enough available space remaining
15086          in the containing object (when allocated at the selected point)
15087          to fully accommodate all of the bits of the bit-field itself.
15088
15089          This simple rule makes it obvious why GCC allocates 8 bytes for
15090          each object of the structure type shown above.  When looking
15091          for a place to allocate the "containing object" for `field2',
15092          the compiler simply tries to allocate a 64-bit "containing
15093          object" at each successive 32-bit boundary (starting at zero)
15094          until it finds a place to allocate that 64- bit field such that
15095          at least 31 contiguous (and previously unallocated) bits remain
15096          within that selected 64 bit field.  (As it turns out, for the
15097          example above, the compiler finds it is OK to allocate the
15098          "containing object" 64-bit field at bit-offset zero within the
15099          structure type.)
15100
15101          Here we attempt to work backwards from the limited set of facts
15102          we're given, and we try to deduce from those facts, where GCC
15103          must have believed that the containing object started (within
15104          the structure type). The value we deduce is then used (by the
15105          callers of this routine) to generate DW_AT_location and
15106          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15107          the case of DW_AT_location, regular fields as well).  */
15108
15109       /* Figure out the bit-distance from the start of the structure to
15110          the "deepest" bit of the bit-field.  */
15111       deepest_bitpos = bitpos_int + field_size_in_bits;
15112
15113       /* This is the tricky part.  Use some fancy footwork to deduce
15114          where the lowest addressed bit of the containing object must
15115          be.  */
15116       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15117
15118       /* Round up to type_align by default.  This works best for
15119          bitfields.  */
15120       object_offset_in_bits
15121         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15122
15123       if (object_offset_in_bits > bitpos_int)
15124         {
15125           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15126
15127           /* Round up to decl_align instead.  */
15128           object_offset_in_bits
15129             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15130         }
15131     }
15132   else
15133 #endif
15134     object_offset_in_bits = bitpos_int;
15135
15136   return object_offset_in_bits / BITS_PER_UNIT;
15137 }
15138 \f
15139 /* The following routines define various Dwarf attributes and any data
15140    associated with them.  */
15141
15142 /* Add a location description attribute value to a DIE.
15143
15144    This emits location attributes suitable for whole variables and
15145    whole parameters.  Note that the location attributes for struct fields are
15146    generated by the routine `data_member_location_attribute' below.  */
15147
15148 static inline void
15149 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15150                              dw_loc_list_ref descr)
15151 {
15152   if (descr == 0)
15153     return;
15154   if (single_element_loc_list_p (descr))
15155     add_AT_loc (die, attr_kind, descr->expr);
15156   else
15157     add_AT_loc_list (die, attr_kind, descr);
15158 }
15159
15160 /* Attach the specialized form of location attribute used for data members of
15161    struct and union types.  In the special case of a FIELD_DECL node which
15162    represents a bit-field, the "offset" part of this special location
15163    descriptor must indicate the distance in bytes from the lowest-addressed
15164    byte of the containing struct or union type to the lowest-addressed byte of
15165    the "containing object" for the bit-field.  (See the `field_byte_offset'
15166    function above).
15167
15168    For any given bit-field, the "containing object" is a hypothetical object
15169    (of some integral or enum type) within which the given bit-field lives.  The
15170    type of this hypothetical "containing object" is always the same as the
15171    declared type of the individual bit-field itself (for GCC anyway... the
15172    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15173    bytes) of the hypothetical "containing object" which will be given in the
15174    DW_AT_byte_size attribute for this bit-field.  (See the
15175    `byte_size_attribute' function below.)  It is also used when calculating the
15176    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15177    function below.)  */
15178
15179 static void
15180 add_data_member_location_attribute (dw_die_ref die, tree decl)
15181 {
15182   HOST_WIDE_INT offset;
15183   dw_loc_descr_ref loc_descr = 0;
15184
15185   if (TREE_CODE (decl) == TREE_BINFO)
15186     {
15187       /* We're working on the TAG_inheritance for a base class.  */
15188       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15189         {
15190           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15191              aren't at a fixed offset from all (sub)objects of the same
15192              type.  We need to extract the appropriate offset from our
15193              vtable.  The following dwarf expression means
15194
15195                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15196
15197              This is specific to the V3 ABI, of course.  */
15198
15199           dw_loc_descr_ref tmp;
15200
15201           /* Make a copy of the object address.  */
15202           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15203           add_loc_descr (&loc_descr, tmp);
15204
15205           /* Extract the vtable address.  */
15206           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15207           add_loc_descr (&loc_descr, tmp);
15208
15209           /* Calculate the address of the offset.  */
15210           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15211           gcc_assert (offset < 0);
15212
15213           tmp = int_loc_descriptor (-offset);
15214           add_loc_descr (&loc_descr, tmp);
15215           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15216           add_loc_descr (&loc_descr, tmp);
15217
15218           /* Extract the offset.  */
15219           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15220           add_loc_descr (&loc_descr, tmp);
15221
15222           /* Add it to the object address.  */
15223           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15224           add_loc_descr (&loc_descr, tmp);
15225         }
15226       else
15227         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15228     }
15229   else
15230     offset = field_byte_offset (decl);
15231
15232   if (! loc_descr)
15233     {
15234       if (dwarf_version > 2)
15235         {
15236           /* Don't need to output a location expression, just the constant. */
15237           add_AT_int (die, DW_AT_data_member_location, offset);
15238           return;
15239         }
15240       else
15241         {
15242           enum dwarf_location_atom op;
15243
15244           /* The DWARF2 standard says that we should assume that the structure
15245              address is already on the stack, so we can specify a structure
15246              field address by using DW_OP_plus_uconst.  */
15247
15248 #ifdef MIPS_DEBUGGING_INFO
15249           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15250              operator correctly.  It works only if we leave the offset on the
15251              stack.  */
15252           op = DW_OP_constu;
15253 #else
15254           op = DW_OP_plus_uconst;
15255 #endif
15256
15257           loc_descr = new_loc_descr (op, offset, 0);
15258         }
15259     }
15260
15261   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15262 }
15263
15264 /* Writes integer values to dw_vec_const array.  */
15265
15266 static void
15267 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15268 {
15269   while (size != 0)
15270     {
15271       *dest++ = val & 0xff;
15272       val >>= 8;
15273       --size;
15274     }
15275 }
15276
15277 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15278
15279 static HOST_WIDE_INT
15280 extract_int (const unsigned char *src, unsigned int size)
15281 {
15282   HOST_WIDE_INT val = 0;
15283
15284   src += size;
15285   while (size != 0)
15286     {
15287       val <<= 8;
15288       val |= *--src & 0xff;
15289       --size;
15290     }
15291   return val;
15292 }
15293
15294 /* Writes floating point values to dw_vec_const array.  */
15295
15296 static void
15297 insert_float (const_rtx rtl, unsigned char *array)
15298 {
15299   REAL_VALUE_TYPE rv;
15300   long val[4];
15301   int i;
15302
15303   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15304   real_to_target (val, &rv, GET_MODE (rtl));
15305
15306   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15307   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15308     {
15309       insert_int (val[i], 4, array);
15310       array += 4;
15311     }
15312 }
15313
15314 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15315    does not have a "location" either in memory or in a register.  These
15316    things can arise in GNU C when a constant is passed as an actual parameter
15317    to an inlined function.  They can also arise in C++ where declared
15318    constants do not necessarily get memory "homes".  */
15319
15320 static bool
15321 add_const_value_attribute (dw_die_ref die, rtx rtl)
15322 {
15323   switch (GET_CODE (rtl))
15324     {
15325     case CONST_INT:
15326       {
15327         HOST_WIDE_INT val = INTVAL (rtl);
15328
15329         if (val < 0)
15330           add_AT_int (die, DW_AT_const_value, val);
15331         else
15332           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15333       }
15334       return true;
15335
15336     case CONST_DOUBLE:
15337       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15338          floating-point constant.  A CONST_DOUBLE is used whenever the
15339          constant requires more than one word in order to be adequately
15340          represented.  */
15341       {
15342         enum machine_mode mode = GET_MODE (rtl);
15343
15344         if (SCALAR_FLOAT_MODE_P (mode))
15345           {
15346             unsigned int length = GET_MODE_SIZE (mode);
15347             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15348
15349             insert_float (rtl, array);
15350             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15351           }
15352         else
15353           add_AT_double (die, DW_AT_const_value,
15354                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15355       }
15356       return true;
15357
15358     case CONST_VECTOR:
15359       {
15360         enum machine_mode mode = GET_MODE (rtl);
15361         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15362         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15363         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15364         unsigned int i;
15365         unsigned char *p;
15366
15367         switch (GET_MODE_CLASS (mode))
15368           {
15369           case MODE_VECTOR_INT:
15370             for (i = 0, p = array; i < length; i++, p += elt_size)
15371               {
15372                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15373                 HOST_WIDE_INT lo, hi;
15374
15375                 switch (GET_CODE (elt))
15376                   {
15377                   case CONST_INT:
15378                     lo = INTVAL (elt);
15379                     hi = -(lo < 0);
15380                     break;
15381
15382                   case CONST_DOUBLE:
15383                     lo = CONST_DOUBLE_LOW (elt);
15384                     hi = CONST_DOUBLE_HIGH (elt);
15385                     break;
15386
15387                   default:
15388                     gcc_unreachable ();
15389                   }
15390
15391                 if (elt_size <= sizeof (HOST_WIDE_INT))
15392                   insert_int (lo, elt_size, p);
15393                 else
15394                   {
15395                     unsigned char *p0 = p;
15396                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15397
15398                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15399                     if (WORDS_BIG_ENDIAN)
15400                       {
15401                         p0 = p1;
15402                         p1 = p;
15403                       }
15404                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15405                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15406                   }
15407               }
15408             break;
15409
15410           case MODE_VECTOR_FLOAT:
15411             for (i = 0, p = array; i < length; i++, p += elt_size)
15412               {
15413                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15414                 insert_float (elt, p);
15415               }
15416             break;
15417
15418           default:
15419             gcc_unreachable ();
15420           }
15421
15422         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15423       }
15424       return true;
15425
15426     case CONST_STRING:
15427       if (dwarf_version >= 4 || !dwarf_strict)
15428         {
15429           dw_loc_descr_ref loc_result;
15430           resolve_one_addr (&rtl, NULL);
15431         rtl_addr:
15432           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15433           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15434           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15435           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15436           add_AT_loc (die, DW_AT_location, loc_result);
15437           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15438           return true;
15439         }
15440       return false;
15441
15442     case CONST:
15443       if (CONSTANT_P (XEXP (rtl, 0)))
15444         return add_const_value_attribute (die, XEXP (rtl, 0));
15445       /* FALLTHROUGH */
15446     case SYMBOL_REF:
15447       if (!const_ok_for_output (rtl))
15448         return false;
15449     case LABEL_REF:
15450       if (dwarf_version >= 4 || !dwarf_strict)
15451         goto rtl_addr;
15452       return false;
15453
15454     case PLUS:
15455       /* In cases where an inlined instance of an inline function is passed
15456          the address of an `auto' variable (which is local to the caller) we
15457          can get a situation where the DECL_RTL of the artificial local
15458          variable (for the inlining) which acts as a stand-in for the
15459          corresponding formal parameter (of the inline function) will look
15460          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15461          exactly a compile-time constant expression, but it isn't the address
15462          of the (artificial) local variable either.  Rather, it represents the
15463          *value* which the artificial local variable always has during its
15464          lifetime.  We currently have no way to represent such quasi-constant
15465          values in Dwarf, so for now we just punt and generate nothing.  */
15466       return false;
15467
15468     case HIGH:
15469     case CONST_FIXED:
15470       return false;
15471
15472     case MEM:
15473       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15474           && MEM_READONLY_P (rtl)
15475           && GET_MODE (rtl) == BLKmode)
15476         {
15477           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15478           return true;
15479         }
15480       return false;
15481
15482     default:
15483       /* No other kinds of rtx should be possible here.  */
15484       gcc_unreachable ();
15485     }
15486   return false;
15487 }
15488
15489 /* Determine whether the evaluation of EXPR references any variables
15490    or functions which aren't otherwise used (and therefore may not be
15491    output).  */
15492 static tree
15493 reference_to_unused (tree * tp, int * walk_subtrees,
15494                      void * data ATTRIBUTE_UNUSED)
15495 {
15496   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15497     *walk_subtrees = 0;
15498
15499   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15500       && ! TREE_ASM_WRITTEN (*tp))
15501     return *tp;
15502   /* ???  The C++ FE emits debug information for using decls, so
15503      putting gcc_unreachable here falls over.  See PR31899.  For now
15504      be conservative.  */
15505   else if (!cgraph_global_info_ready
15506            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15507     return *tp;
15508   else if (TREE_CODE (*tp) == VAR_DECL)
15509     {
15510       struct varpool_node *node = varpool_node (*tp);
15511       if (!node->needed)
15512         return *tp;
15513     }
15514   else if (TREE_CODE (*tp) == FUNCTION_DECL
15515            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15516     {
15517       /* The call graph machinery must have finished analyzing,
15518          optimizing and gimplifying the CU by now.
15519          So if *TP has no call graph node associated
15520          to it, it means *TP will not be emitted.  */
15521       if (!cgraph_get_node (*tp))
15522         return *tp;
15523     }
15524   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15525     return *tp;
15526
15527   return NULL_TREE;
15528 }
15529
15530 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15531    for use in a later add_const_value_attribute call.  */
15532
15533 static rtx
15534 rtl_for_decl_init (tree init, tree type)
15535 {
15536   rtx rtl = NULL_RTX;
15537
15538   /* If a variable is initialized with a string constant without embedded
15539      zeros, build CONST_STRING.  */
15540   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15541     {
15542       tree enttype = TREE_TYPE (type);
15543       tree domain = TYPE_DOMAIN (type);
15544       enum machine_mode mode = TYPE_MODE (enttype);
15545
15546       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15547           && domain
15548           && integer_zerop (TYPE_MIN_VALUE (domain))
15549           && compare_tree_int (TYPE_MAX_VALUE (domain),
15550                                TREE_STRING_LENGTH (init) - 1) == 0
15551           && ((size_t) TREE_STRING_LENGTH (init)
15552               == strlen (TREE_STRING_POINTER (init)) + 1))
15553         {
15554           rtl = gen_rtx_CONST_STRING (VOIDmode,
15555                                       ggc_strdup (TREE_STRING_POINTER (init)));
15556           rtl = gen_rtx_MEM (BLKmode, rtl);
15557           MEM_READONLY_P (rtl) = 1;
15558         }
15559     }
15560   /* Other aggregates, and complex values, could be represented using
15561      CONCAT: FIXME!  */
15562   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15563     ;
15564   /* Vectors only work if their mode is supported by the target.
15565      FIXME: generic vectors ought to work too.  */
15566   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15567     ;
15568   /* If the initializer is something that we know will expand into an
15569      immediate RTL constant, expand it now.  We must be careful not to
15570      reference variables which won't be output.  */
15571   else if (initializer_constant_valid_p (init, type)
15572            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15573     {
15574       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15575          possible.  */
15576       if (TREE_CODE (type) == VECTOR_TYPE)
15577         switch (TREE_CODE (init))
15578           {
15579           case VECTOR_CST:
15580             break;
15581           case CONSTRUCTOR:
15582             if (TREE_CONSTANT (init))
15583               {
15584                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15585                 bool constant_p = true;
15586                 tree value;
15587                 unsigned HOST_WIDE_INT ix;
15588
15589                 /* Even when ctor is constant, it might contain non-*_CST
15590                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15591                    belong into VECTOR_CST nodes.  */
15592                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15593                   if (!CONSTANT_CLASS_P (value))
15594                     {
15595                       constant_p = false;
15596                       break;
15597                     }
15598
15599                 if (constant_p)
15600                   {
15601                     init = build_vector_from_ctor (type, elts);
15602                     break;
15603                   }
15604               }
15605             /* FALLTHRU */
15606
15607           default:
15608             return NULL;
15609           }
15610
15611       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15612
15613       /* If expand_expr returns a MEM, it wasn't immediate.  */
15614       gcc_assert (!rtl || !MEM_P (rtl));
15615     }
15616
15617   return rtl;
15618 }
15619
15620 /* Generate RTL for the variable DECL to represent its location.  */
15621
15622 static rtx
15623 rtl_for_decl_location (tree decl)
15624 {
15625   rtx rtl;
15626
15627   /* Here we have to decide where we are going to say the parameter "lives"
15628      (as far as the debugger is concerned).  We only have a couple of
15629      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15630
15631      DECL_RTL normally indicates where the parameter lives during most of the
15632      activation of the function.  If optimization is enabled however, this
15633      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15634      that the parameter doesn't really live anywhere (as far as the code
15635      generation parts of GCC are concerned) during most of the function's
15636      activation.  That will happen (for example) if the parameter is never
15637      referenced within the function.
15638
15639      We could just generate a location descriptor here for all non-NULL
15640      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15641      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15642      where DECL_RTL is NULL or is a pseudo-reg.
15643
15644      Note however that we can only get away with using DECL_INCOMING_RTL as
15645      a backup substitute for DECL_RTL in certain limited cases.  In cases
15646      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15647      we can be sure that the parameter was passed using the same type as it is
15648      declared to have within the function, and that its DECL_INCOMING_RTL
15649      points us to a place where a value of that type is passed.
15650
15651      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15652      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15653      because in these cases DECL_INCOMING_RTL points us to a value of some
15654      type which is *different* from the type of the parameter itself.  Thus,
15655      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15656      such cases, the debugger would end up (for example) trying to fetch a
15657      `float' from a place which actually contains the first part of a
15658      `double'.  That would lead to really incorrect and confusing
15659      output at debug-time.
15660
15661      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15662      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15663      are a couple of exceptions however.  On little-endian machines we can
15664      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15665      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15666      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15667      when (on a little-endian machine) a non-prototyped function has a
15668      parameter declared to be of type `short' or `char'.  In such cases,
15669      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15670      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15671      passed `int' value.  If the debugger then uses that address to fetch
15672      a `short' or a `char' (on a little-endian machine) the result will be
15673      the correct data, so we allow for such exceptional cases below.
15674
15675      Note that our goal here is to describe the place where the given formal
15676      parameter lives during most of the function's activation (i.e. between the
15677      end of the prologue and the start of the epilogue).  We'll do that as best
15678      as we can. Note however that if the given formal parameter is modified
15679      sometime during the execution of the function, then a stack backtrace (at
15680      debug-time) will show the function as having been called with the *new*
15681      value rather than the value which was originally passed in.  This happens
15682      rarely enough that it is not a major problem, but it *is* a problem, and
15683      I'd like to fix it.
15684
15685      A future version of dwarf2out.c may generate two additional attributes for
15686      any given DW_TAG_formal_parameter DIE which will describe the "passed
15687      type" and the "passed location" for the given formal parameter in addition
15688      to the attributes we now generate to indicate the "declared type" and the
15689      "active location" for each parameter.  This additional set of attributes
15690      could be used by debuggers for stack backtraces. Separately, note that
15691      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15692      This happens (for example) for inlined-instances of inline function formal
15693      parameters which are never referenced.  This really shouldn't be
15694      happening.  All PARM_DECL nodes should get valid non-NULL
15695      DECL_INCOMING_RTL values.  FIXME.  */
15696
15697   /* Use DECL_RTL as the "location" unless we find something better.  */
15698   rtl = DECL_RTL_IF_SET (decl);
15699
15700   /* When generating abstract instances, ignore everything except
15701      constants, symbols living in memory, and symbols living in
15702      fixed registers.  */
15703   if (! reload_completed)
15704     {
15705       if (rtl
15706           && (CONSTANT_P (rtl)
15707               || (MEM_P (rtl)
15708                   && CONSTANT_P (XEXP (rtl, 0)))
15709               || (REG_P (rtl)
15710                   && TREE_CODE (decl) == VAR_DECL
15711                   && TREE_STATIC (decl))))
15712         {
15713           rtl = targetm.delegitimize_address (rtl);
15714           return rtl;
15715         }
15716       rtl = NULL_RTX;
15717     }
15718   else if (TREE_CODE (decl) == PARM_DECL)
15719     {
15720       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15721         {
15722           tree declared_type = TREE_TYPE (decl);
15723           tree passed_type = DECL_ARG_TYPE (decl);
15724           enum machine_mode dmode = TYPE_MODE (declared_type);
15725           enum machine_mode pmode = TYPE_MODE (passed_type);
15726
15727           /* This decl represents a formal parameter which was optimized out.
15728              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15729              all cases where (rtl == NULL_RTX) just below.  */
15730           if (dmode == pmode)
15731             rtl = DECL_INCOMING_RTL (decl);
15732           else if (SCALAR_INT_MODE_P (dmode)
15733                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15734                    && DECL_INCOMING_RTL (decl))
15735             {
15736               rtx inc = DECL_INCOMING_RTL (decl);
15737               if (REG_P (inc))
15738                 rtl = inc;
15739               else if (MEM_P (inc))
15740                 {
15741                   if (BYTES_BIG_ENDIAN)
15742                     rtl = adjust_address_nv (inc, dmode,
15743                                              GET_MODE_SIZE (pmode)
15744                                              - GET_MODE_SIZE (dmode));
15745                   else
15746                     rtl = inc;
15747                 }
15748             }
15749         }
15750
15751       /* If the parm was passed in registers, but lives on the stack, then
15752          make a big endian correction if the mode of the type of the
15753          parameter is not the same as the mode of the rtl.  */
15754       /* ??? This is the same series of checks that are made in dbxout.c before
15755          we reach the big endian correction code there.  It isn't clear if all
15756          of these checks are necessary here, but keeping them all is the safe
15757          thing to do.  */
15758       else if (MEM_P (rtl)
15759                && XEXP (rtl, 0) != const0_rtx
15760                && ! CONSTANT_P (XEXP (rtl, 0))
15761                /* Not passed in memory.  */
15762                && !MEM_P (DECL_INCOMING_RTL (decl))
15763                /* Not passed by invisible reference.  */
15764                && (!REG_P (XEXP (rtl, 0))
15765                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15766                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15767 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15768                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15769 #endif
15770                      )
15771                /* Big endian correction check.  */
15772                && BYTES_BIG_ENDIAN
15773                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15774                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15775                    < UNITS_PER_WORD))
15776         {
15777           int offset = (UNITS_PER_WORD
15778                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15779
15780           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15781                              plus_constant (XEXP (rtl, 0), offset));
15782         }
15783     }
15784   else if (TREE_CODE (decl) == VAR_DECL
15785            && rtl
15786            && MEM_P (rtl)
15787            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15788            && BYTES_BIG_ENDIAN)
15789     {
15790       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15791       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15792
15793       /* If a variable is declared "register" yet is smaller than
15794          a register, then if we store the variable to memory, it
15795          looks like we're storing a register-sized value, when in
15796          fact we are not.  We need to adjust the offset of the
15797          storage location to reflect the actual value's bytes,
15798          else gdb will not be able to display it.  */
15799       if (rsize > dsize)
15800         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15801                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15802     }
15803
15804   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15805      and will have been substituted directly into all expressions that use it.
15806      C does not have such a concept, but C++ and other languages do.  */
15807   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15808     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15809
15810   if (rtl)
15811     rtl = targetm.delegitimize_address (rtl);
15812
15813   /* If we don't look past the constant pool, we risk emitting a
15814      reference to a constant pool entry that isn't referenced from
15815      code, and thus is not emitted.  */
15816   if (rtl)
15817     rtl = avoid_constant_pool_reference (rtl);
15818
15819   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15820      in the current CU, resolve_addr will remove the expression referencing
15821      it.  */
15822   if (rtl == NULL_RTX
15823       && TREE_CODE (decl) == VAR_DECL
15824       && !DECL_EXTERNAL (decl)
15825       && TREE_STATIC (decl)
15826       && DECL_NAME (decl)
15827       && !DECL_HARD_REGISTER (decl)
15828       && DECL_MODE (decl) != VOIDmode)
15829     {
15830       rtl = make_decl_rtl_for_debug (decl);
15831       if (!MEM_P (rtl)
15832           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15833           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15834         rtl = NULL_RTX;
15835     }
15836
15837   return rtl;
15838 }
15839
15840 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15841    returned.  If so, the decl for the COMMON block is returned, and the
15842    value is the offset into the common block for the symbol.  */
15843
15844 static tree
15845 fortran_common (tree decl, HOST_WIDE_INT *value)
15846 {
15847   tree val_expr, cvar;
15848   enum machine_mode mode;
15849   HOST_WIDE_INT bitsize, bitpos;
15850   tree offset;
15851   int volatilep = 0, unsignedp = 0;
15852
15853   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15854      it does not have a value (the offset into the common area), or if it
15855      is thread local (as opposed to global) then it isn't common, and shouldn't
15856      be handled as such.  */
15857   if (TREE_CODE (decl) != VAR_DECL
15858       || !TREE_STATIC (decl)
15859       || !DECL_HAS_VALUE_EXPR_P (decl)
15860       || !is_fortran ())
15861     return NULL_TREE;
15862
15863   val_expr = DECL_VALUE_EXPR (decl);
15864   if (TREE_CODE (val_expr) != COMPONENT_REF)
15865     return NULL_TREE;
15866
15867   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15868                               &mode, &unsignedp, &volatilep, true);
15869
15870   if (cvar == NULL_TREE
15871       || TREE_CODE (cvar) != VAR_DECL
15872       || DECL_ARTIFICIAL (cvar)
15873       || !TREE_PUBLIC (cvar))
15874     return NULL_TREE;
15875
15876   *value = 0;
15877   if (offset != NULL)
15878     {
15879       if (!host_integerp (offset, 0))
15880         return NULL_TREE;
15881       *value = tree_low_cst (offset, 0);
15882     }
15883   if (bitpos != 0)
15884     *value += bitpos / BITS_PER_UNIT;
15885
15886   return cvar;
15887 }
15888
15889 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15890    data attribute for a variable or a parameter.  We generate the
15891    DW_AT_const_value attribute only in those cases where the given variable
15892    or parameter does not have a true "location" either in memory or in a
15893    register.  This can happen (for example) when a constant is passed as an
15894    actual argument in a call to an inline function.  (It's possible that
15895    these things can crop up in other ways also.)  Note that one type of
15896    constant value which can be passed into an inlined function is a constant
15897    pointer.  This can happen for example if an actual argument in an inlined
15898    function call evaluates to a compile-time constant address.  */
15899
15900 static bool
15901 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15902                                        enum dwarf_attribute attr)
15903 {
15904   rtx rtl;
15905   dw_loc_list_ref list;
15906   var_loc_list *loc_list;
15907
15908   if (TREE_CODE (decl) == ERROR_MARK)
15909     return false;
15910
15911   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15912               || TREE_CODE (decl) == RESULT_DECL);
15913
15914   /* Try to get some constant RTL for this decl, and use that as the value of
15915      the location.  */
15916
15917   rtl = rtl_for_decl_location (decl);
15918   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15919       && add_const_value_attribute (die, rtl))
15920     return true;
15921
15922   /* See if we have single element location list that is equivalent to
15923      a constant value.  That way we are better to use add_const_value_attribute
15924      rather than expanding constant value equivalent.  */
15925   loc_list = lookup_decl_loc (decl);
15926   if (loc_list
15927       && loc_list->first
15928       && loc_list->first == loc_list->last
15929       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15930       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15931     {
15932       struct var_loc_node *node;
15933
15934       node = loc_list->first;
15935       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15936       if (GET_CODE (rtl) == EXPR_LIST)
15937         rtl = XEXP (rtl, 0);
15938       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15939           && add_const_value_attribute (die, rtl))
15940          return true;
15941     }
15942   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15943   if (list)
15944     {
15945       add_AT_location_description (die, attr, list);
15946       return true;
15947     }
15948   /* None of that worked, so it must not really have a location;
15949      try adding a constant value attribute from the DECL_INITIAL.  */
15950   return tree_add_const_value_attribute_for_decl (die, decl);
15951 }
15952
15953 /* Add VARIABLE and DIE into deferred locations list.  */
15954
15955 static void
15956 defer_location (tree variable, dw_die_ref die)
15957 {
15958   deferred_locations entry;
15959   entry.variable = variable;
15960   entry.die = die;
15961   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15962 }
15963
15964 /* Helper function for tree_add_const_value_attribute.  Natively encode
15965    initializer INIT into an array.  Return true if successful.  */
15966
15967 static bool
15968 native_encode_initializer (tree init, unsigned char *array, int size)
15969 {
15970   tree type;
15971
15972   if (init == NULL_TREE)
15973     return false;
15974
15975   STRIP_NOPS (init);
15976   switch (TREE_CODE (init))
15977     {
15978     case STRING_CST:
15979       type = TREE_TYPE (init);
15980       if (TREE_CODE (type) == ARRAY_TYPE)
15981         {
15982           tree enttype = TREE_TYPE (type);
15983           enum machine_mode mode = TYPE_MODE (enttype);
15984
15985           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15986             return false;
15987           if (int_size_in_bytes (type) != size)
15988             return false;
15989           if (size > TREE_STRING_LENGTH (init))
15990             {
15991               memcpy (array, TREE_STRING_POINTER (init),
15992                       TREE_STRING_LENGTH (init));
15993               memset (array + TREE_STRING_LENGTH (init),
15994                       '\0', size - TREE_STRING_LENGTH (init));
15995             }
15996           else
15997             memcpy (array, TREE_STRING_POINTER (init), size);
15998           return true;
15999         }
16000       return false;
16001     case CONSTRUCTOR:
16002       type = TREE_TYPE (init);
16003       if (int_size_in_bytes (type) != size)
16004         return false;
16005       if (TREE_CODE (type) == ARRAY_TYPE)
16006         {
16007           HOST_WIDE_INT min_index;
16008           unsigned HOST_WIDE_INT cnt;
16009           int curpos = 0, fieldsize;
16010           constructor_elt *ce;
16011
16012           if (TYPE_DOMAIN (type) == NULL_TREE
16013               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16014             return false;
16015
16016           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16017           if (fieldsize <= 0)
16018             return false;
16019
16020           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16021           memset (array, '\0', size);
16022           for (cnt = 0;
16023                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16024                cnt++)
16025             {
16026               tree val = ce->value;
16027               tree index = ce->index;
16028               int pos = curpos;
16029               if (index && TREE_CODE (index) == RANGE_EXPR)
16030                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16031                       * fieldsize;
16032               else if (index)
16033                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16034
16035               if (val)
16036                 {
16037                   STRIP_NOPS (val);
16038                   if (!native_encode_initializer (val, array + pos, fieldsize))
16039                     return false;
16040                 }
16041               curpos = pos + fieldsize;
16042               if (index && TREE_CODE (index) == RANGE_EXPR)
16043                 {
16044                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16045                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16046                   while (count > 0)
16047                     {
16048                       if (val)
16049                         memcpy (array + curpos, array + pos, fieldsize);
16050                       curpos += fieldsize;
16051                     }
16052                 }
16053               gcc_assert (curpos <= size);
16054             }
16055           return true;
16056         }
16057       else if (TREE_CODE (type) == RECORD_TYPE
16058                || TREE_CODE (type) == UNION_TYPE)
16059         {
16060           tree field = NULL_TREE;
16061           unsigned HOST_WIDE_INT cnt;
16062           constructor_elt *ce;
16063
16064           if (int_size_in_bytes (type) != size)
16065             return false;
16066
16067           if (TREE_CODE (type) == RECORD_TYPE)
16068             field = TYPE_FIELDS (type);
16069
16070           for (cnt = 0;
16071                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16072                cnt++, field = field ? TREE_CHAIN (field) : 0)
16073             {
16074               tree val = ce->value;
16075               int pos, fieldsize;
16076
16077               if (ce->index != 0)
16078                 field = ce->index;
16079
16080               if (val)
16081                 STRIP_NOPS (val);
16082
16083               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16084                 return false;
16085
16086               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16087                   && TYPE_DOMAIN (TREE_TYPE (field))
16088                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16089                 return false;
16090               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16091                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16092                 return false;
16093               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16094               pos = int_byte_position (field);
16095               gcc_assert (pos + fieldsize <= size);
16096               if (val
16097                   && !native_encode_initializer (val, array + pos, fieldsize))
16098                 return false;
16099             }
16100           return true;
16101         }
16102       return false;
16103     case VIEW_CONVERT_EXPR:
16104     case NON_LVALUE_EXPR:
16105       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16106     default:
16107       return native_encode_expr (init, array, size) == size;
16108     }
16109 }
16110
16111 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16112    attribute is the const value T.  */
16113
16114 static bool
16115 tree_add_const_value_attribute (dw_die_ref die, tree t)
16116 {
16117   tree init;
16118   tree type = TREE_TYPE (t);
16119   rtx rtl;
16120
16121   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16122     return false;
16123
16124   init = t;
16125   gcc_assert (!DECL_P (init));
16126
16127   rtl = rtl_for_decl_init (init, type);
16128   if (rtl)
16129     return add_const_value_attribute (die, rtl);
16130   /* If the host and target are sane, try harder.  */
16131   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16132            && initializer_constant_valid_p (init, type))
16133     {
16134       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16135       if (size > 0 && (int) size == size)
16136         {
16137           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16138
16139           if (native_encode_initializer (init, array, size))
16140             {
16141               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16142               return true;
16143             }
16144         }
16145     }
16146   return false;
16147 }
16148
16149 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16150    attribute is the const value of T, where T is an integral constant
16151    variable with static storage duration
16152    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16153
16154 static bool
16155 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16156 {
16157
16158   if (!decl
16159       || (TREE_CODE (decl) != VAR_DECL
16160           && TREE_CODE (decl) != CONST_DECL))
16161     return false;
16162
16163     if (TREE_READONLY (decl)
16164         && ! TREE_THIS_VOLATILE (decl)
16165         && DECL_INITIAL (decl))
16166       /* OK */;
16167     else
16168       return false;
16169
16170   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16171   if (get_AT (var_die, DW_AT_const_value))
16172     return false;
16173
16174   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16175 }
16176
16177 /* Convert the CFI instructions for the current function into a
16178    location list.  This is used for DW_AT_frame_base when we targeting
16179    a dwarf2 consumer that does not support the dwarf3
16180    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16181    expressions.  */
16182
16183 static dw_loc_list_ref
16184 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16185 {
16186   dw_fde_ref fde;
16187   dw_loc_list_ref list, *list_tail;
16188   dw_cfi_ref cfi;
16189   dw_cfa_location last_cfa, next_cfa;
16190   const char *start_label, *last_label, *section;
16191   dw_cfa_location remember;
16192
16193   fde = current_fde ();
16194   gcc_assert (fde != NULL);
16195
16196   section = secname_for_decl (current_function_decl);
16197   list_tail = &list;
16198   list = NULL;
16199
16200   memset (&next_cfa, 0, sizeof (next_cfa));
16201   next_cfa.reg = INVALID_REGNUM;
16202   remember = next_cfa;
16203
16204   start_label = fde->dw_fde_begin;
16205
16206   /* ??? Bald assumption that the CIE opcode list does not contain
16207      advance opcodes.  */
16208   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16209     lookup_cfa_1 (cfi, &next_cfa, &remember);
16210
16211   last_cfa = next_cfa;
16212   last_label = start_label;
16213
16214   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16215     switch (cfi->dw_cfi_opc)
16216       {
16217       case DW_CFA_set_loc:
16218       case DW_CFA_advance_loc1:
16219       case DW_CFA_advance_loc2:
16220       case DW_CFA_advance_loc4:
16221         if (!cfa_equal_p (&last_cfa, &next_cfa))
16222           {
16223             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16224                                        start_label, last_label, section);
16225
16226             list_tail = &(*list_tail)->dw_loc_next;
16227             last_cfa = next_cfa;
16228             start_label = last_label;
16229           }
16230         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16231         break;
16232
16233       case DW_CFA_advance_loc:
16234         /* The encoding is complex enough that we should never emit this.  */
16235         gcc_unreachable ();
16236
16237       default:
16238         lookup_cfa_1 (cfi, &next_cfa, &remember);
16239         break;
16240       }
16241
16242   if (!cfa_equal_p (&last_cfa, &next_cfa))
16243     {
16244       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16245                                  start_label, last_label, section);
16246       list_tail = &(*list_tail)->dw_loc_next;
16247       start_label = last_label;
16248     }
16249
16250   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16251                              start_label, fde->dw_fde_end, section);
16252
16253   if (list && list->dw_loc_next)
16254     gen_llsym (list);
16255
16256   return list;
16257 }
16258
16259 /* Compute a displacement from the "steady-state frame pointer" to the
16260    frame base (often the same as the CFA), and store it in
16261    frame_pointer_fb_offset.  OFFSET is added to the displacement
16262    before the latter is negated.  */
16263
16264 static void
16265 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16266 {
16267   rtx reg, elim;
16268
16269 #ifdef FRAME_POINTER_CFA_OFFSET
16270   reg = frame_pointer_rtx;
16271   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16272 #else
16273   reg = arg_pointer_rtx;
16274   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16275 #endif
16276
16277   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16278   if (GET_CODE (elim) == PLUS)
16279     {
16280       offset += INTVAL (XEXP (elim, 1));
16281       elim = XEXP (elim, 0);
16282     }
16283
16284   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16285                && (elim == hard_frame_pointer_rtx
16286                    || elim == stack_pointer_rtx))
16287               || elim == (frame_pointer_needed
16288                           ? hard_frame_pointer_rtx
16289                           : stack_pointer_rtx));
16290
16291   frame_pointer_fb_offset = -offset;
16292 }
16293
16294 /* Generate a DW_AT_name attribute given some string value to be included as
16295    the value of the attribute.  */
16296
16297 static void
16298 add_name_attribute (dw_die_ref die, const char *name_string)
16299 {
16300   if (name_string != NULL && *name_string != 0)
16301     {
16302       if (demangle_name_func)
16303         name_string = (*demangle_name_func) (name_string);
16304
16305       add_AT_string (die, DW_AT_name, name_string);
16306     }
16307 }
16308
16309 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16310
16311 static void
16312 add_comp_dir_attribute (dw_die_ref die)
16313 {
16314   const char *wd = get_src_pwd ();
16315   char *wd1;
16316
16317   if (wd == NULL)
16318     return;
16319
16320   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16321     {
16322       int wdlen;
16323
16324       wdlen = strlen (wd);
16325       wd1 = GGC_NEWVEC (char, wdlen + 2);
16326       strcpy (wd1, wd);
16327       wd1 [wdlen] = DIR_SEPARATOR;
16328       wd1 [wdlen + 1] = 0;
16329       wd = wd1;
16330     }
16331
16332     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16333 }
16334
16335 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16336    default.  */
16337
16338 static int
16339 lower_bound_default (void)
16340 {
16341   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16342     {
16343     case DW_LANG_C:
16344     case DW_LANG_C89:
16345     case DW_LANG_C99:
16346     case DW_LANG_C_plus_plus:
16347     case DW_LANG_ObjC:
16348     case DW_LANG_ObjC_plus_plus:
16349     case DW_LANG_Java:
16350       return 0;
16351     case DW_LANG_Fortran77:
16352     case DW_LANG_Fortran90:
16353     case DW_LANG_Fortran95:
16354       return 1;
16355     case DW_LANG_UPC:
16356     case DW_LANG_D:
16357     case DW_LANG_Python:
16358       return dwarf_version >= 4 ? 0 : -1;
16359     case DW_LANG_Ada95:
16360     case DW_LANG_Ada83:
16361     case DW_LANG_Cobol74:
16362     case DW_LANG_Cobol85:
16363     case DW_LANG_Pascal83:
16364     case DW_LANG_Modula2:
16365     case DW_LANG_PLI:
16366       return dwarf_version >= 4 ? 1 : -1;
16367     default:
16368       return -1;
16369     }
16370 }
16371
16372 /* Given a tree node describing an array bound (either lower or upper) output
16373    a representation for that bound.  */
16374
16375 static void
16376 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16377 {
16378   switch (TREE_CODE (bound))
16379     {
16380     case ERROR_MARK:
16381       return;
16382
16383     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16384     case INTEGER_CST:
16385       {
16386         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16387         int dflt;
16388
16389         /* Use the default if possible.  */
16390         if (bound_attr == DW_AT_lower_bound
16391             && host_integerp (bound, 0)
16392             && (dflt = lower_bound_default ()) != -1
16393             && tree_low_cst (bound, 0) == dflt)
16394           ;
16395
16396         /* Otherwise represent the bound as an unsigned value with the
16397            precision of its type.  The precision and signedness of the
16398            type will be necessary to re-interpret it unambiguously.  */
16399         else if (prec < HOST_BITS_PER_WIDE_INT)
16400           {
16401             unsigned HOST_WIDE_INT mask
16402               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16403             add_AT_unsigned (subrange_die, bound_attr,
16404                              TREE_INT_CST_LOW (bound) & mask);
16405           }
16406         else if (prec == HOST_BITS_PER_WIDE_INT
16407                  || TREE_INT_CST_HIGH (bound) == 0)
16408           add_AT_unsigned (subrange_die, bound_attr,
16409                            TREE_INT_CST_LOW (bound));
16410         else
16411           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16412                          TREE_INT_CST_LOW (bound));
16413       }
16414       break;
16415
16416     CASE_CONVERT:
16417     case VIEW_CONVERT_EXPR:
16418       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16419       break;
16420
16421     case SAVE_EXPR:
16422       break;
16423
16424     case VAR_DECL:
16425     case PARM_DECL:
16426     case RESULT_DECL:
16427       {
16428         dw_die_ref decl_die = lookup_decl_die (bound);
16429
16430         /* ??? Can this happen, or should the variable have been bound
16431            first?  Probably it can, since I imagine that we try to create
16432            the types of parameters in the order in which they exist in
16433            the list, and won't have created a forward reference to a
16434            later parameter.  */
16435         if (decl_die != NULL)
16436           {
16437             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16438             break;
16439           }
16440       }
16441       /* FALLTHRU */
16442
16443     default:
16444       {
16445         /* Otherwise try to create a stack operation procedure to
16446            evaluate the value of the array bound.  */
16447
16448         dw_die_ref ctx, decl_die;
16449         dw_loc_list_ref list;
16450
16451         list = loc_list_from_tree (bound, 2);
16452         if (list == NULL || single_element_loc_list_p (list))
16453           {
16454             /* If DW_AT_*bound is not a reference nor constant, it is
16455                a DWARF expression rather than location description.
16456                For that loc_list_from_tree (bound, 0) is needed.
16457                If that fails to give a single element list,
16458                fall back to outputting this as a reference anyway.  */
16459             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16460             if (list2 && single_element_loc_list_p (list2))
16461               {
16462                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16463                 break;
16464               }
16465           }
16466         if (list == NULL)
16467           break;
16468
16469         if (current_function_decl == 0)
16470           ctx = comp_unit_die;
16471         else
16472           ctx = lookup_decl_die (current_function_decl);
16473
16474         decl_die = new_die (DW_TAG_variable, ctx, bound);
16475         add_AT_flag (decl_die, DW_AT_artificial, 1);
16476         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16477         add_AT_location_description (decl_die, DW_AT_location, list);
16478         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16479         break;
16480       }
16481     }
16482 }
16483
16484 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16485    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16486    Note that the block of subscript information for an array type also
16487    includes information about the element type of the given array type.  */
16488
16489 static void
16490 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16491 {
16492   unsigned dimension_number;
16493   tree lower, upper;
16494   dw_die_ref subrange_die;
16495
16496   for (dimension_number = 0;
16497        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16498        type = TREE_TYPE (type), dimension_number++)
16499     {
16500       tree domain = TYPE_DOMAIN (type);
16501
16502       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16503         break;
16504
16505       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16506          and (in GNU C only) variable bounds.  Handle all three forms
16507          here.  */
16508       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16509       if (domain)
16510         {
16511           /* We have an array type with specified bounds.  */
16512           lower = TYPE_MIN_VALUE (domain);
16513           upper = TYPE_MAX_VALUE (domain);
16514
16515           /* Define the index type.  */
16516           if (TREE_TYPE (domain))
16517             {
16518               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16519                  TREE_TYPE field.  We can't emit debug info for this
16520                  because it is an unnamed integral type.  */
16521               if (TREE_CODE (domain) == INTEGER_TYPE
16522                   && TYPE_NAME (domain) == NULL_TREE
16523                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16524                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16525                 ;
16526               else
16527                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16528                                     type_die);
16529             }
16530
16531           /* ??? If upper is NULL, the array has unspecified length,
16532              but it does have a lower bound.  This happens with Fortran
16533                dimension arr(N:*)
16534              Since the debugger is definitely going to need to know N
16535              to produce useful results, go ahead and output the lower
16536              bound solo, and hope the debugger can cope.  */
16537
16538           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16539           if (upper)
16540             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16541         }
16542
16543       /* Otherwise we have an array type with an unspecified length.  The
16544          DWARF-2 spec does not say how to handle this; let's just leave out the
16545          bounds.  */
16546     }
16547 }
16548
16549 static void
16550 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16551 {
16552   unsigned size;
16553
16554   switch (TREE_CODE (tree_node))
16555     {
16556     case ERROR_MARK:
16557       size = 0;
16558       break;
16559     case ENUMERAL_TYPE:
16560     case RECORD_TYPE:
16561     case UNION_TYPE:
16562     case QUAL_UNION_TYPE:
16563       size = int_size_in_bytes (tree_node);
16564       break;
16565     case FIELD_DECL:
16566       /* For a data member of a struct or union, the DW_AT_byte_size is
16567          generally given as the number of bytes normally allocated for an
16568          object of the *declared* type of the member itself.  This is true
16569          even for bit-fields.  */
16570       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16571       break;
16572     default:
16573       gcc_unreachable ();
16574     }
16575
16576   /* Note that `size' might be -1 when we get to this point.  If it is, that
16577      indicates that the byte size of the entity in question is variable.  We
16578      have no good way of expressing this fact in Dwarf at the present time,
16579      so just let the -1 pass on through.  */
16580   add_AT_unsigned (die, DW_AT_byte_size, size);
16581 }
16582
16583 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16584    which specifies the distance in bits from the highest order bit of the
16585    "containing object" for the bit-field to the highest order bit of the
16586    bit-field itself.
16587
16588    For any given bit-field, the "containing object" is a hypothetical object
16589    (of some integral or enum type) within which the given bit-field lives.  The
16590    type of this hypothetical "containing object" is always the same as the
16591    declared type of the individual bit-field itself.  The determination of the
16592    exact location of the "containing object" for a bit-field is rather
16593    complicated.  It's handled by the `field_byte_offset' function (above).
16594
16595    Note that it is the size (in bytes) of the hypothetical "containing object"
16596    which will be given in the DW_AT_byte_size attribute for this bit-field.
16597    (See `byte_size_attribute' above).  */
16598
16599 static inline void
16600 add_bit_offset_attribute (dw_die_ref die, tree decl)
16601 {
16602   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16603   tree type = DECL_BIT_FIELD_TYPE (decl);
16604   HOST_WIDE_INT bitpos_int;
16605   HOST_WIDE_INT highest_order_object_bit_offset;
16606   HOST_WIDE_INT highest_order_field_bit_offset;
16607   HOST_WIDE_INT unsigned bit_offset;
16608
16609   /* Must be a field and a bit field.  */
16610   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16611
16612   /* We can't yet handle bit-fields whose offsets are variable, so if we
16613      encounter such things, just return without generating any attribute
16614      whatsoever.  Likewise for variable or too large size.  */
16615   if (! host_integerp (bit_position (decl), 0)
16616       || ! host_integerp (DECL_SIZE (decl), 1))
16617     return;
16618
16619   bitpos_int = int_bit_position (decl);
16620
16621   /* Note that the bit offset is always the distance (in bits) from the
16622      highest-order bit of the "containing object" to the highest-order bit of
16623      the bit-field itself.  Since the "high-order end" of any object or field
16624      is different on big-endian and little-endian machines, the computation
16625      below must take account of these differences.  */
16626   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16627   highest_order_field_bit_offset = bitpos_int;
16628
16629   if (! BYTES_BIG_ENDIAN)
16630     {
16631       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16632       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16633     }
16634
16635   bit_offset
16636     = (! BYTES_BIG_ENDIAN
16637        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16638        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16639
16640   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16641 }
16642
16643 /* For a FIELD_DECL node which represents a bit field, output an attribute
16644    which specifies the length in bits of the given field.  */
16645
16646 static inline void
16647 add_bit_size_attribute (dw_die_ref die, tree decl)
16648 {
16649   /* Must be a field and a bit field.  */
16650   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16651               && DECL_BIT_FIELD_TYPE (decl));
16652
16653   if (host_integerp (DECL_SIZE (decl), 1))
16654     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16655 }
16656
16657 /* If the compiled language is ANSI C, then add a 'prototyped'
16658    attribute, if arg types are given for the parameters of a function.  */
16659
16660 static inline void
16661 add_prototyped_attribute (dw_die_ref die, tree func_type)
16662 {
16663   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16664       && TYPE_ARG_TYPES (func_type) != NULL)
16665     add_AT_flag (die, DW_AT_prototyped, 1);
16666 }
16667
16668 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16669    by looking in either the type declaration or object declaration
16670    equate table.  */
16671
16672 static inline dw_die_ref
16673 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16674 {
16675   dw_die_ref origin_die = NULL;
16676
16677   if (TREE_CODE (origin) != FUNCTION_DECL)
16678     {
16679       /* We may have gotten separated from the block for the inlined
16680          function, if we're in an exception handler or some such; make
16681          sure that the abstract function has been written out.
16682
16683          Doing this for nested functions is wrong, however; functions are
16684          distinct units, and our context might not even be inline.  */
16685       tree fn = origin;
16686
16687       if (TYPE_P (fn))
16688         fn = TYPE_STUB_DECL (fn);
16689
16690       fn = decl_function_context (fn);
16691       if (fn)
16692         dwarf2out_abstract_function (fn);
16693     }
16694
16695   if (DECL_P (origin))
16696     origin_die = lookup_decl_die (origin);
16697   else if (TYPE_P (origin))
16698     origin_die = lookup_type_die (origin);
16699
16700   /* XXX: Functions that are never lowered don't always have correct block
16701      trees (in the case of java, they simply have no block tree, in some other
16702      languages).  For these functions, there is nothing we can really do to
16703      output correct debug info for inlined functions in all cases.  Rather
16704      than die, we'll just produce deficient debug info now, in that we will
16705      have variables without a proper abstract origin.  In the future, when all
16706      functions are lowered, we should re-add a gcc_assert (origin_die)
16707      here.  */
16708
16709   if (origin_die)
16710     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16711   return origin_die;
16712 }
16713
16714 /* We do not currently support the pure_virtual attribute.  */
16715
16716 static inline void
16717 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16718 {
16719   if (DECL_VINDEX (func_decl))
16720     {
16721       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16722
16723       if (host_integerp (DECL_VINDEX (func_decl), 0))
16724         add_AT_loc (die, DW_AT_vtable_elem_location,
16725                     new_loc_descr (DW_OP_constu,
16726                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16727                                    0));
16728
16729       /* GNU extension: Record what type this method came from originally.  */
16730       if (debug_info_level > DINFO_LEVEL_TERSE
16731           && DECL_CONTEXT (func_decl))
16732         add_AT_die_ref (die, DW_AT_containing_type,
16733                         lookup_type_die (DECL_CONTEXT (func_decl)));
16734     }
16735 }
16736 \f
16737 /* Add source coordinate attributes for the given decl.  */
16738
16739 static void
16740 add_src_coords_attributes (dw_die_ref die, tree decl)
16741 {
16742   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16743
16744   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16745   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16746 }
16747
16748 /* Add a DW_AT_name attribute and source coordinate attribute for the
16749    given decl, but only if it actually has a name.  */
16750
16751 static void
16752 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16753 {
16754   tree decl_name;
16755
16756   decl_name = DECL_NAME (decl);
16757   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16758     {
16759       const char *name = dwarf2_name (decl, 0);
16760       if (name)
16761         add_name_attribute (die, name);
16762       if (! DECL_ARTIFICIAL (decl))
16763         add_src_coords_attributes (die, decl);
16764
16765       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16766           && TREE_PUBLIC (decl)
16767           && !DECL_ABSTRACT (decl)
16768           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16769           && !is_fortran ())
16770         {
16771           /* Defer until we have an assembler name set.  */
16772           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16773             {
16774               limbo_die_node *asm_name;
16775
16776               asm_name = GGC_CNEW (limbo_die_node);
16777               asm_name->die = die;
16778               asm_name->created_for = decl;
16779               asm_name->next = deferred_asm_name;
16780               deferred_asm_name = asm_name;
16781             }
16782           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16783             add_AT_string (die, AT_linkage_name,
16784                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16785         }
16786     }
16787
16788 #ifdef VMS_DEBUGGING_INFO
16789   /* Get the function's name, as described by its RTL.  This may be different
16790      from the DECL_NAME name used in the source file.  */
16791   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16792     {
16793       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16794                    XEXP (DECL_RTL (decl), 0));
16795       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16796     }
16797 #endif
16798 }
16799
16800 /* Push a new declaration scope.  */
16801
16802 static void
16803 push_decl_scope (tree scope)
16804 {
16805   VEC_safe_push (tree, gc, decl_scope_table, scope);
16806 }
16807
16808 /* Pop a declaration scope.  */
16809
16810 static inline void
16811 pop_decl_scope (void)
16812 {
16813   VEC_pop (tree, decl_scope_table);
16814 }
16815
16816 /* Return the DIE for the scope that immediately contains this type.
16817    Non-named types get global scope.  Named types nested in other
16818    types get their containing scope if it's open, or global scope
16819    otherwise.  All other types (i.e. function-local named types) get
16820    the current active scope.  */
16821
16822 static dw_die_ref
16823 scope_die_for (tree t, dw_die_ref context_die)
16824 {
16825   dw_die_ref scope_die = NULL;
16826   tree containing_scope;
16827   int i;
16828
16829   /* Non-types always go in the current scope.  */
16830   gcc_assert (TYPE_P (t));
16831
16832   containing_scope = TYPE_CONTEXT (t);
16833
16834   /* Use the containing namespace if it was passed in (for a declaration).  */
16835   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16836     {
16837       if (context_die == lookup_decl_die (containing_scope))
16838         /* OK */;
16839       else
16840         containing_scope = NULL_TREE;
16841     }
16842
16843   /* Ignore function type "scopes" from the C frontend.  They mean that
16844      a tagged type is local to a parmlist of a function declarator, but
16845      that isn't useful to DWARF.  */
16846   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16847     containing_scope = NULL_TREE;
16848
16849   if (containing_scope == NULL_TREE)
16850     scope_die = comp_unit_die;
16851   else if (TYPE_P (containing_scope))
16852     {
16853       /* For types, we can just look up the appropriate DIE.  But
16854          first we check to see if we're in the middle of emitting it
16855          so we know where the new DIE should go.  */
16856       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16857         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16858           break;
16859
16860       if (i < 0)
16861         {
16862           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16863                       || TREE_ASM_WRITTEN (containing_scope));
16864
16865           /* If none of the current dies are suitable, we get file scope.  */
16866           scope_die = comp_unit_die;
16867         }
16868       else
16869         scope_die = lookup_type_die (containing_scope);
16870     }
16871   else
16872     scope_die = context_die;
16873
16874   return scope_die;
16875 }
16876
16877 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16878
16879 static inline int
16880 local_scope_p (dw_die_ref context_die)
16881 {
16882   for (; context_die; context_die = context_die->die_parent)
16883     if (context_die->die_tag == DW_TAG_inlined_subroutine
16884         || context_die->die_tag == DW_TAG_subprogram)
16885       return 1;
16886
16887   return 0;
16888 }
16889
16890 /* Returns nonzero if CONTEXT_DIE is a class.  */
16891
16892 static inline int
16893 class_scope_p (dw_die_ref context_die)
16894 {
16895   return (context_die
16896           && (context_die->die_tag == DW_TAG_structure_type
16897               || context_die->die_tag == DW_TAG_class_type
16898               || context_die->die_tag == DW_TAG_interface_type
16899               || context_die->die_tag == DW_TAG_union_type));
16900 }
16901
16902 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16903    whether or not to treat a DIE in this context as a declaration.  */
16904
16905 static inline int
16906 class_or_namespace_scope_p (dw_die_ref context_die)
16907 {
16908   return (class_scope_p (context_die)
16909           || (context_die && context_die->die_tag == DW_TAG_namespace));
16910 }
16911
16912 /* Many forms of DIEs require a "type description" attribute.  This
16913    routine locates the proper "type descriptor" die for the type given
16914    by 'type', and adds a DW_AT_type attribute below the given die.  */
16915
16916 static void
16917 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16918                     int decl_volatile, dw_die_ref context_die)
16919 {
16920   enum tree_code code  = TREE_CODE (type);
16921   dw_die_ref type_die  = NULL;
16922
16923   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16924      or fixed-point type, use the inner type.  This is because we have no
16925      support for unnamed types in base_type_die.  This can happen if this is
16926      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16927   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16928       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16929     type = TREE_TYPE (type), code = TREE_CODE (type);
16930
16931   if (code == ERROR_MARK
16932       /* Handle a special case.  For functions whose return type is void, we
16933          generate *no* type attribute.  (Note that no object may have type
16934          `void', so this only applies to function return types).  */
16935       || code == VOID_TYPE)
16936     return;
16937
16938   type_die = modified_type_die (type,
16939                                 decl_const || TYPE_READONLY (type),
16940                                 decl_volatile || TYPE_VOLATILE (type),
16941                                 context_die);
16942
16943   if (type_die != NULL)
16944     add_AT_die_ref (object_die, DW_AT_type, type_die);
16945 }
16946
16947 /* Given an object die, add the calling convention attribute for the
16948    function call type.  */
16949 static void
16950 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16951 {
16952   enum dwarf_calling_convention value = DW_CC_normal;
16953
16954   value = ((enum dwarf_calling_convention)
16955            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16956
16957   /* DWARF doesn't provide a way to identify a program's source-level
16958      entry point.  DW_AT_calling_convention attributes are only meant
16959      to describe functions' calling conventions.  However, lacking a
16960      better way to signal the Fortran main program, we use this for the
16961      time being, following existing custom.  */
16962   if (is_fortran ()
16963       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16964     value = DW_CC_program;
16965
16966   /* Only add the attribute if the backend requests it, and
16967      is not DW_CC_normal.  */
16968   if (value && (value != DW_CC_normal))
16969     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16970 }
16971
16972 /* Given a tree pointer to a struct, class, union, or enum type node, return
16973    a pointer to the (string) tag name for the given type, or zero if the type
16974    was declared without a tag.  */
16975
16976 static const char *
16977 type_tag (const_tree type)
16978 {
16979   const char *name = 0;
16980
16981   if (TYPE_NAME (type) != 0)
16982     {
16983       tree t = 0;
16984
16985       /* Find the IDENTIFIER_NODE for the type name.  */
16986       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16987         t = TYPE_NAME (type);
16988
16989       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16990          a TYPE_DECL node, regardless of whether or not a `typedef' was
16991          involved.  */
16992       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16993                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16994         {
16995           /* We want to be extra verbose.  Don't call dwarf_name if
16996              DECL_NAME isn't set.  The default hook for decl_printable_name
16997              doesn't like that, and in this context it's correct to return
16998              0, instead of "<anonymous>" or the like.  */
16999           if (DECL_NAME (TYPE_NAME (type)))
17000             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17001         }
17002
17003       /* Now get the name as a string, or invent one.  */
17004       if (!name && t != 0)
17005         name = IDENTIFIER_POINTER (t);
17006     }
17007
17008   return (name == 0 || *name == '\0') ? 0 : name;
17009 }
17010
17011 /* Return the type associated with a data member, make a special check
17012    for bit field types.  */
17013
17014 static inline tree
17015 member_declared_type (const_tree member)
17016 {
17017   return (DECL_BIT_FIELD_TYPE (member)
17018           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17019 }
17020
17021 /* Get the decl's label, as described by its RTL. This may be different
17022    from the DECL_NAME name used in the source file.  */
17023
17024 #if 0
17025 static const char *
17026 decl_start_label (tree decl)
17027 {
17028   rtx x;
17029   const char *fnname;
17030
17031   x = DECL_RTL (decl);
17032   gcc_assert (MEM_P (x));
17033
17034   x = XEXP (x, 0);
17035   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17036
17037   fnname = XSTR (x, 0);
17038   return fnname;
17039 }
17040 #endif
17041 \f
17042 /* These routines generate the internal representation of the DIE's for
17043    the compilation unit.  Debugging information is collected by walking
17044    the declaration trees passed in from dwarf2out_decl().  */
17045
17046 static void
17047 gen_array_type_die (tree type, dw_die_ref context_die)
17048 {
17049   dw_die_ref scope_die = scope_die_for (type, context_die);
17050   dw_die_ref array_die;
17051
17052   /* GNU compilers represent multidimensional array types as sequences of one
17053      dimensional array types whose element types are themselves array types.
17054      We sometimes squish that down to a single array_type DIE with multiple
17055      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17056      say that we are allowed to do this kind of compression in C, because
17057      there is no difference between an array of arrays and a multidimensional
17058      array.  We don't do this for Ada to remain as close as possible to the
17059      actual representation, which is especially important against the language
17060      flexibilty wrt arrays of variable size.  */
17061
17062   bool collapse_nested_arrays = !is_ada ();
17063   tree element_type;
17064
17065   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17066      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17067   if (TYPE_STRING_FLAG (type)
17068       && TREE_CODE (type) == ARRAY_TYPE
17069       && is_fortran ()
17070       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17071     {
17072       HOST_WIDE_INT size;
17073
17074       array_die = new_die (DW_TAG_string_type, scope_die, type);
17075       add_name_attribute (array_die, type_tag (type));
17076       equate_type_number_to_die (type, array_die);
17077       size = int_size_in_bytes (type);
17078       if (size >= 0)
17079         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17080       else if (TYPE_DOMAIN (type) != NULL_TREE
17081                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17082                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17083         {
17084           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17085           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17086
17087           size = int_size_in_bytes (TREE_TYPE (szdecl));
17088           if (loc && size > 0)
17089             {
17090               add_AT_location_description (array_die, DW_AT_string_length, loc);
17091               if (size != DWARF2_ADDR_SIZE)
17092                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17093             }
17094         }
17095       return;
17096     }
17097
17098   /* ??? The SGI dwarf reader fails for array of array of enum types
17099      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17100      array type comes before the outer array type.  We thus call gen_type_die
17101      before we new_die and must prevent nested array types collapsing for this
17102      target.  */
17103
17104 #ifdef MIPS_DEBUGGING_INFO
17105   gen_type_die (TREE_TYPE (type), context_die);
17106   collapse_nested_arrays = false;
17107 #endif
17108
17109   array_die = new_die (DW_TAG_array_type, scope_die, type);
17110   add_name_attribute (array_die, type_tag (type));
17111   equate_type_number_to_die (type, array_die);
17112
17113   if (TREE_CODE (type) == VECTOR_TYPE)
17114     {
17115       /* The frontend feeds us a representation for the vector as a struct
17116          containing an array.  Pull out the array type.  */
17117       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17118       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17119     }
17120
17121   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17122   if (is_fortran ()
17123       && TREE_CODE (type) == ARRAY_TYPE
17124       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17125       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17126     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17127
17128 #if 0
17129   /* We default the array ordering.  SDB will probably do
17130      the right things even if DW_AT_ordering is not present.  It's not even
17131      an issue until we start to get into multidimensional arrays anyway.  If
17132      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17133      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17134      and when we find out that we need to put these in, we will only do so
17135      for multidimensional arrays.  */
17136   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17137 #endif
17138
17139 #ifdef MIPS_DEBUGGING_INFO
17140   /* The SGI compilers handle arrays of unknown bound by setting
17141      AT_declaration and not emitting any subrange DIEs.  */
17142   if (! TYPE_DOMAIN (type))
17143     add_AT_flag (array_die, DW_AT_declaration, 1);
17144   else
17145 #endif
17146     add_subscript_info (array_die, type, collapse_nested_arrays);
17147
17148   /* Add representation of the type of the elements of this array type and
17149      emit the corresponding DIE if we haven't done it already.  */
17150   element_type = TREE_TYPE (type);
17151   if (collapse_nested_arrays)
17152     while (TREE_CODE (element_type) == ARRAY_TYPE)
17153       {
17154         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17155           break;
17156         element_type = TREE_TYPE (element_type);
17157       }
17158
17159 #ifndef MIPS_DEBUGGING_INFO
17160   gen_type_die (element_type, context_die);
17161 #endif
17162
17163   add_type_attribute (array_die, element_type, 0, 0, context_die);
17164
17165   if (get_AT (array_die, DW_AT_name))
17166     add_pubtype (type, array_die);
17167 }
17168
17169 static dw_loc_descr_ref
17170 descr_info_loc (tree val, tree base_decl)
17171 {
17172   HOST_WIDE_INT size;
17173   dw_loc_descr_ref loc, loc2;
17174   enum dwarf_location_atom op;
17175
17176   if (val == base_decl)
17177     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17178
17179   switch (TREE_CODE (val))
17180     {
17181     CASE_CONVERT:
17182       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17183     case VAR_DECL:
17184       return loc_descriptor_from_tree (val, 0);
17185     case INTEGER_CST:
17186       if (host_integerp (val, 0))
17187         return int_loc_descriptor (tree_low_cst (val, 0));
17188       break;
17189     case INDIRECT_REF:
17190       size = int_size_in_bytes (TREE_TYPE (val));
17191       if (size < 0)
17192         break;
17193       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17194       if (!loc)
17195         break;
17196       if (size == DWARF2_ADDR_SIZE)
17197         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17198       else
17199         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17200       return loc;
17201     case POINTER_PLUS_EXPR:
17202     case PLUS_EXPR:
17203       if (host_integerp (TREE_OPERAND (val, 1), 1)
17204           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17205              < 16384)
17206         {
17207           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17208           if (!loc)
17209             break;
17210           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17211         }
17212       else
17213         {
17214           op = DW_OP_plus;
17215         do_binop:
17216           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17217           if (!loc)
17218             break;
17219           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17220           if (!loc2)
17221             break;
17222           add_loc_descr (&loc, loc2);
17223           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17224         }
17225       return loc;
17226     case MINUS_EXPR:
17227       op = DW_OP_minus;
17228       goto do_binop;
17229     case MULT_EXPR:
17230       op = DW_OP_mul;
17231       goto do_binop;
17232     case EQ_EXPR:
17233       op = DW_OP_eq;
17234       goto do_binop;
17235     case NE_EXPR:
17236       op = DW_OP_ne;
17237       goto do_binop;
17238     default:
17239       break;
17240     }
17241   return NULL;
17242 }
17243
17244 static void
17245 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17246                       tree val, tree base_decl)
17247 {
17248   dw_loc_descr_ref loc;
17249
17250   if (host_integerp (val, 0))
17251     {
17252       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17253       return;
17254     }
17255
17256   loc = descr_info_loc (val, base_decl);
17257   if (!loc)
17258     return;
17259
17260   add_AT_loc (die, attr, loc);
17261 }
17262
17263 /* This routine generates DIE for array with hidden descriptor, details
17264    are filled into *info by a langhook.  */
17265
17266 static void
17267 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17268                           dw_die_ref context_die)
17269 {
17270   dw_die_ref scope_die = scope_die_for (type, context_die);
17271   dw_die_ref array_die;
17272   int dim;
17273
17274   array_die = new_die (DW_TAG_array_type, scope_die, type);
17275   add_name_attribute (array_die, type_tag (type));
17276   equate_type_number_to_die (type, array_die);
17277
17278   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17279   if (is_fortran ()
17280       && info->ndimensions >= 2)
17281     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17282
17283   if (info->data_location)
17284     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17285                           info->base_decl);
17286   if (info->associated)
17287     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17288                           info->base_decl);
17289   if (info->allocated)
17290     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17291                           info->base_decl);
17292
17293   for (dim = 0; dim < info->ndimensions; dim++)
17294     {
17295       dw_die_ref subrange_die
17296         = new_die (DW_TAG_subrange_type, array_die, NULL);
17297
17298       if (info->dimen[dim].lower_bound)
17299         {
17300           /* If it is the default value, omit it.  */
17301           int dflt;
17302
17303           if (host_integerp (info->dimen[dim].lower_bound, 0)
17304               && (dflt = lower_bound_default ()) != -1
17305               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17306             ;
17307           else
17308             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17309                                   info->dimen[dim].lower_bound,
17310                                   info->base_decl);
17311         }
17312       if (info->dimen[dim].upper_bound)
17313         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17314                               info->dimen[dim].upper_bound,
17315                               info->base_decl);
17316       if (info->dimen[dim].stride)
17317         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17318                               info->dimen[dim].stride,
17319                               info->base_decl);
17320     }
17321
17322   gen_type_die (info->element_type, context_die);
17323   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17324
17325   if (get_AT (array_die, DW_AT_name))
17326     add_pubtype (type, array_die);
17327 }
17328
17329 #if 0
17330 static void
17331 gen_entry_point_die (tree decl, dw_die_ref context_die)
17332 {
17333   tree origin = decl_ultimate_origin (decl);
17334   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17335
17336   if (origin != NULL)
17337     add_abstract_origin_attribute (decl_die, origin);
17338   else
17339     {
17340       add_name_and_src_coords_attributes (decl_die, decl);
17341       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17342                           0, 0, context_die);
17343     }
17344
17345   if (DECL_ABSTRACT (decl))
17346     equate_decl_number_to_die (decl, decl_die);
17347   else
17348     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17349 }
17350 #endif
17351
17352 /* Walk through the list of incomplete types again, trying once more to
17353    emit full debugging info for them.  */
17354
17355 static void
17356 retry_incomplete_types (void)
17357 {
17358   int i;
17359
17360   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17361     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17362                                   DINFO_USAGE_DIR_USE))
17363       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17364 }
17365
17366 /* Determine what tag to use for a record type.  */
17367
17368 static enum dwarf_tag
17369 record_type_tag (tree type)
17370 {
17371   if (! lang_hooks.types.classify_record)
17372     return DW_TAG_structure_type;
17373
17374   switch (lang_hooks.types.classify_record (type))
17375     {
17376     case RECORD_IS_STRUCT:
17377       return DW_TAG_structure_type;
17378
17379     case RECORD_IS_CLASS:
17380       return DW_TAG_class_type;
17381
17382     case RECORD_IS_INTERFACE:
17383       if (dwarf_version >= 3 || !dwarf_strict)
17384         return DW_TAG_interface_type;
17385       return DW_TAG_structure_type;
17386
17387     default:
17388       gcc_unreachable ();
17389     }
17390 }
17391
17392 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17393    include all of the information about the enumeration values also. Each
17394    enumerated type name/value is listed as a child of the enumerated type
17395    DIE.  */
17396
17397 static dw_die_ref
17398 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17399 {
17400   dw_die_ref type_die = lookup_type_die (type);
17401
17402   if (type_die == NULL)
17403     {
17404       type_die = new_die (DW_TAG_enumeration_type,
17405                           scope_die_for (type, context_die), type);
17406       equate_type_number_to_die (type, type_die);
17407       add_name_attribute (type_die, type_tag (type));
17408       if ((dwarf_version >= 4 || !dwarf_strict)
17409           && ENUM_IS_SCOPED (type))
17410         add_AT_flag (type_die, DW_AT_enum_class, 1);
17411     }
17412   else if (! TYPE_SIZE (type))
17413     return type_die;
17414   else
17415     remove_AT (type_die, DW_AT_declaration);
17416
17417   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17418      given enum type is incomplete, do not generate the DW_AT_byte_size
17419      attribute or the DW_AT_element_list attribute.  */
17420   if (TYPE_SIZE (type))
17421     {
17422       tree link;
17423
17424       TREE_ASM_WRITTEN (type) = 1;
17425       add_byte_size_attribute (type_die, type);
17426       if (TYPE_STUB_DECL (type) != NULL_TREE)
17427         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17428
17429       /* If the first reference to this type was as the return type of an
17430          inline function, then it may not have a parent.  Fix this now.  */
17431       if (type_die->die_parent == NULL)
17432         add_child_die (scope_die_for (type, context_die), type_die);
17433
17434       for (link = TYPE_VALUES (type);
17435            link != NULL; link = TREE_CHAIN (link))
17436         {
17437           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17438           tree value = TREE_VALUE (link);
17439
17440           add_name_attribute (enum_die,
17441                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17442
17443           if (TREE_CODE (value) == CONST_DECL)
17444             value = DECL_INITIAL (value);
17445
17446           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17447             /* DWARF2 does not provide a way of indicating whether or
17448                not enumeration constants are signed or unsigned.  GDB
17449                always assumes the values are signed, so we output all
17450                values as if they were signed.  That means that
17451                enumeration constants with very large unsigned values
17452                will appear to have negative values in the debugger.  */
17453             add_AT_int (enum_die, DW_AT_const_value,
17454                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17455         }
17456     }
17457   else
17458     add_AT_flag (type_die, DW_AT_declaration, 1);
17459
17460   if (get_AT (type_die, DW_AT_name))
17461     add_pubtype (type, type_die);
17462
17463   return type_die;
17464 }
17465
17466 /* Generate a DIE to represent either a real live formal parameter decl or to
17467    represent just the type of some formal parameter position in some function
17468    type.
17469
17470    Note that this routine is a bit unusual because its argument may be a
17471    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17472    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17473    node.  If it's the former then this function is being called to output a
17474    DIE to represent a formal parameter object (or some inlining thereof).  If
17475    it's the latter, then this function is only being called to output a
17476    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17477    argument type of some subprogram type.
17478    If EMIT_NAME_P is true, name and source coordinate attributes
17479    are emitted.  */
17480
17481 static dw_die_ref
17482 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17483                           dw_die_ref context_die)
17484 {
17485   tree node_or_origin = node ? node : origin;
17486   tree ultimate_origin;
17487   dw_die_ref parm_die
17488     = new_die (DW_TAG_formal_parameter, context_die, node);
17489
17490   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17491     {
17492     case tcc_declaration:
17493       ultimate_origin = decl_ultimate_origin (node_or_origin);
17494       if (node || ultimate_origin)
17495         origin = ultimate_origin;
17496       if (origin != NULL)
17497         add_abstract_origin_attribute (parm_die, origin);
17498       else
17499         {
17500           tree type = TREE_TYPE (node);
17501           if (emit_name_p)
17502             add_name_and_src_coords_attributes (parm_die, node);
17503           if (decl_by_reference_p (node))
17504             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17505                                 context_die);
17506           else
17507             add_type_attribute (parm_die, type,
17508                                 TREE_READONLY (node),
17509                                 TREE_THIS_VOLATILE (node),
17510                                 context_die);
17511           if (DECL_ARTIFICIAL (node))
17512             add_AT_flag (parm_die, DW_AT_artificial, 1);
17513         }
17514
17515       if (node && node != origin)
17516         equate_decl_number_to_die (node, parm_die);
17517       if (! DECL_ABSTRACT (node_or_origin))
17518         add_location_or_const_value_attribute (parm_die, node_or_origin,
17519                                                DW_AT_location);
17520
17521       break;
17522
17523     case tcc_type:
17524       /* We were called with some kind of a ..._TYPE node.  */
17525       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17526       break;
17527
17528     default:
17529       gcc_unreachable ();
17530     }
17531
17532   return parm_die;
17533 }
17534
17535 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17536    children DW_TAG_formal_parameter DIEs representing the arguments of the
17537    parameter pack.
17538
17539    PARM_PACK must be a function parameter pack.
17540    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17541    must point to the subsequent arguments of the function PACK_ARG belongs to.
17542    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17543    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17544    following the last one for which a DIE was generated.  */
17545
17546 static dw_die_ref
17547 gen_formal_parameter_pack_die  (tree parm_pack,
17548                                 tree pack_arg,
17549                                 dw_die_ref subr_die,
17550                                 tree *next_arg)
17551 {
17552   tree arg;
17553   dw_die_ref parm_pack_die;
17554
17555   gcc_assert (parm_pack
17556               && lang_hooks.function_parameter_pack_p (parm_pack)
17557               && subr_die);
17558
17559   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17560   add_src_coords_attributes (parm_pack_die, parm_pack);
17561
17562   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17563     {
17564       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17565                                                                  parm_pack))
17566         break;
17567       gen_formal_parameter_die (arg, NULL,
17568                                 false /* Don't emit name attribute.  */,
17569                                 parm_pack_die);
17570     }
17571   if (next_arg)
17572     *next_arg = arg;
17573   return parm_pack_die;
17574 }
17575
17576 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17577    at the end of an (ANSI prototyped) formal parameters list.  */
17578
17579 static void
17580 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17581 {
17582   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17583 }
17584
17585 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17586    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17587    parameters as specified in some function type specification (except for
17588    those which appear as part of a function *definition*).  */
17589
17590 static void
17591 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17592 {
17593   tree link;
17594   tree formal_type = NULL;
17595   tree first_parm_type;
17596   tree arg;
17597
17598   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17599     {
17600       arg = DECL_ARGUMENTS (function_or_method_type);
17601       function_or_method_type = TREE_TYPE (function_or_method_type);
17602     }
17603   else
17604     arg = NULL_TREE;
17605
17606   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17607
17608   /* Make our first pass over the list of formal parameter types and output a
17609      DW_TAG_formal_parameter DIE for each one.  */
17610   for (link = first_parm_type; link; )
17611     {
17612       dw_die_ref parm_die;
17613
17614       formal_type = TREE_VALUE (link);
17615       if (formal_type == void_type_node)
17616         break;
17617
17618       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17619       parm_die = gen_formal_parameter_die (formal_type, NULL,
17620                                            true /* Emit name attribute.  */,
17621                                            context_die);
17622       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17623            && link == first_parm_type)
17624           || (arg && DECL_ARTIFICIAL (arg)))
17625         add_AT_flag (parm_die, DW_AT_artificial, 1);
17626
17627       link = TREE_CHAIN (link);
17628       if (arg)
17629         arg = TREE_CHAIN (arg);
17630     }
17631
17632   /* If this function type has an ellipsis, add a
17633      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17634   if (formal_type != void_type_node)
17635     gen_unspecified_parameters_die (function_or_method_type, context_die);
17636
17637   /* Make our second (and final) pass over the list of formal parameter types
17638      and output DIEs to represent those types (as necessary).  */
17639   for (link = TYPE_ARG_TYPES (function_or_method_type);
17640        link && TREE_VALUE (link);
17641        link = TREE_CHAIN (link))
17642     gen_type_die (TREE_VALUE (link), context_die);
17643 }
17644
17645 /* We want to generate the DIE for TYPE so that we can generate the
17646    die for MEMBER, which has been defined; we will need to refer back
17647    to the member declaration nested within TYPE.  If we're trying to
17648    generate minimal debug info for TYPE, processing TYPE won't do the
17649    trick; we need to attach the member declaration by hand.  */
17650
17651 static void
17652 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17653 {
17654   gen_type_die (type, context_die);
17655
17656   /* If we're trying to avoid duplicate debug info, we may not have
17657      emitted the member decl for this function.  Emit it now.  */
17658   if (TYPE_STUB_DECL (type)
17659       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17660       && ! lookup_decl_die (member))
17661     {
17662       dw_die_ref type_die;
17663       gcc_assert (!decl_ultimate_origin (member));
17664
17665       push_decl_scope (type);
17666       type_die = lookup_type_die (type);
17667       if (TREE_CODE (member) == FUNCTION_DECL)
17668         gen_subprogram_die (member, type_die);
17669       else if (TREE_CODE (member) == FIELD_DECL)
17670         {
17671           /* Ignore the nameless fields that are used to skip bits but handle
17672              C++ anonymous unions and structs.  */
17673           if (DECL_NAME (member) != NULL_TREE
17674               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17675               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17676             {
17677               gen_type_die (member_declared_type (member), type_die);
17678               gen_field_die (member, type_die);
17679             }
17680         }
17681       else
17682         gen_variable_die (member, NULL_TREE, type_die);
17683
17684       pop_decl_scope ();
17685     }
17686 }
17687
17688 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17689    may later generate inlined and/or out-of-line instances of.  */
17690
17691 static void
17692 dwarf2out_abstract_function (tree decl)
17693 {
17694   dw_die_ref old_die;
17695   tree save_fn;
17696   tree context;
17697   int was_abstract;
17698   htab_t old_decl_loc_table;
17699
17700   /* Make sure we have the actual abstract inline, not a clone.  */
17701   decl = DECL_ORIGIN (decl);
17702
17703   old_die = lookup_decl_die (decl);
17704   if (old_die && get_AT (old_die, DW_AT_inline))
17705     /* We've already generated the abstract instance.  */
17706     return;
17707
17708   /* We can be called while recursively when seeing block defining inlined subroutine
17709      DIE.  Be sure to not clobber the outer location table nor use it or we would
17710      get locations in abstract instantces.  */
17711   old_decl_loc_table = decl_loc_table;
17712   decl_loc_table = NULL;
17713
17714   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17715      we don't get confused by DECL_ABSTRACT.  */
17716   if (debug_info_level > DINFO_LEVEL_TERSE)
17717     {
17718       context = decl_class_context (decl);
17719       if (context)
17720         gen_type_die_for_member
17721           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17722     }
17723
17724   /* Pretend we've just finished compiling this function.  */
17725   save_fn = current_function_decl;
17726   current_function_decl = decl;
17727   push_cfun (DECL_STRUCT_FUNCTION (decl));
17728
17729   was_abstract = DECL_ABSTRACT (decl);
17730   set_decl_abstract_flags (decl, 1);
17731   dwarf2out_decl (decl);
17732   if (! was_abstract)
17733     set_decl_abstract_flags (decl, 0);
17734
17735   current_function_decl = save_fn;
17736   decl_loc_table = old_decl_loc_table;
17737   pop_cfun ();
17738 }
17739
17740 /* Helper function of premark_used_types() which gets called through
17741    htab_traverse.
17742
17743    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17744    marked as unused by prune_unused_types.  */
17745
17746 static int
17747 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17748 {
17749   tree type;
17750   dw_die_ref die;
17751
17752   type = (tree) *slot;
17753   die = lookup_type_die (type);
17754   if (die != NULL)
17755     die->die_perennial_p = 1;
17756   return 1;
17757 }
17758
17759 /* Helper function of premark_types_used_by_global_vars which gets called
17760    through htab_traverse.
17761
17762    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17763    marked as unused by prune_unused_types. The DIE of the type is marked
17764    only if the global variable using the type will actually be emitted.  */
17765
17766 static int
17767 premark_types_used_by_global_vars_helper (void **slot,
17768                                           void *data ATTRIBUTE_UNUSED)
17769 {
17770   struct types_used_by_vars_entry *entry;
17771   dw_die_ref die;
17772
17773   entry = (struct types_used_by_vars_entry *) *slot;
17774   gcc_assert (entry->type != NULL
17775               && entry->var_decl != NULL);
17776   die = lookup_type_die (entry->type);
17777   if (die)
17778     {
17779       /* Ask cgraph if the global variable really is to be emitted.
17780          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17781       struct varpool_node *node = varpool_node (entry->var_decl);
17782       if (node->needed)
17783         {
17784           die->die_perennial_p = 1;
17785           /* Keep the parent DIEs as well.  */
17786           while ((die = die->die_parent) && die->die_perennial_p == 0)
17787             die->die_perennial_p = 1;
17788         }
17789     }
17790   return 1;
17791 }
17792
17793 /* Mark all members of used_types_hash as perennial.  */
17794
17795 static void
17796 premark_used_types (void)
17797 {
17798   if (cfun && cfun->used_types_hash)
17799     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17800 }
17801
17802 /* Mark all members of types_used_by_vars_entry as perennial.  */
17803
17804 static void
17805 premark_types_used_by_global_vars (void)
17806 {
17807   if (types_used_by_vars_hash)
17808     htab_traverse (types_used_by_vars_hash,
17809                    premark_types_used_by_global_vars_helper, NULL);
17810 }
17811
17812 /* Generate a DIE to represent a declared function (either file-scope or
17813    block-local).  */
17814
17815 static void
17816 gen_subprogram_die (tree decl, dw_die_ref context_die)
17817 {
17818   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17819   tree origin = decl_ultimate_origin (decl);
17820   dw_die_ref subr_die;
17821   tree fn_arg_types;
17822   tree outer_scope;
17823   dw_die_ref old_die = lookup_decl_die (decl);
17824   int declaration = (current_function_decl != decl
17825                      || class_or_namespace_scope_p (context_die));
17826
17827   premark_used_types ();
17828
17829   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17830      started to generate the abstract instance of an inline, decided to output
17831      its containing class, and proceeded to emit the declaration of the inline
17832      from the member list for the class.  If so, DECLARATION takes priority;
17833      we'll get back to the abstract instance when done with the class.  */
17834
17835   /* The class-scope declaration DIE must be the primary DIE.  */
17836   if (origin && declaration && class_or_namespace_scope_p (context_die))
17837     {
17838       origin = NULL;
17839       gcc_assert (!old_die);
17840     }
17841
17842   /* Now that the C++ front end lazily declares artificial member fns, we
17843      might need to retrofit the declaration into its class.  */
17844   if (!declaration && !origin && !old_die
17845       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17846       && !class_or_namespace_scope_p (context_die)
17847       && debug_info_level > DINFO_LEVEL_TERSE)
17848     old_die = force_decl_die (decl);
17849
17850   if (origin != NULL)
17851     {
17852       gcc_assert (!declaration || local_scope_p (context_die));
17853
17854       /* Fixup die_parent for the abstract instance of a nested
17855          inline function.  */
17856       if (old_die && old_die->die_parent == NULL)
17857         add_child_die (context_die, old_die);
17858
17859       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17860       add_abstract_origin_attribute (subr_die, origin);
17861     }
17862   else if (old_die)
17863     {
17864       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17865       struct dwarf_file_data * file_index = lookup_filename (s.file);
17866
17867       if (!get_AT_flag (old_die, DW_AT_declaration)
17868           /* We can have a normal definition following an inline one in the
17869              case of redefinition of GNU C extern inlines.
17870              It seems reasonable to use AT_specification in this case.  */
17871           && !get_AT (old_die, DW_AT_inline))
17872         {
17873           /* Detect and ignore this case, where we are trying to output
17874              something we have already output.  */
17875           return;
17876         }
17877
17878       /* If the definition comes from the same place as the declaration,
17879          maybe use the old DIE.  We always want the DIE for this function
17880          that has the *_pc attributes to be under comp_unit_die so the
17881          debugger can find it.  We also need to do this for abstract
17882          instances of inlines, since the spec requires the out-of-line copy
17883          to have the same parent.  For local class methods, this doesn't
17884          apply; we just use the old DIE.  */
17885       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17886           && (DECL_ARTIFICIAL (decl)
17887               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17888                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17889                       == (unsigned) s.line))))
17890         {
17891           subr_die = old_die;
17892
17893           /* Clear out the declaration attribute and the formal parameters.
17894              Do not remove all children, because it is possible that this
17895              declaration die was forced using force_decl_die(). In such
17896              cases die that forced declaration die (e.g. TAG_imported_module)
17897              is one of the children that we do not want to remove.  */
17898           remove_AT (subr_die, DW_AT_declaration);
17899           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17900         }
17901       else
17902         {
17903           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17904           add_AT_specification (subr_die, old_die);
17905           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17906             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17907           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17908             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17909         }
17910     }
17911   else
17912     {
17913       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17914
17915       if (TREE_PUBLIC (decl))
17916         add_AT_flag (subr_die, DW_AT_external, 1);
17917
17918       add_name_and_src_coords_attributes (subr_die, decl);
17919       if (debug_info_level > DINFO_LEVEL_TERSE)
17920         {
17921           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17922           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17923                               0, 0, context_die);
17924         }
17925
17926       add_pure_or_virtual_attribute (subr_die, decl);
17927       if (DECL_ARTIFICIAL (decl))
17928         add_AT_flag (subr_die, DW_AT_artificial, 1);
17929
17930       if (TREE_PROTECTED (decl))
17931         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17932       else if (TREE_PRIVATE (decl))
17933         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17934     }
17935
17936   if (declaration)
17937     {
17938       if (!old_die || !get_AT (old_die, DW_AT_inline))
17939         {
17940           add_AT_flag (subr_die, DW_AT_declaration, 1);
17941
17942           /* If this is an explicit function declaration then generate
17943              a DW_AT_explicit attribute.  */
17944           if (lang_hooks.decls.function_decl_explicit_p (decl)
17945               && (dwarf_version >= 3 || !dwarf_strict))
17946             add_AT_flag (subr_die, DW_AT_explicit, 1);
17947
17948           /* The first time we see a member function, it is in the context of
17949              the class to which it belongs.  We make sure of this by emitting
17950              the class first.  The next time is the definition, which is
17951              handled above.  The two may come from the same source text.
17952
17953              Note that force_decl_die() forces function declaration die. It is
17954              later reused to represent definition.  */
17955           equate_decl_number_to_die (decl, subr_die);
17956         }
17957     }
17958   else if (DECL_ABSTRACT (decl))
17959     {
17960       if (DECL_DECLARED_INLINE_P (decl))
17961         {
17962           if (cgraph_function_possibly_inlined_p (decl))
17963             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17964           else
17965             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17966         }
17967       else
17968         {
17969           if (cgraph_function_possibly_inlined_p (decl))
17970             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17971           else
17972             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17973         }
17974
17975       if (DECL_DECLARED_INLINE_P (decl)
17976           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17977         add_AT_flag (subr_die, DW_AT_artificial, 1);
17978
17979       equate_decl_number_to_die (decl, subr_die);
17980     }
17981   else if (!DECL_EXTERNAL (decl))
17982     {
17983       HOST_WIDE_INT cfa_fb_offset;
17984
17985       if (!old_die || !get_AT (old_die, DW_AT_inline))
17986         equate_decl_number_to_die (decl, subr_die);
17987
17988       if (!flag_reorder_blocks_and_partition)
17989         {
17990           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17991                                        current_function_funcdef_no);
17992           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17993           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17994                                        current_function_funcdef_no);
17995           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17996
17997           add_pubname (decl, subr_die);
17998           add_arange (decl, subr_die);
17999         }
18000       else
18001         {  /* Do nothing for now; maybe need to duplicate die, one for
18002               hot section and one for cold section, then use the hot/cold
18003               section begin/end labels to generate the aranges...  */
18004           /*
18005             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18006             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18007             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18008             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18009
18010             add_pubname (decl, subr_die);
18011             add_arange (decl, subr_die);
18012             add_arange (decl, subr_die);
18013            */
18014         }
18015
18016 #ifdef MIPS_DEBUGGING_INFO
18017       /* Add a reference to the FDE for this routine.  */
18018       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18019 #endif
18020
18021       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18022
18023       /* We define the "frame base" as the function's CFA.  This is more
18024          convenient for several reasons: (1) It's stable across the prologue
18025          and epilogue, which makes it better than just a frame pointer,
18026          (2) With dwarf3, there exists a one-byte encoding that allows us
18027          to reference the .debug_frame data by proxy, but failing that,
18028          (3) We can at least reuse the code inspection and interpretation
18029          code that determines the CFA position at various points in the
18030          function.  */
18031       if (dwarf_version >= 3)
18032         {
18033           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18034           add_AT_loc (subr_die, DW_AT_frame_base, op);
18035         }
18036       else
18037         {
18038           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18039           if (list->dw_loc_next)
18040             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18041           else
18042             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18043         }
18044
18045       /* Compute a displacement from the "steady-state frame pointer" to
18046          the CFA.  The former is what all stack slots and argument slots
18047          will reference in the rtl; the later is what we've told the
18048          debugger about.  We'll need to adjust all frame_base references
18049          by this displacement.  */
18050       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18051
18052       if (cfun->static_chain_decl)
18053         add_AT_location_description (subr_die, DW_AT_static_link,
18054                  loc_list_from_tree (cfun->static_chain_decl, 2));
18055     }
18056
18057   /* Generate child dies for template paramaters.  */
18058   if (debug_info_level > DINFO_LEVEL_TERSE)
18059     gen_generic_params_dies (decl);
18060
18061   /* Now output descriptions of the arguments for this function. This gets
18062      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18063      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18064      `...' at the end of the formal parameter list.  In order to find out if
18065      there was a trailing ellipsis or not, we must instead look at the type
18066      associated with the FUNCTION_DECL.  This will be a node of type
18067      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18068      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18069      an ellipsis at the end.  */
18070
18071   /* In the case where we are describing a mere function declaration, all we
18072      need to do here (and all we *can* do here) is to describe the *types* of
18073      its formal parameters.  */
18074   if (debug_info_level <= DINFO_LEVEL_TERSE)
18075     ;
18076   else if (declaration)
18077     gen_formal_types_die (decl, subr_die);
18078   else
18079     {
18080       /* Generate DIEs to represent all known formal parameters.  */
18081       tree parm = DECL_ARGUMENTS (decl);
18082       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18083       tree generic_decl_parm = generic_decl
18084                                 ? DECL_ARGUMENTS (generic_decl)
18085                                 : NULL;
18086
18087       /* Now we want to walk the list of parameters of the function and
18088          emit their relevant DIEs.
18089
18090          We consider the case of DECL being an instance of a generic function
18091          as well as it being a normal function.
18092
18093          If DECL is an instance of a generic function we walk the
18094          parameters of the generic function declaration _and_ the parameters of
18095          DECL itself. This is useful because we want to emit specific DIEs for
18096          function parameter packs and those are declared as part of the
18097          generic function declaration. In that particular case,
18098          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18099          That DIE has children DIEs representing the set of arguments
18100          of the pack. Note that the set of pack arguments can be empty.
18101          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18102          children DIE.
18103
18104          Otherwise, we just consider the parameters of DECL.  */
18105       while (generic_decl_parm || parm)
18106         {
18107           if (generic_decl_parm
18108               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18109             gen_formal_parameter_pack_die (generic_decl_parm,
18110                                            parm, subr_die,
18111                                            &parm);
18112           else if (parm)
18113             {
18114               gen_decl_die (parm, NULL, subr_die);
18115               parm = TREE_CHAIN (parm);
18116             }
18117
18118           if (generic_decl_parm)
18119             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18120         }
18121
18122       /* Decide whether we need an unspecified_parameters DIE at the end.
18123          There are 2 more cases to do this for: 1) the ansi ... declaration -
18124          this is detectable when the end of the arg list is not a
18125          void_type_node 2) an unprototyped function declaration (not a
18126          definition).  This just means that we have no info about the
18127          parameters at all.  */
18128       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18129       if (fn_arg_types != NULL)
18130         {
18131           /* This is the prototyped case, check for....  */
18132           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18133             gen_unspecified_parameters_die (decl, subr_die);
18134         }
18135       else if (DECL_INITIAL (decl) == NULL_TREE)
18136         gen_unspecified_parameters_die (decl, subr_die);
18137     }
18138
18139   /* Output Dwarf info for all of the stuff within the body of the function
18140      (if it has one - it may be just a declaration).  */
18141   outer_scope = DECL_INITIAL (decl);
18142
18143   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18144      a function.  This BLOCK actually represents the outermost binding contour
18145      for the function, i.e. the contour in which the function's formal
18146      parameters and labels get declared. Curiously, it appears that the front
18147      end doesn't actually put the PARM_DECL nodes for the current function onto
18148      the BLOCK_VARS list for this outer scope, but are strung off of the
18149      DECL_ARGUMENTS list for the function instead.
18150
18151      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18152      the LABEL_DECL nodes for the function however, and we output DWARF info
18153      for those in decls_for_scope.  Just within the `outer_scope' there will be
18154      a BLOCK node representing the function's outermost pair of curly braces,
18155      and any blocks used for the base and member initializers of a C++
18156      constructor function.  */
18157   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18158     {
18159       /* Emit a DW_TAG_variable DIE for a named return value.  */
18160       if (DECL_NAME (DECL_RESULT (decl)))
18161         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18162
18163       current_function_has_inlines = 0;
18164       decls_for_scope (outer_scope, subr_die, 0);
18165
18166 #if 0 && defined (MIPS_DEBUGGING_INFO)
18167       if (current_function_has_inlines)
18168         {
18169           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18170           if (! comp_unit_has_inlines)
18171             {
18172               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18173               comp_unit_has_inlines = 1;
18174             }
18175         }
18176 #endif
18177     }
18178   /* Add the calling convention attribute if requested.  */
18179   add_calling_convention_attribute (subr_die, decl);
18180
18181 }
18182
18183 /* Returns a hash value for X (which really is a die_struct).  */
18184
18185 static hashval_t
18186 common_block_die_table_hash (const void *x)
18187 {
18188   const_dw_die_ref d = (const_dw_die_ref) x;
18189   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18190 }
18191
18192 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18193    as decl_id and die_parent of die_struct Y.  */
18194
18195 static int
18196 common_block_die_table_eq (const void *x, const void *y)
18197 {
18198   const_dw_die_ref d = (const_dw_die_ref) x;
18199   const_dw_die_ref e = (const_dw_die_ref) y;
18200   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18201 }
18202
18203 /* Generate a DIE to represent a declared data object.
18204    Either DECL or ORIGIN must be non-null.  */
18205
18206 static void
18207 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18208 {
18209   HOST_WIDE_INT off;
18210   tree com_decl;
18211   tree decl_or_origin = decl ? decl : origin;
18212   tree ultimate_origin;
18213   dw_die_ref var_die;
18214   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18215   dw_die_ref origin_die;
18216   int declaration = (DECL_EXTERNAL (decl_or_origin)
18217                      || class_or_namespace_scope_p (context_die));
18218
18219   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18220   if (decl || ultimate_origin)
18221     origin = ultimate_origin;
18222   com_decl = fortran_common (decl_or_origin, &off);
18223
18224   /* Symbol in common gets emitted as a child of the common block, in the form
18225      of a data member.  */
18226   if (com_decl)
18227     {
18228       dw_die_ref com_die;
18229       dw_loc_list_ref loc;
18230       die_node com_die_arg;
18231
18232       var_die = lookup_decl_die (decl_or_origin);
18233       if (var_die)
18234         {
18235           if (get_AT (var_die, DW_AT_location) == NULL)
18236             {
18237               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18238               if (loc)
18239                 {
18240                   if (off)
18241                     {
18242                       /* Optimize the common case.  */
18243                       if (single_element_loc_list_p (loc)
18244                           && loc->expr->dw_loc_opc == DW_OP_addr
18245                           && loc->expr->dw_loc_next == NULL
18246                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18247                              == SYMBOL_REF)
18248                         loc->expr->dw_loc_oprnd1.v.val_addr
18249                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18250                         else
18251                           loc_list_plus_const (loc, off);
18252                     }
18253                   add_AT_location_description (var_die, DW_AT_location, loc);
18254                   remove_AT (var_die, DW_AT_declaration);
18255                 }
18256             }
18257           return;
18258         }
18259
18260       if (common_block_die_table == NULL)
18261         common_block_die_table
18262           = htab_create_ggc (10, common_block_die_table_hash,
18263                              common_block_die_table_eq, NULL);
18264
18265       com_die_arg.decl_id = DECL_UID (com_decl);
18266       com_die_arg.die_parent = context_die;
18267       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18268       loc = loc_list_from_tree (com_decl, 2);
18269       if (com_die == NULL)
18270         {
18271           const char *cnam
18272             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18273           void **slot;
18274
18275           com_die = new_die (DW_TAG_common_block, context_die, decl);
18276           add_name_and_src_coords_attributes (com_die, com_decl);
18277           if (loc)
18278             {
18279               add_AT_location_description (com_die, DW_AT_location, loc);
18280               /* Avoid sharing the same loc descriptor between
18281                  DW_TAG_common_block and DW_TAG_variable.  */
18282               loc = loc_list_from_tree (com_decl, 2);
18283             }
18284           else if (DECL_EXTERNAL (decl))
18285             add_AT_flag (com_die, DW_AT_declaration, 1);
18286           add_pubname_string (cnam, com_die); /* ??? needed? */
18287           com_die->decl_id = DECL_UID (com_decl);
18288           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18289           *slot = (void *) com_die;
18290         }
18291       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18292         {
18293           add_AT_location_description (com_die, DW_AT_location, loc);
18294           loc = loc_list_from_tree (com_decl, 2);
18295           remove_AT (com_die, DW_AT_declaration);
18296         }
18297       var_die = new_die (DW_TAG_variable, com_die, decl);
18298       add_name_and_src_coords_attributes (var_die, decl);
18299       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18300                           TREE_THIS_VOLATILE (decl), context_die);
18301       add_AT_flag (var_die, DW_AT_external, 1);
18302       if (loc)
18303         {
18304           if (off)
18305             {
18306               /* Optimize the common case.  */
18307               if (single_element_loc_list_p (loc)
18308                   && loc->expr->dw_loc_opc == DW_OP_addr
18309                   && loc->expr->dw_loc_next == NULL
18310                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18311                 loc->expr->dw_loc_oprnd1.v.val_addr
18312                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18313               else
18314                 loc_list_plus_const (loc, off);
18315             }
18316           add_AT_location_description (var_die, DW_AT_location, loc);
18317         }
18318       else if (DECL_EXTERNAL (decl))
18319         add_AT_flag (var_die, DW_AT_declaration, 1);
18320       equate_decl_number_to_die (decl, var_die);
18321       return;
18322     }
18323
18324   /* If the compiler emitted a definition for the DECL declaration
18325      and if we already emitted a DIE for it, don't emit a second
18326      DIE for it again. Allow re-declarations of DECLs that are
18327      inside functions, though.  */
18328   if (old_die && declaration && !local_scope_p (context_die))
18329     return;
18330
18331   /* For static data members, the declaration in the class is supposed
18332      to have DW_TAG_member tag; the specification should still be
18333      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18334   if (declaration && class_scope_p (context_die))
18335     var_die = new_die (DW_TAG_member, context_die, decl);
18336   else
18337     var_die = new_die (DW_TAG_variable, context_die, decl);
18338
18339   origin_die = NULL;
18340   if (origin != NULL)
18341     origin_die = add_abstract_origin_attribute (var_die, origin);
18342
18343   /* Loop unrolling can create multiple blocks that refer to the same
18344      static variable, so we must test for the DW_AT_declaration flag.
18345
18346      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18347      copy decls and set the DECL_ABSTRACT flag on them instead of
18348      sharing them.
18349
18350      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18351
18352      ??? The declare_in_namespace support causes us to get two DIEs for one
18353      variable, both of which are declarations.  We want to avoid considering
18354      one to be a specification, so we must test that this DIE is not a
18355      declaration.  */
18356   else if (old_die && TREE_STATIC (decl) && ! declaration
18357            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18358     {
18359       /* This is a definition of a C++ class level static.  */
18360       add_AT_specification (var_die, old_die);
18361       if (DECL_NAME (decl))
18362         {
18363           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18364           struct dwarf_file_data * file_index = lookup_filename (s.file);
18365
18366           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18367             add_AT_file (var_die, DW_AT_decl_file, file_index);
18368
18369           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18370             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18371         }
18372     }
18373   else
18374     {
18375       tree type = TREE_TYPE (decl);
18376
18377       add_name_and_src_coords_attributes (var_die, decl);
18378       if (decl_by_reference_p (decl))
18379         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18380       else
18381         add_type_attribute (var_die, type, TREE_READONLY (decl),
18382                             TREE_THIS_VOLATILE (decl), context_die);
18383
18384       if (TREE_PUBLIC (decl))
18385         add_AT_flag (var_die, DW_AT_external, 1);
18386
18387       if (DECL_ARTIFICIAL (decl))
18388         add_AT_flag (var_die, DW_AT_artificial, 1);
18389
18390       if (TREE_PROTECTED (decl))
18391         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18392       else if (TREE_PRIVATE (decl))
18393         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18394     }
18395
18396   if (declaration)
18397     add_AT_flag (var_die, DW_AT_declaration, 1);
18398
18399   if (decl && (DECL_ABSTRACT (decl) || declaration))
18400     equate_decl_number_to_die (decl, var_die);
18401
18402   if (! declaration
18403       && (! DECL_ABSTRACT (decl_or_origin)
18404           /* Local static vars are shared between all clones/inlines,
18405              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18406              already set.  */
18407           || (TREE_CODE (decl_or_origin) == VAR_DECL
18408               && TREE_STATIC (decl_or_origin)
18409               && DECL_RTL_SET_P (decl_or_origin)))
18410       /* When abstract origin already has DW_AT_location attribute, no need
18411          to add it again.  */
18412       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18413     {
18414       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18415           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18416         defer_location (decl_or_origin, var_die);
18417       else
18418         add_location_or_const_value_attribute (var_die,
18419                                                decl_or_origin,
18420                                                DW_AT_location);
18421       add_pubname (decl_or_origin, var_die);
18422     }
18423   else
18424     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18425 }
18426
18427 /* Generate a DIE to represent a named constant.  */
18428
18429 static void
18430 gen_const_die (tree decl, dw_die_ref context_die)
18431 {
18432   dw_die_ref const_die;
18433   tree type = TREE_TYPE (decl);
18434
18435   const_die = new_die (DW_TAG_constant, context_die, decl);
18436   add_name_and_src_coords_attributes (const_die, decl);
18437   add_type_attribute (const_die, type, 1, 0, context_die);
18438   if (TREE_PUBLIC (decl))
18439     add_AT_flag (const_die, DW_AT_external, 1);
18440   if (DECL_ARTIFICIAL (decl))
18441     add_AT_flag (const_die, DW_AT_artificial, 1);
18442   tree_add_const_value_attribute_for_decl (const_die, decl);
18443 }
18444
18445 /* Generate a DIE to represent a label identifier.  */
18446
18447 static void
18448 gen_label_die (tree decl, dw_die_ref context_die)
18449 {
18450   tree origin = decl_ultimate_origin (decl);
18451   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18452   rtx insn;
18453   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18454
18455   if (origin != NULL)
18456     add_abstract_origin_attribute (lbl_die, origin);
18457   else
18458     add_name_and_src_coords_attributes (lbl_die, decl);
18459
18460   if (DECL_ABSTRACT (decl))
18461     equate_decl_number_to_die (decl, lbl_die);
18462   else
18463     {
18464       insn = DECL_RTL_IF_SET (decl);
18465
18466       /* Deleted labels are programmer specified labels which have been
18467          eliminated because of various optimizations.  We still emit them
18468          here so that it is possible to put breakpoints on them.  */
18469       if (insn
18470           && (LABEL_P (insn)
18471               || ((NOTE_P (insn)
18472                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18473         {
18474           /* When optimization is enabled (via -O) some parts of the compiler
18475              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18476              represent source-level labels which were explicitly declared by
18477              the user.  This really shouldn't be happening though, so catch
18478              it if it ever does happen.  */
18479           gcc_assert (!INSN_DELETED_P (insn));
18480
18481           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18482           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18483         }
18484     }
18485 }
18486
18487 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18488    attributes to the DIE for a block STMT, to describe where the inlined
18489    function was called from.  This is similar to add_src_coords_attributes.  */
18490
18491 static inline void
18492 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18493 {
18494   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18495
18496   if (dwarf_version >= 3 || !dwarf_strict)
18497     {
18498       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18499       add_AT_unsigned (die, DW_AT_call_line, s.line);
18500     }
18501 }
18502
18503
18504 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18505    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18506
18507 static inline void
18508 add_high_low_attributes (tree stmt, dw_die_ref die)
18509 {
18510   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18511
18512   if (BLOCK_FRAGMENT_CHAIN (stmt)
18513       && (dwarf_version >= 3 || !dwarf_strict))
18514     {
18515       tree chain;
18516
18517       if (inlined_function_outer_scope_p (stmt))
18518         {
18519           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18520                                        BLOCK_NUMBER (stmt));
18521           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18522         }
18523
18524       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18525
18526       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18527       do
18528         {
18529           add_ranges (chain);
18530           chain = BLOCK_FRAGMENT_CHAIN (chain);
18531         }
18532       while (chain);
18533       add_ranges (NULL);
18534     }
18535   else
18536     {
18537       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18538                                    BLOCK_NUMBER (stmt));
18539       add_AT_lbl_id (die, DW_AT_low_pc, label);
18540       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18541                                    BLOCK_NUMBER (stmt));
18542       add_AT_lbl_id (die, DW_AT_high_pc, label);
18543     }
18544 }
18545
18546 /* Generate a DIE for a lexical block.  */
18547
18548 static void
18549 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18550 {
18551   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18552
18553   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18554     add_high_low_attributes (stmt, stmt_die);
18555
18556   decls_for_scope (stmt, stmt_die, depth);
18557 }
18558
18559 /* Generate a DIE for an inlined subprogram.  */
18560
18561 static void
18562 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18563 {
18564   tree decl;
18565
18566   /* The instance of function that is effectively being inlined shall not
18567      be abstract.  */
18568   gcc_assert (! BLOCK_ABSTRACT (stmt));
18569
18570   decl = block_ultimate_origin (stmt);
18571
18572   /* Emit info for the abstract instance first, if we haven't yet.  We
18573      must emit this even if the block is abstract, otherwise when we
18574      emit the block below (or elsewhere), we may end up trying to emit
18575      a die whose origin die hasn't been emitted, and crashing.  */
18576   dwarf2out_abstract_function (decl);
18577
18578   if (! BLOCK_ABSTRACT (stmt))
18579     {
18580       dw_die_ref subr_die
18581         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18582
18583       add_abstract_origin_attribute (subr_die, decl);
18584       if (TREE_ASM_WRITTEN (stmt))
18585         add_high_low_attributes (stmt, subr_die);
18586       add_call_src_coords_attributes (stmt, subr_die);
18587
18588       decls_for_scope (stmt, subr_die, depth);
18589       current_function_has_inlines = 1;
18590     }
18591 }
18592
18593 /* Generate a DIE for a field in a record, or structure.  */
18594
18595 static void
18596 gen_field_die (tree decl, dw_die_ref context_die)
18597 {
18598   dw_die_ref decl_die;
18599
18600   if (TREE_TYPE (decl) == error_mark_node)
18601     return;
18602
18603   decl_die = new_die (DW_TAG_member, context_die, decl);
18604   add_name_and_src_coords_attributes (decl_die, decl);
18605   add_type_attribute (decl_die, member_declared_type (decl),
18606                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18607                       context_die);
18608
18609   if (DECL_BIT_FIELD_TYPE (decl))
18610     {
18611       add_byte_size_attribute (decl_die, decl);
18612       add_bit_size_attribute (decl_die, decl);
18613       add_bit_offset_attribute (decl_die, decl);
18614     }
18615
18616   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18617     add_data_member_location_attribute (decl_die, decl);
18618
18619   if (DECL_ARTIFICIAL (decl))
18620     add_AT_flag (decl_die, DW_AT_artificial, 1);
18621
18622   if (TREE_PROTECTED (decl))
18623     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18624   else if (TREE_PRIVATE (decl))
18625     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18626
18627   /* Equate decl number to die, so that we can look up this decl later on.  */
18628   equate_decl_number_to_die (decl, decl_die);
18629 }
18630
18631 #if 0
18632 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18633    Use modified_type_die instead.
18634    We keep this code here just in case these types of DIEs may be needed to
18635    represent certain things in other languages (e.g. Pascal) someday.  */
18636
18637 static void
18638 gen_pointer_type_die (tree type, dw_die_ref context_die)
18639 {
18640   dw_die_ref ptr_die
18641     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18642
18643   equate_type_number_to_die (type, ptr_die);
18644   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18645   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18646 }
18647
18648 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18649    Use modified_type_die instead.
18650    We keep this code here just in case these types of DIEs may be needed to
18651    represent certain things in other languages (e.g. Pascal) someday.  */
18652
18653 static void
18654 gen_reference_type_die (tree type, dw_die_ref context_die)
18655 {
18656   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18657
18658   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18659     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18660   else
18661     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18662
18663   equate_type_number_to_die (type, ref_die);
18664   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18665   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18666 }
18667 #endif
18668
18669 /* Generate a DIE for a pointer to a member type.  */
18670
18671 static void
18672 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18673 {
18674   dw_die_ref ptr_die
18675     = new_die (DW_TAG_ptr_to_member_type,
18676                scope_die_for (type, context_die), type);
18677
18678   equate_type_number_to_die (type, ptr_die);
18679   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18680                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18681   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18682 }
18683
18684 /* Generate the DIE for the compilation unit.  */
18685
18686 static dw_die_ref
18687 gen_compile_unit_die (const char *filename)
18688 {
18689   dw_die_ref die;
18690   char producer[250];
18691   const char *language_string = lang_hooks.name;
18692   int language;
18693
18694   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18695
18696   if (filename)
18697     {
18698       add_name_attribute (die, filename);
18699       /* Don't add cwd for <built-in>.  */
18700       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18701         add_comp_dir_attribute (die);
18702     }
18703
18704   sprintf (producer, "%s %s", language_string, version_string);
18705
18706 #ifdef MIPS_DEBUGGING_INFO
18707   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18708      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18709      not appear in the producer string, the debugger reaches the conclusion
18710      that the object file is stripped and has no debugging information.
18711      To get the MIPS/SGI debugger to believe that there is debugging
18712      information in the object file, we add a -g to the producer string.  */
18713   if (debug_info_level > DINFO_LEVEL_TERSE)
18714     strcat (producer, " -g");
18715 #endif
18716
18717   add_AT_string (die, DW_AT_producer, producer);
18718
18719   language = DW_LANG_C89;
18720   if (strcmp (language_string, "GNU C++") == 0)
18721     language = DW_LANG_C_plus_plus;
18722   else if (strcmp (language_string, "GNU F77") == 0)
18723     language = DW_LANG_Fortran77;
18724   else if (strcmp (language_string, "GNU Pascal") == 0)
18725     language = DW_LANG_Pascal83;
18726   else if (dwarf_version >= 3 || !dwarf_strict)
18727     {
18728       if (strcmp (language_string, "GNU Ada") == 0)
18729         language = DW_LANG_Ada95;
18730       else if (strcmp (language_string, "GNU Fortran") == 0)
18731         language = DW_LANG_Fortran95;
18732       else if (strcmp (language_string, "GNU Java") == 0)
18733         language = DW_LANG_Java;
18734       else if (strcmp (language_string, "GNU Objective-C") == 0)
18735         language = DW_LANG_ObjC;
18736       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18737         language = DW_LANG_ObjC_plus_plus;
18738     }
18739
18740   add_AT_unsigned (die, DW_AT_language, language);
18741   return die;
18742 }
18743
18744 /* Generate the DIE for a base class.  */
18745
18746 static void
18747 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18748 {
18749   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18750
18751   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18752   add_data_member_location_attribute (die, binfo);
18753
18754   if (BINFO_VIRTUAL_P (binfo))
18755     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18756
18757   if (access == access_public_node)
18758     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18759   else if (access == access_protected_node)
18760     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18761 }
18762
18763 /* Generate a DIE for a class member.  */
18764
18765 static void
18766 gen_member_die (tree type, dw_die_ref context_die)
18767 {
18768   tree member;
18769   tree binfo = TYPE_BINFO (type);
18770   dw_die_ref child;
18771
18772   /* If this is not an incomplete type, output descriptions of each of its
18773      members. Note that as we output the DIEs necessary to represent the
18774      members of this record or union type, we will also be trying to output
18775      DIEs to represent the *types* of those members. However the `type'
18776      function (above) will specifically avoid generating type DIEs for member
18777      types *within* the list of member DIEs for this (containing) type except
18778      for those types (of members) which are explicitly marked as also being
18779      members of this (containing) type themselves.  The g++ front- end can
18780      force any given type to be treated as a member of some other (containing)
18781      type by setting the TYPE_CONTEXT of the given (member) type to point to
18782      the TREE node representing the appropriate (containing) type.  */
18783
18784   /* First output info about the base classes.  */
18785   if (binfo)
18786     {
18787       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18788       int i;
18789       tree base;
18790
18791       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18792         gen_inheritance_die (base,
18793                              (accesses ? VEC_index (tree, accesses, i)
18794                               : access_public_node), context_die);
18795     }
18796
18797   /* Now output info about the data members and type members.  */
18798   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18799     {
18800       /* If we thought we were generating minimal debug info for TYPE
18801          and then changed our minds, some of the member declarations
18802          may have already been defined.  Don't define them again, but
18803          do put them in the right order.  */
18804
18805       child = lookup_decl_die (member);
18806       if (child)
18807         splice_child_die (context_die, child);
18808       else
18809         gen_decl_die (member, NULL, context_die);
18810     }
18811
18812   /* Now output info about the function members (if any).  */
18813   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18814     {
18815       /* Don't include clones in the member list.  */
18816       if (DECL_ABSTRACT_ORIGIN (member))
18817         continue;
18818
18819       child = lookup_decl_die (member);
18820       if (child)
18821         splice_child_die (context_die, child);
18822       else
18823         gen_decl_die (member, NULL, context_die);
18824     }
18825 }
18826
18827 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18828    is set, we pretend that the type was never defined, so we only get the
18829    member DIEs needed by later specification DIEs.  */
18830
18831 static void
18832 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18833                                 enum debug_info_usage usage)
18834 {
18835   dw_die_ref type_die = lookup_type_die (type);
18836   dw_die_ref scope_die = 0;
18837   int nested = 0;
18838   int complete = (TYPE_SIZE (type)
18839                   && (! TYPE_STUB_DECL (type)
18840                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18841   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18842   complete = complete && should_emit_struct_debug (type, usage);
18843
18844   if (type_die && ! complete)
18845     return;
18846
18847   if (TYPE_CONTEXT (type) != NULL_TREE
18848       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18849           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18850     nested = 1;
18851
18852   scope_die = scope_die_for (type, context_die);
18853
18854   if (! type_die || (nested && scope_die == comp_unit_die))
18855     /* First occurrence of type or toplevel definition of nested class.  */
18856     {
18857       dw_die_ref old_die = type_die;
18858
18859       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18860                           ? record_type_tag (type) : DW_TAG_union_type,
18861                           scope_die, type);
18862       equate_type_number_to_die (type, type_die);
18863       if (old_die)
18864         add_AT_specification (type_die, old_die);
18865       else
18866         add_name_attribute (type_die, type_tag (type));
18867     }
18868   else
18869     remove_AT (type_die, DW_AT_declaration);
18870
18871   /* Generate child dies for template paramaters.  */
18872   if (debug_info_level > DINFO_LEVEL_TERSE
18873       && COMPLETE_TYPE_P (type))
18874     gen_generic_params_dies (type);
18875
18876   /* If this type has been completed, then give it a byte_size attribute and
18877      then give a list of members.  */
18878   if (complete && !ns_decl)
18879     {
18880       /* Prevent infinite recursion in cases where the type of some member of
18881          this type is expressed in terms of this type itself.  */
18882       TREE_ASM_WRITTEN (type) = 1;
18883       add_byte_size_attribute (type_die, type);
18884       if (TYPE_STUB_DECL (type) != NULL_TREE)
18885         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18886
18887       /* If the first reference to this type was as the return type of an
18888          inline function, then it may not have a parent.  Fix this now.  */
18889       if (type_die->die_parent == NULL)
18890         add_child_die (scope_die, type_die);
18891
18892       push_decl_scope (type);
18893       gen_member_die (type, type_die);
18894       pop_decl_scope ();
18895
18896       /* GNU extension: Record what type our vtable lives in.  */
18897       if (TYPE_VFIELD (type))
18898         {
18899           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18900
18901           gen_type_die (vtype, context_die);
18902           add_AT_die_ref (type_die, DW_AT_containing_type,
18903                           lookup_type_die (vtype));
18904         }
18905     }
18906   else
18907     {
18908       add_AT_flag (type_die, DW_AT_declaration, 1);
18909
18910       /* We don't need to do this for function-local types.  */
18911       if (TYPE_STUB_DECL (type)
18912           && ! decl_function_context (TYPE_STUB_DECL (type)))
18913         VEC_safe_push (tree, gc, incomplete_types, type);
18914     }
18915
18916   if (get_AT (type_die, DW_AT_name))
18917     add_pubtype (type, type_die);
18918 }
18919
18920 /* Generate a DIE for a subroutine _type_.  */
18921
18922 static void
18923 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18924 {
18925   tree return_type = TREE_TYPE (type);
18926   dw_die_ref subr_die
18927     = new_die (DW_TAG_subroutine_type,
18928                scope_die_for (type, context_die), type);
18929
18930   equate_type_number_to_die (type, subr_die);
18931   add_prototyped_attribute (subr_die, type);
18932   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18933   gen_formal_types_die (type, subr_die);
18934
18935   if (get_AT (subr_die, DW_AT_name))
18936     add_pubtype (type, subr_die);
18937 }
18938
18939 /* Generate a DIE for a type definition.  */
18940
18941 static void
18942 gen_typedef_die (tree decl, dw_die_ref context_die)
18943 {
18944   dw_die_ref type_die;
18945   tree origin;
18946
18947   if (TREE_ASM_WRITTEN (decl))
18948     return;
18949
18950   TREE_ASM_WRITTEN (decl) = 1;
18951   type_die = new_die (DW_TAG_typedef, context_die, decl);
18952   origin = decl_ultimate_origin (decl);
18953   if (origin != NULL)
18954     add_abstract_origin_attribute (type_die, origin);
18955   else
18956     {
18957       tree type;
18958
18959       add_name_and_src_coords_attributes (type_die, decl);
18960       if (DECL_ORIGINAL_TYPE (decl))
18961         {
18962           type = DECL_ORIGINAL_TYPE (decl);
18963
18964           gcc_assert (type != TREE_TYPE (decl));
18965           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18966         }
18967       else
18968         type = TREE_TYPE (decl);
18969
18970       add_type_attribute (type_die, type, TREE_READONLY (decl),
18971                           TREE_THIS_VOLATILE (decl), context_die);
18972     }
18973
18974   if (DECL_ABSTRACT (decl))
18975     equate_decl_number_to_die (decl, type_die);
18976
18977   if (get_AT (type_die, DW_AT_name))
18978     add_pubtype (decl, type_die);
18979 }
18980
18981 /* Generate a type description DIE.  */
18982
18983 static void
18984 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18985                                 enum debug_info_usage usage)
18986 {
18987   int need_pop;
18988   struct array_descr_info info;
18989
18990   if (type == NULL_TREE || type == error_mark_node)
18991     return;
18992
18993   /* If TYPE is a typedef type variant, let's generate debug info
18994      for the parent typedef which TYPE is a type of.  */
18995   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18996       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18997     {
18998       if (TREE_ASM_WRITTEN (type))
18999         return;
19000
19001       /* Prevent broken recursion; we can't hand off to the same type.  */
19002       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19003
19004       /* Use the DIE of the containing namespace as the parent DIE of
19005          the type description DIE we want to generate.  */
19006       if (DECL_CONTEXT (TYPE_NAME (type))
19007           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19008         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19009
19010       TREE_ASM_WRITTEN (type) = 1;
19011       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19012       return;
19013     }
19014
19015   /* If this is an array type with hidden descriptor, handle it first.  */
19016   if (!TREE_ASM_WRITTEN (type)
19017       && lang_hooks.types.get_array_descr_info
19018       && lang_hooks.types.get_array_descr_info (type, &info)
19019       && (dwarf_version >= 3 || !dwarf_strict))
19020     {
19021       gen_descr_array_type_die (type, &info, context_die);
19022       TREE_ASM_WRITTEN (type) = 1;
19023       return;
19024     }
19025
19026   /* We are going to output a DIE to represent the unqualified version
19027      of this type (i.e. without any const or volatile qualifiers) so
19028      get the main variant (i.e. the unqualified version) of this type
19029      now.  (Vectors are special because the debugging info is in the
19030      cloned type itself).  */
19031   if (TREE_CODE (type) != VECTOR_TYPE)
19032     type = type_main_variant (type);
19033
19034   if (TREE_ASM_WRITTEN (type))
19035     return;
19036
19037   switch (TREE_CODE (type))
19038     {
19039     case ERROR_MARK:
19040       break;
19041
19042     case POINTER_TYPE:
19043     case REFERENCE_TYPE:
19044       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19045          ensures that the gen_type_die recursion will terminate even if the
19046          type is recursive.  Recursive types are possible in Ada.  */
19047       /* ??? We could perhaps do this for all types before the switch
19048          statement.  */
19049       TREE_ASM_WRITTEN (type) = 1;
19050
19051       /* For these types, all that is required is that we output a DIE (or a
19052          set of DIEs) to represent the "basis" type.  */
19053       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19054                                 DINFO_USAGE_IND_USE);
19055       break;
19056
19057     case OFFSET_TYPE:
19058       /* This code is used for C++ pointer-to-data-member types.
19059          Output a description of the relevant class type.  */
19060       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19061                                         DINFO_USAGE_IND_USE);
19062
19063       /* Output a description of the type of the object pointed to.  */
19064       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19065                                         DINFO_USAGE_IND_USE);
19066
19067       /* Now output a DIE to represent this pointer-to-data-member type
19068          itself.  */
19069       gen_ptr_to_mbr_type_die (type, context_die);
19070       break;
19071
19072     case FUNCTION_TYPE:
19073       /* Force out return type (in case it wasn't forced out already).  */
19074       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19075                                         DINFO_USAGE_DIR_USE);
19076       gen_subroutine_type_die (type, context_die);
19077       break;
19078
19079     case METHOD_TYPE:
19080       /* Force out return type (in case it wasn't forced out already).  */
19081       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19082                                         DINFO_USAGE_DIR_USE);
19083       gen_subroutine_type_die (type, context_die);
19084       break;
19085
19086     case ARRAY_TYPE:
19087       gen_array_type_die (type, context_die);
19088       break;
19089
19090     case VECTOR_TYPE:
19091       gen_array_type_die (type, context_die);
19092       break;
19093
19094     case ENUMERAL_TYPE:
19095     case RECORD_TYPE:
19096     case UNION_TYPE:
19097     case QUAL_UNION_TYPE:
19098       /* If this is a nested type whose containing class hasn't been written
19099          out yet, writing it out will cover this one, too.  This does not apply
19100          to instantiations of member class templates; they need to be added to
19101          the containing class as they are generated.  FIXME: This hurts the
19102          idea of combining type decls from multiple TUs, since we can't predict
19103          what set of template instantiations we'll get.  */
19104       if (TYPE_CONTEXT (type)
19105           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19106           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19107         {
19108           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19109
19110           if (TREE_ASM_WRITTEN (type))
19111             return;
19112
19113           /* If that failed, attach ourselves to the stub.  */
19114           push_decl_scope (TYPE_CONTEXT (type));
19115           context_die = lookup_type_die (TYPE_CONTEXT (type));
19116           need_pop = 1;
19117         }
19118       else if (TYPE_CONTEXT (type) != NULL_TREE
19119                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19120         {
19121           /* If this type is local to a function that hasn't been written
19122              out yet, use a NULL context for now; it will be fixed up in
19123              decls_for_scope.  */
19124           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19125           need_pop = 0;
19126         }
19127       else
19128         {
19129           context_die = declare_in_namespace (type, context_die);
19130           need_pop = 0;
19131         }
19132
19133       if (TREE_CODE (type) == ENUMERAL_TYPE)
19134         {
19135           /* This might have been written out by the call to
19136              declare_in_namespace.  */
19137           if (!TREE_ASM_WRITTEN (type))
19138             gen_enumeration_type_die (type, context_die);
19139         }
19140       else
19141         gen_struct_or_union_type_die (type, context_die, usage);
19142
19143       if (need_pop)
19144         pop_decl_scope ();
19145
19146       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19147          it up if it is ever completed.  gen_*_type_die will set it for us
19148          when appropriate.  */
19149       return;
19150
19151     case VOID_TYPE:
19152     case INTEGER_TYPE:
19153     case REAL_TYPE:
19154     case FIXED_POINT_TYPE:
19155     case COMPLEX_TYPE:
19156     case BOOLEAN_TYPE:
19157       /* No DIEs needed for fundamental types.  */
19158       break;
19159
19160     case LANG_TYPE:
19161       /* No Dwarf representation currently defined.  */
19162       break;
19163
19164     default:
19165       gcc_unreachable ();
19166     }
19167
19168   TREE_ASM_WRITTEN (type) = 1;
19169 }
19170
19171 static void
19172 gen_type_die (tree type, dw_die_ref context_die)
19173 {
19174   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19175 }
19176
19177 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19178    things which are local to the given block.  */
19179
19180 static void
19181 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19182 {
19183   int must_output_die = 0;
19184   bool inlined_func;
19185
19186   /* Ignore blocks that are NULL.  */
19187   if (stmt == NULL_TREE)
19188     return;
19189
19190   inlined_func = inlined_function_outer_scope_p (stmt);
19191
19192   /* If the block is one fragment of a non-contiguous block, do not
19193      process the variables, since they will have been done by the
19194      origin block.  Do process subblocks.  */
19195   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19196     {
19197       tree sub;
19198
19199       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19200         gen_block_die (sub, context_die, depth + 1);
19201
19202       return;
19203     }
19204
19205   /* Determine if we need to output any Dwarf DIEs at all to represent this
19206      block.  */
19207   if (inlined_func)
19208     /* The outer scopes for inlinings *must* always be represented.  We
19209        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19210     must_output_die = 1;
19211   else
19212     {
19213       /* Determine if this block directly contains any "significant"
19214          local declarations which we will need to output DIEs for.  */
19215       if (debug_info_level > DINFO_LEVEL_TERSE)
19216         /* We are not in terse mode so *any* local declaration counts
19217            as being a "significant" one.  */
19218         must_output_die = ((BLOCK_VARS (stmt) != NULL
19219                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19220                            && (TREE_USED (stmt)
19221                                || TREE_ASM_WRITTEN (stmt)
19222                                || BLOCK_ABSTRACT (stmt)));
19223       else if ((TREE_USED (stmt)
19224                 || TREE_ASM_WRITTEN (stmt)
19225                 || BLOCK_ABSTRACT (stmt))
19226                && !dwarf2out_ignore_block (stmt))
19227         must_output_die = 1;
19228     }
19229
19230   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19231      DIE for any block which contains no significant local declarations at
19232      all.  Rather, in such cases we just call `decls_for_scope' so that any
19233      needed Dwarf info for any sub-blocks will get properly generated. Note
19234      that in terse mode, our definition of what constitutes a "significant"
19235      local declaration gets restricted to include only inlined function
19236      instances and local (nested) function definitions.  */
19237   if (must_output_die)
19238     {
19239       if (inlined_func)
19240         {
19241           /* If STMT block is abstract, that means we have been called
19242              indirectly from dwarf2out_abstract_function.
19243              That function rightfully marks the descendent blocks (of
19244              the abstract function it is dealing with) as being abstract,
19245              precisely to prevent us from emitting any
19246              DW_TAG_inlined_subroutine DIE as a descendent
19247              of an abstract function instance. So in that case, we should
19248              not call gen_inlined_subroutine_die.
19249
19250              Later though, when cgraph asks dwarf2out to emit info
19251              for the concrete instance of the function decl into which
19252              the concrete instance of STMT got inlined, the later will lead
19253              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19254           if (! BLOCK_ABSTRACT (stmt))
19255             gen_inlined_subroutine_die (stmt, context_die, depth);
19256         }
19257       else
19258         gen_lexical_block_die (stmt, context_die, depth);
19259     }
19260   else
19261     decls_for_scope (stmt, context_die, depth);
19262 }
19263
19264 /* Process variable DECL (or variable with origin ORIGIN) within
19265    block STMT and add it to CONTEXT_DIE.  */
19266 static void
19267 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19268 {
19269   dw_die_ref die;
19270   tree decl_or_origin = decl ? decl : origin;
19271
19272   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19273     die = lookup_decl_die (decl_or_origin);
19274   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19275            && TYPE_DECL_IS_STUB (decl_or_origin))
19276     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19277   else
19278     die = NULL;
19279
19280   if (die != NULL && die->die_parent == NULL)
19281     add_child_die (context_die, die);
19282   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19283     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19284                                          stmt, context_die);
19285   else
19286     gen_decl_die (decl, origin, context_die);
19287 }
19288
19289 /* Generate all of the decls declared within a given scope and (recursively)
19290    all of its sub-blocks.  */
19291
19292 static void
19293 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19294 {
19295   tree decl;
19296   unsigned int i;
19297   tree subblocks;
19298
19299   /* Ignore NULL blocks.  */
19300   if (stmt == NULL_TREE)
19301     return;
19302
19303   /* Output the DIEs to represent all of the data objects and typedefs
19304      declared directly within this block but not within any nested
19305      sub-blocks.  Also, nested function and tag DIEs have been
19306      generated with a parent of NULL; fix that up now.  */
19307   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19308     process_scope_var (stmt, decl, NULL_TREE, context_die);
19309   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19310     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19311                        context_die);
19312
19313   /* If we're at -g1, we're not interested in subblocks.  */
19314   if (debug_info_level <= DINFO_LEVEL_TERSE)
19315     return;
19316
19317   /* Output the DIEs to represent all sub-blocks (and the items declared
19318      therein) of this block.  */
19319   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19320        subblocks != NULL;
19321        subblocks = BLOCK_CHAIN (subblocks))
19322     gen_block_die (subblocks, context_die, depth + 1);
19323 }
19324
19325 /* Is this a typedef we can avoid emitting?  */
19326
19327 static inline int
19328 is_redundant_typedef (const_tree decl)
19329 {
19330   if (TYPE_DECL_IS_STUB (decl))
19331     return 1;
19332
19333   if (DECL_ARTIFICIAL (decl)
19334       && DECL_CONTEXT (decl)
19335       && is_tagged_type (DECL_CONTEXT (decl))
19336       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19337       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19338     /* Also ignore the artificial member typedef for the class name.  */
19339     return 1;
19340
19341   return 0;
19342 }
19343
19344 /* Returns the DIE for a context.  */
19345
19346 static inline dw_die_ref
19347 get_context_die (tree context)
19348 {
19349   if (context)
19350     {
19351       /* Find die that represents this context.  */
19352       if (TYPE_P (context))
19353         return force_type_die (TYPE_MAIN_VARIANT (context));
19354       else
19355         return force_decl_die (context);
19356     }
19357   return comp_unit_die;
19358 }
19359
19360 /* Returns the DIE for decl.  A DIE will always be returned.  */
19361
19362 static dw_die_ref
19363 force_decl_die (tree decl)
19364 {
19365   dw_die_ref decl_die;
19366   unsigned saved_external_flag;
19367   tree save_fn = NULL_TREE;
19368   decl_die = lookup_decl_die (decl);
19369   if (!decl_die)
19370     {
19371       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19372
19373       decl_die = lookup_decl_die (decl);
19374       if (decl_die)
19375         return decl_die;
19376
19377       switch (TREE_CODE (decl))
19378         {
19379         case FUNCTION_DECL:
19380           /* Clear current_function_decl, so that gen_subprogram_die thinks
19381              that this is a declaration. At this point, we just want to force
19382              declaration die.  */
19383           save_fn = current_function_decl;
19384           current_function_decl = NULL_TREE;
19385           gen_subprogram_die (decl, context_die);
19386           current_function_decl = save_fn;
19387           break;
19388
19389         case VAR_DECL:
19390           /* Set external flag to force declaration die. Restore it after
19391            gen_decl_die() call.  */
19392           saved_external_flag = DECL_EXTERNAL (decl);
19393           DECL_EXTERNAL (decl) = 1;
19394           gen_decl_die (decl, NULL, context_die);
19395           DECL_EXTERNAL (decl) = saved_external_flag;
19396           break;
19397
19398         case NAMESPACE_DECL:
19399           if (dwarf_version >= 3 || !dwarf_strict)
19400             dwarf2out_decl (decl);
19401           else
19402             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19403             decl_die = comp_unit_die;
19404           break;
19405
19406         default:
19407           gcc_unreachable ();
19408         }
19409
19410       /* We should be able to find the DIE now.  */
19411       if (!decl_die)
19412         decl_die = lookup_decl_die (decl);
19413       gcc_assert (decl_die);
19414     }
19415
19416   return decl_die;
19417 }
19418
19419 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19420    always returned.  */
19421
19422 static dw_die_ref
19423 force_type_die (tree type)
19424 {
19425   dw_die_ref type_die;
19426
19427   type_die = lookup_type_die (type);
19428   if (!type_die)
19429     {
19430       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19431
19432       type_die = modified_type_die (type, TYPE_READONLY (type),
19433                                     TYPE_VOLATILE (type), context_die);
19434       gcc_assert (type_die);
19435     }
19436   return type_die;
19437 }
19438
19439 /* Force out any required namespaces to be able to output DECL,
19440    and return the new context_die for it, if it's changed.  */
19441
19442 static dw_die_ref
19443 setup_namespace_context (tree thing, dw_die_ref context_die)
19444 {
19445   tree context = (DECL_P (thing)
19446                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19447   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19448     /* Force out the namespace.  */
19449     context_die = force_decl_die (context);
19450
19451   return context_die;
19452 }
19453
19454 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19455    type) within its namespace, if appropriate.
19456
19457    For compatibility with older debuggers, namespace DIEs only contain
19458    declarations; all definitions are emitted at CU scope.  */
19459
19460 static dw_die_ref
19461 declare_in_namespace (tree thing, dw_die_ref context_die)
19462 {
19463   dw_die_ref ns_context;
19464
19465   if (debug_info_level <= DINFO_LEVEL_TERSE)
19466     return context_die;
19467
19468   /* If this decl is from an inlined function, then don't try to emit it in its
19469      namespace, as we will get confused.  It would have already been emitted
19470      when the abstract instance of the inline function was emitted anyways.  */
19471   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19472     return context_die;
19473
19474   ns_context = setup_namespace_context (thing, context_die);
19475
19476   if (ns_context != context_die)
19477     {
19478       if (is_fortran ())
19479         return ns_context;
19480       if (DECL_P (thing))
19481         gen_decl_die (thing, NULL, ns_context);
19482       else
19483         gen_type_die (thing, ns_context);
19484     }
19485   return context_die;
19486 }
19487
19488 /* Generate a DIE for a namespace or namespace alias.  */
19489
19490 static void
19491 gen_namespace_die (tree decl, dw_die_ref context_die)
19492 {
19493   dw_die_ref namespace_die;
19494
19495   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19496      they are an alias of.  */
19497   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19498     {
19499       /* Output a real namespace or module.  */
19500       context_die = setup_namespace_context (decl, comp_unit_die);
19501       namespace_die = new_die (is_fortran ()
19502                                ? DW_TAG_module : DW_TAG_namespace,
19503                                context_die, decl);
19504       /* For Fortran modules defined in different CU don't add src coords.  */
19505       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19506         {
19507           const char *name = dwarf2_name (decl, 0);
19508           if (name)
19509             add_name_attribute (namespace_die, name);
19510         }
19511       else
19512         add_name_and_src_coords_attributes (namespace_die, decl);
19513       if (DECL_EXTERNAL (decl))
19514         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19515       equate_decl_number_to_die (decl, namespace_die);
19516     }
19517   else
19518     {
19519       /* Output a namespace alias.  */
19520
19521       /* Force out the namespace we are an alias of, if necessary.  */
19522       dw_die_ref origin_die
19523         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19524
19525       if (DECL_CONTEXT (decl) == NULL_TREE
19526           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19527         context_die = setup_namespace_context (decl, comp_unit_die);
19528       /* Now create the namespace alias DIE.  */
19529       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19530       add_name_and_src_coords_attributes (namespace_die, decl);
19531       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19532       equate_decl_number_to_die (decl, namespace_die);
19533     }
19534 }
19535
19536 /* Generate Dwarf debug information for a decl described by DECL.  */
19537
19538 static void
19539 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19540 {
19541   tree decl_or_origin = decl ? decl : origin;
19542   tree class_origin = NULL, ultimate_origin;
19543
19544   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19545     return;
19546
19547   switch (TREE_CODE (decl_or_origin))
19548     {
19549     case ERROR_MARK:
19550       break;
19551
19552     case CONST_DECL:
19553       if (!is_fortran ())
19554         {
19555           /* The individual enumerators of an enum type get output when we output
19556              the Dwarf representation of the relevant enum type itself.  */
19557           break;
19558         }
19559
19560       /* Emit its type.  */
19561       gen_type_die (TREE_TYPE (decl), context_die);
19562
19563       /* And its containing namespace.  */
19564       context_die = declare_in_namespace (decl, context_die);
19565
19566       gen_const_die (decl, context_die);
19567       break;
19568
19569     case FUNCTION_DECL:
19570       /* Don't output any DIEs to represent mere function declarations,
19571          unless they are class members or explicit block externs.  */
19572       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19573           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19574           && (current_function_decl == NULL_TREE
19575               || DECL_ARTIFICIAL (decl_or_origin)))
19576         break;
19577
19578 #if 0
19579       /* FIXME */
19580       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19581          on local redeclarations of global functions.  That seems broken.  */
19582       if (current_function_decl != decl)
19583         /* This is only a declaration.  */;
19584 #endif
19585
19586       /* If we're emitting a clone, emit info for the abstract instance.  */
19587       if (origin || DECL_ORIGIN (decl) != decl)
19588         dwarf2out_abstract_function (origin
19589                                      ? DECL_ORIGIN (origin)
19590                                      : DECL_ABSTRACT_ORIGIN (decl));
19591
19592       /* If we're emitting an out-of-line copy of an inline function,
19593          emit info for the abstract instance and set up to refer to it.  */
19594       else if (cgraph_function_possibly_inlined_p (decl)
19595                && ! DECL_ABSTRACT (decl)
19596                && ! class_or_namespace_scope_p (context_die)
19597                /* dwarf2out_abstract_function won't emit a die if this is just
19598                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19599                   that case, because that works only if we have a die.  */
19600                && DECL_INITIAL (decl) != NULL_TREE)
19601         {
19602           dwarf2out_abstract_function (decl);
19603           set_decl_origin_self (decl);
19604         }
19605
19606       /* Otherwise we're emitting the primary DIE for this decl.  */
19607       else if (debug_info_level > DINFO_LEVEL_TERSE)
19608         {
19609           /* Before we describe the FUNCTION_DECL itself, make sure that we
19610              have described its return type.  */
19611           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19612
19613           /* And its virtual context.  */
19614           if (DECL_VINDEX (decl) != NULL_TREE)
19615             gen_type_die (DECL_CONTEXT (decl), context_die);
19616
19617           /* And its containing type.  */
19618           if (!origin)
19619             origin = decl_class_context (decl);
19620           if (origin != NULL_TREE)
19621             gen_type_die_for_member (origin, decl, context_die);
19622
19623           /* And its containing namespace.  */
19624           context_die = declare_in_namespace (decl, context_die);
19625         }
19626
19627       /* Now output a DIE to represent the function itself.  */
19628       if (decl)
19629         gen_subprogram_die (decl, context_die);
19630       break;
19631
19632     case TYPE_DECL:
19633       /* If we are in terse mode, don't generate any DIEs to represent any
19634          actual typedefs.  */
19635       if (debug_info_level <= DINFO_LEVEL_TERSE)
19636         break;
19637
19638       /* In the special case of a TYPE_DECL node representing the declaration
19639          of some type tag, if the given TYPE_DECL is marked as having been
19640          instantiated from some other (original) TYPE_DECL node (e.g. one which
19641          was generated within the original definition of an inline function) we
19642          used to generate a special (abbreviated) DW_TAG_structure_type,
19643          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19644          should be actually referencing those DIEs, as variable DIEs with that
19645          type would be emitted already in the abstract origin, so it was always
19646          removed during unused type prunning.  Don't add anything in this
19647          case.  */
19648       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19649         break;
19650
19651       if (is_redundant_typedef (decl))
19652         gen_type_die (TREE_TYPE (decl), context_die);
19653       else
19654         /* Output a DIE to represent the typedef itself.  */
19655         gen_typedef_die (decl, context_die);
19656       break;
19657
19658     case LABEL_DECL:
19659       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19660         gen_label_die (decl, context_die);
19661       break;
19662
19663     case VAR_DECL:
19664     case RESULT_DECL:
19665       /* If we are in terse mode, don't generate any DIEs to represent any
19666          variable declarations or definitions.  */
19667       if (debug_info_level <= DINFO_LEVEL_TERSE)
19668         break;
19669
19670       /* Output any DIEs that are needed to specify the type of this data
19671          object.  */
19672       if (decl_by_reference_p (decl_or_origin))
19673         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19674       else
19675         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19676
19677       /* And its containing type.  */
19678       class_origin = decl_class_context (decl_or_origin);
19679       if (class_origin != NULL_TREE)
19680         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19681
19682       /* And its containing namespace.  */
19683       context_die = declare_in_namespace (decl_or_origin, context_die);
19684
19685       /* Now output the DIE to represent the data object itself.  This gets
19686          complicated because of the possibility that the VAR_DECL really
19687          represents an inlined instance of a formal parameter for an inline
19688          function.  */
19689       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19690       if (ultimate_origin != NULL_TREE
19691           && TREE_CODE (ultimate_origin) == PARM_DECL)
19692         gen_formal_parameter_die (decl, origin,
19693                                   true /* Emit name attribute.  */,
19694                                   context_die);
19695       else
19696         gen_variable_die (decl, origin, context_die);
19697       break;
19698
19699     case FIELD_DECL:
19700       /* Ignore the nameless fields that are used to skip bits but handle C++
19701          anonymous unions and structs.  */
19702       if (DECL_NAME (decl) != NULL_TREE
19703           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19704           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19705         {
19706           gen_type_die (member_declared_type (decl), context_die);
19707           gen_field_die (decl, context_die);
19708         }
19709       break;
19710
19711     case PARM_DECL:
19712       if (DECL_BY_REFERENCE (decl_or_origin))
19713         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19714       else
19715         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19716       gen_formal_parameter_die (decl, origin,
19717                                 true /* Emit name attribute.  */,
19718                                 context_die);
19719       break;
19720
19721     case NAMESPACE_DECL:
19722     case IMPORTED_DECL:
19723       if (dwarf_version >= 3 || !dwarf_strict)
19724         gen_namespace_die (decl, context_die);
19725       break;
19726
19727     default:
19728       /* Probably some frontend-internal decl.  Assume we don't care.  */
19729       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19730       break;
19731     }
19732 }
19733 \f
19734 /* Output debug information for global decl DECL.  Called from toplev.c after
19735    compilation proper has finished.  */
19736
19737 static void
19738 dwarf2out_global_decl (tree decl)
19739 {
19740   /* Output DWARF2 information for file-scope tentative data object
19741      declarations, file-scope (extern) function declarations (which
19742      had no corresponding body) and file-scope tagged type declarations
19743      and definitions which have not yet been forced out.  */
19744   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19745     dwarf2out_decl (decl);
19746 }
19747
19748 /* Output debug information for type decl DECL.  Called from toplev.c
19749    and from language front ends (to record built-in types).  */
19750 static void
19751 dwarf2out_type_decl (tree decl, int local)
19752 {
19753   if (!local)
19754     dwarf2out_decl (decl);
19755 }
19756
19757 /* Output debug information for imported module or decl DECL.
19758    NAME is non-NULL name in the lexical block if the decl has been renamed.
19759    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19760    that DECL belongs to.
19761    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19762 static void
19763 dwarf2out_imported_module_or_decl_1 (tree decl,
19764                                      tree name,
19765                                      tree lexical_block,
19766                                      dw_die_ref lexical_block_die)
19767 {
19768   expanded_location xloc;
19769   dw_die_ref imported_die = NULL;
19770   dw_die_ref at_import_die;
19771
19772   if (TREE_CODE (decl) == IMPORTED_DECL)
19773     {
19774       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19775       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19776       gcc_assert (decl);
19777     }
19778   else
19779     xloc = expand_location (input_location);
19780
19781   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19782     {
19783       if (is_base_type (TREE_TYPE (decl)))
19784         at_import_die = base_type_die (TREE_TYPE (decl));
19785       else
19786         at_import_die = force_type_die (TREE_TYPE (decl));
19787       /* For namespace N { typedef void T; } using N::T; base_type_die
19788          returns NULL, but DW_TAG_imported_declaration requires
19789          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19790       if (!at_import_die)
19791         {
19792           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19793           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19794           at_import_die = lookup_type_die (TREE_TYPE (decl));
19795           gcc_assert (at_import_die);
19796         }
19797     }
19798   else
19799     {
19800       at_import_die = lookup_decl_die (decl);
19801       if (!at_import_die)
19802         {
19803           /* If we're trying to avoid duplicate debug info, we may not have
19804              emitted the member decl for this field.  Emit it now.  */
19805           if (TREE_CODE (decl) == FIELD_DECL)
19806             {
19807               tree type = DECL_CONTEXT (decl);
19808
19809               if (TYPE_CONTEXT (type)
19810                   && TYPE_P (TYPE_CONTEXT (type))
19811                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19812                                                 DINFO_USAGE_DIR_USE))
19813                 return;
19814               gen_type_die_for_member (type, decl,
19815                                        get_context_die (TYPE_CONTEXT (type)));
19816             }
19817           at_import_die = force_decl_die (decl);
19818         }
19819     }
19820
19821   if (TREE_CODE (decl) == NAMESPACE_DECL)
19822     {
19823       if (dwarf_version >= 3 || !dwarf_strict)
19824         imported_die = new_die (DW_TAG_imported_module,
19825                                 lexical_block_die,
19826                                 lexical_block);
19827       else
19828         return;
19829     }
19830   else
19831     imported_die = new_die (DW_TAG_imported_declaration,
19832                             lexical_block_die,
19833                             lexical_block);
19834
19835   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19836   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19837   if (name)
19838     add_AT_string (imported_die, DW_AT_name,
19839                    IDENTIFIER_POINTER (name));
19840   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19841 }
19842
19843 /* Output debug information for imported module or decl DECL.
19844    NAME is non-NULL name in context if the decl has been renamed.
19845    CHILD is true if decl is one of the renamed decls as part of
19846    importing whole module.  */
19847
19848 static void
19849 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19850                                    bool child)
19851 {
19852   /* dw_die_ref at_import_die;  */
19853   dw_die_ref scope_die;
19854
19855   if (debug_info_level <= DINFO_LEVEL_TERSE)
19856     return;
19857
19858   gcc_assert (decl);
19859
19860   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19861      We need decl DIE for reference and scope die. First, get DIE for the decl
19862      itself.  */
19863
19864   /* Get the scope die for decl context. Use comp_unit_die for global module
19865      or decl. If die is not found for non globals, force new die.  */
19866   if (context
19867       && TYPE_P (context)
19868       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19869     return;
19870
19871   if (!(dwarf_version >= 3 || !dwarf_strict))
19872     return;
19873
19874   scope_die = get_context_die (context);
19875
19876   if (child)
19877     {
19878       gcc_assert (scope_die->die_child);
19879       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19880       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19881       scope_die = scope_die->die_child;
19882     }
19883
19884   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19885   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19886
19887 }
19888
19889 /* Write the debugging output for DECL.  */
19890
19891 void
19892 dwarf2out_decl (tree decl)
19893 {
19894   dw_die_ref context_die = comp_unit_die;
19895
19896   switch (TREE_CODE (decl))
19897     {
19898     case ERROR_MARK:
19899       return;
19900
19901     case FUNCTION_DECL:
19902       /* What we would really like to do here is to filter out all mere
19903          file-scope declarations of file-scope functions which are never
19904          referenced later within this translation unit (and keep all of ones
19905          that *are* referenced later on) but we aren't clairvoyant, so we have
19906          no idea which functions will be referenced in the future (i.e. later
19907          on within the current translation unit). So here we just ignore all
19908          file-scope function declarations which are not also definitions.  If
19909          and when the debugger needs to know something about these functions,
19910          it will have to hunt around and find the DWARF information associated
19911          with the definition of the function.
19912
19913          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19914          nodes represent definitions and which ones represent mere
19915          declarations.  We have to check DECL_INITIAL instead. That's because
19916          the C front-end supports some weird semantics for "extern inline"
19917          function definitions.  These can get inlined within the current
19918          translation unit (and thus, we need to generate Dwarf info for their
19919          abstract instances so that the Dwarf info for the concrete inlined
19920          instances can have something to refer to) but the compiler never
19921          generates any out-of-lines instances of such things (despite the fact
19922          that they *are* definitions).
19923
19924          The important point is that the C front-end marks these "extern
19925          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19926          them anyway. Note that the C++ front-end also plays some similar games
19927          for inline function definitions appearing within include files which
19928          also contain `#pragma interface' pragmas.  */
19929       if (DECL_INITIAL (decl) == NULL_TREE)
19930         return;
19931
19932       /* If we're a nested function, initially use a parent of NULL; if we're
19933          a plain function, this will be fixed up in decls_for_scope.  If
19934          we're a method, it will be ignored, since we already have a DIE.  */
19935       if (decl_function_context (decl)
19936           /* But if we're in terse mode, we don't care about scope.  */
19937           && debug_info_level > DINFO_LEVEL_TERSE)
19938         context_die = NULL;
19939       break;
19940
19941     case VAR_DECL:
19942       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19943          declaration and if the declaration was never even referenced from
19944          within this entire compilation unit.  We suppress these DIEs in
19945          order to save space in the .debug section (by eliminating entries
19946          which are probably useless).  Note that we must not suppress
19947          block-local extern declarations (whether used or not) because that
19948          would screw-up the debugger's name lookup mechanism and cause it to
19949          miss things which really ought to be in scope at a given point.  */
19950       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19951         return;
19952
19953       /* For local statics lookup proper context die.  */
19954       if (TREE_STATIC (decl) && decl_function_context (decl))
19955         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19956
19957       /* If we are in terse mode, don't generate any DIEs to represent any
19958          variable declarations or definitions.  */
19959       if (debug_info_level <= DINFO_LEVEL_TERSE)
19960         return;
19961       break;
19962
19963     case CONST_DECL:
19964       if (debug_info_level <= DINFO_LEVEL_TERSE)
19965         return;
19966       if (!is_fortran ())
19967         return;
19968       if (TREE_STATIC (decl) && decl_function_context (decl))
19969         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19970       break;
19971
19972     case NAMESPACE_DECL:
19973     case IMPORTED_DECL:
19974       if (debug_info_level <= DINFO_LEVEL_TERSE)
19975         return;
19976       if (lookup_decl_die (decl) != NULL)
19977         return;
19978       break;
19979
19980     case TYPE_DECL:
19981       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19982       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19983         return;
19984
19985       /* Don't bother trying to generate any DIEs to represent any of the
19986          normal built-in types for the language we are compiling.  */
19987       if (DECL_IS_BUILTIN (decl))
19988         {
19989           /* OK, we need to generate one for `bool' so GDB knows what type
19990              comparisons have.  */
19991           if (is_cxx ()
19992               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19993               && ! DECL_IGNORED_P (decl))
19994             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19995
19996           return;
19997         }
19998
19999       /* If we are in terse mode, don't generate any DIEs for types.  */
20000       if (debug_info_level <= DINFO_LEVEL_TERSE)
20001         return;
20002
20003       /* If we're a function-scope tag, initially use a parent of NULL;
20004          this will be fixed up in decls_for_scope.  */
20005       if (decl_function_context (decl))
20006         context_die = NULL;
20007
20008       break;
20009
20010     default:
20011       return;
20012     }
20013
20014   gen_decl_die (decl, NULL, context_die);
20015 }
20016
20017 /* Write the debugging output for DECL.  */
20018
20019 static void
20020 dwarf2out_function_decl (tree decl)
20021 {
20022   dwarf2out_decl (decl);
20023
20024   htab_empty (decl_loc_table);
20025 }
20026
20027 /* Output a marker (i.e. a label) for the beginning of the generated code for
20028    a lexical block.  */
20029
20030 static void
20031 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20032                        unsigned int blocknum)
20033 {
20034   switch_to_section (current_function_section ());
20035   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20036 }
20037
20038 /* Output a marker (i.e. a label) for the end of the generated code for a
20039    lexical block.  */
20040
20041 static void
20042 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20043 {
20044   switch_to_section (current_function_section ());
20045   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20046 }
20047
20048 /* Returns nonzero if it is appropriate not to emit any debugging
20049    information for BLOCK, because it doesn't contain any instructions.
20050
20051    Don't allow this for blocks with nested functions or local classes
20052    as we would end up with orphans, and in the presence of scheduling
20053    we may end up calling them anyway.  */
20054
20055 static bool
20056 dwarf2out_ignore_block (const_tree block)
20057 {
20058   tree decl;
20059   unsigned int i;
20060
20061   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20062     if (TREE_CODE (decl) == FUNCTION_DECL
20063         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20064       return 0;
20065   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20066     {
20067       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20068       if (TREE_CODE (decl) == FUNCTION_DECL
20069           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20070       return 0;
20071     }
20072
20073   return 1;
20074 }
20075
20076 /* Hash table routines for file_hash.  */
20077
20078 static int
20079 file_table_eq (const void *p1_p, const void *p2_p)
20080 {
20081   const struct dwarf_file_data *const p1 =
20082     (const struct dwarf_file_data *) p1_p;
20083   const char *const p2 = (const char *) p2_p;
20084   return strcmp (p1->filename, p2) == 0;
20085 }
20086
20087 static hashval_t
20088 file_table_hash (const void *p_p)
20089 {
20090   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20091   return htab_hash_string (p->filename);
20092 }
20093
20094 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20095    dwarf2out.c) and return its "index".  The index of each (known) filename is
20096    just a unique number which is associated with only that one filename.  We
20097    need such numbers for the sake of generating labels (in the .debug_sfnames
20098    section) and references to those files numbers (in the .debug_srcinfo
20099    and.debug_macinfo sections).  If the filename given as an argument is not
20100    found in our current list, add it to the list and assign it the next
20101    available unique index number.  In order to speed up searches, we remember
20102    the index of the filename was looked up last.  This handles the majority of
20103    all searches.  */
20104
20105 static struct dwarf_file_data *
20106 lookup_filename (const char *file_name)
20107 {
20108   void ** slot;
20109   struct dwarf_file_data * created;
20110
20111   /* Check to see if the file name that was searched on the previous
20112      call matches this file name.  If so, return the index.  */
20113   if (file_table_last_lookup
20114       && (file_name == file_table_last_lookup->filename
20115           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20116     return file_table_last_lookup;
20117
20118   /* Didn't match the previous lookup, search the table.  */
20119   slot = htab_find_slot_with_hash (file_table, file_name,
20120                                    htab_hash_string (file_name), INSERT);
20121   if (*slot)
20122     return (struct dwarf_file_data *) *slot;
20123
20124   created = GGC_NEW (struct dwarf_file_data);
20125   created->filename = file_name;
20126   created->emitted_number = 0;
20127   *slot = created;
20128   return created;
20129 }
20130
20131 /* If the assembler will construct the file table, then translate the compiler
20132    internal file table number into the assembler file table number, and emit
20133    a .file directive if we haven't already emitted one yet.  The file table
20134    numbers are different because we prune debug info for unused variables and
20135    types, which may include filenames.  */
20136
20137 static int
20138 maybe_emit_file (struct dwarf_file_data * fd)
20139 {
20140   if (! fd->emitted_number)
20141     {
20142       if (last_emitted_file)
20143         fd->emitted_number = last_emitted_file->emitted_number + 1;
20144       else
20145         fd->emitted_number = 1;
20146       last_emitted_file = fd;
20147
20148       if (DWARF2_ASM_LINE_DEBUG_INFO)
20149         {
20150           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20151           output_quoted_string (asm_out_file,
20152                                 remap_debug_filename (fd->filename));
20153           fputc ('\n', asm_out_file);
20154         }
20155     }
20156
20157   return fd->emitted_number;
20158 }
20159
20160 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20161    That generation should happen after function debug info has been
20162    generated. The value of the attribute is the constant value of ARG.  */
20163
20164 static void
20165 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20166 {
20167   die_arg_entry entry;
20168
20169   if (!die || !arg)
20170     return;
20171
20172   if (!tmpl_value_parm_die_table)
20173     tmpl_value_parm_die_table
20174       = VEC_alloc (die_arg_entry, gc, 32);
20175
20176   entry.die = die;
20177   entry.arg = arg;
20178   VEC_safe_push (die_arg_entry, gc,
20179                  tmpl_value_parm_die_table,
20180                  &entry);
20181 }
20182
20183 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20184    by append_entry_to_tmpl_value_parm_die_table. This function must
20185    be called after function DIEs have been generated.  */
20186
20187 static void
20188 gen_remaining_tmpl_value_param_die_attribute (void)
20189 {
20190   if (tmpl_value_parm_die_table)
20191     {
20192       unsigned i;
20193       die_arg_entry *e;
20194
20195       for (i = 0;
20196            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20197            i++)
20198         tree_add_const_value_attribute (e->die, e->arg);
20199     }
20200 }
20201
20202
20203 /* Replace DW_AT_name for the decl with name.  */
20204
20205 static void
20206 dwarf2out_set_name (tree decl, tree name)
20207 {
20208   dw_die_ref die;
20209   dw_attr_ref attr;
20210   const char *dname;
20211
20212   die = TYPE_SYMTAB_DIE (decl);
20213   if (!die)
20214     return;
20215
20216   dname = dwarf2_name (name, 0);
20217   if (!dname)
20218     return;
20219
20220   attr = get_AT (die, DW_AT_name);
20221   if (attr)
20222     {
20223       struct indirect_string_node *node;
20224
20225       node = find_AT_string (dname);
20226       /* replace the string.  */
20227       attr->dw_attr_val.v.val_str = node;
20228     }
20229
20230   else
20231     add_name_attribute (die, dname);
20232 }
20233
20234 /* Called by the final INSN scan whenever we see a direct function call.
20235    Make an entry into the direct call table, recording the point of call
20236    and a reference to the target function's debug entry.  */
20237
20238 static void
20239 dwarf2out_direct_call (tree targ)
20240 {
20241   dcall_entry e;
20242   tree origin = decl_ultimate_origin (targ);
20243
20244   /* If this is a clone, use the abstract origin as the target.  */
20245   if (origin)
20246     targ = origin;
20247
20248   e.poc_label_num = poc_label_num++;
20249   e.poc_decl = current_function_decl;
20250   e.targ_die = force_decl_die (targ);
20251   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20252
20253   /* Drop a label at the return point to mark the point of call.  */
20254   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20255 }
20256
20257 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20258
20259 static hashval_t
20260 vcall_insn_table_hash (const void *x)
20261 {
20262   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20263 }
20264
20265 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20266    insnd_uid of *Y.  */
20267
20268 static int
20269 vcall_insn_table_eq (const void *x, const void *y)
20270 {
20271   return (((const struct vcall_insn *) x)->insn_uid
20272           == ((const struct vcall_insn *) y)->insn_uid);
20273 }
20274
20275 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20276
20277 static void
20278 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20279 {
20280   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20281   struct vcall_insn **slot;
20282
20283   gcc_assert (item);
20284   item->insn_uid = insn_uid;
20285   item->vtable_slot = vtable_slot;
20286   slot = (struct vcall_insn **)
20287       htab_find_slot_with_hash (vcall_insn_table, &item,
20288                                 (hashval_t) insn_uid, INSERT);
20289   *slot = item;
20290 }
20291
20292 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20293
20294 static unsigned int
20295 lookup_vcall_insn (unsigned int insn_uid)
20296 {
20297   struct vcall_insn item;
20298   struct vcall_insn *p;
20299
20300   item.insn_uid = insn_uid;
20301   item.vtable_slot = 0;
20302   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20303                                                  (void *) &item,
20304                                                  (hashval_t) insn_uid);
20305   if (p == NULL)
20306     return (unsigned int) -1;
20307   return p->vtable_slot;
20308 }
20309
20310
20311 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20312    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20313    is the vtable slot index that we will need to put in the virtual call
20314    table later.  */
20315
20316 static void
20317 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20318 {
20319   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20320     {
20321       tree token = OBJ_TYPE_REF_TOKEN (addr);
20322       if (TREE_CODE (token) == INTEGER_CST)
20323         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20324     }
20325 }
20326
20327 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20328    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20329    with NEW_INSN.  */
20330
20331 static void
20332 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20333 {
20334   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20335
20336   if (vtable_slot != (unsigned int) -1)
20337     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20338 }
20339
20340 /* Called by the final INSN scan whenever we see a virtual function call.
20341    Make an entry into the virtual call table, recording the point of call
20342    and the slot index of the vtable entry used to call the virtual member
20343    function.  The slot index was associated with the INSN_UID during the
20344    lowering to RTL.  */
20345
20346 static void
20347 dwarf2out_virtual_call (int insn_uid)
20348 {
20349   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20350   vcall_entry e;
20351
20352   if (vtable_slot == (unsigned int) -1)
20353     return;
20354
20355   e.poc_label_num = poc_label_num++;
20356   e.vtable_slot = vtable_slot;
20357   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20358
20359   /* Drop a label at the return point to mark the point of call.  */
20360   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20361 }
20362
20363 /* Called by the final INSN scan whenever we see a var location.  We
20364    use it to drop labels in the right places, and throw the location in
20365    our lookup table.  */
20366
20367 static void
20368 dwarf2out_var_location (rtx loc_note)
20369 {
20370   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20371   struct var_loc_node *newloc;
20372   rtx next_real;
20373   static const char *last_label;
20374   static const char *last_postcall_label;
20375   static bool last_in_cold_section_p;
20376   tree decl;
20377
20378   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20379     return;
20380
20381   next_real = next_real_insn (loc_note);
20382   /* If there are no instructions which would be affected by this note,
20383      don't do anything.  */
20384   if (next_real == NULL_RTX)
20385     return;
20386
20387   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20388   newloc = add_var_loc_to_decl (decl, loc_note);
20389   if (newloc == NULL)
20390     return;
20391
20392   /* If there were no real insns between note we processed last time
20393      and this note, use the label we emitted last time.  */
20394   if (last_var_location_insn == NULL_RTX
20395       || last_var_location_insn != next_real
20396       || last_in_cold_section_p != in_cold_section_p)
20397     {
20398       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20399       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20400       loclabel_num++;
20401       last_label = ggc_strdup (loclabel);
20402       last_postcall_label = NULL;
20403     }
20404   newloc->var_loc_note = loc_note;
20405   newloc->next = NULL;
20406
20407   if (!NOTE_DURING_CALL_P (loc_note))
20408     newloc->label = last_label;
20409   else
20410     {
20411       if (!last_postcall_label)
20412         {
20413           sprintf (loclabel, "%s-1", last_label);
20414           last_postcall_label = ggc_strdup (loclabel);
20415         }
20416       newloc->label = last_postcall_label;
20417     }
20418
20419   last_var_location_insn = next_real;
20420   last_in_cold_section_p = in_cold_section_p;
20421 }
20422
20423 /* We need to reset the locations at the beginning of each
20424    function. We can't do this in the end_function hook, because the
20425    declarations that use the locations won't have been output when
20426    that hook is called.  Also compute have_multiple_function_sections here.  */
20427
20428 static void
20429 dwarf2out_begin_function (tree fun)
20430 {
20431   if (function_section (fun) != text_section)
20432     have_multiple_function_sections = true;
20433
20434   dwarf2out_note_section_used ();
20435 }
20436
20437 /* Output a label to mark the beginning of a source code line entry
20438    and record information relating to this source line, in
20439    'line_info_table' for later output of the .debug_line section.  */
20440
20441 static void
20442 dwarf2out_source_line (unsigned int line, const char *filename,
20443                        int discriminator, bool is_stmt)
20444 {
20445   static bool last_is_stmt = true;
20446
20447   if (debug_info_level >= DINFO_LEVEL_NORMAL
20448       && line != 0)
20449     {
20450       int file_num = maybe_emit_file (lookup_filename (filename));
20451
20452       switch_to_section (current_function_section ());
20453
20454       /* If requested, emit something human-readable.  */
20455       if (flag_debug_asm)
20456         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20457                  filename, line);
20458
20459       if (DWARF2_ASM_LINE_DEBUG_INFO)
20460         {
20461           /* Emit the .loc directive understood by GNU as.  */
20462           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20463           if (is_stmt != last_is_stmt)
20464             {
20465               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20466               last_is_stmt = is_stmt;
20467             }
20468           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20469             fprintf (asm_out_file, " discriminator %d", discriminator);
20470           fputc ('\n', asm_out_file);
20471
20472           /* Indicate that line number info exists.  */
20473           line_info_table_in_use++;
20474         }
20475       else if (function_section (current_function_decl) != text_section)
20476         {
20477           dw_separate_line_info_ref line_info;
20478           targetm.asm_out.internal_label (asm_out_file,
20479                                           SEPARATE_LINE_CODE_LABEL,
20480                                           separate_line_info_table_in_use);
20481
20482           /* Expand the line info table if necessary.  */
20483           if (separate_line_info_table_in_use
20484               == separate_line_info_table_allocated)
20485             {
20486               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20487               separate_line_info_table
20488                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20489                                  separate_line_info_table,
20490                                  separate_line_info_table_allocated);
20491               memset (separate_line_info_table
20492                        + separate_line_info_table_in_use,
20493                       0,
20494                       (LINE_INFO_TABLE_INCREMENT
20495                        * sizeof (dw_separate_line_info_entry)));
20496             }
20497
20498           /* Add the new entry at the end of the line_info_table.  */
20499           line_info
20500             = &separate_line_info_table[separate_line_info_table_in_use++];
20501           line_info->dw_file_num = file_num;
20502           line_info->dw_line_num = line;
20503           line_info->function = current_function_funcdef_no;
20504         }
20505       else
20506         {
20507           dw_line_info_ref line_info;
20508
20509           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20510                                      line_info_table_in_use);
20511
20512           /* Expand the line info table if necessary.  */
20513           if (line_info_table_in_use == line_info_table_allocated)
20514             {
20515               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20516               line_info_table
20517                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20518                                  line_info_table_allocated);
20519               memset (line_info_table + line_info_table_in_use, 0,
20520                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20521             }
20522
20523           /* Add the new entry at the end of the line_info_table.  */
20524           line_info = &line_info_table[line_info_table_in_use++];
20525           line_info->dw_file_num = file_num;
20526           line_info->dw_line_num = line;
20527         }
20528     }
20529 }
20530
20531 /* Record the beginning of a new source file.  */
20532
20533 static void
20534 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20535 {
20536   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20537     {
20538       /* Record the beginning of the file for break_out_includes.  */
20539       dw_die_ref bincl_die;
20540
20541       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20542       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20543     }
20544
20545   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20546     {
20547       int file_num = maybe_emit_file (lookup_filename (filename));
20548
20549       switch_to_section (debug_macinfo_section);
20550       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20551       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20552                                    lineno);
20553
20554       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20555     }
20556 }
20557
20558 /* Record the end of a source file.  */
20559
20560 static void
20561 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20562 {
20563   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20564     /* Record the end of the file for break_out_includes.  */
20565     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20566
20567   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20568     {
20569       switch_to_section (debug_macinfo_section);
20570       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20571     }
20572 }
20573
20574 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20575    the tail part of the directive line, i.e. the part which is past the
20576    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20577
20578 static void
20579 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20580                   const char *buffer ATTRIBUTE_UNUSED)
20581 {
20582   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20583     {
20584       switch_to_section (debug_macinfo_section);
20585       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20586       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20587       dw2_asm_output_nstring (buffer, -1, "The macro");
20588     }
20589 }
20590
20591 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20592    the tail part of the directive line, i.e. the part which is past the
20593    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20594
20595 static void
20596 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20597                  const char *buffer ATTRIBUTE_UNUSED)
20598 {
20599   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20600     {
20601       switch_to_section (debug_macinfo_section);
20602       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20603       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20604       dw2_asm_output_nstring (buffer, -1, "The macro");
20605     }
20606 }
20607
20608 /* Set up for Dwarf output at the start of compilation.  */
20609
20610 static void
20611 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20612 {
20613   /* Allocate the file_table.  */
20614   file_table = htab_create_ggc (50, file_table_hash,
20615                                 file_table_eq, NULL);
20616
20617   /* Allocate the decl_die_table.  */
20618   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20619                                     decl_die_table_eq, NULL);
20620
20621   /* Allocate the decl_loc_table.  */
20622   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20623                                     decl_loc_table_eq, NULL);
20624
20625   /* Allocate the initial hunk of the decl_scope_table.  */
20626   decl_scope_table = VEC_alloc (tree, gc, 256);
20627
20628   /* Allocate the initial hunk of the abbrev_die_table.  */
20629   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20630   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20631   /* Zero-th entry is allocated, but unused.  */
20632   abbrev_die_table_in_use = 1;
20633
20634   /* Allocate the initial hunk of the line_info_table.  */
20635   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20636   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20637
20638   /* Zero-th entry is allocated, but unused.  */
20639   line_info_table_in_use = 1;
20640
20641   /* Allocate the pubtypes and pubnames vectors.  */
20642   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20643   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20644
20645   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20646   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20647                                       vcall_insn_table_eq, NULL);
20648
20649   /* Generate the initial DIE for the .debug section.  Note that the (string)
20650      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20651      will (typically) be a relative pathname and that this pathname should be
20652      taken as being relative to the directory from which the compiler was
20653      invoked when the given (base) source file was compiled.  We will fill
20654      in this value in dwarf2out_finish.  */
20655   comp_unit_die = gen_compile_unit_die (NULL);
20656
20657   incomplete_types = VEC_alloc (tree, gc, 64);
20658
20659   used_rtx_array = VEC_alloc (rtx, gc, 32);
20660
20661   debug_info_section = get_section (DEBUG_INFO_SECTION,
20662                                     SECTION_DEBUG, NULL);
20663   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20664                                       SECTION_DEBUG, NULL);
20665   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20666                                        SECTION_DEBUG, NULL);
20667   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20668                                        SECTION_DEBUG, NULL);
20669   debug_line_section = get_section (DEBUG_LINE_SECTION,
20670                                     SECTION_DEBUG, NULL);
20671   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20672                                    SECTION_DEBUG, NULL);
20673   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20674                                         SECTION_DEBUG, NULL);
20675   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20676                                         SECTION_DEBUG, NULL);
20677   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20678                                      SECTION_DEBUG, NULL);
20679   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20680                                      SECTION_DEBUG, NULL);
20681   debug_str_section = get_section (DEBUG_STR_SECTION,
20682                                    DEBUG_STR_SECTION_FLAGS, NULL);
20683   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20684                                       SECTION_DEBUG, NULL);
20685   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20686                                      SECTION_DEBUG, NULL);
20687
20688   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20689   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20690                                DEBUG_ABBREV_SECTION_LABEL, 0);
20691   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20692   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20693                                COLD_TEXT_SECTION_LABEL, 0);
20694   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20695
20696   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20697                                DEBUG_INFO_SECTION_LABEL, 0);
20698   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20699                                DEBUG_LINE_SECTION_LABEL, 0);
20700   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20701                                DEBUG_RANGES_SECTION_LABEL, 0);
20702   switch_to_section (debug_abbrev_section);
20703   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20704   switch_to_section (debug_info_section);
20705   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20706   switch_to_section (debug_line_section);
20707   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20708
20709   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20710     {
20711       switch_to_section (debug_macinfo_section);
20712       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20713                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20714       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20715     }
20716
20717   switch_to_section (text_section);
20718   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20719   if (flag_reorder_blocks_and_partition)
20720     {
20721       cold_text_section = unlikely_text_section ();
20722       switch_to_section (cold_text_section);
20723       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20724     }
20725
20726 }
20727
20728 /* Called before cgraph_optimize starts outputtting functions, variables
20729    and toplevel asms into assembly.  */
20730
20731 static void
20732 dwarf2out_assembly_start (void)
20733 {
20734   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20735     {
20736 #ifndef TARGET_UNWIND_INFO
20737       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20738 #endif
20739         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20740     }
20741 }
20742
20743 /* A helper function for dwarf2out_finish called through
20744    htab_traverse.  Emit one queued .debug_str string.  */
20745
20746 static int
20747 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20748 {
20749   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20750
20751   if (node->label && node->refcount)
20752     {
20753       switch_to_section (debug_str_section);
20754       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20755       assemble_string (node->str, strlen (node->str) + 1);
20756     }
20757
20758   return 1;
20759 }
20760
20761 #if ENABLE_ASSERT_CHECKING
20762 /* Verify that all marks are clear.  */
20763
20764 static void
20765 verify_marks_clear (dw_die_ref die)
20766 {
20767   dw_die_ref c;
20768
20769   gcc_assert (! die->die_mark);
20770   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20771 }
20772 #endif /* ENABLE_ASSERT_CHECKING */
20773
20774 /* Clear the marks for a die and its children.
20775    Be cool if the mark isn't set.  */
20776
20777 static void
20778 prune_unmark_dies (dw_die_ref die)
20779 {
20780   dw_die_ref c;
20781
20782   if (die->die_mark)
20783     die->die_mark = 0;
20784   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20785 }
20786
20787 /* Given DIE that we're marking as used, find any other dies
20788    it references as attributes and mark them as used.  */
20789
20790 static void
20791 prune_unused_types_walk_attribs (dw_die_ref die)
20792 {
20793   dw_attr_ref a;
20794   unsigned ix;
20795
20796   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20797     {
20798       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20799         {
20800           /* A reference to another DIE.
20801              Make sure that it will get emitted.
20802              If it was broken out into a comdat group, don't follow it.  */
20803           if (dwarf_version < 4
20804               || a->dw_attr == DW_AT_specification
20805               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20806             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20807         }
20808       /* Set the string's refcount to 0 so that prune_unused_types_mark
20809          accounts properly for it.  */
20810       if (AT_class (a) == dw_val_class_str)
20811         a->dw_attr_val.v.val_str->refcount = 0;
20812     }
20813 }
20814
20815
20816 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20817    to DIE's children.  */
20818
20819 static void
20820 prune_unused_types_mark (dw_die_ref die, int dokids)
20821 {
20822   dw_die_ref c;
20823
20824   if (die->die_mark == 0)
20825     {
20826       /* We haven't done this node yet.  Mark it as used.  */
20827       die->die_mark = 1;
20828
20829       /* We also have to mark its parents as used.
20830          (But we don't want to mark our parents' kids due to this.)  */
20831       if (die->die_parent)
20832         prune_unused_types_mark (die->die_parent, 0);
20833
20834       /* Mark any referenced nodes.  */
20835       prune_unused_types_walk_attribs (die);
20836
20837       /* If this node is a specification,
20838          also mark the definition, if it exists.  */
20839       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20840         prune_unused_types_mark (die->die_definition, 1);
20841     }
20842
20843   if (dokids && die->die_mark != 2)
20844     {
20845       /* We need to walk the children, but haven't done so yet.
20846          Remember that we've walked the kids.  */
20847       die->die_mark = 2;
20848
20849       /* If this is an array type, we need to make sure our
20850          kids get marked, even if they're types.  If we're
20851          breaking out types into comdat sections, do this
20852          for all type definitions.  */
20853       if (die->die_tag == DW_TAG_array_type
20854           || (dwarf_version >= 4
20855               && is_type_die (die) && ! is_declaration_die (die)))
20856         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20857       else
20858         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20859     }
20860 }
20861
20862 /* For local classes, look if any static member functions were emitted
20863    and if so, mark them.  */
20864
20865 static void
20866 prune_unused_types_walk_local_classes (dw_die_ref die)
20867 {
20868   dw_die_ref c;
20869
20870   if (die->die_mark == 2)
20871     return;
20872
20873   switch (die->die_tag)
20874     {
20875     case DW_TAG_structure_type:
20876     case DW_TAG_union_type:
20877     case DW_TAG_class_type:
20878       break;
20879
20880     case DW_TAG_subprogram:
20881       if (!get_AT_flag (die, DW_AT_declaration)
20882           || die->die_definition != NULL)
20883         prune_unused_types_mark (die, 1);
20884       return;
20885
20886     default:
20887       return;
20888     }
20889
20890   /* Mark children.  */
20891   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20892 }
20893
20894 /* Walk the tree DIE and mark types that we actually use.  */
20895
20896 static void
20897 prune_unused_types_walk (dw_die_ref die)
20898 {
20899   dw_die_ref c;
20900
20901   /* Don't do anything if this node is already marked and
20902      children have been marked as well.  */
20903   if (die->die_mark == 2)
20904     return;
20905
20906   switch (die->die_tag)
20907     {
20908     case DW_TAG_structure_type:
20909     case DW_TAG_union_type:
20910     case DW_TAG_class_type:
20911       if (die->die_perennial_p)
20912         break;
20913
20914       for (c = die->die_parent; c; c = c->die_parent)
20915         if (c->die_tag == DW_TAG_subprogram)
20916           break;
20917
20918       /* Finding used static member functions inside of classes
20919          is needed just for local classes, because for other classes
20920          static member function DIEs with DW_AT_specification
20921          are emitted outside of the DW_TAG_*_type.  If we ever change
20922          it, we'd need to call this even for non-local classes.  */
20923       if (c)
20924         prune_unused_types_walk_local_classes (die);
20925
20926       /* It's a type node --- don't mark it.  */
20927       return;
20928
20929     case DW_TAG_const_type:
20930     case DW_TAG_packed_type:
20931     case DW_TAG_pointer_type:
20932     case DW_TAG_reference_type:
20933     case DW_TAG_rvalue_reference_type:
20934     case DW_TAG_volatile_type:
20935     case DW_TAG_typedef:
20936     case DW_TAG_array_type:
20937     case DW_TAG_interface_type:
20938     case DW_TAG_friend:
20939     case DW_TAG_variant_part:
20940     case DW_TAG_enumeration_type:
20941     case DW_TAG_subroutine_type:
20942     case DW_TAG_string_type:
20943     case DW_TAG_set_type:
20944     case DW_TAG_subrange_type:
20945     case DW_TAG_ptr_to_member_type:
20946     case DW_TAG_file_type:
20947       if (die->die_perennial_p)
20948         break;
20949
20950       /* It's a type node --- don't mark it.  */
20951       return;
20952
20953     default:
20954       /* Mark everything else.  */
20955       break;
20956   }
20957
20958   if (die->die_mark == 0)
20959     {
20960       die->die_mark = 1;
20961
20962       /* Now, mark any dies referenced from here.  */
20963       prune_unused_types_walk_attribs (die);
20964     }
20965
20966   die->die_mark = 2;
20967
20968   /* Mark children.  */
20969   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20970 }
20971
20972 /* Increment the string counts on strings referred to from DIE's
20973    attributes.  */
20974
20975 static void
20976 prune_unused_types_update_strings (dw_die_ref die)
20977 {
20978   dw_attr_ref a;
20979   unsigned ix;
20980
20981   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20982     if (AT_class (a) == dw_val_class_str)
20983       {
20984         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20985         s->refcount++;
20986         /* Avoid unnecessarily putting strings that are used less than
20987            twice in the hash table.  */
20988         if (s->refcount
20989             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20990           {
20991             void ** slot;
20992             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20993                                              htab_hash_string (s->str),
20994                                              INSERT);
20995             gcc_assert (*slot == NULL);
20996             *slot = s;
20997           }
20998       }
20999 }
21000
21001 /* Remove from the tree DIE any dies that aren't marked.  */
21002
21003 static void
21004 prune_unused_types_prune (dw_die_ref die)
21005 {
21006   dw_die_ref c;
21007
21008   gcc_assert (die->die_mark);
21009   prune_unused_types_update_strings (die);
21010
21011   if (! die->die_child)
21012     return;
21013
21014   c = die->die_child;
21015   do {
21016     dw_die_ref prev = c;
21017     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21018       if (c == die->die_child)
21019         {
21020           /* No marked children between 'prev' and the end of the list.  */
21021           if (prev == c)
21022             /* No marked children at all.  */
21023             die->die_child = NULL;
21024           else
21025             {
21026               prev->die_sib = c->die_sib;
21027               die->die_child = prev;
21028             }
21029           return;
21030         }
21031
21032     if (c != prev->die_sib)
21033       prev->die_sib = c;
21034     prune_unused_types_prune (c);
21035   } while (c != die->die_child);
21036 }
21037
21038 /* A helper function for dwarf2out_finish called through
21039    htab_traverse.  Clear .debug_str strings that we haven't already
21040    decided to emit.  */
21041
21042 static int
21043 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21044 {
21045   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21046
21047   if (!node->label || !node->refcount)
21048     htab_clear_slot (debug_str_hash, h);
21049
21050   return 1;
21051 }
21052
21053 /* Remove dies representing declarations that we never use.  */
21054
21055 static void
21056 prune_unused_types (void)
21057 {
21058   unsigned int i;
21059   limbo_die_node *node;
21060   comdat_type_node *ctnode;
21061   pubname_ref pub;
21062   dcall_entry *dcall;
21063
21064 #if ENABLE_ASSERT_CHECKING
21065   /* All the marks should already be clear.  */
21066   verify_marks_clear (comp_unit_die);
21067   for (node = limbo_die_list; node; node = node->next)
21068     verify_marks_clear (node->die);
21069   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21070     verify_marks_clear (ctnode->root_die);
21071 #endif /* ENABLE_ASSERT_CHECKING */
21072
21073   /* Mark types that are used in global variables.  */
21074   premark_types_used_by_global_vars ();
21075
21076   /* Set the mark on nodes that are actually used.  */
21077   prune_unused_types_walk (comp_unit_die);
21078   for (node = limbo_die_list; node; node = node->next)
21079     prune_unused_types_walk (node->die);
21080   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21081     {
21082       prune_unused_types_walk (ctnode->root_die);
21083       prune_unused_types_mark (ctnode->type_die, 1);
21084     }
21085
21086   /* Also set the mark on nodes referenced from the
21087      pubname_table or arange_table.  */
21088   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21089     prune_unused_types_mark (pub->die, 1);
21090   for (i = 0; i < arange_table_in_use; i++)
21091     prune_unused_types_mark (arange_table[i], 1);
21092
21093   /* Mark nodes referenced from the direct call table.  */
21094   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21095     prune_unused_types_mark (dcall->targ_die, 1);
21096
21097   /* Get rid of nodes that aren't marked; and update the string counts.  */
21098   if (debug_str_hash && debug_str_hash_forced)
21099     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21100   else if (debug_str_hash)
21101     htab_empty (debug_str_hash);
21102   prune_unused_types_prune (comp_unit_die);
21103   for (node = limbo_die_list; node; node = node->next)
21104     prune_unused_types_prune (node->die);
21105   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21106     prune_unused_types_prune (ctnode->root_die);
21107
21108   /* Leave the marks clear.  */
21109   prune_unmark_dies (comp_unit_die);
21110   for (node = limbo_die_list; node; node = node->next)
21111     prune_unmark_dies (node->die);
21112   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21113     prune_unmark_dies (ctnode->root_die);
21114 }
21115
21116 /* Set the parameter to true if there are any relative pathnames in
21117    the file table.  */
21118 static int
21119 file_table_relative_p (void ** slot, void *param)
21120 {
21121   bool *p = (bool *) param;
21122   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21123   if (!IS_ABSOLUTE_PATH (d->filename))
21124     {
21125       *p = true;
21126       return 0;
21127     }
21128   return 1;
21129 }
21130
21131 /* Routines to manipulate hash table of comdat type units.  */
21132
21133 static hashval_t
21134 htab_ct_hash (const void *of)
21135 {
21136   hashval_t h;
21137   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21138
21139   memcpy (&h, type_node->signature, sizeof (h));
21140   return h;
21141 }
21142
21143 static int
21144 htab_ct_eq (const void *of1, const void *of2)
21145 {
21146   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21147   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21148
21149   return (! memcmp (type_node_1->signature, type_node_2->signature,
21150                     DWARF_TYPE_SIGNATURE_SIZE));
21151 }
21152
21153 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21154    to the location it would have been added, should we know its
21155    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21156    probably improve compactness of debug info, removing equivalent
21157    abbrevs, and hide any differences caused by deferring the
21158    computation of the assembler name, triggered by e.g. PCH.  */
21159
21160 static inline void
21161 move_linkage_attr (dw_die_ref die)
21162 {
21163   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21164   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21165
21166   gcc_assert (linkage.dw_attr == AT_linkage_name);
21167
21168   while (--ix > 0)
21169     {
21170       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21171
21172       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21173         break;
21174     }
21175
21176   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21177     {
21178       VEC_pop (dw_attr_node, die->die_attr);
21179       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21180     }
21181 }
21182
21183 /* Helper function for resolve_addr, attempt to resolve
21184    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21185    SYMBOL_REFs refer to variables emitted in the current CU.  */
21186
21187 static int
21188 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21189 {
21190   rtx rtl = *addr;
21191
21192   if (GET_CODE (rtl) == CONST_STRING)
21193     {
21194       size_t len = strlen (XSTR (rtl, 0)) + 1;
21195       tree t = build_string (len, XSTR (rtl, 0));
21196       tree tlen = build_int_cst (NULL_TREE, len - 1);
21197       TREE_TYPE (t)
21198         = build_array_type (char_type_node, build_index_type (tlen));
21199       rtl = lookup_constant_def (t);
21200       if (!rtl || !MEM_P (rtl))
21201         return 1;
21202       rtl = XEXP (rtl, 0);
21203       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21204       *addr = rtl;
21205       return 0;
21206     }
21207
21208   if (GET_CODE (rtl) == SYMBOL_REF
21209       && SYMBOL_REF_DECL (rtl)
21210       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21211       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21212     return 1;
21213
21214   if (GET_CODE (rtl) == CONST
21215       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21216     return 1;
21217
21218   return 0;
21219 }
21220
21221 /* Helper function for resolve_addr, handle one location
21222    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21223    the location list couldn't be resolved.  */
21224
21225 static bool
21226 resolve_addr_in_expr (dw_loc_descr_ref loc)
21227 {
21228   for (; loc; loc = loc->dw_loc_next)
21229     if ((loc->dw_loc_opc == DW_OP_addr
21230          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21231         || (loc->dw_loc_opc == DW_OP_implicit_value
21232             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21233             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21234       return false;
21235   return true;
21236 }
21237
21238 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21239    an address in .rodata section if the string literal is emitted there,
21240    or remove the containing location list or replace DW_AT_const_value
21241    with DW_AT_location and empty location expression, if it isn't found
21242    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21243    to something that has been emitted in the current CU.  */
21244
21245 static void
21246 resolve_addr (dw_die_ref die)
21247 {
21248   dw_die_ref c;
21249   dw_attr_ref a;
21250   dw_loc_list_ref *curr;
21251   unsigned ix;
21252
21253   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21254     switch (AT_class (a))
21255       {
21256       case dw_val_class_loc_list:
21257         curr = AT_loc_list_ptr (a);
21258         while (*curr)
21259           {
21260             if (!resolve_addr_in_expr ((*curr)->expr))
21261               {
21262                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21263                 if (next && (*curr)->ll_symbol)
21264                   {
21265                     gcc_assert (!next->ll_symbol);
21266                     next->ll_symbol = (*curr)->ll_symbol;
21267                   }
21268                 *curr = next;
21269               }
21270             else
21271               curr = &(*curr)->dw_loc_next;
21272           }
21273         if (!AT_loc_list (a))
21274           {
21275             remove_AT (die, a->dw_attr);
21276             ix--;
21277           }
21278         break;
21279       case dw_val_class_loc:
21280         if (!resolve_addr_in_expr (AT_loc (a)))
21281           {
21282             remove_AT (die, a->dw_attr);
21283             ix--;
21284           }
21285         break;
21286       case dw_val_class_addr:
21287         if (a->dw_attr == DW_AT_const_value
21288             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21289           {
21290             remove_AT (die, a->dw_attr);
21291             ix--;
21292           }
21293         break;
21294       default:
21295         break;
21296       }
21297
21298   FOR_EACH_CHILD (die, c, resolve_addr (c));
21299 }
21300
21301 /* Output stuff that dwarf requires at the end of every file,
21302    and generate the DWARF-2 debugging info.  */
21303
21304 static void
21305 dwarf2out_finish (const char *filename)
21306 {
21307   limbo_die_node *node, *next_node;
21308   comdat_type_node *ctnode;
21309   htab_t comdat_type_table;
21310   dw_die_ref die = 0;
21311   unsigned int i;
21312
21313   gen_remaining_tmpl_value_param_die_attribute ();
21314
21315   /* Add the name for the main input file now.  We delayed this from
21316      dwarf2out_init to avoid complications with PCH.  */
21317   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21318   if (!IS_ABSOLUTE_PATH (filename))
21319     add_comp_dir_attribute (comp_unit_die);
21320   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21321     {
21322       bool p = false;
21323       htab_traverse (file_table, file_table_relative_p, &p);
21324       if (p)
21325         add_comp_dir_attribute (comp_unit_die);
21326     }
21327
21328   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21329     {
21330       add_location_or_const_value_attribute (
21331         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21332         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21333         DW_AT_location);
21334     }
21335
21336   /* Traverse the limbo die list, and add parent/child links.  The only
21337      dies without parents that should be here are concrete instances of
21338      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21339      For concrete instances, we can get the parent die from the abstract
21340      instance.  */
21341   for (node = limbo_die_list; node; node = next_node)
21342     {
21343       next_node = node->next;
21344       die = node->die;
21345
21346       if (die->die_parent == NULL)
21347         {
21348           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21349
21350           if (origin)
21351             add_child_die (origin->die_parent, die);
21352           else if (die == comp_unit_die)
21353             ;
21354           else if (errorcount > 0 || sorrycount > 0)
21355             /* It's OK to be confused by errors in the input.  */
21356             add_child_die (comp_unit_die, die);
21357           else
21358             {
21359               /* In certain situations, the lexical block containing a
21360                  nested function can be optimized away, which results
21361                  in the nested function die being orphaned.  Likewise
21362                  with the return type of that nested function.  Force
21363                  this to be a child of the containing function.
21364
21365                  It may happen that even the containing function got fully
21366                  inlined and optimized out.  In that case we are lost and
21367                  assign the empty child.  This should not be big issue as
21368                  the function is likely unreachable too.  */
21369               tree context = NULL_TREE;
21370
21371               gcc_assert (node->created_for);
21372
21373               if (DECL_P (node->created_for))
21374                 context = DECL_CONTEXT (node->created_for);
21375               else if (TYPE_P (node->created_for))
21376                 context = TYPE_CONTEXT (node->created_for);
21377
21378               gcc_assert (context
21379                           && (TREE_CODE (context) == FUNCTION_DECL
21380                               || TREE_CODE (context) == NAMESPACE_DECL));
21381
21382               origin = lookup_decl_die (context);
21383               if (origin)
21384                 add_child_die (origin, die);
21385               else
21386                 add_child_die (comp_unit_die, die);
21387             }
21388         }
21389     }
21390
21391   limbo_die_list = NULL;
21392
21393   resolve_addr (comp_unit_die);
21394
21395   for (node = deferred_asm_name; node; node = node->next)
21396     {
21397       tree decl = node->created_for;
21398       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21399         {
21400           add_AT_string (node->die, AT_linkage_name,
21401                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21402           move_linkage_attr (node->die);
21403         }
21404     }
21405
21406   deferred_asm_name = NULL;
21407
21408   /* Walk through the list of incomplete types again, trying once more to
21409      emit full debugging info for them.  */
21410   retry_incomplete_types ();
21411
21412   if (flag_eliminate_unused_debug_types)
21413     prune_unused_types ();
21414
21415   /* Generate separate CUs for each of the include files we've seen.
21416      They will go into limbo_die_list.  */
21417   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21418     break_out_includes (comp_unit_die);
21419
21420   /* Generate separate COMDAT sections for type DIEs. */
21421   if (dwarf_version >= 4)
21422     {
21423       break_out_comdat_types (comp_unit_die);
21424
21425       /* Each new type_unit DIE was added to the limbo die list when created.
21426          Since these have all been added to comdat_type_list, clear the
21427          limbo die list.  */
21428       limbo_die_list = NULL;
21429
21430       /* For each new comdat type unit, copy declarations for incomplete
21431          types to make the new unit self-contained (i.e., no direct
21432          references to the main compile unit).  */
21433       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21434         copy_decls_for_unworthy_types (ctnode->root_die);
21435       copy_decls_for_unworthy_types (comp_unit_die);
21436
21437       /* In the process of copying declarations from one unit to another,
21438          we may have left some declarations behind that are no longer
21439          referenced.  Prune them.  */
21440       prune_unused_types ();
21441     }
21442
21443   /* Traverse the DIE's and add add sibling attributes to those DIE's
21444      that have children.  */
21445   add_sibling_attributes (comp_unit_die);
21446   for (node = limbo_die_list; node; node = node->next)
21447     add_sibling_attributes (node->die);
21448   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21449     add_sibling_attributes (ctnode->root_die);
21450
21451   /* Output a terminator label for the .text section.  */
21452   switch_to_section (text_section);
21453   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21454   if (flag_reorder_blocks_and_partition)
21455     {
21456       switch_to_section (unlikely_text_section ());
21457       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21458     }
21459
21460   /* We can only use the low/high_pc attributes if all of the code was
21461      in .text.  */
21462   if (!have_multiple_function_sections
21463       || !(dwarf_version >= 3 || !dwarf_strict))
21464     {
21465       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21466       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21467     }
21468
21469   else
21470     {
21471       unsigned fde_idx = 0;
21472       bool range_list_added = false;
21473
21474       /* We need to give .debug_loc and .debug_ranges an appropriate
21475          "base address".  Use zero so that these addresses become
21476          absolute.  Historically, we've emitted the unexpected
21477          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21478          Emit both to give time for other tools to adapt.  */
21479       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21480       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21481
21482       if (text_section_used)
21483         add_ranges_by_labels (comp_unit_die, text_section_label,
21484                               text_end_label, &range_list_added);
21485       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21486         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21487                               cold_end_label, &range_list_added);
21488
21489       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21490         {
21491           dw_fde_ref fde = &fde_table[fde_idx];
21492
21493           if (fde->dw_fde_switched_sections)
21494             {
21495               if (!fde->in_std_section)
21496                 add_ranges_by_labels (comp_unit_die,
21497                                       fde->dw_fde_hot_section_label,
21498                                       fde->dw_fde_hot_section_end_label,
21499                                       &range_list_added);
21500               if (!fde->cold_in_std_section)
21501                 add_ranges_by_labels (comp_unit_die,
21502                                       fde->dw_fde_unlikely_section_label,
21503                                       fde->dw_fde_unlikely_section_end_label,
21504                                       &range_list_added);
21505             }
21506           else if (!fde->in_std_section)
21507             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21508                                   fde->dw_fde_end, &range_list_added);
21509         }
21510
21511       if (range_list_added)
21512         add_ranges (NULL);
21513     }
21514
21515   /* Output location list section if necessary.  */
21516   if (have_location_lists)
21517     {
21518       /* Output the location lists info.  */
21519       switch_to_section (debug_loc_section);
21520       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21521                                    DEBUG_LOC_SECTION_LABEL, 0);
21522       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21523       output_location_lists (die);
21524     }
21525
21526   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21527     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21528                     debug_line_section_label);
21529
21530   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21531     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21532
21533   /* Output all of the compilation units.  We put the main one last so that
21534      the offsets are available to output_pubnames.  */
21535   for (node = limbo_die_list; node; node = node->next)
21536     output_comp_unit (node->die, 0);
21537
21538   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21539   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21540     {
21541       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21542
21543       /* Don't output duplicate types.  */
21544       if (*slot != HTAB_EMPTY_ENTRY)
21545         continue;
21546
21547       /* Add a pointer to the line table for the main compilation unit
21548          so that the debugger can make sense of DW_AT_decl_file
21549          attributes.  */
21550       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21551         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21552                         debug_line_section_label);
21553
21554       output_comdat_type_unit (ctnode);
21555       *slot = ctnode;
21556     }
21557   htab_delete (comdat_type_table);
21558
21559   /* Output the main compilation unit if non-empty or if .debug_macinfo
21560      has been emitted.  */
21561   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21562
21563   /* Output the abbreviation table.  */
21564   switch_to_section (debug_abbrev_section);
21565   output_abbrev_section ();
21566
21567   /* Output public names table if necessary.  */
21568   if (!VEC_empty (pubname_entry, pubname_table))
21569     {
21570       switch_to_section (debug_pubnames_section);
21571       output_pubnames (pubname_table);
21572     }
21573
21574   /* Output public types table if necessary.  */
21575   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21576      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21577      simply won't look for the section.  */
21578   if (!VEC_empty (pubname_entry, pubtype_table))
21579     {
21580       switch_to_section (debug_pubtypes_section);
21581       output_pubnames (pubtype_table);
21582     }
21583
21584   /* Output direct and virtual call tables if necessary.  */
21585   if (!VEC_empty (dcall_entry, dcall_table))
21586     {
21587       switch_to_section (debug_dcall_section);
21588       output_dcall_table ();
21589     }
21590   if (!VEC_empty (vcall_entry, vcall_table))
21591     {
21592       switch_to_section (debug_vcall_section);
21593       output_vcall_table ();
21594     }
21595
21596   /* Output the address range information.  We only put functions in the arange
21597      table, so don't write it out if we don't have any.  */
21598   if (fde_table_in_use)
21599     {
21600       switch_to_section (debug_aranges_section);
21601       output_aranges ();
21602     }
21603
21604   /* Output ranges section if necessary.  */
21605   if (ranges_table_in_use)
21606     {
21607       switch_to_section (debug_ranges_section);
21608       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21609       output_ranges ();
21610     }
21611
21612   /* Output the source line correspondence table.  We must do this
21613      even if there is no line information.  Otherwise, on an empty
21614      translation unit, we will generate a present, but empty,
21615      .debug_info section.  IRIX 6.5 `nm' will then complain when
21616      examining the file.  This is done late so that any filenames
21617      used by the debug_info section are marked as 'used'.  */
21618   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21619     {
21620       switch_to_section (debug_line_section);
21621       output_line_info ();
21622     }
21623
21624   /* Have to end the macro section.  */
21625   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21626     {
21627       switch_to_section (debug_macinfo_section);
21628       dw2_asm_output_data (1, 0, "End compilation unit");
21629     }
21630
21631   /* If we emitted any DW_FORM_strp form attribute, output the string
21632      table too.  */
21633   if (debug_str_hash)
21634     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21635 }
21636 #else
21637
21638 /* This should never be used, but its address is needed for comparisons.  */
21639 const struct gcc_debug_hooks dwarf2_debug_hooks =
21640 {
21641   0,            /* init */
21642   0,            /* finish */
21643   0,            /* assembly_start */
21644   0,            /* define */
21645   0,            /* undef */
21646   0,            /* start_source_file */
21647   0,            /* end_source_file */
21648   0,            /* begin_block */
21649   0,            /* end_block */
21650   0,            /* ignore_block */
21651   0,            /* source_line */
21652   0,            /* begin_prologue */
21653   0,            /* end_prologue */
21654   0,            /* end_epilogue */
21655   0,            /* begin_function */
21656   0,            /* end_function */
21657   0,            /* function_decl */
21658   0,            /* global_decl */
21659   0,            /* type_decl */
21660   0,            /* imported_module_or_decl */
21661   0,            /* deferred_inline_function */
21662   0,            /* outlining_inline_function */
21663   0,            /* label */
21664   0,            /* handle_pch */
21665   0,            /* var_location */
21666   0,            /* switch_text_section */
21667   0,            /* direct_call */
21668   0,            /* virtual_call_token */
21669   0,            /* copy_call_info */
21670   0,            /* virtual_call */
21671   0,            /* set_name */
21672   0             /* start_end_main_source_file */
21673 };
21674
21675 #endif /* DWARF2_DEBUGGING_INFO */
21676
21677 #include "gt-dwarf2out.h"