OSDN Git Service

PR c++/43875
[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 && !old_cfa.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            && !old_cfa.indirect)
1061     {
1062       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1063          indicating the CFA register has changed to <register> but the
1064          offset has not changed.  */
1065       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1066       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1067     }
1068 #endif
1069
1070   else if (loc.indirect == 0)
1071     {
1072       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1073          indicating the CFA register has changed to <register> with
1074          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1075          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1076          directive.  */
1077       if (loc.offset < 0)
1078         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1079       else
1080         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1081       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1082       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1083     }
1084   else
1085     {
1086       /* Construct a DW_CFA_def_cfa_expression instruction to
1087          calculate the CFA using a full location expression since no
1088          register-offset pair is available.  */
1089       struct dw_loc_descr_struct *loc_list;
1090
1091       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1092       loc_list = build_cfa_loc (&loc, 0);
1093       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1094     }
1095
1096   add_fde_cfi (label, cfi);
1097 }
1098
1099 /* Add the CFI for saving a register.  REG is the CFA column number.
1100    LABEL is passed to add_fde_cfi.
1101    If SREG is -1, the register is saved at OFFSET from the CFA;
1102    otherwise it is saved in SREG.  */
1103
1104 static void
1105 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1106 {
1107   dw_cfi_ref cfi = new_cfi ();
1108   dw_fde_ref fde = current_fde ();
1109
1110   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1111
1112   /* When stack is aligned, store REG using DW_CFA_expression with
1113      FP.  */
1114   if (fde
1115       && fde->stack_realign
1116       && sreg == INVALID_REGNUM)
1117     {
1118       cfi->dw_cfi_opc = DW_CFA_expression;
1119       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1120       cfi->dw_cfi_oprnd2.dw_cfi_loc
1121         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1122     }
1123   else if (sreg == INVALID_REGNUM)
1124     {
1125       if (need_data_align_sf_opcode (offset))
1126         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1127       else if (reg & ~0x3f)
1128         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1129       else
1130         cfi->dw_cfi_opc = DW_CFA_offset;
1131       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1132     }
1133   else if (sreg == reg)
1134     cfi->dw_cfi_opc = DW_CFA_same_value;
1135   else
1136     {
1137       cfi->dw_cfi_opc = DW_CFA_register;
1138       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1139     }
1140
1141   add_fde_cfi (label, cfi);
1142 }
1143
1144 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1145    This CFI tells the unwinder that it needs to restore the window registers
1146    from the previous frame's window save area.
1147
1148    ??? Perhaps we should note in the CIE where windows are saved (instead of
1149    assuming 0(cfa)) and what registers are in the window.  */
1150
1151 void
1152 dwarf2out_window_save (const char *label)
1153 {
1154   dw_cfi_ref cfi = new_cfi ();
1155
1156   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1157   add_fde_cfi (label, cfi);
1158 }
1159
1160 /* Entry point for saving a register to the stack.  REG is the GCC register
1161    number.  LABEL and OFFSET are passed to reg_save.  */
1162
1163 void
1164 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1165 {
1166   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1167 }
1168
1169 /* Entry point for saving the return address in the stack.
1170    LABEL and OFFSET are passed to reg_save.  */
1171
1172 void
1173 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1174 {
1175   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1176 }
1177
1178 /* Entry point for saving the return address in a register.
1179    LABEL and SREG are passed to reg_save.  */
1180
1181 void
1182 dwarf2out_return_reg (const char *label, unsigned int sreg)
1183 {
1184   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1185 }
1186
1187 #ifdef DWARF2_UNWIND_INFO
1188 /* Record the initial position of the return address.  RTL is
1189    INCOMING_RETURN_ADDR_RTX.  */
1190
1191 static void
1192 initial_return_save (rtx rtl)
1193 {
1194   unsigned int reg = INVALID_REGNUM;
1195   HOST_WIDE_INT offset = 0;
1196
1197   switch (GET_CODE (rtl))
1198     {
1199     case REG:
1200       /* RA is in a register.  */
1201       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1202       break;
1203
1204     case MEM:
1205       /* RA is on the stack.  */
1206       rtl = XEXP (rtl, 0);
1207       switch (GET_CODE (rtl))
1208         {
1209         case REG:
1210           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1211           offset = 0;
1212           break;
1213
1214         case PLUS:
1215           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1216           offset = INTVAL (XEXP (rtl, 1));
1217           break;
1218
1219         case MINUS:
1220           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1221           offset = -INTVAL (XEXP (rtl, 1));
1222           break;
1223
1224         default:
1225           gcc_unreachable ();
1226         }
1227
1228       break;
1229
1230     case PLUS:
1231       /* The return address is at some offset from any value we can
1232          actually load.  For instance, on the SPARC it is in %i7+8. Just
1233          ignore the offset for now; it doesn't matter for unwinding frames.  */
1234       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1235       initial_return_save (XEXP (rtl, 0));
1236       return;
1237
1238     default:
1239       gcc_unreachable ();
1240     }
1241
1242   if (reg != DWARF_FRAME_RETURN_COLUMN)
1243     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1244 }
1245 #endif
1246
1247 /* Given a SET, calculate the amount of stack adjustment it
1248    contains.  */
1249
1250 static HOST_WIDE_INT
1251 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1252                      HOST_WIDE_INT cur_offset)
1253 {
1254   const_rtx src = SET_SRC (pattern);
1255   const_rtx dest = SET_DEST (pattern);
1256   HOST_WIDE_INT offset = 0;
1257   enum rtx_code code;
1258
1259   if (dest == stack_pointer_rtx)
1260     {
1261       code = GET_CODE (src);
1262
1263       /* Assume (set (reg sp) (reg whatever)) sets args_size
1264          level to 0.  */
1265       if (code == REG && src != stack_pointer_rtx)
1266         {
1267           offset = -cur_args_size;
1268 #ifndef STACK_GROWS_DOWNWARD
1269           offset = -offset;
1270 #endif
1271           return offset - cur_offset;
1272         }
1273
1274       if (! (code == PLUS || code == MINUS)
1275           || XEXP (src, 0) != stack_pointer_rtx
1276           || !CONST_INT_P (XEXP (src, 1)))
1277         return 0;
1278
1279       /* (set (reg sp) (plus (reg sp) (const_int))) */
1280       offset = INTVAL (XEXP (src, 1));
1281       if (code == PLUS)
1282         offset = -offset;
1283       return offset;
1284     }
1285
1286   if (MEM_P (src) && !MEM_P (dest))
1287     dest = src;
1288   if (MEM_P (dest))
1289     {
1290       /* (set (mem (pre_dec (reg sp))) (foo)) */
1291       src = XEXP (dest, 0);
1292       code = GET_CODE (src);
1293
1294       switch (code)
1295         {
1296         case PRE_MODIFY:
1297         case POST_MODIFY:
1298           if (XEXP (src, 0) == stack_pointer_rtx)
1299             {
1300               rtx val = XEXP (XEXP (src, 1), 1);
1301               /* We handle only adjustments by constant amount.  */
1302               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1303                           && CONST_INT_P (val));
1304               offset = -INTVAL (val);
1305               break;
1306             }
1307           return 0;
1308
1309         case PRE_DEC:
1310         case POST_DEC:
1311           if (XEXP (src, 0) == stack_pointer_rtx)
1312             {
1313               offset = GET_MODE_SIZE (GET_MODE (dest));
1314               break;
1315             }
1316           return 0;
1317
1318         case PRE_INC:
1319         case POST_INC:
1320           if (XEXP (src, 0) == stack_pointer_rtx)
1321             {
1322               offset = -GET_MODE_SIZE (GET_MODE (dest));
1323               break;
1324             }
1325           return 0;
1326
1327         default:
1328           return 0;
1329         }
1330     }
1331   else
1332     return 0;
1333
1334   return offset;
1335 }
1336
1337 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1338    indexed by INSN_UID.  */
1339
1340 static HOST_WIDE_INT *barrier_args_size;
1341
1342 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1343
1344 static HOST_WIDE_INT
1345 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1346                              VEC (rtx, heap) **next)
1347 {
1348   HOST_WIDE_INT offset = 0;
1349   int i;
1350
1351   if (! RTX_FRAME_RELATED_P (insn))
1352     {
1353       if (prologue_epilogue_contains (insn))
1354         /* Nothing */;
1355       else if (GET_CODE (PATTERN (insn)) == SET)
1356         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1357       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1358                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1359         {
1360           /* There may be stack adjustments inside compound insns.  Search
1361              for them.  */
1362           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1363             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1364               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1365                                              cur_args_size, offset);
1366         }
1367     }
1368   else
1369     {
1370       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1371
1372       if (expr)
1373         {
1374           expr = XEXP (expr, 0);
1375           if (GET_CODE (expr) == PARALLEL
1376               || GET_CODE (expr) == SEQUENCE)
1377             for (i = 1; i < XVECLEN (expr, 0); i++)
1378               {
1379                 rtx elem = XVECEXP (expr, 0, i);
1380
1381                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1382                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1383               }
1384         }
1385     }
1386
1387 #ifndef STACK_GROWS_DOWNWARD
1388   offset = -offset;
1389 #endif
1390
1391   cur_args_size += offset;
1392   if (cur_args_size < 0)
1393     cur_args_size = 0;
1394
1395   if (JUMP_P (insn))
1396     {
1397       rtx dest = JUMP_LABEL (insn);
1398
1399       if (dest)
1400         {
1401           if (barrier_args_size [INSN_UID (dest)] < 0)
1402             {
1403               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1404               VEC_safe_push (rtx, heap, *next, dest);
1405             }
1406         }
1407     }
1408
1409   return cur_args_size;
1410 }
1411
1412 /* Walk the whole function and compute args_size on BARRIERs.  */
1413
1414 static void
1415 compute_barrier_args_size (void)
1416 {
1417   int max_uid = get_max_uid (), i;
1418   rtx insn;
1419   VEC (rtx, heap) *worklist, *next, *tmp;
1420
1421   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1422   for (i = 0; i < max_uid; i++)
1423     barrier_args_size[i] = -1;
1424
1425   worklist = VEC_alloc (rtx, heap, 20);
1426   next = VEC_alloc (rtx, heap, 20);
1427   insn = get_insns ();
1428   barrier_args_size[INSN_UID (insn)] = 0;
1429   VEC_quick_push (rtx, worklist, insn);
1430   for (;;)
1431     {
1432       while (!VEC_empty (rtx, worklist))
1433         {
1434           rtx prev, body, first_insn;
1435           HOST_WIDE_INT cur_args_size;
1436
1437           first_insn = insn = VEC_pop (rtx, worklist);
1438           cur_args_size = barrier_args_size[INSN_UID (insn)];
1439           prev = prev_nonnote_insn (insn);
1440           if (prev && BARRIER_P (prev))
1441             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1442
1443           for (; insn; insn = NEXT_INSN (insn))
1444             {
1445               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1446                 continue;
1447               if (BARRIER_P (insn))
1448                 break;
1449
1450               if (LABEL_P (insn))
1451                 {
1452                   if (insn == first_insn)
1453                     continue;
1454                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1455                     {
1456                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1457                       continue;
1458                     }
1459                   else
1460                     {
1461                       /* The insns starting with this label have been
1462                          already scanned or are in the worklist.  */
1463                       break;
1464                     }
1465                 }
1466
1467               body = PATTERN (insn);
1468               if (GET_CODE (body) == SEQUENCE)
1469                 {
1470                   HOST_WIDE_INT dest_args_size = cur_args_size;
1471                   for (i = 1; i < XVECLEN (body, 0); i++)
1472                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1473                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1474                       dest_args_size
1475                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1476                                                        dest_args_size, &next);
1477                     else
1478                       cur_args_size
1479                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1480                                                        cur_args_size, &next);
1481
1482                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1483                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1484                                                  dest_args_size, &next);
1485                   else
1486                     cur_args_size
1487                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1488                                                      cur_args_size, &next);
1489                 }
1490               else
1491                 cur_args_size
1492                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1493             }
1494         }
1495
1496       if (VEC_empty (rtx, next))
1497         break;
1498
1499       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1500       tmp = next;
1501       next = worklist;
1502       worklist = tmp;
1503       VEC_truncate (rtx, next, 0);
1504     }
1505
1506   VEC_free (rtx, heap, worklist);
1507   VEC_free (rtx, heap, next);
1508 }
1509
1510 /* Add a CFI to update the running total of the size of arguments
1511    pushed onto the stack.  */
1512
1513 static void
1514 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1515 {
1516   dw_cfi_ref cfi;
1517
1518   if (size == old_args_size)
1519     return;
1520
1521   old_args_size = size;
1522
1523   cfi = new_cfi ();
1524   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1525   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1526   add_fde_cfi (label, cfi);
1527 }
1528
1529 /* Record a stack adjustment of OFFSET bytes.  */
1530
1531 static void
1532 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1533 {
1534   if (cfa.reg == STACK_POINTER_REGNUM)
1535     cfa.offset += offset;
1536
1537   if (cfa_store.reg == STACK_POINTER_REGNUM)
1538     cfa_store.offset += offset;
1539
1540   if (ACCUMULATE_OUTGOING_ARGS)
1541     return;
1542
1543 #ifndef STACK_GROWS_DOWNWARD
1544   offset = -offset;
1545 #endif
1546
1547   args_size += offset;
1548   if (args_size < 0)
1549     args_size = 0;
1550
1551   def_cfa_1 (label, &cfa);
1552   if (flag_asynchronous_unwind_tables)
1553     dwarf2out_args_size (label, args_size);
1554 }
1555
1556 /* Check INSN to see if it looks like a push or a stack adjustment, and
1557    make a note of it if it does.  EH uses this information to find out
1558    how much extra space it needs to pop off the stack.  */
1559
1560 static void
1561 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1562 {
1563   HOST_WIDE_INT offset;
1564   const char *label;
1565   int i;
1566
1567   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1568      with this function.  Proper support would require all frame-related
1569      insns to be marked, and to be able to handle saving state around
1570      epilogues textually in the middle of the function.  */
1571   if (prologue_epilogue_contains (insn))
1572     return;
1573
1574   /* If INSN is an instruction from target of an annulled branch, the
1575      effects are for the target only and so current argument size
1576      shouldn't change at all.  */
1577   if (final_sequence
1578       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1579       && INSN_FROM_TARGET_P (insn))
1580     return;
1581
1582   /* If only calls can throw, and we have a frame pointer,
1583      save up adjustments until we see the CALL_INSN.  */
1584   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1585     {
1586       if (CALL_P (insn) && !after_p)
1587         {
1588           /* Extract the size of the args from the CALL rtx itself.  */
1589           insn = PATTERN (insn);
1590           if (GET_CODE (insn) == PARALLEL)
1591             insn = XVECEXP (insn, 0, 0);
1592           if (GET_CODE (insn) == SET)
1593             insn = SET_SRC (insn);
1594           gcc_assert (GET_CODE (insn) == CALL);
1595           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1596         }
1597       return;
1598     }
1599
1600   if (CALL_P (insn) && !after_p)
1601     {
1602       if (!flag_asynchronous_unwind_tables)
1603         dwarf2out_args_size ("", args_size);
1604       return;
1605     }
1606   else if (BARRIER_P (insn))
1607     {
1608       /* Don't call compute_barrier_args_size () if the only
1609          BARRIER is at the end of function.  */
1610       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1611         compute_barrier_args_size ();
1612       if (barrier_args_size == NULL)
1613         offset = 0;
1614       else
1615         {
1616           offset = barrier_args_size[INSN_UID (insn)];
1617           if (offset < 0)
1618             offset = 0;
1619         }
1620
1621       offset -= args_size;
1622 #ifndef STACK_GROWS_DOWNWARD
1623       offset = -offset;
1624 #endif
1625     }
1626   else if (GET_CODE (PATTERN (insn)) == SET)
1627     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1628   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1629            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1630     {
1631       /* There may be stack adjustments inside compound insns.  Search
1632          for them.  */
1633       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1634         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1635           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1636                                          args_size, offset);
1637     }
1638   else
1639     return;
1640
1641   if (offset == 0)
1642     return;
1643
1644   label = dwarf2out_cfi_label (false);
1645   dwarf2out_stack_adjust (offset, label);
1646 }
1647
1648 #endif
1649
1650 /* We delay emitting a register save until either (a) we reach the end
1651    of the prologue or (b) the register is clobbered.  This clusters
1652    register saves so that there are fewer pc advances.  */
1653
1654 struct GTY(()) queued_reg_save {
1655   struct queued_reg_save *next;
1656   rtx reg;
1657   HOST_WIDE_INT cfa_offset;
1658   rtx saved_reg;
1659 };
1660
1661 static GTY(()) struct queued_reg_save *queued_reg_saves;
1662
1663 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1664 struct GTY(()) reg_saved_in_data {
1665   rtx orig_reg;
1666   rtx saved_in_reg;
1667 };
1668
1669 /* A list of registers saved in other registers.
1670    The list intentionally has a small maximum capacity of 4; if your
1671    port needs more than that, you might consider implementing a
1672    more efficient data structure.  */
1673 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1674 static GTY(()) size_t num_regs_saved_in_regs;
1675
1676 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1677 static const char *last_reg_save_label;
1678
1679 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1680    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1681
1682 static void
1683 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1684 {
1685   struct queued_reg_save *q;
1686
1687   /* Duplicates waste space, but it's also necessary to remove them
1688      for correctness, since the queue gets output in reverse
1689      order.  */
1690   for (q = queued_reg_saves; q != NULL; q = q->next)
1691     if (REGNO (q->reg) == REGNO (reg))
1692       break;
1693
1694   if (q == NULL)
1695     {
1696       q = GGC_NEW (struct queued_reg_save);
1697       q->next = queued_reg_saves;
1698       queued_reg_saves = q;
1699     }
1700
1701   q->reg = reg;
1702   q->cfa_offset = offset;
1703   q->saved_reg = sreg;
1704
1705   last_reg_save_label = label;
1706 }
1707
1708 /* Output all the entries in QUEUED_REG_SAVES.  */
1709
1710 static void
1711 flush_queued_reg_saves (void)
1712 {
1713   struct queued_reg_save *q;
1714
1715   for (q = queued_reg_saves; q; q = q->next)
1716     {
1717       size_t i;
1718       unsigned int reg, sreg;
1719
1720       for (i = 0; i < num_regs_saved_in_regs; i++)
1721         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1722           break;
1723       if (q->saved_reg && i == num_regs_saved_in_regs)
1724         {
1725           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1726           num_regs_saved_in_regs++;
1727         }
1728       if (i != num_regs_saved_in_regs)
1729         {
1730           regs_saved_in_regs[i].orig_reg = q->reg;
1731           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1732         }
1733
1734       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1735       if (q->saved_reg)
1736         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1737       else
1738         sreg = INVALID_REGNUM;
1739       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1740     }
1741
1742   queued_reg_saves = NULL;
1743   last_reg_save_label = NULL;
1744 }
1745
1746 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1747    location for?  Or, does it clobber a register which we've previously
1748    said that some other register is saved in, and for which we now
1749    have a new location for?  */
1750
1751 static bool
1752 clobbers_queued_reg_save (const_rtx insn)
1753 {
1754   struct queued_reg_save *q;
1755
1756   for (q = queued_reg_saves; q; q = q->next)
1757     {
1758       size_t i;
1759       if (modified_in_p (q->reg, insn))
1760         return true;
1761       for (i = 0; i < num_regs_saved_in_regs; i++)
1762         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1763             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1764           return true;
1765     }
1766
1767   return false;
1768 }
1769
1770 /* Entry point for saving the first register into the second.  */
1771
1772 void
1773 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1774 {
1775   size_t i;
1776   unsigned int regno, sregno;
1777
1778   for (i = 0; i < num_regs_saved_in_regs; i++)
1779     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1780       break;
1781   if (i == num_regs_saved_in_regs)
1782     {
1783       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1784       num_regs_saved_in_regs++;
1785     }
1786   regs_saved_in_regs[i].orig_reg = reg;
1787   regs_saved_in_regs[i].saved_in_reg = sreg;
1788
1789   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1790   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1791   reg_save (label, regno, sregno, 0);
1792 }
1793
1794 /* What register, if any, is currently saved in REG?  */
1795
1796 static rtx
1797 reg_saved_in (rtx reg)
1798 {
1799   unsigned int regn = REGNO (reg);
1800   size_t i;
1801   struct queued_reg_save *q;
1802
1803   for (q = queued_reg_saves; q; q = q->next)
1804     if (q->saved_reg && regn == REGNO (q->saved_reg))
1805       return q->reg;
1806
1807   for (i = 0; i < num_regs_saved_in_regs; i++)
1808     if (regs_saved_in_regs[i].saved_in_reg
1809         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1810       return regs_saved_in_regs[i].orig_reg;
1811
1812   return NULL_RTX;
1813 }
1814
1815
1816 /* A temporary register holding an integral value used in adjusting SP
1817    or setting up the store_reg.  The "offset" field holds the integer
1818    value, not an offset.  */
1819 static dw_cfa_location cfa_temp;
1820
1821 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1822
1823 static void
1824 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1825 {
1826   memset (&cfa, 0, sizeof (cfa));
1827
1828   switch (GET_CODE (pat))
1829     {
1830     case PLUS:
1831       cfa.reg = REGNO (XEXP (pat, 0));
1832       cfa.offset = INTVAL (XEXP (pat, 1));
1833       break;
1834
1835     case REG:
1836       cfa.reg = REGNO (pat);
1837       break;
1838
1839     default:
1840       /* Recurse and define an expression.  */
1841       gcc_unreachable ();
1842     }
1843
1844   def_cfa_1 (label, &cfa);
1845 }
1846
1847 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1848
1849 static void
1850 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1851 {
1852   rtx src, dest;
1853
1854   gcc_assert (GET_CODE (pat) == SET);
1855   dest = XEXP (pat, 0);
1856   src = XEXP (pat, 1);
1857
1858   switch (GET_CODE (src))
1859     {
1860     case PLUS:
1861       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1862       cfa.offset -= INTVAL (XEXP (src, 1));
1863       break;
1864
1865     case REG:
1866         break;
1867
1868     default:
1869         gcc_unreachable ();
1870     }
1871
1872   cfa.reg = REGNO (dest);
1873   gcc_assert (cfa.indirect == 0);
1874
1875   def_cfa_1 (label, &cfa);
1876 }
1877
1878 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1879
1880 static void
1881 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1882 {
1883   HOST_WIDE_INT offset;
1884   rtx src, addr, span;
1885
1886   src = XEXP (set, 1);
1887   addr = XEXP (set, 0);
1888   gcc_assert (MEM_P (addr));
1889   addr = XEXP (addr, 0);
1890
1891   /* As documented, only consider extremely simple addresses.  */
1892   switch (GET_CODE (addr))
1893     {
1894     case REG:
1895       gcc_assert (REGNO (addr) == cfa.reg);
1896       offset = -cfa.offset;
1897       break;
1898     case PLUS:
1899       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1900       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1901       break;
1902     default:
1903       gcc_unreachable ();
1904     }
1905
1906   span = targetm.dwarf_register_span (src);
1907
1908   /* ??? We'd like to use queue_reg_save, but we need to come up with
1909      a different flushing heuristic for epilogues.  */
1910   if (!span)
1911     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1912   else
1913     {
1914       /* We have a PARALLEL describing where the contents of SRC live.
1915          Queue register saves for each piece of the PARALLEL.  */
1916       int par_index;
1917       int limit;
1918       HOST_WIDE_INT span_offset = offset;
1919
1920       gcc_assert (GET_CODE (span) == PARALLEL);
1921
1922       limit = XVECLEN (span, 0);
1923       for (par_index = 0; par_index < limit; par_index++)
1924         {
1925           rtx elem = XVECEXP (span, 0, par_index);
1926
1927           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1928                     INVALID_REGNUM, span_offset);
1929           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1930         }
1931     }
1932 }
1933
1934 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1935
1936 static void
1937 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1938 {
1939   rtx src, dest;
1940   unsigned sregno, dregno;
1941
1942   src = XEXP (set, 1);
1943   dest = XEXP (set, 0);
1944
1945   if (src == pc_rtx)
1946     sregno = DWARF_FRAME_RETURN_COLUMN;
1947   else
1948     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1949
1950   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1951
1952   /* ??? We'd like to use queue_reg_save, but we need to come up with
1953      a different flushing heuristic for epilogues.  */
1954   reg_save (label, sregno, dregno, 0);
1955 }
1956
1957 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1958
1959 static void
1960 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1961 {
1962   dw_cfi_ref cfi = new_cfi ();
1963   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1964
1965   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1966   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1967
1968   add_fde_cfi (label, cfi);
1969 }
1970
1971 /* Record call frame debugging information for an expression EXPR,
1972    which either sets SP or FP (adjusting how we calculate the frame
1973    address) or saves a register to the stack or another register.
1974    LABEL indicates the address of EXPR.
1975
1976    This function encodes a state machine mapping rtxes to actions on
1977    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1978    users need not read the source code.
1979
1980   The High-Level Picture
1981
1982   Changes in the register we use to calculate the CFA: Currently we
1983   assume that if you copy the CFA register into another register, we
1984   should take the other one as the new CFA register; this seems to
1985   work pretty well.  If it's wrong for some target, it's simple
1986   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1987
1988   Changes in the register we use for saving registers to the stack:
1989   This is usually SP, but not always.  Again, we deduce that if you
1990   copy SP into another register (and SP is not the CFA register),
1991   then the new register is the one we will be using for register
1992   saves.  This also seems to work.
1993
1994   Register saves: There's not much guesswork about this one; if
1995   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1996   register save, and the register used to calculate the destination
1997   had better be the one we think we're using for this purpose.
1998   It's also assumed that a copy from a call-saved register to another
1999   register is saving that register if RTX_FRAME_RELATED_P is set on
2000   that instruction.  If the copy is from a call-saved register to
2001   the *same* register, that means that the register is now the same
2002   value as in the caller.
2003
2004   Except: If the register being saved is the CFA register, and the
2005   offset is nonzero, we are saving the CFA, so we assume we have to
2006   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2007   the intent is to save the value of SP from the previous frame.
2008
2009   In addition, if a register has previously been saved to a different
2010   register,
2011
2012   Invariants / Summaries of Rules
2013
2014   cfa          current rule for calculating the CFA.  It usually
2015                consists of a register and an offset.
2016   cfa_store    register used by prologue code to save things to the stack
2017                cfa_store.offset is the offset from the value of
2018                cfa_store.reg to the actual CFA
2019   cfa_temp     register holding an integral value.  cfa_temp.offset
2020                stores the value, which will be used to adjust the
2021                stack pointer.  cfa_temp is also used like cfa_store,
2022                to track stores to the stack via fp or a temp reg.
2023
2024   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2025                with cfa.reg as the first operand changes the cfa.reg and its
2026                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2027                cfa_temp.offset.
2028
2029   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2030                expression yielding a constant.  This sets cfa_temp.reg
2031                and cfa_temp.offset.
2032
2033   Rule 5:      Create a new register cfa_store used to save items to the
2034                stack.
2035
2036   Rules 10-14: Save a register to the stack.  Define offset as the
2037                difference of the original location and cfa_store's
2038                location (or cfa_temp's location if cfa_temp is used).
2039
2040   Rules 16-20: If AND operation happens on sp in prologue, we assume
2041                stack is realigned.  We will use a group of DW_OP_XXX
2042                expressions to represent the location of the stored
2043                register instead of CFA+offset.
2044
2045   The Rules
2046
2047   "{a,b}" indicates a choice of a xor b.
2048   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2049
2050   Rule 1:
2051   (set <reg1> <reg2>:cfa.reg)
2052   effects: cfa.reg = <reg1>
2053            cfa.offset unchanged
2054            cfa_temp.reg = <reg1>
2055            cfa_temp.offset = cfa.offset
2056
2057   Rule 2:
2058   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2059                               {<const_int>,<reg>:cfa_temp.reg}))
2060   effects: cfa.reg = sp if fp used
2061            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2062            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2063              if cfa_store.reg==sp
2064
2065   Rule 3:
2066   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2067   effects: cfa.reg = fp
2068            cfa_offset += +/- <const_int>
2069
2070   Rule 4:
2071   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2072   constraints: <reg1> != fp
2073                <reg1> != sp
2074   effects: cfa.reg = <reg1>
2075            cfa_temp.reg = <reg1>
2076            cfa_temp.offset = cfa.offset
2077
2078   Rule 5:
2079   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2080   constraints: <reg1> != fp
2081                <reg1> != sp
2082   effects: cfa_store.reg = <reg1>
2083            cfa_store.offset = cfa.offset - cfa_temp.offset
2084
2085   Rule 6:
2086   (set <reg> <const_int>)
2087   effects: cfa_temp.reg = <reg>
2088            cfa_temp.offset = <const_int>
2089
2090   Rule 7:
2091   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2092   effects: cfa_temp.reg = <reg1>
2093            cfa_temp.offset |= <const_int>
2094
2095   Rule 8:
2096   (set <reg> (high <exp>))
2097   effects: none
2098
2099   Rule 9:
2100   (set <reg> (lo_sum <exp> <const_int>))
2101   effects: cfa_temp.reg = <reg>
2102            cfa_temp.offset = <const_int>
2103
2104   Rule 10:
2105   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2106   effects: cfa_store.offset -= <const_int>
2107            cfa.offset = cfa_store.offset if cfa.reg == sp
2108            cfa.reg = sp
2109            cfa.base_offset = -cfa_store.offset
2110
2111   Rule 11:
2112   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2113   effects: cfa_store.offset += -/+ mode_size(mem)
2114            cfa.offset = cfa_store.offset if cfa.reg == sp
2115            cfa.reg = sp
2116            cfa.base_offset = -cfa_store.offset
2117
2118   Rule 12:
2119   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2120
2121        <reg2>)
2122   effects: cfa.reg = <reg1>
2123            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2124
2125   Rule 13:
2126   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2127   effects: cfa.reg = <reg1>
2128            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2129
2130   Rule 14:
2131   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2132   effects: cfa.reg = <reg1>
2133            cfa.base_offset = -cfa_temp.offset
2134            cfa_temp.offset -= mode_size(mem)
2135
2136   Rule 15:
2137   (set <reg> {unspec, unspec_volatile})
2138   effects: target-dependent
2139
2140   Rule 16:
2141   (set sp (and: sp <const_int>))
2142   constraints: cfa_store.reg == sp
2143   effects: current_fde.stack_realign = 1
2144            cfa_store.offset = 0
2145            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2146
2147   Rule 17:
2148   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2149   effects: cfa_store.offset += -/+ mode_size(mem)
2150
2151   Rule 18:
2152   (set (mem ({pre_inc, pre_dec} sp)) fp)
2153   constraints: fde->stack_realign == 1
2154   effects: cfa_store.offset = 0
2155            cfa.reg != HARD_FRAME_POINTER_REGNUM
2156
2157   Rule 19:
2158   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2159   constraints: fde->stack_realign == 1
2160                && cfa.offset == 0
2161                && cfa.indirect == 0
2162                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2163   effects: Use DW_CFA_def_cfa_expression to define cfa
2164            cfa.reg == fde->drap_reg  */
2165
2166 static void
2167 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2168 {
2169   rtx src, dest, span;
2170   HOST_WIDE_INT offset;
2171   dw_fde_ref fde;
2172
2173   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2174      the PARALLEL independently. The first element is always processed if
2175      it is a SET. This is for backward compatibility.   Other elements
2176      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2177      flag is set in them.  */
2178   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2179     {
2180       int par_index;
2181       int limit = XVECLEN (expr, 0);
2182       rtx elem;
2183
2184       /* PARALLELs have strict read-modify-write semantics, so we
2185          ought to evaluate every rvalue before changing any lvalue.
2186          It's cumbersome to do that in general, but there's an
2187          easy approximation that is enough for all current users:
2188          handle register saves before register assignments.  */
2189       if (GET_CODE (expr) == PARALLEL)
2190         for (par_index = 0; par_index < limit; par_index++)
2191           {
2192             elem = XVECEXP (expr, 0, par_index);
2193             if (GET_CODE (elem) == SET
2194                 && MEM_P (SET_DEST (elem))
2195                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2196               dwarf2out_frame_debug_expr (elem, label);
2197           }
2198
2199       for (par_index = 0; par_index < limit; par_index++)
2200         {
2201           elem = XVECEXP (expr, 0, par_index);
2202           if (GET_CODE (elem) == SET
2203               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2204               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2205             dwarf2out_frame_debug_expr (elem, label);
2206           else if (GET_CODE (elem) == SET
2207                    && par_index != 0
2208                    && !RTX_FRAME_RELATED_P (elem))
2209             {
2210               /* Stack adjustment combining might combine some post-prologue
2211                  stack adjustment into a prologue stack adjustment.  */
2212               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2213
2214               if (offset != 0)
2215                 dwarf2out_stack_adjust (offset, label);
2216             }
2217         }
2218       return;
2219     }
2220
2221   gcc_assert (GET_CODE (expr) == SET);
2222
2223   src = SET_SRC (expr);
2224   dest = SET_DEST (expr);
2225
2226   if (REG_P (src))
2227     {
2228       rtx rsi = reg_saved_in (src);
2229       if (rsi)
2230         src = rsi;
2231     }
2232
2233   fde = current_fde ();
2234
2235   switch (GET_CODE (dest))
2236     {
2237     case REG:
2238       switch (GET_CODE (src))
2239         {
2240           /* Setting FP from SP.  */
2241         case REG:
2242           if (cfa.reg == (unsigned) REGNO (src))
2243             {
2244               /* Rule 1 */
2245               /* Update the CFA rule wrt SP or FP.  Make sure src is
2246                  relative to the current CFA register.
2247
2248                  We used to require that dest be either SP or FP, but the
2249                  ARM copies SP to a temporary register, and from there to
2250                  FP.  So we just rely on the backends to only set
2251                  RTX_FRAME_RELATED_P on appropriate insns.  */
2252               cfa.reg = REGNO (dest);
2253               cfa_temp.reg = cfa.reg;
2254               cfa_temp.offset = cfa.offset;
2255             }
2256           else
2257             {
2258               /* Saving a register in a register.  */
2259               gcc_assert (!fixed_regs [REGNO (dest)]
2260                           /* For the SPARC and its register window.  */
2261                           || (DWARF_FRAME_REGNUM (REGNO (src))
2262                               == DWARF_FRAME_RETURN_COLUMN));
2263
2264               /* After stack is aligned, we can only save SP in FP
2265                  if drap register is used.  In this case, we have
2266                  to restore stack pointer with the CFA value and we
2267                  don't generate this DWARF information.  */
2268               if (fde
2269                   && fde->stack_realign
2270                   && REGNO (src) == STACK_POINTER_REGNUM)
2271                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2272                             && fde->drap_reg != INVALID_REGNUM
2273                             && cfa.reg != REGNO (src));
2274               else
2275                 queue_reg_save (label, src, dest, 0);
2276             }
2277           break;
2278
2279         case PLUS:
2280         case MINUS:
2281         case LO_SUM:
2282           if (dest == stack_pointer_rtx)
2283             {
2284               /* Rule 2 */
2285               /* Adjusting SP.  */
2286               switch (GET_CODE (XEXP (src, 1)))
2287                 {
2288                 case CONST_INT:
2289                   offset = INTVAL (XEXP (src, 1));
2290                   break;
2291                 case REG:
2292                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2293                               == cfa_temp.reg);
2294                   offset = cfa_temp.offset;
2295                   break;
2296                 default:
2297                   gcc_unreachable ();
2298                 }
2299
2300               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2301                 {
2302                   /* Restoring SP from FP in the epilogue.  */
2303                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2304                   cfa.reg = STACK_POINTER_REGNUM;
2305                 }
2306               else if (GET_CODE (src) == LO_SUM)
2307                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2308                 ;
2309               else
2310                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2311
2312               if (GET_CODE (src) != MINUS)
2313                 offset = -offset;
2314               if (cfa.reg == STACK_POINTER_REGNUM)
2315                 cfa.offset += offset;
2316               if (cfa_store.reg == STACK_POINTER_REGNUM)
2317                 cfa_store.offset += offset;
2318             }
2319           else if (dest == hard_frame_pointer_rtx)
2320             {
2321               /* Rule 3 */
2322               /* Either setting the FP from an offset of the SP,
2323                  or adjusting the FP */
2324               gcc_assert (frame_pointer_needed);
2325
2326               gcc_assert (REG_P (XEXP (src, 0))
2327                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2328                           && CONST_INT_P (XEXP (src, 1)));
2329               offset = INTVAL (XEXP (src, 1));
2330               if (GET_CODE (src) != MINUS)
2331                 offset = -offset;
2332               cfa.offset += offset;
2333               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2334             }
2335           else
2336             {
2337               gcc_assert (GET_CODE (src) != MINUS);
2338
2339               /* Rule 4 */
2340               if (REG_P (XEXP (src, 0))
2341                   && REGNO (XEXP (src, 0)) == cfa.reg
2342                   && CONST_INT_P (XEXP (src, 1)))
2343                 {
2344                   /* Setting a temporary CFA register that will be copied
2345                      into the FP later on.  */
2346                   offset = - INTVAL (XEXP (src, 1));
2347                   cfa.offset += offset;
2348                   cfa.reg = REGNO (dest);
2349                   /* Or used to save regs to the stack.  */
2350                   cfa_temp.reg = cfa.reg;
2351                   cfa_temp.offset = cfa.offset;
2352                 }
2353
2354               /* Rule 5 */
2355               else if (REG_P (XEXP (src, 0))
2356                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2357                        && XEXP (src, 1) == stack_pointer_rtx)
2358                 {
2359                   /* Setting a scratch register that we will use instead
2360                      of SP for saving registers to the stack.  */
2361                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2362                   cfa_store.reg = REGNO (dest);
2363                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2364                 }
2365
2366               /* Rule 9 */
2367               else if (GET_CODE (src) == LO_SUM
2368                        && CONST_INT_P (XEXP (src, 1)))
2369                 {
2370                   cfa_temp.reg = REGNO (dest);
2371                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2372                 }
2373               else
2374                 gcc_unreachable ();
2375             }
2376           break;
2377
2378           /* Rule 6 */
2379         case CONST_INT:
2380           cfa_temp.reg = REGNO (dest);
2381           cfa_temp.offset = INTVAL (src);
2382           break;
2383
2384           /* Rule 7 */
2385         case IOR:
2386           gcc_assert (REG_P (XEXP (src, 0))
2387                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2388                       && CONST_INT_P (XEXP (src, 1)));
2389
2390           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2391             cfa_temp.reg = REGNO (dest);
2392           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2393           break;
2394
2395           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2396              which will fill in all of the bits.  */
2397           /* Rule 8 */
2398         case HIGH:
2399           break;
2400
2401           /* Rule 15 */
2402         case UNSPEC:
2403         case UNSPEC_VOLATILE:
2404           gcc_assert (targetm.dwarf_handle_frame_unspec);
2405           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2406           return;
2407
2408           /* Rule 16 */
2409         case AND:
2410           /* If this AND operation happens on stack pointer in prologue,
2411              we assume the stack is realigned and we extract the
2412              alignment.  */
2413           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2414             {
2415               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2416               fde->stack_realign = 1;
2417               fde->stack_realignment = INTVAL (XEXP (src, 1));
2418               cfa_store.offset = 0;
2419
2420               if (cfa.reg != STACK_POINTER_REGNUM
2421                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2422                 fde->drap_reg = cfa.reg;
2423             }
2424           return;
2425
2426         default:
2427           gcc_unreachable ();
2428         }
2429
2430       def_cfa_1 (label, &cfa);
2431       break;
2432
2433     case MEM:
2434
2435       /* Saving a register to the stack.  Make sure dest is relative to the
2436          CFA register.  */
2437       switch (GET_CODE (XEXP (dest, 0)))
2438         {
2439           /* Rule 10 */
2440           /* With a push.  */
2441         case PRE_MODIFY:
2442           /* We can't handle variable size modifications.  */
2443           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2444                       == CONST_INT);
2445           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2446
2447           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2448                       && cfa_store.reg == STACK_POINTER_REGNUM);
2449
2450           cfa_store.offset += offset;
2451           if (cfa.reg == STACK_POINTER_REGNUM)
2452             cfa.offset = cfa_store.offset;
2453
2454           offset = -cfa_store.offset;
2455           break;
2456
2457           /* Rule 11 */
2458         case PRE_INC:
2459         case PRE_DEC:
2460           offset = GET_MODE_SIZE (GET_MODE (dest));
2461           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2462             offset = -offset;
2463
2464           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2465                        == STACK_POINTER_REGNUM)
2466                       && cfa_store.reg == STACK_POINTER_REGNUM);
2467
2468           cfa_store.offset += offset;
2469
2470           /* Rule 18: If stack is aligned, we will use FP as a
2471              reference to represent the address of the stored
2472              regiser.  */
2473           if (fde
2474               && fde->stack_realign
2475               && src == hard_frame_pointer_rtx)
2476             {
2477               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2478               cfa_store.offset = 0;
2479             }
2480
2481           if (cfa.reg == STACK_POINTER_REGNUM)
2482             cfa.offset = cfa_store.offset;
2483
2484           offset = -cfa_store.offset;
2485           break;
2486
2487           /* Rule 12 */
2488           /* With an offset.  */
2489         case PLUS:
2490         case MINUS:
2491         case LO_SUM:
2492           {
2493             int regno;
2494
2495             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2496                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2497             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2498             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2499               offset = -offset;
2500
2501             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2502
2503             if (cfa_store.reg == (unsigned) regno)
2504               offset -= cfa_store.offset;
2505             else
2506               {
2507                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2508                 offset -= cfa_temp.offset;
2509               }
2510           }
2511           break;
2512
2513           /* Rule 13 */
2514           /* Without an offset.  */
2515         case REG:
2516           {
2517             int regno = REGNO (XEXP (dest, 0));
2518
2519             if (cfa_store.reg == (unsigned) regno)
2520               offset = -cfa_store.offset;
2521             else
2522               {
2523                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2524                 offset = -cfa_temp.offset;
2525               }
2526           }
2527           break;
2528
2529           /* Rule 14 */
2530         case POST_INC:
2531           gcc_assert (cfa_temp.reg
2532                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2533           offset = -cfa_temp.offset;
2534           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2535           break;
2536
2537         default:
2538           gcc_unreachable ();
2539         }
2540
2541         /* Rule 17 */
2542         /* If the source operand of this MEM operation is not a
2543            register, basically the source is return address.  Here
2544            we only care how much stack grew and we don't save it.  */
2545       if (!REG_P (src))
2546         break;
2547
2548       if (REGNO (src) != STACK_POINTER_REGNUM
2549           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2550           && (unsigned) REGNO (src) == cfa.reg)
2551         {
2552           /* We're storing the current CFA reg into the stack.  */
2553
2554           if (cfa.offset == 0)
2555             {
2556               /* Rule 19 */
2557               /* If stack is aligned, putting CFA reg into stack means
2558                  we can no longer use reg + offset to represent CFA.
2559                  Here we use DW_CFA_def_cfa_expression instead.  The
2560                  result of this expression equals to the original CFA
2561                  value.  */
2562               if (fde
2563                   && fde->stack_realign
2564                   && cfa.indirect == 0
2565                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2566                 {
2567                   dw_cfa_location cfa_exp;
2568
2569                   gcc_assert (fde->drap_reg == cfa.reg);
2570
2571                   cfa_exp.indirect = 1;
2572                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2573                   cfa_exp.base_offset = offset;
2574                   cfa_exp.offset = 0;
2575
2576                   fde->drap_reg_saved = 1;
2577
2578                   def_cfa_1 (label, &cfa_exp);
2579                   break;
2580                 }
2581
2582               /* If the source register is exactly the CFA, assume
2583                  we're saving SP like any other register; this happens
2584                  on the ARM.  */
2585               def_cfa_1 (label, &cfa);
2586               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2587               break;
2588             }
2589           else
2590             {
2591               /* Otherwise, we'll need to look in the stack to
2592                  calculate the CFA.  */
2593               rtx x = XEXP (dest, 0);
2594
2595               if (!REG_P (x))
2596                 x = XEXP (x, 0);
2597               gcc_assert (REG_P (x));
2598
2599               cfa.reg = REGNO (x);
2600               cfa.base_offset = offset;
2601               cfa.indirect = 1;
2602               def_cfa_1 (label, &cfa);
2603               break;
2604             }
2605         }
2606
2607       def_cfa_1 (label, &cfa);
2608       {
2609         span = targetm.dwarf_register_span (src);
2610
2611         if (!span)
2612           queue_reg_save (label, src, NULL_RTX, offset);
2613         else
2614           {
2615             /* We have a PARALLEL describing where the contents of SRC
2616                live.  Queue register saves for each piece of the
2617                PARALLEL.  */
2618             int par_index;
2619             int limit;
2620             HOST_WIDE_INT span_offset = offset;
2621
2622             gcc_assert (GET_CODE (span) == PARALLEL);
2623
2624             limit = XVECLEN (span, 0);
2625             for (par_index = 0; par_index < limit; par_index++)
2626               {
2627                 rtx elem = XVECEXP (span, 0, par_index);
2628
2629                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2630                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2631               }
2632           }
2633       }
2634       break;
2635
2636     default:
2637       gcc_unreachable ();
2638     }
2639 }
2640
2641 /* Record call frame debugging information for INSN, which either
2642    sets SP or FP (adjusting how we calculate the frame address) or saves a
2643    register to the stack.  If INSN is NULL_RTX, initialize our state.
2644
2645    If AFTER_P is false, we're being called before the insn is emitted,
2646    otherwise after.  Call instructions get invoked twice.  */
2647
2648 void
2649 dwarf2out_frame_debug (rtx insn, bool after_p)
2650 {
2651   const char *label;
2652   rtx note, n;
2653   bool handled_one = false;
2654
2655   if (insn == NULL_RTX)
2656     {
2657       size_t i;
2658
2659       /* Flush any queued register saves.  */
2660       flush_queued_reg_saves ();
2661
2662       /* Set up state for generating call frame debug info.  */
2663       lookup_cfa (&cfa);
2664       gcc_assert (cfa.reg
2665                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2666
2667       cfa.reg = STACK_POINTER_REGNUM;
2668       cfa_store = cfa;
2669       cfa_temp.reg = -1;
2670       cfa_temp.offset = 0;
2671
2672       for (i = 0; i < num_regs_saved_in_regs; i++)
2673         {
2674           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2675           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2676         }
2677       num_regs_saved_in_regs = 0;
2678
2679       if (barrier_args_size)
2680         {
2681           XDELETEVEC (barrier_args_size);
2682           barrier_args_size = NULL;
2683         }
2684       return;
2685     }
2686
2687   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2688     flush_queued_reg_saves ();
2689
2690   if (!RTX_FRAME_RELATED_P (insn))
2691     {
2692       /* ??? This should be done unconditionally since stack adjustments
2693          matter if the stack pointer is not the CFA register anymore but
2694          is still used to save registers.  */
2695       if (!ACCUMULATE_OUTGOING_ARGS)
2696         dwarf2out_notice_stack_adjust (insn, after_p);
2697       return;
2698     }
2699
2700   label = dwarf2out_cfi_label (false);
2701
2702   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2703     switch (REG_NOTE_KIND (note))
2704       {
2705       case REG_FRAME_RELATED_EXPR:
2706         insn = XEXP (note, 0);
2707         goto found;
2708
2709       case REG_CFA_DEF_CFA:
2710         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2711         handled_one = true;
2712         break;
2713
2714       case REG_CFA_ADJUST_CFA:
2715         n = XEXP (note, 0);
2716         if (n == NULL)
2717           {
2718             n = PATTERN (insn);
2719             if (GET_CODE (n) == PARALLEL)
2720               n = XVECEXP (n, 0, 0);
2721           }
2722         dwarf2out_frame_debug_adjust_cfa (n, label);
2723         handled_one = true;
2724         break;
2725
2726       case REG_CFA_OFFSET:
2727         n = XEXP (note, 0);
2728         if (n == NULL)
2729           n = single_set (insn);
2730         dwarf2out_frame_debug_cfa_offset (n, label);
2731         handled_one = true;
2732         break;
2733
2734       case REG_CFA_REGISTER:
2735         n = XEXP (note, 0);
2736         if (n == NULL)
2737           {
2738             n = PATTERN (insn);
2739             if (GET_CODE (n) == PARALLEL)
2740               n = XVECEXP (n, 0, 0);
2741           }
2742         dwarf2out_frame_debug_cfa_register (n, label);
2743         handled_one = true;
2744         break;
2745
2746       case REG_CFA_RESTORE:
2747         n = XEXP (note, 0);
2748         if (n == NULL)
2749           {
2750             n = PATTERN (insn);
2751             if (GET_CODE (n) == PARALLEL)
2752               n = XVECEXP (n, 0, 0);
2753             n = XEXP (n, 0);
2754           }
2755         dwarf2out_frame_debug_cfa_restore (n, label);
2756         handled_one = true;
2757         break;
2758
2759       case REG_CFA_SET_VDRAP:
2760         n = XEXP (note, 0);
2761         if (REG_P (n))
2762           {
2763             dw_fde_ref fde = current_fde ();
2764             if (fde)
2765               {
2766                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2767                 if (REG_P (n))
2768                   fde->vdrap_reg = REGNO (n);
2769               }
2770           }
2771         handled_one = true;
2772         break;
2773
2774       default:
2775         break;
2776       }
2777   if (handled_one)
2778     return;
2779
2780   insn = PATTERN (insn);
2781  found:
2782   dwarf2out_frame_debug_expr (insn, label);
2783 }
2784
2785 /* Determine if we need to save and restore CFI information around this
2786    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2787    we do need to save/restore, then emit the save now, and insert a
2788    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2789
2790 void
2791 dwarf2out_begin_epilogue (rtx insn)
2792 {
2793   bool saw_frp = false;
2794   rtx i;
2795
2796   /* Scan forward to the return insn, noticing if there are possible
2797      frame related insns.  */
2798   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2799     {
2800       if (!INSN_P (i))
2801         continue;
2802
2803       /* Look for both regular and sibcalls to end the block.  */
2804       if (returnjump_p (i))
2805         break;
2806       if (CALL_P (i) && SIBLING_CALL_P (i))
2807         break;
2808
2809       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2810         {
2811           int idx;
2812           rtx seq = PATTERN (i);
2813
2814           if (returnjump_p (XVECEXP (seq, 0, 0)))
2815             break;
2816           if (CALL_P (XVECEXP (seq, 0, 0))
2817               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2818             break;
2819
2820           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2821             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2822               saw_frp = true;
2823         }
2824
2825       if (RTX_FRAME_RELATED_P (i))
2826         saw_frp = true;
2827     }
2828
2829   /* If the port doesn't emit epilogue unwind info, we don't need a
2830      save/restore pair.  */
2831   if (!saw_frp)
2832     return;
2833
2834   /* Otherwise, search forward to see if the return insn was the last
2835      basic block of the function.  If so, we don't need save/restore.  */
2836   gcc_assert (i != NULL);
2837   i = next_real_insn (i);
2838   if (i == NULL)
2839     return;
2840
2841   /* Insert the restore before that next real insn in the stream, and before
2842      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2843      properly nested.  This should be after any label or alignment.  This
2844      will be pushed into the CFI stream by the function below.  */
2845   while (1)
2846     {
2847       rtx p = PREV_INSN (i);
2848       if (!NOTE_P (p))
2849         break;
2850       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2851         break;
2852       i = p;
2853     }
2854   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2855
2856   emit_cfa_remember = true;
2857
2858   /* And emulate the state save.  */
2859   gcc_assert (!cfa_remember.in_use);
2860   cfa_remember = cfa;
2861   cfa_remember.in_use = 1;
2862 }
2863
2864 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2865
2866 void
2867 dwarf2out_frame_debug_restore_state (void)
2868 {
2869   dw_cfi_ref cfi = new_cfi ();
2870   const char *label = dwarf2out_cfi_label (false);
2871
2872   cfi->dw_cfi_opc = DW_CFA_restore_state;
2873   add_fde_cfi (label, cfi);
2874
2875   gcc_assert (cfa_remember.in_use);
2876   cfa = cfa_remember;
2877   cfa_remember.in_use = 0;
2878 }
2879
2880 #endif
2881
2882 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2883 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2884  (enum dwarf_call_frame_info cfi);
2885
2886 static enum dw_cfi_oprnd_type
2887 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2888 {
2889   switch (cfi)
2890     {
2891     case DW_CFA_nop:
2892     case DW_CFA_GNU_window_save:
2893     case DW_CFA_remember_state:
2894     case DW_CFA_restore_state:
2895       return dw_cfi_oprnd_unused;
2896
2897     case DW_CFA_set_loc:
2898     case DW_CFA_advance_loc1:
2899     case DW_CFA_advance_loc2:
2900     case DW_CFA_advance_loc4:
2901     case DW_CFA_MIPS_advance_loc8:
2902       return dw_cfi_oprnd_addr;
2903
2904     case DW_CFA_offset:
2905     case DW_CFA_offset_extended:
2906     case DW_CFA_def_cfa:
2907     case DW_CFA_offset_extended_sf:
2908     case DW_CFA_def_cfa_sf:
2909     case DW_CFA_restore:
2910     case DW_CFA_restore_extended:
2911     case DW_CFA_undefined:
2912     case DW_CFA_same_value:
2913     case DW_CFA_def_cfa_register:
2914     case DW_CFA_register:
2915     case DW_CFA_expression:
2916       return dw_cfi_oprnd_reg_num;
2917
2918     case DW_CFA_def_cfa_offset:
2919     case DW_CFA_GNU_args_size:
2920     case DW_CFA_def_cfa_offset_sf:
2921       return dw_cfi_oprnd_offset;
2922
2923     case DW_CFA_def_cfa_expression:
2924       return dw_cfi_oprnd_loc;
2925
2926     default:
2927       gcc_unreachable ();
2928     }
2929 }
2930
2931 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2932 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2933  (enum dwarf_call_frame_info cfi);
2934
2935 static enum dw_cfi_oprnd_type
2936 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2937 {
2938   switch (cfi)
2939     {
2940     case DW_CFA_def_cfa:
2941     case DW_CFA_def_cfa_sf:
2942     case DW_CFA_offset:
2943     case DW_CFA_offset_extended_sf:
2944     case DW_CFA_offset_extended:
2945       return dw_cfi_oprnd_offset;
2946
2947     case DW_CFA_register:
2948       return dw_cfi_oprnd_reg_num;
2949
2950     case DW_CFA_expression:
2951       return dw_cfi_oprnd_loc;
2952
2953     default:
2954       return dw_cfi_oprnd_unused;
2955     }
2956 }
2957
2958 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2959
2960 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2961    switch to the data section instead, and write out a synthetic start label
2962    for collect2 the first time around.  */
2963
2964 static void
2965 switch_to_eh_frame_section (bool back)
2966 {
2967   tree label;
2968
2969 #ifdef EH_FRAME_SECTION_NAME
2970   if (eh_frame_section == 0)
2971     {
2972       int flags;
2973
2974       if (EH_TABLES_CAN_BE_READ_ONLY)
2975         {
2976           int fde_encoding;
2977           int per_encoding;
2978           int lsda_encoding;
2979
2980           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2981                                                        /*global=*/0);
2982           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2983                                                        /*global=*/1);
2984           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2985                                                         /*global=*/0);
2986           flags = ((! flag_pic
2987                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2988                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2989                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2990                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2991                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2992                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2993                    ? 0 : SECTION_WRITE);
2994         }
2995       else
2996         flags = SECTION_WRITE;
2997       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2998     }
2999 #endif
3000
3001   if (eh_frame_section)
3002     switch_to_section (eh_frame_section);
3003   else
3004     {
3005       /* We have no special eh_frame section.  Put the information in
3006          the data section and emit special labels to guide collect2.  */
3007       switch_to_section (data_section);
3008
3009       if (!back)
3010         {
3011           label = get_file_function_name ("F");
3012           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3013           targetm.asm_out.globalize_label (asm_out_file,
3014                                            IDENTIFIER_POINTER (label));
3015           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3016         }
3017     }
3018 }
3019
3020 /* Switch [BACK] to the eh or debug frame table section, depending on
3021    FOR_EH.  */
3022
3023 static void
3024 switch_to_frame_table_section (int for_eh, bool back)
3025 {
3026   if (for_eh)
3027     switch_to_eh_frame_section (back);
3028   else
3029     {
3030       if (!debug_frame_section)
3031         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3032                                            SECTION_DEBUG, NULL);
3033       switch_to_section (debug_frame_section);
3034     }
3035 }
3036
3037 /* Output a Call Frame Information opcode and its operand(s).  */
3038
3039 static void
3040 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3041 {
3042   unsigned long r;
3043   HOST_WIDE_INT off;
3044
3045   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3046     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3047                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3048                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3049                          ((unsigned HOST_WIDE_INT)
3050                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3051   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3052     {
3053       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3054       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3055                            "DW_CFA_offset, column %#lx", r);
3056       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3057       dw2_asm_output_data_uleb128 (off, NULL);
3058     }
3059   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3060     {
3061       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3062       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3063                            "DW_CFA_restore, column %#lx", r);
3064     }
3065   else
3066     {
3067       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3068                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3069
3070       switch (cfi->dw_cfi_opc)
3071         {
3072         case DW_CFA_set_loc:
3073           if (for_eh)
3074             dw2_asm_output_encoded_addr_rtx (
3075                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3076                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3077                 false, NULL);
3078           else
3079             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3080                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3081           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3082           break;
3083
3084         case DW_CFA_advance_loc1:
3085           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3086                                 fde->dw_fde_current_label, NULL);
3087           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3088           break;
3089
3090         case DW_CFA_advance_loc2:
3091           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3092                                 fde->dw_fde_current_label, NULL);
3093           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3094           break;
3095
3096         case DW_CFA_advance_loc4:
3097           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3098                                 fde->dw_fde_current_label, NULL);
3099           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3100           break;
3101
3102         case DW_CFA_MIPS_advance_loc8:
3103           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3104                                 fde->dw_fde_current_label, NULL);
3105           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3106           break;
3107
3108         case DW_CFA_offset_extended:
3109           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3110           dw2_asm_output_data_uleb128 (r, NULL);
3111           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3112           dw2_asm_output_data_uleb128 (off, NULL);
3113           break;
3114
3115         case DW_CFA_def_cfa:
3116           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3117           dw2_asm_output_data_uleb128 (r, NULL);
3118           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3119           break;
3120
3121         case DW_CFA_offset_extended_sf:
3122           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3123           dw2_asm_output_data_uleb128 (r, NULL);
3124           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3125           dw2_asm_output_data_sleb128 (off, NULL);
3126           break;
3127
3128         case DW_CFA_def_cfa_sf:
3129           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3130           dw2_asm_output_data_uleb128 (r, NULL);
3131           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3132           dw2_asm_output_data_sleb128 (off, NULL);
3133           break;
3134
3135         case DW_CFA_restore_extended:
3136         case DW_CFA_undefined:
3137         case DW_CFA_same_value:
3138         case DW_CFA_def_cfa_register:
3139           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3140           dw2_asm_output_data_uleb128 (r, NULL);
3141           break;
3142
3143         case DW_CFA_register:
3144           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3145           dw2_asm_output_data_uleb128 (r, NULL);
3146           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3147           dw2_asm_output_data_uleb128 (r, NULL);
3148           break;
3149
3150         case DW_CFA_def_cfa_offset:
3151         case DW_CFA_GNU_args_size:
3152           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3153           break;
3154
3155         case DW_CFA_def_cfa_offset_sf:
3156           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3157           dw2_asm_output_data_sleb128 (off, NULL);
3158           break;
3159
3160         case DW_CFA_GNU_window_save:
3161           break;
3162
3163         case DW_CFA_def_cfa_expression:
3164         case DW_CFA_expression:
3165           output_cfa_loc (cfi);
3166           break;
3167
3168         case DW_CFA_GNU_negative_offset_extended:
3169           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3170           gcc_unreachable ();
3171
3172         default:
3173           break;
3174         }
3175     }
3176 }
3177
3178 /* Similar, but do it via assembler directives instead.  */
3179
3180 static void
3181 output_cfi_directive (dw_cfi_ref cfi)
3182 {
3183   unsigned long r, r2;
3184
3185   switch (cfi->dw_cfi_opc)
3186     {
3187     case DW_CFA_advance_loc:
3188     case DW_CFA_advance_loc1:
3189     case DW_CFA_advance_loc2:
3190     case DW_CFA_advance_loc4:
3191     case DW_CFA_MIPS_advance_loc8:
3192     case DW_CFA_set_loc:
3193       /* Should only be created by add_fde_cfi in a code path not
3194          followed when emitting via directives.  The assembler is
3195          going to take care of this for us.  */
3196       gcc_unreachable ();
3197
3198     case DW_CFA_offset:
3199     case DW_CFA_offset_extended:
3200     case DW_CFA_offset_extended_sf:
3201       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3202       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3203                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3204       break;
3205
3206     case DW_CFA_restore:
3207     case DW_CFA_restore_extended:
3208       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3209       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3210       break;
3211
3212     case DW_CFA_undefined:
3213       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3214       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3215       break;
3216
3217     case DW_CFA_same_value:
3218       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3219       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3220       break;
3221
3222     case DW_CFA_def_cfa:
3223     case DW_CFA_def_cfa_sf:
3224       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3225       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3226                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3227       break;
3228
3229     case DW_CFA_def_cfa_register:
3230       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3231       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3232       break;
3233
3234     case DW_CFA_register:
3235       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3236       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3237       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3238       break;
3239
3240     case DW_CFA_def_cfa_offset:
3241     case DW_CFA_def_cfa_offset_sf:
3242       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3243                HOST_WIDE_INT_PRINT_DEC"\n",
3244                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3245       break;
3246
3247     case DW_CFA_remember_state:
3248       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3249       break;
3250     case DW_CFA_restore_state:
3251       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3252       break;
3253
3254     case DW_CFA_GNU_args_size:
3255       fprintf (asm_out_file, "\t.cfi_escape %#x,", DW_CFA_GNU_args_size);
3256       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3257       if (flag_debug_asm)
3258         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3259                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3260       fputc ('\n', asm_out_file);
3261       break;
3262
3263     case DW_CFA_GNU_window_save:
3264       fprintf (asm_out_file, "\t.cfi_window_save\n");
3265       break;
3266
3267     case DW_CFA_def_cfa_expression:
3268     case DW_CFA_expression:
3269       fprintf (asm_out_file, "\t.cfi_escape %#x,", cfi->dw_cfi_opc);
3270       output_cfa_loc_raw (cfi);
3271       fputc ('\n', asm_out_file);
3272       break;
3273
3274     default:
3275       gcc_unreachable ();
3276     }
3277 }
3278
3279 DEF_VEC_P (dw_cfi_ref);
3280 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3281
3282 /* Output CFIs to bring current FDE to the same state as after executing
3283    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3284    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3285    other arguments to pass to output_cfi.  */
3286
3287 static void
3288 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3289 {
3290   struct dw_cfi_struct cfi_buf;
3291   dw_cfi_ref cfi2;
3292   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3293   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3294   unsigned int len, idx;
3295
3296   for (;; cfi = cfi->dw_cfi_next)
3297     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3298       {
3299       case DW_CFA_advance_loc:
3300       case DW_CFA_advance_loc1:
3301       case DW_CFA_advance_loc2:
3302       case DW_CFA_advance_loc4:
3303       case DW_CFA_MIPS_advance_loc8:
3304       case DW_CFA_set_loc:
3305         /* All advances should be ignored.  */
3306         break;
3307       case DW_CFA_remember_state:
3308         {
3309           dw_cfi_ref args_size = cfi_args_size;
3310
3311           /* Skip everything between .cfi_remember_state and
3312              .cfi_restore_state.  */
3313           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3314             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3315               break;
3316             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3317               args_size = cfi2;
3318             else
3319               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3320
3321           if (cfi2 == NULL)
3322             goto flush_all;
3323           else
3324             {
3325               cfi = cfi2;
3326               cfi_args_size = args_size;
3327             }
3328           break;
3329         }
3330       case DW_CFA_GNU_args_size:
3331         cfi_args_size = cfi;
3332         break;
3333       case DW_CFA_GNU_window_save:
3334         goto flush_all;
3335       case DW_CFA_offset:
3336       case DW_CFA_offset_extended:
3337       case DW_CFA_offset_extended_sf:
3338       case DW_CFA_restore:
3339       case DW_CFA_restore_extended:
3340       case DW_CFA_undefined:
3341       case DW_CFA_same_value:
3342       case DW_CFA_register:
3343       case DW_CFA_val_offset:
3344       case DW_CFA_val_offset_sf:
3345       case DW_CFA_expression:
3346       case DW_CFA_val_expression:
3347       case DW_CFA_GNU_negative_offset_extended:
3348         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3349           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3350                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3351         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3352         break;
3353       case DW_CFA_def_cfa:
3354       case DW_CFA_def_cfa_sf:
3355       case DW_CFA_def_cfa_expression:
3356         cfi_cfa = cfi;
3357         cfi_cfa_offset = cfi;
3358         break;
3359       case DW_CFA_def_cfa_register:
3360         cfi_cfa = cfi;
3361         break;
3362       case DW_CFA_def_cfa_offset:
3363       case DW_CFA_def_cfa_offset_sf:
3364         cfi_cfa_offset = cfi;
3365         break;
3366       case DW_CFA_nop:
3367         gcc_assert (cfi == NULL);
3368       flush_all:
3369         len = VEC_length (dw_cfi_ref, regs);
3370         for (idx = 0; idx < len; idx++)
3371           {
3372             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3373             if (cfi2 != NULL
3374                 && cfi2->dw_cfi_opc != DW_CFA_restore
3375                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3376               {
3377                 if (do_cfi_asm)
3378                   output_cfi_directive (cfi2);
3379                 else
3380                   output_cfi (cfi2, fde, for_eh);
3381               }
3382           }
3383         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3384           {
3385             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3386             cfi_buf = *cfi_cfa;
3387             switch (cfi_cfa_offset->dw_cfi_opc)
3388               {
3389               case DW_CFA_def_cfa_offset:
3390                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3391                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3392                 break;
3393               case DW_CFA_def_cfa_offset_sf:
3394                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3395                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3396                 break;
3397               case DW_CFA_def_cfa:
3398               case DW_CFA_def_cfa_sf:
3399                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3400                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3401                 break;
3402               default:
3403                 gcc_unreachable ();
3404               }
3405             cfi_cfa = &cfi_buf;
3406           }
3407         else if (cfi_cfa_offset)
3408           cfi_cfa = cfi_cfa_offset;
3409         if (cfi_cfa)
3410           {
3411             if (do_cfi_asm)
3412               output_cfi_directive (cfi_cfa);
3413             else
3414               output_cfi (cfi_cfa, fde, for_eh);
3415           }
3416         cfi_cfa = NULL;
3417         cfi_cfa_offset = NULL;
3418         if (cfi_args_size
3419             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3420           {
3421             if (do_cfi_asm)
3422               output_cfi_directive (cfi_args_size);
3423             else
3424               output_cfi (cfi_args_size, fde, for_eh);
3425           }
3426         cfi_args_size = NULL;
3427         if (cfi == NULL)
3428           {
3429             VEC_free (dw_cfi_ref, heap, regs);
3430             return;
3431           }
3432         else if (do_cfi_asm)
3433           output_cfi_directive (cfi);
3434         else
3435           output_cfi (cfi, fde, for_eh);
3436         break;
3437       default:
3438         gcc_unreachable ();
3439     }
3440 }
3441
3442 /* Output one FDE.  */
3443
3444 static void
3445 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3446             char *section_start_label, int fde_encoding, char *augmentation,
3447             bool any_lsda_needed, int lsda_encoding)
3448 {
3449   const char *begin, *end;
3450   static unsigned int j;
3451   char l1[20], l2[20];
3452   dw_cfi_ref cfi;
3453
3454   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3455                                 /* empty */ 0);
3456   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3457                                   for_eh + j);
3458   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3459   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3460   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3461     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3462                          " indicating 64-bit DWARF extension");
3463   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3464                         "FDE Length");
3465   ASM_OUTPUT_LABEL (asm_out_file, l1);
3466
3467   if (for_eh)
3468     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3469   else
3470     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3471                            debug_frame_section, "FDE CIE offset");
3472
3473   if (!fde->dw_fde_switched_sections)
3474     {
3475       begin = fde->dw_fde_begin;
3476       end = fde->dw_fde_end;
3477     }
3478   else
3479     {
3480       /* For the first section, prefer dw_fde_begin over
3481          dw_fde_{hot,cold}_section_label, as the latter
3482          might be separated from the real start of the
3483          function by alignment padding.  */
3484       if (!second)
3485         begin = fde->dw_fde_begin;
3486       else if (fde->dw_fde_switched_cold_to_hot)
3487         begin = fde->dw_fde_hot_section_label;
3488       else
3489         begin = fde->dw_fde_unlikely_section_label;
3490       if (second ^ fde->dw_fde_switched_cold_to_hot)
3491         end = fde->dw_fde_unlikely_section_end_label;
3492       else
3493         end = fde->dw_fde_hot_section_end_label;
3494     }
3495
3496   if (for_eh)
3497     {
3498       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3499       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3500       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3501                                        "FDE initial location");
3502       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3503                             end, begin, "FDE address range");
3504     }
3505   else
3506     {
3507       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3508       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3509     }
3510
3511   if (augmentation[0])
3512     {
3513       if (any_lsda_needed)
3514         {
3515           int size = size_of_encoded_value (lsda_encoding);
3516
3517           if (lsda_encoding == DW_EH_PE_aligned)
3518             {
3519               int offset = (  4         /* Length */
3520                             + 4         /* CIE offset */
3521                             + 2 * size_of_encoded_value (fde_encoding)
3522                             + 1         /* Augmentation size */ );
3523               int pad = -offset & (PTR_SIZE - 1);
3524
3525               size += pad;
3526               gcc_assert (size_of_uleb128 (size) == 1);
3527             }
3528
3529           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3530
3531           if (fde->uses_eh_lsda)
3532             {
3533               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3534                                            fde->funcdef_number);
3535               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3536                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3537                                                false,
3538                                                "Language Specific Data Area");
3539             }
3540           else
3541             {
3542               if (lsda_encoding == DW_EH_PE_aligned)
3543                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3544               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3545                                    "Language Specific Data Area (none)");
3546             }
3547         }
3548       else
3549         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3550     }
3551
3552   /* Loop through the Call Frame Instructions associated with
3553      this FDE.  */
3554   fde->dw_fde_current_label = begin;
3555   if (!fde->dw_fde_switched_sections)
3556     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3557       output_cfi (cfi, fde, for_eh);
3558   else if (!second)
3559     {
3560       if (fde->dw_fde_switch_cfi)
3561         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3562           {
3563             output_cfi (cfi, fde, for_eh);
3564             if (cfi == fde->dw_fde_switch_cfi)
3565               break;
3566           }
3567     }
3568   else
3569     {
3570       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3571
3572       if (fde->dw_fde_switch_cfi)
3573         {
3574           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3575           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3576           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3577           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3578         }
3579       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3580         output_cfi (cfi, fde, for_eh);
3581     }
3582
3583   /* If we are to emit a ref/link from function bodies to their frame tables,
3584      do it now.  This is typically performed to make sure that tables
3585      associated with functions are dragged with them and not discarded in
3586      garbage collecting links. We need to do this on a per function basis to
3587      cope with -ffunction-sections.  */
3588
3589 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3590   /* Switch to the function section, emit the ref to the tables, and
3591      switch *back* into the table section.  */
3592   switch_to_section (function_section (fde->decl));
3593   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3594   switch_to_frame_table_section (for_eh, true);
3595 #endif
3596
3597   /* Pad the FDE out to an address sized boundary.  */
3598   ASM_OUTPUT_ALIGN (asm_out_file,
3599                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3600   ASM_OUTPUT_LABEL (asm_out_file, l2);
3601
3602   j += 2;
3603 }
3604
3605 /* Output the call frame information used to record information
3606    that relates to calculating the frame pointer, and records the
3607    location of saved registers.  */
3608
3609 static void
3610 output_call_frame_info (int for_eh)
3611 {
3612   unsigned int i;
3613   dw_fde_ref fde;
3614   dw_cfi_ref cfi;
3615   char l1[20], l2[20], section_start_label[20];
3616   bool any_lsda_needed = false;
3617   char augmentation[6];
3618   int augmentation_size;
3619   int fde_encoding = DW_EH_PE_absptr;
3620   int per_encoding = DW_EH_PE_absptr;
3621   int lsda_encoding = DW_EH_PE_absptr;
3622   int return_reg;
3623   rtx personality = NULL;
3624   int dw_cie_version;
3625
3626   /* Don't emit a CIE if there won't be any FDEs.  */
3627   if (fde_table_in_use == 0)
3628     return;
3629
3630   /* Nothing to do if the assembler's doing it all.  */
3631   if (dwarf2out_do_cfi_asm ())
3632     return;
3633
3634   /* If we make FDEs linkonce, we may have to emit an empty label for
3635      an FDE that wouldn't otherwise be emitted.  We want to avoid
3636      having an FDE kept around when the function it refers to is
3637      discarded.  Example where this matters: a primary function
3638      template in C++ requires EH information, but an explicit
3639      specialization doesn't.  */
3640   if (TARGET_USES_WEAK_UNWIND_INFO
3641       && ! flag_asynchronous_unwind_tables
3642       && flag_exceptions
3643       && for_eh)
3644     for (i = 0; i < fde_table_in_use; i++)
3645       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3646           && !fde_table[i].uses_eh_lsda
3647           && ! DECL_WEAK (fde_table[i].decl))
3648         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3649                                       for_eh, /* empty */ 1);
3650
3651   /* If we don't have any functions we'll want to unwind out of, don't
3652      emit any EH unwind information.  Note that if exceptions aren't
3653      enabled, we won't have collected nothrow information, and if we
3654      asked for asynchronous tables, we always want this info.  */
3655   if (for_eh)
3656     {
3657       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3658
3659       for (i = 0; i < fde_table_in_use; i++)
3660         if (fde_table[i].uses_eh_lsda)
3661           any_eh_needed = any_lsda_needed = true;
3662         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3663           any_eh_needed = true;
3664         else if (! fde_table[i].nothrow
3665                  && ! fde_table[i].all_throwers_are_sibcalls)
3666           any_eh_needed = true;
3667
3668       if (! any_eh_needed)
3669         return;
3670     }
3671
3672   /* We're going to be generating comments, so turn on app.  */
3673   if (flag_debug_asm)
3674     app_enable ();
3675
3676   /* Switch to the proper frame section, first time.  */
3677   switch_to_frame_table_section (for_eh, false);
3678
3679   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3680   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3681
3682   /* Output the CIE.  */
3683   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3684   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3685   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3686     dw2_asm_output_data (4, 0xffffffff,
3687       "Initial length escape value indicating 64-bit DWARF extension");
3688   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3689                         "Length of Common Information Entry");
3690   ASM_OUTPUT_LABEL (asm_out_file, l1);
3691
3692   /* Now that the CIE pointer is PC-relative for EH,
3693      use 0 to identify the CIE.  */
3694   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3695                        (for_eh ? 0 : DWARF_CIE_ID),
3696                        "CIE Identifier Tag");
3697
3698   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3699      use CIE version 1, unless that would produce incorrect results
3700      due to overflowing the return register column.  */
3701   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3702   dw_cie_version = 1;
3703   if (return_reg >= 256 || dwarf_version > 2)
3704     dw_cie_version = 3;
3705   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3706
3707   augmentation[0] = 0;
3708   augmentation_size = 0;
3709
3710   personality = current_unit_personality;
3711   if (for_eh)
3712     {
3713       char *p;
3714
3715       /* Augmentation:
3716          z      Indicates that a uleb128 is present to size the
3717                 augmentation section.
3718          L      Indicates the encoding (and thus presence) of
3719                 an LSDA pointer in the FDE augmentation.
3720          R      Indicates a non-default pointer encoding for
3721                 FDE code pointers.
3722          P      Indicates the presence of an encoding + language
3723                 personality routine in the CIE augmentation.  */
3724
3725       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3726       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3727       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3728
3729       p = augmentation + 1;
3730       if (personality)
3731         {
3732           *p++ = 'P';
3733           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3734           assemble_external_libcall (personality);
3735         }
3736       if (any_lsda_needed)
3737         {
3738           *p++ = 'L';
3739           augmentation_size += 1;
3740         }
3741       if (fde_encoding != DW_EH_PE_absptr)
3742         {
3743           *p++ = 'R';
3744           augmentation_size += 1;
3745         }
3746       if (p > augmentation + 1)
3747         {
3748           augmentation[0] = 'z';
3749           *p = '\0';
3750         }
3751
3752       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3753       if (personality && per_encoding == DW_EH_PE_aligned)
3754         {
3755           int offset = (  4             /* Length */
3756                         + 4             /* CIE Id */
3757                         + 1             /* CIE version */
3758                         + strlen (augmentation) + 1     /* Augmentation */
3759                         + size_of_uleb128 (1)           /* Code alignment */
3760                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3761                         + 1             /* RA column */
3762                         + 1             /* Augmentation size */
3763                         + 1             /* Personality encoding */ );
3764           int pad = -offset & (PTR_SIZE - 1);
3765
3766           augmentation_size += pad;
3767
3768           /* Augmentations should be small, so there's scarce need to
3769              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3770           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3771         }
3772     }
3773
3774   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3775   if (dw_cie_version >= 4)
3776     {
3777       dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "CIE Address Size");
3778       dw2_asm_output_data (1, 0, "CIE Segment Size");
3779     }
3780   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3781   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3782                                "CIE Data Alignment Factor");
3783
3784   if (dw_cie_version == 1)
3785     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3786   else
3787     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3788
3789   if (augmentation[0])
3790     {
3791       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3792       if (personality)
3793         {
3794           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3795                                eh_data_format_name (per_encoding));
3796           dw2_asm_output_encoded_addr_rtx (per_encoding,
3797                                            personality,
3798                                            true, NULL);
3799         }
3800
3801       if (any_lsda_needed)
3802         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3803                              eh_data_format_name (lsda_encoding));
3804
3805       if (fde_encoding != DW_EH_PE_absptr)
3806         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3807                              eh_data_format_name (fde_encoding));
3808     }
3809
3810   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3811     output_cfi (cfi, NULL, for_eh);
3812
3813   /* Pad the CIE out to an address sized boundary.  */
3814   ASM_OUTPUT_ALIGN (asm_out_file,
3815                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3816   ASM_OUTPUT_LABEL (asm_out_file, l2);
3817
3818   /* Loop through all of the FDE's.  */
3819   for (i = 0; i < fde_table_in_use; i++)
3820     {
3821       unsigned int k;
3822       fde = &fde_table[i];
3823
3824       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3825       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3826           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3827           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3828           && !fde->uses_eh_lsda)
3829         continue;
3830
3831       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3832         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3833                     augmentation, any_lsda_needed, lsda_encoding);
3834     }
3835
3836   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3837     dw2_asm_output_data (4, 0, "End of Table");
3838 #ifdef MIPS_DEBUGGING_INFO
3839   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3840      get a value of 0.  Putting .align 0 after the label fixes it.  */
3841   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3842 #endif
3843
3844   /* Turn off app to make assembly quicker.  */
3845   if (flag_debug_asm)
3846     app_disable ();
3847 }
3848
3849 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3850
3851 static void
3852 dwarf2out_do_cfi_startproc (bool second)
3853 {
3854   int enc;
3855   rtx ref;
3856   rtx personality = get_personality_function (current_function_decl);
3857
3858   fprintf (asm_out_file, "\t.cfi_startproc\n");
3859
3860   if (personality)
3861     {
3862       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3863       ref = personality;
3864
3865       /* ??? The GAS support isn't entirely consistent.  We have to
3866          handle indirect support ourselves, but PC-relative is done
3867          in the assembler.  Further, the assembler can't handle any
3868          of the weirder relocation types.  */
3869       if (enc & DW_EH_PE_indirect)
3870         ref = dw2_force_const_mem (ref, true);
3871
3872       fprintf (asm_out_file, "\t.cfi_personality %#x,", enc);
3873       output_addr_const (asm_out_file, ref);
3874       fputc ('\n', asm_out_file);
3875     }
3876
3877   if (crtl->uses_eh_lsda)
3878     {
3879       char lab[20];
3880
3881       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3882       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3883                                    current_function_funcdef_no);
3884       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3885       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3886
3887       if (enc & DW_EH_PE_indirect)
3888         ref = dw2_force_const_mem (ref, true);
3889
3890       fprintf (asm_out_file, "\t.cfi_lsda %#x,", enc);
3891       output_addr_const (asm_out_file, ref);
3892       fputc ('\n', asm_out_file);
3893     }
3894 }
3895
3896 /* Output a marker (i.e. a label) for the beginning of a function, before
3897    the prologue.  */
3898
3899 void
3900 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3901                           const char *file ATTRIBUTE_UNUSED)
3902 {
3903   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3904   char * dup_label;
3905   dw_fde_ref fde;
3906   section *fnsec;
3907
3908   current_function_func_begin_label = NULL;
3909
3910 #ifdef TARGET_UNWIND_INFO
3911   /* ??? current_function_func_begin_label is also used by except.c
3912      for call-site information.  We must emit this label if it might
3913      be used.  */
3914   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3915       && ! dwarf2out_do_frame ())
3916     return;
3917 #else
3918   if (! dwarf2out_do_frame ())
3919     return;
3920 #endif
3921
3922   fnsec = function_section (current_function_decl);
3923   switch_to_section (fnsec);
3924   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3925                                current_function_funcdef_no);
3926   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3927                           current_function_funcdef_no);
3928   dup_label = xstrdup (label);
3929   current_function_func_begin_label = dup_label;
3930
3931 #ifdef TARGET_UNWIND_INFO
3932   /* We can elide the fde allocation if we're not emitting debug info.  */
3933   if (! dwarf2out_do_frame ())
3934     return;
3935 #endif
3936
3937   /* Expand the fde table if necessary.  */
3938   if (fde_table_in_use == fde_table_allocated)
3939     {
3940       fde_table_allocated += FDE_TABLE_INCREMENT;
3941       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3942       memset (fde_table + fde_table_in_use, 0,
3943               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3944     }
3945
3946   /* Record the FDE associated with this function.  */
3947   current_funcdef_fde = fde_table_in_use;
3948
3949   /* Add the new FDE at the end of the fde_table.  */
3950   fde = &fde_table[fde_table_in_use++];
3951   fde->decl = current_function_decl;
3952   fde->dw_fde_begin = dup_label;
3953   fde->dw_fde_current_label = dup_label;
3954   fde->dw_fde_hot_section_label = NULL;
3955   fde->dw_fde_hot_section_end_label = NULL;
3956   fde->dw_fde_unlikely_section_label = NULL;
3957   fde->dw_fde_unlikely_section_end_label = NULL;
3958   fde->dw_fde_switched_sections = 0;
3959   fde->dw_fde_switched_cold_to_hot = 0;
3960   fde->dw_fde_end = NULL;
3961   fde->dw_fde_cfi = NULL;
3962   fde->dw_fde_switch_cfi = NULL;
3963   fde->funcdef_number = current_function_funcdef_no;
3964   fde->nothrow = crtl->nothrow;
3965   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3966   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3967   fde->drap_reg = INVALID_REGNUM;
3968   fde->vdrap_reg = INVALID_REGNUM;
3969   if (flag_reorder_blocks_and_partition)
3970     {
3971       section *unlikelysec;
3972       if (first_function_block_is_cold)
3973         fde->in_std_section = 1;
3974       else
3975         fde->in_std_section
3976           = (fnsec == text_section
3977              || (cold_text_section && fnsec == cold_text_section));
3978       unlikelysec = unlikely_text_section ();
3979       fde->cold_in_std_section
3980         = (unlikelysec == text_section
3981            || (cold_text_section && unlikelysec == cold_text_section));
3982     }
3983   else
3984     {
3985       fde->in_std_section
3986         = (fnsec == text_section
3987            || (cold_text_section && fnsec == cold_text_section));
3988       fde->cold_in_std_section = 0;
3989     }
3990
3991   args_size = old_args_size = 0;
3992
3993   /* We only want to output line number information for the genuine dwarf2
3994      prologue case, not the eh frame case.  */
3995 #ifdef DWARF2_DEBUGGING_INFO
3996   if (file)
3997     dwarf2out_source_line (line, file, 0, true);
3998 #endif
3999
4000   if (dwarf2out_do_cfi_asm ())
4001     dwarf2out_do_cfi_startproc (false);
4002   else
4003     {
4004       rtx personality = get_personality_function (current_function_decl);
4005       if (!current_unit_personality)
4006         current_unit_personality = personality;
4007
4008       /* We cannot keep a current personality per function as without CFI
4009          asm at the point where we emit the CFI data there is no current
4010          function anymore.  */
4011       if (personality
4012           && current_unit_personality != personality)
4013         sorry ("Multiple EH personalities are supported only with assemblers "
4014                "supporting .cfi.personality directive.");
4015     }
4016 }
4017
4018 /* Output a marker (i.e. a label) for the absolute end of the generated code
4019    for a function definition.  This gets called *after* the epilogue code has
4020    been generated.  */
4021
4022 void
4023 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4024                         const char *file ATTRIBUTE_UNUSED)
4025 {
4026   dw_fde_ref fde;
4027   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4028
4029 #ifdef DWARF2_DEBUGGING_INFO
4030   last_var_location_insn = NULL_RTX;
4031 #endif
4032
4033   if (dwarf2out_do_cfi_asm ())
4034     fprintf (asm_out_file, "\t.cfi_endproc\n");
4035
4036   /* Output a label to mark the endpoint of the code generated for this
4037      function.  */
4038   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4039                                current_function_funcdef_no);
4040   ASM_OUTPUT_LABEL (asm_out_file, label);
4041   fde = current_fde ();
4042   gcc_assert (fde != NULL);
4043   fde->dw_fde_end = xstrdup (label);
4044 }
4045
4046 void
4047 dwarf2out_frame_init (void)
4048 {
4049   /* Allocate the initial hunk of the fde_table.  */
4050   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4051   fde_table_allocated = FDE_TABLE_INCREMENT;
4052   fde_table_in_use = 0;
4053
4054   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4055      sake of lookup_cfa.  */
4056
4057   /* On entry, the Canonical Frame Address is at SP.  */
4058   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4059
4060 #ifdef DWARF2_UNWIND_INFO
4061   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4062     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4063 #endif
4064 }
4065
4066 void
4067 dwarf2out_frame_finish (void)
4068 {
4069   /* Output call frame information.  */
4070   if (DWARF2_FRAME_INFO)
4071     output_call_frame_info (0);
4072
4073 #ifndef TARGET_UNWIND_INFO
4074   /* Output another copy for the unwinder.  */
4075   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4076     output_call_frame_info (1);
4077 #endif
4078 }
4079
4080 /* Note that the current function section is being used for code.  */
4081
4082 static void
4083 dwarf2out_note_section_used (void)
4084 {
4085   section *sec = current_function_section ();
4086   if (sec == text_section)
4087     text_section_used = true;
4088   else if (sec == cold_text_section)
4089     cold_text_section_used = true;
4090 }
4091
4092 void
4093 dwarf2out_switch_text_section (void)
4094 {
4095   dw_fde_ref fde = current_fde ();
4096
4097   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4098
4099   fde->dw_fde_switched_sections = 1;
4100   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4101
4102   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4103   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4104   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4105   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4106   have_multiple_function_sections = true;
4107
4108   /* Reset the current label on switching text sections, so that we
4109      don't attempt to advance_loc4 between labels in different sections.  */
4110   fde->dw_fde_current_label = NULL;
4111
4112   /* There is no need to mark used sections when not debugging.  */
4113   if (cold_text_section != NULL)
4114     dwarf2out_note_section_used ();
4115
4116   if (dwarf2out_do_cfi_asm ())
4117     fprintf (asm_out_file, "\t.cfi_endproc\n");
4118
4119   /* Now do the real section switch.  */
4120   switch_to_section (current_function_section ());
4121
4122   if (dwarf2out_do_cfi_asm ())
4123     {
4124       dwarf2out_do_cfi_startproc (true);
4125       /* As this is a different FDE, insert all current CFI instructions
4126          again.  */
4127       output_cfis (fde->dw_fde_cfi, true, fde, true);
4128     }
4129   else
4130     {
4131       dw_cfi_ref cfi = fde->dw_fde_cfi;
4132
4133       cfi = fde->dw_fde_cfi;
4134       if (cfi)
4135         while (cfi->dw_cfi_next != NULL)
4136           cfi = cfi->dw_cfi_next;
4137       fde->dw_fde_switch_cfi = cfi;
4138     }
4139 }
4140 #endif
4141 \f
4142 /* And now, the subset of the debugging information support code necessary
4143    for emitting location expressions.  */
4144
4145 /* Data about a single source file.  */
4146 struct GTY(()) dwarf_file_data {
4147   const char * filename;
4148   int emitted_number;
4149 };
4150
4151 typedef struct dw_val_struct *dw_val_ref;
4152 typedef struct die_struct *dw_die_ref;
4153 typedef const struct die_struct *const_dw_die_ref;
4154 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4155 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4156
4157 typedef struct GTY(()) deferred_locations_struct
4158 {
4159   tree variable;
4160   dw_die_ref die;
4161 } deferred_locations;
4162
4163 DEF_VEC_O(deferred_locations);
4164 DEF_VEC_ALLOC_O(deferred_locations,gc);
4165
4166 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4167
4168 DEF_VEC_P(dw_die_ref);
4169 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4170
4171 /* Each DIE may have a series of attribute/value pairs.  Values
4172    can take on several forms.  The forms that are used in this
4173    implementation are listed below.  */
4174
4175 enum dw_val_class
4176 {
4177   dw_val_class_addr,
4178   dw_val_class_offset,
4179   dw_val_class_loc,
4180   dw_val_class_loc_list,
4181   dw_val_class_range_list,
4182   dw_val_class_const,
4183   dw_val_class_unsigned_const,
4184   dw_val_class_const_double,
4185   dw_val_class_vec,
4186   dw_val_class_flag,
4187   dw_val_class_die_ref,
4188   dw_val_class_fde_ref,
4189   dw_val_class_lbl_id,
4190   dw_val_class_lineptr,
4191   dw_val_class_str,
4192   dw_val_class_macptr,
4193   dw_val_class_file,
4194   dw_val_class_data8
4195 };
4196
4197 /* Describe a floating point constant value, or a vector constant value.  */
4198
4199 typedef struct GTY(()) dw_vec_struct {
4200   unsigned char * GTY((length ("%h.length"))) array;
4201   unsigned length;
4202   unsigned elt_size;
4203 }
4204 dw_vec_const;
4205
4206 /* The dw_val_node describes an attribute's value, as it is
4207    represented internally.  */
4208
4209 typedef struct GTY(()) dw_val_struct {
4210   enum dw_val_class val_class;
4211   union dw_val_struct_union
4212     {
4213       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4214       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4215       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4216       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4217       HOST_WIDE_INT GTY ((default)) val_int;
4218       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4219       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4220       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4221       struct dw_val_die_union
4222         {
4223           dw_die_ref die;
4224           int external;
4225         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4226       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4227       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4228       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4229       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4230       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4231       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4232     }
4233   GTY ((desc ("%1.val_class"))) v;
4234 }
4235 dw_val_node;
4236
4237 /* Locations in memory are described using a sequence of stack machine
4238    operations.  */
4239
4240 typedef struct GTY(()) dw_loc_descr_struct {
4241   dw_loc_descr_ref dw_loc_next;
4242   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4243   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4244      from DW_OP_addr with a dtp-relative symbol relocation.  */
4245   unsigned int dtprel : 1;
4246   int dw_loc_addr;
4247   dw_val_node dw_loc_oprnd1;
4248   dw_val_node dw_loc_oprnd2;
4249 }
4250 dw_loc_descr_node;
4251
4252 /* Location lists are ranges + location descriptions for that range,
4253    so you can track variables that are in different places over
4254    their entire life.  */
4255 typedef struct GTY(()) dw_loc_list_struct {
4256   dw_loc_list_ref dw_loc_next;
4257   const char *begin; /* Label for begin address of range */
4258   const char *end;  /* Label for end address of range */
4259   char *ll_symbol; /* Label for beginning of location list.
4260                       Only on head of list */
4261   const char *section; /* Section this loclist is relative to */
4262   dw_loc_descr_ref expr;
4263 } dw_loc_list_node;
4264
4265 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4266
4267 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4268
4269 /* Convert a DWARF stack opcode into its string name.  */
4270
4271 static const char *
4272 dwarf_stack_op_name (unsigned int op)
4273 {
4274   switch (op)
4275     {
4276     case DW_OP_addr:
4277       return "DW_OP_addr";
4278     case DW_OP_deref:
4279       return "DW_OP_deref";
4280     case DW_OP_const1u:
4281       return "DW_OP_const1u";
4282     case DW_OP_const1s:
4283       return "DW_OP_const1s";
4284     case DW_OP_const2u:
4285       return "DW_OP_const2u";
4286     case DW_OP_const2s:
4287       return "DW_OP_const2s";
4288     case DW_OP_const4u:
4289       return "DW_OP_const4u";
4290     case DW_OP_const4s:
4291       return "DW_OP_const4s";
4292     case DW_OP_const8u:
4293       return "DW_OP_const8u";
4294     case DW_OP_const8s:
4295       return "DW_OP_const8s";
4296     case DW_OP_constu:
4297       return "DW_OP_constu";
4298     case DW_OP_consts:
4299       return "DW_OP_consts";
4300     case DW_OP_dup:
4301       return "DW_OP_dup";
4302     case DW_OP_drop:
4303       return "DW_OP_drop";
4304     case DW_OP_over:
4305       return "DW_OP_over";
4306     case DW_OP_pick:
4307       return "DW_OP_pick";
4308     case DW_OP_swap:
4309       return "DW_OP_swap";
4310     case DW_OP_rot:
4311       return "DW_OP_rot";
4312     case DW_OP_xderef:
4313       return "DW_OP_xderef";
4314     case DW_OP_abs:
4315       return "DW_OP_abs";
4316     case DW_OP_and:
4317       return "DW_OP_and";
4318     case DW_OP_div:
4319       return "DW_OP_div";
4320     case DW_OP_minus:
4321       return "DW_OP_minus";
4322     case DW_OP_mod:
4323       return "DW_OP_mod";
4324     case DW_OP_mul:
4325       return "DW_OP_mul";
4326     case DW_OP_neg:
4327       return "DW_OP_neg";
4328     case DW_OP_not:
4329       return "DW_OP_not";
4330     case DW_OP_or:
4331       return "DW_OP_or";
4332     case DW_OP_plus:
4333       return "DW_OP_plus";
4334     case DW_OP_plus_uconst:
4335       return "DW_OP_plus_uconst";
4336     case DW_OP_shl:
4337       return "DW_OP_shl";
4338     case DW_OP_shr:
4339       return "DW_OP_shr";
4340     case DW_OP_shra:
4341       return "DW_OP_shra";
4342     case DW_OP_xor:
4343       return "DW_OP_xor";
4344     case DW_OP_bra:
4345       return "DW_OP_bra";
4346     case DW_OP_eq:
4347       return "DW_OP_eq";
4348     case DW_OP_ge:
4349       return "DW_OP_ge";
4350     case DW_OP_gt:
4351       return "DW_OP_gt";
4352     case DW_OP_le:
4353       return "DW_OP_le";
4354     case DW_OP_lt:
4355       return "DW_OP_lt";
4356     case DW_OP_ne:
4357       return "DW_OP_ne";
4358     case DW_OP_skip:
4359       return "DW_OP_skip";
4360     case DW_OP_lit0:
4361       return "DW_OP_lit0";
4362     case DW_OP_lit1:
4363       return "DW_OP_lit1";
4364     case DW_OP_lit2:
4365       return "DW_OP_lit2";
4366     case DW_OP_lit3:
4367       return "DW_OP_lit3";
4368     case DW_OP_lit4:
4369       return "DW_OP_lit4";
4370     case DW_OP_lit5:
4371       return "DW_OP_lit5";
4372     case DW_OP_lit6:
4373       return "DW_OP_lit6";
4374     case DW_OP_lit7:
4375       return "DW_OP_lit7";
4376     case DW_OP_lit8:
4377       return "DW_OP_lit8";
4378     case DW_OP_lit9:
4379       return "DW_OP_lit9";
4380     case DW_OP_lit10:
4381       return "DW_OP_lit10";
4382     case DW_OP_lit11:
4383       return "DW_OP_lit11";
4384     case DW_OP_lit12:
4385       return "DW_OP_lit12";
4386     case DW_OP_lit13:
4387       return "DW_OP_lit13";
4388     case DW_OP_lit14:
4389       return "DW_OP_lit14";
4390     case DW_OP_lit15:
4391       return "DW_OP_lit15";
4392     case DW_OP_lit16:
4393       return "DW_OP_lit16";
4394     case DW_OP_lit17:
4395       return "DW_OP_lit17";
4396     case DW_OP_lit18:
4397       return "DW_OP_lit18";
4398     case DW_OP_lit19:
4399       return "DW_OP_lit19";
4400     case DW_OP_lit20:
4401       return "DW_OP_lit20";
4402     case DW_OP_lit21:
4403       return "DW_OP_lit21";
4404     case DW_OP_lit22:
4405       return "DW_OP_lit22";
4406     case DW_OP_lit23:
4407       return "DW_OP_lit23";
4408     case DW_OP_lit24:
4409       return "DW_OP_lit24";
4410     case DW_OP_lit25:
4411       return "DW_OP_lit25";
4412     case DW_OP_lit26:
4413       return "DW_OP_lit26";
4414     case DW_OP_lit27:
4415       return "DW_OP_lit27";
4416     case DW_OP_lit28:
4417       return "DW_OP_lit28";
4418     case DW_OP_lit29:
4419       return "DW_OP_lit29";
4420     case DW_OP_lit30:
4421       return "DW_OP_lit30";
4422     case DW_OP_lit31:
4423       return "DW_OP_lit31";
4424     case DW_OP_reg0:
4425       return "DW_OP_reg0";
4426     case DW_OP_reg1:
4427       return "DW_OP_reg1";
4428     case DW_OP_reg2:
4429       return "DW_OP_reg2";
4430     case DW_OP_reg3:
4431       return "DW_OP_reg3";
4432     case DW_OP_reg4:
4433       return "DW_OP_reg4";
4434     case DW_OP_reg5:
4435       return "DW_OP_reg5";
4436     case DW_OP_reg6:
4437       return "DW_OP_reg6";
4438     case DW_OP_reg7:
4439       return "DW_OP_reg7";
4440     case DW_OP_reg8:
4441       return "DW_OP_reg8";
4442     case DW_OP_reg9:
4443       return "DW_OP_reg9";
4444     case DW_OP_reg10:
4445       return "DW_OP_reg10";
4446     case DW_OP_reg11:
4447       return "DW_OP_reg11";
4448     case DW_OP_reg12:
4449       return "DW_OP_reg12";
4450     case DW_OP_reg13:
4451       return "DW_OP_reg13";
4452     case DW_OP_reg14:
4453       return "DW_OP_reg14";
4454     case DW_OP_reg15:
4455       return "DW_OP_reg15";
4456     case DW_OP_reg16:
4457       return "DW_OP_reg16";
4458     case DW_OP_reg17:
4459       return "DW_OP_reg17";
4460     case DW_OP_reg18:
4461       return "DW_OP_reg18";
4462     case DW_OP_reg19:
4463       return "DW_OP_reg19";
4464     case DW_OP_reg20:
4465       return "DW_OP_reg20";
4466     case DW_OP_reg21:
4467       return "DW_OP_reg21";
4468     case DW_OP_reg22:
4469       return "DW_OP_reg22";
4470     case DW_OP_reg23:
4471       return "DW_OP_reg23";
4472     case DW_OP_reg24:
4473       return "DW_OP_reg24";
4474     case DW_OP_reg25:
4475       return "DW_OP_reg25";
4476     case DW_OP_reg26:
4477       return "DW_OP_reg26";
4478     case DW_OP_reg27:
4479       return "DW_OP_reg27";
4480     case DW_OP_reg28:
4481       return "DW_OP_reg28";
4482     case DW_OP_reg29:
4483       return "DW_OP_reg29";
4484     case DW_OP_reg30:
4485       return "DW_OP_reg30";
4486     case DW_OP_reg31:
4487       return "DW_OP_reg31";
4488     case DW_OP_breg0:
4489       return "DW_OP_breg0";
4490     case DW_OP_breg1:
4491       return "DW_OP_breg1";
4492     case DW_OP_breg2:
4493       return "DW_OP_breg2";
4494     case DW_OP_breg3:
4495       return "DW_OP_breg3";
4496     case DW_OP_breg4:
4497       return "DW_OP_breg4";
4498     case DW_OP_breg5:
4499       return "DW_OP_breg5";
4500     case DW_OP_breg6:
4501       return "DW_OP_breg6";
4502     case DW_OP_breg7:
4503       return "DW_OP_breg7";
4504     case DW_OP_breg8:
4505       return "DW_OP_breg8";
4506     case DW_OP_breg9:
4507       return "DW_OP_breg9";
4508     case DW_OP_breg10:
4509       return "DW_OP_breg10";
4510     case DW_OP_breg11:
4511       return "DW_OP_breg11";
4512     case DW_OP_breg12:
4513       return "DW_OP_breg12";
4514     case DW_OP_breg13:
4515       return "DW_OP_breg13";
4516     case DW_OP_breg14:
4517       return "DW_OP_breg14";
4518     case DW_OP_breg15:
4519       return "DW_OP_breg15";
4520     case DW_OP_breg16:
4521       return "DW_OP_breg16";
4522     case DW_OP_breg17:
4523       return "DW_OP_breg17";
4524     case DW_OP_breg18:
4525       return "DW_OP_breg18";
4526     case DW_OP_breg19:
4527       return "DW_OP_breg19";
4528     case DW_OP_breg20:
4529       return "DW_OP_breg20";
4530     case DW_OP_breg21:
4531       return "DW_OP_breg21";
4532     case DW_OP_breg22:
4533       return "DW_OP_breg22";
4534     case DW_OP_breg23:
4535       return "DW_OP_breg23";
4536     case DW_OP_breg24:
4537       return "DW_OP_breg24";
4538     case DW_OP_breg25:
4539       return "DW_OP_breg25";
4540     case DW_OP_breg26:
4541       return "DW_OP_breg26";
4542     case DW_OP_breg27:
4543       return "DW_OP_breg27";
4544     case DW_OP_breg28:
4545       return "DW_OP_breg28";
4546     case DW_OP_breg29:
4547       return "DW_OP_breg29";
4548     case DW_OP_breg30:
4549       return "DW_OP_breg30";
4550     case DW_OP_breg31:
4551       return "DW_OP_breg31";
4552     case DW_OP_regx:
4553       return "DW_OP_regx";
4554     case DW_OP_fbreg:
4555       return "DW_OP_fbreg";
4556     case DW_OP_bregx:
4557       return "DW_OP_bregx";
4558     case DW_OP_piece:
4559       return "DW_OP_piece";
4560     case DW_OP_deref_size:
4561       return "DW_OP_deref_size";
4562     case DW_OP_xderef_size:
4563       return "DW_OP_xderef_size";
4564     case DW_OP_nop:
4565       return "DW_OP_nop";
4566
4567     case DW_OP_push_object_address:
4568       return "DW_OP_push_object_address";
4569     case DW_OP_call2:
4570       return "DW_OP_call2";
4571     case DW_OP_call4:
4572       return "DW_OP_call4";
4573     case DW_OP_call_ref:
4574       return "DW_OP_call_ref";
4575     case DW_OP_implicit_value:
4576       return "DW_OP_implicit_value";
4577     case DW_OP_stack_value:
4578       return "DW_OP_stack_value";
4579     case DW_OP_form_tls_address:
4580       return "DW_OP_form_tls_address";
4581     case DW_OP_call_frame_cfa:
4582       return "DW_OP_call_frame_cfa";
4583     case DW_OP_bit_piece:
4584       return "DW_OP_bit_piece";
4585
4586     case DW_OP_GNU_push_tls_address:
4587       return "DW_OP_GNU_push_tls_address";
4588     case DW_OP_GNU_uninit:
4589       return "DW_OP_GNU_uninit";
4590     case DW_OP_GNU_encoded_addr:
4591       return "DW_OP_GNU_encoded_addr";
4592
4593     default:
4594       return "OP_<unknown>";
4595     }
4596 }
4597
4598 /* Return a pointer to a newly allocated location description.  Location
4599    descriptions are simple expression terms that can be strung
4600    together to form more complicated location (address) descriptions.  */
4601
4602 static inline dw_loc_descr_ref
4603 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4604                unsigned HOST_WIDE_INT oprnd2)
4605 {
4606   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4607
4608   descr->dw_loc_opc = op;
4609   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4610   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4611   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4612   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4613
4614   return descr;
4615 }
4616
4617 /* Return a pointer to a newly allocated location description for
4618    REG and OFFSET.  */
4619
4620 static inline dw_loc_descr_ref
4621 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4622 {
4623   if (reg <= 31)
4624     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4625                           offset, 0);
4626   else
4627     return new_loc_descr (DW_OP_bregx, reg, offset);
4628 }
4629
4630 /* Add a location description term to a location description expression.  */
4631
4632 static inline void
4633 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4634 {
4635   dw_loc_descr_ref *d;
4636
4637   /* Find the end of the chain.  */
4638   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4639     ;
4640
4641   *d = descr;
4642 }
4643
4644 /* Add a constant OFFSET to a location expression.  */
4645
4646 static void
4647 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4648 {
4649   dw_loc_descr_ref loc;
4650   HOST_WIDE_INT *p;
4651
4652   gcc_assert (*list_head != NULL);
4653
4654   if (!offset)
4655     return;
4656
4657   /* Find the end of the chain.  */
4658   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4659     ;
4660
4661   p = NULL;
4662   if (loc->dw_loc_opc == DW_OP_fbreg
4663       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4664     p = &loc->dw_loc_oprnd1.v.val_int;
4665   else if (loc->dw_loc_opc == DW_OP_bregx)
4666     p = &loc->dw_loc_oprnd2.v.val_int;
4667
4668   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4669      offset.  Don't optimize if an signed integer overflow would happen.  */
4670   if (p != NULL
4671       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4672           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4673     *p += offset;
4674
4675   else if (offset > 0)
4676     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4677
4678   else
4679     {
4680       loc->dw_loc_next = int_loc_descriptor (offset);
4681       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4682     }
4683 }
4684
4685 #ifdef DWARF2_DEBUGGING_INFO
4686 /* Add a constant OFFSET to a location list.  */
4687
4688 static void
4689 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4690 {
4691   dw_loc_list_ref d;
4692   for (d = list_head; d != NULL; d = d->dw_loc_next)
4693     loc_descr_plus_const (&d->expr, offset);
4694 }
4695 #endif
4696
4697 /* Return the size of a location descriptor.  */
4698
4699 static unsigned long
4700 size_of_loc_descr (dw_loc_descr_ref loc)
4701 {
4702   unsigned long size = 1;
4703
4704   switch (loc->dw_loc_opc)
4705     {
4706     case DW_OP_addr:
4707       size += DWARF2_ADDR_SIZE;
4708       break;
4709     case DW_OP_const1u:
4710     case DW_OP_const1s:
4711       size += 1;
4712       break;
4713     case DW_OP_const2u:
4714     case DW_OP_const2s:
4715       size += 2;
4716       break;
4717     case DW_OP_const4u:
4718     case DW_OP_const4s:
4719       size += 4;
4720       break;
4721     case DW_OP_const8u:
4722     case DW_OP_const8s:
4723       size += 8;
4724       break;
4725     case DW_OP_constu:
4726       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4727       break;
4728     case DW_OP_consts:
4729       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4730       break;
4731     case DW_OP_pick:
4732       size += 1;
4733       break;
4734     case DW_OP_plus_uconst:
4735       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4736       break;
4737     case DW_OP_skip:
4738     case DW_OP_bra:
4739       size += 2;
4740       break;
4741     case DW_OP_breg0:
4742     case DW_OP_breg1:
4743     case DW_OP_breg2:
4744     case DW_OP_breg3:
4745     case DW_OP_breg4:
4746     case DW_OP_breg5:
4747     case DW_OP_breg6:
4748     case DW_OP_breg7:
4749     case DW_OP_breg8:
4750     case DW_OP_breg9:
4751     case DW_OP_breg10:
4752     case DW_OP_breg11:
4753     case DW_OP_breg12:
4754     case DW_OP_breg13:
4755     case DW_OP_breg14:
4756     case DW_OP_breg15:
4757     case DW_OP_breg16:
4758     case DW_OP_breg17:
4759     case DW_OP_breg18:
4760     case DW_OP_breg19:
4761     case DW_OP_breg20:
4762     case DW_OP_breg21:
4763     case DW_OP_breg22:
4764     case DW_OP_breg23:
4765     case DW_OP_breg24:
4766     case DW_OP_breg25:
4767     case DW_OP_breg26:
4768     case DW_OP_breg27:
4769     case DW_OP_breg28:
4770     case DW_OP_breg29:
4771     case DW_OP_breg30:
4772     case DW_OP_breg31:
4773       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4774       break;
4775     case DW_OP_regx:
4776       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4777       break;
4778     case DW_OP_fbreg:
4779       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4780       break;
4781     case DW_OP_bregx:
4782       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4783       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4784       break;
4785     case DW_OP_piece:
4786       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4787       break;
4788     case DW_OP_deref_size:
4789     case DW_OP_xderef_size:
4790       size += 1;
4791       break;
4792     case DW_OP_call2:
4793       size += 2;
4794       break;
4795     case DW_OP_call4:
4796       size += 4;
4797       break;
4798     case DW_OP_call_ref:
4799       size += DWARF2_ADDR_SIZE;
4800       break;
4801     case DW_OP_implicit_value:
4802       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4803               + loc->dw_loc_oprnd1.v.val_unsigned;
4804       break;
4805     default:
4806       break;
4807     }
4808
4809   return size;
4810 }
4811
4812 /* Return the size of a series of location descriptors.  */
4813
4814 static unsigned long
4815 size_of_locs (dw_loc_descr_ref loc)
4816 {
4817   dw_loc_descr_ref l;
4818   unsigned long size;
4819
4820   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4821      field, to avoid writing to a PCH file.  */
4822   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4823     {
4824       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4825         break;
4826       size += size_of_loc_descr (l);
4827     }
4828   if (! l)
4829     return size;
4830
4831   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4832     {
4833       l->dw_loc_addr = size;
4834       size += size_of_loc_descr (l);
4835     }
4836
4837   return size;
4838 }
4839
4840 #ifdef DWARF2_DEBUGGING_INFO
4841 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4842 #endif
4843
4844 /* Output location description stack opcode's operands (if any).  */
4845
4846 static void
4847 output_loc_operands (dw_loc_descr_ref loc)
4848 {
4849   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4850   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4851
4852   switch (loc->dw_loc_opc)
4853     {
4854 #ifdef DWARF2_DEBUGGING_INFO
4855     case DW_OP_const2u:
4856     case DW_OP_const2s:
4857       dw2_asm_output_data (2, val1->v.val_int, NULL);
4858       break;
4859     case DW_OP_const4u:
4860     case DW_OP_const4s:
4861       dw2_asm_output_data (4, val1->v.val_int, NULL);
4862       break;
4863     case DW_OP_const8u:
4864     case DW_OP_const8s:
4865       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4866       dw2_asm_output_data (8, val1->v.val_int, NULL);
4867       break;
4868     case DW_OP_skip:
4869     case DW_OP_bra:
4870       {
4871         int offset;
4872
4873         gcc_assert (val1->val_class == dw_val_class_loc);
4874         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4875
4876         dw2_asm_output_data (2, offset, NULL);
4877       }
4878       break;
4879     case DW_OP_implicit_value:
4880       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4881       switch (val2->val_class)
4882         {
4883         case dw_val_class_const:
4884           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4885           break;
4886         case dw_val_class_vec:
4887           {
4888             unsigned int elt_size = val2->v.val_vec.elt_size;
4889             unsigned int len = val2->v.val_vec.length;
4890             unsigned int i;
4891             unsigned char *p;
4892
4893             if (elt_size > sizeof (HOST_WIDE_INT))
4894               {
4895                 elt_size /= 2;
4896                 len *= 2;
4897               }
4898             for (i = 0, p = val2->v.val_vec.array;
4899                  i < len;
4900                  i++, p += elt_size)
4901               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4902                                    "fp or vector constant word %u", i);
4903           }
4904           break;
4905         case dw_val_class_const_double:
4906           {
4907             unsigned HOST_WIDE_INT first, second;
4908
4909             if (WORDS_BIG_ENDIAN)
4910               {
4911                 first = val2->v.val_double.high;
4912                 second = val2->v.val_double.low;
4913               }
4914             else
4915               {
4916                 first = val2->v.val_double.low;
4917                 second = val2->v.val_double.high;
4918               }
4919             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4920                                  first, NULL);
4921             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4922                                  second, NULL);
4923           }
4924           break;
4925         case dw_val_class_addr:
4926           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4927           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4928           break;
4929         default:
4930           gcc_unreachable ();
4931         }
4932       break;
4933 #else
4934     case DW_OP_const2u:
4935     case DW_OP_const2s:
4936     case DW_OP_const4u:
4937     case DW_OP_const4s:
4938     case DW_OP_const8u:
4939     case DW_OP_const8s:
4940     case DW_OP_skip:
4941     case DW_OP_bra:
4942     case DW_OP_implicit_value:
4943       /* We currently don't make any attempt to make sure these are
4944          aligned properly like we do for the main unwind info, so
4945          don't support emitting things larger than a byte if we're
4946          only doing unwinding.  */
4947       gcc_unreachable ();
4948 #endif
4949     case DW_OP_const1u:
4950     case DW_OP_const1s:
4951       dw2_asm_output_data (1, val1->v.val_int, NULL);
4952       break;
4953     case DW_OP_constu:
4954       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4955       break;
4956     case DW_OP_consts:
4957       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4958       break;
4959     case DW_OP_pick:
4960       dw2_asm_output_data (1, val1->v.val_int, NULL);
4961       break;
4962     case DW_OP_plus_uconst:
4963       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4964       break;
4965     case DW_OP_breg0:
4966     case DW_OP_breg1:
4967     case DW_OP_breg2:
4968     case DW_OP_breg3:
4969     case DW_OP_breg4:
4970     case DW_OP_breg5:
4971     case DW_OP_breg6:
4972     case DW_OP_breg7:
4973     case DW_OP_breg8:
4974     case DW_OP_breg9:
4975     case DW_OP_breg10:
4976     case DW_OP_breg11:
4977     case DW_OP_breg12:
4978     case DW_OP_breg13:
4979     case DW_OP_breg14:
4980     case DW_OP_breg15:
4981     case DW_OP_breg16:
4982     case DW_OP_breg17:
4983     case DW_OP_breg18:
4984     case DW_OP_breg19:
4985     case DW_OP_breg20:
4986     case DW_OP_breg21:
4987     case DW_OP_breg22:
4988     case DW_OP_breg23:
4989     case DW_OP_breg24:
4990     case DW_OP_breg25:
4991     case DW_OP_breg26:
4992     case DW_OP_breg27:
4993     case DW_OP_breg28:
4994     case DW_OP_breg29:
4995     case DW_OP_breg30:
4996     case DW_OP_breg31:
4997       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4998       break;
4999     case DW_OP_regx:
5000       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5001       break;
5002     case DW_OP_fbreg:
5003       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
5004       break;
5005     case DW_OP_bregx:
5006       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5007       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5008       break;
5009     case DW_OP_piece:
5010       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5011       break;
5012     case DW_OP_deref_size:
5013     case DW_OP_xderef_size:
5014       dw2_asm_output_data (1, val1->v.val_int, NULL);
5015       break;
5016
5017     case DW_OP_addr:
5018       if (loc->dtprel)
5019         {
5020           if (targetm.asm_out.output_dwarf_dtprel)
5021             {
5022               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5023                                                    DWARF2_ADDR_SIZE,
5024                                                    val1->v.val_addr);
5025               fputc ('\n', asm_out_file);
5026             }
5027           else
5028             gcc_unreachable ();
5029         }
5030       else
5031         {
5032 #ifdef DWARF2_DEBUGGING_INFO
5033           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5034 #else
5035           gcc_unreachable ();
5036 #endif
5037         }
5038       break;
5039
5040     default:
5041       /* Other codes have no operands.  */
5042       break;
5043     }
5044 }
5045
5046 /* Output a sequence of location operations.  */
5047
5048 static void
5049 output_loc_sequence (dw_loc_descr_ref loc)
5050 {
5051   for (; loc != NULL; loc = loc->dw_loc_next)
5052     {
5053       /* Output the opcode.  */
5054       dw2_asm_output_data (1, loc->dw_loc_opc,
5055                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5056
5057       /* Output the operand(s) (if any).  */
5058       output_loc_operands (loc);
5059     }
5060 }
5061
5062 /* Output location description stack opcode's operands (if any).
5063    The output is single bytes on a line, suitable for .cfi_escape.  */
5064
5065 static void
5066 output_loc_operands_raw (dw_loc_descr_ref loc)
5067 {
5068   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5069   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5070
5071   switch (loc->dw_loc_opc)
5072     {
5073     case DW_OP_addr:
5074     case DW_OP_implicit_value:
5075       /* We cannot output addresses in .cfi_escape, only bytes.  */
5076       gcc_unreachable ();
5077
5078     case DW_OP_const1u:
5079     case DW_OP_const1s:
5080     case DW_OP_pick:
5081     case DW_OP_deref_size:
5082     case DW_OP_xderef_size:
5083       fputc (',', asm_out_file);
5084       dw2_asm_output_data_raw (1, val1->v.val_int);
5085       break;
5086
5087     case DW_OP_const2u:
5088     case DW_OP_const2s:
5089       fputc (',', asm_out_file);
5090       dw2_asm_output_data_raw (2, val1->v.val_int);
5091       break;
5092
5093     case DW_OP_const4u:
5094     case DW_OP_const4s:
5095       fputc (',', asm_out_file);
5096       dw2_asm_output_data_raw (4, val1->v.val_int);
5097       break;
5098
5099     case DW_OP_const8u:
5100     case DW_OP_const8s:
5101       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5102       fputc (',', asm_out_file);
5103       dw2_asm_output_data_raw (8, val1->v.val_int);
5104       break;
5105
5106     case DW_OP_skip:
5107     case DW_OP_bra:
5108       {
5109         int offset;
5110
5111         gcc_assert (val1->val_class == dw_val_class_loc);
5112         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5113
5114         fputc (',', asm_out_file);
5115         dw2_asm_output_data_raw (2, offset);
5116       }
5117       break;
5118
5119     case DW_OP_constu:
5120     case DW_OP_plus_uconst:
5121     case DW_OP_regx:
5122     case DW_OP_piece:
5123       fputc (',', asm_out_file);
5124       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5125       break;
5126
5127     case DW_OP_consts:
5128     case DW_OP_breg0:
5129     case DW_OP_breg1:
5130     case DW_OP_breg2:
5131     case DW_OP_breg3:
5132     case DW_OP_breg4:
5133     case DW_OP_breg5:
5134     case DW_OP_breg6:
5135     case DW_OP_breg7:
5136     case DW_OP_breg8:
5137     case DW_OP_breg9:
5138     case DW_OP_breg10:
5139     case DW_OP_breg11:
5140     case DW_OP_breg12:
5141     case DW_OP_breg13:
5142     case DW_OP_breg14:
5143     case DW_OP_breg15:
5144     case DW_OP_breg16:
5145     case DW_OP_breg17:
5146     case DW_OP_breg18:
5147     case DW_OP_breg19:
5148     case DW_OP_breg20:
5149     case DW_OP_breg21:
5150     case DW_OP_breg22:
5151     case DW_OP_breg23:
5152     case DW_OP_breg24:
5153     case DW_OP_breg25:
5154     case DW_OP_breg26:
5155     case DW_OP_breg27:
5156     case DW_OP_breg28:
5157     case DW_OP_breg29:
5158     case DW_OP_breg30:
5159     case DW_OP_breg31:
5160     case DW_OP_fbreg:
5161       fputc (',', asm_out_file);
5162       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5163       break;
5164
5165     case DW_OP_bregx:
5166       fputc (',', asm_out_file);
5167       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5168       fputc (',', asm_out_file);
5169       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5170       break;
5171
5172     default:
5173       /* Other codes have no operands.  */
5174       break;
5175     }
5176 }
5177
5178 static void
5179 output_loc_sequence_raw (dw_loc_descr_ref loc)
5180 {
5181   while (1)
5182     {
5183       /* Output the opcode.  */
5184       fprintf (asm_out_file, "%#x", loc->dw_loc_opc);
5185       output_loc_operands_raw (loc);
5186
5187       if (!loc->dw_loc_next)
5188         break;
5189       loc = loc->dw_loc_next;
5190
5191       fputc (',', asm_out_file);
5192     }
5193 }
5194
5195 /* This routine will generate the correct assembly data for a location
5196    description based on a cfi entry with a complex address.  */
5197
5198 static void
5199 output_cfa_loc (dw_cfi_ref cfi)
5200 {
5201   dw_loc_descr_ref loc;
5202   unsigned long size;
5203
5204   if (cfi->dw_cfi_opc == DW_CFA_expression)
5205     {
5206       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5207       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5208     }
5209   else
5210     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5211
5212   /* Output the size of the block.  */
5213   size = size_of_locs (loc);
5214   dw2_asm_output_data_uleb128 (size, NULL);
5215
5216   /* Now output the operations themselves.  */
5217   output_loc_sequence (loc);
5218 }
5219
5220 /* Similar, but used for .cfi_escape.  */
5221
5222 static void
5223 output_cfa_loc_raw (dw_cfi_ref cfi)
5224 {
5225   dw_loc_descr_ref loc;
5226   unsigned long size;
5227
5228   if (cfi->dw_cfi_opc == DW_CFA_expression)
5229     {
5230       fprintf (asm_out_file, "%#x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5231       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5232     }
5233   else
5234     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5235
5236   /* Output the size of the block.  */
5237   size = size_of_locs (loc);
5238   dw2_asm_output_data_uleb128_raw (size);
5239   fputc (',', asm_out_file);
5240
5241   /* Now output the operations themselves.  */
5242   output_loc_sequence_raw (loc);
5243 }
5244
5245 /* This function builds a dwarf location descriptor sequence from a
5246    dw_cfa_location, adding the given OFFSET to the result of the
5247    expression.  */
5248
5249 static struct dw_loc_descr_struct *
5250 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5251 {
5252   struct dw_loc_descr_struct *head, *tmp;
5253
5254   offset += cfa->offset;
5255
5256   if (cfa->indirect)
5257     {
5258       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5259       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5260       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5261       add_loc_descr (&head, tmp);
5262       if (offset != 0)
5263         {
5264           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5265           add_loc_descr (&head, tmp);
5266         }
5267     }
5268   else
5269     head = new_reg_loc_descr (cfa->reg, offset);
5270
5271   return head;
5272 }
5273
5274 /* This function builds a dwarf location descriptor sequence for
5275    the address at OFFSET from the CFA when stack is aligned to
5276    ALIGNMENT byte.  */
5277
5278 static struct dw_loc_descr_struct *
5279 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5280 {
5281   struct dw_loc_descr_struct *head;
5282   unsigned int dwarf_fp
5283     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5284
5285  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5286   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5287     {
5288       head = new_reg_loc_descr (dwarf_fp, 0);
5289       add_loc_descr (&head, int_loc_descriptor (alignment));
5290       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5291       loc_descr_plus_const (&head, offset);
5292     }
5293   else
5294     head = new_reg_loc_descr (dwarf_fp, offset);
5295   return head;
5296 }
5297
5298 /* This function fills in aa dw_cfa_location structure from a dwarf location
5299    descriptor sequence.  */
5300
5301 static void
5302 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5303 {
5304   struct dw_loc_descr_struct *ptr;
5305   cfa->offset = 0;
5306   cfa->base_offset = 0;
5307   cfa->indirect = 0;
5308   cfa->reg = -1;
5309
5310   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5311     {
5312       enum dwarf_location_atom op = ptr->dw_loc_opc;
5313
5314       switch (op)
5315         {
5316         case DW_OP_reg0:
5317         case DW_OP_reg1:
5318         case DW_OP_reg2:
5319         case DW_OP_reg3:
5320         case DW_OP_reg4:
5321         case DW_OP_reg5:
5322         case DW_OP_reg6:
5323         case DW_OP_reg7:
5324         case DW_OP_reg8:
5325         case DW_OP_reg9:
5326         case DW_OP_reg10:
5327         case DW_OP_reg11:
5328         case DW_OP_reg12:
5329         case DW_OP_reg13:
5330         case DW_OP_reg14:
5331         case DW_OP_reg15:
5332         case DW_OP_reg16:
5333         case DW_OP_reg17:
5334         case DW_OP_reg18:
5335         case DW_OP_reg19:
5336         case DW_OP_reg20:
5337         case DW_OP_reg21:
5338         case DW_OP_reg22:
5339         case DW_OP_reg23:
5340         case DW_OP_reg24:
5341         case DW_OP_reg25:
5342         case DW_OP_reg26:
5343         case DW_OP_reg27:
5344         case DW_OP_reg28:
5345         case DW_OP_reg29:
5346         case DW_OP_reg30:
5347         case DW_OP_reg31:
5348           cfa->reg = op - DW_OP_reg0;
5349           break;
5350         case DW_OP_regx:
5351           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5352           break;
5353         case DW_OP_breg0:
5354         case DW_OP_breg1:
5355         case DW_OP_breg2:
5356         case DW_OP_breg3:
5357         case DW_OP_breg4:
5358         case DW_OP_breg5:
5359         case DW_OP_breg6:
5360         case DW_OP_breg7:
5361         case DW_OP_breg8:
5362         case DW_OP_breg9:
5363         case DW_OP_breg10:
5364         case DW_OP_breg11:
5365         case DW_OP_breg12:
5366         case DW_OP_breg13:
5367         case DW_OP_breg14:
5368         case DW_OP_breg15:
5369         case DW_OP_breg16:
5370         case DW_OP_breg17:
5371         case DW_OP_breg18:
5372         case DW_OP_breg19:
5373         case DW_OP_breg20:
5374         case DW_OP_breg21:
5375         case DW_OP_breg22:
5376         case DW_OP_breg23:
5377         case DW_OP_breg24:
5378         case DW_OP_breg25:
5379         case DW_OP_breg26:
5380         case DW_OP_breg27:
5381         case DW_OP_breg28:
5382         case DW_OP_breg29:
5383         case DW_OP_breg30:
5384         case DW_OP_breg31:
5385           cfa->reg = op - DW_OP_breg0;
5386           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5387           break;
5388         case DW_OP_bregx:
5389           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5390           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5391           break;
5392         case DW_OP_deref:
5393           cfa->indirect = 1;
5394           break;
5395         case DW_OP_plus_uconst:
5396           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5397           break;
5398         default:
5399           internal_error ("DW_LOC_OP %s not implemented",
5400                           dwarf_stack_op_name (ptr->dw_loc_opc));
5401         }
5402     }
5403 }
5404 #endif /* .debug_frame support */
5405 \f
5406 /* And now, the support for symbolic debugging information.  */
5407 #ifdef DWARF2_DEBUGGING_INFO
5408
5409 /* .debug_str support.  */
5410 static int output_indirect_string (void **, void *);
5411
5412 static void dwarf2out_init (const char *);
5413 static void dwarf2out_finish (const char *);
5414 static void dwarf2out_assembly_start (void);
5415 static void dwarf2out_define (unsigned int, const char *);
5416 static void dwarf2out_undef (unsigned int, const char *);
5417 static void dwarf2out_start_source_file (unsigned, const char *);
5418 static void dwarf2out_end_source_file (unsigned);
5419 static void dwarf2out_function_decl (tree);
5420 static void dwarf2out_begin_block (unsigned, unsigned);
5421 static void dwarf2out_end_block (unsigned, unsigned);
5422 static bool dwarf2out_ignore_block (const_tree);
5423 static void dwarf2out_global_decl (tree);
5424 static void dwarf2out_type_decl (tree, int);
5425 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5426 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5427                                                  dw_die_ref);
5428 static void dwarf2out_abstract_function (tree);
5429 static void dwarf2out_var_location (rtx);
5430 static void dwarf2out_direct_call (tree);
5431 static void dwarf2out_virtual_call_token (tree, int);
5432 static void dwarf2out_copy_call_info (rtx, rtx);
5433 static void dwarf2out_virtual_call (int);
5434 static void dwarf2out_begin_function (tree);
5435 static void dwarf2out_set_name (tree, tree);
5436
5437 /* The debug hooks structure.  */
5438
5439 const struct gcc_debug_hooks dwarf2_debug_hooks =
5440 {
5441   dwarf2out_init,
5442   dwarf2out_finish,
5443   dwarf2out_assembly_start,
5444   dwarf2out_define,
5445   dwarf2out_undef,
5446   dwarf2out_start_source_file,
5447   dwarf2out_end_source_file,
5448   dwarf2out_begin_block,
5449   dwarf2out_end_block,
5450   dwarf2out_ignore_block,
5451   dwarf2out_source_line,
5452   dwarf2out_begin_prologue,
5453   debug_nothing_int_charstar,   /* end_prologue */
5454   dwarf2out_end_epilogue,
5455   dwarf2out_begin_function,
5456   debug_nothing_int,            /* end_function */
5457   dwarf2out_function_decl,      /* function_decl */
5458   dwarf2out_global_decl,
5459   dwarf2out_type_decl,          /* type_decl */
5460   dwarf2out_imported_module_or_decl,
5461   debug_nothing_tree,           /* deferred_inline_function */
5462   /* The DWARF 2 backend tries to reduce debugging bloat by not
5463      emitting the abstract description of inline functions until
5464      something tries to reference them.  */
5465   dwarf2out_abstract_function,  /* outlining_inline_function */
5466   debug_nothing_rtx,            /* label */
5467   debug_nothing_int,            /* handle_pch */
5468   dwarf2out_var_location,
5469   dwarf2out_switch_text_section,
5470   dwarf2out_direct_call,
5471   dwarf2out_virtual_call_token,
5472   dwarf2out_copy_call_info,
5473   dwarf2out_virtual_call,
5474   dwarf2out_set_name,
5475   1                             /* start_end_main_source_file */
5476 };
5477 #endif
5478 \f
5479 /* NOTE: In the comments in this file, many references are made to
5480    "Debugging Information Entries".  This term is abbreviated as `DIE'
5481    throughout the remainder of this file.  */
5482
5483 /* An internal representation of the DWARF output is built, and then
5484    walked to generate the DWARF debugging info.  The walk of the internal
5485    representation is done after the entire program has been compiled.
5486    The types below are used to describe the internal representation.  */
5487
5488 /* Various DIE's use offsets relative to the beginning of the
5489    .debug_info section to refer to each other.  */
5490
5491 typedef long int dw_offset;
5492
5493 /* Define typedefs here to avoid circular dependencies.  */
5494
5495 typedef struct dw_attr_struct *dw_attr_ref;
5496 typedef struct dw_line_info_struct *dw_line_info_ref;
5497 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5498 typedef struct pubname_struct *pubname_ref;
5499 typedef struct dw_ranges_struct *dw_ranges_ref;
5500 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5501 typedef struct comdat_type_struct *comdat_type_node_ref;
5502
5503 /* Each entry in the line_info_table maintains the file and
5504    line number associated with the label generated for that
5505    entry.  The label gives the PC value associated with
5506    the line number entry.  */
5507
5508 typedef struct GTY(()) dw_line_info_struct {
5509   unsigned long dw_file_num;
5510   unsigned long dw_line_num;
5511 }
5512 dw_line_info_entry;
5513
5514 /* Line information for functions in separate sections; each one gets its
5515    own sequence.  */
5516 typedef struct GTY(()) dw_separate_line_info_struct {
5517   unsigned long dw_file_num;
5518   unsigned long dw_line_num;
5519   unsigned long function;
5520 }
5521 dw_separate_line_info_entry;
5522
5523 /* Each DIE attribute has a field specifying the attribute kind,
5524    a link to the next attribute in the chain, and an attribute value.
5525    Attributes are typically linked below the DIE they modify.  */
5526
5527 typedef struct GTY(()) dw_attr_struct {
5528   enum dwarf_attribute dw_attr;
5529   dw_val_node dw_attr_val;
5530 }
5531 dw_attr_node;
5532
5533 DEF_VEC_O(dw_attr_node);
5534 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5535
5536 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5537    The children of each node form a circular list linked by
5538    die_sib.  die_child points to the node *before* the "first" child node.  */
5539
5540 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5541   enum dwarf_tag die_tag;
5542   union die_symbol_or_type_node
5543     {
5544       char * GTY ((tag ("0"))) die_symbol;
5545       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5546     }
5547   GTY ((desc ("dwarf_version >= 4"))) die_id;
5548   VEC(dw_attr_node,gc) * die_attr;
5549   dw_die_ref die_parent;
5550   dw_die_ref die_child;
5551   dw_die_ref die_sib;
5552   dw_die_ref die_definition; /* ref from a specification to its definition */
5553   dw_offset die_offset;
5554   unsigned long die_abbrev;
5555   int die_mark;
5556   /* Die is used and must not be pruned as unused.  */
5557   int die_perennial_p;
5558   unsigned int decl_id;
5559 }
5560 die_node;
5561
5562 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5563 #define FOR_EACH_CHILD(die, c, expr) do {       \
5564   c = die->die_child;                           \
5565   if (c) do {                                   \
5566     c = c->die_sib;                             \
5567     expr;                                       \
5568   } while (c != die->die_child);                \
5569 } while (0)
5570
5571 /* The pubname structure */
5572
5573 typedef struct GTY(()) pubname_struct {
5574   dw_die_ref die;
5575   const char *name;
5576 }
5577 pubname_entry;
5578
5579 DEF_VEC_O(pubname_entry);
5580 DEF_VEC_ALLOC_O(pubname_entry, gc);
5581
5582 struct GTY(()) dw_ranges_struct {
5583   /* If this is positive, it's a block number, otherwise it's a
5584      bitwise-negated index into dw_ranges_by_label.  */
5585   int num;
5586 };
5587
5588 struct GTY(()) dw_ranges_by_label_struct {
5589   const char *begin;
5590   const char *end;
5591 };
5592
5593 /* The comdat type node structure.  */
5594 typedef struct GTY(()) comdat_type_struct
5595 {
5596   dw_die_ref root_die;
5597   dw_die_ref type_die;
5598   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5599   struct comdat_type_struct *next;
5600 }
5601 comdat_type_node;
5602
5603 /* The limbo die list structure.  */
5604 typedef struct GTY(()) limbo_die_struct {
5605   dw_die_ref die;
5606   tree created_for;
5607   struct limbo_die_struct *next;
5608 }
5609 limbo_die_node;
5610
5611 typedef struct GTY(()) skeleton_chain_struct
5612 {
5613   dw_die_ref old_die;
5614   dw_die_ref new_die;
5615   struct skeleton_chain_struct *parent;
5616 }
5617 skeleton_chain_node;
5618
5619 /* How to start an assembler comment.  */
5620 #ifndef ASM_COMMENT_START
5621 #define ASM_COMMENT_START ";#"
5622 #endif
5623
5624 /* Define a macro which returns nonzero for a TYPE_DECL which was
5625    implicitly generated for a tagged type.
5626
5627    Note that unlike the gcc front end (which generates a NULL named
5628    TYPE_DECL node for each complete tagged type, each array type, and
5629    each function type node created) the g++ front end generates a
5630    _named_ TYPE_DECL node for each tagged type node created.
5631    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5632    generate a DW_TAG_typedef DIE for them.  */
5633
5634 #define TYPE_DECL_IS_STUB(decl)                         \
5635   (DECL_NAME (decl) == NULL_TREE                        \
5636    || (DECL_ARTIFICIAL (decl)                           \
5637        && is_tagged_type (TREE_TYPE (decl))             \
5638        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5639            /* This is necessary for stub decls that     \
5640               appear in nested inline functions.  */    \
5641            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5642                && (decl_ultimate_origin (decl)          \
5643                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5644
5645 /* Information concerning the compilation unit's programming
5646    language, and compiler version.  */
5647
5648 /* Fixed size portion of the DWARF compilation unit header.  */
5649 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5650   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5651
5652 /* Fixed size portion of the DWARF comdat type unit header.  */
5653 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5654   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5655    + DWARF_OFFSET_SIZE)
5656
5657 /* Fixed size portion of public names info.  */
5658 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5659
5660 /* Fixed size portion of the address range info.  */
5661 #define DWARF_ARANGES_HEADER_SIZE                                       \
5662   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5663                 DWARF2_ADDR_SIZE * 2)                                   \
5664    - DWARF_INITIAL_LENGTH_SIZE)
5665
5666 /* Size of padding portion in the address range info.  It must be
5667    aligned to twice the pointer size.  */
5668 #define DWARF_ARANGES_PAD_SIZE \
5669   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5670                 DWARF2_ADDR_SIZE * 2)                              \
5671    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5672
5673 /* Use assembler line directives if available.  */
5674 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5675 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5676 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5677 #else
5678 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5679 #endif
5680 #endif
5681
5682 /* Minimum line offset in a special line info. opcode.
5683    This value was chosen to give a reasonable range of values.  */
5684 #define DWARF_LINE_BASE  -10
5685
5686 /* First special line opcode - leave room for the standard opcodes.  */
5687 #define DWARF_LINE_OPCODE_BASE  10
5688
5689 /* Range of line offsets in a special line info. opcode.  */
5690 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5691
5692 /* Flag that indicates the initial value of the is_stmt_start flag.
5693    In the present implementation, we do not mark any lines as
5694    the beginning of a source statement, because that information
5695    is not made available by the GCC front-end.  */
5696 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5697
5698 /* Maximum number of operations per instruction bundle.  */
5699 #ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN
5700 #define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1
5701 #endif
5702
5703 #ifdef DWARF2_DEBUGGING_INFO
5704 /* This location is used by calc_die_sizes() to keep track
5705    the offset of each DIE within the .debug_info section.  */
5706 static unsigned long next_die_offset;
5707 #endif
5708
5709 /* Record the root of the DIE's built for the current compilation unit.  */
5710 static GTY(()) dw_die_ref comp_unit_die;
5711
5712 /* A list of type DIEs that have been separated into comdat sections.  */
5713 static GTY(()) comdat_type_node *comdat_type_list;
5714
5715 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5716 static GTY(()) limbo_die_node *limbo_die_list;
5717
5718 /* A list of DIEs for which we may have to generate
5719    DW_AT_{,MIPS_}linkage_name once their DECL_ASSEMBLER_NAMEs are set.  */
5720 static GTY(()) limbo_die_node *deferred_asm_name;
5721
5722 /* Filenames referenced by this compilation unit.  */
5723 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5724
5725 /* A hash table of references to DIE's that describe declarations.
5726    The key is a DECL_UID() which is a unique number identifying each decl.  */
5727 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5728
5729 /* A hash table of references to DIE's that describe COMMON blocks.
5730    The key is DECL_UID() ^ die_parent.  */
5731 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5732
5733 typedef struct GTY(()) die_arg_entry_struct {
5734     dw_die_ref die;
5735     tree arg;
5736 } die_arg_entry;
5737
5738 DEF_VEC_O(die_arg_entry);
5739 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5740
5741 /* Node of the variable location list.  */
5742 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5743   rtx GTY (()) var_loc_note;
5744   const char * GTY (()) label;
5745   struct var_loc_node * GTY (()) next;
5746 };
5747
5748 /* Variable location list.  */
5749 struct GTY (()) var_loc_list_def {
5750   struct var_loc_node * GTY (()) first;
5751
5752   /* Pointer to the last but one or last element of the
5753      chained list.  If the list is empty, both first and
5754      last are NULL, if the list contains just one node
5755      or the last node certainly is not redundant, it points
5756      to the last node, otherwise points to the last but one.
5757      Do not mark it for GC because it is marked through the chain.  */
5758   struct var_loc_node * GTY ((skip ("%h"))) last;
5759
5760   /* DECL_UID of the variable decl.  */
5761   unsigned int decl_id;
5762 };
5763 typedef struct var_loc_list_def var_loc_list;
5764
5765
5766 /* Table of decl location linked lists.  */
5767 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5768
5769 /* A pointer to the base of a list of references to DIE's that
5770    are uniquely identified by their tag, presence/absence of
5771    children DIE's, and list of attribute/value pairs.  */
5772 static GTY((length ("abbrev_die_table_allocated")))
5773   dw_die_ref *abbrev_die_table;
5774
5775 /* Number of elements currently allocated for abbrev_die_table.  */
5776 static GTY(()) unsigned abbrev_die_table_allocated;
5777
5778 /* Number of elements in type_die_table currently in use.  */
5779 static GTY(()) unsigned abbrev_die_table_in_use;
5780
5781 /* Size (in elements) of increments by which we may expand the
5782    abbrev_die_table.  */
5783 #define ABBREV_DIE_TABLE_INCREMENT 256
5784
5785 /* A pointer to the base of a table that contains line information
5786    for each source code line in .text in the compilation unit.  */
5787 static GTY((length ("line_info_table_allocated")))
5788      dw_line_info_ref line_info_table;
5789
5790 /* Number of elements currently allocated for line_info_table.  */
5791 static GTY(()) unsigned line_info_table_allocated;
5792
5793 /* Number of elements in line_info_table currently in use.  */
5794 static GTY(()) unsigned line_info_table_in_use;
5795
5796 /* A pointer to the base of a table that contains line information
5797    for each source code line outside of .text in the compilation unit.  */
5798 static GTY ((length ("separate_line_info_table_allocated")))
5799      dw_separate_line_info_ref separate_line_info_table;
5800
5801 /* Number of elements currently allocated for separate_line_info_table.  */
5802 static GTY(()) unsigned separate_line_info_table_allocated;
5803
5804 /* Number of elements in separate_line_info_table currently in use.  */
5805 static GTY(()) unsigned separate_line_info_table_in_use;
5806
5807 /* Size (in elements) of increments by which we may expand the
5808    line_info_table.  */
5809 #define LINE_INFO_TABLE_INCREMENT 1024
5810
5811 /* A pointer to the base of a table that contains a list of publicly
5812    accessible names.  */
5813 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5814
5815 /* A pointer to the base of a table that contains a list of publicly
5816    accessible types.  */
5817 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5818
5819 /* Array of dies for which we should generate .debug_arange info.  */
5820 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5821
5822 /* Number of elements currently allocated for arange_table.  */
5823 static GTY(()) unsigned arange_table_allocated;
5824
5825 /* Number of elements in arange_table currently in use.  */
5826 static GTY(()) unsigned arange_table_in_use;
5827
5828 /* Size (in elements) of increments by which we may expand the
5829    arange_table.  */
5830 #define ARANGE_TABLE_INCREMENT 64
5831
5832 /* Array of dies for which we should generate .debug_ranges info.  */
5833 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5834
5835 /* Number of elements currently allocated for ranges_table.  */
5836 static GTY(()) unsigned ranges_table_allocated;
5837
5838 /* Number of elements in ranges_table currently in use.  */
5839 static GTY(()) unsigned ranges_table_in_use;
5840
5841 /* Array of pairs of labels referenced in ranges_table.  */
5842 static GTY ((length ("ranges_by_label_allocated")))
5843      dw_ranges_by_label_ref ranges_by_label;
5844
5845 /* Number of elements currently allocated for ranges_by_label.  */
5846 static GTY(()) unsigned ranges_by_label_allocated;
5847
5848 /* Number of elements in ranges_by_label currently in use.  */
5849 static GTY(()) unsigned ranges_by_label_in_use;
5850
5851 /* Size (in elements) of increments by which we may expand the
5852    ranges_table.  */
5853 #define RANGES_TABLE_INCREMENT 64
5854
5855 /* Whether we have location lists that need outputting */
5856 static GTY(()) bool have_location_lists;
5857
5858 /* Unique label counter.  */
5859 static GTY(()) unsigned int loclabel_num;
5860
5861 /* Unique label counter for point-of-call tables.  */
5862 static GTY(()) unsigned int poc_label_num;
5863
5864 /* The direct call table structure.  */
5865
5866 typedef struct GTY(()) dcall_struct {
5867   unsigned int poc_label_num;
5868   tree poc_decl;
5869   dw_die_ref targ_die;
5870 }
5871 dcall_entry;
5872
5873 DEF_VEC_O(dcall_entry);
5874 DEF_VEC_ALLOC_O(dcall_entry, gc);
5875
5876 /* The virtual call table structure.  */
5877
5878 typedef struct GTY(()) vcall_struct {
5879   unsigned int poc_label_num;
5880   unsigned int vtable_slot;
5881 }
5882 vcall_entry;
5883
5884 DEF_VEC_O(vcall_entry);
5885 DEF_VEC_ALLOC_O(vcall_entry, gc);
5886
5887 /* Pointers to the direct and virtual call tables.  */
5888 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5889 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5890
5891 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5892
5893 struct GTY (()) vcall_insn {
5894   int insn_uid;
5895   unsigned int vtable_slot;
5896 };
5897
5898 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5899
5900 #ifdef DWARF2_DEBUGGING_INFO
5901 /* Record whether the function being analyzed contains inlined functions.  */
5902 static int current_function_has_inlines;
5903 #endif
5904 #if 0 && defined (MIPS_DEBUGGING_INFO)
5905 static int comp_unit_has_inlines;
5906 #endif
5907
5908 /* The last file entry emitted by maybe_emit_file().  */
5909 static GTY(()) struct dwarf_file_data * last_emitted_file;
5910
5911 /* Number of internal labels generated by gen_internal_sym().  */
5912 static GTY(()) int label_num;
5913
5914 /* Cached result of previous call to lookup_filename.  */
5915 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5916
5917 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5918
5919 #ifdef DWARF2_DEBUGGING_INFO
5920
5921 /* Offset from the "steady-state frame pointer" to the frame base,
5922    within the current function.  */
5923 static HOST_WIDE_INT frame_pointer_fb_offset;
5924
5925 /* Forward declarations for functions defined in this file.  */
5926
5927 static int is_pseudo_reg (const_rtx);
5928 static tree type_main_variant (tree);
5929 static int is_tagged_type (const_tree);
5930 static const char *dwarf_tag_name (unsigned);
5931 static const char *dwarf_attr_name (unsigned);
5932 static const char *dwarf_form_name (unsigned);
5933 static tree decl_ultimate_origin (const_tree);
5934 static tree decl_class_context (tree);
5935 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5936 static inline enum dw_val_class AT_class (dw_attr_ref);
5937 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5938 static inline unsigned AT_flag (dw_attr_ref);
5939 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5940 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5941 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5942 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5943 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5944                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5945 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5946                                unsigned int, unsigned char *);
5947 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5948 static hashval_t debug_str_do_hash (const void *);
5949 static int debug_str_eq (const void *, const void *);
5950 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5951 static inline const char *AT_string (dw_attr_ref);
5952 static enum dwarf_form AT_string_form (dw_attr_ref);
5953 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5954 static void add_AT_specification (dw_die_ref, dw_die_ref);
5955 static inline dw_die_ref AT_ref (dw_attr_ref);
5956 static inline int AT_ref_external (dw_attr_ref);
5957 static inline void set_AT_ref_external (dw_attr_ref, int);
5958 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5959 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5960 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5961 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5962                              dw_loc_list_ref);
5963 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5964 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5965 static inline rtx AT_addr (dw_attr_ref);
5966 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5967 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5968 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5969 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5970                            unsigned HOST_WIDE_INT);
5971 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5972                                unsigned long);
5973 static inline const char *AT_lbl (dw_attr_ref);
5974 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5975 static const char *get_AT_low_pc (dw_die_ref);
5976 static const char *get_AT_hi_pc (dw_die_ref);
5977 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5978 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5979 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5980 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5981 static bool is_cxx (void);
5982 static bool is_fortran (void);
5983 static bool is_ada (void);
5984 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5985 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5986 static void add_child_die (dw_die_ref, dw_die_ref);
5987 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5988 static dw_die_ref lookup_type_die (tree);
5989 static void equate_type_number_to_die (tree, dw_die_ref);
5990 static hashval_t decl_die_table_hash (const void *);
5991 static int decl_die_table_eq (const void *, const void *);
5992 static dw_die_ref lookup_decl_die (tree);
5993 static hashval_t common_block_die_table_hash (const void *);
5994 static int common_block_die_table_eq (const void *, const void *);
5995 static hashval_t decl_loc_table_hash (const void *);
5996 static int decl_loc_table_eq (const void *, const void *);
5997 static var_loc_list *lookup_decl_loc (const_tree);
5998 static void equate_decl_number_to_die (tree, dw_die_ref);
5999 static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
6000 static void print_spaces (FILE *);
6001 static void print_die (dw_die_ref, FILE *);
6002 static void print_dwarf_line_table (FILE *);
6003 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
6004 static dw_die_ref pop_compile_unit (dw_die_ref);
6005 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
6006 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
6007 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
6008 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
6009 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
6010 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
6011 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6012                                    struct md5_ctx *, int *);
6013 struct checksum_attributes;
6014 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6015 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6016 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6017 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6018 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6019 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6020 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6021 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6022 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6023 static void compute_section_prefix (dw_die_ref);
6024 static int is_type_die (dw_die_ref);
6025 static int is_comdat_die (dw_die_ref);
6026 static int is_symbol_die (dw_die_ref);
6027 static void assign_symbol_names (dw_die_ref);
6028 static void break_out_includes (dw_die_ref);
6029 static int is_declaration_die (dw_die_ref);
6030 static int should_move_die_to_comdat (dw_die_ref);
6031 static dw_die_ref clone_as_declaration (dw_die_ref);
6032 static dw_die_ref clone_die (dw_die_ref);
6033 static dw_die_ref clone_tree (dw_die_ref);
6034 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6035 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6036 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6037 static dw_die_ref generate_skeleton (dw_die_ref);
6038 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6039                                                          dw_die_ref);
6040 static void break_out_comdat_types (dw_die_ref);
6041 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6042 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6043 static void copy_decls_for_unworthy_types (dw_die_ref);
6044
6045 static hashval_t htab_cu_hash (const void *);
6046 static int htab_cu_eq (const void *, const void *);
6047 static void htab_cu_del (void *);
6048 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6049 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6050 static void add_sibling_attributes (dw_die_ref);
6051 static void build_abbrev_table (dw_die_ref);
6052 static void output_location_lists (dw_die_ref);
6053 static int constant_size (unsigned HOST_WIDE_INT);
6054 static unsigned long size_of_die (dw_die_ref);
6055 static void calc_die_sizes (dw_die_ref);
6056 static void mark_dies (dw_die_ref);
6057 static void unmark_dies (dw_die_ref);
6058 static void unmark_all_dies (dw_die_ref);
6059 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6060 static unsigned long size_of_aranges (void);
6061 static enum dwarf_form value_format (dw_attr_ref);
6062 static void output_value_format (dw_attr_ref);
6063 static void output_abbrev_section (void);
6064 static void output_die_symbol (dw_die_ref);
6065 static void output_die (dw_die_ref);
6066 static void output_compilation_unit_header (void);
6067 static void output_comp_unit (dw_die_ref, int);
6068 static void output_comdat_type_unit (comdat_type_node *);
6069 static const char *dwarf2_name (tree, int);
6070 static void add_pubname (tree, dw_die_ref);
6071 static void add_pubname_string (const char *, dw_die_ref);
6072 static void add_pubtype (tree, dw_die_ref);
6073 static void output_pubnames (VEC (pubname_entry,gc) *);
6074 static void add_arange (tree, dw_die_ref);
6075 static void output_aranges (void);
6076 static unsigned int add_ranges_num (int);
6077 static unsigned int add_ranges (const_tree);
6078 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6079                                   bool *);
6080 static void output_ranges (void);
6081 static void output_line_info (void);
6082 static void output_file_names (void);
6083 static dw_die_ref base_type_die (tree);
6084 static int is_base_type (tree);
6085 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6086 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6087 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6088 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6089 static int type_is_enum (const_tree);
6090 static unsigned int dbx_reg_number (const_rtx);
6091 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6092 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6093 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6094                                                 enum var_init_status);
6095 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6096                                                      enum var_init_status);
6097 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6098                                          enum var_init_status);
6099 static int is_based_loc (const_rtx);
6100 static int resolve_one_addr (rtx *, void *);
6101 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6102                                             enum var_init_status);
6103 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6104                                                enum var_init_status);
6105 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6106                                         enum var_init_status);
6107 static dw_loc_list_ref loc_list_from_tree (tree, int);
6108 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6109 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6110 static tree field_type (const_tree);
6111 static unsigned int simple_type_align_in_bits (const_tree);
6112 static unsigned int simple_decl_align_in_bits (const_tree);
6113 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6114 static HOST_WIDE_INT field_byte_offset (const_tree);
6115 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6116                                          dw_loc_list_ref);
6117 static void add_data_member_location_attribute (dw_die_ref, tree);
6118 static bool add_const_value_attribute (dw_die_ref, rtx);
6119 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6120 static void insert_float (const_rtx, unsigned char *);
6121 static rtx rtl_for_decl_location (tree);
6122 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6123                                                    enum dwarf_attribute);
6124 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6125 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6126 static void add_name_attribute (dw_die_ref, const char *);
6127 static void add_comp_dir_attribute (dw_die_ref);
6128 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6129 static void add_subscript_info (dw_die_ref, tree, bool);
6130 static void add_byte_size_attribute (dw_die_ref, tree);
6131 static void add_bit_offset_attribute (dw_die_ref, tree);
6132 static void add_bit_size_attribute (dw_die_ref, tree);
6133 static void add_prototyped_attribute (dw_die_ref, tree);
6134 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6135 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6136 static void add_src_coords_attributes (dw_die_ref, tree);
6137 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6138 static void push_decl_scope (tree);
6139 static void pop_decl_scope (void);
6140 static dw_die_ref scope_die_for (tree, dw_die_ref);
6141 static inline int local_scope_p (dw_die_ref);
6142 static inline int class_scope_p (dw_die_ref);
6143 static inline int class_or_namespace_scope_p (dw_die_ref);
6144 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6145 static void add_calling_convention_attribute (dw_die_ref, tree);
6146 static const char *type_tag (const_tree);
6147 static tree member_declared_type (const_tree);
6148 #if 0
6149 static const char *decl_start_label (tree);
6150 #endif
6151 static void gen_array_type_die (tree, dw_die_ref);
6152 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6153 #if 0
6154 static void gen_entry_point_die (tree, dw_die_ref);
6155 #endif
6156 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6157 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6158 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6159 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6160 static void gen_formal_types_die (tree, dw_die_ref);
6161 static void gen_subprogram_die (tree, dw_die_ref);
6162 static void gen_variable_die (tree, tree, dw_die_ref);
6163 static void gen_const_die (tree, dw_die_ref);
6164 static void gen_label_die (tree, dw_die_ref);
6165 static void gen_lexical_block_die (tree, dw_die_ref, int);
6166 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6167 static void gen_field_die (tree, dw_die_ref);
6168 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6169 static dw_die_ref gen_compile_unit_die (const char *);
6170 static void gen_inheritance_die (tree, tree, dw_die_ref);
6171 static void gen_member_die (tree, dw_die_ref);
6172 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6173                                                 enum debug_info_usage);
6174 static void gen_subroutine_type_die (tree, dw_die_ref);
6175 static void gen_typedef_die (tree, dw_die_ref);
6176 static void gen_type_die (tree, dw_die_ref);
6177 static void gen_block_die (tree, dw_die_ref, int);
6178 static void decls_for_scope (tree, dw_die_ref, int);
6179 static int is_redundant_typedef (const_tree);
6180 static inline dw_die_ref get_context_die (tree);
6181 static void gen_namespace_die (tree, dw_die_ref);
6182 static void gen_decl_die (tree, tree, dw_die_ref);
6183 static dw_die_ref force_decl_die (tree);
6184 static dw_die_ref force_type_die (tree);
6185 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6186 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6187 static struct dwarf_file_data * lookup_filename (const char *);
6188 static void retry_incomplete_types (void);
6189 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6190 static void gen_generic_params_dies (tree);
6191 static void splice_child_die (dw_die_ref, dw_die_ref);
6192 static int file_info_cmp (const void *, const void *);
6193 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6194                                      const char *, const char *);
6195 static void output_loc_list (dw_loc_list_ref);
6196 static char *gen_internal_sym (const char *);
6197
6198 static void prune_unmark_dies (dw_die_ref);
6199 static void prune_unused_types_mark (dw_die_ref, int);
6200 static void prune_unused_types_walk (dw_die_ref);
6201 static void prune_unused_types_walk_attribs (dw_die_ref);
6202 static void prune_unused_types_prune (dw_die_ref);
6203 static void prune_unused_types (void);
6204 static int maybe_emit_file (struct dwarf_file_data *fd);
6205 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6206 static void gen_remaining_tmpl_value_param_die_attribute (void);
6207
6208 /* Section names used to hold DWARF debugging information.  */
6209 #ifndef DEBUG_INFO_SECTION
6210 #define DEBUG_INFO_SECTION      ".debug_info"
6211 #endif
6212 #ifndef DEBUG_ABBREV_SECTION
6213 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6214 #endif
6215 #ifndef DEBUG_ARANGES_SECTION
6216 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6217 #endif
6218 #ifndef DEBUG_MACINFO_SECTION
6219 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6220 #endif
6221 #ifndef DEBUG_LINE_SECTION
6222 #define DEBUG_LINE_SECTION      ".debug_line"
6223 #endif
6224 #ifndef DEBUG_LOC_SECTION
6225 #define DEBUG_LOC_SECTION       ".debug_loc"
6226 #endif
6227 #ifndef DEBUG_PUBNAMES_SECTION
6228 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6229 #endif
6230 #ifndef DEBUG_PUBTYPES_SECTION
6231 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6232 #endif
6233 #ifndef DEBUG_DCALL_SECTION
6234 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6235 #endif
6236 #ifndef DEBUG_VCALL_SECTION
6237 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6238 #endif
6239 #ifndef DEBUG_STR_SECTION
6240 #define DEBUG_STR_SECTION       ".debug_str"
6241 #endif
6242 #ifndef DEBUG_RANGES_SECTION
6243 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6244 #endif
6245
6246 /* Standard ELF section names for compiled code and data.  */
6247 #ifndef TEXT_SECTION_NAME
6248 #define TEXT_SECTION_NAME       ".text"
6249 #endif
6250
6251 /* Section flags for .debug_str section.  */
6252 #define DEBUG_STR_SECTION_FLAGS \
6253   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6254    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6255    : SECTION_DEBUG)
6256
6257 /* Labels we insert at beginning sections we can reference instead of
6258    the section names themselves.  */
6259
6260 #ifndef TEXT_SECTION_LABEL
6261 #define TEXT_SECTION_LABEL              "Ltext"
6262 #endif
6263 #ifndef COLD_TEXT_SECTION_LABEL
6264 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6265 #endif
6266 #ifndef DEBUG_LINE_SECTION_LABEL
6267 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6268 #endif
6269 #ifndef DEBUG_INFO_SECTION_LABEL
6270 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6271 #endif
6272 #ifndef DEBUG_ABBREV_SECTION_LABEL
6273 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6274 #endif
6275 #ifndef DEBUG_LOC_SECTION_LABEL
6276 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6277 #endif
6278 #ifndef DEBUG_RANGES_SECTION_LABEL
6279 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6280 #endif
6281 #ifndef DEBUG_MACINFO_SECTION_LABEL
6282 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6283 #endif
6284
6285 /* Mangled name attribute to use.  This used to be a vendor extension
6286    until DWARF 4 standardized it.  */
6287 #define AT_linkage_name \
6288   (dwarf_version >= 4 ? DW_AT_linkage_name : DW_AT_MIPS_linkage_name)
6289
6290
6291 /* Definitions of defaults for formats and names of various special
6292    (artificial) labels which may be generated within this file (when the -g
6293    options is used and DWARF2_DEBUGGING_INFO is in effect.
6294    If necessary, these may be overridden from within the tm.h file, but
6295    typically, overriding these defaults is unnecessary.  */
6296
6297 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6298 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6299 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6300 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6301 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6302 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6303 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6304 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6305 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6306 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6307
6308 #ifndef TEXT_END_LABEL
6309 #define TEXT_END_LABEL          "Letext"
6310 #endif
6311 #ifndef COLD_END_LABEL
6312 #define COLD_END_LABEL          "Letext_cold"
6313 #endif
6314 #ifndef BLOCK_BEGIN_LABEL
6315 #define BLOCK_BEGIN_LABEL       "LBB"
6316 #endif
6317 #ifndef BLOCK_END_LABEL
6318 #define BLOCK_END_LABEL         "LBE"
6319 #endif
6320 #ifndef LINE_CODE_LABEL
6321 #define LINE_CODE_LABEL         "LM"
6322 #endif
6323 #ifndef SEPARATE_LINE_CODE_LABEL
6324 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6325 #endif
6326
6327 \f
6328 /* We allow a language front-end to designate a function that is to be
6329    called to "demangle" any name before it is put into a DIE.  */
6330
6331 static const char *(*demangle_name_func) (const char *);
6332
6333 void
6334 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6335 {
6336   demangle_name_func = func;
6337 }
6338
6339 /* Test if rtl node points to a pseudo register.  */
6340
6341 static inline int
6342 is_pseudo_reg (const_rtx rtl)
6343 {
6344   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6345           || (GET_CODE (rtl) == SUBREG
6346               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6347 }
6348
6349 /* Return a reference to a type, with its const and volatile qualifiers
6350    removed.  */
6351
6352 static inline tree
6353 type_main_variant (tree type)
6354 {
6355   type = TYPE_MAIN_VARIANT (type);
6356
6357   /* ??? There really should be only one main variant among any group of
6358      variants of a given type (and all of the MAIN_VARIANT values for all
6359      members of the group should point to that one type) but sometimes the C
6360      front-end messes this up for array types, so we work around that bug
6361      here.  */
6362   if (TREE_CODE (type) == ARRAY_TYPE)
6363     while (type != TYPE_MAIN_VARIANT (type))
6364       type = TYPE_MAIN_VARIANT (type);
6365
6366   return type;
6367 }
6368
6369 /* Return nonzero if the given type node represents a tagged type.  */
6370
6371 static inline int
6372 is_tagged_type (const_tree type)
6373 {
6374   enum tree_code code = TREE_CODE (type);
6375
6376   return (code == RECORD_TYPE || code == UNION_TYPE
6377           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6378 }
6379
6380 /* Convert a DIE tag into its string name.  */
6381
6382 static const char *
6383 dwarf_tag_name (unsigned int tag)
6384 {
6385   switch (tag)
6386     {
6387     case DW_TAG_padding:
6388       return "DW_TAG_padding";
6389     case DW_TAG_array_type:
6390       return "DW_TAG_array_type";
6391     case DW_TAG_class_type:
6392       return "DW_TAG_class_type";
6393     case DW_TAG_entry_point:
6394       return "DW_TAG_entry_point";
6395     case DW_TAG_enumeration_type:
6396       return "DW_TAG_enumeration_type";
6397     case DW_TAG_formal_parameter:
6398       return "DW_TAG_formal_parameter";
6399     case DW_TAG_imported_declaration:
6400       return "DW_TAG_imported_declaration";
6401     case DW_TAG_label:
6402       return "DW_TAG_label";
6403     case DW_TAG_lexical_block:
6404       return "DW_TAG_lexical_block";
6405     case DW_TAG_member:
6406       return "DW_TAG_member";
6407     case DW_TAG_pointer_type:
6408       return "DW_TAG_pointer_type";
6409     case DW_TAG_reference_type:
6410       return "DW_TAG_reference_type";
6411     case DW_TAG_compile_unit:
6412       return "DW_TAG_compile_unit";
6413     case DW_TAG_string_type:
6414       return "DW_TAG_string_type";
6415     case DW_TAG_structure_type:
6416       return "DW_TAG_structure_type";
6417     case DW_TAG_subroutine_type:
6418       return "DW_TAG_subroutine_type";
6419     case DW_TAG_typedef:
6420       return "DW_TAG_typedef";
6421     case DW_TAG_union_type:
6422       return "DW_TAG_union_type";
6423     case DW_TAG_unspecified_parameters:
6424       return "DW_TAG_unspecified_parameters";
6425     case DW_TAG_variant:
6426       return "DW_TAG_variant";
6427     case DW_TAG_common_block:
6428       return "DW_TAG_common_block";
6429     case DW_TAG_common_inclusion:
6430       return "DW_TAG_common_inclusion";
6431     case DW_TAG_inheritance:
6432       return "DW_TAG_inheritance";
6433     case DW_TAG_inlined_subroutine:
6434       return "DW_TAG_inlined_subroutine";
6435     case DW_TAG_module:
6436       return "DW_TAG_module";
6437     case DW_TAG_ptr_to_member_type:
6438       return "DW_TAG_ptr_to_member_type";
6439     case DW_TAG_set_type:
6440       return "DW_TAG_set_type";
6441     case DW_TAG_subrange_type:
6442       return "DW_TAG_subrange_type";
6443     case DW_TAG_with_stmt:
6444       return "DW_TAG_with_stmt";
6445     case DW_TAG_access_declaration:
6446       return "DW_TAG_access_declaration";
6447     case DW_TAG_base_type:
6448       return "DW_TAG_base_type";
6449     case DW_TAG_catch_block:
6450       return "DW_TAG_catch_block";
6451     case DW_TAG_const_type:
6452       return "DW_TAG_const_type";
6453     case DW_TAG_constant:
6454       return "DW_TAG_constant";
6455     case DW_TAG_enumerator:
6456       return "DW_TAG_enumerator";
6457     case DW_TAG_file_type:
6458       return "DW_TAG_file_type";
6459     case DW_TAG_friend:
6460       return "DW_TAG_friend";
6461     case DW_TAG_namelist:
6462       return "DW_TAG_namelist";
6463     case DW_TAG_namelist_item:
6464       return "DW_TAG_namelist_item";
6465     case DW_TAG_packed_type:
6466       return "DW_TAG_packed_type";
6467     case DW_TAG_subprogram:
6468       return "DW_TAG_subprogram";
6469     case DW_TAG_template_type_param:
6470       return "DW_TAG_template_type_param";
6471     case DW_TAG_template_value_param:
6472       return "DW_TAG_template_value_param";
6473     case DW_TAG_thrown_type:
6474       return "DW_TAG_thrown_type";
6475     case DW_TAG_try_block:
6476       return "DW_TAG_try_block";
6477     case DW_TAG_variant_part:
6478       return "DW_TAG_variant_part";
6479     case DW_TAG_variable:
6480       return "DW_TAG_variable";
6481     case DW_TAG_volatile_type:
6482       return "DW_TAG_volatile_type";
6483     case DW_TAG_dwarf_procedure:
6484       return "DW_TAG_dwarf_procedure";
6485     case DW_TAG_restrict_type:
6486       return "DW_TAG_restrict_type";
6487     case DW_TAG_interface_type:
6488       return "DW_TAG_interface_type";
6489     case DW_TAG_namespace:
6490       return "DW_TAG_namespace";
6491     case DW_TAG_imported_module:
6492       return "DW_TAG_imported_module";
6493     case DW_TAG_unspecified_type:
6494       return "DW_TAG_unspecified_type";
6495     case DW_TAG_partial_unit:
6496       return "DW_TAG_partial_unit";
6497     case DW_TAG_imported_unit:
6498       return "DW_TAG_imported_unit";
6499     case DW_TAG_condition:
6500       return "DW_TAG_condition";
6501     case DW_TAG_shared_type:
6502       return "DW_TAG_shared_type";
6503     case DW_TAG_type_unit:
6504       return "DW_TAG_type_unit";
6505     case DW_TAG_rvalue_reference_type:
6506       return "DW_TAG_rvalue_reference_type";
6507     case DW_TAG_template_alias:
6508       return "DW_TAG_template_alias";
6509     case DW_TAG_GNU_template_parameter_pack:
6510       return "DW_TAG_GNU_template_parameter_pack";
6511     case DW_TAG_GNU_formal_parameter_pack:
6512       return "DW_TAG_GNU_formal_parameter_pack";
6513     case DW_TAG_MIPS_loop:
6514       return "DW_TAG_MIPS_loop";
6515     case DW_TAG_format_label:
6516       return "DW_TAG_format_label";
6517     case DW_TAG_function_template:
6518       return "DW_TAG_function_template";
6519     case DW_TAG_class_template:
6520       return "DW_TAG_class_template";
6521     case DW_TAG_GNU_BINCL:
6522       return "DW_TAG_GNU_BINCL";
6523     case DW_TAG_GNU_EINCL:
6524       return "DW_TAG_GNU_EINCL";
6525     case DW_TAG_GNU_template_template_param:
6526       return "DW_TAG_GNU_template_template_param";
6527     default:
6528       return "DW_TAG_<unknown>";
6529     }
6530 }
6531
6532 /* Convert a DWARF attribute code into its string name.  */
6533
6534 static const char *
6535 dwarf_attr_name (unsigned int attr)
6536 {
6537   switch (attr)
6538     {
6539     case DW_AT_sibling:
6540       return "DW_AT_sibling";
6541     case DW_AT_location:
6542       return "DW_AT_location";
6543     case DW_AT_name:
6544       return "DW_AT_name";
6545     case DW_AT_ordering:
6546       return "DW_AT_ordering";
6547     case DW_AT_subscr_data:
6548       return "DW_AT_subscr_data";
6549     case DW_AT_byte_size:
6550       return "DW_AT_byte_size";
6551     case DW_AT_bit_offset:
6552       return "DW_AT_bit_offset";
6553     case DW_AT_bit_size:
6554       return "DW_AT_bit_size";
6555     case DW_AT_element_list:
6556       return "DW_AT_element_list";
6557     case DW_AT_stmt_list:
6558       return "DW_AT_stmt_list";
6559     case DW_AT_low_pc:
6560       return "DW_AT_low_pc";
6561     case DW_AT_high_pc:
6562       return "DW_AT_high_pc";
6563     case DW_AT_language:
6564       return "DW_AT_language";
6565     case DW_AT_member:
6566       return "DW_AT_member";
6567     case DW_AT_discr:
6568       return "DW_AT_discr";
6569     case DW_AT_discr_value:
6570       return "DW_AT_discr_value";
6571     case DW_AT_visibility:
6572       return "DW_AT_visibility";
6573     case DW_AT_import:
6574       return "DW_AT_import";
6575     case DW_AT_string_length:
6576       return "DW_AT_string_length";
6577     case DW_AT_common_reference:
6578       return "DW_AT_common_reference";
6579     case DW_AT_comp_dir:
6580       return "DW_AT_comp_dir";
6581     case DW_AT_const_value:
6582       return "DW_AT_const_value";
6583     case DW_AT_containing_type:
6584       return "DW_AT_containing_type";
6585     case DW_AT_default_value:
6586       return "DW_AT_default_value";
6587     case DW_AT_inline:
6588       return "DW_AT_inline";
6589     case DW_AT_is_optional:
6590       return "DW_AT_is_optional";
6591     case DW_AT_lower_bound:
6592       return "DW_AT_lower_bound";
6593     case DW_AT_producer:
6594       return "DW_AT_producer";
6595     case DW_AT_prototyped:
6596       return "DW_AT_prototyped";
6597     case DW_AT_return_addr:
6598       return "DW_AT_return_addr";
6599     case DW_AT_start_scope:
6600       return "DW_AT_start_scope";
6601     case DW_AT_bit_stride:
6602       return "DW_AT_bit_stride";
6603     case DW_AT_upper_bound:
6604       return "DW_AT_upper_bound";
6605     case DW_AT_abstract_origin:
6606       return "DW_AT_abstract_origin";
6607     case DW_AT_accessibility:
6608       return "DW_AT_accessibility";
6609     case DW_AT_address_class:
6610       return "DW_AT_address_class";
6611     case DW_AT_artificial:
6612       return "DW_AT_artificial";
6613     case DW_AT_base_types:
6614       return "DW_AT_base_types";
6615     case DW_AT_calling_convention:
6616       return "DW_AT_calling_convention";
6617     case DW_AT_count:
6618       return "DW_AT_count";
6619     case DW_AT_data_member_location:
6620       return "DW_AT_data_member_location";
6621     case DW_AT_decl_column:
6622       return "DW_AT_decl_column";
6623     case DW_AT_decl_file:
6624       return "DW_AT_decl_file";
6625     case DW_AT_decl_line:
6626       return "DW_AT_decl_line";
6627     case DW_AT_declaration:
6628       return "DW_AT_declaration";
6629     case DW_AT_discr_list:
6630       return "DW_AT_discr_list";
6631     case DW_AT_encoding:
6632       return "DW_AT_encoding";
6633     case DW_AT_external:
6634       return "DW_AT_external";
6635     case DW_AT_explicit:
6636       return "DW_AT_explicit";
6637     case DW_AT_frame_base:
6638       return "DW_AT_frame_base";
6639     case DW_AT_friend:
6640       return "DW_AT_friend";
6641     case DW_AT_identifier_case:
6642       return "DW_AT_identifier_case";
6643     case DW_AT_macro_info:
6644       return "DW_AT_macro_info";
6645     case DW_AT_namelist_items:
6646       return "DW_AT_namelist_items";
6647     case DW_AT_priority:
6648       return "DW_AT_priority";
6649     case DW_AT_segment:
6650       return "DW_AT_segment";
6651     case DW_AT_specification:
6652       return "DW_AT_specification";
6653     case DW_AT_static_link:
6654       return "DW_AT_static_link";
6655     case DW_AT_type:
6656       return "DW_AT_type";
6657     case DW_AT_use_location:
6658       return "DW_AT_use_location";
6659     case DW_AT_variable_parameter:
6660       return "DW_AT_variable_parameter";
6661     case DW_AT_virtuality:
6662       return "DW_AT_virtuality";
6663     case DW_AT_vtable_elem_location:
6664       return "DW_AT_vtable_elem_location";
6665
6666     case DW_AT_allocated:
6667       return "DW_AT_allocated";
6668     case DW_AT_associated:
6669       return "DW_AT_associated";
6670     case DW_AT_data_location:
6671       return "DW_AT_data_location";
6672     case DW_AT_byte_stride:
6673       return "DW_AT_byte_stride";
6674     case DW_AT_entry_pc:
6675       return "DW_AT_entry_pc";
6676     case DW_AT_use_UTF8:
6677       return "DW_AT_use_UTF8";
6678     case DW_AT_extension:
6679       return "DW_AT_extension";
6680     case DW_AT_ranges:
6681       return "DW_AT_ranges";
6682     case DW_AT_trampoline:
6683       return "DW_AT_trampoline";
6684     case DW_AT_call_column:
6685       return "DW_AT_call_column";
6686     case DW_AT_call_file:
6687       return "DW_AT_call_file";
6688     case DW_AT_call_line:
6689       return "DW_AT_call_line";
6690
6691     case DW_AT_signature:
6692       return "DW_AT_signature";
6693     case DW_AT_main_subprogram:
6694       return "DW_AT_main_subprogram";
6695     case DW_AT_data_bit_offset:
6696       return "DW_AT_data_bit_offset";
6697     case DW_AT_const_expr:
6698       return "DW_AT_const_expr";
6699     case DW_AT_enum_class:
6700       return "DW_AT_enum_class";
6701     case DW_AT_linkage_name:
6702       return "DW_AT_linkage_name";
6703
6704     case DW_AT_MIPS_fde:
6705       return "DW_AT_MIPS_fde";
6706     case DW_AT_MIPS_loop_begin:
6707       return "DW_AT_MIPS_loop_begin";
6708     case DW_AT_MIPS_tail_loop_begin:
6709       return "DW_AT_MIPS_tail_loop_begin";
6710     case DW_AT_MIPS_epilog_begin:
6711       return "DW_AT_MIPS_epilog_begin";
6712     case DW_AT_MIPS_loop_unroll_factor:
6713       return "DW_AT_MIPS_loop_unroll_factor";
6714     case DW_AT_MIPS_software_pipeline_depth:
6715       return "DW_AT_MIPS_software_pipeline_depth";
6716     case DW_AT_MIPS_linkage_name:
6717       return "DW_AT_MIPS_linkage_name";
6718     case DW_AT_MIPS_stride:
6719       return "DW_AT_MIPS_stride";
6720     case DW_AT_MIPS_abstract_name:
6721       return "DW_AT_MIPS_abstract_name";
6722     case DW_AT_MIPS_clone_origin:
6723       return "DW_AT_MIPS_clone_origin";
6724     case DW_AT_MIPS_has_inlines:
6725       return "DW_AT_MIPS_has_inlines";
6726
6727     case DW_AT_sf_names:
6728       return "DW_AT_sf_names";
6729     case DW_AT_src_info:
6730       return "DW_AT_src_info";
6731     case DW_AT_mac_info:
6732       return "DW_AT_mac_info";
6733     case DW_AT_src_coords:
6734       return "DW_AT_src_coords";
6735     case DW_AT_body_begin:
6736       return "DW_AT_body_begin";
6737     case DW_AT_body_end:
6738       return "DW_AT_body_end";
6739     case DW_AT_GNU_vector:
6740       return "DW_AT_GNU_vector";
6741     case DW_AT_GNU_guarded_by:
6742       return "DW_AT_GNU_guarded_by";
6743     case DW_AT_GNU_pt_guarded_by:
6744       return "DW_AT_GNU_pt_guarded_by";
6745     case DW_AT_GNU_guarded:
6746       return "DW_AT_GNU_guarded";
6747     case DW_AT_GNU_pt_guarded:
6748       return "DW_AT_GNU_pt_guarded";
6749     case DW_AT_GNU_locks_excluded:
6750       return "DW_AT_GNU_locks_excluded";
6751     case DW_AT_GNU_exclusive_locks_required:
6752       return "DW_AT_GNU_exclusive_locks_required";
6753     case DW_AT_GNU_shared_locks_required:
6754       return "DW_AT_GNU_shared_locks_required";
6755     case DW_AT_GNU_odr_signature:
6756       return "DW_AT_GNU_odr_signature";
6757     case DW_AT_GNU_template_name:
6758       return "DW_AT_GNU_template_name";
6759
6760     case DW_AT_VMS_rtnbeg_pd_address:
6761       return "DW_AT_VMS_rtnbeg_pd_address";
6762
6763     default:
6764       return "DW_AT_<unknown>";
6765     }
6766 }
6767
6768 /* Convert a DWARF value form code into its string name.  */
6769
6770 static const char *
6771 dwarf_form_name (unsigned int form)
6772 {
6773   switch (form)
6774     {
6775     case DW_FORM_addr:
6776       return "DW_FORM_addr";
6777     case DW_FORM_block2:
6778       return "DW_FORM_block2";
6779     case DW_FORM_block4:
6780       return "DW_FORM_block4";
6781     case DW_FORM_data2:
6782       return "DW_FORM_data2";
6783     case DW_FORM_data4:
6784       return "DW_FORM_data4";
6785     case DW_FORM_data8:
6786       return "DW_FORM_data8";
6787     case DW_FORM_string:
6788       return "DW_FORM_string";
6789     case DW_FORM_block:
6790       return "DW_FORM_block";
6791     case DW_FORM_block1:
6792       return "DW_FORM_block1";
6793     case DW_FORM_data1:
6794       return "DW_FORM_data1";
6795     case DW_FORM_flag:
6796       return "DW_FORM_flag";
6797     case DW_FORM_sdata:
6798       return "DW_FORM_sdata";
6799     case DW_FORM_strp:
6800       return "DW_FORM_strp";
6801     case DW_FORM_udata:
6802       return "DW_FORM_udata";
6803     case DW_FORM_ref_addr:
6804       return "DW_FORM_ref_addr";
6805     case DW_FORM_ref1:
6806       return "DW_FORM_ref1";
6807     case DW_FORM_ref2:
6808       return "DW_FORM_ref2";
6809     case DW_FORM_ref4:
6810       return "DW_FORM_ref4";
6811     case DW_FORM_ref8:
6812       return "DW_FORM_ref8";
6813     case DW_FORM_ref_udata:
6814       return "DW_FORM_ref_udata";
6815     case DW_FORM_indirect:
6816       return "DW_FORM_indirect";
6817     case DW_FORM_sec_offset:
6818       return "DW_FORM_sec_offset";
6819     case DW_FORM_exprloc:
6820       return "DW_FORM_exprloc";
6821     case DW_FORM_flag_present:
6822       return "DW_FORM_flag_present";
6823     case DW_FORM_ref_sig8:
6824       return "DW_FORM_ref_sig8";
6825     default:
6826       return "DW_FORM_<unknown>";
6827     }
6828 }
6829 \f
6830 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6831    instance of an inlined instance of a decl which is local to an inline
6832    function, so we have to trace all of the way back through the origin chain
6833    to find out what sort of node actually served as the original seed for the
6834    given block.  */
6835
6836 static tree
6837 decl_ultimate_origin (const_tree decl)
6838 {
6839   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6840     return NULL_TREE;
6841
6842   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6843      nodes in the function to point to themselves; ignore that if
6844      we're trying to output the abstract instance of this function.  */
6845   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6846     return NULL_TREE;
6847
6848   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6849      most distant ancestor, this should never happen.  */
6850   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6851
6852   return DECL_ABSTRACT_ORIGIN (decl);
6853 }
6854
6855 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6856    of a virtual function may refer to a base class, so we check the 'this'
6857    parameter.  */
6858
6859 static tree
6860 decl_class_context (tree decl)
6861 {
6862   tree context = NULL_TREE;
6863
6864   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6865     context = DECL_CONTEXT (decl);
6866   else
6867     context = TYPE_MAIN_VARIANT
6868       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6869
6870   if (context && !TYPE_P (context))
6871     context = NULL_TREE;
6872
6873   return context;
6874 }
6875 \f
6876 /* Add an attribute/value pair to a DIE.  */
6877
6878 static inline void
6879 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6880 {
6881   /* Maybe this should be an assert?  */
6882   if (die == NULL)
6883     return;
6884
6885   if (die->die_attr == NULL)
6886     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6887   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6888 }
6889
6890 static inline enum dw_val_class
6891 AT_class (dw_attr_ref a)
6892 {
6893   return a->dw_attr_val.val_class;
6894 }
6895
6896 /* Add a flag value attribute to a DIE.  */
6897
6898 static inline void
6899 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6900 {
6901   dw_attr_node attr;
6902
6903   attr.dw_attr = attr_kind;
6904   attr.dw_attr_val.val_class = dw_val_class_flag;
6905   attr.dw_attr_val.v.val_flag = flag;
6906   add_dwarf_attr (die, &attr);
6907 }
6908
6909 static inline unsigned
6910 AT_flag (dw_attr_ref a)
6911 {
6912   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6913   return a->dw_attr_val.v.val_flag;
6914 }
6915
6916 /* Add a signed integer attribute value to a DIE.  */
6917
6918 static inline void
6919 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6920 {
6921   dw_attr_node attr;
6922
6923   attr.dw_attr = attr_kind;
6924   attr.dw_attr_val.val_class = dw_val_class_const;
6925   attr.dw_attr_val.v.val_int = int_val;
6926   add_dwarf_attr (die, &attr);
6927 }
6928
6929 static inline HOST_WIDE_INT
6930 AT_int (dw_attr_ref a)
6931 {
6932   gcc_assert (a && AT_class (a) == dw_val_class_const);
6933   return a->dw_attr_val.v.val_int;
6934 }
6935
6936 /* Add an unsigned integer attribute value to a DIE.  */
6937
6938 static inline void
6939 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6940                  unsigned HOST_WIDE_INT unsigned_val)
6941 {
6942   dw_attr_node attr;
6943
6944   attr.dw_attr = attr_kind;
6945   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6946   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6947   add_dwarf_attr (die, &attr);
6948 }
6949
6950 static inline unsigned HOST_WIDE_INT
6951 AT_unsigned (dw_attr_ref a)
6952 {
6953   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6954   return a->dw_attr_val.v.val_unsigned;
6955 }
6956
6957 /* Add an unsigned double integer attribute value to a DIE.  */
6958
6959 static inline void
6960 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6961                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6962 {
6963   dw_attr_node attr;
6964
6965   attr.dw_attr = attr_kind;
6966   attr.dw_attr_val.val_class = dw_val_class_const_double;
6967   attr.dw_attr_val.v.val_double.high = high;
6968   attr.dw_attr_val.v.val_double.low = low;
6969   add_dwarf_attr (die, &attr);
6970 }
6971
6972 /* Add a floating point attribute value to a DIE and return it.  */
6973
6974 static inline void
6975 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6976             unsigned int length, unsigned int elt_size, unsigned char *array)
6977 {
6978   dw_attr_node attr;
6979
6980   attr.dw_attr = attr_kind;
6981   attr.dw_attr_val.val_class = dw_val_class_vec;
6982   attr.dw_attr_val.v.val_vec.length = length;
6983   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6984   attr.dw_attr_val.v.val_vec.array = array;
6985   add_dwarf_attr (die, &attr);
6986 }
6987
6988 /* Add an 8-byte data attribute value to a DIE.  */
6989
6990 static inline void
6991 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6992               unsigned char data8[8])
6993 {
6994   dw_attr_node attr;
6995
6996   attr.dw_attr = attr_kind;
6997   attr.dw_attr_val.val_class = dw_val_class_data8;
6998   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6999   add_dwarf_attr (die, &attr);
7000 }
7001
7002 /* Hash and equality functions for debug_str_hash.  */
7003
7004 static hashval_t
7005 debug_str_do_hash (const void *x)
7006 {
7007   return htab_hash_string (((const struct indirect_string_node *)x)->str);
7008 }
7009
7010 static int
7011 debug_str_eq (const void *x1, const void *x2)
7012 {
7013   return strcmp ((((const struct indirect_string_node *)x1)->str),
7014                  (const char *)x2) == 0;
7015 }
7016
7017 /* Add STR to the indirect string hash table.  */
7018
7019 static struct indirect_string_node *
7020 find_AT_string (const char *str)
7021 {
7022   struct indirect_string_node *node;
7023   void **slot;
7024
7025   if (! debug_str_hash)
7026     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7027                                       debug_str_eq, NULL);
7028
7029   slot = htab_find_slot_with_hash (debug_str_hash, str,
7030                                    htab_hash_string (str), INSERT);
7031   if (*slot == NULL)
7032     {
7033       node = (struct indirect_string_node *)
7034                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7035       node->str = ggc_strdup (str);
7036       *slot = node;
7037     }
7038   else
7039     node = (struct indirect_string_node *) *slot;
7040
7041   node->refcount++;
7042   return node;
7043 }
7044
7045 /* Add a string attribute value to a DIE.  */
7046
7047 static inline void
7048 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7049 {
7050   dw_attr_node attr;
7051   struct indirect_string_node *node;
7052
7053   node = find_AT_string (str);
7054
7055   attr.dw_attr = attr_kind;
7056   attr.dw_attr_val.val_class = dw_val_class_str;
7057   attr.dw_attr_val.v.val_str = node;
7058   add_dwarf_attr (die, &attr);
7059 }
7060
7061 /* Create a label for an indirect string node, ensuring it is going to
7062    be output, unless its reference count goes down to zero.  */
7063
7064 static inline void
7065 gen_label_for_indirect_string (struct indirect_string_node *node)
7066 {
7067   char label[32];
7068
7069   if (node->label)
7070     return;
7071
7072   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7073   ++dw2_string_counter;
7074   node->label = xstrdup (label);
7075 }
7076
7077 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7078    debug string STR.  */
7079
7080 static inline rtx
7081 get_debug_string_label (const char *str)
7082 {
7083   struct indirect_string_node *node = find_AT_string (str);
7084
7085   debug_str_hash_forced = true;
7086
7087   gen_label_for_indirect_string (node);
7088
7089   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7090 }
7091
7092 static inline const char *
7093 AT_string (dw_attr_ref a)
7094 {
7095   gcc_assert (a && AT_class (a) == dw_val_class_str);
7096   return a->dw_attr_val.v.val_str->str;
7097 }
7098
7099 /* Find out whether a string should be output inline in DIE
7100    or out-of-line in .debug_str section.  */
7101
7102 static enum dwarf_form
7103 AT_string_form (dw_attr_ref a)
7104 {
7105   struct indirect_string_node *node;
7106   unsigned int len;
7107
7108   gcc_assert (a && AT_class (a) == dw_val_class_str);
7109
7110   node = a->dw_attr_val.v.val_str;
7111   if (node->form)
7112     return node->form;
7113
7114   len = strlen (node->str) + 1;
7115
7116   /* If the string is shorter or equal to the size of the reference, it is
7117      always better to put it inline.  */
7118   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7119     return node->form = DW_FORM_string;
7120
7121   /* If we cannot expect the linker to merge strings in .debug_str
7122      section, only put it into .debug_str if it is worth even in this
7123      single module.  */
7124   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7125       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7126       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7127     return node->form = DW_FORM_string;
7128
7129   gen_label_for_indirect_string (node);
7130
7131   return node->form = DW_FORM_strp;
7132 }
7133
7134 /* Add a DIE reference attribute value to a DIE.  */
7135
7136 static inline void
7137 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7138 {
7139   dw_attr_node attr;
7140
7141   attr.dw_attr = attr_kind;
7142   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7143   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7144   attr.dw_attr_val.v.val_die_ref.external = 0;
7145   add_dwarf_attr (die, &attr);
7146 }
7147
7148 /* Add an AT_specification attribute to a DIE, and also make the back
7149    pointer from the specification to the definition.  */
7150
7151 static inline void
7152 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7153 {
7154   add_AT_die_ref (die, DW_AT_specification, targ_die);
7155   gcc_assert (!targ_die->die_definition);
7156   targ_die->die_definition = die;
7157 }
7158
7159 static inline dw_die_ref
7160 AT_ref (dw_attr_ref a)
7161 {
7162   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7163   return a->dw_attr_val.v.val_die_ref.die;
7164 }
7165
7166 static inline int
7167 AT_ref_external (dw_attr_ref a)
7168 {
7169   if (a && AT_class (a) == dw_val_class_die_ref)
7170     return a->dw_attr_val.v.val_die_ref.external;
7171
7172   return 0;
7173 }
7174
7175 static inline void
7176 set_AT_ref_external (dw_attr_ref a, int i)
7177 {
7178   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7179   a->dw_attr_val.v.val_die_ref.external = i;
7180 }
7181
7182 /* Add an FDE reference attribute value to a DIE.  */
7183
7184 static inline void
7185 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7186 {
7187   dw_attr_node attr;
7188
7189   attr.dw_attr = attr_kind;
7190   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7191   attr.dw_attr_val.v.val_fde_index = targ_fde;
7192   add_dwarf_attr (die, &attr);
7193 }
7194
7195 /* Add a location description attribute value to a DIE.  */
7196
7197 static inline void
7198 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7199 {
7200   dw_attr_node attr;
7201
7202   attr.dw_attr = attr_kind;
7203   attr.dw_attr_val.val_class = dw_val_class_loc;
7204   attr.dw_attr_val.v.val_loc = loc;
7205   add_dwarf_attr (die, &attr);
7206 }
7207
7208 static inline dw_loc_descr_ref
7209 AT_loc (dw_attr_ref a)
7210 {
7211   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7212   return a->dw_attr_val.v.val_loc;
7213 }
7214
7215 static inline void
7216 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7217 {
7218   dw_attr_node attr;
7219
7220   attr.dw_attr = attr_kind;
7221   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7222   attr.dw_attr_val.v.val_loc_list = loc_list;
7223   add_dwarf_attr (die, &attr);
7224   have_location_lists = true;
7225 }
7226
7227 static inline dw_loc_list_ref
7228 AT_loc_list (dw_attr_ref a)
7229 {
7230   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7231   return a->dw_attr_val.v.val_loc_list;
7232 }
7233
7234 static inline dw_loc_list_ref *
7235 AT_loc_list_ptr (dw_attr_ref a)
7236 {
7237   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7238   return &a->dw_attr_val.v.val_loc_list;
7239 }
7240
7241 /* Add an address constant attribute value to a DIE.  */
7242
7243 static inline void
7244 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7245 {
7246   dw_attr_node attr;
7247
7248   attr.dw_attr = attr_kind;
7249   attr.dw_attr_val.val_class = dw_val_class_addr;
7250   attr.dw_attr_val.v.val_addr = addr;
7251   add_dwarf_attr (die, &attr);
7252 }
7253
7254 /* Get the RTX from to an address DIE attribute.  */
7255
7256 static inline rtx
7257 AT_addr (dw_attr_ref a)
7258 {
7259   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7260   return a->dw_attr_val.v.val_addr;
7261 }
7262
7263 /* Add a file attribute value to a DIE.  */
7264
7265 static inline void
7266 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7267              struct dwarf_file_data *fd)
7268 {
7269   dw_attr_node attr;
7270
7271   attr.dw_attr = attr_kind;
7272   attr.dw_attr_val.val_class = dw_val_class_file;
7273   attr.dw_attr_val.v.val_file = fd;
7274   add_dwarf_attr (die, &attr);
7275 }
7276
7277 /* Get the dwarf_file_data from a file DIE attribute.  */
7278
7279 static inline struct dwarf_file_data *
7280 AT_file (dw_attr_ref a)
7281 {
7282   gcc_assert (a && AT_class (a) == dw_val_class_file);
7283   return a->dw_attr_val.v.val_file;
7284 }
7285
7286 /* Add a label identifier attribute value to a DIE.  */
7287
7288 static inline void
7289 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7290 {
7291   dw_attr_node attr;
7292
7293   attr.dw_attr = attr_kind;
7294   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7295   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7296   add_dwarf_attr (die, &attr);
7297 }
7298
7299 /* Add a section offset attribute value to a DIE, an offset into the
7300    debug_line section.  */
7301
7302 static inline void
7303 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7304                 const char *label)
7305 {
7306   dw_attr_node attr;
7307
7308   attr.dw_attr = attr_kind;
7309   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7310   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7311   add_dwarf_attr (die, &attr);
7312 }
7313
7314 /* Add a section offset attribute value to a DIE, an offset into the
7315    debug_macinfo section.  */
7316
7317 static inline void
7318 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7319                const char *label)
7320 {
7321   dw_attr_node attr;
7322
7323   attr.dw_attr = attr_kind;
7324   attr.dw_attr_val.val_class = dw_val_class_macptr;
7325   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7326   add_dwarf_attr (die, &attr);
7327 }
7328
7329 /* Add an offset attribute value to a DIE.  */
7330
7331 static inline void
7332 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7333                unsigned HOST_WIDE_INT offset)
7334 {
7335   dw_attr_node attr;
7336
7337   attr.dw_attr = attr_kind;
7338   attr.dw_attr_val.val_class = dw_val_class_offset;
7339   attr.dw_attr_val.v.val_offset = offset;
7340   add_dwarf_attr (die, &attr);
7341 }
7342
7343 /* Add an range_list attribute value to a DIE.  */
7344
7345 static void
7346 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7347                    long unsigned int offset)
7348 {
7349   dw_attr_node attr;
7350
7351   attr.dw_attr = attr_kind;
7352   attr.dw_attr_val.val_class = dw_val_class_range_list;
7353   attr.dw_attr_val.v.val_offset = offset;
7354   add_dwarf_attr (die, &attr);
7355 }
7356
7357 static inline const char *
7358 AT_lbl (dw_attr_ref a)
7359 {
7360   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7361                     || AT_class (a) == dw_val_class_lineptr
7362                     || AT_class (a) == dw_val_class_macptr));
7363   return a->dw_attr_val.v.val_lbl_id;
7364 }
7365
7366 /* Get the attribute of type attr_kind.  */
7367
7368 static dw_attr_ref
7369 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7370 {
7371   dw_attr_ref a;
7372   unsigned ix;
7373   dw_die_ref spec = NULL;
7374
7375   if (! die)
7376     return NULL;
7377
7378   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7379     if (a->dw_attr == attr_kind)
7380       return a;
7381     else if (a->dw_attr == DW_AT_specification
7382              || a->dw_attr == DW_AT_abstract_origin)
7383       spec = AT_ref (a);
7384
7385   if (spec)
7386     return get_AT (spec, attr_kind);
7387
7388   return NULL;
7389 }
7390
7391 /* Return the "low pc" attribute value, typically associated with a subprogram
7392    DIE.  Return null if the "low pc" attribute is either not present, or if it
7393    cannot be represented as an assembler label identifier.  */
7394
7395 static inline const char *
7396 get_AT_low_pc (dw_die_ref die)
7397 {
7398   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7399
7400   return a ? AT_lbl (a) : NULL;
7401 }
7402
7403 /* Return the "high pc" attribute value, typically associated with a subprogram
7404    DIE.  Return null if the "high pc" attribute is either not present, or if it
7405    cannot be represented as an assembler label identifier.  */
7406
7407 static inline const char *
7408 get_AT_hi_pc (dw_die_ref die)
7409 {
7410   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7411
7412   return a ? AT_lbl (a) : NULL;
7413 }
7414
7415 /* Return the value of the string attribute designated by ATTR_KIND, or
7416    NULL if it is not present.  */
7417
7418 static inline const char *
7419 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7420 {
7421   dw_attr_ref a = get_AT (die, attr_kind);
7422
7423   return a ? AT_string (a) : NULL;
7424 }
7425
7426 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7427    if it is not present.  */
7428
7429 static inline int
7430 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7431 {
7432   dw_attr_ref a = get_AT (die, attr_kind);
7433
7434   return a ? AT_flag (a) : 0;
7435 }
7436
7437 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7438    if it is not present.  */
7439
7440 static inline unsigned
7441 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7442 {
7443   dw_attr_ref a = get_AT (die, attr_kind);
7444
7445   return a ? AT_unsigned (a) : 0;
7446 }
7447
7448 static inline dw_die_ref
7449 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7450 {
7451   dw_attr_ref a = get_AT (die, attr_kind);
7452
7453   return a ? AT_ref (a) : NULL;
7454 }
7455
7456 static inline struct dwarf_file_data *
7457 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7458 {
7459   dw_attr_ref a = get_AT (die, attr_kind);
7460
7461   return a ? AT_file (a) : NULL;
7462 }
7463
7464 /* Return TRUE if the language is C++.  */
7465
7466 static inline bool
7467 is_cxx (void)
7468 {
7469   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7470
7471   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7472 }
7473
7474 /* Return TRUE if the language is Fortran.  */
7475
7476 static inline bool
7477 is_fortran (void)
7478 {
7479   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7480
7481   return (lang == DW_LANG_Fortran77
7482           || lang == DW_LANG_Fortran90
7483           || lang == DW_LANG_Fortran95);
7484 }
7485
7486 /* Return TRUE if the language is Ada.  */
7487
7488 static inline bool
7489 is_ada (void)
7490 {
7491   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7492
7493   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7494 }
7495
7496 /* Remove the specified attribute if present.  */
7497
7498 static void
7499 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7500 {
7501   dw_attr_ref a;
7502   unsigned ix;
7503
7504   if (! die)
7505     return;
7506
7507   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7508     if (a->dw_attr == attr_kind)
7509       {
7510         if (AT_class (a) == dw_val_class_str)
7511           if (a->dw_attr_val.v.val_str->refcount)
7512             a->dw_attr_val.v.val_str->refcount--;
7513
7514         /* VEC_ordered_remove should help reduce the number of abbrevs
7515            that are needed.  */
7516         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7517         return;
7518       }
7519 }
7520
7521 /* Remove CHILD from its parent.  PREV must have the property that
7522    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7523
7524 static void
7525 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7526 {
7527   gcc_assert (child->die_parent == prev->die_parent);
7528   gcc_assert (prev->die_sib == child);
7529   if (prev == child)
7530     {
7531       gcc_assert (child->die_parent->die_child == child);
7532       prev = NULL;
7533     }
7534   else
7535     prev->die_sib = child->die_sib;
7536   if (child->die_parent->die_child == child)
7537     child->die_parent->die_child = prev;
7538 }
7539
7540 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7541    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7542
7543 static void
7544 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7545 {
7546   dw_die_ref parent = old_child->die_parent;
7547
7548   gcc_assert (parent == prev->die_parent);
7549   gcc_assert (prev->die_sib == old_child);
7550
7551   new_child->die_parent = parent;
7552   if (prev == old_child)
7553     {
7554       gcc_assert (parent->die_child == old_child);
7555       new_child->die_sib = new_child;
7556     }
7557   else
7558     {
7559       prev->die_sib = new_child;
7560       new_child->die_sib = old_child->die_sib;
7561     }
7562   if (old_child->die_parent->die_child == old_child)
7563     old_child->die_parent->die_child = new_child;
7564 }
7565
7566 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7567
7568 static void
7569 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7570 {
7571   dw_die_ref c;
7572   new_parent->die_child = old_parent->die_child;
7573   old_parent->die_child = NULL;
7574   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7575 }
7576
7577 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7578    matches TAG.  */
7579
7580 static void
7581 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7582 {
7583   dw_die_ref c;
7584
7585   c = die->die_child;
7586   if (c) do {
7587     dw_die_ref prev = c;
7588     c = c->die_sib;
7589     while (c->die_tag == tag)
7590       {
7591         remove_child_with_prev (c, prev);
7592         /* Might have removed every child.  */
7593         if (c == c->die_sib)
7594           return;
7595         c = c->die_sib;
7596       }
7597   } while (c != die->die_child);
7598 }
7599
7600 /* Add a CHILD_DIE as the last child of DIE.  */
7601
7602 static void
7603 add_child_die (dw_die_ref die, dw_die_ref child_die)
7604 {
7605   /* FIXME this should probably be an assert.  */
7606   if (! die || ! child_die)
7607     return;
7608   gcc_assert (die != child_die);
7609
7610   child_die->die_parent = die;
7611   if (die->die_child)
7612     {
7613       child_die->die_sib = die->die_child->die_sib;
7614       die->die_child->die_sib = child_die;
7615     }
7616   else
7617     child_die->die_sib = child_die;
7618   die->die_child = child_die;
7619 }
7620
7621 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7622    is the specification, to the end of PARENT's list of children.
7623    This is done by removing and re-adding it.  */
7624
7625 static void
7626 splice_child_die (dw_die_ref parent, dw_die_ref child)
7627 {
7628   dw_die_ref p;
7629
7630   /* We want the declaration DIE from inside the class, not the
7631      specification DIE at toplevel.  */
7632   if (child->die_parent != parent)
7633     {
7634       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7635
7636       if (tmp)
7637         child = tmp;
7638     }
7639
7640   gcc_assert (child->die_parent == parent
7641               || (child->die_parent
7642                   == get_AT_ref (parent, DW_AT_specification)));
7643
7644   for (p = child->die_parent->die_child; ; p = p->die_sib)
7645     if (p->die_sib == child)
7646       {
7647         remove_child_with_prev (child, p);
7648         break;
7649       }
7650
7651   add_child_die (parent, child);
7652 }
7653
7654 /* Return a pointer to a newly created DIE node.  */
7655
7656 static inline dw_die_ref
7657 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7658 {
7659   dw_die_ref die = GGC_CNEW (die_node);
7660
7661   die->die_tag = tag_value;
7662
7663   if (parent_die != NULL)
7664     add_child_die (parent_die, die);
7665   else
7666     {
7667       limbo_die_node *limbo_node;
7668
7669       limbo_node = GGC_CNEW (limbo_die_node);
7670       limbo_node->die = die;
7671       limbo_node->created_for = t;
7672       limbo_node->next = limbo_die_list;
7673       limbo_die_list = limbo_node;
7674     }
7675
7676   return die;
7677 }
7678
7679 /* Return the DIE associated with the given type specifier.  */
7680
7681 static inline dw_die_ref
7682 lookup_type_die (tree type)
7683 {
7684   return TYPE_SYMTAB_DIE (type);
7685 }
7686
7687 /* Equate a DIE to a given type specifier.  */
7688
7689 static inline void
7690 equate_type_number_to_die (tree type, dw_die_ref type_die)
7691 {
7692   TYPE_SYMTAB_DIE (type) = type_die;
7693 }
7694
7695 /* Returns a hash value for X (which really is a die_struct).  */
7696
7697 static hashval_t
7698 decl_die_table_hash (const void *x)
7699 {
7700   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7701 }
7702
7703 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7704
7705 static int
7706 decl_die_table_eq (const void *x, const void *y)
7707 {
7708   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7709 }
7710
7711 /* Return the DIE associated with a given declaration.  */
7712
7713 static inline dw_die_ref
7714 lookup_decl_die (tree decl)
7715 {
7716   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7717 }
7718
7719 /* Returns a hash value for X (which really is a var_loc_list).  */
7720
7721 static hashval_t
7722 decl_loc_table_hash (const void *x)
7723 {
7724   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7725 }
7726
7727 /* Return nonzero if decl_id of var_loc_list X is the same as
7728    UID of decl *Y.  */
7729
7730 static int
7731 decl_loc_table_eq (const void *x, const void *y)
7732 {
7733   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7734 }
7735
7736 /* Return the var_loc list associated with a given declaration.  */
7737
7738 static inline var_loc_list *
7739 lookup_decl_loc (const_tree decl)
7740 {
7741   if (!decl_loc_table)
7742     return NULL;
7743   return (var_loc_list *)
7744     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7745 }
7746
7747 /* Equate a DIE to a particular declaration.  */
7748
7749 static void
7750 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7751 {
7752   unsigned int decl_id = DECL_UID (decl);
7753   void **slot;
7754
7755   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7756   *slot = decl_die;
7757   decl_die->decl_id = decl_id;
7758 }
7759
7760 /* Add a variable location node to the linked list for DECL.  */
7761
7762 static struct var_loc_node *
7763 add_var_loc_to_decl (tree decl, rtx loc_note, const char *label)
7764 {
7765   unsigned int decl_id = DECL_UID (decl);
7766   var_loc_list *temp;
7767   void **slot;
7768   struct var_loc_node *loc = NULL;
7769
7770   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7771   if (*slot == NULL)
7772     {
7773       temp = GGC_CNEW (var_loc_list);
7774       temp->decl_id = decl_id;
7775       *slot = temp;
7776     }
7777   else
7778     temp = (var_loc_list *) *slot;
7779
7780   if (temp->last)
7781     {
7782       struct var_loc_node *last = temp->last, *unused = NULL;
7783       if (last->next)
7784         {
7785           last = last->next;
7786           gcc_assert (last->next == NULL);
7787         }
7788       /* TEMP->LAST here is either pointer to the last but one or
7789          last element in the chained list, LAST is pointer to the
7790          last element.  */
7791       /* If the last note doesn't cover any instructions, remove it.  */
7792       if (label && strcmp (last->label, label) == 0)
7793         {
7794           if (temp->last != last)
7795             {
7796               temp->last->next = NULL;
7797               unused = last;
7798               last = temp->last;
7799               gcc_assert (strcmp (last->label, label) != 0);
7800             }
7801           else
7802             {
7803               gcc_assert (temp->first == temp->last);
7804               memset (temp->last, '\0', sizeof (*temp->last));
7805               return temp->last;
7806             }
7807         }
7808       /* If the current location is the same as the end of the list,
7809          and either both or neither of the locations is uninitialized,
7810          we have nothing to do.  */
7811       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (last->var_loc_note),
7812                          NOTE_VAR_LOCATION_LOC (loc_note)))
7813           || ((NOTE_VAR_LOCATION_STATUS (last->var_loc_note)
7814                != NOTE_VAR_LOCATION_STATUS (loc_note))
7815               && ((NOTE_VAR_LOCATION_STATUS (last->var_loc_note)
7816                    == VAR_INIT_STATUS_UNINITIALIZED)
7817                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
7818                       == VAR_INIT_STATUS_UNINITIALIZED))))
7819         {
7820           /* Add LOC to the end of list and update LAST.  If the last
7821              element of the list has been removed above, reuse its
7822              memory for the new node, otherwise allocate a new one.  */
7823           if (unused)
7824             {
7825               loc = unused;
7826               memset (loc, '\0', sizeof (*loc));
7827             }
7828           else
7829             loc = GGC_CNEW (struct var_loc_node);
7830           last->next = loc;
7831           /* Ensure TEMP->LAST will point either to the new last but one
7832              element of the chain, or to the last element in it.  */
7833           if (last != temp->last)
7834             temp->last = last;
7835         }
7836       else if (unused)
7837         ggc_free (unused);
7838     }
7839   else
7840     {
7841       loc = GGC_CNEW (struct var_loc_node);
7842       temp->first = loc;
7843       temp->last = loc;
7844     }
7845   return loc;
7846 }
7847 \f
7848 /* Keep track of the number of spaces used to indent the
7849    output of the debugging routines that print the structure of
7850    the DIE internal representation.  */
7851 static int print_indent;
7852
7853 /* Indent the line the number of spaces given by print_indent.  */
7854
7855 static inline void
7856 print_spaces (FILE *outfile)
7857 {
7858   fprintf (outfile, "%*s", print_indent, "");
7859 }
7860
7861 /* Print a type signature in hex.  */
7862
7863 static inline void
7864 print_signature (FILE *outfile, char *sig)
7865 {
7866   int i;
7867
7868   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7869     fprintf (outfile, "%02x", sig[i] & 0xff);
7870 }
7871
7872 /* Print the information associated with a given DIE, and its children.
7873    This routine is a debugging aid only.  */
7874
7875 static void
7876 print_die (dw_die_ref die, FILE *outfile)
7877 {
7878   dw_attr_ref a;
7879   dw_die_ref c;
7880   unsigned ix;
7881
7882   print_spaces (outfile);
7883   fprintf (outfile, "DIE %4ld: %s\n",
7884            die->die_offset, dwarf_tag_name (die->die_tag));
7885   print_spaces (outfile);
7886   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7887   fprintf (outfile, " offset: %ld\n", die->die_offset);
7888   if (dwarf_version >= 4 && die->die_id.die_type_node)
7889     {
7890       print_spaces (outfile);
7891       fprintf (outfile, "  signature: ");
7892       print_signature (outfile, die->die_id.die_type_node->signature);
7893       fprintf (outfile, "\n");
7894     }
7895
7896   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7897     {
7898       print_spaces (outfile);
7899       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7900
7901       switch (AT_class (a))
7902         {
7903         case dw_val_class_addr:
7904           fprintf (outfile, "address");
7905           break;
7906         case dw_val_class_offset:
7907           fprintf (outfile, "offset");
7908           break;
7909         case dw_val_class_loc:
7910           fprintf (outfile, "location descriptor");
7911           break;
7912         case dw_val_class_loc_list:
7913           fprintf (outfile, "location list -> label:%s",
7914                    AT_loc_list (a)->ll_symbol);
7915           break;
7916         case dw_val_class_range_list:
7917           fprintf (outfile, "range list");
7918           break;
7919         case dw_val_class_const:
7920           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7921           break;
7922         case dw_val_class_unsigned_const:
7923           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7924           break;
7925         case dw_val_class_const_double:
7926           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7927                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7928                    a->dw_attr_val.v.val_double.high,
7929                    a->dw_attr_val.v.val_double.low);
7930           break;
7931         case dw_val_class_vec:
7932           fprintf (outfile, "floating-point or vector constant");
7933           break;
7934         case dw_val_class_flag:
7935           fprintf (outfile, "%u", AT_flag (a));
7936           break;
7937         case dw_val_class_die_ref:
7938           if (AT_ref (a) != NULL)
7939             {
7940               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7941                 {
7942                   fprintf (outfile, "die -> signature: ");
7943                   print_signature (outfile,
7944                                    AT_ref (a)->die_id.die_type_node->signature);
7945                 }
7946               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7947                 fprintf (outfile, "die -> label: %s",
7948                          AT_ref (a)->die_id.die_symbol);
7949               else
7950                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7951             }
7952           else
7953             fprintf (outfile, "die -> <null>");
7954           break;
7955         case dw_val_class_lbl_id:
7956         case dw_val_class_lineptr:
7957         case dw_val_class_macptr:
7958           fprintf (outfile, "label: %s", AT_lbl (a));
7959           break;
7960         case dw_val_class_str:
7961           if (AT_string (a) != NULL)
7962             fprintf (outfile, "\"%s\"", AT_string (a));
7963           else
7964             fprintf (outfile, "<null>");
7965           break;
7966         case dw_val_class_file:
7967           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7968                    AT_file (a)->emitted_number);
7969           break;
7970         case dw_val_class_data8:
7971           {
7972             int i;
7973
7974             for (i = 0; i < 8; i++)
7975               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7976             break;
7977           }
7978         default:
7979           break;
7980         }
7981
7982       fprintf (outfile, "\n");
7983     }
7984
7985   if (die->die_child != NULL)
7986     {
7987       print_indent += 4;
7988       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7989       print_indent -= 4;
7990     }
7991   if (print_indent == 0)
7992     fprintf (outfile, "\n");
7993 }
7994
7995 /* Print the contents of the source code line number correspondence table.
7996    This routine is a debugging aid only.  */
7997
7998 static void
7999 print_dwarf_line_table (FILE *outfile)
8000 {
8001   unsigned i;
8002   dw_line_info_ref line_info;
8003
8004   fprintf (outfile, "\n\nDWARF source line information\n");
8005   for (i = 1; i < line_info_table_in_use; i++)
8006     {
8007       line_info = &line_info_table[i];
8008       fprintf (outfile, "%5d: %4ld %6ld\n", i,
8009                line_info->dw_file_num,
8010                line_info->dw_line_num);
8011     }
8012
8013   fprintf (outfile, "\n\n");
8014 }
8015
8016 /* Print the information collected for a given DIE.  */
8017
8018 void
8019 debug_dwarf_die (dw_die_ref die)
8020 {
8021   print_die (die, stderr);
8022 }
8023
8024 /* Print all DWARF information collected for the compilation unit.
8025    This routine is a debugging aid only.  */
8026
8027 void
8028 debug_dwarf (void)
8029 {
8030   print_indent = 0;
8031   print_die (comp_unit_die, stderr);
8032   if (! DWARF2_ASM_LINE_DEBUG_INFO)
8033     print_dwarf_line_table (stderr);
8034 }
8035 \f
8036 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8037    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8038    DIE that marks the start of the DIEs for this include file.  */
8039
8040 static dw_die_ref
8041 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8042 {
8043   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8044   dw_die_ref new_unit = gen_compile_unit_die (filename);
8045
8046   new_unit->die_sib = old_unit;
8047   return new_unit;
8048 }
8049
8050 /* Close an include-file CU and reopen the enclosing one.  */
8051
8052 static dw_die_ref
8053 pop_compile_unit (dw_die_ref old_unit)
8054 {
8055   dw_die_ref new_unit = old_unit->die_sib;
8056
8057   old_unit->die_sib = NULL;
8058   return new_unit;
8059 }
8060
8061 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8062 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8063
8064 /* Calculate the checksum of a location expression.  */
8065
8066 static inline void
8067 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8068 {
8069   int tem;
8070
8071   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8072   CHECKSUM (tem);
8073   CHECKSUM (loc->dw_loc_oprnd1);
8074   CHECKSUM (loc->dw_loc_oprnd2);
8075 }
8076
8077 /* Calculate the checksum of an attribute.  */
8078
8079 static void
8080 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8081 {
8082   dw_loc_descr_ref loc;
8083   rtx r;
8084
8085   CHECKSUM (at->dw_attr);
8086
8087   /* We don't care that this was compiled with a different compiler
8088      snapshot; if the output is the same, that's what matters.  */
8089   if (at->dw_attr == DW_AT_producer)
8090     return;
8091
8092   switch (AT_class (at))
8093     {
8094     case dw_val_class_const:
8095       CHECKSUM (at->dw_attr_val.v.val_int);
8096       break;
8097     case dw_val_class_unsigned_const:
8098       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8099       break;
8100     case dw_val_class_const_double:
8101       CHECKSUM (at->dw_attr_val.v.val_double);
8102       break;
8103     case dw_val_class_vec:
8104       CHECKSUM (at->dw_attr_val.v.val_vec);
8105       break;
8106     case dw_val_class_flag:
8107       CHECKSUM (at->dw_attr_val.v.val_flag);
8108       break;
8109     case dw_val_class_str:
8110       CHECKSUM_STRING (AT_string (at));
8111       break;
8112
8113     case dw_val_class_addr:
8114       r = AT_addr (at);
8115       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8116       CHECKSUM_STRING (XSTR (r, 0));
8117       break;
8118
8119     case dw_val_class_offset:
8120       CHECKSUM (at->dw_attr_val.v.val_offset);
8121       break;
8122
8123     case dw_val_class_loc:
8124       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8125         loc_checksum (loc, ctx);
8126       break;
8127
8128     case dw_val_class_die_ref:
8129       die_checksum (AT_ref (at), ctx, mark);
8130       break;
8131
8132     case dw_val_class_fde_ref:
8133     case dw_val_class_lbl_id:
8134     case dw_val_class_lineptr:
8135     case dw_val_class_macptr:
8136       break;
8137
8138     case dw_val_class_file:
8139       CHECKSUM_STRING (AT_file (at)->filename);
8140       break;
8141
8142     case dw_val_class_data8:
8143       CHECKSUM (at->dw_attr_val.v.val_data8);
8144       break;
8145
8146     default:
8147       break;
8148     }
8149 }
8150
8151 /* Calculate the checksum of a DIE.  */
8152
8153 static void
8154 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8155 {
8156   dw_die_ref c;
8157   dw_attr_ref a;
8158   unsigned ix;
8159
8160   /* To avoid infinite recursion.  */
8161   if (die->die_mark)
8162     {
8163       CHECKSUM (die->die_mark);
8164       return;
8165     }
8166   die->die_mark = ++(*mark);
8167
8168   CHECKSUM (die->die_tag);
8169
8170   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8171     attr_checksum (a, ctx, mark);
8172
8173   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8174 }
8175
8176 #undef CHECKSUM
8177 #undef CHECKSUM_STRING
8178
8179 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8180 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8181 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8182 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8183 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8184 #define CHECKSUM_ATTR(FOO) \
8185   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8186
8187 /* Calculate the checksum of a number in signed LEB128 format.  */
8188
8189 static void
8190 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8191 {
8192   unsigned char byte;
8193   bool more;
8194
8195   while (1)
8196     {
8197       byte = (value & 0x7f);
8198       value >>= 7;
8199       more = !((value == 0 && (byte & 0x40) == 0)
8200                 || (value == -1 && (byte & 0x40) != 0));
8201       if (more)
8202         byte |= 0x80;
8203       CHECKSUM (byte);
8204       if (!more)
8205         break;
8206     }
8207 }
8208
8209 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8210
8211 static void
8212 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8213 {
8214   while (1)
8215     {
8216       unsigned char byte = (value & 0x7f);
8217       value >>= 7;
8218       if (value != 0)
8219         /* More bytes to follow.  */
8220         byte |= 0x80;
8221       CHECKSUM (byte);
8222       if (value == 0)
8223         break;
8224     }
8225 }
8226
8227 /* Checksum the context of the DIE.  This adds the names of any
8228    surrounding namespaces or structures to the checksum.  */
8229
8230 static void
8231 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8232 {
8233   const char *name;
8234   dw_die_ref spec;
8235   int tag = die->die_tag;
8236
8237   if (tag != DW_TAG_namespace
8238       && tag != DW_TAG_structure_type
8239       && tag != DW_TAG_class_type)
8240     return;
8241
8242   name = get_AT_string (die, DW_AT_name);
8243
8244   spec = get_AT_ref (die, DW_AT_specification);
8245   if (spec != NULL)
8246     die = spec;
8247
8248   if (die->die_parent != NULL)
8249     checksum_die_context (die->die_parent, ctx);
8250
8251   CHECKSUM_ULEB128 ('C');
8252   CHECKSUM_ULEB128 (tag);
8253   if (name != NULL)
8254     CHECKSUM_STRING (name);
8255 }
8256
8257 /* Calculate the checksum of a location expression.  */
8258
8259 static inline void
8260 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8261 {
8262   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8263      were emitted as a DW_FORM_sdata instead of a location expression.  */
8264   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8265     {
8266       CHECKSUM_ULEB128 (DW_FORM_sdata);
8267       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8268       return;
8269     }
8270
8271   /* Otherwise, just checksum the raw location expression.  */
8272   while (loc != NULL)
8273     {
8274       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8275       CHECKSUM (loc->dw_loc_oprnd1);
8276       CHECKSUM (loc->dw_loc_oprnd2);
8277       loc = loc->dw_loc_next;
8278     }
8279 }
8280
8281 /* Calculate the checksum of an attribute.  */
8282
8283 static void
8284 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8285                        struct md5_ctx *ctx, int *mark)
8286 {
8287   dw_loc_descr_ref loc;
8288   rtx r;
8289
8290   if (AT_class (at) == dw_val_class_die_ref)
8291     {
8292       dw_die_ref target_die = AT_ref (at);
8293
8294       /* For pointer and reference types, we checksum only the (qualified)
8295          name of the target type (if there is a name).  For friend entries,
8296          we checksum only the (qualified) name of the target type or function.
8297          This allows the checksum to remain the same whether the target type
8298          is complete or not.  */
8299       if ((at->dw_attr == DW_AT_type
8300            && (tag == DW_TAG_pointer_type
8301                || tag == DW_TAG_reference_type
8302                || tag == DW_TAG_rvalue_reference_type
8303                || tag == DW_TAG_ptr_to_member_type))
8304           || (at->dw_attr == DW_AT_friend
8305               && tag == DW_TAG_friend))
8306         {
8307           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8308
8309           if (name_attr != NULL)
8310             {
8311               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8312
8313               if (decl == NULL)
8314                 decl = target_die;
8315               CHECKSUM_ULEB128 ('N');
8316               CHECKSUM_ULEB128 (at->dw_attr);
8317               if (decl->die_parent != NULL)
8318                 checksum_die_context (decl->die_parent, ctx);
8319               CHECKSUM_ULEB128 ('E');
8320               CHECKSUM_STRING (AT_string (name_attr));
8321               return;
8322             }
8323         }
8324
8325       /* For all other references to another DIE, we check to see if the
8326          target DIE has already been visited.  If it has, we emit a
8327          backward reference; if not, we descend recursively.  */
8328       if (target_die->die_mark > 0)
8329         {
8330           CHECKSUM_ULEB128 ('R');
8331           CHECKSUM_ULEB128 (at->dw_attr);
8332           CHECKSUM_ULEB128 (target_die->die_mark);
8333         }
8334       else
8335         {
8336           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8337
8338           if (decl == NULL)
8339             decl = target_die;
8340           target_die->die_mark = ++(*mark);
8341           CHECKSUM_ULEB128 ('T');
8342           CHECKSUM_ULEB128 (at->dw_attr);
8343           if (decl->die_parent != NULL)
8344             checksum_die_context (decl->die_parent, ctx);
8345           die_checksum_ordered (target_die, ctx, mark);
8346         }
8347       return;
8348     }
8349
8350   CHECKSUM_ULEB128 ('A');
8351   CHECKSUM_ULEB128 (at->dw_attr);
8352
8353   switch (AT_class (at))
8354     {
8355     case dw_val_class_const:
8356       CHECKSUM_ULEB128 (DW_FORM_sdata);
8357       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8358       break;
8359
8360     case dw_val_class_unsigned_const:
8361       CHECKSUM_ULEB128 (DW_FORM_sdata);
8362       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8363       break;
8364
8365     case dw_val_class_const_double:
8366       CHECKSUM_ULEB128 (DW_FORM_block);
8367       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8368       CHECKSUM (at->dw_attr_val.v.val_double);
8369       break;
8370
8371     case dw_val_class_vec:
8372       CHECKSUM_ULEB128 (DW_FORM_block);
8373       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8374       CHECKSUM (at->dw_attr_val.v.val_vec);
8375       break;
8376
8377     case dw_val_class_flag:
8378       CHECKSUM_ULEB128 (DW_FORM_flag);
8379       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8380       break;
8381
8382     case dw_val_class_str:
8383       CHECKSUM_ULEB128 (DW_FORM_string);
8384       CHECKSUM_STRING (AT_string (at));
8385       break;
8386
8387     case dw_val_class_addr:
8388       r = AT_addr (at);
8389       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8390       CHECKSUM_ULEB128 (DW_FORM_string);
8391       CHECKSUM_STRING (XSTR (r, 0));
8392       break;
8393
8394     case dw_val_class_offset:
8395       CHECKSUM_ULEB128 (DW_FORM_sdata);
8396       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8397       break;
8398
8399     case dw_val_class_loc:
8400       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8401         loc_checksum_ordered (loc, ctx);
8402       break;
8403
8404     case dw_val_class_fde_ref:
8405     case dw_val_class_lbl_id:
8406     case dw_val_class_lineptr:
8407     case dw_val_class_macptr:
8408       break;
8409
8410     case dw_val_class_file:
8411       CHECKSUM_ULEB128 (DW_FORM_string);
8412       CHECKSUM_STRING (AT_file (at)->filename);
8413       break;
8414
8415     case dw_val_class_data8:
8416       CHECKSUM (at->dw_attr_val.v.val_data8);
8417       break;
8418
8419     default:
8420       break;
8421     }
8422 }
8423
8424 struct checksum_attributes
8425 {
8426   dw_attr_ref at_name;
8427   dw_attr_ref at_type;
8428   dw_attr_ref at_friend;
8429   dw_attr_ref at_accessibility;
8430   dw_attr_ref at_address_class;
8431   dw_attr_ref at_allocated;
8432   dw_attr_ref at_artificial;
8433   dw_attr_ref at_associated;
8434   dw_attr_ref at_binary_scale;
8435   dw_attr_ref at_bit_offset;
8436   dw_attr_ref at_bit_size;
8437   dw_attr_ref at_bit_stride;
8438   dw_attr_ref at_byte_size;
8439   dw_attr_ref at_byte_stride;
8440   dw_attr_ref at_const_value;
8441   dw_attr_ref at_containing_type;
8442   dw_attr_ref at_count;
8443   dw_attr_ref at_data_location;
8444   dw_attr_ref at_data_member_location;
8445   dw_attr_ref at_decimal_scale;
8446   dw_attr_ref at_decimal_sign;
8447   dw_attr_ref at_default_value;
8448   dw_attr_ref at_digit_count;
8449   dw_attr_ref at_discr;
8450   dw_attr_ref at_discr_list;
8451   dw_attr_ref at_discr_value;
8452   dw_attr_ref at_encoding;
8453   dw_attr_ref at_endianity;
8454   dw_attr_ref at_explicit;
8455   dw_attr_ref at_is_optional;
8456   dw_attr_ref at_location;
8457   dw_attr_ref at_lower_bound;
8458   dw_attr_ref at_mutable;
8459   dw_attr_ref at_ordering;
8460   dw_attr_ref at_picture_string;
8461   dw_attr_ref at_prototyped;
8462   dw_attr_ref at_small;
8463   dw_attr_ref at_segment;
8464   dw_attr_ref at_string_length;
8465   dw_attr_ref at_threads_scaled;
8466   dw_attr_ref at_upper_bound;
8467   dw_attr_ref at_use_location;
8468   dw_attr_ref at_use_UTF8;
8469   dw_attr_ref at_variable_parameter;
8470   dw_attr_ref at_virtuality;
8471   dw_attr_ref at_visibility;
8472   dw_attr_ref at_vtable_elem_location;
8473 };
8474
8475 /* Collect the attributes that we will want to use for the checksum.  */
8476
8477 static void
8478 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8479 {
8480   dw_attr_ref a;
8481   unsigned ix;
8482
8483   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8484     {
8485       switch (a->dw_attr)
8486         {
8487         case DW_AT_name:
8488           attrs->at_name = a;
8489           break;
8490         case DW_AT_type:
8491           attrs->at_type = a;
8492           break;
8493         case DW_AT_friend:
8494           attrs->at_friend = a;
8495           break;
8496         case DW_AT_accessibility:
8497           attrs->at_accessibility = a;
8498           break;
8499         case DW_AT_address_class:
8500           attrs->at_address_class = a;
8501           break;
8502         case DW_AT_allocated:
8503           attrs->at_allocated = a;
8504           break;
8505         case DW_AT_artificial:
8506           attrs->at_artificial = a;
8507           break;
8508         case DW_AT_associated:
8509           attrs->at_associated = a;
8510           break;
8511         case DW_AT_binary_scale:
8512           attrs->at_binary_scale = a;
8513           break;
8514         case DW_AT_bit_offset:
8515           attrs->at_bit_offset = a;
8516           break;
8517         case DW_AT_bit_size:
8518           attrs->at_bit_size = a;
8519           break;
8520         case DW_AT_bit_stride:
8521           attrs->at_bit_stride = a;
8522           break;
8523         case DW_AT_byte_size:
8524           attrs->at_byte_size = a;
8525           break;
8526         case DW_AT_byte_stride:
8527           attrs->at_byte_stride = a;
8528           break;
8529         case DW_AT_const_value:
8530           attrs->at_const_value = a;
8531           break;
8532         case DW_AT_containing_type:
8533           attrs->at_containing_type = a;
8534           break;
8535         case DW_AT_count:
8536           attrs->at_count = a;
8537           break;
8538         case DW_AT_data_location:
8539           attrs->at_data_location = a;
8540           break;
8541         case DW_AT_data_member_location:
8542           attrs->at_data_member_location = a;
8543           break;
8544         case DW_AT_decimal_scale:
8545           attrs->at_decimal_scale = a;
8546           break;
8547         case DW_AT_decimal_sign:
8548           attrs->at_decimal_sign = a;
8549           break;
8550         case DW_AT_default_value:
8551           attrs->at_default_value = a;
8552           break;
8553         case DW_AT_digit_count:
8554           attrs->at_digit_count = a;
8555           break;
8556         case DW_AT_discr:
8557           attrs->at_discr = a;
8558           break;
8559         case DW_AT_discr_list:
8560           attrs->at_discr_list = a;
8561           break;
8562         case DW_AT_discr_value:
8563           attrs->at_discr_value = a;
8564           break;
8565         case DW_AT_encoding:
8566           attrs->at_encoding = a;
8567           break;
8568         case DW_AT_endianity:
8569           attrs->at_endianity = a;
8570           break;
8571         case DW_AT_explicit:
8572           attrs->at_explicit = a;
8573           break;
8574         case DW_AT_is_optional:
8575           attrs->at_is_optional = a;
8576           break;
8577         case DW_AT_location:
8578           attrs->at_location = a;
8579           break;
8580         case DW_AT_lower_bound:
8581           attrs->at_lower_bound = a;
8582           break;
8583         case DW_AT_mutable:
8584           attrs->at_mutable = a;
8585           break;
8586         case DW_AT_ordering:
8587           attrs->at_ordering = a;
8588           break;
8589         case DW_AT_picture_string:
8590           attrs->at_picture_string = a;
8591           break;
8592         case DW_AT_prototyped:
8593           attrs->at_prototyped = a;
8594           break;
8595         case DW_AT_small:
8596           attrs->at_small = a;
8597           break;
8598         case DW_AT_segment:
8599           attrs->at_segment = a;
8600           break;
8601         case DW_AT_string_length:
8602           attrs->at_string_length = a;
8603           break;
8604         case DW_AT_threads_scaled:
8605           attrs->at_threads_scaled = a;
8606           break;
8607         case DW_AT_upper_bound:
8608           attrs->at_upper_bound = a;
8609           break;
8610         case DW_AT_use_location:
8611           attrs->at_use_location = a;
8612           break;
8613         case DW_AT_use_UTF8:
8614           attrs->at_use_UTF8 = a;
8615           break;
8616         case DW_AT_variable_parameter:
8617           attrs->at_variable_parameter = a;
8618           break;
8619         case DW_AT_virtuality:
8620           attrs->at_virtuality = a;
8621           break;
8622         case DW_AT_visibility:
8623           attrs->at_visibility = a;
8624           break;
8625         case DW_AT_vtable_elem_location:
8626           attrs->at_vtable_elem_location = a;
8627           break;
8628         default:
8629           break;
8630         }
8631     }
8632 }
8633
8634 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8635
8636 static void
8637 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8638 {
8639   dw_die_ref c;
8640   dw_die_ref decl;
8641   struct checksum_attributes attrs;
8642
8643   CHECKSUM_ULEB128 ('D');
8644   CHECKSUM_ULEB128 (die->die_tag);
8645
8646   memset (&attrs, 0, sizeof (attrs));
8647
8648   decl = get_AT_ref (die, DW_AT_specification);
8649   if (decl != NULL)
8650     collect_checksum_attributes (&attrs, decl);
8651   collect_checksum_attributes (&attrs, die);
8652
8653   CHECKSUM_ATTR (attrs.at_name);
8654   CHECKSUM_ATTR (attrs.at_accessibility);
8655   CHECKSUM_ATTR (attrs.at_address_class);
8656   CHECKSUM_ATTR (attrs.at_allocated);
8657   CHECKSUM_ATTR (attrs.at_artificial);
8658   CHECKSUM_ATTR (attrs.at_associated);
8659   CHECKSUM_ATTR (attrs.at_binary_scale);
8660   CHECKSUM_ATTR (attrs.at_bit_offset);
8661   CHECKSUM_ATTR (attrs.at_bit_size);
8662   CHECKSUM_ATTR (attrs.at_bit_stride);
8663   CHECKSUM_ATTR (attrs.at_byte_size);
8664   CHECKSUM_ATTR (attrs.at_byte_stride);
8665   CHECKSUM_ATTR (attrs.at_const_value);
8666   CHECKSUM_ATTR (attrs.at_containing_type);
8667   CHECKSUM_ATTR (attrs.at_count);
8668   CHECKSUM_ATTR (attrs.at_data_location);
8669   CHECKSUM_ATTR (attrs.at_data_member_location);
8670   CHECKSUM_ATTR (attrs.at_decimal_scale);
8671   CHECKSUM_ATTR (attrs.at_decimal_sign);
8672   CHECKSUM_ATTR (attrs.at_default_value);
8673   CHECKSUM_ATTR (attrs.at_digit_count);
8674   CHECKSUM_ATTR (attrs.at_discr);
8675   CHECKSUM_ATTR (attrs.at_discr_list);
8676   CHECKSUM_ATTR (attrs.at_discr_value);
8677   CHECKSUM_ATTR (attrs.at_encoding);
8678   CHECKSUM_ATTR (attrs.at_endianity);
8679   CHECKSUM_ATTR (attrs.at_explicit);
8680   CHECKSUM_ATTR (attrs.at_is_optional);
8681   CHECKSUM_ATTR (attrs.at_location);
8682   CHECKSUM_ATTR (attrs.at_lower_bound);
8683   CHECKSUM_ATTR (attrs.at_mutable);
8684   CHECKSUM_ATTR (attrs.at_ordering);
8685   CHECKSUM_ATTR (attrs.at_picture_string);
8686   CHECKSUM_ATTR (attrs.at_prototyped);
8687   CHECKSUM_ATTR (attrs.at_small);
8688   CHECKSUM_ATTR (attrs.at_segment);
8689   CHECKSUM_ATTR (attrs.at_string_length);
8690   CHECKSUM_ATTR (attrs.at_threads_scaled);
8691   CHECKSUM_ATTR (attrs.at_upper_bound);
8692   CHECKSUM_ATTR (attrs.at_use_location);
8693   CHECKSUM_ATTR (attrs.at_use_UTF8);
8694   CHECKSUM_ATTR (attrs.at_variable_parameter);
8695   CHECKSUM_ATTR (attrs.at_virtuality);
8696   CHECKSUM_ATTR (attrs.at_visibility);
8697   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8698   CHECKSUM_ATTR (attrs.at_type);
8699   CHECKSUM_ATTR (attrs.at_friend);
8700
8701   /* Checksum the child DIEs, except for nested types and member functions.  */
8702   c = die->die_child;
8703   if (c) do {
8704     dw_attr_ref name_attr;
8705
8706     c = c->die_sib;
8707     name_attr = get_AT (c, DW_AT_name);
8708     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8709         && name_attr != NULL)
8710       {
8711         CHECKSUM_ULEB128 ('S');
8712         CHECKSUM_ULEB128 (c->die_tag);
8713         CHECKSUM_STRING (AT_string (name_attr));
8714       }
8715     else
8716       {
8717         /* Mark this DIE so it gets processed when unmarking.  */
8718         if (c->die_mark == 0)
8719           c->die_mark = -1;
8720         die_checksum_ordered (c, ctx, mark);
8721       }
8722   } while (c != die->die_child);
8723
8724   CHECKSUM_ULEB128 (0);
8725 }
8726
8727 #undef CHECKSUM
8728 #undef CHECKSUM_STRING
8729 #undef CHECKSUM_ATTR
8730 #undef CHECKSUM_LEB128
8731 #undef CHECKSUM_ULEB128
8732
8733 /* Generate the type signature for DIE.  This is computed by generating an
8734    MD5 checksum over the DIE's tag, its relevant attributes, and its
8735    children.  Attributes that are references to other DIEs are processed
8736    by recursion, using the MARK field to prevent infinite recursion.
8737    If the DIE is nested inside a namespace or another type, we also
8738    need to include that context in the signature.  The lower 64 bits
8739    of the resulting MD5 checksum comprise the signature.  */
8740
8741 static void
8742 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8743 {
8744   int mark;
8745   const char *name;
8746   unsigned char checksum[16];
8747   struct md5_ctx ctx;
8748   dw_die_ref decl;
8749
8750   name = get_AT_string (die, DW_AT_name);
8751   decl = get_AT_ref (die, DW_AT_specification);
8752
8753   /* First, compute a signature for just the type name (and its surrounding
8754      context, if any.  This is stored in the type unit DIE for link-time
8755      ODR (one-definition rule) checking.  */
8756
8757   if (is_cxx() && name != NULL)
8758     {
8759       md5_init_ctx (&ctx);
8760
8761       /* Checksum the names of surrounding namespaces and structures.  */
8762       if (decl != NULL && decl->die_parent != NULL)
8763         checksum_die_context (decl->die_parent, &ctx);
8764
8765       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8766       md5_process_bytes (name, strlen (name) + 1, &ctx);
8767       md5_finish_ctx (&ctx, checksum);
8768
8769       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8770     }
8771
8772   /* Next, compute the complete type signature.  */
8773
8774   md5_init_ctx (&ctx);
8775   mark = 1;
8776   die->die_mark = mark;
8777
8778   /* Checksum the names of surrounding namespaces and structures.  */
8779   if (decl != NULL && decl->die_parent != NULL)
8780     checksum_die_context (decl->die_parent, &ctx);
8781
8782   /* Checksum the DIE and its children.  */
8783   die_checksum_ordered (die, &ctx, &mark);
8784   unmark_all_dies (die);
8785   md5_finish_ctx (&ctx, checksum);
8786
8787   /* Store the signature in the type node and link the type DIE and the
8788      type node together.  */
8789   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8790           DWARF_TYPE_SIGNATURE_SIZE);
8791   die->die_id.die_type_node = type_node;
8792   type_node->type_die = die;
8793
8794   /* If the DIE is a specification, link its declaration to the type node
8795      as well.  */
8796   if (decl != NULL)
8797     decl->die_id.die_type_node = type_node;
8798 }
8799
8800 /* Do the location expressions look same?  */
8801 static inline int
8802 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8803 {
8804   return loc1->dw_loc_opc == loc2->dw_loc_opc
8805          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8806          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8807 }
8808
8809 /* Do the values look the same?  */
8810 static int
8811 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8812 {
8813   dw_loc_descr_ref loc1, loc2;
8814   rtx r1, r2;
8815
8816   if (v1->val_class != v2->val_class)
8817     return 0;
8818
8819   switch (v1->val_class)
8820     {
8821     case dw_val_class_const:
8822       return v1->v.val_int == v2->v.val_int;
8823     case dw_val_class_unsigned_const:
8824       return v1->v.val_unsigned == v2->v.val_unsigned;
8825     case dw_val_class_const_double:
8826       return v1->v.val_double.high == v2->v.val_double.high
8827              && v1->v.val_double.low == v2->v.val_double.low;
8828     case dw_val_class_vec:
8829       if (v1->v.val_vec.length != v2->v.val_vec.length
8830           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8831         return 0;
8832       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8833                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8834         return 0;
8835       return 1;
8836     case dw_val_class_flag:
8837       return v1->v.val_flag == v2->v.val_flag;
8838     case dw_val_class_str:
8839       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8840
8841     case dw_val_class_addr:
8842       r1 = v1->v.val_addr;
8843       r2 = v2->v.val_addr;
8844       if (GET_CODE (r1) != GET_CODE (r2))
8845         return 0;
8846       return !rtx_equal_p (r1, r2);
8847
8848     case dw_val_class_offset:
8849       return v1->v.val_offset == v2->v.val_offset;
8850
8851     case dw_val_class_loc:
8852       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8853            loc1 && loc2;
8854            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8855         if (!same_loc_p (loc1, loc2, mark))
8856           return 0;
8857       return !loc1 && !loc2;
8858
8859     case dw_val_class_die_ref:
8860       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8861
8862     case dw_val_class_fde_ref:
8863     case dw_val_class_lbl_id:
8864     case dw_val_class_lineptr:
8865     case dw_val_class_macptr:
8866       return 1;
8867
8868     case dw_val_class_file:
8869       return v1->v.val_file == v2->v.val_file;
8870
8871     case dw_val_class_data8:
8872       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8873
8874     default:
8875       return 1;
8876     }
8877 }
8878
8879 /* Do the attributes look the same?  */
8880
8881 static int
8882 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8883 {
8884   if (at1->dw_attr != at2->dw_attr)
8885     return 0;
8886
8887   /* We don't care that this was compiled with a different compiler
8888      snapshot; if the output is the same, that's what matters. */
8889   if (at1->dw_attr == DW_AT_producer)
8890     return 1;
8891
8892   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8893 }
8894
8895 /* Do the dies look the same?  */
8896
8897 static int
8898 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8899 {
8900   dw_die_ref c1, c2;
8901   dw_attr_ref a1;
8902   unsigned ix;
8903
8904   /* To avoid infinite recursion.  */
8905   if (die1->die_mark)
8906     return die1->die_mark == die2->die_mark;
8907   die1->die_mark = die2->die_mark = ++(*mark);
8908
8909   if (die1->die_tag != die2->die_tag)
8910     return 0;
8911
8912   if (VEC_length (dw_attr_node, die1->die_attr)
8913       != VEC_length (dw_attr_node, die2->die_attr))
8914     return 0;
8915
8916   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8917     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8918       return 0;
8919
8920   c1 = die1->die_child;
8921   c2 = die2->die_child;
8922   if (! c1)
8923     {
8924       if (c2)
8925         return 0;
8926     }
8927   else
8928     for (;;)
8929       {
8930         if (!same_die_p (c1, c2, mark))
8931           return 0;
8932         c1 = c1->die_sib;
8933         c2 = c2->die_sib;
8934         if (c1 == die1->die_child)
8935           {
8936             if (c2 == die2->die_child)
8937               break;
8938             else
8939               return 0;
8940           }
8941     }
8942
8943   return 1;
8944 }
8945
8946 /* Do the dies look the same?  Wrapper around same_die_p.  */
8947
8948 static int
8949 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8950 {
8951   int mark = 0;
8952   int ret = same_die_p (die1, die2, &mark);
8953
8954   unmark_all_dies (die1);
8955   unmark_all_dies (die2);
8956
8957   return ret;
8958 }
8959
8960 /* The prefix to attach to symbols on DIEs in the current comdat debug
8961    info section.  */
8962 static char *comdat_symbol_id;
8963
8964 /* The index of the current symbol within the current comdat CU.  */
8965 static unsigned int comdat_symbol_number;
8966
8967 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8968    children, and set comdat_symbol_id accordingly.  */
8969
8970 static void
8971 compute_section_prefix (dw_die_ref unit_die)
8972 {
8973   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8974   const char *base = die_name ? lbasename (die_name) : "anonymous";
8975   char *name = XALLOCAVEC (char, strlen (base) + 64);
8976   char *p;
8977   int i, mark;
8978   unsigned char checksum[16];
8979   struct md5_ctx ctx;
8980
8981   /* Compute the checksum of the DIE, then append part of it as hex digits to
8982      the name filename of the unit.  */
8983
8984   md5_init_ctx (&ctx);
8985   mark = 0;
8986   die_checksum (unit_die, &ctx, &mark);
8987   unmark_all_dies (unit_die);
8988   md5_finish_ctx (&ctx, checksum);
8989
8990   sprintf (name, "%s.", base);
8991   clean_symbol_name (name);
8992
8993   p = name + strlen (name);
8994   for (i = 0; i < 4; i++)
8995     {
8996       sprintf (p, "%.2x", checksum[i]);
8997       p += 2;
8998     }
8999
9000   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
9001   comdat_symbol_number = 0;
9002 }
9003
9004 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
9005
9006 static int
9007 is_type_die (dw_die_ref die)
9008 {
9009   switch (die->die_tag)
9010     {
9011     case DW_TAG_array_type:
9012     case DW_TAG_class_type:
9013     case DW_TAG_interface_type:
9014     case DW_TAG_enumeration_type:
9015     case DW_TAG_pointer_type:
9016     case DW_TAG_reference_type:
9017     case DW_TAG_rvalue_reference_type:
9018     case DW_TAG_string_type:
9019     case DW_TAG_structure_type:
9020     case DW_TAG_subroutine_type:
9021     case DW_TAG_union_type:
9022     case DW_TAG_ptr_to_member_type:
9023     case DW_TAG_set_type:
9024     case DW_TAG_subrange_type:
9025     case DW_TAG_base_type:
9026     case DW_TAG_const_type:
9027     case DW_TAG_file_type:
9028     case DW_TAG_packed_type:
9029     case DW_TAG_volatile_type:
9030     case DW_TAG_typedef:
9031       return 1;
9032     default:
9033       return 0;
9034     }
9035 }
9036
9037 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9038    Basically, we want to choose the bits that are likely to be shared between
9039    compilations (types) and leave out the bits that are specific to individual
9040    compilations (functions).  */
9041
9042 static int
9043 is_comdat_die (dw_die_ref c)
9044 {
9045   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9046      we do for stabs.  The advantage is a greater likelihood of sharing between
9047      objects that don't include headers in the same order (and therefore would
9048      put the base types in a different comdat).  jason 8/28/00 */
9049
9050   if (c->die_tag == DW_TAG_base_type)
9051     return 0;
9052
9053   if (c->die_tag == DW_TAG_pointer_type
9054       || c->die_tag == DW_TAG_reference_type
9055       || c->die_tag == DW_TAG_rvalue_reference_type
9056       || c->die_tag == DW_TAG_const_type
9057       || c->die_tag == DW_TAG_volatile_type)
9058     {
9059       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9060
9061       return t ? is_comdat_die (t) : 0;
9062     }
9063
9064   return is_type_die (c);
9065 }
9066
9067 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9068    compilation unit.  */
9069
9070 static int
9071 is_symbol_die (dw_die_ref c)
9072 {
9073   return (is_type_die (c)
9074           || is_declaration_die (c)
9075           || c->die_tag == DW_TAG_namespace
9076           || c->die_tag == DW_TAG_module);
9077 }
9078
9079 static char *
9080 gen_internal_sym (const char *prefix)
9081 {
9082   char buf[256];
9083
9084   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9085   return xstrdup (buf);
9086 }
9087
9088 /* Assign symbols to all worthy DIEs under DIE.  */
9089
9090 static void
9091 assign_symbol_names (dw_die_ref die)
9092 {
9093   dw_die_ref c;
9094
9095   if (is_symbol_die (die))
9096     {
9097       if (comdat_symbol_id)
9098         {
9099           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9100
9101           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9102                    comdat_symbol_id, comdat_symbol_number++);
9103           die->die_id.die_symbol = xstrdup (p);
9104         }
9105       else
9106         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9107     }
9108
9109   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9110 }
9111
9112 struct cu_hash_table_entry
9113 {
9114   dw_die_ref cu;
9115   unsigned min_comdat_num, max_comdat_num;
9116   struct cu_hash_table_entry *next;
9117 };
9118
9119 /* Routines to manipulate hash table of CUs.  */
9120 static hashval_t
9121 htab_cu_hash (const void *of)
9122 {
9123   const struct cu_hash_table_entry *const entry =
9124     (const struct cu_hash_table_entry *) of;
9125
9126   return htab_hash_string (entry->cu->die_id.die_symbol);
9127 }
9128
9129 static int
9130 htab_cu_eq (const void *of1, const void *of2)
9131 {
9132   const struct cu_hash_table_entry *const entry1 =
9133     (const struct cu_hash_table_entry *) of1;
9134   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9135
9136   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9137 }
9138
9139 static void
9140 htab_cu_del (void *what)
9141 {
9142   struct cu_hash_table_entry *next,
9143     *entry = (struct cu_hash_table_entry *) what;
9144
9145   while (entry)
9146     {
9147       next = entry->next;
9148       free (entry);
9149       entry = next;
9150     }
9151 }
9152
9153 /* Check whether we have already seen this CU and set up SYM_NUM
9154    accordingly.  */
9155 static int
9156 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9157 {
9158   struct cu_hash_table_entry dummy;
9159   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9160
9161   dummy.max_comdat_num = 0;
9162
9163   slot = (struct cu_hash_table_entry **)
9164     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9165         INSERT);
9166   entry = *slot;
9167
9168   for (; entry; last = entry, entry = entry->next)
9169     {
9170       if (same_die_p_wrap (cu, entry->cu))
9171         break;
9172     }
9173
9174   if (entry)
9175     {
9176       *sym_num = entry->min_comdat_num;
9177       return 1;
9178     }
9179
9180   entry = XCNEW (struct cu_hash_table_entry);
9181   entry->cu = cu;
9182   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9183   entry->next = *slot;
9184   *slot = entry;
9185
9186   return 0;
9187 }
9188
9189 /* Record SYM_NUM to record of CU in HTABLE.  */
9190 static void
9191 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9192 {
9193   struct cu_hash_table_entry **slot, *entry;
9194
9195   slot = (struct cu_hash_table_entry **)
9196     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9197         NO_INSERT);
9198   entry = *slot;
9199
9200   entry->max_comdat_num = sym_num;
9201 }
9202
9203 /* Traverse the DIE (which is always comp_unit_die), and set up
9204    additional compilation units for each of the include files we see
9205    bracketed by BINCL/EINCL.  */
9206
9207 static void
9208 break_out_includes (dw_die_ref die)
9209 {
9210   dw_die_ref c;
9211   dw_die_ref unit = NULL;
9212   limbo_die_node *node, **pnode;
9213   htab_t cu_hash_table;
9214
9215   c = die->die_child;
9216   if (c) do {
9217     dw_die_ref prev = c;
9218     c = c->die_sib;
9219     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9220            || (unit && is_comdat_die (c)))
9221       {
9222         dw_die_ref next = c->die_sib;
9223
9224         /* This DIE is for a secondary CU; remove it from the main one.  */
9225         remove_child_with_prev (c, prev);
9226
9227         if (c->die_tag == DW_TAG_GNU_BINCL)
9228           unit = push_new_compile_unit (unit, c);
9229         else if (c->die_tag == DW_TAG_GNU_EINCL)
9230           unit = pop_compile_unit (unit);
9231         else
9232           add_child_die (unit, c);
9233         c = next;
9234         if (c == die->die_child)
9235           break;
9236       }
9237   } while (c != die->die_child);
9238
9239 #if 0
9240   /* We can only use this in debugging, since the frontend doesn't check
9241      to make sure that we leave every include file we enter.  */
9242   gcc_assert (!unit);
9243 #endif
9244
9245   assign_symbol_names (die);
9246   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9247   for (node = limbo_die_list, pnode = &limbo_die_list;
9248        node;
9249        node = node->next)
9250     {
9251       int is_dupl;
9252
9253       compute_section_prefix (node->die);
9254       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9255                         &comdat_symbol_number);
9256       assign_symbol_names (node->die);
9257       if (is_dupl)
9258         *pnode = node->next;
9259       else
9260         {
9261           pnode = &node->next;
9262           record_comdat_symbol_number (node->die, cu_hash_table,
9263                 comdat_symbol_number);
9264         }
9265     }
9266   htab_delete (cu_hash_table);
9267 }
9268
9269 /* Return non-zero if this DIE is a declaration.  */
9270
9271 static int
9272 is_declaration_die (dw_die_ref die)
9273 {
9274   dw_attr_ref a;
9275   unsigned ix;
9276
9277   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9278     if (a->dw_attr == DW_AT_declaration)
9279       return 1;
9280
9281   return 0;
9282 }
9283
9284 /* Return non-zero if this is a type DIE that should be moved to a
9285    COMDAT .debug_types section.  */
9286
9287 static int
9288 should_move_die_to_comdat (dw_die_ref die)
9289 {
9290   switch (die->die_tag)
9291     {
9292     case DW_TAG_class_type:
9293     case DW_TAG_structure_type:
9294     case DW_TAG_enumeration_type:
9295     case DW_TAG_union_type:
9296       /* Don't move declarations or inlined instances.  */
9297       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9298         return 0;
9299       return 1;
9300     case DW_TAG_array_type:
9301     case DW_TAG_interface_type:
9302     case DW_TAG_pointer_type:
9303     case DW_TAG_reference_type:
9304     case DW_TAG_rvalue_reference_type:
9305     case DW_TAG_string_type:
9306     case DW_TAG_subroutine_type:
9307     case DW_TAG_ptr_to_member_type:
9308     case DW_TAG_set_type:
9309     case DW_TAG_subrange_type:
9310     case DW_TAG_base_type:
9311     case DW_TAG_const_type:
9312     case DW_TAG_file_type:
9313     case DW_TAG_packed_type:
9314     case DW_TAG_volatile_type:
9315     case DW_TAG_typedef:
9316     default:
9317       return 0;
9318     }
9319 }
9320
9321 /* Make a clone of DIE.  */
9322
9323 static dw_die_ref
9324 clone_die (dw_die_ref die)
9325 {
9326   dw_die_ref clone;
9327   dw_attr_ref a;
9328   unsigned ix;
9329
9330   clone = GGC_CNEW (die_node);
9331   clone->die_tag = die->die_tag;
9332
9333   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9334     add_dwarf_attr (clone, a);
9335
9336   return clone;
9337 }
9338
9339 /* Make a clone of the tree rooted at DIE.  */
9340
9341 static dw_die_ref
9342 clone_tree (dw_die_ref die)
9343 {
9344   dw_die_ref c;
9345   dw_die_ref clone = clone_die (die);
9346
9347   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9348
9349   return clone;
9350 }
9351
9352 /* Make a clone of DIE as a declaration.  */
9353
9354 static dw_die_ref
9355 clone_as_declaration (dw_die_ref die)
9356 {
9357   dw_die_ref clone;
9358   dw_die_ref decl;
9359   dw_attr_ref a;
9360   unsigned ix;
9361
9362   /* If the DIE is already a declaration, just clone it.  */
9363   if (is_declaration_die (die))
9364     return clone_die (die);
9365
9366   /* If the DIE is a specification, just clone its declaration DIE.  */
9367   decl = get_AT_ref (die, DW_AT_specification);
9368   if (decl != NULL)
9369     return clone_die (decl);
9370
9371   clone = GGC_CNEW (die_node);
9372   clone->die_tag = die->die_tag;
9373
9374   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9375     {
9376       /* We don't want to copy over all attributes.
9377          For example we don't want DW_AT_byte_size because otherwise we will no
9378          longer have a declaration and GDB will treat it as a definition.  */
9379
9380       switch (a->dw_attr)
9381         {
9382         case DW_AT_artificial:
9383         case DW_AT_containing_type:
9384         case DW_AT_external:
9385         case DW_AT_name:
9386         case DW_AT_type:
9387         case DW_AT_virtuality:
9388         case DW_AT_linkage_name:
9389         case DW_AT_MIPS_linkage_name:
9390           add_dwarf_attr (clone, a);
9391           break;
9392         case DW_AT_byte_size:
9393         default:
9394           break;
9395         }
9396     }
9397
9398   if (die->die_id.die_type_node)
9399     add_AT_die_ref (clone, DW_AT_signature, die);
9400
9401   add_AT_flag (clone, DW_AT_declaration, 1);
9402   return clone;
9403 }
9404
9405 /* Copy the declaration context to the new compile unit DIE.  This includes
9406    any surrounding namespace or type declarations.  If the DIE has an
9407    AT_specification attribute, it also includes attributes and children
9408    attached to the specification.  */
9409
9410 static void
9411 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9412 {
9413   dw_die_ref decl;
9414   dw_die_ref new_decl;
9415
9416   decl = get_AT_ref (die, DW_AT_specification);
9417   if (decl == NULL)
9418     decl = die;
9419   else
9420     {
9421       unsigned ix;
9422       dw_die_ref c;
9423       dw_attr_ref a;
9424
9425       /* Copy the type node pointer from the new DIE to the original
9426          declaration DIE so we can forward references later.  */
9427       decl->die_id.die_type_node = die->die_id.die_type_node;
9428
9429       remove_AT (die, DW_AT_specification);
9430
9431       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9432         {
9433           if (a->dw_attr != DW_AT_name
9434               && a->dw_attr != DW_AT_declaration
9435               && a->dw_attr != DW_AT_external)
9436             add_dwarf_attr (die, a);
9437         }
9438
9439       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9440     }
9441
9442   if (decl->die_parent != NULL
9443       && decl->die_parent->die_tag != DW_TAG_compile_unit
9444       && decl->die_parent->die_tag != DW_TAG_type_unit)
9445     {
9446       new_decl = copy_ancestor_tree (unit, decl, NULL);
9447       if (new_decl != NULL)
9448         {
9449           remove_AT (new_decl, DW_AT_signature);
9450           add_AT_specification (die, new_decl);
9451         }
9452     }
9453 }
9454
9455 /* Generate the skeleton ancestor tree for the given NODE, then clone
9456    the DIE and add the clone into the tree.  */
9457
9458 static void
9459 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9460 {
9461   if (node->new_die != NULL)
9462     return;
9463
9464   node->new_die = clone_as_declaration (node->old_die);
9465
9466   if (node->parent != NULL)
9467     {
9468       generate_skeleton_ancestor_tree (node->parent);
9469       add_child_die (node->parent->new_die, node->new_die);
9470     }
9471 }
9472
9473 /* Generate a skeleton tree of DIEs containing any declarations that are
9474    found in the original tree.  We traverse the tree looking for declaration
9475    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9476
9477 static void
9478 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9479 {
9480   skeleton_chain_node node;
9481   dw_die_ref c;
9482   dw_die_ref first;
9483   dw_die_ref prev = NULL;
9484   dw_die_ref next = NULL;
9485
9486   node.parent = parent;
9487
9488   first = c = parent->old_die->die_child;
9489   if (c)
9490     next = c->die_sib;
9491   if (c) do {
9492     if (prev == NULL || prev->die_sib == c)
9493       prev = c;
9494     c = next;
9495     next = (c == first ? NULL : c->die_sib);
9496     node.old_die = c;
9497     node.new_die = NULL;
9498     if (is_declaration_die (c))
9499       {
9500         /* Clone the existing DIE, move the original to the skeleton
9501            tree (which is in the main CU), and put the clone, with
9502            all the original's children, where the original came from.  */
9503         dw_die_ref clone = clone_die (c);
9504         move_all_children (c, clone);
9505
9506         replace_child (c, clone, prev);
9507         generate_skeleton_ancestor_tree (parent);
9508         add_child_die (parent->new_die, c);
9509         node.new_die = c;
9510         c = clone;
9511       }
9512     generate_skeleton_bottom_up (&node);
9513   } while (next != NULL);
9514 }
9515
9516 /* Wrapper function for generate_skeleton_bottom_up.  */
9517
9518 static dw_die_ref
9519 generate_skeleton (dw_die_ref die)
9520 {
9521   skeleton_chain_node node;
9522
9523   node.old_die = die;
9524   node.new_die = NULL;
9525   node.parent = NULL;
9526
9527   /* If this type definition is nested inside another type,
9528      always leave at least a declaration in its place.  */
9529   if (die->die_parent != NULL && is_type_die (die->die_parent))
9530     node.new_die = clone_as_declaration (die);
9531
9532   generate_skeleton_bottom_up (&node);
9533   return node.new_die;
9534 }
9535
9536 /* Remove the DIE from its parent, possibly replacing it with a cloned
9537    declaration.  The original DIE will be moved to a new compile unit
9538    so that existing references to it follow it to the new location.  If
9539    any of the original DIE's descendants is a declaration, we need to
9540    replace the original DIE with a skeleton tree and move the
9541    declarations back into the skeleton tree.  */
9542
9543 static dw_die_ref
9544 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9545 {
9546   dw_die_ref skeleton;
9547
9548   skeleton = generate_skeleton (child);
9549   if (skeleton == NULL)
9550     remove_child_with_prev (child, prev);
9551   else
9552     {
9553       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9554       replace_child (child, skeleton, prev);
9555     }
9556
9557   return skeleton;
9558 }
9559
9560 /* Traverse the DIE and set up additional .debug_types sections for each
9561    type worthy of being placed in a COMDAT section.  */
9562
9563 static void
9564 break_out_comdat_types (dw_die_ref die)
9565 {
9566   dw_die_ref c;
9567   dw_die_ref first;
9568   dw_die_ref prev = NULL;
9569   dw_die_ref next = NULL;
9570   dw_die_ref unit = NULL;
9571
9572   first = c = die->die_child;
9573   if (c)
9574     next = c->die_sib;
9575   if (c) do {
9576     if (prev == NULL || prev->die_sib == c)
9577       prev = c;
9578     c = next;
9579     next = (c == first ? NULL : c->die_sib);
9580     if (should_move_die_to_comdat (c))
9581       {
9582         dw_die_ref replacement;
9583         comdat_type_node_ref type_node;
9584
9585         /* Create a new type unit DIE as the root for the new tree, and
9586            add it to the list of comdat types.  */
9587         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9588         add_AT_unsigned (unit, DW_AT_language,
9589                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9590         type_node = GGC_CNEW (comdat_type_node);
9591         type_node->root_die = unit;
9592         type_node->next = comdat_type_list;
9593         comdat_type_list = type_node;
9594
9595         /* Generate the type signature.  */
9596         generate_type_signature (c, type_node);
9597
9598         /* Copy the declaration context, attributes, and children of the
9599            declaration into the new compile unit DIE.  */
9600         copy_declaration_context (unit, c);
9601
9602         /* Remove this DIE from the main CU.  */
9603         replacement = remove_child_or_replace_with_skeleton (c, prev);
9604
9605         /* Break out nested types into their own type units.  */
9606         break_out_comdat_types (c);
9607
9608         /* Add the DIE to the new compunit.  */
9609         add_child_die (unit, c);
9610
9611         if (replacement != NULL)
9612           c = replacement;
9613       }
9614     else if (c->die_tag == DW_TAG_namespace
9615              || c->die_tag == DW_TAG_class_type
9616              || c->die_tag == DW_TAG_structure_type
9617              || c->die_tag == DW_TAG_union_type)
9618       {
9619         /* Look for nested types that can be broken out.  */
9620         break_out_comdat_types (c);
9621       }
9622   } while (next != NULL);
9623 }
9624
9625 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9626
9627 struct decl_table_entry
9628 {
9629   dw_die_ref orig;
9630   dw_die_ref copy;
9631 };
9632
9633 /* Routines to manipulate hash table of copied declarations.  */
9634
9635 static hashval_t
9636 htab_decl_hash (const void *of)
9637 {
9638   const struct decl_table_entry *const entry =
9639     (const struct decl_table_entry *) of;
9640
9641   return htab_hash_pointer (entry->orig);
9642 }
9643
9644 static int
9645 htab_decl_eq (const void *of1, const void *of2)
9646 {
9647   const struct decl_table_entry *const entry1 =
9648     (const struct decl_table_entry *) of1;
9649   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9650
9651   return entry1->orig == entry2;
9652 }
9653
9654 static void
9655 htab_decl_del (void *what)
9656 {
9657   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9658
9659   free (entry);
9660 }
9661
9662 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9663    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9664    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9665    to check if the ancestor has already been copied into UNIT.  */
9666
9667 static dw_die_ref
9668 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9669 {
9670   dw_die_ref parent = die->die_parent;
9671   dw_die_ref new_parent = unit;
9672   dw_die_ref copy;
9673   void **slot = NULL;
9674   struct decl_table_entry *entry = NULL;
9675
9676   if (decl_table)
9677     {
9678       /* Check if the entry has already been copied to UNIT.  */
9679       slot = htab_find_slot_with_hash (decl_table, die,
9680                                        htab_hash_pointer (die), INSERT);
9681       if (*slot != HTAB_EMPTY_ENTRY)
9682         {
9683           entry = (struct decl_table_entry *) *slot;
9684           return entry->copy;
9685         }
9686
9687       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9688       entry = XCNEW (struct decl_table_entry);
9689       entry->orig = die;
9690       entry->copy = NULL;
9691       *slot = entry;
9692     }
9693
9694   if (parent != NULL)
9695     {
9696       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9697       if (spec != NULL)
9698         parent = spec;
9699       if (parent->die_tag != DW_TAG_compile_unit
9700           && parent->die_tag != DW_TAG_type_unit)
9701         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9702     }
9703
9704   copy = clone_as_declaration (die);
9705   add_child_die (new_parent, copy);
9706
9707   if (decl_table != NULL)
9708     {
9709       /* Make sure the copy is marked as part of the type unit.  */
9710       copy->die_mark = 1;
9711       /* Record the pointer to the copy.  */
9712       entry->copy = copy;
9713     }
9714
9715   return copy;
9716 }
9717
9718 /* Walk the DIE and its children, looking for references to incomplete
9719    or trivial types that are unmarked (i.e., that are not in the current
9720    type_unit).  */
9721
9722 static void
9723 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9724 {
9725   dw_die_ref c;
9726   dw_attr_ref a;
9727   unsigned ix;
9728
9729   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9730     {
9731       if (AT_class (a) == dw_val_class_die_ref)
9732         {
9733           dw_die_ref targ = AT_ref (a);
9734           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9735           void **slot;
9736           struct decl_table_entry *entry;
9737
9738           if (targ->die_mark != 0 || type_node != NULL)
9739             continue;
9740
9741           slot = htab_find_slot_with_hash (decl_table, targ,
9742                                            htab_hash_pointer (targ), INSERT);
9743
9744           if (*slot != HTAB_EMPTY_ENTRY)
9745             {
9746               /* TARG has already been copied, so we just need to
9747                  modify the reference to point to the copy.  */
9748               entry = (struct decl_table_entry *) *slot;
9749               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9750             }
9751           else
9752             {
9753               dw_die_ref parent = unit;
9754               dw_die_ref copy = clone_tree (targ);
9755
9756               /* Make sure the cloned tree is marked as part of the
9757                  type unit.  */
9758               mark_dies (copy);
9759
9760               /* Record in DECL_TABLE that TARG has been copied.
9761                  Need to do this now, before the recursive call,
9762                  because DECL_TABLE may be expanded and SLOT
9763                  would no longer be a valid pointer.  */
9764               entry = XCNEW (struct decl_table_entry);
9765               entry->orig = targ;
9766               entry->copy = copy;
9767               *slot = entry;
9768
9769               /* If TARG has surrounding context, copy its ancestor tree
9770                  into the new type unit.  */
9771               if (targ->die_parent != NULL
9772                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9773                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9774                 parent = copy_ancestor_tree (unit, targ->die_parent,
9775                                              decl_table);
9776
9777               add_child_die (parent, copy);
9778               a->dw_attr_val.v.val_die_ref.die = copy;
9779
9780               /* Make sure the newly-copied DIE is walked.  If it was
9781                  installed in a previously-added context, it won't
9782                  get visited otherwise.  */
9783               if (parent != unit)
9784                 copy_decls_walk (unit, parent, decl_table);
9785             }
9786         }
9787     }
9788
9789   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9790 }
9791
9792 /* Copy declarations for "unworthy" types into the new comdat section.
9793    Incomplete types, modified types, and certain other types aren't broken
9794    out into comdat sections of their own, so they don't have a signature,
9795    and we need to copy the declaration into the same section so that we
9796    don't have an external reference.  */
9797
9798 static void
9799 copy_decls_for_unworthy_types (dw_die_ref unit)
9800 {
9801   htab_t decl_table;
9802
9803   mark_dies (unit);
9804   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9805   copy_decls_walk (unit, unit, decl_table);
9806   htab_delete (decl_table);
9807   unmark_dies (unit);
9808 }
9809
9810 /* Traverse the DIE and add a sibling attribute if it may have the
9811    effect of speeding up access to siblings.  To save some space,
9812    avoid generating sibling attributes for DIE's without children.  */
9813
9814 static void
9815 add_sibling_attributes (dw_die_ref die)
9816 {
9817   dw_die_ref c;
9818
9819   if (! die->die_child)
9820     return;
9821
9822   if (die->die_parent && die != die->die_parent->die_child)
9823     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9824
9825   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9826 }
9827
9828 /* Output all location lists for the DIE and its children.  */
9829
9830 static void
9831 output_location_lists (dw_die_ref die)
9832 {
9833   dw_die_ref c;
9834   dw_attr_ref a;
9835   unsigned ix;
9836
9837   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9838     if (AT_class (a) == dw_val_class_loc_list)
9839       output_loc_list (AT_loc_list (a));
9840
9841   FOR_EACH_CHILD (die, c, output_location_lists (c));
9842 }
9843
9844 /* The format of each DIE (and its attribute value pairs) is encoded in an
9845    abbreviation table.  This routine builds the abbreviation table and assigns
9846    a unique abbreviation id for each abbreviation entry.  The children of each
9847    die are visited recursively.  */
9848
9849 static void
9850 build_abbrev_table (dw_die_ref die)
9851 {
9852   unsigned long abbrev_id;
9853   unsigned int n_alloc;
9854   dw_die_ref c;
9855   dw_attr_ref a;
9856   unsigned ix;
9857
9858   /* Scan the DIE references, and mark as external any that refer to
9859      DIEs from other CUs (i.e. those which are not marked).  */
9860   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9861     if (AT_class (a) == dw_val_class_die_ref
9862         && AT_ref (a)->die_mark == 0)
9863       {
9864         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9865         set_AT_ref_external (a, 1);
9866       }
9867
9868   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9869     {
9870       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9871       dw_attr_ref die_a, abbrev_a;
9872       unsigned ix;
9873       bool ok = true;
9874
9875       if (abbrev->die_tag != die->die_tag)
9876         continue;
9877       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9878         continue;
9879
9880       if (VEC_length (dw_attr_node, abbrev->die_attr)
9881           != VEC_length (dw_attr_node, die->die_attr))
9882         continue;
9883
9884       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9885         {
9886           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9887           if ((abbrev_a->dw_attr != die_a->dw_attr)
9888               || (value_format (abbrev_a) != value_format (die_a)))
9889             {
9890               ok = false;
9891               break;
9892             }
9893         }
9894       if (ok)
9895         break;
9896     }
9897
9898   if (abbrev_id >= abbrev_die_table_in_use)
9899     {
9900       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9901         {
9902           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9903           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9904                                             n_alloc);
9905
9906           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9907                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9908           abbrev_die_table_allocated = n_alloc;
9909         }
9910
9911       ++abbrev_die_table_in_use;
9912       abbrev_die_table[abbrev_id] = die;
9913     }
9914
9915   die->die_abbrev = abbrev_id;
9916   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9917 }
9918 \f
9919 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9920
9921 static int
9922 constant_size (unsigned HOST_WIDE_INT value)
9923 {
9924   int log;
9925
9926   if (value == 0)
9927     log = 0;
9928   else
9929     log = floor_log2 (value);
9930
9931   log = log / 8;
9932   log = 1 << (floor_log2 (log) + 1);
9933
9934   return log;
9935 }
9936
9937 /* Return the size of a DIE as it is represented in the
9938    .debug_info section.  */
9939
9940 static unsigned long
9941 size_of_die (dw_die_ref die)
9942 {
9943   unsigned long size = 0;
9944   dw_attr_ref a;
9945   unsigned ix;
9946
9947   size += size_of_uleb128 (die->die_abbrev);
9948   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9949     {
9950       switch (AT_class (a))
9951         {
9952         case dw_val_class_addr:
9953           size += DWARF2_ADDR_SIZE;
9954           break;
9955         case dw_val_class_offset:
9956           size += DWARF_OFFSET_SIZE;
9957           break;
9958         case dw_val_class_loc:
9959           {
9960             unsigned long lsize = size_of_locs (AT_loc (a));
9961
9962             /* Block length.  */
9963             if (dwarf_version >= 4)
9964               size += size_of_uleb128 (lsize);
9965             else
9966               size += constant_size (lsize);
9967             size += lsize;
9968           }
9969           break;
9970         case dw_val_class_loc_list:
9971           size += DWARF_OFFSET_SIZE;
9972           break;
9973         case dw_val_class_range_list:
9974           size += DWARF_OFFSET_SIZE;
9975           break;
9976         case dw_val_class_const:
9977           size += size_of_sleb128 (AT_int (a));
9978           break;
9979         case dw_val_class_unsigned_const:
9980           size += constant_size (AT_unsigned (a));
9981           break;
9982         case dw_val_class_const_double:
9983           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9984           if (HOST_BITS_PER_WIDE_INT >= 64)
9985             size++; /* block */
9986           break;
9987         case dw_val_class_vec:
9988           size += constant_size (a->dw_attr_val.v.val_vec.length
9989                                  * a->dw_attr_val.v.val_vec.elt_size)
9990                   + a->dw_attr_val.v.val_vec.length
9991                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9992           break;
9993         case dw_val_class_flag:
9994           if (dwarf_version >= 4)
9995             /* Currently all add_AT_flag calls pass in 1 as last argument,
9996                so DW_FORM_flag_present can be used.  If that ever changes,
9997                we'll need to use DW_FORM_flag and have some optimization
9998                in build_abbrev_table that will change those to
9999                DW_FORM_flag_present if it is set to 1 in all DIEs using
10000                the same abbrev entry.  */
10001             gcc_assert (a->dw_attr_val.v.val_flag == 1);
10002           else
10003             size += 1;
10004           break;
10005         case dw_val_class_die_ref:
10006           if (AT_ref_external (a))
10007             {
10008               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
10009                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
10010                  is sized by target address length, whereas in DWARF3
10011                  it's always sized as an offset.  */
10012               if (dwarf_version >= 4)
10013                 size += DWARF_TYPE_SIGNATURE_SIZE;
10014               else if (dwarf_version == 2)
10015                 size += DWARF2_ADDR_SIZE;
10016               else
10017                 size += DWARF_OFFSET_SIZE;
10018             }
10019           else
10020             size += DWARF_OFFSET_SIZE;
10021           break;
10022         case dw_val_class_fde_ref:
10023           size += DWARF_OFFSET_SIZE;
10024           break;
10025         case dw_val_class_lbl_id:
10026           size += DWARF2_ADDR_SIZE;
10027           break;
10028         case dw_val_class_lineptr:
10029         case dw_val_class_macptr:
10030           size += DWARF_OFFSET_SIZE;
10031           break;
10032         case dw_val_class_str:
10033           if (AT_string_form (a) == DW_FORM_strp)
10034             size += DWARF_OFFSET_SIZE;
10035           else
10036             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
10037           break;
10038         case dw_val_class_file:
10039           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10040           break;
10041         case dw_val_class_data8:
10042           size += 8;
10043           break;
10044         default:
10045           gcc_unreachable ();
10046         }
10047     }
10048
10049   return size;
10050 }
10051
10052 /* Size the debugging information associated with a given DIE.  Visits the
10053    DIE's children recursively.  Updates the global variable next_die_offset, on
10054    each time through.  Uses the current value of next_die_offset to update the
10055    die_offset field in each DIE.  */
10056
10057 static void
10058 calc_die_sizes (dw_die_ref die)
10059 {
10060   dw_die_ref c;
10061
10062   die->die_offset = next_die_offset;
10063   next_die_offset += size_of_die (die);
10064
10065   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10066
10067   if (die->die_child != NULL)
10068     /* Count the null byte used to terminate sibling lists.  */
10069     next_die_offset += 1;
10070 }
10071
10072 /* Set the marks for a die and its children.  We do this so
10073    that we know whether or not a reference needs to use FORM_ref_addr; only
10074    DIEs in the same CU will be marked.  We used to clear out the offset
10075    and use that as the flag, but ran into ordering problems.  */
10076
10077 static void
10078 mark_dies (dw_die_ref die)
10079 {
10080   dw_die_ref c;
10081
10082   gcc_assert (!die->die_mark);
10083
10084   die->die_mark = 1;
10085   FOR_EACH_CHILD (die, c, mark_dies (c));
10086 }
10087
10088 /* Clear the marks for a die and its children.  */
10089
10090 static void
10091 unmark_dies (dw_die_ref die)
10092 {
10093   dw_die_ref c;
10094
10095   if (dwarf_version < 4)
10096     gcc_assert (die->die_mark);
10097
10098   die->die_mark = 0;
10099   FOR_EACH_CHILD (die, c, unmark_dies (c));
10100 }
10101
10102 /* Clear the marks for a die, its children and referred dies.  */
10103
10104 static void
10105 unmark_all_dies (dw_die_ref die)
10106 {
10107   dw_die_ref c;
10108   dw_attr_ref a;
10109   unsigned ix;
10110
10111   if (!die->die_mark)
10112     return;
10113   die->die_mark = 0;
10114
10115   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10116
10117   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10118     if (AT_class (a) == dw_val_class_die_ref)
10119       unmark_all_dies (AT_ref (a));
10120 }
10121
10122 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10123    generated for the compilation unit.  */
10124
10125 static unsigned long
10126 size_of_pubnames (VEC (pubname_entry, gc) * names)
10127 {
10128   unsigned long size;
10129   unsigned i;
10130   pubname_ref p;
10131
10132   size = DWARF_PUBNAMES_HEADER_SIZE;
10133   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10134     if (names != pubtype_table
10135         || p->die->die_offset != 0
10136         || !flag_eliminate_unused_debug_types)
10137       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10138
10139   size += DWARF_OFFSET_SIZE;
10140   return size;
10141 }
10142
10143 /* Return the size of the information in the .debug_aranges section.  */
10144
10145 static unsigned long
10146 size_of_aranges (void)
10147 {
10148   unsigned long size;
10149
10150   size = DWARF_ARANGES_HEADER_SIZE;
10151
10152   /* Count the address/length pair for this compilation unit.  */
10153   if (text_section_used)
10154     size += 2 * DWARF2_ADDR_SIZE;
10155   if (cold_text_section_used)
10156     size += 2 * DWARF2_ADDR_SIZE;
10157   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10158
10159   /* Count the two zero words used to terminated the address range table.  */
10160   size += 2 * DWARF2_ADDR_SIZE;
10161   return size;
10162 }
10163 \f
10164 /* Select the encoding of an attribute value.  */
10165
10166 static enum dwarf_form
10167 value_format (dw_attr_ref a)
10168 {
10169   switch (a->dw_attr_val.val_class)
10170     {
10171     case dw_val_class_addr:
10172       /* Only very few attributes allow DW_FORM_addr.  */
10173       switch (a->dw_attr)
10174         {
10175         case DW_AT_low_pc:
10176         case DW_AT_high_pc:
10177         case DW_AT_entry_pc:
10178         case DW_AT_trampoline:
10179           return DW_FORM_addr;
10180         default:
10181           break;
10182         }
10183       switch (DWARF2_ADDR_SIZE)
10184         {
10185         case 1:
10186           return DW_FORM_data1;
10187         case 2:
10188           return DW_FORM_data2;
10189         case 4:
10190           return DW_FORM_data4;
10191         case 8:
10192           return DW_FORM_data8;
10193         default:
10194           gcc_unreachable ();
10195         }
10196     case dw_val_class_range_list:
10197     case dw_val_class_loc_list:
10198       if (dwarf_version >= 4)
10199         return DW_FORM_sec_offset;
10200       /* FALLTHRU */
10201     case dw_val_class_offset:
10202       switch (DWARF_OFFSET_SIZE)
10203         {
10204         case 4:
10205           return DW_FORM_data4;
10206         case 8:
10207           return DW_FORM_data8;
10208         default:
10209           gcc_unreachable ();
10210         }
10211     case dw_val_class_loc:
10212       if (dwarf_version >= 4)
10213         return DW_FORM_exprloc;
10214       switch (constant_size (size_of_locs (AT_loc (a))))
10215         {
10216         case 1:
10217           return DW_FORM_block1;
10218         case 2:
10219           return DW_FORM_block2;
10220         default:
10221           gcc_unreachable ();
10222         }
10223     case dw_val_class_const:
10224       return DW_FORM_sdata;
10225     case dw_val_class_unsigned_const:
10226       switch (constant_size (AT_unsigned (a)))
10227         {
10228         case 1:
10229           return DW_FORM_data1;
10230         case 2:
10231           return DW_FORM_data2;
10232         case 4:
10233           return DW_FORM_data4;
10234         case 8:
10235           return DW_FORM_data8;
10236         default:
10237           gcc_unreachable ();
10238         }
10239     case dw_val_class_const_double:
10240       switch (HOST_BITS_PER_WIDE_INT)
10241         {
10242         case 8:
10243           return DW_FORM_data2;
10244         case 16:
10245           return DW_FORM_data4;
10246         case 32:
10247           return DW_FORM_data8;
10248         case 64:
10249         default:
10250           return DW_FORM_block1;
10251         }
10252     case dw_val_class_vec:
10253       switch (constant_size (a->dw_attr_val.v.val_vec.length
10254                              * a->dw_attr_val.v.val_vec.elt_size))
10255         {
10256         case 1:
10257           return DW_FORM_block1;
10258         case 2:
10259           return DW_FORM_block2;
10260         case 4:
10261           return DW_FORM_block4;
10262         default:
10263           gcc_unreachable ();
10264         }
10265     case dw_val_class_flag:
10266       if (dwarf_version >= 4)
10267         {
10268           /* Currently all add_AT_flag calls pass in 1 as last argument,
10269              so DW_FORM_flag_present can be used.  If that ever changes,
10270              we'll need to use DW_FORM_flag and have some optimization
10271              in build_abbrev_table that will change those to
10272              DW_FORM_flag_present if it is set to 1 in all DIEs using
10273              the same abbrev entry.  */
10274           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10275           return DW_FORM_flag_present;
10276         }
10277       return DW_FORM_flag;
10278     case dw_val_class_die_ref:
10279       if (AT_ref_external (a))
10280         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10281       else
10282         return DW_FORM_ref;
10283     case dw_val_class_fde_ref:
10284       return DW_FORM_data;
10285     case dw_val_class_lbl_id:
10286       return DW_FORM_addr;
10287     case dw_val_class_lineptr:
10288     case dw_val_class_macptr:
10289       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10290     case dw_val_class_str:
10291       return AT_string_form (a);
10292     case dw_val_class_file:
10293       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10294         {
10295         case 1:
10296           return DW_FORM_data1;
10297         case 2:
10298           return DW_FORM_data2;
10299         case 4:
10300           return DW_FORM_data4;
10301         default:
10302           gcc_unreachable ();
10303         }
10304
10305     case dw_val_class_data8:
10306       return DW_FORM_data8;
10307
10308     default:
10309       gcc_unreachable ();
10310     }
10311 }
10312
10313 /* Output the encoding of an attribute value.  */
10314
10315 static void
10316 output_value_format (dw_attr_ref a)
10317 {
10318   enum dwarf_form form = value_format (a);
10319
10320   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10321 }
10322
10323 /* Output the .debug_abbrev section which defines the DIE abbreviation
10324    table.  */
10325
10326 static void
10327 output_abbrev_section (void)
10328 {
10329   unsigned long abbrev_id;
10330
10331   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10332     {
10333       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10334       unsigned ix;
10335       dw_attr_ref a_attr;
10336
10337       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10338       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10339                                    dwarf_tag_name (abbrev->die_tag));
10340
10341       if (abbrev->die_child != NULL)
10342         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10343       else
10344         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10345
10346       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10347            ix++)
10348         {
10349           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10350                                        dwarf_attr_name (a_attr->dw_attr));
10351           output_value_format (a_attr);
10352         }
10353
10354       dw2_asm_output_data (1, 0, NULL);
10355       dw2_asm_output_data (1, 0, NULL);
10356     }
10357
10358   /* Terminate the table.  */
10359   dw2_asm_output_data (1, 0, NULL);
10360 }
10361
10362 /* Output a symbol we can use to refer to this DIE from another CU.  */
10363
10364 static inline void
10365 output_die_symbol (dw_die_ref die)
10366 {
10367   char *sym = die->die_id.die_symbol;
10368
10369   if (sym == 0)
10370     return;
10371
10372   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10373     /* We make these global, not weak; if the target doesn't support
10374        .linkonce, it doesn't support combining the sections, so debugging
10375        will break.  */
10376     targetm.asm_out.globalize_label (asm_out_file, sym);
10377
10378   ASM_OUTPUT_LABEL (asm_out_file, sym);
10379 }
10380
10381 /* Return a new location list, given the begin and end range, and the
10382    expression.  */
10383
10384 static inline dw_loc_list_ref
10385 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10386               const char *section)
10387 {
10388   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10389
10390   retlist->begin = begin;
10391   retlist->end = end;
10392   retlist->expr = expr;
10393   retlist->section = section;
10394
10395   return retlist;
10396 }
10397
10398 /* Generate a new internal symbol for this location list node, if it
10399    hasn't got one yet.  */
10400
10401 static inline void
10402 gen_llsym (dw_loc_list_ref list)
10403 {
10404   gcc_assert (!list->ll_symbol);
10405   list->ll_symbol = gen_internal_sym ("LLST");
10406 }
10407
10408 /* Output the location list given to us.  */
10409
10410 static void
10411 output_loc_list (dw_loc_list_ref list_head)
10412 {
10413   dw_loc_list_ref curr = list_head;
10414
10415   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10416
10417   /* Walk the location list, and output each range + expression.  */
10418   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10419     {
10420       unsigned long size;
10421       /* Don't output an entry that starts and ends at the same address.  */
10422       if (strcmp (curr->begin, curr->end) == 0)
10423         continue;
10424       if (!have_multiple_function_sections)
10425         {
10426           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10427                                 "Location list begin address (%s)",
10428                                 list_head->ll_symbol);
10429           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10430                                 "Location list end address (%s)",
10431                                 list_head->ll_symbol);
10432         }
10433       else
10434         {
10435           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10436                                "Location list begin address (%s)",
10437                                list_head->ll_symbol);
10438           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10439                                "Location list end address (%s)",
10440                                list_head->ll_symbol);
10441         }
10442       size = size_of_locs (curr->expr);
10443
10444       /* Output the block length for this list of location operations.  */
10445       gcc_assert (size <= 0xffff);
10446       dw2_asm_output_data (2, size, "%s", "Location expression size");
10447
10448       output_loc_sequence (curr->expr);
10449     }
10450
10451   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10452                        "Location list terminator begin (%s)",
10453                        list_head->ll_symbol);
10454   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10455                        "Location list terminator end (%s)",
10456                        list_head->ll_symbol);
10457 }
10458
10459 /* Output a type signature.  */
10460
10461 static inline void
10462 output_signature (const char *sig, const char *name)
10463 {
10464   int i;
10465
10466   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10467     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10468 }
10469
10470 /* Output the DIE and its attributes.  Called recursively to generate
10471    the definitions of each child DIE.  */
10472
10473 static void
10474 output_die (dw_die_ref die)
10475 {
10476   dw_attr_ref a;
10477   dw_die_ref c;
10478   unsigned long size;
10479   unsigned ix;
10480
10481   /* If someone in another CU might refer to us, set up a symbol for
10482      them to point to.  */
10483   if (dwarf_version < 4 && die->die_id.die_symbol)
10484     output_die_symbol (die);
10485
10486   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
10487                                (unsigned long)die->die_offset,
10488                                dwarf_tag_name (die->die_tag));
10489
10490   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10491     {
10492       const char *name = dwarf_attr_name (a->dw_attr);
10493
10494       switch (AT_class (a))
10495         {
10496         case dw_val_class_addr:
10497           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10498           break;
10499
10500         case dw_val_class_offset:
10501           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10502                                "%s", name);
10503           break;
10504
10505         case dw_val_class_range_list:
10506           {
10507             char *p = strchr (ranges_section_label, '\0');
10508
10509             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10510                      a->dw_attr_val.v.val_offset);
10511             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10512                                    debug_ranges_section, "%s", name);
10513             *p = '\0';
10514           }
10515           break;
10516
10517         case dw_val_class_loc:
10518           size = size_of_locs (AT_loc (a));
10519
10520           /* Output the block length for this list of location operations.  */
10521           if (dwarf_version >= 4)
10522             dw2_asm_output_data_uleb128 (size, "%s", name);
10523           else
10524             dw2_asm_output_data (constant_size (size), size, "%s", name);
10525
10526           output_loc_sequence (AT_loc (a));
10527           break;
10528
10529         case dw_val_class_const:
10530           /* ??? It would be slightly more efficient to use a scheme like is
10531              used for unsigned constants below, but gdb 4.x does not sign
10532              extend.  Gdb 5.x does sign extend.  */
10533           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10534           break;
10535
10536         case dw_val_class_unsigned_const:
10537           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10538                                AT_unsigned (a), "%s", name);
10539           break;
10540
10541         case dw_val_class_const_double:
10542           {
10543             unsigned HOST_WIDE_INT first, second;
10544
10545             if (HOST_BITS_PER_WIDE_INT >= 64)
10546               dw2_asm_output_data (1,
10547                                    2 * HOST_BITS_PER_WIDE_INT
10548                                    / HOST_BITS_PER_CHAR,
10549                                    NULL);
10550
10551             if (WORDS_BIG_ENDIAN)
10552               {
10553                 first = a->dw_attr_val.v.val_double.high;
10554                 second = a->dw_attr_val.v.val_double.low;
10555               }
10556             else
10557               {
10558                 first = a->dw_attr_val.v.val_double.low;
10559                 second = a->dw_attr_val.v.val_double.high;
10560               }
10561
10562             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10563                                  first, name);
10564             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10565                                  second, NULL);
10566           }
10567           break;
10568
10569         case dw_val_class_vec:
10570           {
10571             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10572             unsigned int len = a->dw_attr_val.v.val_vec.length;
10573             unsigned int i;
10574             unsigned char *p;
10575
10576             dw2_asm_output_data (constant_size (len * elt_size),
10577                                  len * elt_size, "%s", name);
10578             if (elt_size > sizeof (HOST_WIDE_INT))
10579               {
10580                 elt_size /= 2;
10581                 len *= 2;
10582               }
10583             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10584                  i < len;
10585                  i++, p += elt_size)
10586               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10587                                    "fp or vector constant word %u", i);
10588             break;
10589           }
10590
10591         case dw_val_class_flag:
10592           if (dwarf_version >= 4)
10593             {
10594               /* Currently all add_AT_flag calls pass in 1 as last argument,
10595                  so DW_FORM_flag_present can be used.  If that ever changes,
10596                  we'll need to use DW_FORM_flag and have some optimization
10597                  in build_abbrev_table that will change those to
10598                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10599                  the same abbrev entry.  */
10600               gcc_assert (AT_flag (a) == 1);
10601               if (flag_debug_asm)
10602                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10603                          ASM_COMMENT_START, name);
10604               break;
10605             }
10606           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10607           break;
10608
10609         case dw_val_class_loc_list:
10610           {
10611             char *sym = AT_loc_list (a)->ll_symbol;
10612
10613             gcc_assert (sym);
10614             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10615                                    "%s", name);
10616           }
10617           break;
10618
10619         case dw_val_class_die_ref:
10620           if (AT_ref_external (a))
10621             {
10622               if (dwarf_version >= 4)
10623                 {
10624                   comdat_type_node_ref type_node =
10625                     AT_ref (a)->die_id.die_type_node;
10626
10627                   gcc_assert (type_node);
10628                   output_signature (type_node->signature, name);
10629                 }
10630               else
10631                 {
10632                   char *sym = AT_ref (a)->die_id.die_symbol;
10633                   int size;
10634
10635                   gcc_assert (sym);
10636                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10637                      length, whereas in DWARF3 it's always sized as an
10638                      offset.  */
10639                   if (dwarf_version == 2)
10640                     size = DWARF2_ADDR_SIZE;
10641                   else
10642                     size = DWARF_OFFSET_SIZE;
10643                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10644                                          name);
10645                 }
10646             }
10647           else
10648             {
10649               gcc_assert (AT_ref (a)->die_offset);
10650               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10651                                    "%s", name);
10652             }
10653           break;
10654
10655         case dw_val_class_fde_ref:
10656           {
10657             char l1[20];
10658
10659             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10660                                          a->dw_attr_val.v.val_fde_index * 2);
10661             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10662                                    "%s", name);
10663           }
10664           break;
10665
10666         case dw_val_class_lbl_id:
10667           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10668           break;
10669
10670         case dw_val_class_lineptr:
10671           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10672                                  debug_line_section, "%s", name);
10673           break;
10674
10675         case dw_val_class_macptr:
10676           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10677                                  debug_macinfo_section, "%s", name);
10678           break;
10679
10680         case dw_val_class_str:
10681           if (AT_string_form (a) == DW_FORM_strp)
10682             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10683                                    a->dw_attr_val.v.val_str->label,
10684                                    debug_str_section,
10685                                    "%s: \"%s\"", name, AT_string (a));
10686           else
10687             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10688           break;
10689
10690         case dw_val_class_file:
10691           {
10692             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10693
10694             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10695                                  a->dw_attr_val.v.val_file->filename);
10696             break;
10697           }
10698
10699         case dw_val_class_data8:
10700           {
10701             int i;
10702
10703             for (i = 0; i < 8; i++)
10704               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10705                                    i == 0 ? "%s" : NULL, name);
10706             break;
10707           }
10708
10709         default:
10710           gcc_unreachable ();
10711         }
10712     }
10713
10714   FOR_EACH_CHILD (die, c, output_die (c));
10715
10716   /* Add null byte to terminate sibling list.  */
10717   if (die->die_child != NULL)
10718     dw2_asm_output_data (1, 0, "end of children of DIE %#lx",
10719                          (unsigned long) die->die_offset);
10720 }
10721
10722 /* Output the compilation unit that appears at the beginning of the
10723    .debug_info section, and precedes the DIE descriptions.  */
10724
10725 static void
10726 output_compilation_unit_header (void)
10727 {
10728   int ver = dwarf_version;
10729
10730   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10731     dw2_asm_output_data (4, 0xffffffff,
10732       "Initial length escape value indicating 64-bit DWARF extension");
10733   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10734                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10735                        "Length of Compilation Unit Info");
10736   dw2_asm_output_data (2, ver, "DWARF version number");
10737   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10738                          debug_abbrev_section,
10739                          "Offset Into Abbrev. Section");
10740   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10741 }
10742
10743 /* Output the compilation unit DIE and its children.  */
10744
10745 static void
10746 output_comp_unit (dw_die_ref die, int output_if_empty)
10747 {
10748   const char *secname;
10749   char *oldsym, *tmp;
10750
10751   /* Unless we are outputting main CU, we may throw away empty ones.  */
10752   if (!output_if_empty && die->die_child == NULL)
10753     return;
10754
10755   /* Even if there are no children of this DIE, we must output the information
10756      about the compilation unit.  Otherwise, on an empty translation unit, we
10757      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10758      will then complain when examining the file.  First mark all the DIEs in
10759      this CU so we know which get local refs.  */
10760   mark_dies (die);
10761
10762   build_abbrev_table (die);
10763
10764   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10765   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10766   calc_die_sizes (die);
10767
10768   oldsym = die->die_id.die_symbol;
10769   if (oldsym)
10770     {
10771       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10772
10773       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10774       secname = tmp;
10775       die->die_id.die_symbol = NULL;
10776       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10777     }
10778   else
10779     switch_to_section (debug_info_section);
10780
10781   /* Output debugging information.  */
10782   output_compilation_unit_header ();
10783   output_die (die);
10784
10785   /* Leave the marks on the main CU, so we can check them in
10786      output_pubnames.  */
10787   if (oldsym)
10788     {
10789       unmark_dies (die);
10790       die->die_id.die_symbol = oldsym;
10791     }
10792 }
10793
10794 /* Output a comdat type unit DIE and its children.  */
10795
10796 static void
10797 output_comdat_type_unit (comdat_type_node *node)
10798 {
10799   const char *secname;
10800   char *tmp;
10801   int i;
10802 #if defined (OBJECT_FORMAT_ELF)
10803   tree comdat_key;
10804 #endif
10805
10806   /* First mark all the DIEs in this CU so we know which get local refs.  */
10807   mark_dies (node->root_die);
10808
10809   build_abbrev_table (node->root_die);
10810
10811   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10812   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10813   calc_die_sizes (node->root_die);
10814
10815 #if defined (OBJECT_FORMAT_ELF)
10816   secname = ".debug_types";
10817   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10818   sprintf (tmp, "wt.");
10819   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10820     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10821   comdat_key = get_identifier (tmp);
10822   targetm.asm_out.named_section (secname,
10823                                  SECTION_DEBUG | SECTION_LINKONCE,
10824                                  comdat_key);
10825 #else
10826   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10827   sprintf (tmp, ".gnu.linkonce.wt.");
10828   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10829     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10830   secname = tmp;
10831   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10832 #endif
10833
10834   /* Output debugging information.  */
10835   output_compilation_unit_header ();
10836   output_signature (node->signature, "Type Signature");
10837   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10838                        "Offset to Type DIE");
10839   output_die (node->root_die);
10840
10841   unmark_dies (node->root_die);
10842 }
10843
10844 /* Return the DWARF2/3 pubname associated with a decl.  */
10845
10846 static const char *
10847 dwarf2_name (tree decl, int scope)
10848 {
10849   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10850 }
10851
10852 /* Add a new entry to .debug_pubnames if appropriate.  */
10853
10854 static void
10855 add_pubname_string (const char *str, dw_die_ref die)
10856 {
10857   pubname_entry e;
10858
10859   e.die = die;
10860   e.name = xstrdup (str);
10861   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10862 }
10863
10864 static void
10865 add_pubname (tree decl, dw_die_ref die)
10866 {
10867   if (TREE_PUBLIC (decl))
10868     {
10869       const char *name = dwarf2_name (decl, 1);
10870       if (name)
10871         add_pubname_string (name, die);
10872     }
10873 }
10874
10875 /* Add a new entry to .debug_pubtypes if appropriate.  */
10876
10877 static void
10878 add_pubtype (tree decl, dw_die_ref die)
10879 {
10880   pubname_entry e;
10881
10882   e.name = NULL;
10883   if ((TREE_PUBLIC (decl)
10884        || die->die_parent == comp_unit_die)
10885       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10886     {
10887       e.die = die;
10888       if (TYPE_P (decl))
10889         {
10890           if (TYPE_NAME (decl))
10891             {
10892               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10893                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10894               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10895                        && DECL_NAME (TYPE_NAME (decl)))
10896                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10897               else
10898                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10899             }
10900         }
10901       else
10902         {
10903           e.name = dwarf2_name (decl, 1);
10904           if (e.name)
10905             e.name = xstrdup (e.name);
10906         }
10907
10908       /* If we don't have a name for the type, there's no point in adding
10909          it to the table.  */
10910       if (e.name && e.name[0] != '\0')
10911         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10912     }
10913 }
10914
10915 /* Output the public names table used to speed up access to externally
10916    visible names; or the public types table used to find type definitions.  */
10917
10918 static void
10919 output_pubnames (VEC (pubname_entry, gc) * names)
10920 {
10921   unsigned i;
10922   unsigned long pubnames_length = size_of_pubnames (names);
10923   pubname_ref pub;
10924
10925   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10926     dw2_asm_output_data (4, 0xffffffff,
10927       "Initial length escape value indicating 64-bit DWARF extension");
10928   if (names == pubname_table)
10929     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10930                          "Length of Public Names Info");
10931   else
10932     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10933                          "Length of Public Type Names Info");
10934   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10935   dw2_asm_output_data (2, 2, "DWARF Version");
10936   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10937                          debug_info_section,
10938                          "Offset of Compilation Unit Info");
10939   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10940                        "Compilation Unit Length");
10941
10942   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10943     {
10944       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10945       if (names == pubname_table)
10946         gcc_assert (pub->die->die_mark);
10947
10948       if (names != pubtype_table
10949           || pub->die->die_offset != 0
10950           || !flag_eliminate_unused_debug_types)
10951         {
10952           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10953                                "DIE offset");
10954
10955           dw2_asm_output_nstring (pub->name, -1, "external name");
10956         }
10957     }
10958
10959   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10960 }
10961
10962 /* Add a new entry to .debug_aranges if appropriate.  */
10963
10964 static void
10965 add_arange (tree decl, dw_die_ref die)
10966 {
10967   if (! DECL_SECTION_NAME (decl))
10968     return;
10969
10970   if (arange_table_in_use == arange_table_allocated)
10971     {
10972       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10973       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10974                                     arange_table_allocated);
10975       memset (arange_table + arange_table_in_use, 0,
10976               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10977     }
10978
10979   arange_table[arange_table_in_use++] = die;
10980 }
10981
10982 /* Output the information that goes into the .debug_aranges table.
10983    Namely, define the beginning and ending address range of the
10984    text section generated for this compilation unit.  */
10985
10986 static void
10987 output_aranges (void)
10988 {
10989   unsigned i;
10990   unsigned long aranges_length = size_of_aranges ();
10991
10992   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10993     dw2_asm_output_data (4, 0xffffffff,
10994       "Initial length escape value indicating 64-bit DWARF extension");
10995   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10996                        "Length of Address Ranges Info");
10997   /* Version number for aranges is still 2, even in DWARF3.  */
10998   dw2_asm_output_data (2, 2, "DWARF Version");
10999   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11000                          debug_info_section,
11001                          "Offset of Compilation Unit Info");
11002   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
11003   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
11004
11005   /* We need to align to twice the pointer size here.  */
11006   if (DWARF_ARANGES_PAD_SIZE)
11007     {
11008       /* Pad using a 2 byte words so that padding is correct for any
11009          pointer size.  */
11010       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
11011                            2 * DWARF2_ADDR_SIZE);
11012       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
11013         dw2_asm_output_data (2, 0, NULL);
11014     }
11015
11016   /* It is necessary not to output these entries if the sections were
11017      not used; if the sections were not used, the length will be 0 and
11018      the address may end up as 0 if the section is discarded by ld
11019      --gc-sections, leaving an invalid (0, 0) entry that can be
11020      confused with the terminator.  */
11021   if (text_section_used)
11022     {
11023       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
11024       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
11025                             text_section_label, "Length");
11026     }
11027   if (cold_text_section_used)
11028     {
11029       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
11030                            "Address");
11031       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
11032                             cold_text_section_label, "Length");
11033     }
11034
11035   for (i = 0; i < arange_table_in_use; i++)
11036     {
11037       dw_die_ref die = arange_table[i];
11038
11039       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11040       gcc_assert (die->die_mark);
11041
11042       if (die->die_tag == DW_TAG_subprogram)
11043         {
11044           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11045                                "Address");
11046           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11047                                 get_AT_low_pc (die), "Length");
11048         }
11049       else
11050         {
11051           /* A static variable; extract the symbol from DW_AT_location.
11052              Note that this code isn't currently hit, as we only emit
11053              aranges for functions (jason 9/23/99).  */
11054           dw_attr_ref a = get_AT (die, DW_AT_location);
11055           dw_loc_descr_ref loc;
11056
11057           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11058
11059           loc = AT_loc (a);
11060           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11061
11062           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11063                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11064           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11065                                get_AT_unsigned (die, DW_AT_byte_size),
11066                                "Length");
11067         }
11068     }
11069
11070   /* Output the terminator words.  */
11071   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11072   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11073 }
11074
11075 /* Add a new entry to .debug_ranges.  Return the offset at which it
11076    was placed.  */
11077
11078 static unsigned int
11079 add_ranges_num (int num)
11080 {
11081   unsigned int in_use = ranges_table_in_use;
11082
11083   if (in_use == ranges_table_allocated)
11084     {
11085       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11086       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11087                                     ranges_table_allocated);
11088       memset (ranges_table + ranges_table_in_use, 0,
11089               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11090     }
11091
11092   ranges_table[in_use].num = num;
11093   ranges_table_in_use = in_use + 1;
11094
11095   return in_use * 2 * DWARF2_ADDR_SIZE;
11096 }
11097
11098 /* Add a new entry to .debug_ranges corresponding to a block, or a
11099    range terminator if BLOCK is NULL.  */
11100
11101 static unsigned int
11102 add_ranges (const_tree block)
11103 {
11104   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11105 }
11106
11107 /* Add a new entry to .debug_ranges corresponding to a pair of
11108    labels.  */
11109
11110 static void
11111 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11112                       bool *added)
11113 {
11114   unsigned int in_use = ranges_by_label_in_use;
11115   unsigned int offset;
11116
11117   if (in_use == ranges_by_label_allocated)
11118     {
11119       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11120       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11121                                        ranges_by_label,
11122                                        ranges_by_label_allocated);
11123       memset (ranges_by_label + ranges_by_label_in_use, 0,
11124               RANGES_TABLE_INCREMENT
11125               * sizeof (struct dw_ranges_by_label_struct));
11126     }
11127
11128   ranges_by_label[in_use].begin = begin;
11129   ranges_by_label[in_use].end = end;
11130   ranges_by_label_in_use = in_use + 1;
11131
11132   offset = add_ranges_num (-(int)in_use - 1);
11133   if (!*added)
11134     {
11135       add_AT_range_list (die, DW_AT_ranges, offset);
11136       *added = true;
11137     }
11138 }
11139
11140 static void
11141 output_ranges (void)
11142 {
11143   unsigned i;
11144   static const char *const start_fmt = "Offset %#x";
11145   const char *fmt = start_fmt;
11146
11147   for (i = 0; i < ranges_table_in_use; i++)
11148     {
11149       int block_num = ranges_table[i].num;
11150
11151       if (block_num > 0)
11152         {
11153           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11154           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11155
11156           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11157           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11158
11159           /* If all code is in the text section, then the compilation
11160              unit base address defaults to DW_AT_low_pc, which is the
11161              base of the text section.  */
11162           if (!have_multiple_function_sections)
11163             {
11164               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11165                                     text_section_label,
11166                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11167               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11168                                     text_section_label, NULL);
11169             }
11170
11171           /* Otherwise, the compilation unit base address is zero,
11172              which allows us to use absolute addresses, and not worry
11173              about whether the target supports cross-section
11174              arithmetic.  */
11175           else
11176             {
11177               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11178                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11179               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11180             }
11181
11182           fmt = NULL;
11183         }
11184
11185       /* Negative block_num stands for an index into ranges_by_label.  */
11186       else if (block_num < 0)
11187         {
11188           int lab_idx = - block_num - 1;
11189
11190           if (!have_multiple_function_sections)
11191             {
11192               gcc_unreachable ();
11193 #if 0
11194               /* If we ever use add_ranges_by_labels () for a single
11195                  function section, all we have to do is to take out
11196                  the #if 0 above.  */
11197               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11198                                     ranges_by_label[lab_idx].begin,
11199                                     text_section_label,
11200                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11201               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11202                                     ranges_by_label[lab_idx].end,
11203                                     text_section_label, NULL);
11204 #endif
11205             }
11206           else
11207             {
11208               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11209                                    ranges_by_label[lab_idx].begin,
11210                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11211               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11212                                    ranges_by_label[lab_idx].end,
11213                                    NULL);
11214             }
11215         }
11216       else
11217         {
11218           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11219           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11220           fmt = start_fmt;
11221         }
11222     }
11223 }
11224
11225 /* Data structure containing information about input files.  */
11226 struct file_info
11227 {
11228   const char *path;     /* Complete file name.  */
11229   const char *fname;    /* File name part.  */
11230   int length;           /* Length of entire string.  */
11231   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11232   int dir_idx;          /* Index in directory table.  */
11233 };
11234
11235 /* Data structure containing information about directories with source
11236    files.  */
11237 struct dir_info
11238 {
11239   const char *path;     /* Path including directory name.  */
11240   int length;           /* Path length.  */
11241   int prefix;           /* Index of directory entry which is a prefix.  */
11242   int count;            /* Number of files in this directory.  */
11243   int dir_idx;          /* Index of directory used as base.  */
11244 };
11245
11246 /* Callback function for file_info comparison.  We sort by looking at
11247    the directories in the path.  */
11248
11249 static int
11250 file_info_cmp (const void *p1, const void *p2)
11251 {
11252   const struct file_info *const s1 = (const struct file_info *) p1;
11253   const struct file_info *const s2 = (const struct file_info *) p2;
11254   const unsigned char *cp1;
11255   const unsigned char *cp2;
11256
11257   /* Take care of file names without directories.  We need to make sure that
11258      we return consistent values to qsort since some will get confused if
11259      we return the same value when identical operands are passed in opposite
11260      orders.  So if neither has a directory, return 0 and otherwise return
11261      1 or -1 depending on which one has the directory.  */
11262   if ((s1->path == s1->fname || s2->path == s2->fname))
11263     return (s2->path == s2->fname) - (s1->path == s1->fname);
11264
11265   cp1 = (const unsigned char *) s1->path;
11266   cp2 = (const unsigned char *) s2->path;
11267
11268   while (1)
11269     {
11270       ++cp1;
11271       ++cp2;
11272       /* Reached the end of the first path?  If so, handle like above.  */
11273       if ((cp1 == (const unsigned char *) s1->fname)
11274           || (cp2 == (const unsigned char *) s2->fname))
11275         return ((cp2 == (const unsigned char *) s2->fname)
11276                 - (cp1 == (const unsigned char *) s1->fname));
11277
11278       /* Character of current path component the same?  */
11279       else if (*cp1 != *cp2)
11280         return *cp1 - *cp2;
11281     }
11282 }
11283
11284 struct file_name_acquire_data
11285 {
11286   struct file_info *files;
11287   int used_files;
11288   int max_files;
11289 };
11290
11291 /* Traversal function for the hash table.  */
11292
11293 static int
11294 file_name_acquire (void ** slot, void *data)
11295 {
11296   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11297   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11298   struct file_info *fi;
11299   const char *f;
11300
11301   gcc_assert (fnad->max_files >= d->emitted_number);
11302
11303   if (! d->emitted_number)
11304     return 1;
11305
11306   gcc_assert (fnad->max_files != fnad->used_files);
11307
11308   fi = fnad->files + fnad->used_files++;
11309
11310   /* Skip all leading "./".  */
11311   f = d->filename;
11312   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11313     f += 2;
11314
11315   /* Create a new array entry.  */
11316   fi->path = f;
11317   fi->length = strlen (f);
11318   fi->file_idx = d;
11319
11320   /* Search for the file name part.  */
11321   f = strrchr (f, DIR_SEPARATOR);
11322 #if defined (DIR_SEPARATOR_2)
11323   {
11324     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11325
11326     if (g != NULL)
11327       {
11328         if (f == NULL || f < g)
11329           f = g;
11330       }
11331   }
11332 #endif
11333
11334   fi->fname = f == NULL ? fi->path : f + 1;
11335   return 1;
11336 }
11337
11338 /* Output the directory table and the file name table.  We try to minimize
11339    the total amount of memory needed.  A heuristic is used to avoid large
11340    slowdowns with many input files.  */
11341
11342 static void
11343 output_file_names (void)
11344 {
11345   struct file_name_acquire_data fnad;
11346   int numfiles;
11347   struct file_info *files;
11348   struct dir_info *dirs;
11349   int *saved;
11350   int *savehere;
11351   int *backmap;
11352   int ndirs;
11353   int idx_offset;
11354   int i;
11355
11356   if (!last_emitted_file)
11357     {
11358       dw2_asm_output_data (1, 0, "End directory table");
11359       dw2_asm_output_data (1, 0, "End file name table");
11360       return;
11361     }
11362
11363   numfiles = last_emitted_file->emitted_number;
11364
11365   /* Allocate the various arrays we need.  */
11366   files = XALLOCAVEC (struct file_info, numfiles);
11367   dirs = XALLOCAVEC (struct dir_info, numfiles);
11368
11369   fnad.files = files;
11370   fnad.used_files = 0;
11371   fnad.max_files = numfiles;
11372   htab_traverse (file_table, file_name_acquire, &fnad);
11373   gcc_assert (fnad.used_files == fnad.max_files);
11374
11375   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11376
11377   /* Find all the different directories used.  */
11378   dirs[0].path = files[0].path;
11379   dirs[0].length = files[0].fname - files[0].path;
11380   dirs[0].prefix = -1;
11381   dirs[0].count = 1;
11382   dirs[0].dir_idx = 0;
11383   files[0].dir_idx = 0;
11384   ndirs = 1;
11385
11386   for (i = 1; i < numfiles; i++)
11387     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11388         && memcmp (dirs[ndirs - 1].path, files[i].path,
11389                    dirs[ndirs - 1].length) == 0)
11390       {
11391         /* Same directory as last entry.  */
11392         files[i].dir_idx = ndirs - 1;
11393         ++dirs[ndirs - 1].count;
11394       }
11395     else
11396       {
11397         int j;
11398
11399         /* This is a new directory.  */
11400         dirs[ndirs].path = files[i].path;
11401         dirs[ndirs].length = files[i].fname - files[i].path;
11402         dirs[ndirs].count = 1;
11403         dirs[ndirs].dir_idx = ndirs;
11404         files[i].dir_idx = ndirs;
11405
11406         /* Search for a prefix.  */
11407         dirs[ndirs].prefix = -1;
11408         for (j = 0; j < ndirs; j++)
11409           if (dirs[j].length < dirs[ndirs].length
11410               && dirs[j].length > 1
11411               && (dirs[ndirs].prefix == -1
11412                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11413               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11414             dirs[ndirs].prefix = j;
11415
11416         ++ndirs;
11417       }
11418
11419   /* Now to the actual work.  We have to find a subset of the directories which
11420      allow expressing the file name using references to the directory table
11421      with the least amount of characters.  We do not do an exhaustive search
11422      where we would have to check out every combination of every single
11423      possible prefix.  Instead we use a heuristic which provides nearly optimal
11424      results in most cases and never is much off.  */
11425   saved = XALLOCAVEC (int, ndirs);
11426   savehere = XALLOCAVEC (int, ndirs);
11427
11428   memset (saved, '\0', ndirs * sizeof (saved[0]));
11429   for (i = 0; i < ndirs; i++)
11430     {
11431       int j;
11432       int total;
11433
11434       /* We can always save some space for the current directory.  But this
11435          does not mean it will be enough to justify adding the directory.  */
11436       savehere[i] = dirs[i].length;
11437       total = (savehere[i] - saved[i]) * dirs[i].count;
11438
11439       for (j = i + 1; j < ndirs; j++)
11440         {
11441           savehere[j] = 0;
11442           if (saved[j] < dirs[i].length)
11443             {
11444               /* Determine whether the dirs[i] path is a prefix of the
11445                  dirs[j] path.  */
11446               int k;
11447
11448               k = dirs[j].prefix;
11449               while (k != -1 && k != (int) i)
11450                 k = dirs[k].prefix;
11451
11452               if (k == (int) i)
11453                 {
11454                   /* Yes it is.  We can possibly save some memory by
11455                      writing the filenames in dirs[j] relative to
11456                      dirs[i].  */
11457                   savehere[j] = dirs[i].length;
11458                   total += (savehere[j] - saved[j]) * dirs[j].count;
11459                 }
11460             }
11461         }
11462
11463       /* Check whether we can save enough to justify adding the dirs[i]
11464          directory.  */
11465       if (total > dirs[i].length + 1)
11466         {
11467           /* It's worthwhile adding.  */
11468           for (j = i; j < ndirs; j++)
11469             if (savehere[j] > 0)
11470               {
11471                 /* Remember how much we saved for this directory so far.  */
11472                 saved[j] = savehere[j];
11473
11474                 /* Remember the prefix directory.  */
11475                 dirs[j].dir_idx = i;
11476               }
11477         }
11478     }
11479
11480   /* Emit the directory name table.  */
11481   idx_offset = dirs[0].length > 0 ? 1 : 0;
11482   for (i = 1 - idx_offset; i < ndirs; i++)
11483     dw2_asm_output_nstring (dirs[i].path,
11484                             dirs[i].length
11485                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11486                             "Directory Entry: %#x", i + idx_offset);
11487
11488   dw2_asm_output_data (1, 0, "End directory table");
11489
11490   /* We have to emit them in the order of emitted_number since that's
11491      used in the debug info generation.  To do this efficiently we
11492      generate a back-mapping of the indices first.  */
11493   backmap = XALLOCAVEC (int, numfiles);
11494   for (i = 0; i < numfiles; i++)
11495     backmap[files[i].file_idx->emitted_number - 1] = i;
11496
11497   /* Now write all the file names.  */
11498   for (i = 0; i < numfiles; i++)
11499     {
11500       int file_idx = backmap[i];
11501       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11502
11503 #ifdef VMS_DEBUGGING_INFO
11504 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11505
11506       /* Setting these fields can lead to debugger miscomparisons,
11507          but VMS Debug requires them to be set correctly.  */
11508
11509       int ver;
11510       long long cdt;
11511       long siz;
11512       int maxfilelen = strlen (files[file_idx].path)
11513                                + dirs[dir_idx].length
11514                                + MAX_VMS_VERSION_LEN + 1;
11515       char *filebuf = XALLOCAVEC (char, maxfilelen);
11516
11517       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11518       snprintf (filebuf, maxfilelen, "%s;%d",
11519                 files[file_idx].path + dirs[dir_idx].length, ver);
11520
11521       dw2_asm_output_nstring
11522         (filebuf, -1, "File Entry: %#x", (unsigned) i + 1);
11523
11524       /* Include directory index.  */
11525       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11526
11527       /* Modification time.  */
11528       dw2_asm_output_data_uleb128
11529         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11530           ? cdt : 0,
11531          NULL);
11532
11533       /* File length in bytes.  */
11534       dw2_asm_output_data_uleb128
11535         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11536           ? siz : 0,
11537          NULL);
11538 #else
11539       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11540                               "File Entry: %#x", (unsigned) i + 1);
11541
11542       /* Include directory index.  */
11543       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11544
11545       /* Modification time.  */
11546       dw2_asm_output_data_uleb128 (0, NULL);
11547
11548       /* File length in bytes.  */
11549       dw2_asm_output_data_uleb128 (0, NULL);
11550 #endif
11551     }
11552
11553   dw2_asm_output_data (1, 0, "End file name table");
11554 }
11555
11556
11557 /* Output the source line number correspondence information.  This
11558    information goes into the .debug_line section.  */
11559
11560 static void
11561 output_line_info (void)
11562 {
11563   char l1[20], l2[20], p1[20], p2[20];
11564   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11565   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11566   unsigned opc;
11567   unsigned n_op_args;
11568   unsigned long lt_index;
11569   unsigned long current_line;
11570   long line_offset;
11571   long line_delta;
11572   unsigned long current_file;
11573   unsigned long function;
11574   int ver = dwarf_version;
11575
11576   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11577   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11578   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11579   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11580
11581   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11582     dw2_asm_output_data (4, 0xffffffff,
11583       "Initial length escape value indicating 64-bit DWARF extension");
11584   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11585                         "Length of Source Line Info");
11586   ASM_OUTPUT_LABEL (asm_out_file, l1);
11587
11588   dw2_asm_output_data (2, ver, "DWARF Version");
11589   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11590   ASM_OUTPUT_LABEL (asm_out_file, p1);
11591
11592   /* Define the architecture-dependent minimum instruction length (in
11593    bytes).  In this implementation of DWARF, this field is used for
11594    information purposes only.  Since GCC generates assembly language,
11595    we have no a priori knowledge of how many instruction bytes are
11596    generated for each source line, and therefore can use only the
11597    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11598    commands.  Accordingly, we fix this as `1', which is "correct
11599    enough" for all architectures, and don't let the target override.  */
11600   dw2_asm_output_data (1, 1,
11601                        "Minimum Instruction Length");
11602
11603   if (ver >= 4)
11604     dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN,
11605                          "Maximum Operations Per Instruction");
11606   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11607                        "Default is_stmt_start flag");
11608   dw2_asm_output_data (1, DWARF_LINE_BASE,
11609                        "Line Base Value (Special Opcodes)");
11610   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11611                        "Line Range Value (Special Opcodes)");
11612   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11613                        "Special Opcode Base");
11614
11615   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11616     {
11617       switch (opc)
11618         {
11619         case DW_LNS_advance_pc:
11620         case DW_LNS_advance_line:
11621         case DW_LNS_set_file:
11622         case DW_LNS_set_column:
11623         case DW_LNS_fixed_advance_pc:
11624           n_op_args = 1;
11625           break;
11626         default:
11627           n_op_args = 0;
11628           break;
11629         }
11630
11631       dw2_asm_output_data (1, n_op_args, "opcode: %#x has %d args",
11632                            opc, n_op_args);
11633     }
11634
11635   /* Write out the information about the files we use.  */
11636   output_file_names ();
11637   ASM_OUTPUT_LABEL (asm_out_file, p2);
11638
11639   /* We used to set the address register to the first location in the text
11640      section here, but that didn't accomplish anything since we already
11641      have a line note for the opening brace of the first function.  */
11642
11643   /* Generate the line number to PC correspondence table, encoded as
11644      a series of state machine operations.  */
11645   current_file = 1;
11646   current_line = 1;
11647
11648   if (cfun && in_cold_section_p)
11649     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11650   else
11651     strcpy (prev_line_label, text_section_label);
11652   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11653     {
11654       dw_line_info_ref line_info = &line_info_table[lt_index];
11655
11656 #if 0
11657       /* Disable this optimization for now; GDB wants to see two line notes
11658          at the beginning of a function so it can find the end of the
11659          prologue.  */
11660
11661       /* Don't emit anything for redundant notes.  Just updating the
11662          address doesn't accomplish anything, because we already assume
11663          that anything after the last address is this line.  */
11664       if (line_info->dw_line_num == current_line
11665           && line_info->dw_file_num == current_file)
11666         continue;
11667 #endif
11668
11669       /* Emit debug info for the address of the current line.
11670
11671          Unfortunately, we have little choice here currently, and must always
11672          use the most general form.  GCC does not know the address delta
11673          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11674          attributes which will give an upper bound on the address range.  We
11675          could perhaps use length attributes to determine when it is safe to
11676          use DW_LNS_fixed_advance_pc.  */
11677
11678       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11679       if (0)
11680         {
11681           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11682           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11683                                "DW_LNS_fixed_advance_pc");
11684           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11685         }
11686       else
11687         {
11688           /* This can handle any delta.  This takes
11689              4+DWARF2_ADDR_SIZE bytes.  */
11690           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11691           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11692           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11693           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11694         }
11695
11696       strcpy (prev_line_label, line_label);
11697
11698       /* Emit debug info for the source file of the current line, if
11699          different from the previous line.  */
11700       if (line_info->dw_file_num != current_file)
11701         {
11702           current_file = line_info->dw_file_num;
11703           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11704           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11705         }
11706
11707       /* Emit debug info for the current line number, choosing the encoding
11708          that uses the least amount of space.  */
11709       if (line_info->dw_line_num != current_line)
11710         {
11711           line_offset = line_info->dw_line_num - current_line;
11712           line_delta = line_offset - DWARF_LINE_BASE;
11713           current_line = line_info->dw_line_num;
11714           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11715             /* This can handle deltas from -10 to 234, using the current
11716                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11717                takes 1 byte.  */
11718             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11719                                  "line %lu", current_line);
11720           else
11721             {
11722               /* This can handle any delta.  This takes at least 4 bytes,
11723                  depending on the value being encoded.  */
11724               dw2_asm_output_data (1, DW_LNS_advance_line,
11725                                    "advance to line %lu", current_line);
11726               dw2_asm_output_data_sleb128 (line_offset, NULL);
11727               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11728             }
11729         }
11730       else
11731         /* We still need to start a new row, so output a copy insn.  */
11732         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11733     }
11734
11735   /* Emit debug info for the address of the end of the function.  */
11736   if (0)
11737     {
11738       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11739                            "DW_LNS_fixed_advance_pc");
11740       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11741     }
11742   else
11743     {
11744       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11745       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11746       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11747       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11748     }
11749
11750   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11751   dw2_asm_output_data_uleb128 (1, NULL);
11752   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11753
11754   function = 0;
11755   current_file = 1;
11756   current_line = 1;
11757   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11758     {
11759       dw_separate_line_info_ref line_info
11760         = &separate_line_info_table[lt_index];
11761
11762 #if 0
11763       /* Don't emit anything for redundant notes.  */
11764       if (line_info->dw_line_num == current_line
11765           && line_info->dw_file_num == current_file
11766           && line_info->function == function)
11767         goto cont;
11768 #endif
11769
11770       /* Emit debug info for the address of the current line.  If this is
11771          a new function, or the first line of a function, then we need
11772          to handle it differently.  */
11773       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11774                                    lt_index);
11775       if (function != line_info->function)
11776         {
11777           function = line_info->function;
11778
11779           /* Set the address register to the first line in the function.  */
11780           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11781           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11782           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11783           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11784         }
11785       else
11786         {
11787           /* ??? See the DW_LNS_advance_pc comment above.  */
11788           if (0)
11789             {
11790               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11791                                    "DW_LNS_fixed_advance_pc");
11792               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11793             }
11794           else
11795             {
11796               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11797               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11798               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11799               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11800             }
11801         }
11802
11803       strcpy (prev_line_label, line_label);
11804
11805       /* Emit debug info for the source file of the current line, if
11806          different from the previous line.  */
11807       if (line_info->dw_file_num != current_file)
11808         {
11809           current_file = line_info->dw_file_num;
11810           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11811           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11812         }
11813
11814       /* Emit debug info for the current line number, choosing the encoding
11815          that uses the least amount of space.  */
11816       if (line_info->dw_line_num != current_line)
11817         {
11818           line_offset = line_info->dw_line_num - current_line;
11819           line_delta = line_offset - DWARF_LINE_BASE;
11820           current_line = line_info->dw_line_num;
11821           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11822             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11823                                  "line %lu", current_line);
11824           else
11825             {
11826               dw2_asm_output_data (1, DW_LNS_advance_line,
11827                                    "advance to line %lu", current_line);
11828               dw2_asm_output_data_sleb128 (line_offset, NULL);
11829               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11830             }
11831         }
11832       else
11833         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11834
11835 #if 0
11836     cont:
11837 #endif
11838
11839       lt_index++;
11840
11841       /* If we're done with a function, end its sequence.  */
11842       if (lt_index == separate_line_info_table_in_use
11843           || separate_line_info_table[lt_index].function != function)
11844         {
11845           current_file = 1;
11846           current_line = 1;
11847
11848           /* Emit debug info for the address of the end of the function.  */
11849           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11850           if (0)
11851             {
11852               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11853                                    "DW_LNS_fixed_advance_pc");
11854               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11855             }
11856           else
11857             {
11858               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11859               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11860               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11861               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11862             }
11863
11864           /* Output the marker for the end of this sequence.  */
11865           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11866           dw2_asm_output_data_uleb128 (1, NULL);
11867           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11868         }
11869     }
11870
11871   /* Output the marker for the end of the line number info.  */
11872   ASM_OUTPUT_LABEL (asm_out_file, l2);
11873 }
11874
11875 /* Return the size of the .debug_dcall table for the compilation unit.  */
11876
11877 static unsigned long
11878 size_of_dcall_table (void)
11879 {
11880   unsigned long size;
11881   unsigned int i;
11882   dcall_entry *p;
11883   tree last_poc_decl = NULL;
11884
11885   /* Header:  version + debug info section pointer + pointer size.  */
11886   size = 2 + DWARF_OFFSET_SIZE + 1;
11887
11888   /* Each entry:  code label + DIE offset.  */
11889   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11890     {
11891       gcc_assert (p->targ_die != NULL);
11892       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11893       if (p->poc_decl != last_poc_decl)
11894         {
11895           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11896           gcc_assert (poc_die);
11897           last_poc_decl = p->poc_decl;
11898           if (poc_die)
11899             size += (DWARF_OFFSET_SIZE
11900                      + size_of_uleb128 (poc_die->die_offset));
11901         }
11902       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11903     }
11904
11905   return size;
11906 }
11907
11908 /* Output the direct call table used to disambiguate PC values when
11909    identical function have been merged.  */
11910
11911 static void
11912 output_dcall_table (void)
11913 {
11914   unsigned i;
11915   unsigned long dcall_length = size_of_dcall_table ();
11916   dcall_entry *p;
11917   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11918   tree last_poc_decl = NULL;
11919
11920   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11921     dw2_asm_output_data (4, 0xffffffff,
11922       "Initial length escape value indicating 64-bit DWARF extension");
11923   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11924                        "Length of Direct Call Table");
11925   dw2_asm_output_data (2, 4, "Version number");
11926   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11927                          debug_info_section,
11928                          "Offset of Compilation Unit Info");
11929   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11930
11931   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11932     {
11933       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11934       if (p->poc_decl != last_poc_decl)
11935         {
11936           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11937           last_poc_decl = p->poc_decl;
11938           if (poc_die)
11939             {
11940               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11941               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11942                                            "Caller DIE offset");
11943             }
11944         }
11945       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11946       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11947       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11948                                    "Callee DIE offset");
11949     }
11950 }
11951 \f
11952 /* Return the size of the .debug_vcall table for the compilation unit.  */
11953
11954 static unsigned long
11955 size_of_vcall_table (void)
11956 {
11957   unsigned long size;
11958   unsigned int i;
11959   vcall_entry *p;
11960
11961   /* Header:  version + pointer size.  */
11962   size = 2 + 1;
11963
11964   /* Each entry:  code label + vtable slot index.  */
11965   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11966     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11967
11968   return size;
11969 }
11970
11971 /* Output the virtual call table used to disambiguate PC values when
11972    identical function have been merged.  */
11973
11974 static void
11975 output_vcall_table (void)
11976 {
11977   unsigned i;
11978   unsigned long vcall_length = size_of_vcall_table ();
11979   vcall_entry *p;
11980   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11981
11982   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11983     dw2_asm_output_data (4, 0xffffffff,
11984       "Initial length escape value indicating 64-bit DWARF extension");
11985   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11986                        "Length of Virtual Call Table");
11987   dw2_asm_output_data (2, 4, "Version number");
11988   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11989
11990   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11991     {
11992       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11993       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11994       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11995     }
11996 }
11997 \f
11998 /* Given a pointer to a tree node for some base type, return a pointer to
11999    a DIE that describes the given type.
12000
12001    This routine must only be called for GCC type nodes that correspond to
12002    Dwarf base (fundamental) types.  */
12003
12004 static dw_die_ref
12005 base_type_die (tree type)
12006 {
12007   dw_die_ref base_type_result;
12008   enum dwarf_type encoding;
12009
12010   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
12011     return 0;
12012
12013   /* If this is a subtype that should not be emitted as a subrange type,
12014      use the base type.  See subrange_type_for_debug_p.  */
12015   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
12016     type = TREE_TYPE (type);
12017
12018   switch (TREE_CODE (type))
12019     {
12020     case INTEGER_TYPE:
12021       if (TYPE_STRING_FLAG (type))
12022         {
12023           if (TYPE_UNSIGNED (type))
12024             encoding = DW_ATE_unsigned_char;
12025           else
12026             encoding = DW_ATE_signed_char;
12027         }
12028       else if (TYPE_UNSIGNED (type))
12029         encoding = DW_ATE_unsigned;
12030       else
12031         encoding = DW_ATE_signed;
12032       break;
12033
12034     case REAL_TYPE:
12035       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12036         {
12037           if (dwarf_version >= 3 || !dwarf_strict)
12038             encoding = DW_ATE_decimal_float;
12039           else
12040             encoding = DW_ATE_lo_user;
12041         }
12042       else
12043         encoding = DW_ATE_float;
12044       break;
12045
12046     case FIXED_POINT_TYPE:
12047       if (!(dwarf_version >= 3 || !dwarf_strict))
12048         encoding = DW_ATE_lo_user;
12049       else if (TYPE_UNSIGNED (type))
12050         encoding = DW_ATE_unsigned_fixed;
12051       else
12052         encoding = DW_ATE_signed_fixed;
12053       break;
12054
12055       /* Dwarf2 doesn't know anything about complex ints, so use
12056          a user defined type for it.  */
12057     case COMPLEX_TYPE:
12058       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12059         encoding = DW_ATE_complex_float;
12060       else
12061         encoding = DW_ATE_lo_user;
12062       break;
12063
12064     case BOOLEAN_TYPE:
12065       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12066       encoding = DW_ATE_boolean;
12067       break;
12068
12069     default:
12070       /* No other TREE_CODEs are Dwarf fundamental types.  */
12071       gcc_unreachable ();
12072     }
12073
12074   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12075
12076   /* This probably indicates a bug.  */
12077   if (! TYPE_NAME (type))
12078     add_name_attribute (base_type_result, "__unknown__");
12079
12080   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12081                    int_size_in_bytes (type));
12082   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12083
12084   return base_type_result;
12085 }
12086
12087 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12088    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12089
12090 static inline int
12091 is_base_type (tree type)
12092 {
12093   switch (TREE_CODE (type))
12094     {
12095     case ERROR_MARK:
12096     case VOID_TYPE:
12097     case INTEGER_TYPE:
12098     case REAL_TYPE:
12099     case FIXED_POINT_TYPE:
12100     case COMPLEX_TYPE:
12101     case BOOLEAN_TYPE:
12102       return 1;
12103
12104     case ARRAY_TYPE:
12105     case RECORD_TYPE:
12106     case UNION_TYPE:
12107     case QUAL_UNION_TYPE:
12108     case ENUMERAL_TYPE:
12109     case FUNCTION_TYPE:
12110     case METHOD_TYPE:
12111     case POINTER_TYPE:
12112     case REFERENCE_TYPE:
12113     case OFFSET_TYPE:
12114     case LANG_TYPE:
12115     case VECTOR_TYPE:
12116       return 0;
12117
12118     default:
12119       gcc_unreachable ();
12120     }
12121
12122   return 0;
12123 }
12124
12125 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12126    node, return the size in bits for the type if it is a constant, or else
12127    return the alignment for the type if the type's size is not constant, or
12128    else return BITS_PER_WORD if the type actually turns out to be an
12129    ERROR_MARK node.  */
12130
12131 static inline unsigned HOST_WIDE_INT
12132 simple_type_size_in_bits (const_tree type)
12133 {
12134   if (TREE_CODE (type) == ERROR_MARK)
12135     return BITS_PER_WORD;
12136   else if (TYPE_SIZE (type) == NULL_TREE)
12137     return 0;
12138   else if (host_integerp (TYPE_SIZE (type), 1))
12139     return tree_low_cst (TYPE_SIZE (type), 1);
12140   else
12141     return TYPE_ALIGN (type);
12142 }
12143
12144 /*  Given a pointer to a tree node for a subrange type, return a pointer
12145     to a DIE that describes the given type.  */
12146
12147 static dw_die_ref
12148 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12149 {
12150   dw_die_ref subrange_die;
12151   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12152
12153   if (context_die == NULL)
12154     context_die = comp_unit_die;
12155
12156   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12157
12158   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12159     {
12160       /* The size of the subrange type and its base type do not match,
12161          so we need to generate a size attribute for the subrange type.  */
12162       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12163     }
12164
12165   if (low)
12166     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12167   if (high)
12168     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12169
12170   return subrange_die;
12171 }
12172
12173 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12174    entry that chains various modifiers in front of the given type.  */
12175
12176 static dw_die_ref
12177 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12178                    dw_die_ref context_die)
12179 {
12180   enum tree_code code = TREE_CODE (type);
12181   dw_die_ref mod_type_die;
12182   dw_die_ref sub_die = NULL;
12183   tree item_type = NULL;
12184   tree qualified_type;
12185   tree name, low, high;
12186
12187   if (code == ERROR_MARK)
12188     return NULL;
12189
12190   /* See if we already have the appropriately qualified variant of
12191      this type.  */
12192   qualified_type
12193     = get_qualified_type (type,
12194                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12195                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12196
12197   /* If we do, then we can just use its DIE, if it exists.  */
12198   if (qualified_type)
12199     {
12200       mod_type_die = lookup_type_die (qualified_type);
12201       if (mod_type_die)
12202         return mod_type_die;
12203     }
12204
12205   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12206
12207   /* Handle C typedef types.  */
12208   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name)
12209       && !DECL_ARTIFICIAL (name))
12210     {
12211       tree dtype = TREE_TYPE (name);
12212
12213       if (qualified_type == dtype)
12214         {
12215           /* For a named type, use the typedef.  */
12216           gen_type_die (qualified_type, context_die);
12217           return lookup_type_die (qualified_type);
12218         }
12219       else if (is_const_type < TYPE_READONLY (dtype)
12220                || is_volatile_type < TYPE_VOLATILE (dtype)
12221                || (is_const_type <= TYPE_READONLY (dtype)
12222                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12223                    && DECL_ORIGINAL_TYPE (name) != type))
12224         /* cv-unqualified version of named type.  Just use the unnamed
12225            type to which it refers.  */
12226         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12227                                   is_const_type, is_volatile_type,
12228                                   context_die);
12229       /* Else cv-qualified version of named type; fall through.  */
12230     }
12231
12232   if (is_const_type)
12233     {
12234       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12235       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12236     }
12237   else if (is_volatile_type)
12238     {
12239       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12240       sub_die = modified_type_die (type, 0, 0, context_die);
12241     }
12242   else if (code == POINTER_TYPE)
12243     {
12244       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12245       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12246                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12247       item_type = TREE_TYPE (type);
12248       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12249         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12250                          TYPE_ADDR_SPACE (item_type));
12251     }
12252   else if (code == REFERENCE_TYPE)
12253     {
12254       if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
12255         mod_type_die = new_die (DW_TAG_rvalue_reference_type, comp_unit_die,
12256                                 type);
12257       else
12258         mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12259       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12260                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12261       item_type = TREE_TYPE (type);
12262       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12263         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12264                          TYPE_ADDR_SPACE (item_type));
12265     }
12266   else if (code == INTEGER_TYPE
12267            && TREE_TYPE (type) != NULL_TREE
12268            && subrange_type_for_debug_p (type, &low, &high))
12269     {
12270       mod_type_die = subrange_type_die (type, low, high, context_die);
12271       item_type = TREE_TYPE (type);
12272     }
12273   else if (is_base_type (type))
12274     mod_type_die = base_type_die (type);
12275   else
12276     {
12277       gen_type_die (type, context_die);
12278
12279       /* We have to get the type_main_variant here (and pass that to the
12280          `lookup_type_die' routine) because the ..._TYPE node we have
12281          might simply be a *copy* of some original type node (where the
12282          copy was created to help us keep track of typedef names) and
12283          that copy might have a different TYPE_UID from the original
12284          ..._TYPE node.  */
12285       if (TREE_CODE (type) != VECTOR_TYPE)
12286         return lookup_type_die (type_main_variant (type));
12287       else
12288         /* Vectors have the debugging information in the type,
12289            not the main variant.  */
12290         return lookup_type_die (type);
12291     }
12292
12293   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12294      don't output a DW_TAG_typedef, since there isn't one in the
12295      user's program; just attach a DW_AT_name to the type.
12296      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12297      if the base type already has the same name.  */
12298   if (name
12299       && ((TREE_CODE (name) != TYPE_DECL
12300            && (qualified_type == TYPE_MAIN_VARIANT (type)
12301                || (!is_const_type && !is_volatile_type)))
12302           || (TREE_CODE (name) == TYPE_DECL
12303               && TREE_TYPE (name) == qualified_type
12304               && DECL_NAME (name))))
12305     {
12306       if (TREE_CODE (name) == TYPE_DECL)
12307         /* Could just call add_name_and_src_coords_attributes here,
12308            but since this is a builtin type it doesn't have any
12309            useful source coordinates anyway.  */
12310         name = DECL_NAME (name);
12311       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12312     }
12313
12314   if (qualified_type)
12315     equate_type_number_to_die (qualified_type, mod_type_die);
12316
12317   if (item_type)
12318     /* We must do this after the equate_type_number_to_die call, in case
12319        this is a recursive type.  This ensures that the modified_type_die
12320        recursion will terminate even if the type is recursive.  Recursive
12321        types are possible in Ada.  */
12322     sub_die = modified_type_die (item_type,
12323                                  TYPE_READONLY (item_type),
12324                                  TYPE_VOLATILE (item_type),
12325                                  context_die);
12326
12327   if (sub_die != NULL)
12328     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12329
12330   return mod_type_die;
12331 }
12332
12333 /* Generate DIEs for the generic parameters of T.
12334    T must be either a generic type or a generic function.
12335    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12336
12337 static void
12338 gen_generic_params_dies (tree t)
12339 {
12340   tree parms, args;
12341   int parms_num, i;
12342   dw_die_ref die = NULL;
12343
12344   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12345     return;
12346
12347   if (TYPE_P (t))
12348     die = lookup_type_die (t);
12349   else if (DECL_P (t))
12350     die = lookup_decl_die (t);
12351
12352   gcc_assert (die);
12353
12354   parms = lang_hooks.get_innermost_generic_parms (t);
12355   if (!parms)
12356     /* T has no generic parameter. It means T is neither a generic type
12357        or function. End of story.  */
12358     return;
12359
12360   parms_num = TREE_VEC_LENGTH (parms);
12361   args = lang_hooks.get_innermost_generic_args (t);
12362   for (i = 0; i < parms_num; i++)
12363     {
12364       tree parm, arg, arg_pack_elems;
12365
12366       parm = TREE_VEC_ELT (parms, i);
12367       arg = TREE_VEC_ELT (args, i);
12368       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12369       gcc_assert (parm && TREE_VALUE (parm) && arg);
12370
12371       if (parm && TREE_VALUE (parm) && arg)
12372         {
12373           /* If PARM represents a template parameter pack,
12374              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12375              by DW_TAG_template_*_parameter DIEs for the argument
12376              pack elements of ARG. Note that ARG would then be
12377              an argument pack.  */
12378           if (arg_pack_elems)
12379             template_parameter_pack_die (TREE_VALUE (parm),
12380                                          arg_pack_elems,
12381                                          die);
12382           else
12383             generic_parameter_die (TREE_VALUE (parm), arg,
12384                                    true /* Emit DW_AT_name */, die);
12385         }
12386     }
12387 }
12388
12389 /* Create and return a DIE for PARM which should be
12390    the representation of a generic type parameter.
12391    For instance, in the C++ front end, PARM would be a template parameter.
12392    ARG is the argument to PARM.
12393    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12394    name of the PARM.
12395    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12396    as a child node.  */
12397
12398 static dw_die_ref
12399 generic_parameter_die (tree parm, tree arg,
12400                        bool emit_name_p,
12401                        dw_die_ref parent_die)
12402 {
12403   dw_die_ref tmpl_die = NULL;
12404   const char *name = NULL;
12405
12406   if (!parm || !DECL_NAME (parm) || !arg)
12407     return NULL;
12408
12409   /* We support non-type generic parameters and arguments,
12410      type generic parameters and arguments, as well as
12411      generic generic parameters (a.k.a. template template parameters in C++)
12412      and arguments.  */
12413   if (TREE_CODE (parm) == PARM_DECL)
12414     /* PARM is a nontype generic parameter  */
12415     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12416   else if (TREE_CODE (parm) == TYPE_DECL)
12417     /* PARM is a type generic parameter.  */
12418     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12419   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12420     /* PARM is a generic generic parameter.
12421        Its DIE is a GNU extension. It shall have a
12422        DW_AT_name attribute to represent the name of the template template
12423        parameter, and a DW_AT_GNU_template_name attribute to represent the
12424        name of the template template argument.  */
12425     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12426                         parent_die, parm);
12427   else
12428     gcc_unreachable ();
12429
12430   if (tmpl_die)
12431     {
12432       tree tmpl_type;
12433
12434       /* If PARM is a generic parameter pack, it means we are
12435          emitting debug info for a template argument pack element.
12436          In other terms, ARG is a template argument pack element.
12437          In that case, we don't emit any DW_AT_name attribute for
12438          the die.  */
12439       if (emit_name_p)
12440         {
12441           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12442           gcc_assert (name);
12443           add_AT_string (tmpl_die, DW_AT_name, name);
12444         }
12445
12446       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12447         {
12448           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12449              TMPL_DIE should have a child DW_AT_type attribute that is set
12450              to the type of the argument to PARM, which is ARG.
12451              If PARM is a type generic parameter, TMPL_DIE should have a
12452              child DW_AT_type that is set to ARG.  */
12453           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12454           add_type_attribute (tmpl_die, tmpl_type, 0,
12455                               TREE_THIS_VOLATILE (tmpl_type),
12456                               parent_die);
12457         }
12458       else
12459         {
12460           /* So TMPL_DIE is a DIE representing a
12461              a generic generic template parameter, a.k.a template template
12462              parameter in C++ and arg is a template.  */
12463
12464           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12465              to the name of the argument.  */
12466           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12467           if (name)
12468             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12469         }
12470
12471       if (TREE_CODE (parm) == PARM_DECL)
12472         /* So PARM is a non-type generic parameter.
12473            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12474            attribute of TMPL_DIE which value represents the value
12475            of ARG.
12476            We must be careful here:
12477            The value of ARG might reference some function decls.
12478            We might currently be emitting debug info for a generic
12479            type and types are emitted before function decls, we don't
12480            know if the function decls referenced by ARG will actually be
12481            emitted after cgraph computations.
12482            So must defer the generation of the DW_AT_const_value to
12483            after cgraph is ready.  */
12484         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12485     }
12486
12487   return tmpl_die;
12488 }
12489
12490 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12491    PARM_PACK must be a template parameter pack. The returned DIE
12492    will be child DIE of PARENT_DIE.  */
12493
12494 static dw_die_ref
12495 template_parameter_pack_die (tree parm_pack,
12496                              tree parm_pack_args,
12497                              dw_die_ref parent_die)
12498 {
12499   dw_die_ref die;
12500   int j;
12501
12502   gcc_assert (parent_die && parm_pack);
12503
12504   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12505   add_name_and_src_coords_attributes (die, parm_pack);
12506   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12507     generic_parameter_die (parm_pack,
12508                            TREE_VEC_ELT (parm_pack_args, j),
12509                            false /* Don't emit DW_AT_name */,
12510                            die);
12511   return die;
12512 }
12513
12514 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12515    an enumerated type.  */
12516
12517 static inline int
12518 type_is_enum (const_tree type)
12519 {
12520   return TREE_CODE (type) == ENUMERAL_TYPE;
12521 }
12522
12523 /* Return the DBX register number described by a given RTL node.  */
12524
12525 static unsigned int
12526 dbx_reg_number (const_rtx rtl)
12527 {
12528   unsigned regno = REGNO (rtl);
12529
12530   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12531
12532 #ifdef LEAF_REG_REMAP
12533   if (current_function_uses_only_leaf_regs)
12534     {
12535       int leaf_reg = LEAF_REG_REMAP (regno);
12536       if (leaf_reg != -1)
12537         regno = (unsigned) leaf_reg;
12538     }
12539 #endif
12540
12541   return DBX_REGISTER_NUMBER (regno);
12542 }
12543
12544 /* Optionally add a DW_OP_piece term to a location description expression.
12545    DW_OP_piece is only added if the location description expression already
12546    doesn't end with DW_OP_piece.  */
12547
12548 static void
12549 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12550 {
12551   dw_loc_descr_ref loc;
12552
12553   if (*list_head != NULL)
12554     {
12555       /* Find the end of the chain.  */
12556       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12557         ;
12558
12559       if (loc->dw_loc_opc != DW_OP_piece)
12560         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12561     }
12562 }
12563
12564 /* Return a location descriptor that designates a machine register or
12565    zero if there is none.  */
12566
12567 static dw_loc_descr_ref
12568 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12569 {
12570   rtx regs;
12571
12572   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12573     return 0;
12574
12575   regs = targetm.dwarf_register_span (rtl);
12576
12577   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12578     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12579   else
12580     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12581 }
12582
12583 /* Return a location descriptor that designates a machine register for
12584    a given hard register number.  */
12585
12586 static dw_loc_descr_ref
12587 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12588 {
12589   dw_loc_descr_ref reg_loc_descr;
12590
12591   if (regno <= 31)
12592     reg_loc_descr
12593       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12594   else
12595     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12596
12597   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12598     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12599
12600   return reg_loc_descr;
12601 }
12602
12603 /* Given an RTL of a register, return a location descriptor that
12604    designates a value that spans more than one register.  */
12605
12606 static dw_loc_descr_ref
12607 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12608                              enum var_init_status initialized)
12609 {
12610   int nregs, size, i;
12611   unsigned reg;
12612   dw_loc_descr_ref loc_result = NULL;
12613
12614   reg = REGNO (rtl);
12615 #ifdef LEAF_REG_REMAP
12616   if (current_function_uses_only_leaf_regs)
12617     {
12618       int leaf_reg = LEAF_REG_REMAP (reg);
12619       if (leaf_reg != -1)
12620         reg = (unsigned) leaf_reg;
12621     }
12622 #endif
12623   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12624   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12625
12626   /* Simple, contiguous registers.  */
12627   if (regs == NULL_RTX)
12628     {
12629       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12630
12631       loc_result = NULL;
12632       while (nregs--)
12633         {
12634           dw_loc_descr_ref t;
12635
12636           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12637                                       VAR_INIT_STATUS_INITIALIZED);
12638           add_loc_descr (&loc_result, t);
12639           add_loc_descr_op_piece (&loc_result, size);
12640           ++reg;
12641         }
12642       return loc_result;
12643     }
12644
12645   /* Now onto stupid register sets in non contiguous locations.  */
12646
12647   gcc_assert (GET_CODE (regs) == PARALLEL);
12648
12649   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12650   loc_result = NULL;
12651
12652   for (i = 0; i < XVECLEN (regs, 0); ++i)
12653     {
12654       dw_loc_descr_ref t;
12655
12656       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12657                                   VAR_INIT_STATUS_INITIALIZED);
12658       add_loc_descr (&loc_result, t);
12659       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12660       add_loc_descr_op_piece (&loc_result, size);
12661     }
12662
12663   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12664     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12665   return loc_result;
12666 }
12667
12668 #endif /* DWARF2_DEBUGGING_INFO */
12669
12670 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12671
12672 /* Return a location descriptor that designates a constant.  */
12673
12674 static dw_loc_descr_ref
12675 int_loc_descriptor (HOST_WIDE_INT i)
12676 {
12677   enum dwarf_location_atom op;
12678
12679   /* Pick the smallest representation of a constant, rather than just
12680      defaulting to the LEB encoding.  */
12681   if (i >= 0)
12682     {
12683       if (i <= 31)
12684         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12685       else if (i <= 0xff)
12686         op = DW_OP_const1u;
12687       else if (i <= 0xffff)
12688         op = DW_OP_const2u;
12689       else if (HOST_BITS_PER_WIDE_INT == 32
12690                || i <= 0xffffffff)
12691         op = DW_OP_const4u;
12692       else
12693         op = DW_OP_constu;
12694     }
12695   else
12696     {
12697       if (i >= -0x80)
12698         op = DW_OP_const1s;
12699       else if (i >= -0x8000)
12700         op = DW_OP_const2s;
12701       else if (HOST_BITS_PER_WIDE_INT == 32
12702                || i >= -0x80000000)
12703         op = DW_OP_const4s;
12704       else
12705         op = DW_OP_consts;
12706     }
12707
12708   return new_loc_descr (op, i, 0);
12709 }
12710 #endif
12711
12712 #ifdef DWARF2_DEBUGGING_INFO
12713 /* Return loc description representing "address" of integer value.
12714    This can appear only as toplevel expression.  */
12715
12716 static dw_loc_descr_ref
12717 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12718 {
12719   int litsize;
12720   dw_loc_descr_ref loc_result = NULL;
12721
12722   if (!(dwarf_version >= 4 || !dwarf_strict))
12723     return NULL;
12724
12725   if (i >= 0)
12726     {
12727       if (i <= 31)
12728         litsize = 1;
12729       else if (i <= 0xff)
12730         litsize = 2;
12731       else if (i <= 0xffff)
12732         litsize = 3;
12733       else if (HOST_BITS_PER_WIDE_INT == 32
12734                || i <= 0xffffffff)
12735         litsize = 5;
12736       else
12737         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12738     }
12739   else
12740     {
12741       if (i >= -0x80)
12742         litsize = 2;
12743       else if (i >= -0x8000)
12744         litsize = 3;
12745       else if (HOST_BITS_PER_WIDE_INT == 32
12746                || i >= -0x80000000)
12747         litsize = 5;
12748       else
12749         litsize = 1 + size_of_sleb128 (i);
12750     }
12751   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12752      is more compact.  For DW_OP_stack_value we need:
12753      litsize + 1 (DW_OP_stack_value)
12754      and for DW_OP_implicit_value:
12755      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12756   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12757     {
12758       loc_result = int_loc_descriptor (i);
12759       add_loc_descr (&loc_result,
12760                      new_loc_descr (DW_OP_stack_value, 0, 0));
12761       return loc_result;
12762     }
12763
12764   loc_result = new_loc_descr (DW_OP_implicit_value,
12765                               size, 0);
12766   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12767   loc_result->dw_loc_oprnd2.v.val_int = i;
12768   return loc_result;
12769 }
12770
12771 /* Return a location descriptor that designates a base+offset location.  */
12772
12773 static dw_loc_descr_ref
12774 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12775                  enum var_init_status initialized)
12776 {
12777   unsigned int regno;
12778   dw_loc_descr_ref result;
12779   dw_fde_ref fde = current_fde ();
12780
12781   /* We only use "frame base" when we're sure we're talking about the
12782      post-prologue local stack frame.  We do this by *not* running
12783      register elimination until this point, and recognizing the special
12784      argument pointer and soft frame pointer rtx's.  */
12785   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12786     {
12787       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12788
12789       if (elim != reg)
12790         {
12791           if (GET_CODE (elim) == PLUS)
12792             {
12793               offset += INTVAL (XEXP (elim, 1));
12794               elim = XEXP (elim, 0);
12795             }
12796           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12797                        && (elim == hard_frame_pointer_rtx
12798                            || elim == stack_pointer_rtx))
12799                       || elim == (frame_pointer_needed
12800                                   ? hard_frame_pointer_rtx
12801                                   : stack_pointer_rtx));
12802
12803           /* If drap register is used to align stack, use frame
12804              pointer + offset to access stack variables.  If stack
12805              is aligned without drap, use stack pointer + offset to
12806              access stack variables.  */
12807           if (crtl->stack_realign_tried
12808               && reg == frame_pointer_rtx)
12809             {
12810               int base_reg
12811                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12812                                       ? HARD_FRAME_POINTER_REGNUM
12813                                       : STACK_POINTER_REGNUM);
12814               return new_reg_loc_descr (base_reg, offset);
12815             }
12816
12817           offset += frame_pointer_fb_offset;
12818           return new_loc_descr (DW_OP_fbreg, offset, 0);
12819         }
12820     }
12821   else if (!optimize
12822            && fde
12823            && (fde->drap_reg == REGNO (reg)
12824                || fde->vdrap_reg == REGNO (reg)))
12825     {
12826       /* Use cfa+offset to represent the location of arguments passed
12827          on the stack when drap is used to align stack.
12828          Only do this when not optimizing, for optimized code var-tracking
12829          is supposed to track where the arguments live and the register
12830          used as vdrap or drap in some spot might be used for something
12831          else in other part of the routine.  */
12832       return new_loc_descr (DW_OP_fbreg, offset, 0);
12833     }
12834
12835   regno = dbx_reg_number (reg);
12836   if (regno <= 31)
12837     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12838                             offset, 0);
12839   else
12840     result = new_loc_descr (DW_OP_bregx, regno, offset);
12841
12842   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12843     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12844
12845   return result;
12846 }
12847
12848 /* Return true if this RTL expression describes a base+offset calculation.  */
12849
12850 static inline int
12851 is_based_loc (const_rtx rtl)
12852 {
12853   return (GET_CODE (rtl) == PLUS
12854           && ((REG_P (XEXP (rtl, 0))
12855                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12856                && CONST_INT_P (XEXP (rtl, 1)))));
12857 }
12858
12859 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12860    failed.  */
12861
12862 static dw_loc_descr_ref
12863 tls_mem_loc_descriptor (rtx mem)
12864 {
12865   tree base;
12866   dw_loc_descr_ref loc_result;
12867
12868   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12869     return NULL;
12870
12871   base = get_base_address (MEM_EXPR (mem));
12872   if (base == NULL
12873       || TREE_CODE (base) != VAR_DECL
12874       || !DECL_THREAD_LOCAL_P (base))
12875     return NULL;
12876
12877   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12878   if (loc_result == NULL)
12879     return NULL;
12880
12881   if (INTVAL (MEM_OFFSET (mem)))
12882     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12883
12884   return loc_result;
12885 }
12886
12887 /* Output debug info about reason why we failed to expand expression as dwarf
12888    expression.  */
12889
12890 static void
12891 expansion_failed (tree expr, rtx rtl, char const *reason)
12892 {
12893   if (dump_file && (dump_flags & TDF_DETAILS))
12894     {
12895       fprintf (dump_file, "Failed to expand as dwarf: ");
12896       if (expr)
12897         print_generic_expr (dump_file, expr, dump_flags);
12898       if (rtl)
12899         {
12900           fprintf (dump_file, "\n");
12901           print_rtl (dump_file, rtl);
12902         }
12903       fprintf (dump_file, "\nReason: %s\n", reason);
12904     }
12905 }
12906
12907 /* Helper function for const_ok_for_output, called either directly
12908    or via for_each_rtx.  */
12909
12910 static int
12911 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12912 {
12913   rtx rtl = *rtlp;
12914
12915   if (GET_CODE (rtl) == UNSPEC)
12916     {
12917       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12918          we can't express it in the debug info.  */
12919 #ifdef ENABLE_CHECKING
12920       inform (current_function_decl
12921               ? DECL_SOURCE_LOCATION (current_function_decl)
12922               : UNKNOWN_LOCATION,
12923               "non-delegitimized UNSPEC %d found in variable location",
12924               XINT (rtl, 1));
12925 #endif
12926       expansion_failed (NULL_TREE, rtl,
12927                         "UNSPEC hasn't been delegitimized.\n");
12928       return 1;
12929     }
12930
12931   if (GET_CODE (rtl) != SYMBOL_REF)
12932     return 0;
12933
12934   if (CONSTANT_POOL_ADDRESS_P (rtl))
12935     {
12936       bool marked;
12937       get_pool_constant_mark (rtl, &marked);
12938       /* If all references to this pool constant were optimized away,
12939          it was not output and thus we can't represent it.  */
12940       if (!marked)
12941         {
12942           expansion_failed (NULL_TREE, rtl,
12943                             "Constant was removed from constant pool.\n");
12944           return 1;
12945         }
12946     }
12947
12948   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12949     return 1;
12950
12951   /* Avoid references to external symbols in debug info, on several targets
12952      the linker might even refuse to link when linking a shared library,
12953      and in many other cases the relocations for .debug_info/.debug_loc are
12954      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12955      to be defined within the same shared library or executable are fine.  */
12956   if (SYMBOL_REF_EXTERNAL_P (rtl))
12957     {
12958       tree decl = SYMBOL_REF_DECL (rtl);
12959
12960       if (decl == NULL || !targetm.binds_local_p (decl))
12961         {
12962           expansion_failed (NULL_TREE, rtl,
12963                             "Symbol not defined in current TU.\n");
12964           return 1;
12965         }
12966     }
12967
12968   return 0;
12969 }
12970
12971 /* Return true if constant RTL can be emitted in DW_OP_addr or
12972    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12973    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12974
12975 static bool
12976 const_ok_for_output (rtx rtl)
12977 {
12978   if (GET_CODE (rtl) == SYMBOL_REF)
12979     return const_ok_for_output_1 (&rtl, NULL) == 0;
12980
12981   if (GET_CODE (rtl) == CONST)
12982     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12983
12984   return true;
12985 }
12986
12987 /* The following routine converts the RTL for a variable or parameter
12988    (resident in memory) into an equivalent Dwarf representation of a
12989    mechanism for getting the address of that same variable onto the top of a
12990    hypothetical "address evaluation" stack.
12991
12992    When creating memory location descriptors, we are effectively transforming
12993    the RTL for a memory-resident object into its Dwarf postfix expression
12994    equivalent.  This routine recursively descends an RTL tree, turning
12995    it into Dwarf postfix code as it goes.
12996
12997    MODE is the mode of the memory reference, needed to handle some
12998    autoincrement addressing modes.
12999
13000    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
13001    location list for RTL.
13002
13003    Return 0 if we can't represent the location.  */
13004
13005 static dw_loc_descr_ref
13006 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
13007                     enum var_init_status initialized)
13008 {
13009   dw_loc_descr_ref mem_loc_result = NULL;
13010   enum dwarf_location_atom op;
13011   dw_loc_descr_ref op0, op1;
13012
13013   /* Note that for a dynamically sized array, the location we will generate a
13014      description of here will be the lowest numbered location which is
13015      actually within the array.  That's *not* necessarily the same as the
13016      zeroth element of the array.  */
13017
13018   rtl = targetm.delegitimize_address (rtl);
13019
13020   switch (GET_CODE (rtl))
13021     {
13022     case POST_INC:
13023     case POST_DEC:
13024     case POST_MODIFY:
13025       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
13026
13027     case SUBREG:
13028       /* The case of a subreg may arise when we have a local (register)
13029          variable or a formal (register) parameter which doesn't quite fill
13030          up an entire register.  For now, just assume that it is
13031          legitimate to make the Dwarf info refer to the whole register which
13032          contains the given subreg.  */
13033       if (!subreg_lowpart_p (rtl))
13034         break;
13035       rtl = SUBREG_REG (rtl);
13036       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13037         break;
13038       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13039         break;
13040       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13041       break;
13042
13043     case REG:
13044       /* Whenever a register number forms a part of the description of the
13045          method for calculating the (dynamic) address of a memory resident
13046          object, DWARF rules require the register number be referred to as
13047          a "base register".  This distinction is not based in any way upon
13048          what category of register the hardware believes the given register
13049          belongs to.  This is strictly DWARF terminology we're dealing with
13050          here. Note that in cases where the location of a memory-resident
13051          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13052          OP_CONST (0)) the actual DWARF location descriptor that we generate
13053          may just be OP_BASEREG (basereg).  This may look deceptively like
13054          the object in question was allocated to a register (rather than in
13055          memory) so DWARF consumers need to be aware of the subtle
13056          distinction between OP_REG and OP_BASEREG.  */
13057       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13058         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13059       else if (stack_realign_drap
13060                && crtl->drap_reg
13061                && crtl->args.internal_arg_pointer == rtl
13062                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13063         {
13064           /* If RTL is internal_arg_pointer, which has been optimized
13065              out, use DRAP instead.  */
13066           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13067                                             VAR_INIT_STATUS_INITIALIZED);
13068         }
13069       break;
13070
13071     case SIGN_EXTEND:
13072     case ZERO_EXTEND:
13073       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13074                                 VAR_INIT_STATUS_INITIALIZED);
13075       if (op0 == 0)
13076         break;
13077       else
13078         {
13079           int shift = DWARF2_ADDR_SIZE
13080                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13081           shift *= BITS_PER_UNIT;
13082           if (GET_CODE (rtl) == SIGN_EXTEND)
13083             op = DW_OP_shra;
13084           else
13085             op = DW_OP_shr;
13086           mem_loc_result = op0;
13087           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13088           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13089           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13090           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13091         }
13092       break;
13093
13094     case MEM:
13095       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13096                                            VAR_INIT_STATUS_INITIALIZED);
13097       if (mem_loc_result == NULL)
13098         mem_loc_result = tls_mem_loc_descriptor (rtl);
13099       if (mem_loc_result != 0)
13100         {
13101           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13102             {
13103               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13104               return 0;
13105             }
13106           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13107             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13108           else
13109             add_loc_descr (&mem_loc_result,
13110                            new_loc_descr (DW_OP_deref_size,
13111                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13112         }
13113       else
13114         {
13115           rtx new_rtl = avoid_constant_pool_reference (rtl);
13116           if (new_rtl != rtl)
13117             return mem_loc_descriptor (new_rtl, mode, initialized);
13118         }
13119       break;
13120
13121     case LO_SUM:
13122          rtl = XEXP (rtl, 1);
13123
13124       /* ... fall through ...  */
13125
13126     case LABEL_REF:
13127       /* Some ports can transform a symbol ref into a label ref, because
13128          the symbol ref is too far away and has to be dumped into a constant
13129          pool.  */
13130     case CONST:
13131     case SYMBOL_REF:
13132       if (GET_CODE (rtl) == SYMBOL_REF
13133           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13134         {
13135           dw_loc_descr_ref temp;
13136
13137           /* If this is not defined, we have no way to emit the data.  */
13138           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13139             break;
13140
13141           temp = new_loc_descr (DW_OP_addr, 0, 0);
13142           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13143           temp->dw_loc_oprnd1.v.val_addr = rtl;
13144           temp->dtprel = true;
13145
13146           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13147           add_loc_descr (&mem_loc_result, temp);
13148
13149           break;
13150         }
13151
13152       if (!const_ok_for_output (rtl))
13153         break;
13154
13155     symref:
13156       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13157       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13158       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13159       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13160       break;
13161
13162     case CONCAT:
13163     case CONCATN:
13164     case VAR_LOCATION:
13165       expansion_failed (NULL_TREE, rtl,
13166                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13167       return 0;
13168
13169     case PRE_MODIFY:
13170       /* Extract the PLUS expression nested inside and fall into
13171          PLUS code below.  */
13172       rtl = XEXP (rtl, 1);
13173       goto plus;
13174
13175     case PRE_INC:
13176     case PRE_DEC:
13177       /* Turn these into a PLUS expression and fall into the PLUS code
13178          below.  */
13179       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13180                           GEN_INT (GET_CODE (rtl) == PRE_INC
13181                                    ? GET_MODE_UNIT_SIZE (mode)
13182                                    : -GET_MODE_UNIT_SIZE (mode)));
13183
13184       /* ... fall through ...  */
13185
13186     case PLUS:
13187     plus:
13188       if (is_based_loc (rtl))
13189         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13190                                           INTVAL (XEXP (rtl, 1)),
13191                                           VAR_INIT_STATUS_INITIALIZED);
13192       else
13193         {
13194           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13195                                                VAR_INIT_STATUS_INITIALIZED);
13196           if (mem_loc_result == 0)
13197             break;
13198
13199           if (CONST_INT_P (XEXP (rtl, 1)))
13200             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13201           else
13202             {
13203               dw_loc_descr_ref mem_loc_result2
13204                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13205                                       VAR_INIT_STATUS_INITIALIZED);
13206               if (mem_loc_result2 == 0)
13207                 break;
13208               add_loc_descr (&mem_loc_result, mem_loc_result2);
13209               add_loc_descr (&mem_loc_result,
13210                              new_loc_descr (DW_OP_plus, 0, 0));
13211             }
13212         }
13213       break;
13214
13215     /* If a pseudo-reg is optimized away, it is possible for it to
13216        be replaced with a MEM containing a multiply or shift.  */
13217     case MINUS:
13218       op = DW_OP_minus;
13219       goto do_binop;
13220
13221     case MULT:
13222       op = DW_OP_mul;
13223       goto do_binop;
13224
13225     case DIV:
13226       op = DW_OP_div;
13227       goto do_binop;
13228
13229     case UMOD:
13230       op = DW_OP_mod;
13231       goto do_binop;
13232
13233     case ASHIFT:
13234       op = DW_OP_shl;
13235       goto do_binop;
13236
13237     case ASHIFTRT:
13238       op = DW_OP_shra;
13239       goto do_binop;
13240
13241     case LSHIFTRT:
13242       op = DW_OP_shr;
13243       goto do_binop;
13244
13245     case AND:
13246       op = DW_OP_and;
13247       goto do_binop;
13248
13249     case IOR:
13250       op = DW_OP_or;
13251       goto do_binop;
13252
13253     case XOR:
13254       op = DW_OP_xor;
13255       goto do_binop;
13256
13257     do_binop:
13258       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13259                                 VAR_INIT_STATUS_INITIALIZED);
13260       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13261                                 VAR_INIT_STATUS_INITIALIZED);
13262
13263       if (op0 == 0 || op1 == 0)
13264         break;
13265
13266       mem_loc_result = op0;
13267       add_loc_descr (&mem_loc_result, op1);
13268       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13269       break;
13270
13271     case MOD:
13272       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13273                                 VAR_INIT_STATUS_INITIALIZED);
13274       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13275                                 VAR_INIT_STATUS_INITIALIZED);
13276
13277       if (op0 == 0 || op1 == 0)
13278         break;
13279
13280       mem_loc_result = op0;
13281       add_loc_descr (&mem_loc_result, op1);
13282       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13283       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13284       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13285       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13286       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13287       break;
13288
13289     case NOT:
13290       op = DW_OP_not;
13291       goto do_unop;
13292
13293     case ABS:
13294       op = DW_OP_abs;
13295       goto do_unop;
13296
13297     case NEG:
13298       op = DW_OP_neg;
13299       goto do_unop;
13300
13301     do_unop:
13302       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13303                                 VAR_INIT_STATUS_INITIALIZED);
13304
13305       if (op0 == 0)
13306         break;
13307
13308       mem_loc_result = op0;
13309       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13310       break;
13311
13312     case CONST_INT:
13313       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13314       break;
13315
13316     case EQ:
13317       op = DW_OP_eq;
13318       goto do_scompare;
13319
13320     case GE:
13321       op = DW_OP_ge;
13322       goto do_scompare;
13323
13324     case GT:
13325       op = DW_OP_gt;
13326       goto do_scompare;
13327
13328     case LE:
13329       op = DW_OP_le;
13330       goto do_scompare;
13331
13332     case LT:
13333       op = DW_OP_lt;
13334       goto do_scompare;
13335
13336     case NE:
13337       op = DW_OP_ne;
13338       goto do_scompare;
13339
13340     do_scompare:
13341       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13342           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13343         break;
13344       else
13345         {
13346           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13347
13348           if (op_mode == VOIDmode)
13349             op_mode = GET_MODE (XEXP (rtl, 1));
13350           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13351             break;
13352
13353           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13354                                     VAR_INIT_STATUS_INITIALIZED);
13355           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13356                                     VAR_INIT_STATUS_INITIALIZED);
13357
13358           if (op0 == 0 || op1 == 0)
13359             break;
13360
13361           if (op_mode != VOIDmode
13362               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13363             {
13364               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13365               shift *= BITS_PER_UNIT;
13366               /* For eq/ne, if the operands are known to be zero-extended,
13367                  there is no need to do the fancy shifting up.  */
13368               if (op == DW_OP_eq || op == DW_OP_ne)
13369                 {
13370                   dw_loc_descr_ref last0, last1;
13371                   for (last0 = op0;
13372                        last0->dw_loc_next != NULL;
13373                        last0 = last0->dw_loc_next)
13374                     ;
13375                   for (last1 = op1;
13376                        last1->dw_loc_next != NULL;
13377                        last1 = last1->dw_loc_next)
13378                     ;
13379                   /* deref_size zero extends, and for constants we can check
13380                      whether they are zero extended or not.  */
13381                   if (((last0->dw_loc_opc == DW_OP_deref_size
13382                         && last0->dw_loc_oprnd1.v.val_int
13383                            <= GET_MODE_SIZE (op_mode))
13384                        || (CONST_INT_P (XEXP (rtl, 0))
13385                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13386                                == (INTVAL (XEXP (rtl, 0))
13387                                    & GET_MODE_MASK (op_mode))))
13388                       && ((last1->dw_loc_opc == DW_OP_deref_size
13389                            && last1->dw_loc_oprnd1.v.val_int
13390                               <= GET_MODE_SIZE (op_mode))
13391                           || (CONST_INT_P (XEXP (rtl, 1))
13392                               && (unsigned HOST_WIDE_INT)
13393                                  INTVAL (XEXP (rtl, 1))
13394                                  == (INTVAL (XEXP (rtl, 1))
13395                                      & GET_MODE_MASK (op_mode)))))
13396                     goto do_compare;
13397                 }
13398               add_loc_descr (&op0, int_loc_descriptor (shift));
13399               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13400               if (CONST_INT_P (XEXP (rtl, 1)))
13401                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13402               else
13403                 {
13404                   add_loc_descr (&op1, int_loc_descriptor (shift));
13405                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13406                 }
13407             }
13408         }
13409
13410     do_compare:
13411       mem_loc_result = op0;
13412       add_loc_descr (&mem_loc_result, op1);
13413       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13414       if (STORE_FLAG_VALUE != 1)
13415         {
13416           add_loc_descr (&mem_loc_result,
13417                          int_loc_descriptor (STORE_FLAG_VALUE));
13418           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13419         }
13420       break;
13421
13422     case GEU:
13423       op = DW_OP_ge;
13424       goto do_ucompare;
13425
13426     case GTU:
13427       op = DW_OP_gt;
13428       goto do_ucompare;
13429
13430     case LEU:
13431       op = DW_OP_le;
13432       goto do_ucompare;
13433
13434     case LTU:
13435       op = DW_OP_lt;
13436       goto do_ucompare;
13437
13438     do_ucompare:
13439       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13440           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13441         break;
13442       else
13443         {
13444           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13445
13446           if (op_mode == VOIDmode)
13447             op_mode = GET_MODE (XEXP (rtl, 1));
13448           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13449             break;
13450
13451           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13452                                     VAR_INIT_STATUS_INITIALIZED);
13453           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13454                                     VAR_INIT_STATUS_INITIALIZED);
13455
13456           if (op0 == 0 || op1 == 0)
13457             break;
13458
13459           if (op_mode != VOIDmode
13460               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13461             {
13462               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13463               dw_loc_descr_ref last0, last1;
13464               for (last0 = op0;
13465                    last0->dw_loc_next != NULL;
13466                    last0 = last0->dw_loc_next)
13467                 ;
13468               for (last1 = op1;
13469                    last1->dw_loc_next != NULL;
13470                    last1 = last1->dw_loc_next)
13471                 ;
13472               if (CONST_INT_P (XEXP (rtl, 0)))
13473                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13474               /* deref_size zero extends, so no need to mask it again.  */
13475               else if (last0->dw_loc_opc != DW_OP_deref_size
13476                        || last0->dw_loc_oprnd1.v.val_int
13477                           > GET_MODE_SIZE (op_mode))
13478                 {
13479                   add_loc_descr (&op0, int_loc_descriptor (mask));
13480                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13481                 }
13482               if (CONST_INT_P (XEXP (rtl, 1)))
13483                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13484               /* deref_size zero extends, so no need to mask it again.  */
13485               else if (last1->dw_loc_opc != DW_OP_deref_size
13486                        || last1->dw_loc_oprnd1.v.val_int
13487                           > GET_MODE_SIZE (op_mode))
13488                 {
13489                   add_loc_descr (&op1, int_loc_descriptor (mask));
13490                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13491                 }
13492             }
13493           else
13494             {
13495               HOST_WIDE_INT bias = 1;
13496               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13497               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13498               if (CONST_INT_P (XEXP (rtl, 1)))
13499                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13500                                           + INTVAL (XEXP (rtl, 1)));
13501               else
13502                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13503                                                     bias, 0));
13504             }
13505         }
13506       goto do_compare;
13507
13508     case SMIN:
13509     case SMAX:
13510     case UMIN:
13511     case UMAX:
13512       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13513           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13514           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13515         break;
13516
13517       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13518                                 VAR_INIT_STATUS_INITIALIZED);
13519       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13520                                 VAR_INIT_STATUS_INITIALIZED);
13521
13522       if (op0 == 0 || op1 == 0)
13523         break;
13524
13525       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13526       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13527       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13528       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13529         {
13530           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13531             {
13532               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13533               add_loc_descr (&op0, int_loc_descriptor (mask));
13534               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13535               add_loc_descr (&op1, int_loc_descriptor (mask));
13536               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13537             }
13538           else
13539             {
13540               HOST_WIDE_INT bias = 1;
13541               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13542               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13543               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13544             }
13545         }
13546       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13547         {
13548           int shift = DWARF2_ADDR_SIZE
13549                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13550           shift *= BITS_PER_UNIT;
13551           add_loc_descr (&op0, int_loc_descriptor (shift));
13552           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13553           add_loc_descr (&op1, int_loc_descriptor (shift));
13554           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13555         }
13556
13557       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13558         op = DW_OP_lt;
13559       else
13560         op = DW_OP_gt;
13561       mem_loc_result = op0;
13562       add_loc_descr (&mem_loc_result, op1);
13563       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13564       {
13565         dw_loc_descr_ref bra_node, drop_node;
13566
13567         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13568         add_loc_descr (&mem_loc_result, bra_node);
13569         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13570         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13571         add_loc_descr (&mem_loc_result, drop_node);
13572         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13573         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13574       }
13575       break;
13576
13577     case ZERO_EXTRACT:
13578     case SIGN_EXTRACT:
13579       if (CONST_INT_P (XEXP (rtl, 1))
13580           && CONST_INT_P (XEXP (rtl, 2))
13581           && ((unsigned) INTVAL (XEXP (rtl, 1))
13582               + (unsigned) INTVAL (XEXP (rtl, 2))
13583               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13584           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13585           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13586         {
13587           int shift, size;
13588           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13589                                     VAR_INIT_STATUS_INITIALIZED);
13590           if (op0 == 0)
13591             break;
13592           if (GET_CODE (rtl) == SIGN_EXTRACT)
13593             op = DW_OP_shra;
13594           else
13595             op = DW_OP_shr;
13596           mem_loc_result = op0;
13597           size = INTVAL (XEXP (rtl, 1));
13598           shift = INTVAL (XEXP (rtl, 2));
13599           if (BITS_BIG_ENDIAN)
13600             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13601                     - shift - size;
13602           if (shift + size != (int) DWARF2_ADDR_SIZE)
13603             {
13604               add_loc_descr (&mem_loc_result,
13605                              int_loc_descriptor (DWARF2_ADDR_SIZE
13606                                                  - shift - size));
13607               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13608             }
13609           if (size != (int) DWARF2_ADDR_SIZE)
13610             {
13611               add_loc_descr (&mem_loc_result,
13612                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13613               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13614             }
13615         }
13616       break;
13617
13618     case COMPARE:
13619     case IF_THEN_ELSE:
13620     case ROTATE:
13621     case ROTATERT:
13622     case TRUNCATE:
13623       /* In theory, we could implement the above.  */
13624       /* DWARF cannot represent the unsigned compare operations
13625          natively.  */
13626     case SS_MULT:
13627     case US_MULT:
13628     case SS_DIV:
13629     case US_DIV:
13630     case SS_PLUS:
13631     case US_PLUS:
13632     case SS_MINUS:
13633     case US_MINUS:
13634     case SS_NEG:
13635     case US_NEG:
13636     case SS_ABS:
13637     case SS_ASHIFT:
13638     case US_ASHIFT:
13639     case SS_TRUNCATE:
13640     case US_TRUNCATE:
13641     case UDIV:
13642     case UNORDERED:
13643     case ORDERED:
13644     case UNEQ:
13645     case UNGE:
13646     case UNGT:
13647     case UNLE:
13648     case UNLT:
13649     case LTGT:
13650     case FLOAT_EXTEND:
13651     case FLOAT_TRUNCATE:
13652     case FLOAT:
13653     case UNSIGNED_FLOAT:
13654     case FIX:
13655     case UNSIGNED_FIX:
13656     case FRACT_CONVERT:
13657     case UNSIGNED_FRACT_CONVERT:
13658     case SAT_FRACT:
13659     case UNSIGNED_SAT_FRACT:
13660     case SQRT:
13661     case BSWAP:
13662     case FFS:
13663     case CLZ:
13664     case CTZ:
13665     case POPCOUNT:
13666     case PARITY:
13667     case ASM_OPERANDS:
13668     case VEC_MERGE:
13669     case VEC_SELECT:
13670     case VEC_CONCAT:
13671     case VEC_DUPLICATE:
13672     case UNSPEC:
13673     case HIGH:
13674       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13675          can't express it in the debug info.  This can happen e.g. with some
13676          TLS UNSPECs.  */
13677       break;
13678
13679     case CONST_STRING:
13680       resolve_one_addr (&rtl, NULL);
13681       goto symref;
13682
13683     default:
13684 #ifdef ENABLE_CHECKING
13685       print_rtl (stderr, rtl);
13686       gcc_unreachable ();
13687 #else
13688       break;
13689 #endif
13690     }
13691
13692   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13693     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13694
13695   return mem_loc_result;
13696 }
13697
13698 /* Return a descriptor that describes the concatenation of two locations.
13699    This is typically a complex variable.  */
13700
13701 static dw_loc_descr_ref
13702 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13703 {
13704   dw_loc_descr_ref cc_loc_result = NULL;
13705   dw_loc_descr_ref x0_ref
13706     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13707   dw_loc_descr_ref x1_ref
13708     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13709
13710   if (x0_ref == 0 || x1_ref == 0)
13711     return 0;
13712
13713   cc_loc_result = x0_ref;
13714   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13715
13716   add_loc_descr (&cc_loc_result, x1_ref);
13717   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13718
13719   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13720     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13721
13722   return cc_loc_result;
13723 }
13724
13725 /* Return a descriptor that describes the concatenation of N
13726    locations.  */
13727
13728 static dw_loc_descr_ref
13729 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13730 {
13731   unsigned int i;
13732   dw_loc_descr_ref cc_loc_result = NULL;
13733   unsigned int n = XVECLEN (concatn, 0);
13734
13735   for (i = 0; i < n; ++i)
13736     {
13737       dw_loc_descr_ref ref;
13738       rtx x = XVECEXP (concatn, 0, i);
13739
13740       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13741       if (ref == NULL)
13742         return NULL;
13743
13744       add_loc_descr (&cc_loc_result, ref);
13745       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13746     }
13747
13748   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13749     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13750
13751   return cc_loc_result;
13752 }
13753
13754 /* Output a proper Dwarf location descriptor for a variable or parameter
13755    which is either allocated in a register or in a memory location.  For a
13756    register, we just generate an OP_REG and the register number.  For a
13757    memory location we provide a Dwarf postfix expression describing how to
13758    generate the (dynamic) address of the object onto the address stack.
13759
13760    MODE is mode of the decl if this loc_descriptor is going to be used in
13761    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13762    allowed, VOIDmode otherwise.
13763
13764    If we don't know how to describe it, return 0.  */
13765
13766 static dw_loc_descr_ref
13767 loc_descriptor (rtx rtl, enum machine_mode mode,
13768                 enum var_init_status initialized)
13769 {
13770   dw_loc_descr_ref loc_result = NULL;
13771
13772   switch (GET_CODE (rtl))
13773     {
13774     case SUBREG:
13775       /* The case of a subreg may arise when we have a local (register)
13776          variable or a formal (register) parameter which doesn't quite fill
13777          up an entire register.  For now, just assume that it is
13778          legitimate to make the Dwarf info refer to the whole register which
13779          contains the given subreg.  */
13780       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13781       break;
13782
13783     case REG:
13784       loc_result = reg_loc_descriptor (rtl, initialized);
13785       break;
13786
13787     case SIGN_EXTEND:
13788     case ZERO_EXTEND:
13789       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13790       break;
13791
13792     case MEM:
13793       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13794                                        initialized);
13795       if (loc_result == NULL)
13796         loc_result = tls_mem_loc_descriptor (rtl);
13797       if (loc_result == NULL)
13798         {
13799           rtx new_rtl = avoid_constant_pool_reference (rtl);
13800           if (new_rtl != rtl)
13801             loc_result = loc_descriptor (new_rtl, mode, initialized);
13802         }
13803       break;
13804
13805     case CONCAT:
13806       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13807                                           initialized);
13808       break;
13809
13810     case CONCATN:
13811       loc_result = concatn_loc_descriptor (rtl, initialized);
13812       break;
13813
13814     case VAR_LOCATION:
13815       /* Single part.  */
13816       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13817         {
13818           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13819           if (GET_CODE (loc) == EXPR_LIST)
13820             loc = XEXP (loc, 0);
13821           loc_result = loc_descriptor (loc, mode, initialized);
13822           break;
13823         }
13824
13825       rtl = XEXP (rtl, 1);
13826       /* FALLTHRU */
13827
13828     case PARALLEL:
13829       {
13830         rtvec par_elems = XVEC (rtl, 0);
13831         int num_elem = GET_NUM_ELEM (par_elems);
13832         enum machine_mode mode;
13833         int i;
13834
13835         /* Create the first one, so we have something to add to.  */
13836         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13837                                      VOIDmode, initialized);
13838         if (loc_result == NULL)
13839           return NULL;
13840         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13841         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13842         for (i = 1; i < num_elem; i++)
13843           {
13844             dw_loc_descr_ref temp;
13845
13846             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13847                                    VOIDmode, initialized);
13848             if (temp == NULL)
13849               return NULL;
13850             add_loc_descr (&loc_result, temp);
13851             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13852             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13853           }
13854       }
13855       break;
13856
13857     case CONST_INT:
13858       if (mode != VOIDmode && mode != BLKmode)
13859         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13860                                                     INTVAL (rtl));
13861       break;
13862
13863     case CONST_DOUBLE:
13864       if (mode == VOIDmode)
13865         mode = GET_MODE (rtl);
13866
13867       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13868         {
13869           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13870
13871           /* Note that a CONST_DOUBLE rtx could represent either an integer
13872              or a floating-point constant.  A CONST_DOUBLE is used whenever
13873              the constant requires more than one word in order to be
13874              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13875           loc_result = new_loc_descr (DW_OP_implicit_value,
13876                                       GET_MODE_SIZE (mode), 0);
13877           if (SCALAR_FLOAT_MODE_P (mode))
13878             {
13879               unsigned int length = GET_MODE_SIZE (mode);
13880               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13881
13882               insert_float (rtl, array);
13883               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13884               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13885               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13886               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13887             }
13888           else
13889             {
13890               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13891               loc_result->dw_loc_oprnd2.v.val_double.high
13892                 = CONST_DOUBLE_HIGH (rtl);
13893               loc_result->dw_loc_oprnd2.v.val_double.low
13894                 = CONST_DOUBLE_LOW (rtl);
13895             }
13896         }
13897       break;
13898
13899     case CONST_VECTOR:
13900       if (mode == VOIDmode)
13901         mode = GET_MODE (rtl);
13902
13903       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13904         {
13905           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13906           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13907           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13908           unsigned int i;
13909           unsigned char *p;
13910
13911           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13912           switch (GET_MODE_CLASS (mode))
13913             {
13914             case MODE_VECTOR_INT:
13915               for (i = 0, p = array; i < length; i++, p += elt_size)
13916                 {
13917                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13918                   HOST_WIDE_INT lo, hi;
13919
13920                   switch (GET_CODE (elt))
13921                     {
13922                     case CONST_INT:
13923                       lo = INTVAL (elt);
13924                       hi = -(lo < 0);
13925                       break;
13926
13927                     case CONST_DOUBLE:
13928                       lo = CONST_DOUBLE_LOW (elt);
13929                       hi = CONST_DOUBLE_HIGH (elt);
13930                       break;
13931
13932                     default:
13933                       gcc_unreachable ();
13934                     }
13935
13936                   if (elt_size <= sizeof (HOST_WIDE_INT))
13937                     insert_int (lo, elt_size, p);
13938                   else
13939                     {
13940                       unsigned char *p0 = p;
13941                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13942
13943                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13944                       if (WORDS_BIG_ENDIAN)
13945                         {
13946                           p0 = p1;
13947                           p1 = p;
13948                         }
13949                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13950                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13951                     }
13952                 }
13953               break;
13954
13955             case MODE_VECTOR_FLOAT:
13956               for (i = 0, p = array; i < length; i++, p += elt_size)
13957                 {
13958                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13959                   insert_float (elt, p);
13960                 }
13961               break;
13962
13963             default:
13964               gcc_unreachable ();
13965             }
13966
13967           loc_result = new_loc_descr (DW_OP_implicit_value,
13968                                       length * elt_size, 0);
13969           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13970           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13971           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13972           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13973         }
13974       break;
13975
13976     case CONST:
13977       if (mode == VOIDmode
13978           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13979           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13980           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13981         {
13982           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13983           break;
13984         }
13985       /* FALLTHROUGH */
13986     case SYMBOL_REF:
13987       if (!const_ok_for_output (rtl))
13988         break;
13989     case LABEL_REF:
13990       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13991           && (dwarf_version >= 4 || !dwarf_strict))
13992         {
13993           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13994           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13995           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13996           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13997           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13998         }
13999       break;
14000
14001     default:
14002       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
14003           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
14004           && (dwarf_version >= 4 || !dwarf_strict))
14005         {
14006           /* Value expression.  */
14007           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
14008           if (loc_result)
14009             add_loc_descr (&loc_result,
14010                            new_loc_descr (DW_OP_stack_value, 0, 0));
14011         }
14012       break;
14013     }
14014
14015   return loc_result;
14016 }
14017
14018 /* We need to figure out what section we should use as the base for the
14019    address ranges where a given location is valid.
14020    1. If this particular DECL has a section associated with it, use that.
14021    2. If this function has a section associated with it, use that.
14022    3. Otherwise, use the text section.
14023    XXX: If you split a variable across multiple sections, we won't notice.  */
14024
14025 static const char *
14026 secname_for_decl (const_tree decl)
14027 {
14028   const char *secname;
14029
14030   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
14031     {
14032       tree sectree = DECL_SECTION_NAME (decl);
14033       secname = TREE_STRING_POINTER (sectree);
14034     }
14035   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
14036     {
14037       tree sectree = DECL_SECTION_NAME (current_function_decl);
14038       secname = TREE_STRING_POINTER (sectree);
14039     }
14040   else if (cfun && in_cold_section_p)
14041     secname = crtl->subsections.cold_section_label;
14042   else
14043     secname = text_section_label;
14044
14045   return secname;
14046 }
14047
14048 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14049
14050 static bool
14051 decl_by_reference_p (tree decl)
14052 {
14053   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14054            || TREE_CODE (decl) == VAR_DECL)
14055           && DECL_BY_REFERENCE (decl));
14056 }
14057
14058 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14059    for VARLOC.  */
14060
14061 static dw_loc_descr_ref
14062 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14063                enum var_init_status initialized)
14064 {
14065   int have_address = 0;
14066   dw_loc_descr_ref descr;
14067   enum machine_mode mode;
14068
14069   if (want_address != 2)
14070     {
14071       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14072       /* Single part.  */
14073       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14074         {
14075           varloc = PAT_VAR_LOCATION_LOC (varloc);
14076           if (GET_CODE (varloc) == EXPR_LIST)
14077             varloc = XEXP (varloc, 0);
14078           mode = GET_MODE (varloc);
14079           if (MEM_P (varloc))
14080             {
14081               rtx addr = XEXP (varloc, 0);
14082               descr = mem_loc_descriptor (addr, mode, initialized);
14083               if (descr)
14084                 have_address = 1;
14085               else
14086                 {
14087                   rtx x = avoid_constant_pool_reference (varloc);
14088                   if (x != varloc)
14089                     descr = mem_loc_descriptor (x, mode, initialized);
14090                 }
14091             }
14092           else
14093             descr = mem_loc_descriptor (varloc, mode, initialized);
14094         }
14095       else
14096         return 0;
14097     }
14098   else
14099     {
14100       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
14101       have_address = 1;
14102     }
14103
14104   if (!descr)
14105     return 0;
14106
14107   if (want_address == 2 && !have_address
14108       && (dwarf_version >= 4 || !dwarf_strict))
14109     {
14110       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14111         {
14112           expansion_failed (loc, NULL_RTX,
14113                             "DWARF address size mismatch");
14114           return 0;
14115         }
14116       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14117       have_address = 1;
14118     }
14119   /* Show if we can't fill the request for an address.  */
14120   if (want_address && !have_address)
14121     {
14122       expansion_failed (loc, NULL_RTX,
14123                         "Want address and only have value");
14124       return 0;
14125     }
14126
14127   /* If we've got an address and don't want one, dereference.  */
14128   if (!want_address && have_address)
14129     {
14130       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14131       enum dwarf_location_atom op;
14132
14133       if (size > DWARF2_ADDR_SIZE || size == -1)
14134         {
14135           expansion_failed (loc, NULL_RTX,
14136                             "DWARF address size mismatch");
14137           return 0;
14138         }
14139       else if (size == DWARF2_ADDR_SIZE)
14140         op = DW_OP_deref;
14141       else
14142         op = DW_OP_deref_size;
14143
14144       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14145     }
14146
14147   return descr;
14148 }
14149
14150 /* Return the dwarf representation of the location list LOC_LIST of
14151    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14152    function.  */
14153
14154 static dw_loc_list_ref
14155 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14156 {
14157   const char *endname, *secname;
14158   rtx varloc;
14159   enum var_init_status initialized;
14160   struct var_loc_node *node;
14161   dw_loc_descr_ref descr;
14162   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14163   dw_loc_list_ref list = NULL;
14164   dw_loc_list_ref *listp = &list;
14165
14166   /* Now that we know what section we are using for a base,
14167      actually construct the list of locations.
14168      The first location information is what is passed to the
14169      function that creates the location list, and the remaining
14170      locations just get added on to that list.
14171      Note that we only know the start address for a location
14172      (IE location changes), so to build the range, we use
14173      the range [current location start, next location start].
14174      This means we have to special case the last node, and generate
14175      a range of [last location start, end of function label].  */
14176
14177   secname = secname_for_decl (decl);
14178
14179   for (node = loc_list->first; node->next; node = node->next)
14180     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14181       {
14182         /* The variable has a location between NODE->LABEL and
14183            NODE->NEXT->LABEL.  */
14184         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14185         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14186         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14187         if (descr)
14188           {
14189             *listp = new_loc_list (descr, node->label, node->next->label,
14190                                    secname);
14191             listp = &(*listp)->dw_loc_next;
14192           }
14193       }
14194
14195   /* If the variable has a location at the last label
14196      it keeps its location until the end of function.  */
14197   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14198     {
14199       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14200       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14201       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14202       if (descr)
14203         {
14204           if (!current_function_decl)
14205             endname = text_end_label;
14206           else
14207             {
14208               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14209                                            current_function_funcdef_no);
14210               endname = ggc_strdup (label_id);
14211             }
14212
14213           *listp = new_loc_list (descr, node->label, endname, secname);
14214           listp = &(*listp)->dw_loc_next;
14215         }
14216     }
14217
14218   /* Try to avoid the overhead of a location list emitting a location
14219      expression instead, but only if we didn't have more than one
14220      location entry in the first place.  If some entries were not
14221      representable, we don't want to pretend a single entry that was
14222      applies to the entire scope in which the variable is
14223      available.  */
14224   if (list && loc_list->first->next)
14225     gen_llsym (list);
14226
14227   return list;
14228 }
14229
14230 /* Return if the loc_list has only single element and thus can be represented
14231    as location description.   */
14232
14233 static bool
14234 single_element_loc_list_p (dw_loc_list_ref list)
14235 {
14236   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14237   return !list->ll_symbol;
14238 }
14239
14240 /* To each location in list LIST add loc descr REF.  */
14241
14242 static void
14243 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14244 {
14245   dw_loc_descr_ref copy;
14246   add_loc_descr (&list->expr, ref);
14247   list = list->dw_loc_next;
14248   while (list)
14249     {
14250       copy = GGC_CNEW (dw_loc_descr_node);
14251       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14252       add_loc_descr (&list->expr, copy);
14253       while (copy->dw_loc_next)
14254         {
14255           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14256           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14257           copy->dw_loc_next = new_copy;
14258           copy = new_copy;
14259         }
14260       list = list->dw_loc_next;
14261     }
14262 }
14263
14264 /* Given two lists RET and LIST
14265    produce location list that is result of adding expression in LIST
14266    to expression in RET on each possition in program.
14267    Might be destructive on both RET and LIST.
14268
14269    TODO: We handle only simple cases of RET or LIST having at most one
14270    element. General case would inolve sorting the lists in program order
14271    and merging them that will need some additional work.
14272    Adding that will improve quality of debug info especially for SRA-ed
14273    structures.  */
14274
14275 static void
14276 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14277 {
14278   if (!list)
14279     return;
14280   if (!*ret)
14281     {
14282       *ret = list;
14283       return;
14284     }
14285   if (!list->dw_loc_next)
14286     {
14287       add_loc_descr_to_each (*ret, list->expr);
14288       return;
14289     }
14290   if (!(*ret)->dw_loc_next)
14291     {
14292       add_loc_descr_to_each (list, (*ret)->expr);
14293       *ret = list;
14294       return;
14295     }
14296   expansion_failed (NULL_TREE, NULL_RTX,
14297                     "Don't know how to merge two non-trivial"
14298                     " location lists.\n");
14299   *ret = NULL;
14300   return;
14301 }
14302
14303 /* LOC is constant expression.  Try a luck, look it up in constant
14304    pool and return its loc_descr of its address.  */
14305
14306 static dw_loc_descr_ref
14307 cst_pool_loc_descr (tree loc)
14308 {
14309   /* Get an RTL for this, if something has been emitted.  */
14310   rtx rtl = lookup_constant_def (loc);
14311   enum machine_mode mode;
14312
14313   if (!rtl || !MEM_P (rtl))
14314     {
14315       gcc_assert (!rtl);
14316       return 0;
14317     }
14318   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14319
14320   /* TODO: We might get more coverage if we was actually delaying expansion
14321      of all expressions till end of compilation when constant pools are fully
14322      populated.  */
14323   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14324     {
14325       expansion_failed (loc, NULL_RTX,
14326                         "CST value in contant pool but not marked.");
14327       return 0;
14328     }
14329   mode = GET_MODE (rtl);
14330   rtl = XEXP (rtl, 0);
14331   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14332 }
14333
14334 /* Return dw_loc_list representing address of addr_expr LOC
14335    by looking for innder INDIRECT_REF expression and turing it
14336    into simple arithmetics.  */
14337
14338 static dw_loc_list_ref
14339 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14340 {
14341   tree obj, offset;
14342   HOST_WIDE_INT bitsize, bitpos, bytepos;
14343   enum machine_mode mode;
14344   int volatilep;
14345   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14346   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14347
14348   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14349                              &bitsize, &bitpos, &offset, &mode,
14350                              &unsignedp, &volatilep, false);
14351   STRIP_NOPS (obj);
14352   if (bitpos % BITS_PER_UNIT)
14353     {
14354       expansion_failed (loc, NULL_RTX, "bitfield access");
14355       return 0;
14356     }
14357   if (!INDIRECT_REF_P (obj))
14358     {
14359       expansion_failed (obj,
14360                         NULL_RTX, "no indirect ref in inner refrence");
14361       return 0;
14362     }
14363   if (!offset && !bitpos)
14364     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14365   else if (toplev
14366            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14367            && (dwarf_version >= 4 || !dwarf_strict))
14368     {
14369       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14370       if (!list_ret)
14371         return 0;
14372       if (offset)
14373         {
14374           /* Variable offset.  */
14375           list_ret1 = loc_list_from_tree (offset, 0);
14376           if (list_ret1 == 0)
14377             return 0;
14378           add_loc_list (&list_ret, list_ret1);
14379           if (!list_ret)
14380             return 0;
14381           add_loc_descr_to_each (list_ret,
14382                                  new_loc_descr (DW_OP_plus, 0, 0));
14383         }
14384       bytepos = bitpos / BITS_PER_UNIT;
14385       if (bytepos > 0)
14386         add_loc_descr_to_each (list_ret,
14387                                new_loc_descr (DW_OP_plus_uconst,
14388                                               bytepos, 0));
14389       else if (bytepos < 0)
14390         loc_list_plus_const (list_ret, bytepos);
14391       add_loc_descr_to_each (list_ret,
14392                              new_loc_descr (DW_OP_stack_value, 0, 0));
14393     }
14394   return list_ret;
14395 }
14396
14397
14398 /* Generate Dwarf location list representing LOC.
14399    If WANT_ADDRESS is false, expression computing LOC will be computed
14400    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14401    if WANT_ADDRESS is 2, expression computing address useable in location
14402      will be returned (i.e. DW_OP_reg can be used
14403      to refer to register values).  */
14404
14405 static dw_loc_list_ref
14406 loc_list_from_tree (tree loc, int want_address)
14407 {
14408   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14409   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14410   int have_address = 0;
14411   enum dwarf_location_atom op;
14412
14413   /* ??? Most of the time we do not take proper care for sign/zero
14414      extending the values properly.  Hopefully this won't be a real
14415      problem...  */
14416
14417   switch (TREE_CODE (loc))
14418     {
14419     case ERROR_MARK:
14420       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14421       return 0;
14422
14423     case PLACEHOLDER_EXPR:
14424       /* This case involves extracting fields from an object to determine the
14425          position of other fields.  We don't try to encode this here.  The
14426          only user of this is Ada, which encodes the needed information using
14427          the names of types.  */
14428       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14429       return 0;
14430
14431     case CALL_EXPR:
14432       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14433       /* There are no opcodes for these operations.  */
14434       return 0;
14435
14436     case PREINCREMENT_EXPR:
14437     case PREDECREMENT_EXPR:
14438     case POSTINCREMENT_EXPR:
14439     case POSTDECREMENT_EXPR:
14440       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14441       /* There are no opcodes for these operations.  */
14442       return 0;
14443
14444     case ADDR_EXPR:
14445       /* If we already want an address, see if there is INDIRECT_REF inside
14446          e.g. for &this->field.  */
14447       if (want_address)
14448         {
14449           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14450                        (loc, want_address == 2);
14451           if (list_ret)
14452             have_address = 1;
14453           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14454                    && (ret = cst_pool_loc_descr (loc)))
14455             have_address = 1;
14456         }
14457         /* Otherwise, process the argument and look for the address.  */
14458       if (!list_ret && !ret)
14459         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14460       else
14461         {
14462           if (want_address)
14463             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14464           return NULL;
14465         }
14466       break;
14467
14468     case VAR_DECL:
14469       if (DECL_THREAD_LOCAL_P (loc))
14470         {
14471           rtx rtl;
14472           enum dwarf_location_atom first_op;
14473           enum dwarf_location_atom second_op;
14474           bool dtprel = false;
14475
14476           if (targetm.have_tls)
14477             {
14478               /* If this is not defined, we have no way to emit the
14479                  data.  */
14480               if (!targetm.asm_out.output_dwarf_dtprel)
14481                 return 0;
14482
14483                /* The way DW_OP_GNU_push_tls_address is specified, we
14484                   can only look up addresses of objects in the current
14485                   module.  */
14486               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14487                 return 0;
14488               first_op = DW_OP_addr;
14489               dtprel = true;
14490               second_op = DW_OP_GNU_push_tls_address;
14491             }
14492           else
14493             {
14494               if (!targetm.emutls.debug_form_tls_address
14495                   || !(dwarf_version >= 3 || !dwarf_strict))
14496                 return 0;
14497               loc = emutls_decl (loc);
14498               first_op = DW_OP_addr;
14499               second_op = DW_OP_form_tls_address;
14500             }
14501
14502           rtl = rtl_for_decl_location (loc);
14503           if (rtl == NULL_RTX)
14504             return 0;
14505
14506           if (!MEM_P (rtl))
14507             return 0;
14508           rtl = XEXP (rtl, 0);
14509           if (! CONSTANT_P (rtl))
14510             return 0;
14511
14512           ret = new_loc_descr (first_op, 0, 0);
14513           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14514           ret->dw_loc_oprnd1.v.val_addr = rtl;
14515           ret->dtprel = dtprel;
14516
14517           ret1 = new_loc_descr (second_op, 0, 0);
14518           add_loc_descr (&ret, ret1);
14519
14520           have_address = 1;
14521           break;
14522         }
14523       /* FALLTHRU */
14524
14525     case PARM_DECL:
14526       if (DECL_HAS_VALUE_EXPR_P (loc))
14527         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14528                                    want_address);
14529       /* FALLTHRU */
14530
14531     case RESULT_DECL:
14532     case FUNCTION_DECL:
14533       {
14534         rtx rtl;
14535         var_loc_list *loc_list = lookup_decl_loc (loc);
14536
14537         if (loc_list && loc_list->first)
14538           {
14539             list_ret = dw_loc_list (loc_list, loc, want_address);
14540             have_address = want_address != 0;
14541             break;
14542           }
14543         rtl = rtl_for_decl_location (loc);
14544         if (rtl == NULL_RTX)
14545           {
14546             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14547             return 0;
14548           }
14549         else if (CONST_INT_P (rtl))
14550           {
14551             HOST_WIDE_INT val = INTVAL (rtl);
14552             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14553               val &= GET_MODE_MASK (DECL_MODE (loc));
14554             ret = int_loc_descriptor (val);
14555           }
14556         else if (GET_CODE (rtl) == CONST_STRING)
14557           {
14558             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14559             return 0;
14560           }
14561         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14562           {
14563             ret = new_loc_descr (DW_OP_addr, 0, 0);
14564             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14565             ret->dw_loc_oprnd1.v.val_addr = rtl;
14566           }
14567         else
14568           {
14569             enum machine_mode mode;
14570
14571             /* Certain constructs can only be represented at top-level.  */
14572             if (want_address == 2)
14573               {
14574                 ret = loc_descriptor (rtl, VOIDmode,
14575                                       VAR_INIT_STATUS_INITIALIZED);
14576                 have_address = 1;
14577               }
14578             else
14579               {
14580                 mode = GET_MODE (rtl);
14581                 if (MEM_P (rtl))
14582                   {
14583                     rtl = XEXP (rtl, 0);
14584                     have_address = 1;
14585                   }
14586                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14587               }
14588             if (!ret)
14589               expansion_failed (loc, rtl,
14590                                 "failed to produce loc descriptor for rtl");
14591           }
14592       }
14593       break;
14594
14595     case INDIRECT_REF:
14596     case ALIGN_INDIRECT_REF:
14597     case MISALIGNED_INDIRECT_REF:
14598       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14599       have_address = 1;
14600       break;
14601
14602     case COMPOUND_EXPR:
14603       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14604
14605     CASE_CONVERT:
14606     case VIEW_CONVERT_EXPR:
14607     case SAVE_EXPR:
14608     case MODIFY_EXPR:
14609       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14610
14611     case COMPONENT_REF:
14612     case BIT_FIELD_REF:
14613     case ARRAY_REF:
14614     case ARRAY_RANGE_REF:
14615     case REALPART_EXPR:
14616     case IMAGPART_EXPR:
14617       {
14618         tree obj, offset;
14619         HOST_WIDE_INT bitsize, bitpos, bytepos;
14620         enum machine_mode mode;
14621         int volatilep;
14622         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14623
14624         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14625                                    &unsignedp, &volatilep, false);
14626
14627         gcc_assert (obj != loc);
14628
14629         list_ret = loc_list_from_tree (obj,
14630                                        want_address == 2
14631                                        && !bitpos && !offset ? 2 : 1);
14632         /* TODO: We can extract value of the small expression via shifting even
14633            for nonzero bitpos.  */
14634         if (list_ret == 0)
14635           return 0;
14636         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14637           {
14638             expansion_failed (loc, NULL_RTX,
14639                               "bitfield access");
14640             return 0;
14641           }
14642
14643         if (offset != NULL_TREE)
14644           {
14645             /* Variable offset.  */
14646             list_ret1 = loc_list_from_tree (offset, 0);
14647             if (list_ret1 == 0)
14648               return 0;
14649             add_loc_list (&list_ret, list_ret1);
14650             if (!list_ret)
14651               return 0;
14652             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14653           }
14654
14655         bytepos = bitpos / BITS_PER_UNIT;
14656         if (bytepos > 0)
14657           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14658         else if (bytepos < 0)
14659           loc_list_plus_const (list_ret, bytepos);
14660
14661         have_address = 1;
14662         break;
14663       }
14664
14665     case INTEGER_CST:
14666       if ((want_address || !host_integerp (loc, 0))
14667           && (ret = cst_pool_loc_descr (loc)))
14668         have_address = 1;
14669       else if (want_address == 2
14670                && host_integerp (loc, 0)
14671                && (ret = address_of_int_loc_descriptor
14672                            (int_size_in_bytes (TREE_TYPE (loc)),
14673                             tree_low_cst (loc, 0))))
14674         have_address = 1;
14675       else if (host_integerp (loc, 0))
14676         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14677       else
14678         {
14679           expansion_failed (loc, NULL_RTX,
14680                             "Integer operand is not host integer");
14681           return 0;
14682         }
14683       break;
14684
14685     case CONSTRUCTOR:
14686     case REAL_CST:
14687     case STRING_CST:
14688     case COMPLEX_CST:
14689       if ((ret = cst_pool_loc_descr (loc)))
14690         have_address = 1;
14691       else
14692       /* We can construct small constants here using int_loc_descriptor.  */
14693         expansion_failed (loc, NULL_RTX,
14694                           "constructor or constant not in constant pool");
14695       break;
14696
14697     case TRUTH_AND_EXPR:
14698     case TRUTH_ANDIF_EXPR:
14699     case BIT_AND_EXPR:
14700       op = DW_OP_and;
14701       goto do_binop;
14702
14703     case TRUTH_XOR_EXPR:
14704     case BIT_XOR_EXPR:
14705       op = DW_OP_xor;
14706       goto do_binop;
14707
14708     case TRUTH_OR_EXPR:
14709     case TRUTH_ORIF_EXPR:
14710     case BIT_IOR_EXPR:
14711       op = DW_OP_or;
14712       goto do_binop;
14713
14714     case FLOOR_DIV_EXPR:
14715     case CEIL_DIV_EXPR:
14716     case ROUND_DIV_EXPR:
14717     case TRUNC_DIV_EXPR:
14718       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14719         return 0;
14720       op = DW_OP_div;
14721       goto do_binop;
14722
14723     case MINUS_EXPR:
14724       op = DW_OP_minus;
14725       goto do_binop;
14726
14727     case FLOOR_MOD_EXPR:
14728     case CEIL_MOD_EXPR:
14729     case ROUND_MOD_EXPR:
14730     case TRUNC_MOD_EXPR:
14731       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14732         {
14733           op = DW_OP_mod;
14734           goto do_binop;
14735         }
14736       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14737       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14738       if (list_ret == 0 || list_ret1 == 0)
14739         return 0;
14740
14741       add_loc_list (&list_ret, list_ret1);
14742       if (list_ret == 0)
14743         return 0;
14744       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14745       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14746       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14747       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14748       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14749       break;
14750
14751     case MULT_EXPR:
14752       op = DW_OP_mul;
14753       goto do_binop;
14754
14755     case LSHIFT_EXPR:
14756       op = DW_OP_shl;
14757       goto do_binop;
14758
14759     case RSHIFT_EXPR:
14760       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14761       goto do_binop;
14762
14763     case POINTER_PLUS_EXPR:
14764     case PLUS_EXPR:
14765       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14766           && host_integerp (TREE_OPERAND (loc, 1), 0))
14767         {
14768           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14769           if (list_ret == 0)
14770             return 0;
14771
14772           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14773           break;
14774         }
14775
14776       op = DW_OP_plus;
14777       goto do_binop;
14778
14779     case LE_EXPR:
14780       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14781         return 0;
14782
14783       op = DW_OP_le;
14784       goto do_binop;
14785
14786     case GE_EXPR:
14787       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14788         return 0;
14789
14790       op = DW_OP_ge;
14791       goto do_binop;
14792
14793     case LT_EXPR:
14794       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14795         return 0;
14796
14797       op = DW_OP_lt;
14798       goto do_binop;
14799
14800     case GT_EXPR:
14801       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14802         return 0;
14803
14804       op = DW_OP_gt;
14805       goto do_binop;
14806
14807     case EQ_EXPR:
14808       op = DW_OP_eq;
14809       goto do_binop;
14810
14811     case NE_EXPR:
14812       op = DW_OP_ne;
14813       goto do_binop;
14814
14815     do_binop:
14816       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14817       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14818       if (list_ret == 0 || list_ret1 == 0)
14819         return 0;
14820
14821       add_loc_list (&list_ret, list_ret1);
14822       if (list_ret == 0)
14823         return 0;
14824       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14825       break;
14826
14827     case TRUTH_NOT_EXPR:
14828     case BIT_NOT_EXPR:
14829       op = DW_OP_not;
14830       goto do_unop;
14831
14832     case ABS_EXPR:
14833       op = DW_OP_abs;
14834       goto do_unop;
14835
14836     case NEGATE_EXPR:
14837       op = DW_OP_neg;
14838       goto do_unop;
14839
14840     do_unop:
14841       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14842       if (list_ret == 0)
14843         return 0;
14844
14845       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14846       break;
14847
14848     case MIN_EXPR:
14849     case MAX_EXPR:
14850       {
14851         const enum tree_code code =
14852           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14853
14854         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14855                       build2 (code, integer_type_node,
14856                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14857                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14858       }
14859
14860       /* ... fall through ...  */
14861
14862     case COND_EXPR:
14863       {
14864         dw_loc_descr_ref lhs
14865           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14866         dw_loc_list_ref rhs
14867           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14868         dw_loc_descr_ref bra_node, jump_node, tmp;
14869
14870         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14871         if (list_ret == 0 || lhs == 0 || rhs == 0)
14872           return 0;
14873
14874         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14875         add_loc_descr_to_each (list_ret, bra_node);
14876
14877         add_loc_list (&list_ret, rhs);
14878         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14879         add_loc_descr_to_each (list_ret, jump_node);
14880
14881         add_loc_descr_to_each (list_ret, lhs);
14882         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14883         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14884
14885         /* ??? Need a node to point the skip at.  Use a nop.  */
14886         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14887         add_loc_descr_to_each (list_ret, tmp);
14888         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14889         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14890       }
14891       break;
14892
14893     case FIX_TRUNC_EXPR:
14894       return 0;
14895
14896     default:
14897       /* Leave front-end specific codes as simply unknown.  This comes
14898          up, for instance, with the C STMT_EXPR.  */
14899       if ((unsigned int) TREE_CODE (loc)
14900           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14901         {
14902           expansion_failed (loc, NULL_RTX,
14903                             "language specific tree node");
14904           return 0;
14905         }
14906
14907 #ifdef ENABLE_CHECKING
14908       /* Otherwise this is a generic code; we should just lists all of
14909          these explicitly.  We forgot one.  */
14910       gcc_unreachable ();
14911 #else
14912       /* In a release build, we want to degrade gracefully: better to
14913          generate incomplete debugging information than to crash.  */
14914       return NULL;
14915 #endif
14916     }
14917
14918   if (!ret && !list_ret)
14919     return 0;
14920
14921   if (want_address == 2 && !have_address
14922       && (dwarf_version >= 4 || !dwarf_strict))
14923     {
14924       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14925         {
14926           expansion_failed (loc, NULL_RTX,
14927                             "DWARF address size mismatch");
14928           return 0;
14929         }
14930       if (ret)
14931         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14932       else
14933         add_loc_descr_to_each (list_ret,
14934                                new_loc_descr (DW_OP_stack_value, 0, 0));
14935       have_address = 1;
14936     }
14937   /* Show if we can't fill the request for an address.  */
14938   if (want_address && !have_address)
14939     {
14940       expansion_failed (loc, NULL_RTX,
14941                         "Want address and only have value");
14942       return 0;
14943     }
14944
14945   gcc_assert (!ret || !list_ret);
14946
14947   /* If we've got an address and don't want one, dereference.  */
14948   if (!want_address && have_address)
14949     {
14950       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14951
14952       if (size > DWARF2_ADDR_SIZE || size == -1)
14953         {
14954           expansion_failed (loc, NULL_RTX,
14955                             "DWARF address size mismatch");
14956           return 0;
14957         }
14958       else if (size == DWARF2_ADDR_SIZE)
14959         op = DW_OP_deref;
14960       else
14961         op = DW_OP_deref_size;
14962
14963       if (ret)
14964         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14965       else
14966         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14967     }
14968   if (ret)
14969     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14970
14971   return list_ret;
14972 }
14973
14974 /* Same as above but return only single location expression.  */
14975 static dw_loc_descr_ref
14976 loc_descriptor_from_tree (tree loc, int want_address)
14977 {
14978   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14979   if (!ret)
14980     return NULL;
14981   if (ret->dw_loc_next)
14982     {
14983       expansion_failed (loc, NULL_RTX,
14984                         "Location list where only loc descriptor needed");
14985       return NULL;
14986     }
14987   return ret->expr;
14988 }
14989
14990 /* Given a value, round it up to the lowest multiple of `boundary'
14991    which is not less than the value itself.  */
14992
14993 static inline HOST_WIDE_INT
14994 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14995 {
14996   return (((value + boundary - 1) / boundary) * boundary);
14997 }
14998
14999 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
15000    pointer to the declared type for the relevant field variable, or return
15001    `integer_type_node' if the given node turns out to be an
15002    ERROR_MARK node.  */
15003
15004 static inline tree
15005 field_type (const_tree decl)
15006 {
15007   tree type;
15008
15009   if (TREE_CODE (decl) == ERROR_MARK)
15010     return integer_type_node;
15011
15012   type = DECL_BIT_FIELD_TYPE (decl);
15013   if (type == NULL_TREE)
15014     type = TREE_TYPE (decl);
15015
15016   return type;
15017 }
15018
15019 /* Given a pointer to a tree node, return the alignment in bits for
15020    it, or else return BITS_PER_WORD if the node actually turns out to
15021    be an ERROR_MARK node.  */
15022
15023 static inline unsigned
15024 simple_type_align_in_bits (const_tree type)
15025 {
15026   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
15027 }
15028
15029 static inline unsigned
15030 simple_decl_align_in_bits (const_tree decl)
15031 {
15032   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
15033 }
15034
15035 /* Return the result of rounding T up to ALIGN.  */
15036
15037 static inline HOST_WIDE_INT
15038 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
15039 {
15040   /* We must be careful if T is negative because HOST_WIDE_INT can be
15041      either "above" or "below" unsigned int as per the C promotion
15042      rules, depending on the host, thus making the signedness of the
15043      direct multiplication and division unpredictable.  */
15044   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
15045
15046   u += align - 1;
15047   u /= align;
15048   u *= align;
15049
15050   return (HOST_WIDE_INT) u;
15051 }
15052
15053 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15054    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15055    or return 0 if we are unable to determine what that offset is, either
15056    because the argument turns out to be a pointer to an ERROR_MARK node, or
15057    because the offset is actually variable.  (We can't handle the latter case
15058    just yet).  */
15059
15060 static HOST_WIDE_INT
15061 field_byte_offset (const_tree decl)
15062 {
15063   HOST_WIDE_INT object_offset_in_bits;
15064   HOST_WIDE_INT bitpos_int;
15065
15066   if (TREE_CODE (decl) == ERROR_MARK)
15067     return 0;
15068
15069   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15070
15071   /* We cannot yet cope with fields whose positions are variable, so
15072      for now, when we see such things, we simply return 0.  Someday, we may
15073      be able to handle such cases, but it will be damn difficult.  */
15074   if (! host_integerp (bit_position (decl), 0))
15075     return 0;
15076
15077   bitpos_int = int_bit_position (decl);
15078
15079 #ifdef PCC_BITFIELD_TYPE_MATTERS
15080   if (PCC_BITFIELD_TYPE_MATTERS)
15081     {
15082       tree type;
15083       tree field_size_tree;
15084       HOST_WIDE_INT deepest_bitpos;
15085       unsigned HOST_WIDE_INT field_size_in_bits;
15086       unsigned int type_align_in_bits;
15087       unsigned int decl_align_in_bits;
15088       unsigned HOST_WIDE_INT type_size_in_bits;
15089
15090       type = field_type (decl);
15091       type_size_in_bits = simple_type_size_in_bits (type);
15092       type_align_in_bits = simple_type_align_in_bits (type);
15093
15094       field_size_tree = DECL_SIZE (decl);
15095
15096       /* The size could be unspecified if there was an error, or for
15097          a flexible array member.  */
15098       if (!field_size_tree)
15099         field_size_tree = bitsize_zero_node;
15100
15101       /* If the size of the field is not constant, use the type size.  */
15102       if (host_integerp (field_size_tree, 1))
15103         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15104       else
15105         field_size_in_bits = type_size_in_bits;
15106
15107       decl_align_in_bits = simple_decl_align_in_bits (decl);
15108
15109       /* The GCC front-end doesn't make any attempt to keep track of the
15110          starting bit offset (relative to the start of the containing
15111          structure type) of the hypothetical "containing object" for a
15112          bit-field.  Thus, when computing the byte offset value for the
15113          start of the "containing object" of a bit-field, we must deduce
15114          this information on our own. This can be rather tricky to do in
15115          some cases.  For example, handling the following structure type
15116          definition when compiling for an i386/i486 target (which only
15117          aligns long long's to 32-bit boundaries) can be very tricky:
15118
15119          struct S { int field1; long long field2:31; };
15120
15121          Fortunately, there is a simple rule-of-thumb which can be used
15122          in such cases.  When compiling for an i386/i486, GCC will
15123          allocate 8 bytes for the structure shown above.  It decides to
15124          do this based upon one simple rule for bit-field allocation.
15125          GCC allocates each "containing object" for each bit-field at
15126          the first (i.e. lowest addressed) legitimate alignment boundary
15127          (based upon the required minimum alignment for the declared
15128          type of the field) which it can possibly use, subject to the
15129          condition that there is still enough available space remaining
15130          in the containing object (when allocated at the selected point)
15131          to fully accommodate all of the bits of the bit-field itself.
15132
15133          This simple rule makes it obvious why GCC allocates 8 bytes for
15134          each object of the structure type shown above.  When looking
15135          for a place to allocate the "containing object" for `field2',
15136          the compiler simply tries to allocate a 64-bit "containing
15137          object" at each successive 32-bit boundary (starting at zero)
15138          until it finds a place to allocate that 64- bit field such that
15139          at least 31 contiguous (and previously unallocated) bits remain
15140          within that selected 64 bit field.  (As it turns out, for the
15141          example above, the compiler finds it is OK to allocate the
15142          "containing object" 64-bit field at bit-offset zero within the
15143          structure type.)
15144
15145          Here we attempt to work backwards from the limited set of facts
15146          we're given, and we try to deduce from those facts, where GCC
15147          must have believed that the containing object started (within
15148          the structure type). The value we deduce is then used (by the
15149          callers of this routine) to generate DW_AT_location and
15150          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15151          the case of DW_AT_location, regular fields as well).  */
15152
15153       /* Figure out the bit-distance from the start of the structure to
15154          the "deepest" bit of the bit-field.  */
15155       deepest_bitpos = bitpos_int + field_size_in_bits;
15156
15157       /* This is the tricky part.  Use some fancy footwork to deduce
15158          where the lowest addressed bit of the containing object must
15159          be.  */
15160       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15161
15162       /* Round up to type_align by default.  This works best for
15163          bitfields.  */
15164       object_offset_in_bits
15165         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15166
15167       if (object_offset_in_bits > bitpos_int)
15168         {
15169           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15170
15171           /* Round up to decl_align instead.  */
15172           object_offset_in_bits
15173             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15174         }
15175     }
15176   else
15177 #endif
15178     object_offset_in_bits = bitpos_int;
15179
15180   return object_offset_in_bits / BITS_PER_UNIT;
15181 }
15182 \f
15183 /* The following routines define various Dwarf attributes and any data
15184    associated with them.  */
15185
15186 /* Add a location description attribute value to a DIE.
15187
15188    This emits location attributes suitable for whole variables and
15189    whole parameters.  Note that the location attributes for struct fields are
15190    generated by the routine `data_member_location_attribute' below.  */
15191
15192 static inline void
15193 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15194                              dw_loc_list_ref descr)
15195 {
15196   if (descr == 0)
15197     return;
15198   if (single_element_loc_list_p (descr))
15199     add_AT_loc (die, attr_kind, descr->expr);
15200   else
15201     add_AT_loc_list (die, attr_kind, descr);
15202 }
15203
15204 /* Attach the specialized form of location attribute used for data members of
15205    struct and union types.  In the special case of a FIELD_DECL node which
15206    represents a bit-field, the "offset" part of this special location
15207    descriptor must indicate the distance in bytes from the lowest-addressed
15208    byte of the containing struct or union type to the lowest-addressed byte of
15209    the "containing object" for the bit-field.  (See the `field_byte_offset'
15210    function above).
15211
15212    For any given bit-field, the "containing object" is a hypothetical object
15213    (of some integral or enum type) within which the given bit-field lives.  The
15214    type of this hypothetical "containing object" is always the same as the
15215    declared type of the individual bit-field itself (for GCC anyway... the
15216    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15217    bytes) of the hypothetical "containing object" which will be given in the
15218    DW_AT_byte_size attribute for this bit-field.  (See the
15219    `byte_size_attribute' function below.)  It is also used when calculating the
15220    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15221    function below.)  */
15222
15223 static void
15224 add_data_member_location_attribute (dw_die_ref die, tree decl)
15225 {
15226   HOST_WIDE_INT offset;
15227   dw_loc_descr_ref loc_descr = 0;
15228
15229   if (TREE_CODE (decl) == TREE_BINFO)
15230     {
15231       /* We're working on the TAG_inheritance for a base class.  */
15232       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15233         {
15234           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15235              aren't at a fixed offset from all (sub)objects of the same
15236              type.  We need to extract the appropriate offset from our
15237              vtable.  The following dwarf expression means
15238
15239                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15240
15241              This is specific to the V3 ABI, of course.  */
15242
15243           dw_loc_descr_ref tmp;
15244
15245           /* Make a copy of the object address.  */
15246           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15247           add_loc_descr (&loc_descr, tmp);
15248
15249           /* Extract the vtable address.  */
15250           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15251           add_loc_descr (&loc_descr, tmp);
15252
15253           /* Calculate the address of the offset.  */
15254           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15255           gcc_assert (offset < 0);
15256
15257           tmp = int_loc_descriptor (-offset);
15258           add_loc_descr (&loc_descr, tmp);
15259           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15260           add_loc_descr (&loc_descr, tmp);
15261
15262           /* Extract the offset.  */
15263           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15264           add_loc_descr (&loc_descr, tmp);
15265
15266           /* Add it to the object address.  */
15267           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15268           add_loc_descr (&loc_descr, tmp);
15269         }
15270       else
15271         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15272     }
15273   else
15274     offset = field_byte_offset (decl);
15275
15276   if (! loc_descr)
15277     {
15278       if (dwarf_version > 2)
15279         {
15280           /* Don't need to output a location expression, just the constant. */
15281           add_AT_int (die, DW_AT_data_member_location, offset);
15282           return;
15283         }
15284       else
15285         {
15286           enum dwarf_location_atom op;
15287
15288           /* The DWARF2 standard says that we should assume that the structure
15289              address is already on the stack, so we can specify a structure
15290              field address by using DW_OP_plus_uconst.  */
15291
15292 #ifdef MIPS_DEBUGGING_INFO
15293           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15294              operator correctly.  It works only if we leave the offset on the
15295              stack.  */
15296           op = DW_OP_constu;
15297 #else
15298           op = DW_OP_plus_uconst;
15299 #endif
15300
15301           loc_descr = new_loc_descr (op, offset, 0);
15302         }
15303     }
15304
15305   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15306 }
15307
15308 /* Writes integer values to dw_vec_const array.  */
15309
15310 static void
15311 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15312 {
15313   while (size != 0)
15314     {
15315       *dest++ = val & 0xff;
15316       val >>= 8;
15317       --size;
15318     }
15319 }
15320
15321 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15322
15323 static HOST_WIDE_INT
15324 extract_int (const unsigned char *src, unsigned int size)
15325 {
15326   HOST_WIDE_INT val = 0;
15327
15328   src += size;
15329   while (size != 0)
15330     {
15331       val <<= 8;
15332       val |= *--src & 0xff;
15333       --size;
15334     }
15335   return val;
15336 }
15337
15338 /* Writes floating point values to dw_vec_const array.  */
15339
15340 static void
15341 insert_float (const_rtx rtl, unsigned char *array)
15342 {
15343   REAL_VALUE_TYPE rv;
15344   long val[4];
15345   int i;
15346
15347   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15348   real_to_target (val, &rv, GET_MODE (rtl));
15349
15350   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15351   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15352     {
15353       insert_int (val[i], 4, array);
15354       array += 4;
15355     }
15356 }
15357
15358 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15359    does not have a "location" either in memory or in a register.  These
15360    things can arise in GNU C when a constant is passed as an actual parameter
15361    to an inlined function.  They can also arise in C++ where declared
15362    constants do not necessarily get memory "homes".  */
15363
15364 static bool
15365 add_const_value_attribute (dw_die_ref die, rtx rtl)
15366 {
15367   switch (GET_CODE (rtl))
15368     {
15369     case CONST_INT:
15370       {
15371         HOST_WIDE_INT val = INTVAL (rtl);
15372
15373         if (val < 0)
15374           add_AT_int (die, DW_AT_const_value, val);
15375         else
15376           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15377       }
15378       return true;
15379
15380     case CONST_DOUBLE:
15381       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15382          floating-point constant.  A CONST_DOUBLE is used whenever the
15383          constant requires more than one word in order to be adequately
15384          represented.  */
15385       {
15386         enum machine_mode mode = GET_MODE (rtl);
15387
15388         if (SCALAR_FLOAT_MODE_P (mode))
15389           {
15390             unsigned int length = GET_MODE_SIZE (mode);
15391             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15392
15393             insert_float (rtl, array);
15394             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15395           }
15396         else
15397           add_AT_double (die, DW_AT_const_value,
15398                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15399       }
15400       return true;
15401
15402     case CONST_VECTOR:
15403       {
15404         enum machine_mode mode = GET_MODE (rtl);
15405         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15406         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15407         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15408         unsigned int i;
15409         unsigned char *p;
15410
15411         switch (GET_MODE_CLASS (mode))
15412           {
15413           case MODE_VECTOR_INT:
15414             for (i = 0, p = array; i < length; i++, p += elt_size)
15415               {
15416                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15417                 HOST_WIDE_INT lo, hi;
15418
15419                 switch (GET_CODE (elt))
15420                   {
15421                   case CONST_INT:
15422                     lo = INTVAL (elt);
15423                     hi = -(lo < 0);
15424                     break;
15425
15426                   case CONST_DOUBLE:
15427                     lo = CONST_DOUBLE_LOW (elt);
15428                     hi = CONST_DOUBLE_HIGH (elt);
15429                     break;
15430
15431                   default:
15432                     gcc_unreachable ();
15433                   }
15434
15435                 if (elt_size <= sizeof (HOST_WIDE_INT))
15436                   insert_int (lo, elt_size, p);
15437                 else
15438                   {
15439                     unsigned char *p0 = p;
15440                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15441
15442                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15443                     if (WORDS_BIG_ENDIAN)
15444                       {
15445                         p0 = p1;
15446                         p1 = p;
15447                       }
15448                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15449                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15450                   }
15451               }
15452             break;
15453
15454           case MODE_VECTOR_FLOAT:
15455             for (i = 0, p = array; i < length; i++, p += elt_size)
15456               {
15457                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15458                 insert_float (elt, p);
15459               }
15460             break;
15461
15462           default:
15463             gcc_unreachable ();
15464           }
15465
15466         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15467       }
15468       return true;
15469
15470     case CONST_STRING:
15471       if (dwarf_version >= 4 || !dwarf_strict)
15472         {
15473           dw_loc_descr_ref loc_result;
15474           resolve_one_addr (&rtl, NULL);
15475         rtl_addr:
15476           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15477           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15478           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15479           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15480           add_AT_loc (die, DW_AT_location, loc_result);
15481           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15482           return true;
15483         }
15484       return false;
15485
15486     case CONST:
15487       if (CONSTANT_P (XEXP (rtl, 0)))
15488         return add_const_value_attribute (die, XEXP (rtl, 0));
15489       /* FALLTHROUGH */
15490     case SYMBOL_REF:
15491       if (!const_ok_for_output (rtl))
15492         return false;
15493     case LABEL_REF:
15494       if (dwarf_version >= 4 || !dwarf_strict)
15495         goto rtl_addr;
15496       return false;
15497
15498     case PLUS:
15499       /* In cases where an inlined instance of an inline function is passed
15500          the address of an `auto' variable (which is local to the caller) we
15501          can get a situation where the DECL_RTL of the artificial local
15502          variable (for the inlining) which acts as a stand-in for the
15503          corresponding formal parameter (of the inline function) will look
15504          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15505          exactly a compile-time constant expression, but it isn't the address
15506          of the (artificial) local variable either.  Rather, it represents the
15507          *value* which the artificial local variable always has during its
15508          lifetime.  We currently have no way to represent such quasi-constant
15509          values in Dwarf, so for now we just punt and generate nothing.  */
15510       return false;
15511
15512     case HIGH:
15513     case CONST_FIXED:
15514       return false;
15515
15516     case MEM:
15517       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15518           && MEM_READONLY_P (rtl)
15519           && GET_MODE (rtl) == BLKmode)
15520         {
15521           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15522           return true;
15523         }
15524       return false;
15525
15526     default:
15527       /* No other kinds of rtx should be possible here.  */
15528       gcc_unreachable ();
15529     }
15530   return false;
15531 }
15532
15533 /* Determine whether the evaluation of EXPR references any variables
15534    or functions which aren't otherwise used (and therefore may not be
15535    output).  */
15536 static tree
15537 reference_to_unused (tree * tp, int * walk_subtrees,
15538                      void * data ATTRIBUTE_UNUSED)
15539 {
15540   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15541     *walk_subtrees = 0;
15542
15543   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15544       && ! TREE_ASM_WRITTEN (*tp))
15545     return *tp;
15546   /* ???  The C++ FE emits debug information for using decls, so
15547      putting gcc_unreachable here falls over.  See PR31899.  For now
15548      be conservative.  */
15549   else if (!cgraph_global_info_ready
15550            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15551     return *tp;
15552   else if (TREE_CODE (*tp) == VAR_DECL)
15553     {
15554       struct varpool_node *node = varpool_node (*tp);
15555       if (!node->needed)
15556         return *tp;
15557     }
15558   else if (TREE_CODE (*tp) == FUNCTION_DECL
15559            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15560     {
15561       /* The call graph machinery must have finished analyzing,
15562          optimizing and gimplifying the CU by now.
15563          So if *TP has no call graph node associated
15564          to it, it means *TP will not be emitted.  */
15565       if (!cgraph_get_node (*tp))
15566         return *tp;
15567     }
15568   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15569     return *tp;
15570
15571   return NULL_TREE;
15572 }
15573
15574 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15575    for use in a later add_const_value_attribute call.  */
15576
15577 static rtx
15578 rtl_for_decl_init (tree init, tree type)
15579 {
15580   rtx rtl = NULL_RTX;
15581
15582   /* If a variable is initialized with a string constant without embedded
15583      zeros, build CONST_STRING.  */
15584   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15585     {
15586       tree enttype = TREE_TYPE (type);
15587       tree domain = TYPE_DOMAIN (type);
15588       enum machine_mode mode = TYPE_MODE (enttype);
15589
15590       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15591           && domain
15592           && integer_zerop (TYPE_MIN_VALUE (domain))
15593           && compare_tree_int (TYPE_MAX_VALUE (domain),
15594                                TREE_STRING_LENGTH (init) - 1) == 0
15595           && ((size_t) TREE_STRING_LENGTH (init)
15596               == strlen (TREE_STRING_POINTER (init)) + 1))
15597         {
15598           rtl = gen_rtx_CONST_STRING (VOIDmode,
15599                                       ggc_strdup (TREE_STRING_POINTER (init)));
15600           rtl = gen_rtx_MEM (BLKmode, rtl);
15601           MEM_READONLY_P (rtl) = 1;
15602         }
15603     }
15604   /* Other aggregates, and complex values, could be represented using
15605      CONCAT: FIXME!  */
15606   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15607     ;
15608   /* Vectors only work if their mode is supported by the target.
15609      FIXME: generic vectors ought to work too.  */
15610   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15611     ;
15612   /* If the initializer is something that we know will expand into an
15613      immediate RTL constant, expand it now.  We must be careful not to
15614      reference variables which won't be output.  */
15615   else if (initializer_constant_valid_p (init, type)
15616            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15617     {
15618       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15619          possible.  */
15620       if (TREE_CODE (type) == VECTOR_TYPE)
15621         switch (TREE_CODE (init))
15622           {
15623           case VECTOR_CST:
15624             break;
15625           case CONSTRUCTOR:
15626             if (TREE_CONSTANT (init))
15627               {
15628                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15629                 bool constant_p = true;
15630                 tree value;
15631                 unsigned HOST_WIDE_INT ix;
15632
15633                 /* Even when ctor is constant, it might contain non-*_CST
15634                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15635                    belong into VECTOR_CST nodes.  */
15636                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15637                   if (!CONSTANT_CLASS_P (value))
15638                     {
15639                       constant_p = false;
15640                       break;
15641                     }
15642
15643                 if (constant_p)
15644                   {
15645                     init = build_vector_from_ctor (type, elts);
15646                     break;
15647                   }
15648               }
15649             /* FALLTHRU */
15650
15651           default:
15652             return NULL;
15653           }
15654
15655       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15656
15657       /* If expand_expr returns a MEM, it wasn't immediate.  */
15658       gcc_assert (!rtl || !MEM_P (rtl));
15659     }
15660
15661   return rtl;
15662 }
15663
15664 /* Generate RTL for the variable DECL to represent its location.  */
15665
15666 static rtx
15667 rtl_for_decl_location (tree decl)
15668 {
15669   rtx rtl;
15670
15671   /* Here we have to decide where we are going to say the parameter "lives"
15672      (as far as the debugger is concerned).  We only have a couple of
15673      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15674
15675      DECL_RTL normally indicates where the parameter lives during most of the
15676      activation of the function.  If optimization is enabled however, this
15677      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15678      that the parameter doesn't really live anywhere (as far as the code
15679      generation parts of GCC are concerned) during most of the function's
15680      activation.  That will happen (for example) if the parameter is never
15681      referenced within the function.
15682
15683      We could just generate a location descriptor here for all non-NULL
15684      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15685      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15686      where DECL_RTL is NULL or is a pseudo-reg.
15687
15688      Note however that we can only get away with using DECL_INCOMING_RTL as
15689      a backup substitute for DECL_RTL in certain limited cases.  In cases
15690      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15691      we can be sure that the parameter was passed using the same type as it is
15692      declared to have within the function, and that its DECL_INCOMING_RTL
15693      points us to a place where a value of that type is passed.
15694
15695      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15696      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15697      because in these cases DECL_INCOMING_RTL points us to a value of some
15698      type which is *different* from the type of the parameter itself.  Thus,
15699      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15700      such cases, the debugger would end up (for example) trying to fetch a
15701      `float' from a place which actually contains the first part of a
15702      `double'.  That would lead to really incorrect and confusing
15703      output at debug-time.
15704
15705      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15706      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15707      are a couple of exceptions however.  On little-endian machines we can
15708      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15709      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15710      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15711      when (on a little-endian machine) a non-prototyped function has a
15712      parameter declared to be of type `short' or `char'.  In such cases,
15713      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15714      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15715      passed `int' value.  If the debugger then uses that address to fetch
15716      a `short' or a `char' (on a little-endian machine) the result will be
15717      the correct data, so we allow for such exceptional cases below.
15718
15719      Note that our goal here is to describe the place where the given formal
15720      parameter lives during most of the function's activation (i.e. between the
15721      end of the prologue and the start of the epilogue).  We'll do that as best
15722      as we can. Note however that if the given formal parameter is modified
15723      sometime during the execution of the function, then a stack backtrace (at
15724      debug-time) will show the function as having been called with the *new*
15725      value rather than the value which was originally passed in.  This happens
15726      rarely enough that it is not a major problem, but it *is* a problem, and
15727      I'd like to fix it.
15728
15729      A future version of dwarf2out.c may generate two additional attributes for
15730      any given DW_TAG_formal_parameter DIE which will describe the "passed
15731      type" and the "passed location" for the given formal parameter in addition
15732      to the attributes we now generate to indicate the "declared type" and the
15733      "active location" for each parameter.  This additional set of attributes
15734      could be used by debuggers for stack backtraces. Separately, note that
15735      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15736      This happens (for example) for inlined-instances of inline function formal
15737      parameters which are never referenced.  This really shouldn't be
15738      happening.  All PARM_DECL nodes should get valid non-NULL
15739      DECL_INCOMING_RTL values.  FIXME.  */
15740
15741   /* Use DECL_RTL as the "location" unless we find something better.  */
15742   rtl = DECL_RTL_IF_SET (decl);
15743
15744   /* When generating abstract instances, ignore everything except
15745      constants, symbols living in memory, and symbols living in
15746      fixed registers.  */
15747   if (! reload_completed)
15748     {
15749       if (rtl
15750           && (CONSTANT_P (rtl)
15751               || (MEM_P (rtl)
15752                   && CONSTANT_P (XEXP (rtl, 0)))
15753               || (REG_P (rtl)
15754                   && TREE_CODE (decl) == VAR_DECL
15755                   && TREE_STATIC (decl))))
15756         {
15757           rtl = targetm.delegitimize_address (rtl);
15758           return rtl;
15759         }
15760       rtl = NULL_RTX;
15761     }
15762   else if (TREE_CODE (decl) == PARM_DECL)
15763     {
15764       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15765         {
15766           tree declared_type = TREE_TYPE (decl);
15767           tree passed_type = DECL_ARG_TYPE (decl);
15768           enum machine_mode dmode = TYPE_MODE (declared_type);
15769           enum machine_mode pmode = TYPE_MODE (passed_type);
15770
15771           /* This decl represents a formal parameter which was optimized out.
15772              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15773              all cases where (rtl == NULL_RTX) just below.  */
15774           if (dmode == pmode)
15775             rtl = DECL_INCOMING_RTL (decl);
15776           else if (SCALAR_INT_MODE_P (dmode)
15777                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15778                    && DECL_INCOMING_RTL (decl))
15779             {
15780               rtx inc = DECL_INCOMING_RTL (decl);
15781               if (REG_P (inc))
15782                 rtl = inc;
15783               else if (MEM_P (inc))
15784                 {
15785                   if (BYTES_BIG_ENDIAN)
15786                     rtl = adjust_address_nv (inc, dmode,
15787                                              GET_MODE_SIZE (pmode)
15788                                              - GET_MODE_SIZE (dmode));
15789                   else
15790                     rtl = inc;
15791                 }
15792             }
15793         }
15794
15795       /* If the parm was passed in registers, but lives on the stack, then
15796          make a big endian correction if the mode of the type of the
15797          parameter is not the same as the mode of the rtl.  */
15798       /* ??? This is the same series of checks that are made in dbxout.c before
15799          we reach the big endian correction code there.  It isn't clear if all
15800          of these checks are necessary here, but keeping them all is the safe
15801          thing to do.  */
15802       else if (MEM_P (rtl)
15803                && XEXP (rtl, 0) != const0_rtx
15804                && ! CONSTANT_P (XEXP (rtl, 0))
15805                /* Not passed in memory.  */
15806                && !MEM_P (DECL_INCOMING_RTL (decl))
15807                /* Not passed by invisible reference.  */
15808                && (!REG_P (XEXP (rtl, 0))
15809                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15810                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15811 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15812                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15813 #endif
15814                      )
15815                /* Big endian correction check.  */
15816                && BYTES_BIG_ENDIAN
15817                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15818                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15819                    < UNITS_PER_WORD))
15820         {
15821           int offset = (UNITS_PER_WORD
15822                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15823
15824           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15825                              plus_constant (XEXP (rtl, 0), offset));
15826         }
15827     }
15828   else if (TREE_CODE (decl) == VAR_DECL
15829            && rtl
15830            && MEM_P (rtl)
15831            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15832            && BYTES_BIG_ENDIAN)
15833     {
15834       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15835       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15836
15837       /* If a variable is declared "register" yet is smaller than
15838          a register, then if we store the variable to memory, it
15839          looks like we're storing a register-sized value, when in
15840          fact we are not.  We need to adjust the offset of the
15841          storage location to reflect the actual value's bytes,
15842          else gdb will not be able to display it.  */
15843       if (rsize > dsize)
15844         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15845                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15846     }
15847
15848   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15849      and will have been substituted directly into all expressions that use it.
15850      C does not have such a concept, but C++ and other languages do.  */
15851   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15852     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15853
15854   if (rtl)
15855     rtl = targetm.delegitimize_address (rtl);
15856
15857   /* If we don't look past the constant pool, we risk emitting a
15858      reference to a constant pool entry that isn't referenced from
15859      code, and thus is not emitted.  */
15860   if (rtl)
15861     rtl = avoid_constant_pool_reference (rtl);
15862
15863   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15864      in the current CU, resolve_addr will remove the expression referencing
15865      it.  */
15866   if (rtl == NULL_RTX
15867       && TREE_CODE (decl) == VAR_DECL
15868       && !DECL_EXTERNAL (decl)
15869       && TREE_STATIC (decl)
15870       && DECL_NAME (decl)
15871       && !DECL_HARD_REGISTER (decl)
15872       && DECL_MODE (decl) != VOIDmode)
15873     {
15874       rtl = make_decl_rtl_for_debug (decl);
15875       if (!MEM_P (rtl)
15876           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15877           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15878         rtl = NULL_RTX;
15879     }
15880
15881   return rtl;
15882 }
15883
15884 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15885    returned.  If so, the decl for the COMMON block is returned, and the
15886    value is the offset into the common block for the symbol.  */
15887
15888 static tree
15889 fortran_common (tree decl, HOST_WIDE_INT *value)
15890 {
15891   tree val_expr, cvar;
15892   enum machine_mode mode;
15893   HOST_WIDE_INT bitsize, bitpos;
15894   tree offset;
15895   int volatilep = 0, unsignedp = 0;
15896
15897   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15898      it does not have a value (the offset into the common area), or if it
15899      is thread local (as opposed to global) then it isn't common, and shouldn't
15900      be handled as such.  */
15901   if (TREE_CODE (decl) != VAR_DECL
15902       || !TREE_STATIC (decl)
15903       || !DECL_HAS_VALUE_EXPR_P (decl)
15904       || !is_fortran ())
15905     return NULL_TREE;
15906
15907   val_expr = DECL_VALUE_EXPR (decl);
15908   if (TREE_CODE (val_expr) != COMPONENT_REF)
15909     return NULL_TREE;
15910
15911   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15912                               &mode, &unsignedp, &volatilep, true);
15913
15914   if (cvar == NULL_TREE
15915       || TREE_CODE (cvar) != VAR_DECL
15916       || DECL_ARTIFICIAL (cvar)
15917       || !TREE_PUBLIC (cvar))
15918     return NULL_TREE;
15919
15920   *value = 0;
15921   if (offset != NULL)
15922     {
15923       if (!host_integerp (offset, 0))
15924         return NULL_TREE;
15925       *value = tree_low_cst (offset, 0);
15926     }
15927   if (bitpos != 0)
15928     *value += bitpos / BITS_PER_UNIT;
15929
15930   return cvar;
15931 }
15932
15933 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15934    data attribute for a variable or a parameter.  We generate the
15935    DW_AT_const_value attribute only in those cases where the given variable
15936    or parameter does not have a true "location" either in memory or in a
15937    register.  This can happen (for example) when a constant is passed as an
15938    actual argument in a call to an inline function.  (It's possible that
15939    these things can crop up in other ways also.)  Note that one type of
15940    constant value which can be passed into an inlined function is a constant
15941    pointer.  This can happen for example if an actual argument in an inlined
15942    function call evaluates to a compile-time constant address.  */
15943
15944 static bool
15945 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15946                                        enum dwarf_attribute attr)
15947 {
15948   rtx rtl;
15949   dw_loc_list_ref list;
15950   var_loc_list *loc_list;
15951
15952   if (TREE_CODE (decl) == ERROR_MARK)
15953     return false;
15954
15955   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15956               || TREE_CODE (decl) == RESULT_DECL);
15957
15958   /* Try to get some constant RTL for this decl, and use that as the value of
15959      the location.  */
15960
15961   rtl = rtl_for_decl_location (decl);
15962   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15963       && add_const_value_attribute (die, rtl))
15964     return true;
15965
15966   /* See if we have single element location list that is equivalent to
15967      a constant value.  That way we are better to use add_const_value_attribute
15968      rather than expanding constant value equivalent.  */
15969   loc_list = lookup_decl_loc (decl);
15970   if (loc_list
15971       && loc_list->first
15972       && loc_list->first->next == NULL
15973       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15974       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15975     {
15976       struct var_loc_node *node;
15977
15978       node = loc_list->first;
15979       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15980       if (GET_CODE (rtl) == EXPR_LIST)
15981         rtl = XEXP (rtl, 0);
15982       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15983           && add_const_value_attribute (die, rtl))
15984          return true;
15985     }
15986   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15987   if (list)
15988     {
15989       add_AT_location_description (die, attr, list);
15990       return true;
15991     }
15992   /* None of that worked, so it must not really have a location;
15993      try adding a constant value attribute from the DECL_INITIAL.  */
15994   return tree_add_const_value_attribute_for_decl (die, decl);
15995 }
15996
15997 /* Add VARIABLE and DIE into deferred locations list.  */
15998
15999 static void
16000 defer_location (tree variable, dw_die_ref die)
16001 {
16002   deferred_locations entry;
16003   entry.variable = variable;
16004   entry.die = die;
16005   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
16006 }
16007
16008 /* Helper function for tree_add_const_value_attribute.  Natively encode
16009    initializer INIT into an array.  Return true if successful.  */
16010
16011 static bool
16012 native_encode_initializer (tree init, unsigned char *array, int size)
16013 {
16014   tree type;
16015
16016   if (init == NULL_TREE)
16017     return false;
16018
16019   STRIP_NOPS (init);
16020   switch (TREE_CODE (init))
16021     {
16022     case STRING_CST:
16023       type = TREE_TYPE (init);
16024       if (TREE_CODE (type) == ARRAY_TYPE)
16025         {
16026           tree enttype = TREE_TYPE (type);
16027           enum machine_mode mode = TYPE_MODE (enttype);
16028
16029           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
16030             return false;
16031           if (int_size_in_bytes (type) != size)
16032             return false;
16033           if (size > TREE_STRING_LENGTH (init))
16034             {
16035               memcpy (array, TREE_STRING_POINTER (init),
16036                       TREE_STRING_LENGTH (init));
16037               memset (array + TREE_STRING_LENGTH (init),
16038                       '\0', size - TREE_STRING_LENGTH (init));
16039             }
16040           else
16041             memcpy (array, TREE_STRING_POINTER (init), size);
16042           return true;
16043         }
16044       return false;
16045     case CONSTRUCTOR:
16046       type = TREE_TYPE (init);
16047       if (int_size_in_bytes (type) != size)
16048         return false;
16049       if (TREE_CODE (type) == ARRAY_TYPE)
16050         {
16051           HOST_WIDE_INT min_index;
16052           unsigned HOST_WIDE_INT cnt;
16053           int curpos = 0, fieldsize;
16054           constructor_elt *ce;
16055
16056           if (TYPE_DOMAIN (type) == NULL_TREE
16057               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16058             return false;
16059
16060           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16061           if (fieldsize <= 0)
16062             return false;
16063
16064           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16065           memset (array, '\0', size);
16066           for (cnt = 0;
16067                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16068                cnt++)
16069             {
16070               tree val = ce->value;
16071               tree index = ce->index;
16072               int pos = curpos;
16073               if (index && TREE_CODE (index) == RANGE_EXPR)
16074                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16075                       * fieldsize;
16076               else if (index)
16077                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16078
16079               if (val)
16080                 {
16081                   STRIP_NOPS (val);
16082                   if (!native_encode_initializer (val, array + pos, fieldsize))
16083                     return false;
16084                 }
16085               curpos = pos + fieldsize;
16086               if (index && TREE_CODE (index) == RANGE_EXPR)
16087                 {
16088                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16089                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16090                   while (count > 0)
16091                     {
16092                       if (val)
16093                         memcpy (array + curpos, array + pos, fieldsize);
16094                       curpos += fieldsize;
16095                     }
16096                 }
16097               gcc_assert (curpos <= size);
16098             }
16099           return true;
16100         }
16101       else if (TREE_CODE (type) == RECORD_TYPE
16102                || TREE_CODE (type) == UNION_TYPE)
16103         {
16104           tree field = NULL_TREE;
16105           unsigned HOST_WIDE_INT cnt;
16106           constructor_elt *ce;
16107
16108           if (int_size_in_bytes (type) != size)
16109             return false;
16110
16111           if (TREE_CODE (type) == RECORD_TYPE)
16112             field = TYPE_FIELDS (type);
16113
16114           for (cnt = 0;
16115                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16116                cnt++, field = field ? TREE_CHAIN (field) : 0)
16117             {
16118               tree val = ce->value;
16119               int pos, fieldsize;
16120
16121               if (ce->index != 0)
16122                 field = ce->index;
16123
16124               if (val)
16125                 STRIP_NOPS (val);
16126
16127               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16128                 return false;
16129
16130               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16131                   && TYPE_DOMAIN (TREE_TYPE (field))
16132                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16133                 return false;
16134               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16135                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16136                 return false;
16137               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16138               pos = int_byte_position (field);
16139               gcc_assert (pos + fieldsize <= size);
16140               if (val
16141                   && !native_encode_initializer (val, array + pos, fieldsize))
16142                 return false;
16143             }
16144           return true;
16145         }
16146       return false;
16147     case VIEW_CONVERT_EXPR:
16148     case NON_LVALUE_EXPR:
16149       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16150     default:
16151       return native_encode_expr (init, array, size) == size;
16152     }
16153 }
16154
16155 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16156    attribute is the const value T.  */
16157
16158 static bool
16159 tree_add_const_value_attribute (dw_die_ref die, tree t)
16160 {
16161   tree init;
16162   tree type = TREE_TYPE (t);
16163   rtx rtl;
16164
16165   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16166     return false;
16167
16168   init = t;
16169   gcc_assert (!DECL_P (init));
16170
16171   rtl = rtl_for_decl_init (init, type);
16172   if (rtl)
16173     return add_const_value_attribute (die, rtl);
16174   /* If the host and target are sane, try harder.  */
16175   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16176            && initializer_constant_valid_p (init, type))
16177     {
16178       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16179       if (size > 0 && (int) size == size)
16180         {
16181           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16182
16183           if (native_encode_initializer (init, array, size))
16184             {
16185               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16186               return true;
16187             }
16188         }
16189     }
16190   return false;
16191 }
16192
16193 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16194    attribute is the const value of T, where T is an integral constant
16195    variable with static storage duration
16196    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16197
16198 static bool
16199 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16200 {
16201
16202   if (!decl
16203       || (TREE_CODE (decl) != VAR_DECL
16204           && TREE_CODE (decl) != CONST_DECL))
16205     return false;
16206
16207     if (TREE_READONLY (decl)
16208         && ! TREE_THIS_VOLATILE (decl)
16209         && DECL_INITIAL (decl))
16210       /* OK */;
16211     else
16212       return false;
16213
16214   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16215   if (get_AT (var_die, DW_AT_const_value))
16216     return false;
16217
16218   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16219 }
16220
16221 /* Convert the CFI instructions for the current function into a
16222    location list.  This is used for DW_AT_frame_base when we targeting
16223    a dwarf2 consumer that does not support the dwarf3
16224    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16225    expressions.  */
16226
16227 static dw_loc_list_ref
16228 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16229 {
16230   dw_fde_ref fde;
16231   dw_loc_list_ref list, *list_tail;
16232   dw_cfi_ref cfi;
16233   dw_cfa_location last_cfa, next_cfa;
16234   const char *start_label, *last_label, *section;
16235   dw_cfa_location remember;
16236
16237   fde = current_fde ();
16238   gcc_assert (fde != NULL);
16239
16240   section = secname_for_decl (current_function_decl);
16241   list_tail = &list;
16242   list = NULL;
16243
16244   memset (&next_cfa, 0, sizeof (next_cfa));
16245   next_cfa.reg = INVALID_REGNUM;
16246   remember = next_cfa;
16247
16248   start_label = fde->dw_fde_begin;
16249
16250   /* ??? Bald assumption that the CIE opcode list does not contain
16251      advance opcodes.  */
16252   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16253     lookup_cfa_1 (cfi, &next_cfa, &remember);
16254
16255   last_cfa = next_cfa;
16256   last_label = start_label;
16257
16258   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16259     switch (cfi->dw_cfi_opc)
16260       {
16261       case DW_CFA_set_loc:
16262       case DW_CFA_advance_loc1:
16263       case DW_CFA_advance_loc2:
16264       case DW_CFA_advance_loc4:
16265         if (!cfa_equal_p (&last_cfa, &next_cfa))
16266           {
16267             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16268                                        start_label, last_label, section);
16269
16270             list_tail = &(*list_tail)->dw_loc_next;
16271             last_cfa = next_cfa;
16272             start_label = last_label;
16273           }
16274         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16275         break;
16276
16277       case DW_CFA_advance_loc:
16278         /* The encoding is complex enough that we should never emit this.  */
16279         gcc_unreachable ();
16280
16281       default:
16282         lookup_cfa_1 (cfi, &next_cfa, &remember);
16283         break;
16284       }
16285
16286   if (!cfa_equal_p (&last_cfa, &next_cfa))
16287     {
16288       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16289                                  start_label, last_label, section);
16290       list_tail = &(*list_tail)->dw_loc_next;
16291       start_label = last_label;
16292     }
16293
16294   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16295                              start_label, fde->dw_fde_end, section);
16296
16297   if (list && list->dw_loc_next)
16298     gen_llsym (list);
16299
16300   return list;
16301 }
16302
16303 /* Compute a displacement from the "steady-state frame pointer" to the
16304    frame base (often the same as the CFA), and store it in
16305    frame_pointer_fb_offset.  OFFSET is added to the displacement
16306    before the latter is negated.  */
16307
16308 static void
16309 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16310 {
16311   rtx reg, elim;
16312
16313 #ifdef FRAME_POINTER_CFA_OFFSET
16314   reg = frame_pointer_rtx;
16315   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16316 #else
16317   reg = arg_pointer_rtx;
16318   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16319 #endif
16320
16321   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16322   if (GET_CODE (elim) == PLUS)
16323     {
16324       offset += INTVAL (XEXP (elim, 1));
16325       elim = XEXP (elim, 0);
16326     }
16327
16328   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16329                && (elim == hard_frame_pointer_rtx
16330                    || elim == stack_pointer_rtx))
16331               || elim == (frame_pointer_needed
16332                           ? hard_frame_pointer_rtx
16333                           : stack_pointer_rtx));
16334
16335   frame_pointer_fb_offset = -offset;
16336 }
16337
16338 /* Generate a DW_AT_name attribute given some string value to be included as
16339    the value of the attribute.  */
16340
16341 static void
16342 add_name_attribute (dw_die_ref die, const char *name_string)
16343 {
16344   if (name_string != NULL && *name_string != 0)
16345     {
16346       if (demangle_name_func)
16347         name_string = (*demangle_name_func) (name_string);
16348
16349       add_AT_string (die, DW_AT_name, name_string);
16350     }
16351 }
16352
16353 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16354
16355 static void
16356 add_comp_dir_attribute (dw_die_ref die)
16357 {
16358   const char *wd = get_src_pwd ();
16359   char *wd1;
16360
16361   if (wd == NULL)
16362     return;
16363
16364   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16365     {
16366       int wdlen;
16367
16368       wdlen = strlen (wd);
16369       wd1 = GGC_NEWVEC (char, wdlen + 2);
16370       strcpy (wd1, wd);
16371       wd1 [wdlen] = DIR_SEPARATOR;
16372       wd1 [wdlen + 1] = 0;
16373       wd = wd1;
16374     }
16375
16376     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16377 }
16378
16379 /* Return the default for DW_AT_lower_bound, or -1 if there is not any
16380    default.  */
16381
16382 static int
16383 lower_bound_default (void)
16384 {
16385   switch (get_AT_unsigned (comp_unit_die, DW_AT_language))
16386     {
16387     case DW_LANG_C:
16388     case DW_LANG_C89:
16389     case DW_LANG_C99:
16390     case DW_LANG_C_plus_plus:
16391     case DW_LANG_ObjC:
16392     case DW_LANG_ObjC_plus_plus:
16393     case DW_LANG_Java:
16394       return 0;
16395     case DW_LANG_Fortran77:
16396     case DW_LANG_Fortran90:
16397     case DW_LANG_Fortran95:
16398       return 1;
16399     case DW_LANG_UPC:
16400     case DW_LANG_D:
16401     case DW_LANG_Python:
16402       return dwarf_version >= 4 ? 0 : -1;
16403     case DW_LANG_Ada95:
16404     case DW_LANG_Ada83:
16405     case DW_LANG_Cobol74:
16406     case DW_LANG_Cobol85:
16407     case DW_LANG_Pascal83:
16408     case DW_LANG_Modula2:
16409     case DW_LANG_PLI:
16410       return dwarf_version >= 4 ? 1 : -1;
16411     default:
16412       return -1;
16413     }
16414 }
16415
16416 /* Given a tree node describing an array bound (either lower or upper) output
16417    a representation for that bound.  */
16418
16419 static void
16420 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16421 {
16422   switch (TREE_CODE (bound))
16423     {
16424     case ERROR_MARK:
16425       return;
16426
16427     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16428     case INTEGER_CST:
16429       {
16430         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16431         int dflt;
16432
16433         /* Use the default if possible.  */
16434         if (bound_attr == DW_AT_lower_bound
16435             && host_integerp (bound, 0)
16436             && (dflt = lower_bound_default ()) != -1
16437             && tree_low_cst (bound, 0) == dflt)
16438           ;
16439
16440         /* Otherwise represent the bound as an unsigned value with the
16441            precision of its type.  The precision and signedness of the
16442            type will be necessary to re-interpret it unambiguously.  */
16443         else if (prec < HOST_BITS_PER_WIDE_INT)
16444           {
16445             unsigned HOST_WIDE_INT mask
16446               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16447             add_AT_unsigned (subrange_die, bound_attr,
16448                              TREE_INT_CST_LOW (bound) & mask);
16449           }
16450         else if (prec == HOST_BITS_PER_WIDE_INT
16451                  || TREE_INT_CST_HIGH (bound) == 0)
16452           add_AT_unsigned (subrange_die, bound_attr,
16453                            TREE_INT_CST_LOW (bound));
16454         else
16455           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16456                          TREE_INT_CST_LOW (bound));
16457       }
16458       break;
16459
16460     CASE_CONVERT:
16461     case VIEW_CONVERT_EXPR:
16462       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16463       break;
16464
16465     case SAVE_EXPR:
16466       break;
16467
16468     case VAR_DECL:
16469     case PARM_DECL:
16470     case RESULT_DECL:
16471       {
16472         dw_die_ref decl_die = lookup_decl_die (bound);
16473
16474         /* ??? Can this happen, or should the variable have been bound
16475            first?  Probably it can, since I imagine that we try to create
16476            the types of parameters in the order in which they exist in
16477            the list, and won't have created a forward reference to a
16478            later parameter.  */
16479         if (decl_die != NULL)
16480           {
16481             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16482             break;
16483           }
16484       }
16485       /* FALLTHRU */
16486
16487     default:
16488       {
16489         /* Otherwise try to create a stack operation procedure to
16490            evaluate the value of the array bound.  */
16491
16492         dw_die_ref ctx, decl_die;
16493         dw_loc_list_ref list;
16494
16495         list = loc_list_from_tree (bound, 2);
16496         if (list == NULL || single_element_loc_list_p (list))
16497           {
16498             /* If DW_AT_*bound is not a reference nor constant, it is
16499                a DWARF expression rather than location description.
16500                For that loc_list_from_tree (bound, 0) is needed.
16501                If that fails to give a single element list,
16502                fall back to outputting this as a reference anyway.  */
16503             dw_loc_list_ref list2 = loc_list_from_tree (bound, 0);
16504             if (list2 && single_element_loc_list_p (list2))
16505               {
16506                 add_AT_loc (subrange_die, bound_attr, list2->expr);
16507                 break;
16508               }
16509           }
16510         if (list == NULL)
16511           break;
16512
16513         if (current_function_decl == 0)
16514           ctx = comp_unit_die;
16515         else
16516           ctx = lookup_decl_die (current_function_decl);
16517
16518         decl_die = new_die (DW_TAG_variable, ctx, bound);
16519         add_AT_flag (decl_die, DW_AT_artificial, 1);
16520         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16521         add_AT_location_description (decl_die, DW_AT_location, list);
16522         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16523         break;
16524       }
16525     }
16526 }
16527
16528 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16529    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16530    Note that the block of subscript information for an array type also
16531    includes information about the element type of the given array type.  */
16532
16533 static void
16534 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16535 {
16536   unsigned dimension_number;
16537   tree lower, upper;
16538   dw_die_ref subrange_die;
16539
16540   for (dimension_number = 0;
16541        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16542        type = TREE_TYPE (type), dimension_number++)
16543     {
16544       tree domain = TYPE_DOMAIN (type);
16545
16546       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16547         break;
16548
16549       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16550          and (in GNU C only) variable bounds.  Handle all three forms
16551          here.  */
16552       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16553       if (domain)
16554         {
16555           /* We have an array type with specified bounds.  */
16556           lower = TYPE_MIN_VALUE (domain);
16557           upper = TYPE_MAX_VALUE (domain);
16558
16559           /* Define the index type.  */
16560           if (TREE_TYPE (domain))
16561             {
16562               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16563                  TREE_TYPE field.  We can't emit debug info for this
16564                  because it is an unnamed integral type.  */
16565               if (TREE_CODE (domain) == INTEGER_TYPE
16566                   && TYPE_NAME (domain) == NULL_TREE
16567                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16568                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16569                 ;
16570               else
16571                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16572                                     type_die);
16573             }
16574
16575           /* ??? If upper is NULL, the array has unspecified length,
16576              but it does have a lower bound.  This happens with Fortran
16577                dimension arr(N:*)
16578              Since the debugger is definitely going to need to know N
16579              to produce useful results, go ahead and output the lower
16580              bound solo, and hope the debugger can cope.  */
16581
16582           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16583           if (upper)
16584             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16585         }
16586
16587       /* Otherwise we have an array type with an unspecified length.  The
16588          DWARF-2 spec does not say how to handle this; let's just leave out the
16589          bounds.  */
16590     }
16591 }
16592
16593 static void
16594 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16595 {
16596   unsigned size;
16597
16598   switch (TREE_CODE (tree_node))
16599     {
16600     case ERROR_MARK:
16601       size = 0;
16602       break;
16603     case ENUMERAL_TYPE:
16604     case RECORD_TYPE:
16605     case UNION_TYPE:
16606     case QUAL_UNION_TYPE:
16607       size = int_size_in_bytes (tree_node);
16608       break;
16609     case FIELD_DECL:
16610       /* For a data member of a struct or union, the DW_AT_byte_size is
16611          generally given as the number of bytes normally allocated for an
16612          object of the *declared* type of the member itself.  This is true
16613          even for bit-fields.  */
16614       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16615       break;
16616     default:
16617       gcc_unreachable ();
16618     }
16619
16620   /* Note that `size' might be -1 when we get to this point.  If it is, that
16621      indicates that the byte size of the entity in question is variable.  We
16622      have no good way of expressing this fact in Dwarf at the present time,
16623      so just let the -1 pass on through.  */
16624   add_AT_unsigned (die, DW_AT_byte_size, size);
16625 }
16626
16627 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16628    which specifies the distance in bits from the highest order bit of the
16629    "containing object" for the bit-field to the highest order bit of the
16630    bit-field itself.
16631
16632    For any given bit-field, the "containing object" is a hypothetical object
16633    (of some integral or enum type) within which the given bit-field lives.  The
16634    type of this hypothetical "containing object" is always the same as the
16635    declared type of the individual bit-field itself.  The determination of the
16636    exact location of the "containing object" for a bit-field is rather
16637    complicated.  It's handled by the `field_byte_offset' function (above).
16638
16639    Note that it is the size (in bytes) of the hypothetical "containing object"
16640    which will be given in the DW_AT_byte_size attribute for this bit-field.
16641    (See `byte_size_attribute' above).  */
16642
16643 static inline void
16644 add_bit_offset_attribute (dw_die_ref die, tree decl)
16645 {
16646   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16647   tree type = DECL_BIT_FIELD_TYPE (decl);
16648   HOST_WIDE_INT bitpos_int;
16649   HOST_WIDE_INT highest_order_object_bit_offset;
16650   HOST_WIDE_INT highest_order_field_bit_offset;
16651   HOST_WIDE_INT unsigned bit_offset;
16652
16653   /* Must be a field and a bit field.  */
16654   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16655
16656   /* We can't yet handle bit-fields whose offsets are variable, so if we
16657      encounter such things, just return without generating any attribute
16658      whatsoever.  Likewise for variable or too large size.  */
16659   if (! host_integerp (bit_position (decl), 0)
16660       || ! host_integerp (DECL_SIZE (decl), 1))
16661     return;
16662
16663   bitpos_int = int_bit_position (decl);
16664
16665   /* Note that the bit offset is always the distance (in bits) from the
16666      highest-order bit of the "containing object" to the highest-order bit of
16667      the bit-field itself.  Since the "high-order end" of any object or field
16668      is different on big-endian and little-endian machines, the computation
16669      below must take account of these differences.  */
16670   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16671   highest_order_field_bit_offset = bitpos_int;
16672
16673   if (! BYTES_BIG_ENDIAN)
16674     {
16675       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16676       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16677     }
16678
16679   bit_offset
16680     = (! BYTES_BIG_ENDIAN
16681        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16682        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16683
16684   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16685 }
16686
16687 /* For a FIELD_DECL node which represents a bit field, output an attribute
16688    which specifies the length in bits of the given field.  */
16689
16690 static inline void
16691 add_bit_size_attribute (dw_die_ref die, tree decl)
16692 {
16693   /* Must be a field and a bit field.  */
16694   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16695               && DECL_BIT_FIELD_TYPE (decl));
16696
16697   if (host_integerp (DECL_SIZE (decl), 1))
16698     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16699 }
16700
16701 /* If the compiled language is ANSI C, then add a 'prototyped'
16702    attribute, if arg types are given for the parameters of a function.  */
16703
16704 static inline void
16705 add_prototyped_attribute (dw_die_ref die, tree func_type)
16706 {
16707   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16708       && TYPE_ARG_TYPES (func_type) != NULL)
16709     add_AT_flag (die, DW_AT_prototyped, 1);
16710 }
16711
16712 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16713    by looking in either the type declaration or object declaration
16714    equate table.  */
16715
16716 static inline dw_die_ref
16717 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16718 {
16719   dw_die_ref origin_die = NULL;
16720
16721   if (TREE_CODE (origin) != FUNCTION_DECL)
16722     {
16723       /* We may have gotten separated from the block for the inlined
16724          function, if we're in an exception handler or some such; make
16725          sure that the abstract function has been written out.
16726
16727          Doing this for nested functions is wrong, however; functions are
16728          distinct units, and our context might not even be inline.  */
16729       tree fn = origin;
16730
16731       if (TYPE_P (fn))
16732         fn = TYPE_STUB_DECL (fn);
16733
16734       fn = decl_function_context (fn);
16735       if (fn)
16736         dwarf2out_abstract_function (fn);
16737     }
16738
16739   if (DECL_P (origin))
16740     origin_die = lookup_decl_die (origin);
16741   else if (TYPE_P (origin))
16742     origin_die = lookup_type_die (origin);
16743
16744   /* XXX: Functions that are never lowered don't always have correct block
16745      trees (in the case of java, they simply have no block tree, in some other
16746      languages).  For these functions, there is nothing we can really do to
16747      output correct debug info for inlined functions in all cases.  Rather
16748      than die, we'll just produce deficient debug info now, in that we will
16749      have variables without a proper abstract origin.  In the future, when all
16750      functions are lowered, we should re-add a gcc_assert (origin_die)
16751      here.  */
16752
16753   if (origin_die)
16754     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16755   return origin_die;
16756 }
16757
16758 /* We do not currently support the pure_virtual attribute.  */
16759
16760 static inline void
16761 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16762 {
16763   if (DECL_VINDEX (func_decl))
16764     {
16765       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16766
16767       if (host_integerp (DECL_VINDEX (func_decl), 0))
16768         add_AT_loc (die, DW_AT_vtable_elem_location,
16769                     new_loc_descr (DW_OP_constu,
16770                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16771                                    0));
16772
16773       /* GNU extension: Record what type this method came from originally.  */
16774       if (debug_info_level > DINFO_LEVEL_TERSE
16775           && DECL_CONTEXT (func_decl))
16776         add_AT_die_ref (die, DW_AT_containing_type,
16777                         lookup_type_die (DECL_CONTEXT (func_decl)));
16778     }
16779 }
16780 \f
16781 /* Add source coordinate attributes for the given decl.  */
16782
16783 static void
16784 add_src_coords_attributes (dw_die_ref die, tree decl)
16785 {
16786   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16787
16788   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16789   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16790 }
16791
16792 /* Add a DW_AT_name attribute and source coordinate attribute for the
16793    given decl, but only if it actually has a name.  */
16794
16795 static void
16796 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16797 {
16798   tree decl_name;
16799
16800   decl_name = DECL_NAME (decl);
16801   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16802     {
16803       const char *name = dwarf2_name (decl, 0);
16804       if (name)
16805         add_name_attribute (die, name);
16806       if (! DECL_ARTIFICIAL (decl))
16807         add_src_coords_attributes (die, decl);
16808
16809       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16810           && TREE_PUBLIC (decl)
16811           && !DECL_ABSTRACT (decl)
16812           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl)))
16813         {
16814           /* Defer until we have an assembler name set.  */
16815           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16816             {
16817               limbo_die_node *asm_name;
16818
16819               asm_name = GGC_CNEW (limbo_die_node);
16820               asm_name->die = die;
16821               asm_name->created_for = decl;
16822               asm_name->next = deferred_asm_name;
16823               deferred_asm_name = asm_name;
16824             }
16825           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16826             add_AT_string (die, AT_linkage_name,
16827                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16828         }
16829     }
16830
16831 #ifdef VMS_DEBUGGING_INFO
16832   /* Get the function's name, as described by its RTL.  This may be different
16833      from the DECL_NAME name used in the source file.  */
16834   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16835     {
16836       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16837                    XEXP (DECL_RTL (decl), 0));
16838       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16839     }
16840 #endif
16841 }
16842
16843 /* Push a new declaration scope.  */
16844
16845 static void
16846 push_decl_scope (tree scope)
16847 {
16848   VEC_safe_push (tree, gc, decl_scope_table, scope);
16849 }
16850
16851 /* Pop a declaration scope.  */
16852
16853 static inline void
16854 pop_decl_scope (void)
16855 {
16856   VEC_pop (tree, decl_scope_table);
16857 }
16858
16859 /* Return the DIE for the scope that immediately contains this type.
16860    Non-named types get global scope.  Named types nested in other
16861    types get their containing scope if it's open, or global scope
16862    otherwise.  All other types (i.e. function-local named types) get
16863    the current active scope.  */
16864
16865 static dw_die_ref
16866 scope_die_for (tree t, dw_die_ref context_die)
16867 {
16868   dw_die_ref scope_die = NULL;
16869   tree containing_scope;
16870   int i;
16871
16872   /* Non-types always go in the current scope.  */
16873   gcc_assert (TYPE_P (t));
16874
16875   containing_scope = TYPE_CONTEXT (t);
16876
16877   /* Use the containing namespace if it was passed in (for a declaration).  */
16878   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16879     {
16880       if (context_die == lookup_decl_die (containing_scope))
16881         /* OK */;
16882       else
16883         containing_scope = NULL_TREE;
16884     }
16885
16886   /* Ignore function type "scopes" from the C frontend.  They mean that
16887      a tagged type is local to a parmlist of a function declarator, but
16888      that isn't useful to DWARF.  */
16889   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16890     containing_scope = NULL_TREE;
16891
16892   if (containing_scope == NULL_TREE)
16893     scope_die = comp_unit_die;
16894   else if (TYPE_P (containing_scope))
16895     {
16896       /* For types, we can just look up the appropriate DIE.  But
16897          first we check to see if we're in the middle of emitting it
16898          so we know where the new DIE should go.  */
16899       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16900         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16901           break;
16902
16903       if (i < 0)
16904         {
16905           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16906                       || TREE_ASM_WRITTEN (containing_scope));
16907
16908           /* If none of the current dies are suitable, we get file scope.  */
16909           scope_die = comp_unit_die;
16910         }
16911       else
16912         scope_die = lookup_type_die (containing_scope);
16913     }
16914   else
16915     scope_die = context_die;
16916
16917   return scope_die;
16918 }
16919
16920 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16921
16922 static inline int
16923 local_scope_p (dw_die_ref context_die)
16924 {
16925   for (; context_die; context_die = context_die->die_parent)
16926     if (context_die->die_tag == DW_TAG_inlined_subroutine
16927         || context_die->die_tag == DW_TAG_subprogram)
16928       return 1;
16929
16930   return 0;
16931 }
16932
16933 /* Returns nonzero if CONTEXT_DIE is a class.  */
16934
16935 static inline int
16936 class_scope_p (dw_die_ref context_die)
16937 {
16938   return (context_die
16939           && (context_die->die_tag == DW_TAG_structure_type
16940               || context_die->die_tag == DW_TAG_class_type
16941               || context_die->die_tag == DW_TAG_interface_type
16942               || context_die->die_tag == DW_TAG_union_type));
16943 }
16944
16945 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16946    whether or not to treat a DIE in this context as a declaration.  */
16947
16948 static inline int
16949 class_or_namespace_scope_p (dw_die_ref context_die)
16950 {
16951   return (class_scope_p (context_die)
16952           || (context_die && context_die->die_tag == DW_TAG_namespace));
16953 }
16954
16955 /* Many forms of DIEs require a "type description" attribute.  This
16956    routine locates the proper "type descriptor" die for the type given
16957    by 'type', and adds a DW_AT_type attribute below the given die.  */
16958
16959 static void
16960 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16961                     int decl_volatile, dw_die_ref context_die)
16962 {
16963   enum tree_code code  = TREE_CODE (type);
16964   dw_die_ref type_die  = NULL;
16965
16966   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16967      or fixed-point type, use the inner type.  This is because we have no
16968      support for unnamed types in base_type_die.  This can happen if this is
16969      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16970   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16971       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16972     type = TREE_TYPE (type), code = TREE_CODE (type);
16973
16974   if (code == ERROR_MARK
16975       /* Handle a special case.  For functions whose return type is void, we
16976          generate *no* type attribute.  (Note that no object may have type
16977          `void', so this only applies to function return types).  */
16978       || code == VOID_TYPE)
16979     return;
16980
16981   type_die = modified_type_die (type,
16982                                 decl_const || TYPE_READONLY (type),
16983                                 decl_volatile || TYPE_VOLATILE (type),
16984                                 context_die);
16985
16986   if (type_die != NULL)
16987     add_AT_die_ref (object_die, DW_AT_type, type_die);
16988 }
16989
16990 /* Given an object die, add the calling convention attribute for the
16991    function call type.  */
16992 static void
16993 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16994 {
16995   enum dwarf_calling_convention value = DW_CC_normal;
16996
16997   value = ((enum dwarf_calling_convention)
16998            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16999
17000   /* DWARF doesn't provide a way to identify a program's source-level
17001      entry point.  DW_AT_calling_convention attributes are only meant
17002      to describe functions' calling conventions.  However, lacking a
17003      better way to signal the Fortran main program, we use this for the
17004      time being, following existing custom.  */
17005   if (is_fortran ()
17006       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
17007     value = DW_CC_program;
17008
17009   /* Only add the attribute if the backend requests it, and
17010      is not DW_CC_normal.  */
17011   if (value && (value != DW_CC_normal))
17012     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
17013 }
17014
17015 /* Given a tree pointer to a struct, class, union, or enum type node, return
17016    a pointer to the (string) tag name for the given type, or zero if the type
17017    was declared without a tag.  */
17018
17019 static const char *
17020 type_tag (const_tree type)
17021 {
17022   const char *name = 0;
17023
17024   if (TYPE_NAME (type) != 0)
17025     {
17026       tree t = 0;
17027
17028       /* Find the IDENTIFIER_NODE for the type name.  */
17029       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
17030         t = TYPE_NAME (type);
17031
17032       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
17033          a TYPE_DECL node, regardless of whether or not a `typedef' was
17034          involved.  */
17035       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
17036                && ! DECL_IGNORED_P (TYPE_NAME (type)))
17037         {
17038           /* We want to be extra verbose.  Don't call dwarf_name if
17039              DECL_NAME isn't set.  The default hook for decl_printable_name
17040              doesn't like that, and in this context it's correct to return
17041              0, instead of "<anonymous>" or the like.  */
17042           if (DECL_NAME (TYPE_NAME (type)))
17043             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
17044         }
17045
17046       /* Now get the name as a string, or invent one.  */
17047       if (!name && t != 0)
17048         name = IDENTIFIER_POINTER (t);
17049     }
17050
17051   return (name == 0 || *name == '\0') ? 0 : name;
17052 }
17053
17054 /* Return the type associated with a data member, make a special check
17055    for bit field types.  */
17056
17057 static inline tree
17058 member_declared_type (const_tree member)
17059 {
17060   return (DECL_BIT_FIELD_TYPE (member)
17061           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
17062 }
17063
17064 /* Get the decl's label, as described by its RTL. This may be different
17065    from the DECL_NAME name used in the source file.  */
17066
17067 #if 0
17068 static const char *
17069 decl_start_label (tree decl)
17070 {
17071   rtx x;
17072   const char *fnname;
17073
17074   x = DECL_RTL (decl);
17075   gcc_assert (MEM_P (x));
17076
17077   x = XEXP (x, 0);
17078   gcc_assert (GET_CODE (x) == SYMBOL_REF);
17079
17080   fnname = XSTR (x, 0);
17081   return fnname;
17082 }
17083 #endif
17084 \f
17085 /* These routines generate the internal representation of the DIE's for
17086    the compilation unit.  Debugging information is collected by walking
17087    the declaration trees passed in from dwarf2out_decl().  */
17088
17089 static void
17090 gen_array_type_die (tree type, dw_die_ref context_die)
17091 {
17092   dw_die_ref scope_die = scope_die_for (type, context_die);
17093   dw_die_ref array_die;
17094
17095   /* GNU compilers represent multidimensional array types as sequences of one
17096      dimensional array types whose element types are themselves array types.
17097      We sometimes squish that down to a single array_type DIE with multiple
17098      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17099      say that we are allowed to do this kind of compression in C, because
17100      there is no difference between an array of arrays and a multidimensional
17101      array.  We don't do this for Ada to remain as close as possible to the
17102      actual representation, which is especially important against the language
17103      flexibilty wrt arrays of variable size.  */
17104
17105   bool collapse_nested_arrays = !is_ada ();
17106   tree element_type;
17107
17108   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17109      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17110   if (TYPE_STRING_FLAG (type)
17111       && TREE_CODE (type) == ARRAY_TYPE
17112       && is_fortran ()
17113       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17114     {
17115       HOST_WIDE_INT size;
17116
17117       array_die = new_die (DW_TAG_string_type, scope_die, type);
17118       add_name_attribute (array_die, type_tag (type));
17119       equate_type_number_to_die (type, array_die);
17120       size = int_size_in_bytes (type);
17121       if (size >= 0)
17122         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17123       else if (TYPE_DOMAIN (type) != NULL_TREE
17124                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17125                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17126         {
17127           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17128           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17129
17130           size = int_size_in_bytes (TREE_TYPE (szdecl));
17131           if (loc && size > 0)
17132             {
17133               add_AT_location_description (array_die, DW_AT_string_length, loc);
17134               if (size != DWARF2_ADDR_SIZE)
17135                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17136             }
17137         }
17138       return;
17139     }
17140
17141   /* ??? The SGI dwarf reader fails for array of array of enum types
17142      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17143      array type comes before the outer array type.  We thus call gen_type_die
17144      before we new_die and must prevent nested array types collapsing for this
17145      target.  */
17146
17147 #ifdef MIPS_DEBUGGING_INFO
17148   gen_type_die (TREE_TYPE (type), context_die);
17149   collapse_nested_arrays = false;
17150 #endif
17151
17152   array_die = new_die (DW_TAG_array_type, scope_die, type);
17153   add_name_attribute (array_die, type_tag (type));
17154   equate_type_number_to_die (type, array_die);
17155
17156   if (TREE_CODE (type) == VECTOR_TYPE)
17157     {
17158       /* The frontend feeds us a representation for the vector as a struct
17159          containing an array.  Pull out the array type.  */
17160       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17161       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17162     }
17163
17164   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17165   if (is_fortran ()
17166       && TREE_CODE (type) == ARRAY_TYPE
17167       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17168       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17169     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17170
17171 #if 0
17172   /* We default the array ordering.  SDB will probably do
17173      the right things even if DW_AT_ordering is not present.  It's not even
17174      an issue until we start to get into multidimensional arrays anyway.  If
17175      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17176      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17177      and when we find out that we need to put these in, we will only do so
17178      for multidimensional arrays.  */
17179   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17180 #endif
17181
17182 #ifdef MIPS_DEBUGGING_INFO
17183   /* The SGI compilers handle arrays of unknown bound by setting
17184      AT_declaration and not emitting any subrange DIEs.  */
17185   if (! TYPE_DOMAIN (type))
17186     add_AT_flag (array_die, DW_AT_declaration, 1);
17187   else
17188 #endif
17189     add_subscript_info (array_die, type, collapse_nested_arrays);
17190
17191   /* Add representation of the type of the elements of this array type and
17192      emit the corresponding DIE if we haven't done it already.  */
17193   element_type = TREE_TYPE (type);
17194   if (collapse_nested_arrays)
17195     while (TREE_CODE (element_type) == ARRAY_TYPE)
17196       {
17197         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17198           break;
17199         element_type = TREE_TYPE (element_type);
17200       }
17201
17202 #ifndef MIPS_DEBUGGING_INFO
17203   gen_type_die (element_type, context_die);
17204 #endif
17205
17206   add_type_attribute (array_die, element_type, 0, 0, context_die);
17207
17208   if (get_AT (array_die, DW_AT_name))
17209     add_pubtype (type, array_die);
17210 }
17211
17212 static dw_loc_descr_ref
17213 descr_info_loc (tree val, tree base_decl)
17214 {
17215   HOST_WIDE_INT size;
17216   dw_loc_descr_ref loc, loc2;
17217   enum dwarf_location_atom op;
17218
17219   if (val == base_decl)
17220     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17221
17222   switch (TREE_CODE (val))
17223     {
17224     CASE_CONVERT:
17225       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17226     case VAR_DECL:
17227       return loc_descriptor_from_tree (val, 0);
17228     case INTEGER_CST:
17229       if (host_integerp (val, 0))
17230         return int_loc_descriptor (tree_low_cst (val, 0));
17231       break;
17232     case INDIRECT_REF:
17233       size = int_size_in_bytes (TREE_TYPE (val));
17234       if (size < 0)
17235         break;
17236       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17237       if (!loc)
17238         break;
17239       if (size == DWARF2_ADDR_SIZE)
17240         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17241       else
17242         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17243       return loc;
17244     case POINTER_PLUS_EXPR:
17245     case PLUS_EXPR:
17246       if (host_integerp (TREE_OPERAND (val, 1), 1)
17247           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17248              < 16384)
17249         {
17250           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17251           if (!loc)
17252             break;
17253           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17254         }
17255       else
17256         {
17257           op = DW_OP_plus;
17258         do_binop:
17259           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17260           if (!loc)
17261             break;
17262           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17263           if (!loc2)
17264             break;
17265           add_loc_descr (&loc, loc2);
17266           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17267         }
17268       return loc;
17269     case MINUS_EXPR:
17270       op = DW_OP_minus;
17271       goto do_binop;
17272     case MULT_EXPR:
17273       op = DW_OP_mul;
17274       goto do_binop;
17275     case EQ_EXPR:
17276       op = DW_OP_eq;
17277       goto do_binop;
17278     case NE_EXPR:
17279       op = DW_OP_ne;
17280       goto do_binop;
17281     default:
17282       break;
17283     }
17284   return NULL;
17285 }
17286
17287 static void
17288 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17289                       tree val, tree base_decl)
17290 {
17291   dw_loc_descr_ref loc;
17292
17293   if (host_integerp (val, 0))
17294     {
17295       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17296       return;
17297     }
17298
17299   loc = descr_info_loc (val, base_decl);
17300   if (!loc)
17301     return;
17302
17303   add_AT_loc (die, attr, loc);
17304 }
17305
17306 /* This routine generates DIE for array with hidden descriptor, details
17307    are filled into *info by a langhook.  */
17308
17309 static void
17310 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17311                           dw_die_ref context_die)
17312 {
17313   dw_die_ref scope_die = scope_die_for (type, context_die);
17314   dw_die_ref array_die;
17315   int dim;
17316
17317   array_die = new_die (DW_TAG_array_type, scope_die, type);
17318   add_name_attribute (array_die, type_tag (type));
17319   equate_type_number_to_die (type, array_die);
17320
17321   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17322   if (is_fortran ()
17323       && info->ndimensions >= 2)
17324     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17325
17326   if (info->data_location)
17327     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17328                           info->base_decl);
17329   if (info->associated)
17330     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17331                           info->base_decl);
17332   if (info->allocated)
17333     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17334                           info->base_decl);
17335
17336   for (dim = 0; dim < info->ndimensions; dim++)
17337     {
17338       dw_die_ref subrange_die
17339         = new_die (DW_TAG_subrange_type, array_die, NULL);
17340
17341       if (info->dimen[dim].lower_bound)
17342         {
17343           /* If it is the default value, omit it.  */
17344           int dflt;
17345
17346           if (host_integerp (info->dimen[dim].lower_bound, 0)
17347               && (dflt = lower_bound_default ()) != -1
17348               && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt)
17349             ;
17350           else
17351             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17352                                   info->dimen[dim].lower_bound,
17353                                   info->base_decl);
17354         }
17355       if (info->dimen[dim].upper_bound)
17356         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17357                               info->dimen[dim].upper_bound,
17358                               info->base_decl);
17359       if (info->dimen[dim].stride)
17360         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17361                               info->dimen[dim].stride,
17362                               info->base_decl);
17363     }
17364
17365   gen_type_die (info->element_type, context_die);
17366   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17367
17368   if (get_AT (array_die, DW_AT_name))
17369     add_pubtype (type, array_die);
17370 }
17371
17372 #if 0
17373 static void
17374 gen_entry_point_die (tree decl, dw_die_ref context_die)
17375 {
17376   tree origin = decl_ultimate_origin (decl);
17377   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17378
17379   if (origin != NULL)
17380     add_abstract_origin_attribute (decl_die, origin);
17381   else
17382     {
17383       add_name_and_src_coords_attributes (decl_die, decl);
17384       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17385                           0, 0, context_die);
17386     }
17387
17388   if (DECL_ABSTRACT (decl))
17389     equate_decl_number_to_die (decl, decl_die);
17390   else
17391     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17392 }
17393 #endif
17394
17395 /* Walk through the list of incomplete types again, trying once more to
17396    emit full debugging info for them.  */
17397
17398 static void
17399 retry_incomplete_types (void)
17400 {
17401   int i;
17402
17403   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17404     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17405                                   DINFO_USAGE_DIR_USE))
17406       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17407 }
17408
17409 /* Determine what tag to use for a record type.  */
17410
17411 static enum dwarf_tag
17412 record_type_tag (tree type)
17413 {
17414   if (! lang_hooks.types.classify_record)
17415     return DW_TAG_structure_type;
17416
17417   switch (lang_hooks.types.classify_record (type))
17418     {
17419     case RECORD_IS_STRUCT:
17420       return DW_TAG_structure_type;
17421
17422     case RECORD_IS_CLASS:
17423       return DW_TAG_class_type;
17424
17425     case RECORD_IS_INTERFACE:
17426       if (dwarf_version >= 3 || !dwarf_strict)
17427         return DW_TAG_interface_type;
17428       return DW_TAG_structure_type;
17429
17430     default:
17431       gcc_unreachable ();
17432     }
17433 }
17434
17435 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17436    include all of the information about the enumeration values also. Each
17437    enumerated type name/value is listed as a child of the enumerated type
17438    DIE.  */
17439
17440 static dw_die_ref
17441 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17442 {
17443   dw_die_ref type_die = lookup_type_die (type);
17444
17445   if (type_die == NULL)
17446     {
17447       type_die = new_die (DW_TAG_enumeration_type,
17448                           scope_die_for (type, context_die), type);
17449       equate_type_number_to_die (type, type_die);
17450       add_name_attribute (type_die, type_tag (type));
17451       if ((dwarf_version >= 4 || !dwarf_strict)
17452           && ENUM_IS_SCOPED (type))
17453         add_AT_flag (type_die, DW_AT_enum_class, 1);
17454     }
17455   else if (! TYPE_SIZE (type))
17456     return type_die;
17457   else
17458     remove_AT (type_die, DW_AT_declaration);
17459
17460   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17461      given enum type is incomplete, do not generate the DW_AT_byte_size
17462      attribute or the DW_AT_element_list attribute.  */
17463   if (TYPE_SIZE (type))
17464     {
17465       tree link;
17466
17467       TREE_ASM_WRITTEN (type) = 1;
17468       add_byte_size_attribute (type_die, type);
17469       if (TYPE_STUB_DECL (type) != NULL_TREE)
17470         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17471
17472       /* If the first reference to this type was as the return type of an
17473          inline function, then it may not have a parent.  Fix this now.  */
17474       if (type_die->die_parent == NULL)
17475         add_child_die (scope_die_for (type, context_die), type_die);
17476
17477       for (link = TYPE_VALUES (type);
17478            link != NULL; link = TREE_CHAIN (link))
17479         {
17480           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17481           tree value = TREE_VALUE (link);
17482
17483           add_name_attribute (enum_die,
17484                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17485
17486           if (TREE_CODE (value) == CONST_DECL)
17487             value = DECL_INITIAL (value);
17488
17489           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17490             /* DWARF2 does not provide a way of indicating whether or
17491                not enumeration constants are signed or unsigned.  GDB
17492                always assumes the values are signed, so we output all
17493                values as if they were signed.  That means that
17494                enumeration constants with very large unsigned values
17495                will appear to have negative values in the debugger.  */
17496             add_AT_int (enum_die, DW_AT_const_value,
17497                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17498         }
17499     }
17500   else
17501     add_AT_flag (type_die, DW_AT_declaration, 1);
17502
17503   if (get_AT (type_die, DW_AT_name))
17504     add_pubtype (type, type_die);
17505
17506   return type_die;
17507 }
17508
17509 /* Generate a DIE to represent either a real live formal parameter decl or to
17510    represent just the type of some formal parameter position in some function
17511    type.
17512
17513    Note that this routine is a bit unusual because its argument may be a
17514    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17515    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17516    node.  If it's the former then this function is being called to output a
17517    DIE to represent a formal parameter object (or some inlining thereof).  If
17518    it's the latter, then this function is only being called to output a
17519    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17520    argument type of some subprogram type.
17521    If EMIT_NAME_P is true, name and source coordinate attributes
17522    are emitted.  */
17523
17524 static dw_die_ref
17525 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17526                           dw_die_ref context_die)
17527 {
17528   tree node_or_origin = node ? node : origin;
17529   tree ultimate_origin;
17530   dw_die_ref parm_die
17531     = new_die (DW_TAG_formal_parameter, context_die, node);
17532
17533   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17534     {
17535     case tcc_declaration:
17536       ultimate_origin = decl_ultimate_origin (node_or_origin);
17537       if (node || ultimate_origin)
17538         origin = ultimate_origin;
17539       if (origin != NULL)
17540         add_abstract_origin_attribute (parm_die, origin);
17541       else
17542         {
17543           tree type = TREE_TYPE (node);
17544           if (emit_name_p)
17545             add_name_and_src_coords_attributes (parm_die, node);
17546           if (decl_by_reference_p (node))
17547             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17548                                 context_die);
17549           else
17550             add_type_attribute (parm_die, type,
17551                                 TREE_READONLY (node),
17552                                 TREE_THIS_VOLATILE (node),
17553                                 context_die);
17554           if (DECL_ARTIFICIAL (node))
17555             add_AT_flag (parm_die, DW_AT_artificial, 1);
17556         }
17557
17558       if (node && node != origin)
17559         equate_decl_number_to_die (node, parm_die);
17560       if (! DECL_ABSTRACT (node_or_origin))
17561         add_location_or_const_value_attribute (parm_die, node_or_origin,
17562                                                DW_AT_location);
17563
17564       break;
17565
17566     case tcc_type:
17567       /* We were called with some kind of a ..._TYPE node.  */
17568       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17569       break;
17570
17571     default:
17572       gcc_unreachable ();
17573     }
17574
17575   return parm_die;
17576 }
17577
17578 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17579    children DW_TAG_formal_parameter DIEs representing the arguments of the
17580    parameter pack.
17581
17582    PARM_PACK must be a function parameter pack.
17583    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17584    must point to the subsequent arguments of the function PACK_ARG belongs to.
17585    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17586    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17587    following the last one for which a DIE was generated.  */
17588
17589 static dw_die_ref
17590 gen_formal_parameter_pack_die  (tree parm_pack,
17591                                 tree pack_arg,
17592                                 dw_die_ref subr_die,
17593                                 tree *next_arg)
17594 {
17595   tree arg;
17596   dw_die_ref parm_pack_die;
17597
17598   gcc_assert (parm_pack
17599               && lang_hooks.function_parameter_pack_p (parm_pack)
17600               && subr_die);
17601
17602   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17603   add_src_coords_attributes (parm_pack_die, parm_pack);
17604
17605   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17606     {
17607       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17608                                                                  parm_pack))
17609         break;
17610       gen_formal_parameter_die (arg, NULL,
17611                                 false /* Don't emit name attribute.  */,
17612                                 parm_pack_die);
17613     }
17614   if (next_arg)
17615     *next_arg = arg;
17616   return parm_pack_die;
17617 }
17618
17619 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17620    at the end of an (ANSI prototyped) formal parameters list.  */
17621
17622 static void
17623 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17624 {
17625   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17626 }
17627
17628 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17629    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17630    parameters as specified in some function type specification (except for
17631    those which appear as part of a function *definition*).  */
17632
17633 static void
17634 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17635 {
17636   tree link;
17637   tree formal_type = NULL;
17638   tree first_parm_type;
17639   tree arg;
17640
17641   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17642     {
17643       arg = DECL_ARGUMENTS (function_or_method_type);
17644       function_or_method_type = TREE_TYPE (function_or_method_type);
17645     }
17646   else
17647     arg = NULL_TREE;
17648
17649   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17650
17651   /* Make our first pass over the list of formal parameter types and output a
17652      DW_TAG_formal_parameter DIE for each one.  */
17653   for (link = first_parm_type; link; )
17654     {
17655       dw_die_ref parm_die;
17656
17657       formal_type = TREE_VALUE (link);
17658       if (formal_type == void_type_node)
17659         break;
17660
17661       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17662       parm_die = gen_formal_parameter_die (formal_type, NULL,
17663                                            true /* Emit name attribute.  */,
17664                                            context_die);
17665       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17666            && link == first_parm_type)
17667           || (arg && DECL_ARTIFICIAL (arg)))
17668         add_AT_flag (parm_die, DW_AT_artificial, 1);
17669
17670       link = TREE_CHAIN (link);
17671       if (arg)
17672         arg = TREE_CHAIN (arg);
17673     }
17674
17675   /* If this function type has an ellipsis, add a
17676      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17677   if (formal_type != void_type_node)
17678     gen_unspecified_parameters_die (function_or_method_type, context_die);
17679
17680   /* Make our second (and final) pass over the list of formal parameter types
17681      and output DIEs to represent those types (as necessary).  */
17682   for (link = TYPE_ARG_TYPES (function_or_method_type);
17683        link && TREE_VALUE (link);
17684        link = TREE_CHAIN (link))
17685     gen_type_die (TREE_VALUE (link), context_die);
17686 }
17687
17688 /* We want to generate the DIE for TYPE so that we can generate the
17689    die for MEMBER, which has been defined; we will need to refer back
17690    to the member declaration nested within TYPE.  If we're trying to
17691    generate minimal debug info for TYPE, processing TYPE won't do the
17692    trick; we need to attach the member declaration by hand.  */
17693
17694 static void
17695 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17696 {
17697   gen_type_die (type, context_die);
17698
17699   /* If we're trying to avoid duplicate debug info, we may not have
17700      emitted the member decl for this function.  Emit it now.  */
17701   if (TYPE_STUB_DECL (type)
17702       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17703       && ! lookup_decl_die (member))
17704     {
17705       dw_die_ref type_die;
17706       gcc_assert (!decl_ultimate_origin (member));
17707
17708       push_decl_scope (type);
17709       type_die = lookup_type_die (type);
17710       if (TREE_CODE (member) == FUNCTION_DECL)
17711         gen_subprogram_die (member, type_die);
17712       else if (TREE_CODE (member) == FIELD_DECL)
17713         {
17714           /* Ignore the nameless fields that are used to skip bits but handle
17715              C++ anonymous unions and structs.  */
17716           if (DECL_NAME (member) != NULL_TREE
17717               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17718               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17719             {
17720               gen_type_die (member_declared_type (member), type_die);
17721               gen_field_die (member, type_die);
17722             }
17723         }
17724       else
17725         gen_variable_die (member, NULL_TREE, type_die);
17726
17727       pop_decl_scope ();
17728     }
17729 }
17730
17731 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17732    may later generate inlined and/or out-of-line instances of.  */
17733
17734 static void
17735 dwarf2out_abstract_function (tree decl)
17736 {
17737   dw_die_ref old_die;
17738   tree save_fn;
17739   tree context;
17740   int was_abstract;
17741   htab_t old_decl_loc_table;
17742
17743   /* Make sure we have the actual abstract inline, not a clone.  */
17744   decl = DECL_ORIGIN (decl);
17745
17746   old_die = lookup_decl_die (decl);
17747   if (old_die && get_AT (old_die, DW_AT_inline))
17748     /* We've already generated the abstract instance.  */
17749     return;
17750
17751   /* We can be called while recursively when seeing block defining inlined subroutine
17752      DIE.  Be sure to not clobber the outer location table nor use it or we would
17753      get locations in abstract instantces.  */
17754   old_decl_loc_table = decl_loc_table;
17755   decl_loc_table = NULL;
17756
17757   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17758      we don't get confused by DECL_ABSTRACT.  */
17759   if (debug_info_level > DINFO_LEVEL_TERSE)
17760     {
17761       context = decl_class_context (decl);
17762       if (context)
17763         gen_type_die_for_member
17764           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17765     }
17766
17767   /* Pretend we've just finished compiling this function.  */
17768   save_fn = current_function_decl;
17769   current_function_decl = decl;
17770   push_cfun (DECL_STRUCT_FUNCTION (decl));
17771
17772   was_abstract = DECL_ABSTRACT (decl);
17773   set_decl_abstract_flags (decl, 1);
17774   dwarf2out_decl (decl);
17775   if (! was_abstract)
17776     set_decl_abstract_flags (decl, 0);
17777
17778   current_function_decl = save_fn;
17779   decl_loc_table = old_decl_loc_table;
17780   pop_cfun ();
17781 }
17782
17783 /* Helper function of premark_used_types() which gets called through
17784    htab_traverse.
17785
17786    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17787    marked as unused by prune_unused_types.  */
17788
17789 static int
17790 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17791 {
17792   tree type;
17793   dw_die_ref die;
17794
17795   type = (tree) *slot;
17796   die = lookup_type_die (type);
17797   if (die != NULL)
17798     die->die_perennial_p = 1;
17799   return 1;
17800 }
17801
17802 /* Helper function of premark_types_used_by_global_vars which gets called
17803    through htab_traverse.
17804
17805    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17806    marked as unused by prune_unused_types. The DIE of the type is marked
17807    only if the global variable using the type will actually be emitted.  */
17808
17809 static int
17810 premark_types_used_by_global_vars_helper (void **slot,
17811                                           void *data ATTRIBUTE_UNUSED)
17812 {
17813   struct types_used_by_vars_entry *entry;
17814   dw_die_ref die;
17815
17816   entry = (struct types_used_by_vars_entry *) *slot;
17817   gcc_assert (entry->type != NULL
17818               && entry->var_decl != NULL);
17819   die = lookup_type_die (entry->type);
17820   if (die)
17821     {
17822       /* Ask cgraph if the global variable really is to be emitted.
17823          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17824       struct varpool_node *node = varpool_node (entry->var_decl);
17825       if (node->needed)
17826         {
17827           die->die_perennial_p = 1;
17828           /* Keep the parent DIEs as well.  */
17829           while ((die = die->die_parent) && die->die_perennial_p == 0)
17830             die->die_perennial_p = 1;
17831         }
17832     }
17833   return 1;
17834 }
17835
17836 /* Mark all members of used_types_hash as perennial.  */
17837
17838 static void
17839 premark_used_types (void)
17840 {
17841   if (cfun && cfun->used_types_hash)
17842     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17843 }
17844
17845 /* Mark all members of types_used_by_vars_entry as perennial.  */
17846
17847 static void
17848 premark_types_used_by_global_vars (void)
17849 {
17850   if (types_used_by_vars_hash)
17851     htab_traverse (types_used_by_vars_hash,
17852                    premark_types_used_by_global_vars_helper, NULL);
17853 }
17854
17855 /* Generate a DIE to represent a declared function (either file-scope or
17856    block-local).  */
17857
17858 static void
17859 gen_subprogram_die (tree decl, dw_die_ref context_die)
17860 {
17861   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17862   tree origin = decl_ultimate_origin (decl);
17863   dw_die_ref subr_die;
17864   tree fn_arg_types;
17865   tree outer_scope;
17866   dw_die_ref old_die = lookup_decl_die (decl);
17867   int declaration = (current_function_decl != decl
17868                      || class_or_namespace_scope_p (context_die));
17869
17870   premark_used_types ();
17871
17872   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17873      started to generate the abstract instance of an inline, decided to output
17874      its containing class, and proceeded to emit the declaration of the inline
17875      from the member list for the class.  If so, DECLARATION takes priority;
17876      we'll get back to the abstract instance when done with the class.  */
17877
17878   /* The class-scope declaration DIE must be the primary DIE.  */
17879   if (origin && declaration && class_or_namespace_scope_p (context_die))
17880     {
17881       origin = NULL;
17882       gcc_assert (!old_die);
17883     }
17884
17885   /* Now that the C++ front end lazily declares artificial member fns, we
17886      might need to retrofit the declaration into its class.  */
17887   if (!declaration && !origin && !old_die
17888       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17889       && !class_or_namespace_scope_p (context_die)
17890       && debug_info_level > DINFO_LEVEL_TERSE)
17891     old_die = force_decl_die (decl);
17892
17893   if (origin != NULL)
17894     {
17895       gcc_assert (!declaration || local_scope_p (context_die));
17896
17897       /* Fixup die_parent for the abstract instance of a nested
17898          inline function.  */
17899       if (old_die && old_die->die_parent == NULL)
17900         add_child_die (context_die, old_die);
17901
17902       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17903       add_abstract_origin_attribute (subr_die, origin);
17904     }
17905   else if (old_die)
17906     {
17907       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17908       struct dwarf_file_data * file_index = lookup_filename (s.file);
17909
17910       if (!get_AT_flag (old_die, DW_AT_declaration)
17911           /* We can have a normal definition following an inline one in the
17912              case of redefinition of GNU C extern inlines.
17913              It seems reasonable to use AT_specification in this case.  */
17914           && !get_AT (old_die, DW_AT_inline))
17915         {
17916           /* Detect and ignore this case, where we are trying to output
17917              something we have already output.  */
17918           return;
17919         }
17920
17921       /* If the definition comes from the same place as the declaration,
17922          maybe use the old DIE.  We always want the DIE for this function
17923          that has the *_pc attributes to be under comp_unit_die so the
17924          debugger can find it.  We also need to do this for abstract
17925          instances of inlines, since the spec requires the out-of-line copy
17926          to have the same parent.  For local class methods, this doesn't
17927          apply; we just use the old DIE.  */
17928       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17929           && (DECL_ARTIFICIAL (decl)
17930               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17931                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17932                       == (unsigned) s.line))))
17933         {
17934           subr_die = old_die;
17935
17936           /* Clear out the declaration attribute and the formal parameters.
17937              Do not remove all children, because it is possible that this
17938              declaration die was forced using force_decl_die(). In such
17939              cases die that forced declaration die (e.g. TAG_imported_module)
17940              is one of the children that we do not want to remove.  */
17941           remove_AT (subr_die, DW_AT_declaration);
17942           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17943         }
17944       else
17945         {
17946           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17947           add_AT_specification (subr_die, old_die);
17948           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17949             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17950           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17951             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17952         }
17953     }
17954   else
17955     {
17956       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17957
17958       if (TREE_PUBLIC (decl))
17959         add_AT_flag (subr_die, DW_AT_external, 1);
17960
17961       add_name_and_src_coords_attributes (subr_die, decl);
17962       if (debug_info_level > DINFO_LEVEL_TERSE)
17963         {
17964           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17965           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17966                               0, 0, context_die);
17967         }
17968
17969       add_pure_or_virtual_attribute (subr_die, decl);
17970       if (DECL_ARTIFICIAL (decl))
17971         add_AT_flag (subr_die, DW_AT_artificial, 1);
17972
17973       if (TREE_PROTECTED (decl))
17974         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17975       else if (TREE_PRIVATE (decl))
17976         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17977     }
17978
17979   if (declaration)
17980     {
17981       if (!old_die || !get_AT (old_die, DW_AT_inline))
17982         {
17983           add_AT_flag (subr_die, DW_AT_declaration, 1);
17984
17985           /* If this is an explicit function declaration then generate
17986              a DW_AT_explicit attribute.  */
17987           if (lang_hooks.decls.function_decl_explicit_p (decl)
17988               && (dwarf_version >= 3 || !dwarf_strict))
17989             add_AT_flag (subr_die, DW_AT_explicit, 1);
17990
17991           /* The first time we see a member function, it is in the context of
17992              the class to which it belongs.  We make sure of this by emitting
17993              the class first.  The next time is the definition, which is
17994              handled above.  The two may come from the same source text.
17995
17996              Note that force_decl_die() forces function declaration die. It is
17997              later reused to represent definition.  */
17998           equate_decl_number_to_die (decl, subr_die);
17999         }
18000     }
18001   else if (DECL_ABSTRACT (decl))
18002     {
18003       if (DECL_DECLARED_INLINE_P (decl))
18004         {
18005           if (cgraph_function_possibly_inlined_p (decl))
18006             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
18007           else
18008             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
18009         }
18010       else
18011         {
18012           if (cgraph_function_possibly_inlined_p (decl))
18013             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
18014           else
18015             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
18016         }
18017
18018       if (DECL_DECLARED_INLINE_P (decl)
18019           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
18020         add_AT_flag (subr_die, DW_AT_artificial, 1);
18021
18022       equate_decl_number_to_die (decl, subr_die);
18023     }
18024   else if (!DECL_EXTERNAL (decl))
18025     {
18026       HOST_WIDE_INT cfa_fb_offset;
18027
18028       if (!old_die || !get_AT (old_die, DW_AT_inline))
18029         equate_decl_number_to_die (decl, subr_die);
18030
18031       if (!flag_reorder_blocks_and_partition)
18032         {
18033           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
18034                                        current_function_funcdef_no);
18035           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
18036           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
18037                                        current_function_funcdef_no);
18038           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
18039
18040           add_pubname (decl, subr_die);
18041           add_arange (decl, subr_die);
18042         }
18043       else
18044         {  /* Do nothing for now; maybe need to duplicate die, one for
18045               hot section and one for cold section, then use the hot/cold
18046               section begin/end labels to generate the aranges...  */
18047           /*
18048             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
18049             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
18050             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
18051             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
18052
18053             add_pubname (decl, subr_die);
18054             add_arange (decl, subr_die);
18055             add_arange (decl, subr_die);
18056            */
18057         }
18058
18059 #ifdef MIPS_DEBUGGING_INFO
18060       /* Add a reference to the FDE for this routine.  */
18061       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
18062 #endif
18063
18064       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
18065
18066       /* We define the "frame base" as the function's CFA.  This is more
18067          convenient for several reasons: (1) It's stable across the prologue
18068          and epilogue, which makes it better than just a frame pointer,
18069          (2) With dwarf3, there exists a one-byte encoding that allows us
18070          to reference the .debug_frame data by proxy, but failing that,
18071          (3) We can at least reuse the code inspection and interpretation
18072          code that determines the CFA position at various points in the
18073          function.  */
18074       if (dwarf_version >= 3)
18075         {
18076           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
18077           add_AT_loc (subr_die, DW_AT_frame_base, op);
18078         }
18079       else
18080         {
18081           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
18082           if (list->dw_loc_next)
18083             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18084           else
18085             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18086         }
18087
18088       /* Compute a displacement from the "steady-state frame pointer" to
18089          the CFA.  The former is what all stack slots and argument slots
18090          will reference in the rtl; the later is what we've told the
18091          debugger about.  We'll need to adjust all frame_base references
18092          by this displacement.  */
18093       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18094
18095       if (cfun->static_chain_decl)
18096         add_AT_location_description (subr_die, DW_AT_static_link,
18097                  loc_list_from_tree (cfun->static_chain_decl, 2));
18098     }
18099
18100   /* Generate child dies for template paramaters.  */
18101   if (debug_info_level > DINFO_LEVEL_TERSE)
18102     gen_generic_params_dies (decl);
18103
18104   /* Now output descriptions of the arguments for this function. This gets
18105      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18106      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18107      `...' at the end of the formal parameter list.  In order to find out if
18108      there was a trailing ellipsis or not, we must instead look at the type
18109      associated with the FUNCTION_DECL.  This will be a node of type
18110      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18111      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18112      an ellipsis at the end.  */
18113
18114   /* In the case where we are describing a mere function declaration, all we
18115      need to do here (and all we *can* do here) is to describe the *types* of
18116      its formal parameters.  */
18117   if (debug_info_level <= DINFO_LEVEL_TERSE)
18118     ;
18119   else if (declaration)
18120     gen_formal_types_die (decl, subr_die);
18121   else
18122     {
18123       /* Generate DIEs to represent all known formal parameters.  */
18124       tree parm = DECL_ARGUMENTS (decl);
18125       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18126       tree generic_decl_parm = generic_decl
18127                                 ? DECL_ARGUMENTS (generic_decl)
18128                                 : NULL;
18129
18130       /* Now we want to walk the list of parameters of the function and
18131          emit their relevant DIEs.
18132
18133          We consider the case of DECL being an instance of a generic function
18134          as well as it being a normal function.
18135
18136          If DECL is an instance of a generic function we walk the
18137          parameters of the generic function declaration _and_ the parameters of
18138          DECL itself. This is useful because we want to emit specific DIEs for
18139          function parameter packs and those are declared as part of the
18140          generic function declaration. In that particular case,
18141          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18142          That DIE has children DIEs representing the set of arguments
18143          of the pack. Note that the set of pack arguments can be empty.
18144          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18145          children DIE.
18146
18147          Otherwise, we just consider the parameters of DECL.  */
18148       while (generic_decl_parm || parm)
18149         {
18150           if (generic_decl_parm
18151               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18152             gen_formal_parameter_pack_die (generic_decl_parm,
18153                                            parm, subr_die,
18154                                            &parm);
18155           else if (parm)
18156             {
18157               gen_decl_die (parm, NULL, subr_die);
18158               parm = TREE_CHAIN (parm);
18159             }
18160
18161           if (generic_decl_parm)
18162             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18163         }
18164
18165       /* Decide whether we need an unspecified_parameters DIE at the end.
18166          There are 2 more cases to do this for: 1) the ansi ... declaration -
18167          this is detectable when the end of the arg list is not a
18168          void_type_node 2) an unprototyped function declaration (not a
18169          definition).  This just means that we have no info about the
18170          parameters at all.  */
18171       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18172       if (fn_arg_types != NULL)
18173         {
18174           /* This is the prototyped case, check for....  */
18175           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18176             gen_unspecified_parameters_die (decl, subr_die);
18177         }
18178       else if (DECL_INITIAL (decl) == NULL_TREE)
18179         gen_unspecified_parameters_die (decl, subr_die);
18180     }
18181
18182   /* Output Dwarf info for all of the stuff within the body of the function
18183      (if it has one - it may be just a declaration).  */
18184   outer_scope = DECL_INITIAL (decl);
18185
18186   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18187      a function.  This BLOCK actually represents the outermost binding contour
18188      for the function, i.e. the contour in which the function's formal
18189      parameters and labels get declared. Curiously, it appears that the front
18190      end doesn't actually put the PARM_DECL nodes for the current function onto
18191      the BLOCK_VARS list for this outer scope, but are strung off of the
18192      DECL_ARGUMENTS list for the function instead.
18193
18194      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18195      the LABEL_DECL nodes for the function however, and we output DWARF info
18196      for those in decls_for_scope.  Just within the `outer_scope' there will be
18197      a BLOCK node representing the function's outermost pair of curly braces,
18198      and any blocks used for the base and member initializers of a C++
18199      constructor function.  */
18200   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18201     {
18202       /* Emit a DW_TAG_variable DIE for a named return value.  */
18203       if (DECL_NAME (DECL_RESULT (decl)))
18204         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18205
18206       current_function_has_inlines = 0;
18207       decls_for_scope (outer_scope, subr_die, 0);
18208
18209 #if 0 && defined (MIPS_DEBUGGING_INFO)
18210       if (current_function_has_inlines)
18211         {
18212           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18213           if (! comp_unit_has_inlines)
18214             {
18215               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18216               comp_unit_has_inlines = 1;
18217             }
18218         }
18219 #endif
18220     }
18221   /* Add the calling convention attribute if requested.  */
18222   add_calling_convention_attribute (subr_die, decl);
18223
18224 }
18225
18226 /* Returns a hash value for X (which really is a die_struct).  */
18227
18228 static hashval_t
18229 common_block_die_table_hash (const void *x)
18230 {
18231   const_dw_die_ref d = (const_dw_die_ref) x;
18232   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18233 }
18234
18235 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18236    as decl_id and die_parent of die_struct Y.  */
18237
18238 static int
18239 common_block_die_table_eq (const void *x, const void *y)
18240 {
18241   const_dw_die_ref d = (const_dw_die_ref) x;
18242   const_dw_die_ref e = (const_dw_die_ref) y;
18243   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18244 }
18245
18246 /* Generate a DIE to represent a declared data object.
18247    Either DECL or ORIGIN must be non-null.  */
18248
18249 static void
18250 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18251 {
18252   HOST_WIDE_INT off;
18253   tree com_decl;
18254   tree decl_or_origin = decl ? decl : origin;
18255   tree ultimate_origin;
18256   dw_die_ref var_die;
18257   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18258   dw_die_ref origin_die;
18259   int declaration = (DECL_EXTERNAL (decl_or_origin)
18260                      || class_or_namespace_scope_p (context_die));
18261
18262   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18263   if (decl || ultimate_origin)
18264     origin = ultimate_origin;
18265   com_decl = fortran_common (decl_or_origin, &off);
18266
18267   /* Symbol in common gets emitted as a child of the common block, in the form
18268      of a data member.  */
18269   if (com_decl)
18270     {
18271       dw_die_ref com_die;
18272       dw_loc_list_ref loc;
18273       die_node com_die_arg;
18274
18275       var_die = lookup_decl_die (decl_or_origin);
18276       if (var_die)
18277         {
18278           if (get_AT (var_die, DW_AT_location) == NULL)
18279             {
18280               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18281               if (loc)
18282                 {
18283                   if (off)
18284                     {
18285                       /* Optimize the common case.  */
18286                       if (single_element_loc_list_p (loc)
18287                           && loc->expr->dw_loc_opc == DW_OP_addr
18288                           && loc->expr->dw_loc_next == NULL
18289                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18290                              == SYMBOL_REF)
18291                         loc->expr->dw_loc_oprnd1.v.val_addr
18292                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18293                         else
18294                           loc_list_plus_const (loc, off);
18295                     }
18296                   add_AT_location_description (var_die, DW_AT_location, loc);
18297                   remove_AT (var_die, DW_AT_declaration);
18298                 }
18299             }
18300           return;
18301         }
18302
18303       if (common_block_die_table == NULL)
18304         common_block_die_table
18305           = htab_create_ggc (10, common_block_die_table_hash,
18306                              common_block_die_table_eq, NULL);
18307
18308       com_die_arg.decl_id = DECL_UID (com_decl);
18309       com_die_arg.die_parent = context_die;
18310       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18311       loc = loc_list_from_tree (com_decl, 2);
18312       if (com_die == NULL)
18313         {
18314           const char *cnam
18315             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18316           void **slot;
18317
18318           com_die = new_die (DW_TAG_common_block, context_die, decl);
18319           add_name_and_src_coords_attributes (com_die, com_decl);
18320           if (loc)
18321             {
18322               add_AT_location_description (com_die, DW_AT_location, loc);
18323               /* Avoid sharing the same loc descriptor between
18324                  DW_TAG_common_block and DW_TAG_variable.  */
18325               loc = loc_list_from_tree (com_decl, 2);
18326             }
18327           else if (DECL_EXTERNAL (decl))
18328             add_AT_flag (com_die, DW_AT_declaration, 1);
18329           add_pubname_string (cnam, com_die); /* ??? needed? */
18330           com_die->decl_id = DECL_UID (com_decl);
18331           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18332           *slot = (void *) com_die;
18333         }
18334       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18335         {
18336           add_AT_location_description (com_die, DW_AT_location, loc);
18337           loc = loc_list_from_tree (com_decl, 2);
18338           remove_AT (com_die, DW_AT_declaration);
18339         }
18340       var_die = new_die (DW_TAG_variable, com_die, decl);
18341       add_name_and_src_coords_attributes (var_die, decl);
18342       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18343                           TREE_THIS_VOLATILE (decl), context_die);
18344       add_AT_flag (var_die, DW_AT_external, 1);
18345       if (loc)
18346         {
18347           if (off)
18348             {
18349               /* Optimize the common case.  */
18350               if (single_element_loc_list_p (loc)
18351                   && loc->expr->dw_loc_opc == DW_OP_addr
18352                   && loc->expr->dw_loc_next == NULL
18353                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18354                 loc->expr->dw_loc_oprnd1.v.val_addr
18355                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18356               else
18357                 loc_list_plus_const (loc, off);
18358             }
18359           add_AT_location_description (var_die, DW_AT_location, loc);
18360         }
18361       else if (DECL_EXTERNAL (decl))
18362         add_AT_flag (var_die, DW_AT_declaration, 1);
18363       equate_decl_number_to_die (decl, var_die);
18364       return;
18365     }
18366
18367   /* If the compiler emitted a definition for the DECL declaration
18368      and if we already emitted a DIE for it, don't emit a second
18369      DIE for it again. Allow re-declarations of DECLs that are
18370      inside functions, though.  */
18371   if (old_die && declaration && !local_scope_p (context_die))
18372     return;
18373
18374   /* For static data members, the declaration in the class is supposed
18375      to have DW_TAG_member tag; the specification should still be
18376      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18377   if (declaration && class_scope_p (context_die))
18378     var_die = new_die (DW_TAG_member, context_die, decl);
18379   else
18380     var_die = new_die (DW_TAG_variable, context_die, decl);
18381
18382   origin_die = NULL;
18383   if (origin != NULL)
18384     origin_die = add_abstract_origin_attribute (var_die, origin);
18385
18386   /* Loop unrolling can create multiple blocks that refer to the same
18387      static variable, so we must test for the DW_AT_declaration flag.
18388
18389      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18390      copy decls and set the DECL_ABSTRACT flag on them instead of
18391      sharing them.
18392
18393      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18394
18395      ??? The declare_in_namespace support causes us to get two DIEs for one
18396      variable, both of which are declarations.  We want to avoid considering
18397      one to be a specification, so we must test that this DIE is not a
18398      declaration.  */
18399   else if (old_die && TREE_STATIC (decl) && ! declaration
18400            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18401     {
18402       /* This is a definition of a C++ class level static.  */
18403       add_AT_specification (var_die, old_die);
18404       if (DECL_NAME (decl))
18405         {
18406           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18407           struct dwarf_file_data * file_index = lookup_filename (s.file);
18408
18409           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18410             add_AT_file (var_die, DW_AT_decl_file, file_index);
18411
18412           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18413             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18414         }
18415     }
18416   else
18417     {
18418       tree type = TREE_TYPE (decl);
18419
18420       add_name_and_src_coords_attributes (var_die, decl);
18421       if (decl_by_reference_p (decl))
18422         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18423       else
18424         add_type_attribute (var_die, type, TREE_READONLY (decl),
18425                             TREE_THIS_VOLATILE (decl), context_die);
18426
18427       if (TREE_PUBLIC (decl))
18428         add_AT_flag (var_die, DW_AT_external, 1);
18429
18430       if (DECL_ARTIFICIAL (decl))
18431         add_AT_flag (var_die, DW_AT_artificial, 1);
18432
18433       if (TREE_PROTECTED (decl))
18434         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18435       else if (TREE_PRIVATE (decl))
18436         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18437     }
18438
18439   if (declaration)
18440     add_AT_flag (var_die, DW_AT_declaration, 1);
18441
18442   if (decl && (DECL_ABSTRACT (decl) || declaration))
18443     equate_decl_number_to_die (decl, var_die);
18444
18445   if (! declaration
18446       && (! DECL_ABSTRACT (decl_or_origin)
18447           /* Local static vars are shared between all clones/inlines,
18448              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18449              already set.  */
18450           || (TREE_CODE (decl_or_origin) == VAR_DECL
18451               && TREE_STATIC (decl_or_origin)
18452               && DECL_RTL_SET_P (decl_or_origin)))
18453       /* When abstract origin already has DW_AT_location attribute, no need
18454          to add it again.  */
18455       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18456     {
18457       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18458           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18459         defer_location (decl_or_origin, var_die);
18460       else
18461         add_location_or_const_value_attribute (var_die,
18462                                                decl_or_origin,
18463                                                DW_AT_location);
18464       add_pubname (decl_or_origin, var_die);
18465     }
18466   else
18467     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18468 }
18469
18470 /* Generate a DIE to represent a named constant.  */
18471
18472 static void
18473 gen_const_die (tree decl, dw_die_ref context_die)
18474 {
18475   dw_die_ref const_die;
18476   tree type = TREE_TYPE (decl);
18477
18478   const_die = new_die (DW_TAG_constant, context_die, decl);
18479   add_name_and_src_coords_attributes (const_die, decl);
18480   add_type_attribute (const_die, type, 1, 0, context_die);
18481   if (TREE_PUBLIC (decl))
18482     add_AT_flag (const_die, DW_AT_external, 1);
18483   if (DECL_ARTIFICIAL (decl))
18484     add_AT_flag (const_die, DW_AT_artificial, 1);
18485   tree_add_const_value_attribute_for_decl (const_die, decl);
18486 }
18487
18488 /* Generate a DIE to represent a label identifier.  */
18489
18490 static void
18491 gen_label_die (tree decl, dw_die_ref context_die)
18492 {
18493   tree origin = decl_ultimate_origin (decl);
18494   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18495   rtx insn;
18496   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18497
18498   if (origin != NULL)
18499     add_abstract_origin_attribute (lbl_die, origin);
18500   else
18501     add_name_and_src_coords_attributes (lbl_die, decl);
18502
18503   if (DECL_ABSTRACT (decl))
18504     equate_decl_number_to_die (decl, lbl_die);
18505   else
18506     {
18507       insn = DECL_RTL_IF_SET (decl);
18508
18509       /* Deleted labels are programmer specified labels which have been
18510          eliminated because of various optimizations.  We still emit them
18511          here so that it is possible to put breakpoints on them.  */
18512       if (insn
18513           && (LABEL_P (insn)
18514               || ((NOTE_P (insn)
18515                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18516         {
18517           /* When optimization is enabled (via -O) some parts of the compiler
18518              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18519              represent source-level labels which were explicitly declared by
18520              the user.  This really shouldn't be happening though, so catch
18521              it if it ever does happen.  */
18522           gcc_assert (!INSN_DELETED_P (insn));
18523
18524           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18525           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18526         }
18527     }
18528 }
18529
18530 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18531    attributes to the DIE for a block STMT, to describe where the inlined
18532    function was called from.  This is similar to add_src_coords_attributes.  */
18533
18534 static inline void
18535 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18536 {
18537   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18538
18539   if (dwarf_version >= 3 || !dwarf_strict)
18540     {
18541       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18542       add_AT_unsigned (die, DW_AT_call_line, s.line);
18543     }
18544 }
18545
18546
18547 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18548    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18549
18550 static inline void
18551 add_high_low_attributes (tree stmt, dw_die_ref die)
18552 {
18553   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18554
18555   if (BLOCK_FRAGMENT_CHAIN (stmt)
18556       && (dwarf_version >= 3 || !dwarf_strict))
18557     {
18558       tree chain;
18559
18560       if (inlined_function_outer_scope_p (stmt))
18561         {
18562           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18563                                        BLOCK_NUMBER (stmt));
18564           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18565         }
18566
18567       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18568
18569       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18570       do
18571         {
18572           add_ranges (chain);
18573           chain = BLOCK_FRAGMENT_CHAIN (chain);
18574         }
18575       while (chain);
18576       add_ranges (NULL);
18577     }
18578   else
18579     {
18580       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18581                                    BLOCK_NUMBER (stmt));
18582       add_AT_lbl_id (die, DW_AT_low_pc, label);
18583       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18584                                    BLOCK_NUMBER (stmt));
18585       add_AT_lbl_id (die, DW_AT_high_pc, label);
18586     }
18587 }
18588
18589 /* Generate a DIE for a lexical block.  */
18590
18591 static void
18592 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18593 {
18594   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18595
18596   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18597     add_high_low_attributes (stmt, stmt_die);
18598
18599   decls_for_scope (stmt, stmt_die, depth);
18600 }
18601
18602 /* Generate a DIE for an inlined subprogram.  */
18603
18604 static void
18605 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18606 {
18607   tree decl;
18608
18609   /* The instance of function that is effectively being inlined shall not
18610      be abstract.  */
18611   gcc_assert (! BLOCK_ABSTRACT (stmt));
18612
18613   decl = block_ultimate_origin (stmt);
18614
18615   /* Emit info for the abstract instance first, if we haven't yet.  We
18616      must emit this even if the block is abstract, otherwise when we
18617      emit the block below (or elsewhere), we may end up trying to emit
18618      a die whose origin die hasn't been emitted, and crashing.  */
18619   dwarf2out_abstract_function (decl);
18620
18621   if (! BLOCK_ABSTRACT (stmt))
18622     {
18623       dw_die_ref subr_die
18624         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18625
18626       add_abstract_origin_attribute (subr_die, decl);
18627       if (TREE_ASM_WRITTEN (stmt))
18628         add_high_low_attributes (stmt, subr_die);
18629       add_call_src_coords_attributes (stmt, subr_die);
18630
18631       decls_for_scope (stmt, subr_die, depth);
18632       current_function_has_inlines = 1;
18633     }
18634 }
18635
18636 /* Generate a DIE for a field in a record, or structure.  */
18637
18638 static void
18639 gen_field_die (tree decl, dw_die_ref context_die)
18640 {
18641   dw_die_ref decl_die;
18642
18643   if (TREE_TYPE (decl) == error_mark_node)
18644     return;
18645
18646   decl_die = new_die (DW_TAG_member, context_die, decl);
18647   add_name_and_src_coords_attributes (decl_die, decl);
18648   add_type_attribute (decl_die, member_declared_type (decl),
18649                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18650                       context_die);
18651
18652   if (DECL_BIT_FIELD_TYPE (decl))
18653     {
18654       add_byte_size_attribute (decl_die, decl);
18655       add_bit_size_attribute (decl_die, decl);
18656       add_bit_offset_attribute (decl_die, decl);
18657     }
18658
18659   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18660     add_data_member_location_attribute (decl_die, decl);
18661
18662   if (DECL_ARTIFICIAL (decl))
18663     add_AT_flag (decl_die, DW_AT_artificial, 1);
18664
18665   if (TREE_PROTECTED (decl))
18666     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18667   else if (TREE_PRIVATE (decl))
18668     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18669
18670   /* Equate decl number to die, so that we can look up this decl later on.  */
18671   equate_decl_number_to_die (decl, decl_die);
18672 }
18673
18674 #if 0
18675 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18676    Use modified_type_die instead.
18677    We keep this code here just in case these types of DIEs may be needed to
18678    represent certain things in other languages (e.g. Pascal) someday.  */
18679
18680 static void
18681 gen_pointer_type_die (tree type, dw_die_ref context_die)
18682 {
18683   dw_die_ref ptr_die
18684     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18685
18686   equate_type_number_to_die (type, ptr_die);
18687   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18688   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18689 }
18690
18691 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18692    Use modified_type_die instead.
18693    We keep this code here just in case these types of DIEs may be needed to
18694    represent certain things in other languages (e.g. Pascal) someday.  */
18695
18696 static void
18697 gen_reference_type_die (tree type, dw_die_ref context_die)
18698 {
18699   dw_die_ref ref_die, scope_die = scope_die_for (type, context_die);
18700
18701   if (TYPE_REF_IS_RVALUE (type) && dwarf_version >= 4)
18702     ref_die = new_die (DW_TAG_rvalue_reference_type, scope_die, type);
18703   else
18704     ref_die = new_die (DW_TAG_reference_type, scope_die, type);
18705
18706   equate_type_number_to_die (type, ref_die);
18707   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18708   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18709 }
18710 #endif
18711
18712 /* Generate a DIE for a pointer to a member type.  */
18713
18714 static void
18715 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18716 {
18717   dw_die_ref ptr_die
18718     = new_die (DW_TAG_ptr_to_member_type,
18719                scope_die_for (type, context_die), type);
18720
18721   equate_type_number_to_die (type, ptr_die);
18722   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18723                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18724   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18725 }
18726
18727 /* Generate the DIE for the compilation unit.  */
18728
18729 static dw_die_ref
18730 gen_compile_unit_die (const char *filename)
18731 {
18732   dw_die_ref die;
18733   char producer[250];
18734   const char *language_string = lang_hooks.name;
18735   int language;
18736
18737   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18738
18739   if (filename)
18740     {
18741       add_name_attribute (die, filename);
18742       /* Don't add cwd for <built-in>.  */
18743       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18744         add_comp_dir_attribute (die);
18745     }
18746
18747   sprintf (producer, "%s %s", language_string, version_string);
18748
18749 #ifdef MIPS_DEBUGGING_INFO
18750   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18751      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18752      not appear in the producer string, the debugger reaches the conclusion
18753      that the object file is stripped and has no debugging information.
18754      To get the MIPS/SGI debugger to believe that there is debugging
18755      information in the object file, we add a -g to the producer string.  */
18756   if (debug_info_level > DINFO_LEVEL_TERSE)
18757     strcat (producer, " -g");
18758 #endif
18759
18760   add_AT_string (die, DW_AT_producer, producer);
18761
18762   language = DW_LANG_C89;
18763   if (strcmp (language_string, "GNU C++") == 0)
18764     language = DW_LANG_C_plus_plus;
18765   else if (strcmp (language_string, "GNU F77") == 0)
18766     language = DW_LANG_Fortran77;
18767   else if (strcmp (language_string, "GNU Pascal") == 0)
18768     language = DW_LANG_Pascal83;
18769   else if (dwarf_version >= 3 || !dwarf_strict)
18770     {
18771       if (strcmp (language_string, "GNU Ada") == 0)
18772         language = DW_LANG_Ada95;
18773       else if (strcmp (language_string, "GNU Fortran") == 0)
18774         language = DW_LANG_Fortran95;
18775       else if (strcmp (language_string, "GNU Java") == 0)
18776         language = DW_LANG_Java;
18777       else if (strcmp (language_string, "GNU Objective-C") == 0)
18778         language = DW_LANG_ObjC;
18779       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18780         language = DW_LANG_ObjC_plus_plus;
18781     }
18782
18783   add_AT_unsigned (die, DW_AT_language, language);
18784   return die;
18785 }
18786
18787 /* Generate the DIE for a base class.  */
18788
18789 static void
18790 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18791 {
18792   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18793
18794   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18795   add_data_member_location_attribute (die, binfo);
18796
18797   if (BINFO_VIRTUAL_P (binfo))
18798     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18799
18800   if (access == access_public_node)
18801     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18802   else if (access == access_protected_node)
18803     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18804 }
18805
18806 /* Generate a DIE for a class member.  */
18807
18808 static void
18809 gen_member_die (tree type, dw_die_ref context_die)
18810 {
18811   tree member;
18812   tree binfo = TYPE_BINFO (type);
18813   dw_die_ref child;
18814
18815   /* If this is not an incomplete type, output descriptions of each of its
18816      members. Note that as we output the DIEs necessary to represent the
18817      members of this record or union type, we will also be trying to output
18818      DIEs to represent the *types* of those members. However the `type'
18819      function (above) will specifically avoid generating type DIEs for member
18820      types *within* the list of member DIEs for this (containing) type except
18821      for those types (of members) which are explicitly marked as also being
18822      members of this (containing) type themselves.  The g++ front- end can
18823      force any given type to be treated as a member of some other (containing)
18824      type by setting the TYPE_CONTEXT of the given (member) type to point to
18825      the TREE node representing the appropriate (containing) type.  */
18826
18827   /* First output info about the base classes.  */
18828   if (binfo)
18829     {
18830       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18831       int i;
18832       tree base;
18833
18834       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18835         gen_inheritance_die (base,
18836                              (accesses ? VEC_index (tree, accesses, i)
18837                               : access_public_node), context_die);
18838     }
18839
18840   /* Now output info about the data members and type members.  */
18841   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18842     {
18843       /* If we thought we were generating minimal debug info for TYPE
18844          and then changed our minds, some of the member declarations
18845          may have already been defined.  Don't define them again, but
18846          do put them in the right order.  */
18847
18848       child = lookup_decl_die (member);
18849       if (child)
18850         splice_child_die (context_die, child);
18851       else
18852         gen_decl_die (member, NULL, context_die);
18853     }
18854
18855   /* Now output info about the function members (if any).  */
18856   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18857     {
18858       /* Don't include clones in the member list.  */
18859       if (DECL_ABSTRACT_ORIGIN (member))
18860         continue;
18861
18862       child = lookup_decl_die (member);
18863       if (child)
18864         splice_child_die (context_die, child);
18865       else
18866         gen_decl_die (member, NULL, context_die);
18867     }
18868 }
18869
18870 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18871    is set, we pretend that the type was never defined, so we only get the
18872    member DIEs needed by later specification DIEs.  */
18873
18874 static void
18875 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18876                                 enum debug_info_usage usage)
18877 {
18878   dw_die_ref type_die = lookup_type_die (type);
18879   dw_die_ref scope_die = 0;
18880   int nested = 0;
18881   int complete = (TYPE_SIZE (type)
18882                   && (! TYPE_STUB_DECL (type)
18883                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18884   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18885   complete = complete && should_emit_struct_debug (type, usage);
18886
18887   if (type_die && ! complete)
18888     return;
18889
18890   if (TYPE_CONTEXT (type) != NULL_TREE
18891       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18892           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18893     nested = 1;
18894
18895   scope_die = scope_die_for (type, context_die);
18896
18897   if (! type_die || (nested && scope_die == comp_unit_die))
18898     /* First occurrence of type or toplevel definition of nested class.  */
18899     {
18900       dw_die_ref old_die = type_die;
18901
18902       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18903                           ? record_type_tag (type) : DW_TAG_union_type,
18904                           scope_die, type);
18905       equate_type_number_to_die (type, type_die);
18906       if (old_die)
18907         add_AT_specification (type_die, old_die);
18908       else
18909         add_name_attribute (type_die, type_tag (type));
18910     }
18911   else
18912     remove_AT (type_die, DW_AT_declaration);
18913
18914   /* Generate child dies for template paramaters.  */
18915   if (debug_info_level > DINFO_LEVEL_TERSE
18916       && COMPLETE_TYPE_P (type))
18917     gen_generic_params_dies (type);
18918
18919   /* If this type has been completed, then give it a byte_size attribute and
18920      then give a list of members.  */
18921   if (complete && !ns_decl)
18922     {
18923       /* Prevent infinite recursion in cases where the type of some member of
18924          this type is expressed in terms of this type itself.  */
18925       TREE_ASM_WRITTEN (type) = 1;
18926       add_byte_size_attribute (type_die, type);
18927       if (TYPE_STUB_DECL (type) != NULL_TREE)
18928         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18929
18930       /* If the first reference to this type was as the return type of an
18931          inline function, then it may not have a parent.  Fix this now.  */
18932       if (type_die->die_parent == NULL)
18933         add_child_die (scope_die, type_die);
18934
18935       push_decl_scope (type);
18936       gen_member_die (type, type_die);
18937       pop_decl_scope ();
18938
18939       /* GNU extension: Record what type our vtable lives in.  */
18940       if (TYPE_VFIELD (type))
18941         {
18942           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18943
18944           gen_type_die (vtype, context_die);
18945           add_AT_die_ref (type_die, DW_AT_containing_type,
18946                           lookup_type_die (vtype));
18947         }
18948     }
18949   else
18950     {
18951       add_AT_flag (type_die, DW_AT_declaration, 1);
18952
18953       /* We don't need to do this for function-local types.  */
18954       if (TYPE_STUB_DECL (type)
18955           && ! decl_function_context (TYPE_STUB_DECL (type)))
18956         VEC_safe_push (tree, gc, incomplete_types, type);
18957     }
18958
18959   if (get_AT (type_die, DW_AT_name))
18960     add_pubtype (type, type_die);
18961 }
18962
18963 /* Generate a DIE for a subroutine _type_.  */
18964
18965 static void
18966 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18967 {
18968   tree return_type = TREE_TYPE (type);
18969   dw_die_ref subr_die
18970     = new_die (DW_TAG_subroutine_type,
18971                scope_die_for (type, context_die), type);
18972
18973   equate_type_number_to_die (type, subr_die);
18974   add_prototyped_attribute (subr_die, type);
18975   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18976   gen_formal_types_die (type, subr_die);
18977
18978   if (get_AT (subr_die, DW_AT_name))
18979     add_pubtype (type, subr_die);
18980 }
18981
18982 /* Generate a DIE for a type definition.  */
18983
18984 static void
18985 gen_typedef_die (tree decl, dw_die_ref context_die)
18986 {
18987   dw_die_ref type_die;
18988   tree origin;
18989
18990   if (TREE_ASM_WRITTEN (decl))
18991     return;
18992
18993   TREE_ASM_WRITTEN (decl) = 1;
18994   type_die = new_die (DW_TAG_typedef, context_die, decl);
18995   origin = decl_ultimate_origin (decl);
18996   if (origin != NULL)
18997     add_abstract_origin_attribute (type_die, origin);
18998   else
18999     {
19000       tree type;
19001
19002       add_name_and_src_coords_attributes (type_die, decl);
19003       if (DECL_ORIGINAL_TYPE (decl))
19004         {
19005           type = DECL_ORIGINAL_TYPE (decl);
19006
19007           gcc_assert (type != TREE_TYPE (decl));
19008           equate_type_number_to_die (TREE_TYPE (decl), type_die);
19009         }
19010       else
19011         type = TREE_TYPE (decl);
19012
19013       add_type_attribute (type_die, type, TREE_READONLY (decl),
19014                           TREE_THIS_VOLATILE (decl), context_die);
19015     }
19016
19017   if (DECL_ABSTRACT (decl))
19018     equate_decl_number_to_die (decl, type_die);
19019
19020   if (get_AT (type_die, DW_AT_name))
19021     add_pubtype (decl, type_die);
19022 }
19023
19024 /* Generate a type description DIE.  */
19025
19026 static void
19027 gen_type_die_with_usage (tree type, dw_die_ref context_die,
19028                                 enum debug_info_usage usage)
19029 {
19030   int need_pop;
19031   struct array_descr_info info;
19032
19033   if (type == NULL_TREE || type == error_mark_node)
19034     return;
19035
19036   /* If TYPE is a typedef type variant, let's generate debug info
19037      for the parent typedef which TYPE is a type of.  */
19038   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
19039       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
19040     {
19041       if (TREE_ASM_WRITTEN (type))
19042         return;
19043
19044       /* Prevent broken recursion; we can't hand off to the same type.  */
19045       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
19046
19047       /* Use the DIE of the containing namespace as the parent DIE of
19048          the type description DIE we want to generate.  */
19049       if (DECL_CONTEXT (TYPE_NAME (type))
19050           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
19051         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
19052
19053       TREE_ASM_WRITTEN (type) = 1;
19054       gen_decl_die (TYPE_NAME (type), NULL, context_die);
19055       return;
19056     }
19057
19058   /* If this is an array type with hidden descriptor, handle it first.  */
19059   if (!TREE_ASM_WRITTEN (type)
19060       && lang_hooks.types.get_array_descr_info
19061       && lang_hooks.types.get_array_descr_info (type, &info)
19062       && (dwarf_version >= 3 || !dwarf_strict))
19063     {
19064       gen_descr_array_type_die (type, &info, context_die);
19065       TREE_ASM_WRITTEN (type) = 1;
19066       return;
19067     }
19068
19069   /* We are going to output a DIE to represent the unqualified version
19070      of this type (i.e. without any const or volatile qualifiers) so
19071      get the main variant (i.e. the unqualified version) of this type
19072      now.  (Vectors are special because the debugging info is in the
19073      cloned type itself).  */
19074   if (TREE_CODE (type) != VECTOR_TYPE)
19075     type = type_main_variant (type);
19076
19077   if (TREE_ASM_WRITTEN (type))
19078     return;
19079
19080   switch (TREE_CODE (type))
19081     {
19082     case ERROR_MARK:
19083       break;
19084
19085     case POINTER_TYPE:
19086     case REFERENCE_TYPE:
19087       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19088          ensures that the gen_type_die recursion will terminate even if the
19089          type is recursive.  Recursive types are possible in Ada.  */
19090       /* ??? We could perhaps do this for all types before the switch
19091          statement.  */
19092       TREE_ASM_WRITTEN (type) = 1;
19093
19094       /* For these types, all that is required is that we output a DIE (or a
19095          set of DIEs) to represent the "basis" type.  */
19096       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19097                                 DINFO_USAGE_IND_USE);
19098       break;
19099
19100     case OFFSET_TYPE:
19101       /* This code is used for C++ pointer-to-data-member types.
19102          Output a description of the relevant class type.  */
19103       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19104                                         DINFO_USAGE_IND_USE);
19105
19106       /* Output a description of the type of the object pointed to.  */
19107       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19108                                         DINFO_USAGE_IND_USE);
19109
19110       /* Now output a DIE to represent this pointer-to-data-member type
19111          itself.  */
19112       gen_ptr_to_mbr_type_die (type, context_die);
19113       break;
19114
19115     case FUNCTION_TYPE:
19116       /* Force out return type (in case it wasn't forced out already).  */
19117       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19118                                         DINFO_USAGE_DIR_USE);
19119       gen_subroutine_type_die (type, context_die);
19120       break;
19121
19122     case METHOD_TYPE:
19123       /* Force out return type (in case it wasn't forced out already).  */
19124       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19125                                         DINFO_USAGE_DIR_USE);
19126       gen_subroutine_type_die (type, context_die);
19127       break;
19128
19129     case ARRAY_TYPE:
19130       gen_array_type_die (type, context_die);
19131       break;
19132
19133     case VECTOR_TYPE:
19134       gen_array_type_die (type, context_die);
19135       break;
19136
19137     case ENUMERAL_TYPE:
19138     case RECORD_TYPE:
19139     case UNION_TYPE:
19140     case QUAL_UNION_TYPE:
19141       /* If this is a nested type whose containing class hasn't been written
19142          out yet, writing it out will cover this one, too.  This does not apply
19143          to instantiations of member class templates; they need to be added to
19144          the containing class as they are generated.  FIXME: This hurts the
19145          idea of combining type decls from multiple TUs, since we can't predict
19146          what set of template instantiations we'll get.  */
19147       if (TYPE_CONTEXT (type)
19148           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19149           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19150         {
19151           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19152
19153           if (TREE_ASM_WRITTEN (type))
19154             return;
19155
19156           /* If that failed, attach ourselves to the stub.  */
19157           push_decl_scope (TYPE_CONTEXT (type));
19158           context_die = lookup_type_die (TYPE_CONTEXT (type));
19159           need_pop = 1;
19160         }
19161       else if (TYPE_CONTEXT (type) != NULL_TREE
19162                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19163         {
19164           /* If this type is local to a function that hasn't been written
19165              out yet, use a NULL context for now; it will be fixed up in
19166              decls_for_scope.  */
19167           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19168           need_pop = 0;
19169         }
19170       else
19171         {
19172           context_die = declare_in_namespace (type, context_die);
19173           need_pop = 0;
19174         }
19175
19176       if (TREE_CODE (type) == ENUMERAL_TYPE)
19177         {
19178           /* This might have been written out by the call to
19179              declare_in_namespace.  */
19180           if (!TREE_ASM_WRITTEN (type))
19181             gen_enumeration_type_die (type, context_die);
19182         }
19183       else
19184         gen_struct_or_union_type_die (type, context_die, usage);
19185
19186       if (need_pop)
19187         pop_decl_scope ();
19188
19189       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19190          it up if it is ever completed.  gen_*_type_die will set it for us
19191          when appropriate.  */
19192       return;
19193
19194     case VOID_TYPE:
19195     case INTEGER_TYPE:
19196     case REAL_TYPE:
19197     case FIXED_POINT_TYPE:
19198     case COMPLEX_TYPE:
19199     case BOOLEAN_TYPE:
19200       /* No DIEs needed for fundamental types.  */
19201       break;
19202
19203     case LANG_TYPE:
19204       /* No Dwarf representation currently defined.  */
19205       break;
19206
19207     default:
19208       gcc_unreachable ();
19209     }
19210
19211   TREE_ASM_WRITTEN (type) = 1;
19212 }
19213
19214 static void
19215 gen_type_die (tree type, dw_die_ref context_die)
19216 {
19217   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19218 }
19219
19220 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19221    things which are local to the given block.  */
19222
19223 static void
19224 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19225 {
19226   int must_output_die = 0;
19227   bool inlined_func;
19228
19229   /* Ignore blocks that are NULL.  */
19230   if (stmt == NULL_TREE)
19231     return;
19232
19233   inlined_func = inlined_function_outer_scope_p (stmt);
19234
19235   /* If the block is one fragment of a non-contiguous block, do not
19236      process the variables, since they will have been done by the
19237      origin block.  Do process subblocks.  */
19238   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19239     {
19240       tree sub;
19241
19242       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19243         gen_block_die (sub, context_die, depth + 1);
19244
19245       return;
19246     }
19247
19248   /* Determine if we need to output any Dwarf DIEs at all to represent this
19249      block.  */
19250   if (inlined_func)
19251     /* The outer scopes for inlinings *must* always be represented.  We
19252        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19253     must_output_die = 1;
19254   else
19255     {
19256       /* Determine if this block directly contains any "significant"
19257          local declarations which we will need to output DIEs for.  */
19258       if (debug_info_level > DINFO_LEVEL_TERSE)
19259         /* We are not in terse mode so *any* local declaration counts
19260            as being a "significant" one.  */
19261         must_output_die = ((BLOCK_VARS (stmt) != NULL
19262                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19263                            && (TREE_USED (stmt)
19264                                || TREE_ASM_WRITTEN (stmt)
19265                                || BLOCK_ABSTRACT (stmt)));
19266       else if ((TREE_USED (stmt)
19267                 || TREE_ASM_WRITTEN (stmt)
19268                 || BLOCK_ABSTRACT (stmt))
19269                && !dwarf2out_ignore_block (stmt))
19270         must_output_die = 1;
19271     }
19272
19273   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19274      DIE for any block which contains no significant local declarations at
19275      all.  Rather, in such cases we just call `decls_for_scope' so that any
19276      needed Dwarf info for any sub-blocks will get properly generated. Note
19277      that in terse mode, our definition of what constitutes a "significant"
19278      local declaration gets restricted to include only inlined function
19279      instances and local (nested) function definitions.  */
19280   if (must_output_die)
19281     {
19282       if (inlined_func)
19283         {
19284           /* If STMT block is abstract, that means we have been called
19285              indirectly from dwarf2out_abstract_function.
19286              That function rightfully marks the descendent blocks (of
19287              the abstract function it is dealing with) as being abstract,
19288              precisely to prevent us from emitting any
19289              DW_TAG_inlined_subroutine DIE as a descendent
19290              of an abstract function instance. So in that case, we should
19291              not call gen_inlined_subroutine_die.
19292
19293              Later though, when cgraph asks dwarf2out to emit info
19294              for the concrete instance of the function decl into which
19295              the concrete instance of STMT got inlined, the later will lead
19296              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19297           if (! BLOCK_ABSTRACT (stmt))
19298             gen_inlined_subroutine_die (stmt, context_die, depth);
19299         }
19300       else
19301         gen_lexical_block_die (stmt, context_die, depth);
19302     }
19303   else
19304     decls_for_scope (stmt, context_die, depth);
19305 }
19306
19307 /* Process variable DECL (or variable with origin ORIGIN) within
19308    block STMT and add it to CONTEXT_DIE.  */
19309 static void
19310 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19311 {
19312   dw_die_ref die;
19313   tree decl_or_origin = decl ? decl : origin;
19314
19315   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19316     die = lookup_decl_die (decl_or_origin);
19317   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19318            && TYPE_DECL_IS_STUB (decl_or_origin))
19319     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19320   else
19321     die = NULL;
19322
19323   if (die != NULL && die->die_parent == NULL)
19324     add_child_die (context_die, die);
19325   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19326     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19327                                          stmt, context_die);
19328   else
19329     gen_decl_die (decl, origin, context_die);
19330 }
19331
19332 /* Generate all of the decls declared within a given scope and (recursively)
19333    all of its sub-blocks.  */
19334
19335 static void
19336 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19337 {
19338   tree decl;
19339   unsigned int i;
19340   tree subblocks;
19341
19342   /* Ignore NULL blocks.  */
19343   if (stmt == NULL_TREE)
19344     return;
19345
19346   /* Output the DIEs to represent all of the data objects and typedefs
19347      declared directly within this block but not within any nested
19348      sub-blocks.  Also, nested function and tag DIEs have been
19349      generated with a parent of NULL; fix that up now.  */
19350   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19351     process_scope_var (stmt, decl, NULL_TREE, context_die);
19352   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19353     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19354                        context_die);
19355
19356   /* If we're at -g1, we're not interested in subblocks.  */
19357   if (debug_info_level <= DINFO_LEVEL_TERSE)
19358     return;
19359
19360   /* Output the DIEs to represent all sub-blocks (and the items declared
19361      therein) of this block.  */
19362   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19363        subblocks != NULL;
19364        subblocks = BLOCK_CHAIN (subblocks))
19365     gen_block_die (subblocks, context_die, depth + 1);
19366 }
19367
19368 /* Is this a typedef we can avoid emitting?  */
19369
19370 static inline int
19371 is_redundant_typedef (const_tree decl)
19372 {
19373   if (TYPE_DECL_IS_STUB (decl))
19374     return 1;
19375
19376   if (DECL_ARTIFICIAL (decl)
19377       && DECL_CONTEXT (decl)
19378       && is_tagged_type (DECL_CONTEXT (decl))
19379       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19380       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19381     /* Also ignore the artificial member typedef for the class name.  */
19382     return 1;
19383
19384   return 0;
19385 }
19386
19387 /* Returns the DIE for a context.  */
19388
19389 static inline dw_die_ref
19390 get_context_die (tree context)
19391 {
19392   if (context)
19393     {
19394       /* Find die that represents this context.  */
19395       if (TYPE_P (context))
19396         return force_type_die (TYPE_MAIN_VARIANT (context));
19397       else
19398         return force_decl_die (context);
19399     }
19400   return comp_unit_die;
19401 }
19402
19403 /* Returns the DIE for decl.  A DIE will always be returned.  */
19404
19405 static dw_die_ref
19406 force_decl_die (tree decl)
19407 {
19408   dw_die_ref decl_die;
19409   unsigned saved_external_flag;
19410   tree save_fn = NULL_TREE;
19411   decl_die = lookup_decl_die (decl);
19412   if (!decl_die)
19413     {
19414       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19415
19416       decl_die = lookup_decl_die (decl);
19417       if (decl_die)
19418         return decl_die;
19419
19420       switch (TREE_CODE (decl))
19421         {
19422         case FUNCTION_DECL:
19423           /* Clear current_function_decl, so that gen_subprogram_die thinks
19424              that this is a declaration. At this point, we just want to force
19425              declaration die.  */
19426           save_fn = current_function_decl;
19427           current_function_decl = NULL_TREE;
19428           gen_subprogram_die (decl, context_die);
19429           current_function_decl = save_fn;
19430           break;
19431
19432         case VAR_DECL:
19433           /* Set external flag to force declaration die. Restore it after
19434            gen_decl_die() call.  */
19435           saved_external_flag = DECL_EXTERNAL (decl);
19436           DECL_EXTERNAL (decl) = 1;
19437           gen_decl_die (decl, NULL, context_die);
19438           DECL_EXTERNAL (decl) = saved_external_flag;
19439           break;
19440
19441         case NAMESPACE_DECL:
19442           if (dwarf_version >= 3 || !dwarf_strict)
19443             dwarf2out_decl (decl);
19444           else
19445             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19446             decl_die = comp_unit_die;
19447           break;
19448
19449         default:
19450           gcc_unreachable ();
19451         }
19452
19453       /* We should be able to find the DIE now.  */
19454       if (!decl_die)
19455         decl_die = lookup_decl_die (decl);
19456       gcc_assert (decl_die);
19457     }
19458
19459   return decl_die;
19460 }
19461
19462 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19463    always returned.  */
19464
19465 static dw_die_ref
19466 force_type_die (tree type)
19467 {
19468   dw_die_ref type_die;
19469
19470   type_die = lookup_type_die (type);
19471   if (!type_die)
19472     {
19473       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19474
19475       type_die = modified_type_die (type, TYPE_READONLY (type),
19476                                     TYPE_VOLATILE (type), context_die);
19477       gcc_assert (type_die);
19478     }
19479   return type_die;
19480 }
19481
19482 /* Force out any required namespaces to be able to output DECL,
19483    and return the new context_die for it, if it's changed.  */
19484
19485 static dw_die_ref
19486 setup_namespace_context (tree thing, dw_die_ref context_die)
19487 {
19488   tree context = (DECL_P (thing)
19489                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19490   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19491     /* Force out the namespace.  */
19492     context_die = force_decl_die (context);
19493
19494   return context_die;
19495 }
19496
19497 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19498    type) within its namespace, if appropriate.
19499
19500    For compatibility with older debuggers, namespace DIEs only contain
19501    declarations; all definitions are emitted at CU scope.  */
19502
19503 static dw_die_ref
19504 declare_in_namespace (tree thing, dw_die_ref context_die)
19505 {
19506   dw_die_ref ns_context;
19507
19508   if (debug_info_level <= DINFO_LEVEL_TERSE)
19509     return context_die;
19510
19511   /* If this decl is from an inlined function, then don't try to emit it in its
19512      namespace, as we will get confused.  It would have already been emitted
19513      when the abstract instance of the inline function was emitted anyways.  */
19514   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19515     return context_die;
19516
19517   ns_context = setup_namespace_context (thing, context_die);
19518
19519   if (ns_context != context_die)
19520     {
19521       if (is_fortran ())
19522         return ns_context;
19523       if (DECL_P (thing))
19524         gen_decl_die (thing, NULL, ns_context);
19525       else
19526         gen_type_die (thing, ns_context);
19527     }
19528   return context_die;
19529 }
19530
19531 /* Generate a DIE for a namespace or namespace alias.  */
19532
19533 static void
19534 gen_namespace_die (tree decl, dw_die_ref context_die)
19535 {
19536   dw_die_ref namespace_die;
19537
19538   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19539      they are an alias of.  */
19540   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19541     {
19542       /* Output a real namespace or module.  */
19543       context_die = setup_namespace_context (decl, comp_unit_die);
19544       namespace_die = new_die (is_fortran ()
19545                                ? DW_TAG_module : DW_TAG_namespace,
19546                                context_die, decl);
19547       /* For Fortran modules defined in different CU don't add src coords.  */
19548       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19549         {
19550           const char *name = dwarf2_name (decl, 0);
19551           if (name)
19552             add_name_attribute (namespace_die, name);
19553         }
19554       else
19555         add_name_and_src_coords_attributes (namespace_die, decl);
19556       if (DECL_EXTERNAL (decl))
19557         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19558       equate_decl_number_to_die (decl, namespace_die);
19559     }
19560   else
19561     {
19562       /* Output a namespace alias.  */
19563
19564       /* Force out the namespace we are an alias of, if necessary.  */
19565       dw_die_ref origin_die
19566         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19567
19568       if (DECL_CONTEXT (decl) == NULL_TREE
19569           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19570         context_die = setup_namespace_context (decl, comp_unit_die);
19571       /* Now create the namespace alias DIE.  */
19572       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19573       add_name_and_src_coords_attributes (namespace_die, decl);
19574       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19575       equate_decl_number_to_die (decl, namespace_die);
19576     }
19577 }
19578
19579 /* Generate Dwarf debug information for a decl described by DECL.  */
19580
19581 static void
19582 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19583 {
19584   tree decl_or_origin = decl ? decl : origin;
19585   tree class_origin = NULL, ultimate_origin;
19586
19587   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19588     return;
19589
19590   switch (TREE_CODE (decl_or_origin))
19591     {
19592     case ERROR_MARK:
19593       break;
19594
19595     case CONST_DECL:
19596       if (!is_fortran ())
19597         {
19598           /* The individual enumerators of an enum type get output when we output
19599              the Dwarf representation of the relevant enum type itself.  */
19600           break;
19601         }
19602
19603       /* Emit its type.  */
19604       gen_type_die (TREE_TYPE (decl), context_die);
19605
19606       /* And its containing namespace.  */
19607       context_die = declare_in_namespace (decl, context_die);
19608
19609       gen_const_die (decl, context_die);
19610       break;
19611
19612     case FUNCTION_DECL:
19613       /* Don't output any DIEs to represent mere function declarations,
19614          unless they are class members or explicit block externs.  */
19615       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19616           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19617           && (current_function_decl == NULL_TREE
19618               || DECL_ARTIFICIAL (decl_or_origin)))
19619         break;
19620
19621 #if 0
19622       /* FIXME */
19623       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19624          on local redeclarations of global functions.  That seems broken.  */
19625       if (current_function_decl != decl)
19626         /* This is only a declaration.  */;
19627 #endif
19628
19629       /* If we're emitting a clone, emit info for the abstract instance.  */
19630       if (origin || DECL_ORIGIN (decl) != decl)
19631         dwarf2out_abstract_function (origin
19632                                      ? DECL_ORIGIN (origin)
19633                                      : DECL_ABSTRACT_ORIGIN (decl));
19634
19635       /* If we're emitting an out-of-line copy of an inline function,
19636          emit info for the abstract instance and set up to refer to it.  */
19637       else if (cgraph_function_possibly_inlined_p (decl)
19638                && ! DECL_ABSTRACT (decl)
19639                && ! class_or_namespace_scope_p (context_die)
19640                /* dwarf2out_abstract_function won't emit a die if this is just
19641                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19642                   that case, because that works only if we have a die.  */
19643                && DECL_INITIAL (decl) != NULL_TREE)
19644         {
19645           dwarf2out_abstract_function (decl);
19646           set_decl_origin_self (decl);
19647         }
19648
19649       /* Otherwise we're emitting the primary DIE for this decl.  */
19650       else if (debug_info_level > DINFO_LEVEL_TERSE)
19651         {
19652           /* Before we describe the FUNCTION_DECL itself, make sure that we
19653              have described its return type.  */
19654           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19655
19656           /* And its virtual context.  */
19657           if (DECL_VINDEX (decl) != NULL_TREE)
19658             gen_type_die (DECL_CONTEXT (decl), context_die);
19659
19660           /* And its containing type.  */
19661           if (!origin)
19662             origin = decl_class_context (decl);
19663           if (origin != NULL_TREE)
19664             gen_type_die_for_member (origin, decl, context_die);
19665
19666           /* And its containing namespace.  */
19667           context_die = declare_in_namespace (decl, context_die);
19668         }
19669
19670       /* Now output a DIE to represent the function itself.  */
19671       if (decl)
19672         gen_subprogram_die (decl, context_die);
19673       break;
19674
19675     case TYPE_DECL:
19676       /* If we are in terse mode, don't generate any DIEs to represent any
19677          actual typedefs.  */
19678       if (debug_info_level <= DINFO_LEVEL_TERSE)
19679         break;
19680
19681       /* In the special case of a TYPE_DECL node representing the declaration
19682          of some type tag, if the given TYPE_DECL is marked as having been
19683          instantiated from some other (original) TYPE_DECL node (e.g. one which
19684          was generated within the original definition of an inline function) we
19685          used to generate a special (abbreviated) DW_TAG_structure_type,
19686          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19687          should be actually referencing those DIEs, as variable DIEs with that
19688          type would be emitted already in the abstract origin, so it was always
19689          removed during unused type prunning.  Don't add anything in this
19690          case.  */
19691       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19692         break;
19693
19694       if (is_redundant_typedef (decl))
19695         gen_type_die (TREE_TYPE (decl), context_die);
19696       else
19697         /* Output a DIE to represent the typedef itself.  */
19698         gen_typedef_die (decl, context_die);
19699       break;
19700
19701     case LABEL_DECL:
19702       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19703         gen_label_die (decl, context_die);
19704       break;
19705
19706     case VAR_DECL:
19707     case RESULT_DECL:
19708       /* If we are in terse mode, don't generate any DIEs to represent any
19709          variable declarations or definitions.  */
19710       if (debug_info_level <= DINFO_LEVEL_TERSE)
19711         break;
19712
19713       /* Output any DIEs that are needed to specify the type of this data
19714          object.  */
19715       if (decl_by_reference_p (decl_or_origin))
19716         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19717       else
19718         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19719
19720       /* And its containing type.  */
19721       class_origin = decl_class_context (decl_or_origin);
19722       if (class_origin != NULL_TREE)
19723         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19724
19725       /* And its containing namespace.  */
19726       context_die = declare_in_namespace (decl_or_origin, context_die);
19727
19728       /* Now output the DIE to represent the data object itself.  This gets
19729          complicated because of the possibility that the VAR_DECL really
19730          represents an inlined instance of a formal parameter for an inline
19731          function.  */
19732       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19733       if (ultimate_origin != NULL_TREE
19734           && TREE_CODE (ultimate_origin) == PARM_DECL)
19735         gen_formal_parameter_die (decl, origin,
19736                                   true /* Emit name attribute.  */,
19737                                   context_die);
19738       else
19739         gen_variable_die (decl, origin, context_die);
19740       break;
19741
19742     case FIELD_DECL:
19743       /* Ignore the nameless fields that are used to skip bits but handle C++
19744          anonymous unions and structs.  */
19745       if (DECL_NAME (decl) != NULL_TREE
19746           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19747           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19748         {
19749           gen_type_die (member_declared_type (decl), context_die);
19750           gen_field_die (decl, context_die);
19751         }
19752       break;
19753
19754     case PARM_DECL:
19755       if (DECL_BY_REFERENCE (decl_or_origin))
19756         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19757       else
19758         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19759       gen_formal_parameter_die (decl, origin,
19760                                 true /* Emit name attribute.  */,
19761                                 context_die);
19762       break;
19763
19764     case NAMESPACE_DECL:
19765     case IMPORTED_DECL:
19766       if (dwarf_version >= 3 || !dwarf_strict)
19767         gen_namespace_die (decl, context_die);
19768       break;
19769
19770     default:
19771       /* Probably some frontend-internal decl.  Assume we don't care.  */
19772       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19773       break;
19774     }
19775 }
19776 \f
19777 /* Output debug information for global decl DECL.  Called from toplev.c after
19778    compilation proper has finished.  */
19779
19780 static void
19781 dwarf2out_global_decl (tree decl)
19782 {
19783   /* Output DWARF2 information for file-scope tentative data object
19784      declarations, file-scope (extern) function declarations (which
19785      had no corresponding body) and file-scope tagged type declarations
19786      and definitions which have not yet been forced out.  */
19787   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19788     dwarf2out_decl (decl);
19789 }
19790
19791 /* Output debug information for type decl DECL.  Called from toplev.c
19792    and from language front ends (to record built-in types).  */
19793 static void
19794 dwarf2out_type_decl (tree decl, int local)
19795 {
19796   if (!local)
19797     dwarf2out_decl (decl);
19798 }
19799
19800 /* Output debug information for imported module or decl DECL.
19801    NAME is non-NULL name in the lexical block if the decl has been renamed.
19802    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19803    that DECL belongs to.
19804    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19805 static void
19806 dwarf2out_imported_module_or_decl_1 (tree decl,
19807                                      tree name,
19808                                      tree lexical_block,
19809                                      dw_die_ref lexical_block_die)
19810 {
19811   expanded_location xloc;
19812   dw_die_ref imported_die = NULL;
19813   dw_die_ref at_import_die;
19814
19815   if (TREE_CODE (decl) == IMPORTED_DECL)
19816     {
19817       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19818       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19819       gcc_assert (decl);
19820     }
19821   else
19822     xloc = expand_location (input_location);
19823
19824   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19825     {
19826       if (is_base_type (TREE_TYPE (decl)))
19827         at_import_die = base_type_die (TREE_TYPE (decl));
19828       else
19829         at_import_die = force_type_die (TREE_TYPE (decl));
19830       /* For namespace N { typedef void T; } using N::T; base_type_die
19831          returns NULL, but DW_TAG_imported_declaration requires
19832          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19833       if (!at_import_die)
19834         {
19835           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19836           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19837           at_import_die = lookup_type_die (TREE_TYPE (decl));
19838           gcc_assert (at_import_die);
19839         }
19840     }
19841   else
19842     {
19843       at_import_die = lookup_decl_die (decl);
19844       if (!at_import_die)
19845         {
19846           /* If we're trying to avoid duplicate debug info, we may not have
19847              emitted the member decl for this field.  Emit it now.  */
19848           if (TREE_CODE (decl) == FIELD_DECL)
19849             {
19850               tree type = DECL_CONTEXT (decl);
19851
19852               if (TYPE_CONTEXT (type)
19853                   && TYPE_P (TYPE_CONTEXT (type))
19854                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19855                                                 DINFO_USAGE_DIR_USE))
19856                 return;
19857               gen_type_die_for_member (type, decl,
19858                                        get_context_die (TYPE_CONTEXT (type)));
19859             }
19860           at_import_die = force_decl_die (decl);
19861         }
19862     }
19863
19864   if (TREE_CODE (decl) == NAMESPACE_DECL)
19865     {
19866       if (dwarf_version >= 3 || !dwarf_strict)
19867         imported_die = new_die (DW_TAG_imported_module,
19868                                 lexical_block_die,
19869                                 lexical_block);
19870       else
19871         return;
19872     }
19873   else
19874     imported_die = new_die (DW_TAG_imported_declaration,
19875                             lexical_block_die,
19876                             lexical_block);
19877
19878   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19879   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19880   if (name)
19881     add_AT_string (imported_die, DW_AT_name,
19882                    IDENTIFIER_POINTER (name));
19883   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19884 }
19885
19886 /* Output debug information for imported module or decl DECL.
19887    NAME is non-NULL name in context if the decl has been renamed.
19888    CHILD is true if decl is one of the renamed decls as part of
19889    importing whole module.  */
19890
19891 static void
19892 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19893                                    bool child)
19894 {
19895   /* dw_die_ref at_import_die;  */
19896   dw_die_ref scope_die;
19897
19898   if (debug_info_level <= DINFO_LEVEL_TERSE)
19899     return;
19900
19901   gcc_assert (decl);
19902
19903   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19904      We need decl DIE for reference and scope die. First, get DIE for the decl
19905      itself.  */
19906
19907   /* Get the scope die for decl context. Use comp_unit_die for global module
19908      or decl. If die is not found for non globals, force new die.  */
19909   if (context
19910       && TYPE_P (context)
19911       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19912     return;
19913
19914   if (!(dwarf_version >= 3 || !dwarf_strict))
19915     return;
19916
19917   scope_die = get_context_die (context);
19918
19919   if (child)
19920     {
19921       gcc_assert (scope_die->die_child);
19922       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19923       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19924       scope_die = scope_die->die_child;
19925     }
19926
19927   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19928   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19929
19930 }
19931
19932 /* Write the debugging output for DECL.  */
19933
19934 void
19935 dwarf2out_decl (tree decl)
19936 {
19937   dw_die_ref context_die = comp_unit_die;
19938
19939   switch (TREE_CODE (decl))
19940     {
19941     case ERROR_MARK:
19942       return;
19943
19944     case FUNCTION_DECL:
19945       /* What we would really like to do here is to filter out all mere
19946          file-scope declarations of file-scope functions which are never
19947          referenced later within this translation unit (and keep all of ones
19948          that *are* referenced later on) but we aren't clairvoyant, so we have
19949          no idea which functions will be referenced in the future (i.e. later
19950          on within the current translation unit). So here we just ignore all
19951          file-scope function declarations which are not also definitions.  If
19952          and when the debugger needs to know something about these functions,
19953          it will have to hunt around and find the DWARF information associated
19954          with the definition of the function.
19955
19956          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19957          nodes represent definitions and which ones represent mere
19958          declarations.  We have to check DECL_INITIAL instead. That's because
19959          the C front-end supports some weird semantics for "extern inline"
19960          function definitions.  These can get inlined within the current
19961          translation unit (and thus, we need to generate Dwarf info for their
19962          abstract instances so that the Dwarf info for the concrete inlined
19963          instances can have something to refer to) but the compiler never
19964          generates any out-of-lines instances of such things (despite the fact
19965          that they *are* definitions).
19966
19967          The important point is that the C front-end marks these "extern
19968          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19969          them anyway. Note that the C++ front-end also plays some similar games
19970          for inline function definitions appearing within include files which
19971          also contain `#pragma interface' pragmas.  */
19972       if (DECL_INITIAL (decl) == NULL_TREE)
19973         return;
19974
19975       /* If we're a nested function, initially use a parent of NULL; if we're
19976          a plain function, this will be fixed up in decls_for_scope.  If
19977          we're a method, it will be ignored, since we already have a DIE.  */
19978       if (decl_function_context (decl)
19979           /* But if we're in terse mode, we don't care about scope.  */
19980           && debug_info_level > DINFO_LEVEL_TERSE)
19981         context_die = NULL;
19982       break;
19983
19984     case VAR_DECL:
19985       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19986          declaration and if the declaration was never even referenced from
19987          within this entire compilation unit.  We suppress these DIEs in
19988          order to save space in the .debug section (by eliminating entries
19989          which are probably useless).  Note that we must not suppress
19990          block-local extern declarations (whether used or not) because that
19991          would screw-up the debugger's name lookup mechanism and cause it to
19992          miss things which really ought to be in scope at a given point.  */
19993       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19994         return;
19995
19996       /* For local statics lookup proper context die.  */
19997       if (TREE_STATIC (decl) && decl_function_context (decl))
19998         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19999
20000       /* If we are in terse mode, don't generate any DIEs to represent any
20001          variable declarations or definitions.  */
20002       if (debug_info_level <= DINFO_LEVEL_TERSE)
20003         return;
20004       break;
20005
20006     case CONST_DECL:
20007       if (debug_info_level <= DINFO_LEVEL_TERSE)
20008         return;
20009       if (!is_fortran ())
20010         return;
20011       if (TREE_STATIC (decl) && decl_function_context (decl))
20012         context_die = lookup_decl_die (DECL_CONTEXT (decl));
20013       break;
20014
20015     case NAMESPACE_DECL:
20016     case IMPORTED_DECL:
20017       if (debug_info_level <= DINFO_LEVEL_TERSE)
20018         return;
20019       if (lookup_decl_die (decl) != NULL)
20020         return;
20021       break;
20022
20023     case TYPE_DECL:
20024       /* Don't emit stubs for types unless they are needed by other DIEs.  */
20025       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
20026         return;
20027
20028       /* Don't bother trying to generate any DIEs to represent any of the
20029          normal built-in types for the language we are compiling.  */
20030       if (DECL_IS_BUILTIN (decl))
20031         {
20032           /* OK, we need to generate one for `bool' so GDB knows what type
20033              comparisons have.  */
20034           if (is_cxx ()
20035               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
20036               && ! DECL_IGNORED_P (decl))
20037             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
20038
20039           return;
20040         }
20041
20042       /* If we are in terse mode, don't generate any DIEs for types.  */
20043       if (debug_info_level <= DINFO_LEVEL_TERSE)
20044         return;
20045
20046       /* If we're a function-scope tag, initially use a parent of NULL;
20047          this will be fixed up in decls_for_scope.  */
20048       if (decl_function_context (decl))
20049         context_die = NULL;
20050
20051       break;
20052
20053     default:
20054       return;
20055     }
20056
20057   gen_decl_die (decl, NULL, context_die);
20058 }
20059
20060 /* Write the debugging output for DECL.  */
20061
20062 static void
20063 dwarf2out_function_decl (tree decl)
20064 {
20065   dwarf2out_decl (decl);
20066
20067   htab_empty (decl_loc_table);
20068 }
20069
20070 /* Output a marker (i.e. a label) for the beginning of the generated code for
20071    a lexical block.  */
20072
20073 static void
20074 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
20075                        unsigned int blocknum)
20076 {
20077   switch_to_section (current_function_section ());
20078   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
20079 }
20080
20081 /* Output a marker (i.e. a label) for the end of the generated code for a
20082    lexical block.  */
20083
20084 static void
20085 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
20086 {
20087   switch_to_section (current_function_section ());
20088   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20089 }
20090
20091 /* Returns nonzero if it is appropriate not to emit any debugging
20092    information for BLOCK, because it doesn't contain any instructions.
20093
20094    Don't allow this for blocks with nested functions or local classes
20095    as we would end up with orphans, and in the presence of scheduling
20096    we may end up calling them anyway.  */
20097
20098 static bool
20099 dwarf2out_ignore_block (const_tree block)
20100 {
20101   tree decl;
20102   unsigned int i;
20103
20104   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20105     if (TREE_CODE (decl) == FUNCTION_DECL
20106         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20107       return 0;
20108   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20109     {
20110       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20111       if (TREE_CODE (decl) == FUNCTION_DECL
20112           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20113       return 0;
20114     }
20115
20116   return 1;
20117 }
20118
20119 /* Hash table routines for file_hash.  */
20120
20121 static int
20122 file_table_eq (const void *p1_p, const void *p2_p)
20123 {
20124   const struct dwarf_file_data *const p1 =
20125     (const struct dwarf_file_data *) p1_p;
20126   const char *const p2 = (const char *) p2_p;
20127   return strcmp (p1->filename, p2) == 0;
20128 }
20129
20130 static hashval_t
20131 file_table_hash (const void *p_p)
20132 {
20133   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20134   return htab_hash_string (p->filename);
20135 }
20136
20137 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20138    dwarf2out.c) and return its "index".  The index of each (known) filename is
20139    just a unique number which is associated with only that one filename.  We
20140    need such numbers for the sake of generating labels (in the .debug_sfnames
20141    section) and references to those files numbers (in the .debug_srcinfo
20142    and.debug_macinfo sections).  If the filename given as an argument is not
20143    found in our current list, add it to the list and assign it the next
20144    available unique index number.  In order to speed up searches, we remember
20145    the index of the filename was looked up last.  This handles the majority of
20146    all searches.  */
20147
20148 static struct dwarf_file_data *
20149 lookup_filename (const char *file_name)
20150 {
20151   void ** slot;
20152   struct dwarf_file_data * created;
20153
20154   /* Check to see if the file name that was searched on the previous
20155      call matches this file name.  If so, return the index.  */
20156   if (file_table_last_lookup
20157       && (file_name == file_table_last_lookup->filename
20158           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20159     return file_table_last_lookup;
20160
20161   /* Didn't match the previous lookup, search the table.  */
20162   slot = htab_find_slot_with_hash (file_table, file_name,
20163                                    htab_hash_string (file_name), INSERT);
20164   if (*slot)
20165     return (struct dwarf_file_data *) *slot;
20166
20167   created = GGC_NEW (struct dwarf_file_data);
20168   created->filename = file_name;
20169   created->emitted_number = 0;
20170   *slot = created;
20171   return created;
20172 }
20173
20174 /* If the assembler will construct the file table, then translate the compiler
20175    internal file table number into the assembler file table number, and emit
20176    a .file directive if we haven't already emitted one yet.  The file table
20177    numbers are different because we prune debug info for unused variables and
20178    types, which may include filenames.  */
20179
20180 static int
20181 maybe_emit_file (struct dwarf_file_data * fd)
20182 {
20183   if (! fd->emitted_number)
20184     {
20185       if (last_emitted_file)
20186         fd->emitted_number = last_emitted_file->emitted_number + 1;
20187       else
20188         fd->emitted_number = 1;
20189       last_emitted_file = fd;
20190
20191       if (DWARF2_ASM_LINE_DEBUG_INFO)
20192         {
20193           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20194           output_quoted_string (asm_out_file,
20195                                 remap_debug_filename (fd->filename));
20196           fputc ('\n', asm_out_file);
20197         }
20198     }
20199
20200   return fd->emitted_number;
20201 }
20202
20203 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20204    That generation should happen after function debug info has been
20205    generated. The value of the attribute is the constant value of ARG.  */
20206
20207 static void
20208 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20209 {
20210   die_arg_entry entry;
20211
20212   if (!die || !arg)
20213     return;
20214
20215   if (!tmpl_value_parm_die_table)
20216     tmpl_value_parm_die_table
20217       = VEC_alloc (die_arg_entry, gc, 32);
20218
20219   entry.die = die;
20220   entry.arg = arg;
20221   VEC_safe_push (die_arg_entry, gc,
20222                  tmpl_value_parm_die_table,
20223                  &entry);
20224 }
20225
20226 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20227    by append_entry_to_tmpl_value_parm_die_table. This function must
20228    be called after function DIEs have been generated.  */
20229
20230 static void
20231 gen_remaining_tmpl_value_param_die_attribute (void)
20232 {
20233   if (tmpl_value_parm_die_table)
20234     {
20235       unsigned i;
20236       die_arg_entry *e;
20237
20238       for (i = 0;
20239            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20240            i++)
20241         tree_add_const_value_attribute (e->die, e->arg);
20242     }
20243 }
20244
20245
20246 /* Replace DW_AT_name for the decl with name.  */
20247
20248 static void
20249 dwarf2out_set_name (tree decl, tree name)
20250 {
20251   dw_die_ref die;
20252   dw_attr_ref attr;
20253   const char *dname;
20254
20255   die = TYPE_SYMTAB_DIE (decl);
20256   if (!die)
20257     return;
20258
20259   dname = dwarf2_name (name, 0);
20260   if (!dname)
20261     return;
20262
20263   attr = get_AT (die, DW_AT_name);
20264   if (attr)
20265     {
20266       struct indirect_string_node *node;
20267
20268       node = find_AT_string (dname);
20269       /* replace the string.  */
20270       attr->dw_attr_val.v.val_str = node;
20271     }
20272
20273   else
20274     add_name_attribute (die, dname);
20275 }
20276
20277 /* Called by the final INSN scan whenever we see a direct function call.
20278    Make an entry into the direct call table, recording the point of call
20279    and a reference to the target function's debug entry.  */
20280
20281 static void
20282 dwarf2out_direct_call (tree targ)
20283 {
20284   dcall_entry e;
20285   tree origin = decl_ultimate_origin (targ);
20286
20287   /* If this is a clone, use the abstract origin as the target.  */
20288   if (origin)
20289     targ = origin;
20290
20291   e.poc_label_num = poc_label_num++;
20292   e.poc_decl = current_function_decl;
20293   e.targ_die = force_decl_die (targ);
20294   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20295
20296   /* Drop a label at the return point to mark the point of call.  */
20297   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20298 }
20299
20300 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20301
20302 static hashval_t
20303 vcall_insn_table_hash (const void *x)
20304 {
20305   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20306 }
20307
20308 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20309    insnd_uid of *Y.  */
20310
20311 static int
20312 vcall_insn_table_eq (const void *x, const void *y)
20313 {
20314   return (((const struct vcall_insn *) x)->insn_uid
20315           == ((const struct vcall_insn *) y)->insn_uid);
20316 }
20317
20318 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20319
20320 static void
20321 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20322 {
20323   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20324   struct vcall_insn **slot;
20325
20326   gcc_assert (item);
20327   item->insn_uid = insn_uid;
20328   item->vtable_slot = vtable_slot;
20329   slot = (struct vcall_insn **)
20330       htab_find_slot_with_hash (vcall_insn_table, &item,
20331                                 (hashval_t) insn_uid, INSERT);
20332   *slot = item;
20333 }
20334
20335 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20336
20337 static unsigned int
20338 lookup_vcall_insn (unsigned int insn_uid)
20339 {
20340   struct vcall_insn item;
20341   struct vcall_insn *p;
20342
20343   item.insn_uid = insn_uid;
20344   item.vtable_slot = 0;
20345   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20346                                                  (void *) &item,
20347                                                  (hashval_t) insn_uid);
20348   if (p == NULL)
20349     return (unsigned int) -1;
20350   return p->vtable_slot;
20351 }
20352
20353
20354 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20355    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20356    is the vtable slot index that we will need to put in the virtual call
20357    table later.  */
20358
20359 static void
20360 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20361 {
20362   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20363     {
20364       tree token = OBJ_TYPE_REF_TOKEN (addr);
20365       if (TREE_CODE (token) == INTEGER_CST)
20366         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20367     }
20368 }
20369
20370 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20371    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20372    with NEW_INSN.  */
20373
20374 static void
20375 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20376 {
20377   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20378
20379   if (vtable_slot != (unsigned int) -1)
20380     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20381 }
20382
20383 /* Called by the final INSN scan whenever we see a virtual function call.
20384    Make an entry into the virtual call table, recording the point of call
20385    and the slot index of the vtable entry used to call the virtual member
20386    function.  The slot index was associated with the INSN_UID during the
20387    lowering to RTL.  */
20388
20389 static void
20390 dwarf2out_virtual_call (int insn_uid)
20391 {
20392   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20393   vcall_entry e;
20394
20395   if (vtable_slot == (unsigned int) -1)
20396     return;
20397
20398   e.poc_label_num = poc_label_num++;
20399   e.vtable_slot = vtable_slot;
20400   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20401
20402   /* Drop a label at the return point to mark the point of call.  */
20403   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20404 }
20405
20406 /* Called by the final INSN scan whenever we see a var location.  We
20407    use it to drop labels in the right places, and throw the location in
20408    our lookup table.  */
20409
20410 static void
20411 dwarf2out_var_location (rtx loc_note)
20412 {
20413   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20414   struct var_loc_node *newloc;
20415   rtx next_real;
20416   static const char *last_label;
20417   static const char *last_postcall_label;
20418   static bool last_in_cold_section_p;
20419   tree decl;
20420
20421   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20422     return;
20423
20424   next_real = next_real_insn (loc_note);
20425   /* If there are no instructions which would be affected by this note,
20426      don't do anything.  */
20427   if (next_real == NULL_RTX)
20428     return;
20429
20430   /* If there were any real insns between note we processed last time
20431      and this note (or if it is the first note), clear
20432      last_{,postcall_}label so that they are not reused this time.  */
20433   if (last_var_location_insn == NULL_RTX
20434       || last_var_location_insn != next_real
20435       || last_in_cold_section_p != in_cold_section_p)
20436     {
20437       last_label = NULL;
20438       last_postcall_label = NULL;
20439     }
20440
20441   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20442   newloc = add_var_loc_to_decl (decl, loc_note,
20443                                 NOTE_DURING_CALL_P (loc_note)
20444                                 ? last_postcall_label : last_label);
20445   if (newloc == NULL)
20446     return;
20447
20448   /* If there were no real insns between note we processed last time
20449      and this note, use the label we emitted last time.  Otherwise
20450      create a new label and emit it.  */
20451   if (last_label == NULL)
20452     {
20453       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20454       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20455       loclabel_num++;
20456       last_label = ggc_strdup (loclabel);
20457     }
20458   newloc->var_loc_note = loc_note;
20459   newloc->next = NULL;
20460
20461   if (!NOTE_DURING_CALL_P (loc_note))
20462     newloc->label = last_label;
20463   else
20464     {
20465       if (!last_postcall_label)
20466         {
20467           sprintf (loclabel, "%s-1", last_label);
20468           last_postcall_label = ggc_strdup (loclabel);
20469         }
20470       newloc->label = last_postcall_label;
20471     }
20472
20473   last_var_location_insn = next_real;
20474   last_in_cold_section_p = in_cold_section_p;
20475 }
20476
20477 /* We need to reset the locations at the beginning of each
20478    function. We can't do this in the end_function hook, because the
20479    declarations that use the locations won't have been output when
20480    that hook is called.  Also compute have_multiple_function_sections here.  */
20481
20482 static void
20483 dwarf2out_begin_function (tree fun)
20484 {
20485   if (function_section (fun) != text_section)
20486     have_multiple_function_sections = true;
20487
20488   dwarf2out_note_section_used ();
20489 }
20490
20491 /* Output a label to mark the beginning of a source code line entry
20492    and record information relating to this source line, in
20493    'line_info_table' for later output of the .debug_line section.  */
20494
20495 static void
20496 dwarf2out_source_line (unsigned int line, const char *filename,
20497                        int discriminator, bool is_stmt)
20498 {
20499   static bool last_is_stmt = true;
20500
20501   if (debug_info_level >= DINFO_LEVEL_NORMAL
20502       && line != 0)
20503     {
20504       int file_num = maybe_emit_file (lookup_filename (filename));
20505
20506       switch_to_section (current_function_section ());
20507
20508       /* If requested, emit something human-readable.  */
20509       if (flag_debug_asm)
20510         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20511                  filename, line);
20512
20513       if (DWARF2_ASM_LINE_DEBUG_INFO)
20514         {
20515           /* Emit the .loc directive understood by GNU as.  */
20516           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20517           if (is_stmt != last_is_stmt)
20518             {
20519               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20520               last_is_stmt = is_stmt;
20521             }
20522           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20523             fprintf (asm_out_file, " discriminator %d", discriminator);
20524           fputc ('\n', asm_out_file);
20525
20526           /* Indicate that line number info exists.  */
20527           line_info_table_in_use++;
20528         }
20529       else if (function_section (current_function_decl) != text_section)
20530         {
20531           dw_separate_line_info_ref line_info;
20532           targetm.asm_out.internal_label (asm_out_file,
20533                                           SEPARATE_LINE_CODE_LABEL,
20534                                           separate_line_info_table_in_use);
20535
20536           /* Expand the line info table if necessary.  */
20537           if (separate_line_info_table_in_use
20538               == separate_line_info_table_allocated)
20539             {
20540               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20541               separate_line_info_table
20542                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20543                                  separate_line_info_table,
20544                                  separate_line_info_table_allocated);
20545               memset (separate_line_info_table
20546                        + separate_line_info_table_in_use,
20547                       0,
20548                       (LINE_INFO_TABLE_INCREMENT
20549                        * sizeof (dw_separate_line_info_entry)));
20550             }
20551
20552           /* Add the new entry at the end of the line_info_table.  */
20553           line_info
20554             = &separate_line_info_table[separate_line_info_table_in_use++];
20555           line_info->dw_file_num = file_num;
20556           line_info->dw_line_num = line;
20557           line_info->function = current_function_funcdef_no;
20558         }
20559       else
20560         {
20561           dw_line_info_ref line_info;
20562
20563           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20564                                      line_info_table_in_use);
20565
20566           /* Expand the line info table if necessary.  */
20567           if (line_info_table_in_use == line_info_table_allocated)
20568             {
20569               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20570               line_info_table
20571                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20572                                  line_info_table_allocated);
20573               memset (line_info_table + line_info_table_in_use, 0,
20574                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20575             }
20576
20577           /* Add the new entry at the end of the line_info_table.  */
20578           line_info = &line_info_table[line_info_table_in_use++];
20579           line_info->dw_file_num = file_num;
20580           line_info->dw_line_num = line;
20581         }
20582     }
20583 }
20584
20585 /* Record the beginning of a new source file.  */
20586
20587 static void
20588 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20589 {
20590   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20591     {
20592       /* Record the beginning of the file for break_out_includes.  */
20593       dw_die_ref bincl_die;
20594
20595       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20596       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20597     }
20598
20599   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20600     {
20601       int file_num = maybe_emit_file (lookup_filename (filename));
20602
20603       switch_to_section (debug_macinfo_section);
20604       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20605       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20606                                    lineno);
20607
20608       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20609     }
20610 }
20611
20612 /* Record the end of a source file.  */
20613
20614 static void
20615 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20616 {
20617   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20618     /* Record the end of the file for break_out_includes.  */
20619     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20620
20621   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20622     {
20623       switch_to_section (debug_macinfo_section);
20624       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20625     }
20626 }
20627
20628 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20629    the tail part of the directive line, i.e. the part which is past the
20630    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20631
20632 static void
20633 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20634                   const char *buffer ATTRIBUTE_UNUSED)
20635 {
20636   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20637     {
20638       switch_to_section (debug_macinfo_section);
20639       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20640       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20641       dw2_asm_output_nstring (buffer, -1, "The macro");
20642     }
20643 }
20644
20645 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20646    the tail part of the directive line, i.e. the part which is past the
20647    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20648
20649 static void
20650 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20651                  const char *buffer ATTRIBUTE_UNUSED)
20652 {
20653   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20654     {
20655       switch_to_section (debug_macinfo_section);
20656       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20657       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20658       dw2_asm_output_nstring (buffer, -1, "The macro");
20659     }
20660 }
20661
20662 /* Set up for Dwarf output at the start of compilation.  */
20663
20664 static void
20665 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20666 {
20667   /* Allocate the file_table.  */
20668   file_table = htab_create_ggc (50, file_table_hash,
20669                                 file_table_eq, NULL);
20670
20671   /* Allocate the decl_die_table.  */
20672   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20673                                     decl_die_table_eq, NULL);
20674
20675   /* Allocate the decl_loc_table.  */
20676   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20677                                     decl_loc_table_eq, NULL);
20678
20679   /* Allocate the initial hunk of the decl_scope_table.  */
20680   decl_scope_table = VEC_alloc (tree, gc, 256);
20681
20682   /* Allocate the initial hunk of the abbrev_die_table.  */
20683   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20684   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20685   /* Zero-th entry is allocated, but unused.  */
20686   abbrev_die_table_in_use = 1;
20687
20688   /* Allocate the initial hunk of the line_info_table.  */
20689   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20690   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20691
20692   /* Zero-th entry is allocated, but unused.  */
20693   line_info_table_in_use = 1;
20694
20695   /* Allocate the pubtypes and pubnames vectors.  */
20696   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20697   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20698
20699   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20700   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20701                                       vcall_insn_table_eq, NULL);
20702
20703   /* Generate the initial DIE for the .debug section.  Note that the (string)
20704      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20705      will (typically) be a relative pathname and that this pathname should be
20706      taken as being relative to the directory from which the compiler was
20707      invoked when the given (base) source file was compiled.  We will fill
20708      in this value in dwarf2out_finish.  */
20709   comp_unit_die = gen_compile_unit_die (NULL);
20710
20711   incomplete_types = VEC_alloc (tree, gc, 64);
20712
20713   used_rtx_array = VEC_alloc (rtx, gc, 32);
20714
20715   debug_info_section = get_section (DEBUG_INFO_SECTION,
20716                                     SECTION_DEBUG, NULL);
20717   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20718                                       SECTION_DEBUG, NULL);
20719   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20720                                        SECTION_DEBUG, NULL);
20721   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20722                                        SECTION_DEBUG, NULL);
20723   debug_line_section = get_section (DEBUG_LINE_SECTION,
20724                                     SECTION_DEBUG, NULL);
20725   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20726                                    SECTION_DEBUG, NULL);
20727   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20728                                         SECTION_DEBUG, NULL);
20729   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20730                                         SECTION_DEBUG, NULL);
20731   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20732                                      SECTION_DEBUG, NULL);
20733   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20734                                      SECTION_DEBUG, NULL);
20735   debug_str_section = get_section (DEBUG_STR_SECTION,
20736                                    DEBUG_STR_SECTION_FLAGS, NULL);
20737   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20738                                       SECTION_DEBUG, NULL);
20739   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20740                                      SECTION_DEBUG, NULL);
20741
20742   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20743   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20744                                DEBUG_ABBREV_SECTION_LABEL, 0);
20745   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20746   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20747                                COLD_TEXT_SECTION_LABEL, 0);
20748   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20749
20750   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20751                                DEBUG_INFO_SECTION_LABEL, 0);
20752   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20753                                DEBUG_LINE_SECTION_LABEL, 0);
20754   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20755                                DEBUG_RANGES_SECTION_LABEL, 0);
20756   switch_to_section (debug_abbrev_section);
20757   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20758   switch_to_section (debug_info_section);
20759   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20760   switch_to_section (debug_line_section);
20761   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20762
20763   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20764     {
20765       switch_to_section (debug_macinfo_section);
20766       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20767                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20768       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20769     }
20770
20771   switch_to_section (text_section);
20772   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20773   if (flag_reorder_blocks_and_partition)
20774     {
20775       cold_text_section = unlikely_text_section ();
20776       switch_to_section (cold_text_section);
20777       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20778     }
20779
20780 }
20781
20782 /* Called before cgraph_optimize starts outputtting functions, variables
20783    and toplevel asms into assembly.  */
20784
20785 static void
20786 dwarf2out_assembly_start (void)
20787 {
20788   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20789     {
20790 #ifndef TARGET_UNWIND_INFO
20791       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20792 #endif
20793         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20794     }
20795 }
20796
20797 /* A helper function for dwarf2out_finish called through
20798    htab_traverse.  Emit one queued .debug_str string.  */
20799
20800 static int
20801 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20802 {
20803   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20804
20805   if (node->label && node->refcount)
20806     {
20807       switch_to_section (debug_str_section);
20808       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20809       assemble_string (node->str, strlen (node->str) + 1);
20810     }
20811
20812   return 1;
20813 }
20814
20815 #if ENABLE_ASSERT_CHECKING
20816 /* Verify that all marks are clear.  */
20817
20818 static void
20819 verify_marks_clear (dw_die_ref die)
20820 {
20821   dw_die_ref c;
20822
20823   gcc_assert (! die->die_mark);
20824   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20825 }
20826 #endif /* ENABLE_ASSERT_CHECKING */
20827
20828 /* Clear the marks for a die and its children.
20829    Be cool if the mark isn't set.  */
20830
20831 static void
20832 prune_unmark_dies (dw_die_ref die)
20833 {
20834   dw_die_ref c;
20835
20836   if (die->die_mark)
20837     die->die_mark = 0;
20838   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20839 }
20840
20841 /* Given DIE that we're marking as used, find any other dies
20842    it references as attributes and mark them as used.  */
20843
20844 static void
20845 prune_unused_types_walk_attribs (dw_die_ref die)
20846 {
20847   dw_attr_ref a;
20848   unsigned ix;
20849
20850   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20851     {
20852       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20853         {
20854           /* A reference to another DIE.
20855              Make sure that it will get emitted.
20856              If it was broken out into a comdat group, don't follow it.  */
20857           if (dwarf_version < 4
20858               || a->dw_attr == DW_AT_specification
20859               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20860             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20861         }
20862       /* Set the string's refcount to 0 so that prune_unused_types_mark
20863          accounts properly for it.  */
20864       if (AT_class (a) == dw_val_class_str)
20865         a->dw_attr_val.v.val_str->refcount = 0;
20866     }
20867 }
20868
20869
20870 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20871    to DIE's children.  */
20872
20873 static void
20874 prune_unused_types_mark (dw_die_ref die, int dokids)
20875 {
20876   dw_die_ref c;
20877
20878   if (die->die_mark == 0)
20879     {
20880       /* We haven't done this node yet.  Mark it as used.  */
20881       die->die_mark = 1;
20882
20883       /* We also have to mark its parents as used.
20884          (But we don't want to mark our parents' kids due to this.)  */
20885       if (die->die_parent)
20886         prune_unused_types_mark (die->die_parent, 0);
20887
20888       /* Mark any referenced nodes.  */
20889       prune_unused_types_walk_attribs (die);
20890
20891       /* If this node is a specification,
20892          also mark the definition, if it exists.  */
20893       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20894         prune_unused_types_mark (die->die_definition, 1);
20895     }
20896
20897   if (dokids && die->die_mark != 2)
20898     {
20899       /* We need to walk the children, but haven't done so yet.
20900          Remember that we've walked the kids.  */
20901       die->die_mark = 2;
20902
20903       /* If this is an array type, we need to make sure our
20904          kids get marked, even if they're types.  If we're
20905          breaking out types into comdat sections, do this
20906          for all type definitions.  */
20907       if (die->die_tag == DW_TAG_array_type
20908           || (dwarf_version >= 4
20909               && is_type_die (die) && ! is_declaration_die (die)))
20910         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20911       else
20912         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20913     }
20914 }
20915
20916 /* For local classes, look if any static member functions were emitted
20917    and if so, mark them.  */
20918
20919 static void
20920 prune_unused_types_walk_local_classes (dw_die_ref die)
20921 {
20922   dw_die_ref c;
20923
20924   if (die->die_mark == 2)
20925     return;
20926
20927   switch (die->die_tag)
20928     {
20929     case DW_TAG_structure_type:
20930     case DW_TAG_union_type:
20931     case DW_TAG_class_type:
20932       break;
20933
20934     case DW_TAG_subprogram:
20935       if (!get_AT_flag (die, DW_AT_declaration)
20936           || die->die_definition != NULL)
20937         prune_unused_types_mark (die, 1);
20938       return;
20939
20940     default:
20941       return;
20942     }
20943
20944   /* Mark children.  */
20945   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20946 }
20947
20948 /* Walk the tree DIE and mark types that we actually use.  */
20949
20950 static void
20951 prune_unused_types_walk (dw_die_ref die)
20952 {
20953   dw_die_ref c;
20954
20955   /* Don't do anything if this node is already marked and
20956      children have been marked as well.  */
20957   if (die->die_mark == 2)
20958     return;
20959
20960   switch (die->die_tag)
20961     {
20962     case DW_TAG_structure_type:
20963     case DW_TAG_union_type:
20964     case DW_TAG_class_type:
20965       if (die->die_perennial_p)
20966         break;
20967
20968       for (c = die->die_parent; c; c = c->die_parent)
20969         if (c->die_tag == DW_TAG_subprogram)
20970           break;
20971
20972       /* Finding used static member functions inside of classes
20973          is needed just for local classes, because for other classes
20974          static member function DIEs with DW_AT_specification
20975          are emitted outside of the DW_TAG_*_type.  If we ever change
20976          it, we'd need to call this even for non-local classes.  */
20977       if (c)
20978         prune_unused_types_walk_local_classes (die);
20979
20980       /* It's a type node --- don't mark it.  */
20981       return;
20982
20983     case DW_TAG_const_type:
20984     case DW_TAG_packed_type:
20985     case DW_TAG_pointer_type:
20986     case DW_TAG_reference_type:
20987     case DW_TAG_rvalue_reference_type:
20988     case DW_TAG_volatile_type:
20989     case DW_TAG_typedef:
20990     case DW_TAG_array_type:
20991     case DW_TAG_interface_type:
20992     case DW_TAG_friend:
20993     case DW_TAG_variant_part:
20994     case DW_TAG_enumeration_type:
20995     case DW_TAG_subroutine_type:
20996     case DW_TAG_string_type:
20997     case DW_TAG_set_type:
20998     case DW_TAG_subrange_type:
20999     case DW_TAG_ptr_to_member_type:
21000     case DW_TAG_file_type:
21001       if (die->die_perennial_p)
21002         break;
21003
21004       /* It's a type node --- don't mark it.  */
21005       return;
21006
21007     default:
21008       /* Mark everything else.  */
21009       break;
21010   }
21011
21012   if (die->die_mark == 0)
21013     {
21014       die->die_mark = 1;
21015
21016       /* Now, mark any dies referenced from here.  */
21017       prune_unused_types_walk_attribs (die);
21018     }
21019
21020   die->die_mark = 2;
21021
21022   /* Mark children.  */
21023   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
21024 }
21025
21026 /* Increment the string counts on strings referred to from DIE's
21027    attributes.  */
21028
21029 static void
21030 prune_unused_types_update_strings (dw_die_ref die)
21031 {
21032   dw_attr_ref a;
21033   unsigned ix;
21034
21035   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21036     if (AT_class (a) == dw_val_class_str)
21037       {
21038         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
21039         s->refcount++;
21040         /* Avoid unnecessarily putting strings that are used less than
21041            twice in the hash table.  */
21042         if (s->refcount
21043             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
21044           {
21045             void ** slot;
21046             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
21047                                              htab_hash_string (s->str),
21048                                              INSERT);
21049             gcc_assert (*slot == NULL);
21050             *slot = s;
21051           }
21052       }
21053 }
21054
21055 /* Remove from the tree DIE any dies that aren't marked.  */
21056
21057 static void
21058 prune_unused_types_prune (dw_die_ref die)
21059 {
21060   dw_die_ref c;
21061
21062   gcc_assert (die->die_mark);
21063   prune_unused_types_update_strings (die);
21064
21065   if (! die->die_child)
21066     return;
21067
21068   c = die->die_child;
21069   do {
21070     dw_die_ref prev = c;
21071     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
21072       if (c == die->die_child)
21073         {
21074           /* No marked children between 'prev' and the end of the list.  */
21075           if (prev == c)
21076             /* No marked children at all.  */
21077             die->die_child = NULL;
21078           else
21079             {
21080               prev->die_sib = c->die_sib;
21081               die->die_child = prev;
21082             }
21083           return;
21084         }
21085
21086     if (c != prev->die_sib)
21087       prev->die_sib = c;
21088     prune_unused_types_prune (c);
21089   } while (c != die->die_child);
21090 }
21091
21092 /* A helper function for dwarf2out_finish called through
21093    htab_traverse.  Clear .debug_str strings that we haven't already
21094    decided to emit.  */
21095
21096 static int
21097 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
21098 {
21099   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21100
21101   if (!node->label || !node->refcount)
21102     htab_clear_slot (debug_str_hash, h);
21103
21104   return 1;
21105 }
21106
21107 /* Remove dies representing declarations that we never use.  */
21108
21109 static void
21110 prune_unused_types (void)
21111 {
21112   unsigned int i;
21113   limbo_die_node *node;
21114   comdat_type_node *ctnode;
21115   pubname_ref pub;
21116   dcall_entry *dcall;
21117
21118 #if ENABLE_ASSERT_CHECKING
21119   /* All the marks should already be clear.  */
21120   verify_marks_clear (comp_unit_die);
21121   for (node = limbo_die_list; node; node = node->next)
21122     verify_marks_clear (node->die);
21123   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21124     verify_marks_clear (ctnode->root_die);
21125 #endif /* ENABLE_ASSERT_CHECKING */
21126
21127   /* Mark types that are used in global variables.  */
21128   premark_types_used_by_global_vars ();
21129
21130   /* Set the mark on nodes that are actually used.  */
21131   prune_unused_types_walk (comp_unit_die);
21132   for (node = limbo_die_list; node; node = node->next)
21133     prune_unused_types_walk (node->die);
21134   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21135     {
21136       prune_unused_types_walk (ctnode->root_die);
21137       prune_unused_types_mark (ctnode->type_die, 1);
21138     }
21139
21140   /* Also set the mark on nodes referenced from the
21141      pubname_table or arange_table.  */
21142   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21143     prune_unused_types_mark (pub->die, 1);
21144   for (i = 0; i < arange_table_in_use; i++)
21145     prune_unused_types_mark (arange_table[i], 1);
21146
21147   /* Mark nodes referenced from the direct call table.  */
21148   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21149     prune_unused_types_mark (dcall->targ_die, 1);
21150
21151   /* Get rid of nodes that aren't marked; and update the string counts.  */
21152   if (debug_str_hash && debug_str_hash_forced)
21153     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21154   else if (debug_str_hash)
21155     htab_empty (debug_str_hash);
21156   prune_unused_types_prune (comp_unit_die);
21157   for (node = limbo_die_list; node; node = node->next)
21158     prune_unused_types_prune (node->die);
21159   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21160     prune_unused_types_prune (ctnode->root_die);
21161
21162   /* Leave the marks clear.  */
21163   prune_unmark_dies (comp_unit_die);
21164   for (node = limbo_die_list; node; node = node->next)
21165     prune_unmark_dies (node->die);
21166   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21167     prune_unmark_dies (ctnode->root_die);
21168 }
21169
21170 /* Set the parameter to true if there are any relative pathnames in
21171    the file table.  */
21172 static int
21173 file_table_relative_p (void ** slot, void *param)
21174 {
21175   bool *p = (bool *) param;
21176   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21177   if (!IS_ABSOLUTE_PATH (d->filename))
21178     {
21179       *p = true;
21180       return 0;
21181     }
21182   return 1;
21183 }
21184
21185 /* Routines to manipulate hash table of comdat type units.  */
21186
21187 static hashval_t
21188 htab_ct_hash (const void *of)
21189 {
21190   hashval_t h;
21191   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21192
21193   memcpy (&h, type_node->signature, sizeof (h));
21194   return h;
21195 }
21196
21197 static int
21198 htab_ct_eq (const void *of1, const void *of2)
21199 {
21200   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21201   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21202
21203   return (! memcmp (type_node_1->signature, type_node_2->signature,
21204                     DWARF_TYPE_SIGNATURE_SIZE));
21205 }
21206
21207 /* Move a DW_AT_{,MIPS_}linkage_name attribute just added to dw_die_ref
21208    to the location it would have been added, should we know its
21209    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21210    probably improve compactness of debug info, removing equivalent
21211    abbrevs, and hide any differences caused by deferring the
21212    computation of the assembler name, triggered by e.g. PCH.  */
21213
21214 static inline void
21215 move_linkage_attr (dw_die_ref die)
21216 {
21217   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21218   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21219
21220   gcc_assert (linkage.dw_attr == AT_linkage_name);
21221
21222   while (--ix > 0)
21223     {
21224       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21225
21226       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21227         break;
21228     }
21229
21230   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21231     {
21232       VEC_pop (dw_attr_node, die->die_attr);
21233       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21234     }
21235 }
21236
21237 /* Helper function for resolve_addr, attempt to resolve
21238    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21239    SYMBOL_REFs refer to variables emitted in the current CU.  */
21240
21241 static int
21242 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21243 {
21244   rtx rtl = *addr;
21245
21246   if (GET_CODE (rtl) == CONST_STRING)
21247     {
21248       size_t len = strlen (XSTR (rtl, 0)) + 1;
21249       tree t = build_string (len, XSTR (rtl, 0));
21250       tree tlen = build_int_cst (NULL_TREE, len - 1);
21251       TREE_TYPE (t)
21252         = build_array_type (char_type_node, build_index_type (tlen));
21253       rtl = lookup_constant_def (t);
21254       if (!rtl || !MEM_P (rtl))
21255         return 1;
21256       rtl = XEXP (rtl, 0);
21257       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21258       *addr = rtl;
21259       return 0;
21260     }
21261
21262   if (GET_CODE (rtl) == SYMBOL_REF
21263       && SYMBOL_REF_DECL (rtl)
21264       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21265       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21266     return 1;
21267
21268   if (GET_CODE (rtl) == CONST
21269       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21270     return 1;
21271
21272   return 0;
21273 }
21274
21275 /* Helper function for resolve_addr, handle one location
21276    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21277    the location list couldn't be resolved.  */
21278
21279 static bool
21280 resolve_addr_in_expr (dw_loc_descr_ref loc)
21281 {
21282   for (; loc; loc = loc->dw_loc_next)
21283     if ((loc->dw_loc_opc == DW_OP_addr
21284          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21285         || (loc->dw_loc_opc == DW_OP_implicit_value
21286             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21287             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21288       return false;
21289   return true;
21290 }
21291
21292 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21293    an address in .rodata section if the string literal is emitted there,
21294    or remove the containing location list or replace DW_AT_const_value
21295    with DW_AT_location and empty location expression, if it isn't found
21296    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21297    to something that has been emitted in the current CU.  */
21298
21299 static void
21300 resolve_addr (dw_die_ref die)
21301 {
21302   dw_die_ref c;
21303   dw_attr_ref a;
21304   dw_loc_list_ref *curr;
21305   unsigned ix;
21306
21307   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21308     switch (AT_class (a))
21309       {
21310       case dw_val_class_loc_list:
21311         curr = AT_loc_list_ptr (a);
21312         while (*curr)
21313           {
21314             if (!resolve_addr_in_expr ((*curr)->expr))
21315               {
21316                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21317                 if (next && (*curr)->ll_symbol)
21318                   {
21319                     gcc_assert (!next->ll_symbol);
21320                     next->ll_symbol = (*curr)->ll_symbol;
21321                   }
21322                 *curr = next;
21323               }
21324             else
21325               curr = &(*curr)->dw_loc_next;
21326           }
21327         if (!AT_loc_list (a))
21328           {
21329             remove_AT (die, a->dw_attr);
21330             ix--;
21331           }
21332         break;
21333       case dw_val_class_loc:
21334         if (!resolve_addr_in_expr (AT_loc (a)))
21335           {
21336             remove_AT (die, a->dw_attr);
21337             ix--;
21338           }
21339         break;
21340       case dw_val_class_addr:
21341         if (a->dw_attr == DW_AT_const_value
21342             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21343           {
21344             remove_AT (die, a->dw_attr);
21345             ix--;
21346           }
21347         break;
21348       default:
21349         break;
21350       }
21351
21352   FOR_EACH_CHILD (die, c, resolve_addr (c));
21353 }
21354
21355 /* Output stuff that dwarf requires at the end of every file,
21356    and generate the DWARF-2 debugging info.  */
21357
21358 static void
21359 dwarf2out_finish (const char *filename)
21360 {
21361   limbo_die_node *node, *next_node;
21362   comdat_type_node *ctnode;
21363   htab_t comdat_type_table;
21364   dw_die_ref die = 0;
21365   unsigned int i;
21366
21367   gen_remaining_tmpl_value_param_die_attribute ();
21368
21369   /* Add the name for the main input file now.  We delayed this from
21370      dwarf2out_init to avoid complications with PCH.  */
21371   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21372   if (!IS_ABSOLUTE_PATH (filename))
21373     add_comp_dir_attribute (comp_unit_die);
21374   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21375     {
21376       bool p = false;
21377       htab_traverse (file_table, file_table_relative_p, &p);
21378       if (p)
21379         add_comp_dir_attribute (comp_unit_die);
21380     }
21381
21382   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21383     {
21384       add_location_or_const_value_attribute (
21385         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21386         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21387         DW_AT_location);
21388     }
21389
21390   /* Traverse the limbo die list, and add parent/child links.  The only
21391      dies without parents that should be here are concrete instances of
21392      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21393      For concrete instances, we can get the parent die from the abstract
21394      instance.  */
21395   for (node = limbo_die_list; node; node = next_node)
21396     {
21397       next_node = node->next;
21398       die = node->die;
21399
21400       if (die->die_parent == NULL)
21401         {
21402           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21403
21404           if (origin)
21405             add_child_die (origin->die_parent, die);
21406           else if (die == comp_unit_die)
21407             ;
21408           else if (errorcount > 0 || sorrycount > 0)
21409             /* It's OK to be confused by errors in the input.  */
21410             add_child_die (comp_unit_die, die);
21411           else
21412             {
21413               /* In certain situations, the lexical block containing a
21414                  nested function can be optimized away, which results
21415                  in the nested function die being orphaned.  Likewise
21416                  with the return type of that nested function.  Force
21417                  this to be a child of the containing function.
21418
21419                  It may happen that even the containing function got fully
21420                  inlined and optimized out.  In that case we are lost and
21421                  assign the empty child.  This should not be big issue as
21422                  the function is likely unreachable too.  */
21423               tree context = NULL_TREE;
21424
21425               gcc_assert (node->created_for);
21426
21427               if (DECL_P (node->created_for))
21428                 context = DECL_CONTEXT (node->created_for);
21429               else if (TYPE_P (node->created_for))
21430                 context = TYPE_CONTEXT (node->created_for);
21431
21432               gcc_assert (context
21433                           && (TREE_CODE (context) == FUNCTION_DECL
21434                               || TREE_CODE (context) == NAMESPACE_DECL));
21435
21436               origin = lookup_decl_die (context);
21437               if (origin)
21438                 add_child_die (origin, die);
21439               else
21440                 add_child_die (comp_unit_die, die);
21441             }
21442         }
21443     }
21444
21445   limbo_die_list = NULL;
21446
21447   resolve_addr (comp_unit_die);
21448
21449   for (node = deferred_asm_name; node; node = node->next)
21450     {
21451       tree decl = node->created_for;
21452       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21453         {
21454           add_AT_string (node->die, AT_linkage_name,
21455                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21456           move_linkage_attr (node->die);
21457         }
21458     }
21459
21460   deferred_asm_name = NULL;
21461
21462   /* Walk through the list of incomplete types again, trying once more to
21463      emit full debugging info for them.  */
21464   retry_incomplete_types ();
21465
21466   if (flag_eliminate_unused_debug_types)
21467     prune_unused_types ();
21468
21469   /* Generate separate CUs for each of the include files we've seen.
21470      They will go into limbo_die_list.  */
21471   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21472     break_out_includes (comp_unit_die);
21473
21474   /* Generate separate COMDAT sections for type DIEs. */
21475   if (dwarf_version >= 4)
21476     {
21477       break_out_comdat_types (comp_unit_die);
21478
21479       /* Each new type_unit DIE was added to the limbo die list when created.
21480          Since these have all been added to comdat_type_list, clear the
21481          limbo die list.  */
21482       limbo_die_list = NULL;
21483
21484       /* For each new comdat type unit, copy declarations for incomplete
21485          types to make the new unit self-contained (i.e., no direct
21486          references to the main compile unit).  */
21487       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21488         copy_decls_for_unworthy_types (ctnode->root_die);
21489       copy_decls_for_unworthy_types (comp_unit_die);
21490
21491       /* In the process of copying declarations from one unit to another,
21492          we may have left some declarations behind that are no longer
21493          referenced.  Prune them.  */
21494       prune_unused_types ();
21495     }
21496
21497   /* Traverse the DIE's and add add sibling attributes to those DIE's
21498      that have children.  */
21499   add_sibling_attributes (comp_unit_die);
21500   for (node = limbo_die_list; node; node = node->next)
21501     add_sibling_attributes (node->die);
21502   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21503     add_sibling_attributes (ctnode->root_die);
21504
21505   /* Output a terminator label for the .text section.  */
21506   switch_to_section (text_section);
21507   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21508   if (flag_reorder_blocks_and_partition)
21509     {
21510       switch_to_section (unlikely_text_section ());
21511       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21512     }
21513
21514   /* We can only use the low/high_pc attributes if all of the code was
21515      in .text.  */
21516   if (!have_multiple_function_sections
21517       || !(dwarf_version >= 3 || !dwarf_strict))
21518     {
21519       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21520       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21521     }
21522
21523   else
21524     {
21525       unsigned fde_idx = 0;
21526       bool range_list_added = false;
21527
21528       /* We need to give .debug_loc and .debug_ranges an appropriate
21529          "base address".  Use zero so that these addresses become
21530          absolute.  Historically, we've emitted the unexpected
21531          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21532          Emit both to give time for other tools to adapt.  */
21533       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21534       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21535
21536       if (text_section_used)
21537         add_ranges_by_labels (comp_unit_die, text_section_label,
21538                               text_end_label, &range_list_added);
21539       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21540         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21541                               cold_end_label, &range_list_added);
21542
21543       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21544         {
21545           dw_fde_ref fde = &fde_table[fde_idx];
21546
21547           if (fde->dw_fde_switched_sections)
21548             {
21549               if (!fde->in_std_section)
21550                 add_ranges_by_labels (comp_unit_die,
21551                                       fde->dw_fde_hot_section_label,
21552                                       fde->dw_fde_hot_section_end_label,
21553                                       &range_list_added);
21554               if (!fde->cold_in_std_section)
21555                 add_ranges_by_labels (comp_unit_die,
21556                                       fde->dw_fde_unlikely_section_label,
21557                                       fde->dw_fde_unlikely_section_end_label,
21558                                       &range_list_added);
21559             }
21560           else if (!fde->in_std_section)
21561             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21562                                   fde->dw_fde_end, &range_list_added);
21563         }
21564
21565       if (range_list_added)
21566         add_ranges (NULL);
21567     }
21568
21569   /* Output location list section if necessary.  */
21570   if (have_location_lists)
21571     {
21572       /* Output the location lists info.  */
21573       switch_to_section (debug_loc_section);
21574       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21575                                    DEBUG_LOC_SECTION_LABEL, 0);
21576       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21577       output_location_lists (die);
21578     }
21579
21580   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21581     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21582                     debug_line_section_label);
21583
21584   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21585     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21586
21587   /* Output all of the compilation units.  We put the main one last so that
21588      the offsets are available to output_pubnames.  */
21589   for (node = limbo_die_list; node; node = node->next)
21590     output_comp_unit (node->die, 0);
21591
21592   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21593   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21594     {
21595       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21596
21597       /* Don't output duplicate types.  */
21598       if (*slot != HTAB_EMPTY_ENTRY)
21599         continue;
21600
21601       /* Add a pointer to the line table for the main compilation unit
21602          so that the debugger can make sense of DW_AT_decl_file
21603          attributes.  */
21604       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21605         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21606                         debug_line_section_label);
21607
21608       output_comdat_type_unit (ctnode);
21609       *slot = ctnode;
21610     }
21611   htab_delete (comdat_type_table);
21612
21613   /* Output the main compilation unit if non-empty or if .debug_macinfo
21614      has been emitted.  */
21615   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21616
21617   /* Output the abbreviation table.  */
21618   switch_to_section (debug_abbrev_section);
21619   output_abbrev_section ();
21620
21621   /* Output public names table if necessary.  */
21622   if (!VEC_empty (pubname_entry, pubname_table))
21623     {
21624       switch_to_section (debug_pubnames_section);
21625       output_pubnames (pubname_table);
21626     }
21627
21628   /* Output public types table if necessary.  */
21629   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21630      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21631      simply won't look for the section.  */
21632   if (!VEC_empty (pubname_entry, pubtype_table))
21633     {
21634       switch_to_section (debug_pubtypes_section);
21635       output_pubnames (pubtype_table);
21636     }
21637
21638   /* Output direct and virtual call tables if necessary.  */
21639   if (!VEC_empty (dcall_entry, dcall_table))
21640     {
21641       switch_to_section (debug_dcall_section);
21642       output_dcall_table ();
21643     }
21644   if (!VEC_empty (vcall_entry, vcall_table))
21645     {
21646       switch_to_section (debug_vcall_section);
21647       output_vcall_table ();
21648     }
21649
21650   /* Output the address range information.  We only put functions in the arange
21651      table, so don't write it out if we don't have any.  */
21652   if (fde_table_in_use)
21653     {
21654       switch_to_section (debug_aranges_section);
21655       output_aranges ();
21656     }
21657
21658   /* Output ranges section if necessary.  */
21659   if (ranges_table_in_use)
21660     {
21661       switch_to_section (debug_ranges_section);
21662       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21663       output_ranges ();
21664     }
21665
21666   /* Output the source line correspondence table.  We must do this
21667      even if there is no line information.  Otherwise, on an empty
21668      translation unit, we will generate a present, but empty,
21669      .debug_info section.  IRIX 6.5 `nm' will then complain when
21670      examining the file.  This is done late so that any filenames
21671      used by the debug_info section are marked as 'used'.  */
21672   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21673     {
21674       switch_to_section (debug_line_section);
21675       output_line_info ();
21676     }
21677
21678   /* Have to end the macro section.  */
21679   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21680     {
21681       switch_to_section (debug_macinfo_section);
21682       dw2_asm_output_data (1, 0, "End compilation unit");
21683     }
21684
21685   /* If we emitted any DW_FORM_strp form attribute, output the string
21686      table too.  */
21687   if (debug_str_hash)
21688     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21689 }
21690 #else
21691
21692 /* This should never be used, but its address is needed for comparisons.  */
21693 const struct gcc_debug_hooks dwarf2_debug_hooks =
21694 {
21695   0,            /* init */
21696   0,            /* finish */
21697   0,            /* assembly_start */
21698   0,            /* define */
21699   0,            /* undef */
21700   0,            /* start_source_file */
21701   0,            /* end_source_file */
21702   0,            /* begin_block */
21703   0,            /* end_block */
21704   0,            /* ignore_block */
21705   0,            /* source_line */
21706   0,            /* begin_prologue */
21707   0,            /* end_prologue */
21708   0,            /* end_epilogue */
21709   0,            /* begin_function */
21710   0,            /* end_function */
21711   0,            /* function_decl */
21712   0,            /* global_decl */
21713   0,            /* type_decl */
21714   0,            /* imported_module_or_decl */
21715   0,            /* deferred_inline_function */
21716   0,            /* outlining_inline_function */
21717   0,            /* label */
21718   0,            /* handle_pch */
21719   0,            /* var_location */
21720   0,            /* switch_text_section */
21721   0,            /* direct_call */
21722   0,            /* virtual_call_token */
21723   0,            /* copy_call_info */
21724   0,            /* virtual_call */
21725   0,            /* set_name */
21726   0             /* start_end_main_source_file */
21727 };
21728
21729 #endif /* DWARF2_DEBUGGING_INFO */
21730
21731 #include "gt-dwarf2out.h"