OSDN Git Service

Daily bump.
[pf3gnuchains/gcc-fork.git] / gcc / dwarf2out.c
1 /* Output Dwarf2 format symbol table information from GCC.
2    Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
4    Free Software Foundation, Inc.
5    Contributed by Gary Funck (gary@intrepid.com).
6    Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com).
7    Extensively modified by Jason Merrill (jason@cygnus.com).
8
9 This file is part of GCC.
10
11 GCC is free software; you can redistribute it and/or modify it under
12 the terms of the GNU General Public License as published by the Free
13 Software Foundation; either version 3, or (at your option) any later
14 version.
15
16 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
17 WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19 for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with GCC; see the file COPYING3.  If not see
23 <http://www.gnu.org/licenses/>.  */
24
25 /* TODO: Emit .debug_line header even when there are no functions, since
26            the file numbers are used by .debug_info.  Alternately, leave
27            out locations for types and decls.
28          Avoid talking about ctors and op= for PODs.
29          Factor out common prologue sequences into multiple CIEs.  */
30
31 /* The first part of this file deals with the DWARF 2 frame unwind
32    information, which is also used by the GCC efficient exception handling
33    mechanism.  The second part, controlled only by an #ifdef
34    DWARF2_DEBUGGING_INFO, deals with the other DWARF 2 debugging
35    information.  */
36
37 /* DWARF2 Abbreviation Glossary:
38
39    CFA = Canonical Frame Address
40            a fixed address on the stack which identifies a call frame.
41            We define it to be the value of SP just before the call insn.
42            The CFA register and offset, which may change during the course
43            of the function, are used to calculate its value at runtime.
44
45    CFI = Call Frame Instruction
46            an instruction for the DWARF2 abstract machine
47
48    CIE = Common Information Entry
49            information describing information common to one or more FDEs
50
51    DIE = Debugging Information Entry
52
53    FDE = Frame Description Entry
54            information describing the stack call frame, in particular,
55            how to restore registers
56
57    DW_CFA_... = DWARF2 CFA call frame instruction
58    DW_TAG_... = DWARF2 DIE tag */
59
60 #include "config.h"
61 #include "system.h"
62 #include "coretypes.h"
63 #include "tm.h"
64 #include "tree.h"
65 #include "version.h"
66 #include "flags.h"
67 #include "real.h"
68 #include "rtl.h"
69 #include "hard-reg-set.h"
70 #include "regs.h"
71 #include "insn-config.h"
72 #include "reload.h"
73 #include "function.h"
74 #include "output.h"
75 #include "expr.h"
76 #include "libfuncs.h"
77 #include "except.h"
78 #include "dwarf2.h"
79 #include "dwarf2out.h"
80 #include "dwarf2asm.h"
81 #include "toplev.h"
82 #include "varray.h"
83 #include "ggc.h"
84 #include "md5.h"
85 #include "tm_p.h"
86 #include "diagnostic.h"
87 #include "debug.h"
88 #include "target.h"
89 #include "langhooks.h"
90 #include "hashtab.h"
91 #include "cgraph.h"
92 #include "input.h"
93 #include "gimple.h"
94 #include "tree-pass.h"
95
96 #ifdef DWARF2_DEBUGGING_INFO
97 static void dwarf2out_source_line (unsigned int, const char *, int, bool);
98
99 static rtx last_var_location_insn;
100 #endif
101
102 #ifdef VMS_DEBUGGING_INFO
103 int vms_file_stats_name (const char *, long long *, long *, char *, int *);
104
105 /* Define this macro to be a nonzero value if the directory specifications
106     which are output in the debug info should end with a separator.  */
107 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 1
108 /* Define this macro to evaluate to a nonzero value if GCC should refrain
109    from generating indirect strings in DWARF2 debug information, for instance
110    if your target is stuck with an old version of GDB that is unable to
111    process them properly or uses VMS Debug.  */
112 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 1
113 #else
114 #define DWARF2_DIR_SHOULD_END_WITH_SEPARATOR 0
115 #define DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET 0
116 #endif
117
118 #ifndef DWARF2_FRAME_INFO
119 # ifdef DWARF2_DEBUGGING_INFO
120 #  define DWARF2_FRAME_INFO \
121   (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG)
122 # else
123 #  define DWARF2_FRAME_INFO 0
124 # endif
125 #endif
126
127 /* Map register numbers held in the call frame info that gcc has
128    collected using DWARF_FRAME_REGNUM to those that should be output in
129    .debug_frame and .eh_frame.  */
130 #ifndef DWARF2_FRAME_REG_OUT
131 #define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) (REGNO)
132 #endif
133
134 /* Save the result of dwarf2out_do_frame across PCH.  */
135 static GTY(()) bool saved_do_cfi_asm = 0;
136
137 /* Decide whether we want to emit frame unwind information for the current
138    translation unit.  */
139
140 int
141 dwarf2out_do_frame (void)
142 {
143   /* We want to emit correct CFA location expressions or lists, so we
144      have to return true if we're going to output debug info, even if
145      we're not going to output frame or unwind info.  */
146   return (write_symbols == DWARF2_DEBUG
147           || write_symbols == VMS_AND_DWARF2_DEBUG
148           || DWARF2_FRAME_INFO || saved_do_cfi_asm
149 #ifdef DWARF2_UNWIND_INFO
150           || (DWARF2_UNWIND_INFO
151               && (flag_unwind_tables
152                   || (flag_exceptions && ! USING_SJLJ_EXCEPTIONS)))
153 #endif
154           );
155 }
156
157 /* Decide whether to emit frame unwind via assembler directives.  */
158
159 int
160 dwarf2out_do_cfi_asm (void)
161 {
162   int enc;
163
164 #ifdef MIPS_DEBUGGING_INFO
165   return false;
166 #endif
167   if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
168     return false;
169   if (saved_do_cfi_asm)
170     return true;
171   if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
172     return false;
173
174   /* Make sure the personality encoding is one the assembler can support.
175      In particular, aligned addresses can't be handled.  */
176   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,/*global=*/1);
177   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
178     return false;
179   enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,/*global=*/0);
180   if ((enc & 0x70) != 0 && (enc & 0x70) != DW_EH_PE_pcrel)
181     return false;
182
183   if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
184     {
185 #ifdef TARGET_UNWIND_INFO
186       return false;
187 #else
188       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
189         return false;
190 #endif
191     }
192
193   saved_do_cfi_asm = true;
194   return true;
195 }
196
197 /* The size of the target's pointer type.  */
198 #ifndef PTR_SIZE
199 #define PTR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
200 #endif
201
202 /* Array of RTXes referenced by the debugging information, which therefore
203    must be kept around forever.  */
204 static GTY(()) VEC(rtx,gc) *used_rtx_array;
205
206 /* A pointer to the base of a list of incomplete types which might be
207    completed at some later time.  incomplete_types_list needs to be a
208    VEC(tree,gc) because we want to tell the garbage collector about
209    it.  */
210 static GTY(()) VEC(tree,gc) *incomplete_types;
211
212 /* A pointer to the base of a table of references to declaration
213    scopes.  This table is a display which tracks the nesting
214    of declaration scopes at the current scope and containing
215    scopes.  This table is used to find the proper place to
216    define type declaration DIE's.  */
217 static GTY(()) VEC(tree,gc) *decl_scope_table;
218
219 /* Pointers to various DWARF2 sections.  */
220 static GTY(()) section *debug_info_section;
221 static GTY(()) section *debug_abbrev_section;
222 static GTY(()) section *debug_aranges_section;
223 static GTY(()) section *debug_macinfo_section;
224 static GTY(()) section *debug_line_section;
225 static GTY(()) section *debug_loc_section;
226 static GTY(()) section *debug_pubnames_section;
227 static GTY(()) section *debug_pubtypes_section;
228 static GTY(()) section *debug_dcall_section;
229 static GTY(()) section *debug_vcall_section;
230 static GTY(()) section *debug_str_section;
231 static GTY(()) section *debug_ranges_section;
232 static GTY(()) section *debug_frame_section;
233
234 /* Personality decl of current unit.  Used only when assembler does not support
235    personality CFI.  */
236 static GTY(()) rtx current_unit_personality;
237
238 /* How to start an assembler comment.  */
239 #ifndef ASM_COMMENT_START
240 #define ASM_COMMENT_START ";#"
241 #endif
242
243 typedef struct dw_cfi_struct *dw_cfi_ref;
244 typedef struct dw_fde_struct *dw_fde_ref;
245 typedef union  dw_cfi_oprnd_struct *dw_cfi_oprnd_ref;
246
247 /* Call frames are described using a sequence of Call Frame
248    Information instructions.  The register number, offset
249    and address fields are provided as possible operands;
250    their use is selected by the opcode field.  */
251
252 enum dw_cfi_oprnd_type {
253   dw_cfi_oprnd_unused,
254   dw_cfi_oprnd_reg_num,
255   dw_cfi_oprnd_offset,
256   dw_cfi_oprnd_addr,
257   dw_cfi_oprnd_loc
258 };
259
260 typedef union GTY(()) dw_cfi_oprnd_struct {
261   unsigned int GTY ((tag ("dw_cfi_oprnd_reg_num"))) dw_cfi_reg_num;
262   HOST_WIDE_INT GTY ((tag ("dw_cfi_oprnd_offset"))) dw_cfi_offset;
263   const char * GTY ((tag ("dw_cfi_oprnd_addr"))) dw_cfi_addr;
264   struct dw_loc_descr_struct * GTY ((tag ("dw_cfi_oprnd_loc"))) dw_cfi_loc;
265 }
266 dw_cfi_oprnd;
267
268 typedef struct GTY(()) dw_cfi_struct {
269   dw_cfi_ref dw_cfi_next;
270   enum dwarf_call_frame_info dw_cfi_opc;
271   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd1_desc (%1.dw_cfi_opc)")))
272     dw_cfi_oprnd1;
273   dw_cfi_oprnd GTY ((desc ("dw_cfi_oprnd2_desc (%1.dw_cfi_opc)")))
274     dw_cfi_oprnd2;
275 }
276 dw_cfi_node;
277
278 /* This is how we define the location of the CFA. We use to handle it
279    as REG + OFFSET all the time,  but now it can be more complex.
280    It can now be either REG + CFA_OFFSET or *(REG + BASE_OFFSET) + CFA_OFFSET.
281    Instead of passing around REG and OFFSET, we pass a copy
282    of this structure.  */
283 typedef struct GTY(()) cfa_loc {
284   HOST_WIDE_INT offset;
285   HOST_WIDE_INT base_offset;
286   unsigned int reg;
287   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
288   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
289 } dw_cfa_location;
290
291 /* All call frame descriptions (FDE's) in the GCC generated DWARF
292    refer to a single Common Information Entry (CIE), defined at
293    the beginning of the .debug_frame section.  This use of a single
294    CIE obviates the need to keep track of multiple CIE's
295    in the DWARF generation routines below.  */
296
297 typedef struct GTY(()) dw_fde_struct {
298   tree decl;
299   const char *dw_fde_begin;
300   const char *dw_fde_current_label;
301   const char *dw_fde_end;
302   const char *dw_fde_hot_section_label;
303   const char *dw_fde_hot_section_end_label;
304   const char *dw_fde_unlikely_section_label;
305   const char *dw_fde_unlikely_section_end_label;
306   dw_cfi_ref dw_fde_cfi;
307   dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections.  */
308   unsigned funcdef_number;
309   HOST_WIDE_INT stack_realignment;
310   /* Dynamic realign argument pointer register.  */
311   unsigned int drap_reg;
312   /* Virtual dynamic realign argument pointer register.  */
313   unsigned int vdrap_reg;
314   unsigned all_throwers_are_sibcalls : 1;
315   unsigned nothrow : 1;
316   unsigned uses_eh_lsda : 1;
317   /* Whether we did stack realign in this call frame.  */
318   unsigned stack_realign : 1;
319   /* Whether dynamic realign argument pointer register has been saved.  */
320   unsigned drap_reg_saved: 1;
321   /* True iff dw_fde_begin label is in text_section or cold_text_section.  */
322   unsigned in_std_section : 1;
323   /* True iff dw_fde_unlikely_section_label is in text_section or
324      cold_text_section.  */
325   unsigned cold_in_std_section : 1;
326   /* True iff switched sections.  */
327   unsigned dw_fde_switched_sections : 1;
328   /* True iff switching from cold to hot section.  */
329   unsigned dw_fde_switched_cold_to_hot : 1;
330 }
331 dw_fde_node;
332
333 /* Maximum size (in bytes) of an artificially generated label.  */
334 #define MAX_ARTIFICIAL_LABEL_BYTES      30
335
336 /* The size of addresses as they appear in the Dwarf 2 data.
337    Some architectures use word addresses to refer to code locations,
338    but Dwarf 2 info always uses byte addresses.  On such machines,
339    Dwarf 2 addresses need to be larger than the architecture's
340    pointers.  */
341 #ifndef DWARF2_ADDR_SIZE
342 #define DWARF2_ADDR_SIZE (POINTER_SIZE / BITS_PER_UNIT)
343 #endif
344
345 /* The size in bytes of a DWARF field indicating an offset or length
346    relative to a debug info section, specified to be 4 bytes in the
347    DWARF-2 specification.  The SGI/MIPS ABI defines it to be the same
348    as PTR_SIZE.  */
349
350 #ifndef DWARF_OFFSET_SIZE
351 #define DWARF_OFFSET_SIZE 4
352 #endif
353
354 /* The size in bytes of a DWARF 4 type signature.  */
355
356 #ifndef DWARF_TYPE_SIGNATURE_SIZE
357 #define DWARF_TYPE_SIGNATURE_SIZE 8
358 #endif
359
360 /* According to the (draft) DWARF 3 specification, the initial length
361    should either be 4 or 12 bytes.  When it's 12 bytes, the first 4
362    bytes are 0xffffffff, followed by the length stored in the next 8
363    bytes.
364
365    However, the SGI/MIPS ABI uses an initial length which is equal to
366    DWARF_OFFSET_SIZE.  It is defined (elsewhere) accordingly.  */
367
368 #ifndef DWARF_INITIAL_LENGTH_SIZE
369 #define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
370 #endif
371
372 /* Round SIZE up to the nearest BOUNDARY.  */
373 #define DWARF_ROUND(SIZE,BOUNDARY) \
374   ((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
375
376 /* Offsets recorded in opcodes are a multiple of this alignment factor.  */
377 #ifndef DWARF_CIE_DATA_ALIGNMENT
378 #ifdef STACK_GROWS_DOWNWARD
379 #define DWARF_CIE_DATA_ALIGNMENT (-((int) UNITS_PER_WORD))
380 #else
381 #define DWARF_CIE_DATA_ALIGNMENT ((int) UNITS_PER_WORD)
382 #endif
383 #endif
384
385 /* CIE identifier.  */
386 #if HOST_BITS_PER_WIDE_INT >= 64
387 #define DWARF_CIE_ID \
388   (unsigned HOST_WIDE_INT) (DWARF_OFFSET_SIZE == 4 ? DW_CIE_ID : DW64_CIE_ID)
389 #else
390 #define DWARF_CIE_ID DW_CIE_ID
391 #endif
392
393 /* A pointer to the base of a table that contains frame description
394    information for each routine.  */
395 static GTY((length ("fde_table_allocated"))) dw_fde_ref fde_table;
396
397 /* Number of elements currently allocated for fde_table.  */
398 static GTY(()) unsigned fde_table_allocated;
399
400 /* Number of elements in fde_table currently in use.  */
401 static GTY(()) unsigned fde_table_in_use;
402
403 /* Size (in elements) of increments by which we may expand the
404    fde_table.  */
405 #define FDE_TABLE_INCREMENT 256
406
407 /* Get the current fde_table entry we should use.  */
408
409 static inline dw_fde_ref
410 current_fde (void)
411 {
412   return fde_table_in_use ? &fde_table[fde_table_in_use - 1] : NULL;
413 }
414
415 /* A list of call frame insns for the CIE.  */
416 static GTY(()) dw_cfi_ref cie_cfi_head;
417
418 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
419 /* Some DWARF extensions (e.g., MIPS/SGI) implement a subprogram
420    attribute that accelerates the lookup of the FDE associated
421    with the subprogram.  This variable holds the table index of the FDE
422    associated with the current function (body) definition.  */
423 static unsigned current_funcdef_fde;
424 #endif
425
426 struct GTY(()) indirect_string_node {
427   const char *str;
428   unsigned int refcount;
429   enum dwarf_form form;
430   char *label;
431 };
432
433 static GTY ((param_is (struct indirect_string_node))) htab_t debug_str_hash;
434
435 /* True if the compilation unit has location entries that reference
436    debug strings.  */
437 static GTY(()) bool debug_str_hash_forced = false;
438
439 static GTY(()) int dw2_string_counter;
440 static GTY(()) unsigned long dwarf2out_cfi_label_num;
441
442 /* True if the compilation unit places functions in more than one section.  */
443 static GTY(()) bool have_multiple_function_sections = false;
444
445 /* Whether the default text and cold text sections have been used at all.  */
446
447 static GTY(()) bool text_section_used = false;
448 static GTY(()) bool cold_text_section_used = false;
449
450 /* The default cold text section.  */
451 static GTY(()) section *cold_text_section;
452
453 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
454
455 /* Forward declarations for functions defined in this file.  */
456
457 static char *stripattributes (const char *);
458 static const char *dwarf_cfi_name (unsigned);
459 static dw_cfi_ref new_cfi (void);
460 static void add_cfi (dw_cfi_ref *, dw_cfi_ref);
461 static void add_fde_cfi (const char *, dw_cfi_ref);
462 static void lookup_cfa_1 (dw_cfi_ref, dw_cfa_location *, dw_cfa_location *);
463 static void lookup_cfa (dw_cfa_location *);
464 static void reg_save (const char *, unsigned, unsigned, HOST_WIDE_INT);
465 #ifdef DWARF2_UNWIND_INFO
466 static void initial_return_save (rtx);
467 #endif
468 static HOST_WIDE_INT stack_adjust_offset (const_rtx, HOST_WIDE_INT,
469                                           HOST_WIDE_INT);
470 static void output_cfi (dw_cfi_ref, dw_fde_ref, int);
471 static void output_cfi_directive (dw_cfi_ref);
472 static void output_call_frame_info (int);
473 static void dwarf2out_note_section_used (void);
474 static void flush_queued_reg_saves (void);
475 static bool clobbers_queued_reg_save (const_rtx);
476 static void dwarf2out_frame_debug_expr (rtx, const char *);
477
478 /* Support for complex CFA locations.  */
479 static void output_cfa_loc (dw_cfi_ref);
480 static void output_cfa_loc_raw (dw_cfi_ref);
481 static void get_cfa_from_loc_descr (dw_cfa_location *,
482                                     struct dw_loc_descr_struct *);
483 static struct dw_loc_descr_struct *build_cfa_loc
484   (dw_cfa_location *, HOST_WIDE_INT);
485 static struct dw_loc_descr_struct *build_cfa_aligned_loc
486   (HOST_WIDE_INT, HOST_WIDE_INT);
487 static void def_cfa_1 (const char *, dw_cfa_location *);
488
489 /* How to start an assembler comment.  */
490 #ifndef ASM_COMMENT_START
491 #define ASM_COMMENT_START ";#"
492 #endif
493
494 /* Data and reference forms for relocatable data.  */
495 #define DW_FORM_data (DWARF_OFFSET_SIZE == 8 ? DW_FORM_data8 : DW_FORM_data4)
496 #define DW_FORM_ref (DWARF_OFFSET_SIZE == 8 ? DW_FORM_ref8 : DW_FORM_ref4)
497
498 #ifndef DEBUG_FRAME_SECTION
499 #define DEBUG_FRAME_SECTION     ".debug_frame"
500 #endif
501
502 #ifndef FUNC_BEGIN_LABEL
503 #define FUNC_BEGIN_LABEL        "LFB"
504 #endif
505
506 #ifndef FUNC_END_LABEL
507 #define FUNC_END_LABEL          "LFE"
508 #endif
509
510 #ifndef FRAME_BEGIN_LABEL
511 #define FRAME_BEGIN_LABEL       "Lframe"
512 #endif
513 #define CIE_AFTER_SIZE_LABEL    "LSCIE"
514 #define CIE_END_LABEL           "LECIE"
515 #define FDE_LABEL               "LSFDE"
516 #define FDE_AFTER_SIZE_LABEL    "LASFDE"
517 #define FDE_END_LABEL           "LEFDE"
518 #define LINE_NUMBER_BEGIN_LABEL "LSLT"
519 #define LINE_NUMBER_END_LABEL   "LELT"
520 #define LN_PROLOG_AS_LABEL      "LASLTP"
521 #define LN_PROLOG_END_LABEL     "LELTP"
522 #define DIE_LABEL_PREFIX        "DW"
523
524 /* The DWARF 2 CFA column which tracks the return address.  Normally this
525    is the column for PC, or the first column after all of the hard
526    registers.  */
527 #ifndef DWARF_FRAME_RETURN_COLUMN
528 #ifdef PC_REGNUM
529 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGNUM (PC_REGNUM)
530 #else
531 #define DWARF_FRAME_RETURN_COLUMN       DWARF_FRAME_REGISTERS
532 #endif
533 #endif
534
535 /* The mapping from gcc register number to DWARF 2 CFA column number.  By
536    default, we just provide columns for all registers.  */
537 #ifndef DWARF_FRAME_REGNUM
538 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
539 #endif
540 \f
541 /* Hook used by __throw.  */
542
543 rtx
544 expand_builtin_dwarf_sp_column (void)
545 {
546   unsigned int dwarf_regnum = DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM);
547   return GEN_INT (DWARF2_FRAME_REG_OUT (dwarf_regnum, 1));
548 }
549
550 /* Return a pointer to a copy of the section string name S with all
551    attributes stripped off, and an asterisk prepended (for assemble_name).  */
552
553 static inline char *
554 stripattributes (const char *s)
555 {
556   char *stripped = XNEWVEC (char, strlen (s) + 2);
557   char *p = stripped;
558
559   *p++ = '*';
560
561   while (*s && *s != ',')
562     *p++ = *s++;
563
564   *p = '\0';
565   return stripped;
566 }
567
568 /* MEM is a memory reference for the register size table, each element of
569    which has mode MODE.  Initialize column C as a return address column.  */
570
571 static void
572 init_return_column_size (enum machine_mode mode, rtx mem, unsigned int c)
573 {
574   HOST_WIDE_INT offset = c * GET_MODE_SIZE (mode);
575   HOST_WIDE_INT size = GET_MODE_SIZE (Pmode);
576   emit_move_insn (adjust_address (mem, mode, offset), GEN_INT (size));
577 }
578
579 /* Divide OFF by DWARF_CIE_DATA_ALIGNMENT, asserting no remainder.  */
580
581 static inline HOST_WIDE_INT
582 div_data_align (HOST_WIDE_INT off)
583 {
584   HOST_WIDE_INT r = off / DWARF_CIE_DATA_ALIGNMENT;
585   gcc_assert (r * DWARF_CIE_DATA_ALIGNMENT == off);
586   return r;
587 }
588
589 /* Return true if we need a signed version of a given opcode
590    (e.g. DW_CFA_offset_extended_sf vs DW_CFA_offset_extended).  */
591
592 static inline bool
593 need_data_align_sf_opcode (HOST_WIDE_INT off)
594 {
595   return DWARF_CIE_DATA_ALIGNMENT < 0 ? off > 0 : off < 0;
596 }
597
598 /* Generate code to initialize the register size table.  */
599
600 void
601 expand_builtin_init_dwarf_reg_sizes (tree address)
602 {
603   unsigned int i;
604   enum machine_mode mode = TYPE_MODE (char_type_node);
605   rtx addr = expand_normal (address);
606   rtx mem = gen_rtx_MEM (BLKmode, addr);
607   bool wrote_return_column = false;
608
609   for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
610     {
611       int rnum = DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), 1);
612
613       if (rnum < DWARF_FRAME_REGISTERS)
614         {
615           HOST_WIDE_INT offset = rnum * GET_MODE_SIZE (mode);
616           enum machine_mode save_mode = reg_raw_mode[i];
617           HOST_WIDE_INT size;
618
619           if (HARD_REGNO_CALL_PART_CLOBBERED (i, save_mode))
620             save_mode = choose_hard_reg_mode (i, 1, true);
621           if (DWARF_FRAME_REGNUM (i) == DWARF_FRAME_RETURN_COLUMN)
622             {
623               if (save_mode == VOIDmode)
624                 continue;
625               wrote_return_column = true;
626             }
627           size = GET_MODE_SIZE (save_mode);
628           if (offset < 0)
629             continue;
630
631           emit_move_insn (adjust_address (mem, mode, offset),
632                           gen_int_mode (size, mode));
633         }
634     }
635
636   if (!wrote_return_column)
637     init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN);
638
639 #ifdef DWARF_ALT_FRAME_RETURN_COLUMN
640   init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN);
641 #endif
642
643   targetm.init_dwarf_reg_sizes_extra (address);
644 }
645
646 /* Convert a DWARF call frame info. operation to its string name */
647
648 static const char *
649 dwarf_cfi_name (unsigned int cfi_opc)
650 {
651   switch (cfi_opc)
652     {
653     case DW_CFA_advance_loc:
654       return "DW_CFA_advance_loc";
655     case DW_CFA_offset:
656       return "DW_CFA_offset";
657     case DW_CFA_restore:
658       return "DW_CFA_restore";
659     case DW_CFA_nop:
660       return "DW_CFA_nop";
661     case DW_CFA_set_loc:
662       return "DW_CFA_set_loc";
663     case DW_CFA_advance_loc1:
664       return "DW_CFA_advance_loc1";
665     case DW_CFA_advance_loc2:
666       return "DW_CFA_advance_loc2";
667     case DW_CFA_advance_loc4:
668       return "DW_CFA_advance_loc4";
669     case DW_CFA_offset_extended:
670       return "DW_CFA_offset_extended";
671     case DW_CFA_restore_extended:
672       return "DW_CFA_restore_extended";
673     case DW_CFA_undefined:
674       return "DW_CFA_undefined";
675     case DW_CFA_same_value:
676       return "DW_CFA_same_value";
677     case DW_CFA_register:
678       return "DW_CFA_register";
679     case DW_CFA_remember_state:
680       return "DW_CFA_remember_state";
681     case DW_CFA_restore_state:
682       return "DW_CFA_restore_state";
683     case DW_CFA_def_cfa:
684       return "DW_CFA_def_cfa";
685     case DW_CFA_def_cfa_register:
686       return "DW_CFA_def_cfa_register";
687     case DW_CFA_def_cfa_offset:
688       return "DW_CFA_def_cfa_offset";
689
690     /* DWARF 3 */
691     case DW_CFA_def_cfa_expression:
692       return "DW_CFA_def_cfa_expression";
693     case DW_CFA_expression:
694       return "DW_CFA_expression";
695     case DW_CFA_offset_extended_sf:
696       return "DW_CFA_offset_extended_sf";
697     case DW_CFA_def_cfa_sf:
698       return "DW_CFA_def_cfa_sf";
699     case DW_CFA_def_cfa_offset_sf:
700       return "DW_CFA_def_cfa_offset_sf";
701
702     /* SGI/MIPS specific */
703     case DW_CFA_MIPS_advance_loc8:
704       return "DW_CFA_MIPS_advance_loc8";
705
706     /* GNU extensions */
707     case DW_CFA_GNU_window_save:
708       return "DW_CFA_GNU_window_save";
709     case DW_CFA_GNU_args_size:
710       return "DW_CFA_GNU_args_size";
711     case DW_CFA_GNU_negative_offset_extended:
712       return "DW_CFA_GNU_negative_offset_extended";
713
714     default:
715       return "DW_CFA_<unknown>";
716     }
717 }
718
719 /* Return a pointer to a newly allocated Call Frame Instruction.  */
720
721 static inline dw_cfi_ref
722 new_cfi (void)
723 {
724   dw_cfi_ref cfi = GGC_NEW (dw_cfi_node);
725
726   cfi->dw_cfi_next = NULL;
727   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = 0;
728   cfi->dw_cfi_oprnd2.dw_cfi_reg_num = 0;
729
730   return cfi;
731 }
732
733 /* Add a Call Frame Instruction to list of instructions.  */
734
735 static inline void
736 add_cfi (dw_cfi_ref *list_head, dw_cfi_ref cfi)
737 {
738   dw_cfi_ref *p;
739   dw_fde_ref fde = current_fde ();
740
741   /* When DRAP is used, CFA is defined with an expression.  Redefine
742      CFA may lead to a different CFA value.   */
743   /* ??? Of course, this heuristic fails when we're annotating epilogues,
744      because of course we'll always want to redefine the CFA back to the
745      stack pointer on the way out.  Where should we move this check?  */
746   if (0 && fde && fde->drap_reg != INVALID_REGNUM)
747     switch (cfi->dw_cfi_opc)
748       {
749         case DW_CFA_def_cfa_register:
750         case DW_CFA_def_cfa_offset:
751         case DW_CFA_def_cfa_offset_sf:
752         case DW_CFA_def_cfa:
753         case DW_CFA_def_cfa_sf:
754           gcc_unreachable ();
755
756         default:
757           break;
758       }
759
760   /* Find the end of the chain.  */
761   for (p = list_head; (*p) != NULL; p = &(*p)->dw_cfi_next)
762     ;
763
764   *p = cfi;
765 }
766
767 /* Generate a new label for the CFI info to refer to.  FORCE is true
768    if a label needs to be output even when using .cfi_* directives.  */
769
770 char *
771 dwarf2out_cfi_label (bool force)
772 {
773   static char label[20];
774
775   if (!force && dwarf2out_do_cfi_asm ())
776     {
777       /* In this case, we will be emitting the asm directive instead of
778          the label, so just return a placeholder to keep the rest of the
779          interfaces happy.  */
780       strcpy (label, "<do not output>");
781     }
782   else
783     {
784       ASM_GENERATE_INTERNAL_LABEL (label, "LCFI", dwarf2out_cfi_label_num++);
785       ASM_OUTPUT_LABEL (asm_out_file, label);
786     }
787
788   return label;
789 }
790
791 /* True if remember_state should be emitted before following CFI directive.  */
792 static bool emit_cfa_remember;
793
794 /* Add CFI to the current fde at the PC value indicated by LABEL if specified,
795    or to the CIE if LABEL is NULL.  */
796
797 static void
798 add_fde_cfi (const char *label, dw_cfi_ref cfi)
799 {
800   dw_cfi_ref *list_head;
801
802   if (emit_cfa_remember)
803     {
804       dw_cfi_ref cfi_remember;
805
806       /* Emit the state save.  */
807       emit_cfa_remember = false;
808       cfi_remember = new_cfi ();
809       cfi_remember->dw_cfi_opc = DW_CFA_remember_state;
810       add_fde_cfi (label, cfi_remember);
811     }
812
813   list_head = &cie_cfi_head;
814
815   if (dwarf2out_do_cfi_asm ())
816     {
817       if (label)
818         {
819           dw_fde_ref fde = current_fde ();
820
821           gcc_assert (fde != NULL);
822
823           /* We still have to add the cfi to the list so that lookup_cfa
824              works later on.  When -g2 and above we even need to force
825              emitting of CFI labels and add to list a DW_CFA_set_loc for
826              convert_cfa_to_fb_loc_list purposes.  If we're generating
827              DWARF3 output we use DW_OP_call_frame_cfa and so don't use
828              convert_cfa_to_fb_loc_list.  */
829           if (dwarf_version == 2
830               && debug_info_level > DINFO_LEVEL_TERSE
831               && (write_symbols == DWARF2_DEBUG
832                   || write_symbols == VMS_AND_DWARF2_DEBUG))
833             {
834               switch (cfi->dw_cfi_opc)
835                 {
836                 case DW_CFA_def_cfa_offset:
837                 case DW_CFA_def_cfa_offset_sf:
838                 case DW_CFA_def_cfa_register:
839                 case DW_CFA_def_cfa:
840                 case DW_CFA_def_cfa_sf:
841                 case DW_CFA_def_cfa_expression:
842                 case DW_CFA_restore_state:
843                   if (*label == 0 || strcmp (label, "<do not output>") == 0)
844                     label = dwarf2out_cfi_label (true);
845
846                   if (fde->dw_fde_current_label == NULL
847                       || strcmp (label, fde->dw_fde_current_label) != 0)
848                     {
849                       dw_cfi_ref xcfi;
850
851                       label = xstrdup (label);
852
853                       /* Set the location counter to the new label.  */
854                       xcfi = new_cfi ();
855                       /* It doesn't metter whether DW_CFA_set_loc
856                          or DW_CFA_advance_loc4 is added here, those aren't
857                          emitted into assembly, only looked up by
858                          convert_cfa_to_fb_loc_list.  */
859                       xcfi->dw_cfi_opc = DW_CFA_set_loc;
860                       xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
861                       add_cfi (&fde->dw_fde_cfi, xcfi);
862                       fde->dw_fde_current_label = label;
863                     }
864                   break;
865                 default:
866                   break;
867                 }
868             }
869
870           output_cfi_directive (cfi);
871
872           list_head = &fde->dw_fde_cfi;
873         }
874       /* ??? If this is a CFI for the CIE, we don't emit.  This
875          assumes that the standard CIE contents that the assembler
876          uses matches the standard CIE contents that the compiler
877          uses.  This is probably a bad assumption.  I'm not quite
878          sure how to address this for now.  */
879     }
880   else if (label)
881     {
882       dw_fde_ref fde = current_fde ();
883
884       gcc_assert (fde != NULL);
885
886       if (*label == 0)
887         label = dwarf2out_cfi_label (false);
888
889       if (fde->dw_fde_current_label == NULL
890           || strcmp (label, fde->dw_fde_current_label) != 0)
891         {
892           dw_cfi_ref xcfi;
893
894           label = xstrdup (label);
895
896           /* Set the location counter to the new label.  */
897           xcfi = new_cfi ();
898           /* If we have a current label, advance from there, otherwise
899              set the location directly using set_loc.  */
900           xcfi->dw_cfi_opc = fde->dw_fde_current_label
901                              ? DW_CFA_advance_loc4
902                              : DW_CFA_set_loc;
903           xcfi->dw_cfi_oprnd1.dw_cfi_addr = label;
904           add_cfi (&fde->dw_fde_cfi, xcfi);
905
906           fde->dw_fde_current_label = label;
907         }
908
909       list_head = &fde->dw_fde_cfi;
910     }
911
912   add_cfi (list_head, cfi);
913 }
914
915 /* Subroutine of lookup_cfa.  */
916
917 static void
918 lookup_cfa_1 (dw_cfi_ref cfi, dw_cfa_location *loc, dw_cfa_location *remember)
919 {
920   switch (cfi->dw_cfi_opc)
921     {
922     case DW_CFA_def_cfa_offset:
923     case DW_CFA_def_cfa_offset_sf:
924       loc->offset = cfi->dw_cfi_oprnd1.dw_cfi_offset;
925       break;
926     case DW_CFA_def_cfa_register:
927       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
928       break;
929     case DW_CFA_def_cfa:
930     case DW_CFA_def_cfa_sf:
931       loc->reg = cfi->dw_cfi_oprnd1.dw_cfi_reg_num;
932       loc->offset = cfi->dw_cfi_oprnd2.dw_cfi_offset;
933       break;
934     case DW_CFA_def_cfa_expression:
935       get_cfa_from_loc_descr (loc, cfi->dw_cfi_oprnd1.dw_cfi_loc);
936       break;
937
938     case DW_CFA_remember_state:
939       gcc_assert (!remember->in_use);
940       *remember = *loc;
941       remember->in_use = 1;
942       break;
943     case DW_CFA_restore_state:
944       gcc_assert (remember->in_use);
945       *loc = *remember;
946       remember->in_use = 0;
947       break;
948
949     default:
950       break;
951     }
952 }
953
954 /* Find the previous value for the CFA.  */
955
956 static void
957 lookup_cfa (dw_cfa_location *loc)
958 {
959   dw_cfi_ref cfi;
960   dw_fde_ref fde;
961   dw_cfa_location remember;
962
963   memset (loc, 0, sizeof (*loc));
964   loc->reg = INVALID_REGNUM;
965   remember = *loc;
966
967   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
968     lookup_cfa_1 (cfi, loc, &remember);
969
970   fde = current_fde ();
971   if (fde)
972     for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
973       lookup_cfa_1 (cfi, loc, &remember);
974 }
975
976 /* The current rule for calculating the DWARF2 canonical frame address.  */
977 static dw_cfa_location cfa;
978
979 /* The register used for saving registers to the stack, and its offset
980    from the CFA.  */
981 static dw_cfa_location cfa_store;
982
983 /* The current save location around an epilogue.  */
984 static dw_cfa_location cfa_remember;
985
986 /* The running total of the size of arguments pushed onto the stack.  */
987 static HOST_WIDE_INT args_size;
988
989 /* The last args_size we actually output.  */
990 static HOST_WIDE_INT old_args_size;
991
992 /* Entry point to update the canonical frame address (CFA).
993    LABEL is passed to add_fde_cfi.  The value of CFA is now to be
994    calculated from REG+OFFSET.  */
995
996 void
997 dwarf2out_def_cfa (const char *label, unsigned int reg, HOST_WIDE_INT offset)
998 {
999   dw_cfa_location loc;
1000   loc.indirect = 0;
1001   loc.base_offset = 0;
1002   loc.reg = reg;
1003   loc.offset = offset;
1004   def_cfa_1 (label, &loc);
1005 }
1006
1007 /* Determine if two dw_cfa_location structures define the same data.  */
1008
1009 static bool
1010 cfa_equal_p (const dw_cfa_location *loc1, const dw_cfa_location *loc2)
1011 {
1012   return (loc1->reg == loc2->reg
1013           && loc1->offset == loc2->offset
1014           && loc1->indirect == loc2->indirect
1015           && (loc1->indirect == 0
1016               || loc1->base_offset == loc2->base_offset));
1017 }
1018
1019 /* This routine does the actual work.  The CFA is now calculated from
1020    the dw_cfa_location structure.  */
1021
1022 static void
1023 def_cfa_1 (const char *label, dw_cfa_location *loc_p)
1024 {
1025   dw_cfi_ref cfi;
1026   dw_cfa_location old_cfa, loc;
1027
1028   cfa = *loc_p;
1029   loc = *loc_p;
1030
1031   if (cfa_store.reg == loc.reg && loc.indirect == 0)
1032     cfa_store.offset = loc.offset;
1033
1034   loc.reg = DWARF_FRAME_REGNUM (loc.reg);
1035   lookup_cfa (&old_cfa);
1036
1037   /* If nothing changed, no need to issue any call frame instructions.  */
1038   if (cfa_equal_p (&loc, &old_cfa))
1039     return;
1040
1041   cfi = new_cfi ();
1042
1043   if (loc.reg == old_cfa.reg && !loc.indirect)
1044     {
1045       /* Construct a "DW_CFA_def_cfa_offset <offset>" instruction, indicating
1046          the CFA register did not change but the offset did.  The data
1047          factoring for DW_CFA_def_cfa_offset_sf happens in output_cfi, or
1048          in the assembler via the .cfi_def_cfa_offset directive.  */
1049       if (loc.offset < 0)
1050         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset_sf;
1051       else
1052         cfi->dw_cfi_opc = DW_CFA_def_cfa_offset;
1053       cfi->dw_cfi_oprnd1.dw_cfi_offset = loc.offset;
1054     }
1055
1056 #ifndef MIPS_DEBUGGING_INFO  /* SGI dbx thinks this means no offset.  */
1057   else if (loc.offset == old_cfa.offset
1058            && old_cfa.reg != INVALID_REGNUM
1059            && !loc.indirect)
1060     {
1061       /* Construct a "DW_CFA_def_cfa_register <register>" instruction,
1062          indicating the CFA register has changed to <register> but the
1063          offset has not changed.  */
1064       cfi->dw_cfi_opc = DW_CFA_def_cfa_register;
1065       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1066     }
1067 #endif
1068
1069   else if (loc.indirect == 0)
1070     {
1071       /* Construct a "DW_CFA_def_cfa <register> <offset>" instruction,
1072          indicating the CFA register has changed to <register> with
1073          the specified offset.  The data factoring for DW_CFA_def_cfa_sf
1074          happens in output_cfi, or in the assembler via the .cfi_def_cfa
1075          directive.  */
1076       if (loc.offset < 0)
1077         cfi->dw_cfi_opc = DW_CFA_def_cfa_sf;
1078       else
1079         cfi->dw_cfi_opc = DW_CFA_def_cfa;
1080       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = loc.reg;
1081       cfi->dw_cfi_oprnd2.dw_cfi_offset = loc.offset;
1082     }
1083   else
1084     {
1085       /* Construct a DW_CFA_def_cfa_expression instruction to
1086          calculate the CFA using a full location expression since no
1087          register-offset pair is available.  */
1088       struct dw_loc_descr_struct *loc_list;
1089
1090       cfi->dw_cfi_opc = DW_CFA_def_cfa_expression;
1091       loc_list = build_cfa_loc (&loc, 0);
1092       cfi->dw_cfi_oprnd1.dw_cfi_loc = loc_list;
1093     }
1094
1095   add_fde_cfi (label, cfi);
1096 }
1097
1098 /* Add the CFI for saving a register.  REG is the CFA column number.
1099    LABEL is passed to add_fde_cfi.
1100    If SREG is -1, the register is saved at OFFSET from the CFA;
1101    otherwise it is saved in SREG.  */
1102
1103 static void
1104 reg_save (const char *label, unsigned int reg, unsigned int sreg, HOST_WIDE_INT offset)
1105 {
1106   dw_cfi_ref cfi = new_cfi ();
1107   dw_fde_ref fde = current_fde ();
1108
1109   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1110
1111   /* When stack is aligned, store REG using DW_CFA_expression with
1112      FP.  */
1113   if (fde
1114       && fde->stack_realign
1115       && sreg == INVALID_REGNUM)
1116     {
1117       cfi->dw_cfi_opc = DW_CFA_expression;
1118       cfi->dw_cfi_oprnd1.dw_cfi_reg_num = reg;
1119       cfi->dw_cfi_oprnd2.dw_cfi_loc
1120         = build_cfa_aligned_loc (offset, fde->stack_realignment);
1121     }
1122   else if (sreg == INVALID_REGNUM)
1123     {
1124       if (need_data_align_sf_opcode (offset))
1125         cfi->dw_cfi_opc = DW_CFA_offset_extended_sf;
1126       else if (reg & ~0x3f)
1127         cfi->dw_cfi_opc = DW_CFA_offset_extended;
1128       else
1129         cfi->dw_cfi_opc = DW_CFA_offset;
1130       cfi->dw_cfi_oprnd2.dw_cfi_offset = offset;
1131     }
1132   else if (sreg == reg)
1133     cfi->dw_cfi_opc = DW_CFA_same_value;
1134   else
1135     {
1136       cfi->dw_cfi_opc = DW_CFA_register;
1137       cfi->dw_cfi_oprnd2.dw_cfi_reg_num = sreg;
1138     }
1139
1140   add_fde_cfi (label, cfi);
1141 }
1142
1143 /* Add the CFI for saving a register window.  LABEL is passed to reg_save.
1144    This CFI tells the unwinder that it needs to restore the window registers
1145    from the previous frame's window save area.
1146
1147    ??? Perhaps we should note in the CIE where windows are saved (instead of
1148    assuming 0(cfa)) and what registers are in the window.  */
1149
1150 void
1151 dwarf2out_window_save (const char *label)
1152 {
1153   dw_cfi_ref cfi = new_cfi ();
1154
1155   cfi->dw_cfi_opc = DW_CFA_GNU_window_save;
1156   add_fde_cfi (label, cfi);
1157 }
1158
1159 /* Entry point for saving a register to the stack.  REG is the GCC register
1160    number.  LABEL and OFFSET are passed to reg_save.  */
1161
1162 void
1163 dwarf2out_reg_save (const char *label, unsigned int reg, HOST_WIDE_INT offset)
1164 {
1165   reg_save (label, DWARF_FRAME_REGNUM (reg), INVALID_REGNUM, offset);
1166 }
1167
1168 /* Entry point for saving the return address in the stack.
1169    LABEL and OFFSET are passed to reg_save.  */
1170
1171 void
1172 dwarf2out_return_save (const char *label, HOST_WIDE_INT offset)
1173 {
1174   reg_save (label, DWARF_FRAME_RETURN_COLUMN, INVALID_REGNUM, offset);
1175 }
1176
1177 /* Entry point for saving the return address in a register.
1178    LABEL and SREG are passed to reg_save.  */
1179
1180 void
1181 dwarf2out_return_reg (const char *label, unsigned int sreg)
1182 {
1183   reg_save (label, DWARF_FRAME_RETURN_COLUMN, DWARF_FRAME_REGNUM (sreg), 0);
1184 }
1185
1186 #ifdef DWARF2_UNWIND_INFO
1187 /* Record the initial position of the return address.  RTL is
1188    INCOMING_RETURN_ADDR_RTX.  */
1189
1190 static void
1191 initial_return_save (rtx rtl)
1192 {
1193   unsigned int reg = INVALID_REGNUM;
1194   HOST_WIDE_INT offset = 0;
1195
1196   switch (GET_CODE (rtl))
1197     {
1198     case REG:
1199       /* RA is in a register.  */
1200       reg = DWARF_FRAME_REGNUM (REGNO (rtl));
1201       break;
1202
1203     case MEM:
1204       /* RA is on the stack.  */
1205       rtl = XEXP (rtl, 0);
1206       switch (GET_CODE (rtl))
1207         {
1208         case REG:
1209           gcc_assert (REGNO (rtl) == STACK_POINTER_REGNUM);
1210           offset = 0;
1211           break;
1212
1213         case PLUS:
1214           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1215           offset = INTVAL (XEXP (rtl, 1));
1216           break;
1217
1218         case MINUS:
1219           gcc_assert (REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM);
1220           offset = -INTVAL (XEXP (rtl, 1));
1221           break;
1222
1223         default:
1224           gcc_unreachable ();
1225         }
1226
1227       break;
1228
1229     case PLUS:
1230       /* The return address is at some offset from any value we can
1231          actually load.  For instance, on the SPARC it is in %i7+8. Just
1232          ignore the offset for now; it doesn't matter for unwinding frames.  */
1233       gcc_assert (CONST_INT_P (XEXP (rtl, 1)));
1234       initial_return_save (XEXP (rtl, 0));
1235       return;
1236
1237     default:
1238       gcc_unreachable ();
1239     }
1240
1241   if (reg != DWARF_FRAME_RETURN_COLUMN)
1242     reg_save (NULL, DWARF_FRAME_RETURN_COLUMN, reg, offset - cfa.offset);
1243 }
1244 #endif
1245
1246 /* Given a SET, calculate the amount of stack adjustment it
1247    contains.  */
1248
1249 static HOST_WIDE_INT
1250 stack_adjust_offset (const_rtx pattern, HOST_WIDE_INT cur_args_size,
1251                      HOST_WIDE_INT cur_offset)
1252 {
1253   const_rtx src = SET_SRC (pattern);
1254   const_rtx dest = SET_DEST (pattern);
1255   HOST_WIDE_INT offset = 0;
1256   enum rtx_code code;
1257
1258   if (dest == stack_pointer_rtx)
1259     {
1260       code = GET_CODE (src);
1261
1262       /* Assume (set (reg sp) (reg whatever)) sets args_size
1263          level to 0.  */
1264       if (code == REG && src != stack_pointer_rtx)
1265         {
1266           offset = -cur_args_size;
1267 #ifndef STACK_GROWS_DOWNWARD
1268           offset = -offset;
1269 #endif
1270           return offset - cur_offset;
1271         }
1272
1273       if (! (code == PLUS || code == MINUS)
1274           || XEXP (src, 0) != stack_pointer_rtx
1275           || !CONST_INT_P (XEXP (src, 1)))
1276         return 0;
1277
1278       /* (set (reg sp) (plus (reg sp) (const_int))) */
1279       offset = INTVAL (XEXP (src, 1));
1280       if (code == PLUS)
1281         offset = -offset;
1282       return offset;
1283     }
1284
1285   if (MEM_P (src) && !MEM_P (dest))
1286     dest = src;
1287   if (MEM_P (dest))
1288     {
1289       /* (set (mem (pre_dec (reg sp))) (foo)) */
1290       src = XEXP (dest, 0);
1291       code = GET_CODE (src);
1292
1293       switch (code)
1294         {
1295         case PRE_MODIFY:
1296         case POST_MODIFY:
1297           if (XEXP (src, 0) == stack_pointer_rtx)
1298             {
1299               rtx val = XEXP (XEXP (src, 1), 1);
1300               /* We handle only adjustments by constant amount.  */
1301               gcc_assert (GET_CODE (XEXP (src, 1)) == PLUS
1302                           && CONST_INT_P (val));
1303               offset = -INTVAL (val);
1304               break;
1305             }
1306           return 0;
1307
1308         case PRE_DEC:
1309         case POST_DEC:
1310           if (XEXP (src, 0) == stack_pointer_rtx)
1311             {
1312               offset = GET_MODE_SIZE (GET_MODE (dest));
1313               break;
1314             }
1315           return 0;
1316
1317         case PRE_INC:
1318         case POST_INC:
1319           if (XEXP (src, 0) == stack_pointer_rtx)
1320             {
1321               offset = -GET_MODE_SIZE (GET_MODE (dest));
1322               break;
1323             }
1324           return 0;
1325
1326         default:
1327           return 0;
1328         }
1329     }
1330   else
1331     return 0;
1332
1333   return offset;
1334 }
1335
1336 /* Precomputed args_size for CODE_LABELs and BARRIERs preceeding them,
1337    indexed by INSN_UID.  */
1338
1339 static HOST_WIDE_INT *barrier_args_size;
1340
1341 /* Helper function for compute_barrier_args_size.  Handle one insn.  */
1342
1343 static HOST_WIDE_INT
1344 compute_barrier_args_size_1 (rtx insn, HOST_WIDE_INT cur_args_size,
1345                              VEC (rtx, heap) **next)
1346 {
1347   HOST_WIDE_INT offset = 0;
1348   int i;
1349
1350   if (! RTX_FRAME_RELATED_P (insn))
1351     {
1352       if (prologue_epilogue_contains (insn))
1353         /* Nothing */;
1354       else if (GET_CODE (PATTERN (insn)) == SET)
1355         offset = stack_adjust_offset (PATTERN (insn), cur_args_size, 0);
1356       else if (GET_CODE (PATTERN (insn)) == PARALLEL
1357                || GET_CODE (PATTERN (insn)) == SEQUENCE)
1358         {
1359           /* There may be stack adjustments inside compound insns.  Search
1360              for them.  */
1361           for (i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1362             if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1363               offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1364                                              cur_args_size, offset);
1365         }
1366     }
1367   else
1368     {
1369       rtx expr = find_reg_note (insn, REG_FRAME_RELATED_EXPR, NULL_RTX);
1370
1371       if (expr)
1372         {
1373           expr = XEXP (expr, 0);
1374           if (GET_CODE (expr) == PARALLEL
1375               || GET_CODE (expr) == SEQUENCE)
1376             for (i = 1; i < XVECLEN (expr, 0); i++)
1377               {
1378                 rtx elem = XVECEXP (expr, 0, i);
1379
1380                 if (GET_CODE (elem) == SET && !RTX_FRAME_RELATED_P (elem))
1381                   offset += stack_adjust_offset (elem, cur_args_size, offset);
1382               }
1383         }
1384     }
1385
1386 #ifndef STACK_GROWS_DOWNWARD
1387   offset = -offset;
1388 #endif
1389
1390   cur_args_size += offset;
1391   if (cur_args_size < 0)
1392     cur_args_size = 0;
1393
1394   if (JUMP_P (insn))
1395     {
1396       rtx dest = JUMP_LABEL (insn);
1397
1398       if (dest)
1399         {
1400           if (barrier_args_size [INSN_UID (dest)] < 0)
1401             {
1402               barrier_args_size [INSN_UID (dest)] = cur_args_size;
1403               VEC_safe_push (rtx, heap, *next, dest);
1404             }
1405         }
1406     }
1407
1408   return cur_args_size;
1409 }
1410
1411 /* Walk the whole function and compute args_size on BARRIERs.  */
1412
1413 static void
1414 compute_barrier_args_size (void)
1415 {
1416   int max_uid = get_max_uid (), i;
1417   rtx insn;
1418   VEC (rtx, heap) *worklist, *next, *tmp;
1419
1420   barrier_args_size = XNEWVEC (HOST_WIDE_INT, max_uid);
1421   for (i = 0; i < max_uid; i++)
1422     barrier_args_size[i] = -1;
1423
1424   worklist = VEC_alloc (rtx, heap, 20);
1425   next = VEC_alloc (rtx, heap, 20);
1426   insn = get_insns ();
1427   barrier_args_size[INSN_UID (insn)] = 0;
1428   VEC_quick_push (rtx, worklist, insn);
1429   for (;;)
1430     {
1431       while (!VEC_empty (rtx, worklist))
1432         {
1433           rtx prev, body, first_insn;
1434           HOST_WIDE_INT cur_args_size;
1435
1436           first_insn = insn = VEC_pop (rtx, worklist);
1437           cur_args_size = barrier_args_size[INSN_UID (insn)];
1438           prev = prev_nonnote_insn (insn);
1439           if (prev && BARRIER_P (prev))
1440             barrier_args_size[INSN_UID (prev)] = cur_args_size;
1441
1442           for (; insn; insn = NEXT_INSN (insn))
1443             {
1444               if (INSN_DELETED_P (insn) || NOTE_P (insn))
1445                 continue;
1446               if (BARRIER_P (insn))
1447                 break;
1448
1449               if (LABEL_P (insn))
1450                 {
1451                   if (insn == first_insn)
1452                     continue;
1453                   else if (barrier_args_size[INSN_UID (insn)] < 0)
1454                     {
1455                       barrier_args_size[INSN_UID (insn)] = cur_args_size;
1456                       continue;
1457                     }
1458                   else
1459                     {
1460                       /* The insns starting with this label have been
1461                          already scanned or are in the worklist.  */
1462                       break;
1463                     }
1464                 }
1465
1466               body = PATTERN (insn);
1467               if (GET_CODE (body) == SEQUENCE)
1468                 {
1469                   HOST_WIDE_INT dest_args_size = cur_args_size;
1470                   for (i = 1; i < XVECLEN (body, 0); i++)
1471                     if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0))
1472                         && INSN_FROM_TARGET_P (XVECEXP (body, 0, i)))
1473                       dest_args_size
1474                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1475                                                        dest_args_size, &next);
1476                     else
1477                       cur_args_size
1478                         = compute_barrier_args_size_1 (XVECEXP (body, 0, i),
1479                                                        cur_args_size, &next);
1480
1481                   if (INSN_ANNULLED_BRANCH_P (XVECEXP (body, 0, 0)))
1482                     compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1483                                                  dest_args_size, &next);
1484                   else
1485                     cur_args_size
1486                       = compute_barrier_args_size_1 (XVECEXP (body, 0, 0),
1487                                                      cur_args_size, &next);
1488                 }
1489               else
1490                 cur_args_size
1491                   = compute_barrier_args_size_1 (insn, cur_args_size, &next);
1492             }
1493         }
1494
1495       if (VEC_empty (rtx, next))
1496         break;
1497
1498       /* Swap WORKLIST with NEXT and truncate NEXT for next iteration.  */
1499       tmp = next;
1500       next = worklist;
1501       worklist = tmp;
1502       VEC_truncate (rtx, next, 0);
1503     }
1504
1505   VEC_free (rtx, heap, worklist);
1506   VEC_free (rtx, heap, next);
1507 }
1508
1509 /* Add a CFI to update the running total of the size of arguments
1510    pushed onto the stack.  */
1511
1512 static void
1513 dwarf2out_args_size (const char *label, HOST_WIDE_INT size)
1514 {
1515   dw_cfi_ref cfi;
1516
1517   if (size == old_args_size)
1518     return;
1519
1520   old_args_size = size;
1521
1522   cfi = new_cfi ();
1523   cfi->dw_cfi_opc = DW_CFA_GNU_args_size;
1524   cfi->dw_cfi_oprnd1.dw_cfi_offset = size;
1525   add_fde_cfi (label, cfi);
1526 }
1527
1528 /* Record a stack adjustment of OFFSET bytes.  */
1529
1530 static void
1531 dwarf2out_stack_adjust (HOST_WIDE_INT offset, const char *label)
1532 {
1533   if (cfa.reg == STACK_POINTER_REGNUM)
1534     cfa.offset += offset;
1535
1536   if (cfa_store.reg == STACK_POINTER_REGNUM)
1537     cfa_store.offset += offset;
1538
1539   if (ACCUMULATE_OUTGOING_ARGS)
1540     return;
1541
1542 #ifndef STACK_GROWS_DOWNWARD
1543   offset = -offset;
1544 #endif
1545
1546   args_size += offset;
1547   if (args_size < 0)
1548     args_size = 0;
1549
1550   def_cfa_1 (label, &cfa);
1551   if (flag_asynchronous_unwind_tables)
1552     dwarf2out_args_size (label, args_size);
1553 }
1554
1555 /* Check INSN to see if it looks like a push or a stack adjustment, and
1556    make a note of it if it does.  EH uses this information to find out
1557    how much extra space it needs to pop off the stack.  */
1558
1559 static void
1560 dwarf2out_notice_stack_adjust (rtx insn, bool after_p)
1561 {
1562   HOST_WIDE_INT offset;
1563   const char *label;
1564   int i;
1565
1566   /* Don't handle epilogues at all.  Certainly it would be wrong to do so
1567      with this function.  Proper support would require all frame-related
1568      insns to be marked, and to be able to handle saving state around
1569      epilogues textually in the middle of the function.  */
1570   if (prologue_epilogue_contains (insn))
1571     return;
1572
1573   /* If INSN is an instruction from target of an annulled branch, the
1574      effects are for the target only and so current argument size
1575      shouldn't change at all.  */
1576   if (final_sequence
1577       && INSN_ANNULLED_BRANCH_P (XVECEXP (final_sequence, 0, 0))
1578       && INSN_FROM_TARGET_P (insn))
1579     return;
1580
1581   /* If only calls can throw, and we have a frame pointer,
1582      save up adjustments until we see the CALL_INSN.  */
1583   if (!flag_asynchronous_unwind_tables && cfa.reg != STACK_POINTER_REGNUM)
1584     {
1585       if (CALL_P (insn) && !after_p)
1586         {
1587           /* Extract the size of the args from the CALL rtx itself.  */
1588           insn = PATTERN (insn);
1589           if (GET_CODE (insn) == PARALLEL)
1590             insn = XVECEXP (insn, 0, 0);
1591           if (GET_CODE (insn) == SET)
1592             insn = SET_SRC (insn);
1593           gcc_assert (GET_CODE (insn) == CALL);
1594           dwarf2out_args_size ("", INTVAL (XEXP (insn, 1)));
1595         }
1596       return;
1597     }
1598
1599   if (CALL_P (insn) && !after_p)
1600     {
1601       if (!flag_asynchronous_unwind_tables)
1602         dwarf2out_args_size ("", args_size);
1603       return;
1604     }
1605   else if (BARRIER_P (insn))
1606     {
1607       /* Don't call compute_barrier_args_size () if the only
1608          BARRIER is at the end of function.  */
1609       if (barrier_args_size == NULL && next_nonnote_insn (insn))
1610         compute_barrier_args_size ();
1611       if (barrier_args_size == NULL)
1612         offset = 0;
1613       else
1614         {
1615           offset = barrier_args_size[INSN_UID (insn)];
1616           if (offset < 0)
1617             offset = 0;
1618         }
1619
1620       offset -= args_size;
1621 #ifndef STACK_GROWS_DOWNWARD
1622       offset = -offset;
1623 #endif
1624     }
1625   else if (GET_CODE (PATTERN (insn)) == SET)
1626     offset = stack_adjust_offset (PATTERN (insn), args_size, 0);
1627   else if (GET_CODE (PATTERN (insn)) == PARALLEL
1628            || GET_CODE (PATTERN (insn)) == SEQUENCE)
1629     {
1630       /* There may be stack adjustments inside compound insns.  Search
1631          for them.  */
1632       for (offset = 0, i = XVECLEN (PATTERN (insn), 0) - 1; i >= 0; i--)
1633         if (GET_CODE (XVECEXP (PATTERN (insn), 0, i)) == SET)
1634           offset += stack_adjust_offset (XVECEXP (PATTERN (insn), 0, i),
1635                                          args_size, offset);
1636     }
1637   else
1638     return;
1639
1640   if (offset == 0)
1641     return;
1642
1643   label = dwarf2out_cfi_label (false);
1644   dwarf2out_stack_adjust (offset, label);
1645 }
1646
1647 #endif
1648
1649 /* We delay emitting a register save until either (a) we reach the end
1650    of the prologue or (b) the register is clobbered.  This clusters
1651    register saves so that there are fewer pc advances.  */
1652
1653 struct GTY(()) queued_reg_save {
1654   struct queued_reg_save *next;
1655   rtx reg;
1656   HOST_WIDE_INT cfa_offset;
1657   rtx saved_reg;
1658 };
1659
1660 static GTY(()) struct queued_reg_save *queued_reg_saves;
1661
1662 /* The caller's ORIG_REG is saved in SAVED_IN_REG.  */
1663 struct GTY(()) reg_saved_in_data {
1664   rtx orig_reg;
1665   rtx saved_in_reg;
1666 };
1667
1668 /* A list of registers saved in other registers.
1669    The list intentionally has a small maximum capacity of 4; if your
1670    port needs more than that, you might consider implementing a
1671    more efficient data structure.  */
1672 static GTY(()) struct reg_saved_in_data regs_saved_in_regs[4];
1673 static GTY(()) size_t num_regs_saved_in_regs;
1674
1675 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
1676 static const char *last_reg_save_label;
1677
1678 /* Add an entry to QUEUED_REG_SAVES saying that REG is now saved at
1679    SREG, or if SREG is NULL then it is saved at OFFSET to the CFA.  */
1680
1681 static void
1682 queue_reg_save (const char *label, rtx reg, rtx sreg, HOST_WIDE_INT offset)
1683 {
1684   struct queued_reg_save *q;
1685
1686   /* Duplicates waste space, but it's also necessary to remove them
1687      for correctness, since the queue gets output in reverse
1688      order.  */
1689   for (q = queued_reg_saves; q != NULL; q = q->next)
1690     if (REGNO (q->reg) == REGNO (reg))
1691       break;
1692
1693   if (q == NULL)
1694     {
1695       q = GGC_NEW (struct queued_reg_save);
1696       q->next = queued_reg_saves;
1697       queued_reg_saves = q;
1698     }
1699
1700   q->reg = reg;
1701   q->cfa_offset = offset;
1702   q->saved_reg = sreg;
1703
1704   last_reg_save_label = label;
1705 }
1706
1707 /* Output all the entries in QUEUED_REG_SAVES.  */
1708
1709 static void
1710 flush_queued_reg_saves (void)
1711 {
1712   struct queued_reg_save *q;
1713
1714   for (q = queued_reg_saves; q; q = q->next)
1715     {
1716       size_t i;
1717       unsigned int reg, sreg;
1718
1719       for (i = 0; i < num_regs_saved_in_regs; i++)
1720         if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (q->reg))
1721           break;
1722       if (q->saved_reg && i == num_regs_saved_in_regs)
1723         {
1724           gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1725           num_regs_saved_in_regs++;
1726         }
1727       if (i != num_regs_saved_in_regs)
1728         {
1729           regs_saved_in_regs[i].orig_reg = q->reg;
1730           regs_saved_in_regs[i].saved_in_reg = q->saved_reg;
1731         }
1732
1733       reg = DWARF_FRAME_REGNUM (REGNO (q->reg));
1734       if (q->saved_reg)
1735         sreg = DWARF_FRAME_REGNUM (REGNO (q->saved_reg));
1736       else
1737         sreg = INVALID_REGNUM;
1738       reg_save (last_reg_save_label, reg, sreg, q->cfa_offset);
1739     }
1740
1741   queued_reg_saves = NULL;
1742   last_reg_save_label = NULL;
1743 }
1744
1745 /* Does INSN clobber any register which QUEUED_REG_SAVES lists a saved
1746    location for?  Or, does it clobber a register which we've previously
1747    said that some other register is saved in, and for which we now
1748    have a new location for?  */
1749
1750 static bool
1751 clobbers_queued_reg_save (const_rtx insn)
1752 {
1753   struct queued_reg_save *q;
1754
1755   for (q = queued_reg_saves; q; q = q->next)
1756     {
1757       size_t i;
1758       if (modified_in_p (q->reg, insn))
1759         return true;
1760       for (i = 0; i < num_regs_saved_in_regs; i++)
1761         if (REGNO (q->reg) == REGNO (regs_saved_in_regs[i].orig_reg)
1762             && modified_in_p (regs_saved_in_regs[i].saved_in_reg, insn))
1763           return true;
1764     }
1765
1766   return false;
1767 }
1768
1769 /* Entry point for saving the first register into the second.  */
1770
1771 void
1772 dwarf2out_reg_save_reg (const char *label, rtx reg, rtx sreg)
1773 {
1774   size_t i;
1775   unsigned int regno, sregno;
1776
1777   for (i = 0; i < num_regs_saved_in_regs; i++)
1778     if (REGNO (regs_saved_in_regs[i].orig_reg) == REGNO (reg))
1779       break;
1780   if (i == num_regs_saved_in_regs)
1781     {
1782       gcc_assert (i != ARRAY_SIZE (regs_saved_in_regs));
1783       num_regs_saved_in_regs++;
1784     }
1785   regs_saved_in_regs[i].orig_reg = reg;
1786   regs_saved_in_regs[i].saved_in_reg = sreg;
1787
1788   regno = DWARF_FRAME_REGNUM (REGNO (reg));
1789   sregno = DWARF_FRAME_REGNUM (REGNO (sreg));
1790   reg_save (label, regno, sregno, 0);
1791 }
1792
1793 /* What register, if any, is currently saved in REG?  */
1794
1795 static rtx
1796 reg_saved_in (rtx reg)
1797 {
1798   unsigned int regn = REGNO (reg);
1799   size_t i;
1800   struct queued_reg_save *q;
1801
1802   for (q = queued_reg_saves; q; q = q->next)
1803     if (q->saved_reg && regn == REGNO (q->saved_reg))
1804       return q->reg;
1805
1806   for (i = 0; i < num_regs_saved_in_regs; i++)
1807     if (regs_saved_in_regs[i].saved_in_reg
1808         && regn == REGNO (regs_saved_in_regs[i].saved_in_reg))
1809       return regs_saved_in_regs[i].orig_reg;
1810
1811   return NULL_RTX;
1812 }
1813
1814
1815 /* A temporary register holding an integral value used in adjusting SP
1816    or setting up the store_reg.  The "offset" field holds the integer
1817    value, not an offset.  */
1818 static dw_cfa_location cfa_temp;
1819
1820 /* A subroutine of dwarf2out_frame_debug, process a REG_DEF_CFA note.  */
1821
1822 static void
1823 dwarf2out_frame_debug_def_cfa (rtx pat, const char *label)
1824 {
1825   memset (&cfa, 0, sizeof (cfa));
1826
1827   switch (GET_CODE (pat))
1828     {
1829     case PLUS:
1830       cfa.reg = REGNO (XEXP (pat, 0));
1831       cfa.offset = INTVAL (XEXP (pat, 1));
1832       break;
1833
1834     case REG:
1835       cfa.reg = REGNO (pat);
1836       break;
1837
1838     default:
1839       /* Recurse and define an expression.  */
1840       gcc_unreachable ();
1841     }
1842
1843   def_cfa_1 (label, &cfa);
1844 }
1845
1846 /* A subroutine of dwarf2out_frame_debug, process a REG_ADJUST_CFA note.  */
1847
1848 static void
1849 dwarf2out_frame_debug_adjust_cfa (rtx pat, const char *label)
1850 {
1851   rtx src, dest;
1852
1853   gcc_assert (GET_CODE (pat) == SET);
1854   dest = XEXP (pat, 0);
1855   src = XEXP (pat, 1);
1856
1857   switch (GET_CODE (src))
1858     {
1859     case PLUS:
1860       gcc_assert (REGNO (XEXP (src, 0)) == cfa.reg);
1861       cfa.offset -= INTVAL (XEXP (src, 1));
1862       break;
1863
1864     case REG:
1865         break;
1866
1867     default:
1868         gcc_unreachable ();
1869     }
1870
1871   cfa.reg = REGNO (dest);
1872   gcc_assert (cfa.indirect == 0);
1873
1874   def_cfa_1 (label, &cfa);
1875 }
1876
1877 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_OFFSET note.  */
1878
1879 static void
1880 dwarf2out_frame_debug_cfa_offset (rtx set, const char *label)
1881 {
1882   HOST_WIDE_INT offset;
1883   rtx src, addr, span;
1884
1885   src = XEXP (set, 1);
1886   addr = XEXP (set, 0);
1887   gcc_assert (MEM_P (addr));
1888   addr = XEXP (addr, 0);
1889
1890   /* As documented, only consider extremely simple addresses.  */
1891   switch (GET_CODE (addr))
1892     {
1893     case REG:
1894       gcc_assert (REGNO (addr) == cfa.reg);
1895       offset = -cfa.offset;
1896       break;
1897     case PLUS:
1898       gcc_assert (REGNO (XEXP (addr, 0)) == cfa.reg);
1899       offset = INTVAL (XEXP (addr, 1)) - cfa.offset;
1900       break;
1901     default:
1902       gcc_unreachable ();
1903     }
1904
1905   span = targetm.dwarf_register_span (src);
1906
1907   /* ??? We'd like to use queue_reg_save, but we need to come up with
1908      a different flushing heuristic for epilogues.  */
1909   if (!span)
1910     reg_save (label, DWARF_FRAME_REGNUM (REGNO (src)), INVALID_REGNUM, offset);
1911   else
1912     {
1913       /* We have a PARALLEL describing where the contents of SRC live.
1914          Queue register saves for each piece of the PARALLEL.  */
1915       int par_index;
1916       int limit;
1917       HOST_WIDE_INT span_offset = offset;
1918
1919       gcc_assert (GET_CODE (span) == PARALLEL);
1920
1921       limit = XVECLEN (span, 0);
1922       for (par_index = 0; par_index < limit; par_index++)
1923         {
1924           rtx elem = XVECEXP (span, 0, par_index);
1925
1926           reg_save (label, DWARF_FRAME_REGNUM (REGNO (elem)),
1927                     INVALID_REGNUM, span_offset);
1928           span_offset += GET_MODE_SIZE (GET_MODE (elem));
1929         }
1930     }
1931 }
1932
1933 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_REGISTER note.  */
1934
1935 static void
1936 dwarf2out_frame_debug_cfa_register (rtx set, const char *label)
1937 {
1938   rtx src, dest;
1939   unsigned sregno, dregno;
1940
1941   src = XEXP (set, 1);
1942   dest = XEXP (set, 0);
1943
1944   if (src == pc_rtx)
1945     sregno = DWARF_FRAME_RETURN_COLUMN;
1946   else
1947     sregno = DWARF_FRAME_REGNUM (REGNO (src));
1948
1949   dregno = DWARF_FRAME_REGNUM (REGNO (dest));
1950
1951   /* ??? We'd like to use queue_reg_save, but we need to come up with
1952      a different flushing heuristic for epilogues.  */
1953   reg_save (label, sregno, dregno, 0);
1954 }
1955
1956 /* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note.  */
1957
1958 static void
1959 dwarf2out_frame_debug_cfa_restore (rtx reg, const char *label)
1960 {
1961   dw_cfi_ref cfi = new_cfi ();
1962   unsigned int regno = DWARF_FRAME_REGNUM (REGNO (reg));
1963
1964   cfi->dw_cfi_opc = (regno & ~0x3f ? DW_CFA_restore_extended : DW_CFA_restore);
1965   cfi->dw_cfi_oprnd1.dw_cfi_reg_num = regno;
1966
1967   add_fde_cfi (label, cfi);
1968 }
1969
1970 /* Record call frame debugging information for an expression EXPR,
1971    which either sets SP or FP (adjusting how we calculate the frame
1972    address) or saves a register to the stack or another register.
1973    LABEL indicates the address of EXPR.
1974
1975    This function encodes a state machine mapping rtxes to actions on
1976    cfa, cfa_store, and cfa_temp.reg.  We describe these rules so
1977    users need not read the source code.
1978
1979   The High-Level Picture
1980
1981   Changes in the register we use to calculate the CFA: Currently we
1982   assume that if you copy the CFA register into another register, we
1983   should take the other one as the new CFA register; this seems to
1984   work pretty well.  If it's wrong for some target, it's simple
1985   enough not to set RTX_FRAME_RELATED_P on the insn in question.
1986
1987   Changes in the register we use for saving registers to the stack:
1988   This is usually SP, but not always.  Again, we deduce that if you
1989   copy SP into another register (and SP is not the CFA register),
1990   then the new register is the one we will be using for register
1991   saves.  This also seems to work.
1992
1993   Register saves: There's not much guesswork about this one; if
1994   RTX_FRAME_RELATED_P is set on an insn which modifies memory, it's a
1995   register save, and the register used to calculate the destination
1996   had better be the one we think we're using for this purpose.
1997   It's also assumed that a copy from a call-saved register to another
1998   register is saving that register if RTX_FRAME_RELATED_P is set on
1999   that instruction.  If the copy is from a call-saved register to
2000   the *same* register, that means that the register is now the same
2001   value as in the caller.
2002
2003   Except: If the register being saved is the CFA register, and the
2004   offset is nonzero, we are saving the CFA, so we assume we have to
2005   use DW_CFA_def_cfa_expression.  If the offset is 0, we assume that
2006   the intent is to save the value of SP from the previous frame.
2007
2008   In addition, if a register has previously been saved to a different
2009   register,
2010
2011   Invariants / Summaries of Rules
2012
2013   cfa          current rule for calculating the CFA.  It usually
2014                consists of a register and an offset.
2015   cfa_store    register used by prologue code to save things to the stack
2016                cfa_store.offset is the offset from the value of
2017                cfa_store.reg to the actual CFA
2018   cfa_temp     register holding an integral value.  cfa_temp.offset
2019                stores the value, which will be used to adjust the
2020                stack pointer.  cfa_temp is also used like cfa_store,
2021                to track stores to the stack via fp or a temp reg.
2022
2023   Rules  1- 4: Setting a register's value to cfa.reg or an expression
2024                with cfa.reg as the first operand changes the cfa.reg and its
2025                cfa.offset.  Rule 1 and 4 also set cfa_temp.reg and
2026                cfa_temp.offset.
2027
2028   Rules  6- 9: Set a non-cfa.reg register value to a constant or an
2029                expression yielding a constant.  This sets cfa_temp.reg
2030                and cfa_temp.offset.
2031
2032   Rule 5:      Create a new register cfa_store used to save items to the
2033                stack.
2034
2035   Rules 10-14: Save a register to the stack.  Define offset as the
2036                difference of the original location and cfa_store's
2037                location (or cfa_temp's location if cfa_temp is used).
2038
2039   Rules 16-20: If AND operation happens on sp in prologue, we assume
2040                stack is realigned.  We will use a group of DW_OP_XXX
2041                expressions to represent the location of the stored
2042                register instead of CFA+offset.
2043
2044   The Rules
2045
2046   "{a,b}" indicates a choice of a xor b.
2047   "<reg>:cfa.reg" indicates that <reg> must equal cfa.reg.
2048
2049   Rule 1:
2050   (set <reg1> <reg2>:cfa.reg)
2051   effects: cfa.reg = <reg1>
2052            cfa.offset unchanged
2053            cfa_temp.reg = <reg1>
2054            cfa_temp.offset = cfa.offset
2055
2056   Rule 2:
2057   (set sp ({minus,plus,losum} {sp,fp}:cfa.reg
2058                               {<const_int>,<reg>:cfa_temp.reg}))
2059   effects: cfa.reg = sp if fp used
2060            cfa.offset += {+/- <const_int>, cfa_temp.offset} if cfa.reg==sp
2061            cfa_store.offset += {+/- <const_int>, cfa_temp.offset}
2062              if cfa_store.reg==sp
2063
2064   Rule 3:
2065   (set fp ({minus,plus,losum} <reg>:cfa.reg <const_int>))
2066   effects: cfa.reg = fp
2067            cfa_offset += +/- <const_int>
2068
2069   Rule 4:
2070   (set <reg1> ({plus,losum} <reg2>:cfa.reg <const_int>))
2071   constraints: <reg1> != fp
2072                <reg1> != sp
2073   effects: cfa.reg = <reg1>
2074            cfa_temp.reg = <reg1>
2075            cfa_temp.offset = cfa.offset
2076
2077   Rule 5:
2078   (set <reg1> (plus <reg2>:cfa_temp.reg sp:cfa.reg))
2079   constraints: <reg1> != fp
2080                <reg1> != sp
2081   effects: cfa_store.reg = <reg1>
2082            cfa_store.offset = cfa.offset - cfa_temp.offset
2083
2084   Rule 6:
2085   (set <reg> <const_int>)
2086   effects: cfa_temp.reg = <reg>
2087            cfa_temp.offset = <const_int>
2088
2089   Rule 7:
2090   (set <reg1>:cfa_temp.reg (ior <reg2>:cfa_temp.reg <const_int>))
2091   effects: cfa_temp.reg = <reg1>
2092            cfa_temp.offset |= <const_int>
2093
2094   Rule 8:
2095   (set <reg> (high <exp>))
2096   effects: none
2097
2098   Rule 9:
2099   (set <reg> (lo_sum <exp> <const_int>))
2100   effects: cfa_temp.reg = <reg>
2101            cfa_temp.offset = <const_int>
2102
2103   Rule 10:
2104   (set (mem (pre_modify sp:cfa_store (???? <reg1> <const_int>))) <reg2>)
2105   effects: cfa_store.offset -= <const_int>
2106            cfa.offset = cfa_store.offset if cfa.reg == sp
2107            cfa.reg = sp
2108            cfa.base_offset = -cfa_store.offset
2109
2110   Rule 11:
2111   (set (mem ({pre_inc,pre_dec} sp:cfa_store.reg)) <reg>)
2112   effects: cfa_store.offset += -/+ mode_size(mem)
2113            cfa.offset = cfa_store.offset if cfa.reg == sp
2114            cfa.reg = sp
2115            cfa.base_offset = -cfa_store.offset
2116
2117   Rule 12:
2118   (set (mem ({minus,plus,losum} <reg1>:{cfa_store,cfa_temp} <const_int>))
2119
2120        <reg2>)
2121   effects: cfa.reg = <reg1>
2122            cfa.base_offset = -/+ <const_int> - {cfa_store,cfa_temp}.offset
2123
2124   Rule 13:
2125   (set (mem <reg1>:{cfa_store,cfa_temp}) <reg2>)
2126   effects: cfa.reg = <reg1>
2127            cfa.base_offset = -{cfa_store,cfa_temp}.offset
2128
2129   Rule 14:
2130   (set (mem (postinc <reg1>:cfa_temp <const_int>)) <reg2>)
2131   effects: cfa.reg = <reg1>
2132            cfa.base_offset = -cfa_temp.offset
2133            cfa_temp.offset -= mode_size(mem)
2134
2135   Rule 15:
2136   (set <reg> {unspec, unspec_volatile})
2137   effects: target-dependent
2138
2139   Rule 16:
2140   (set sp (and: sp <const_int>))
2141   constraints: cfa_store.reg == sp
2142   effects: current_fde.stack_realign = 1
2143            cfa_store.offset = 0
2144            fde->drap_reg = cfa.reg if cfa.reg != sp and cfa.reg != fp
2145
2146   Rule 17:
2147   (set (mem ({pre_inc, pre_dec} sp)) (mem (plus (cfa.reg) (const_int))))
2148   effects: cfa_store.offset += -/+ mode_size(mem)
2149
2150   Rule 18:
2151   (set (mem ({pre_inc, pre_dec} sp)) fp)
2152   constraints: fde->stack_realign == 1
2153   effects: cfa_store.offset = 0
2154            cfa.reg != HARD_FRAME_POINTER_REGNUM
2155
2156   Rule 19:
2157   (set (mem ({pre_inc, pre_dec} sp)) cfa.reg)
2158   constraints: fde->stack_realign == 1
2159                && cfa.offset == 0
2160                && cfa.indirect == 0
2161                && cfa.reg != HARD_FRAME_POINTER_REGNUM
2162   effects: Use DW_CFA_def_cfa_expression to define cfa
2163            cfa.reg == fde->drap_reg  */
2164
2165 static void
2166 dwarf2out_frame_debug_expr (rtx expr, const char *label)
2167 {
2168   rtx src, dest, span;
2169   HOST_WIDE_INT offset;
2170   dw_fde_ref fde;
2171
2172   /* If RTX_FRAME_RELATED_P is set on a PARALLEL, process each member of
2173      the PARALLEL independently. The first element is always processed if
2174      it is a SET. This is for backward compatibility.   Other elements
2175      are processed only if they are SETs and the RTX_FRAME_RELATED_P
2176      flag is set in them.  */
2177   if (GET_CODE (expr) == PARALLEL || GET_CODE (expr) == SEQUENCE)
2178     {
2179       int par_index;
2180       int limit = XVECLEN (expr, 0);
2181       rtx elem;
2182
2183       /* PARALLELs have strict read-modify-write semantics, so we
2184          ought to evaluate every rvalue before changing any lvalue.
2185          It's cumbersome to do that in general, but there's an
2186          easy approximation that is enough for all current users:
2187          handle register saves before register assignments.  */
2188       if (GET_CODE (expr) == PARALLEL)
2189         for (par_index = 0; par_index < limit; par_index++)
2190           {
2191             elem = XVECEXP (expr, 0, par_index);
2192             if (GET_CODE (elem) == SET
2193                 && MEM_P (SET_DEST (elem))
2194                 && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2195               dwarf2out_frame_debug_expr (elem, label);
2196           }
2197
2198       for (par_index = 0; par_index < limit; par_index++)
2199         {
2200           elem = XVECEXP (expr, 0, par_index);
2201           if (GET_CODE (elem) == SET
2202               && (!MEM_P (SET_DEST (elem)) || GET_CODE (expr) == SEQUENCE)
2203               && (RTX_FRAME_RELATED_P (elem) || par_index == 0))
2204             dwarf2out_frame_debug_expr (elem, label);
2205           else if (GET_CODE (elem) == SET
2206                    && par_index != 0
2207                    && !RTX_FRAME_RELATED_P (elem))
2208             {
2209               /* Stack adjustment combining might combine some post-prologue
2210                  stack adjustment into a prologue stack adjustment.  */
2211               HOST_WIDE_INT offset = stack_adjust_offset (elem, args_size, 0);
2212
2213               if (offset != 0)
2214                 dwarf2out_stack_adjust (offset, label);
2215             }
2216         }
2217       return;
2218     }
2219
2220   gcc_assert (GET_CODE (expr) == SET);
2221
2222   src = SET_SRC (expr);
2223   dest = SET_DEST (expr);
2224
2225   if (REG_P (src))
2226     {
2227       rtx rsi = reg_saved_in (src);
2228       if (rsi)
2229         src = rsi;
2230     }
2231
2232   fde = current_fde ();
2233
2234   switch (GET_CODE (dest))
2235     {
2236     case REG:
2237       switch (GET_CODE (src))
2238         {
2239           /* Setting FP from SP.  */
2240         case REG:
2241           if (cfa.reg == (unsigned) REGNO (src))
2242             {
2243               /* Rule 1 */
2244               /* Update the CFA rule wrt SP or FP.  Make sure src is
2245                  relative to the current CFA register.
2246
2247                  We used to require that dest be either SP or FP, but the
2248                  ARM copies SP to a temporary register, and from there to
2249                  FP.  So we just rely on the backends to only set
2250                  RTX_FRAME_RELATED_P on appropriate insns.  */
2251               cfa.reg = REGNO (dest);
2252               cfa_temp.reg = cfa.reg;
2253               cfa_temp.offset = cfa.offset;
2254             }
2255           else
2256             {
2257               /* Saving a register in a register.  */
2258               gcc_assert (!fixed_regs [REGNO (dest)]
2259                           /* For the SPARC and its register window.  */
2260                           || (DWARF_FRAME_REGNUM (REGNO (src))
2261                               == DWARF_FRAME_RETURN_COLUMN));
2262
2263               /* After stack is aligned, we can only save SP in FP
2264                  if drap register is used.  In this case, we have
2265                  to restore stack pointer with the CFA value and we
2266                  don't generate this DWARF information.  */
2267               if (fde
2268                   && fde->stack_realign
2269                   && REGNO (src) == STACK_POINTER_REGNUM)
2270                 gcc_assert (REGNO (dest) == HARD_FRAME_POINTER_REGNUM
2271                             && fde->drap_reg != INVALID_REGNUM
2272                             && cfa.reg != REGNO (src));
2273               else
2274                 queue_reg_save (label, src, dest, 0);
2275             }
2276           break;
2277
2278         case PLUS:
2279         case MINUS:
2280         case LO_SUM:
2281           if (dest == stack_pointer_rtx)
2282             {
2283               /* Rule 2 */
2284               /* Adjusting SP.  */
2285               switch (GET_CODE (XEXP (src, 1)))
2286                 {
2287                 case CONST_INT:
2288                   offset = INTVAL (XEXP (src, 1));
2289                   break;
2290                 case REG:
2291                   gcc_assert ((unsigned) REGNO (XEXP (src, 1))
2292                               == cfa_temp.reg);
2293                   offset = cfa_temp.offset;
2294                   break;
2295                 default:
2296                   gcc_unreachable ();
2297                 }
2298
2299               if (XEXP (src, 0) == hard_frame_pointer_rtx)
2300                 {
2301                   /* Restoring SP from FP in the epilogue.  */
2302                   gcc_assert (cfa.reg == (unsigned) HARD_FRAME_POINTER_REGNUM);
2303                   cfa.reg = STACK_POINTER_REGNUM;
2304                 }
2305               else if (GET_CODE (src) == LO_SUM)
2306                 /* Assume we've set the source reg of the LO_SUM from sp.  */
2307                 ;
2308               else
2309                 gcc_assert (XEXP (src, 0) == stack_pointer_rtx);
2310
2311               if (GET_CODE (src) != MINUS)
2312                 offset = -offset;
2313               if (cfa.reg == STACK_POINTER_REGNUM)
2314                 cfa.offset += offset;
2315               if (cfa_store.reg == STACK_POINTER_REGNUM)
2316                 cfa_store.offset += offset;
2317             }
2318           else if (dest == hard_frame_pointer_rtx)
2319             {
2320               /* Rule 3 */
2321               /* Either setting the FP from an offset of the SP,
2322                  or adjusting the FP */
2323               gcc_assert (frame_pointer_needed);
2324
2325               gcc_assert (REG_P (XEXP (src, 0))
2326                           && (unsigned) REGNO (XEXP (src, 0)) == cfa.reg
2327                           && CONST_INT_P (XEXP (src, 1)));
2328               offset = INTVAL (XEXP (src, 1));
2329               if (GET_CODE (src) != MINUS)
2330                 offset = -offset;
2331               cfa.offset += offset;
2332               cfa.reg = HARD_FRAME_POINTER_REGNUM;
2333             }
2334           else
2335             {
2336               gcc_assert (GET_CODE (src) != MINUS);
2337
2338               /* Rule 4 */
2339               if (REG_P (XEXP (src, 0))
2340                   && REGNO (XEXP (src, 0)) == cfa.reg
2341                   && CONST_INT_P (XEXP (src, 1)))
2342                 {
2343                   /* Setting a temporary CFA register that will be copied
2344                      into the FP later on.  */
2345                   offset = - INTVAL (XEXP (src, 1));
2346                   cfa.offset += offset;
2347                   cfa.reg = REGNO (dest);
2348                   /* Or used to save regs to the stack.  */
2349                   cfa_temp.reg = cfa.reg;
2350                   cfa_temp.offset = cfa.offset;
2351                 }
2352
2353               /* Rule 5 */
2354               else if (REG_P (XEXP (src, 0))
2355                        && REGNO (XEXP (src, 0)) == cfa_temp.reg
2356                        && XEXP (src, 1) == stack_pointer_rtx)
2357                 {
2358                   /* Setting a scratch register that we will use instead
2359                      of SP for saving registers to the stack.  */
2360                   gcc_assert (cfa.reg == STACK_POINTER_REGNUM);
2361                   cfa_store.reg = REGNO (dest);
2362                   cfa_store.offset = cfa.offset - cfa_temp.offset;
2363                 }
2364
2365               /* Rule 9 */
2366               else if (GET_CODE (src) == LO_SUM
2367                        && CONST_INT_P (XEXP (src, 1)))
2368                 {
2369                   cfa_temp.reg = REGNO (dest);
2370                   cfa_temp.offset = INTVAL (XEXP (src, 1));
2371                 }
2372               else
2373                 gcc_unreachable ();
2374             }
2375           break;
2376
2377           /* Rule 6 */
2378         case CONST_INT:
2379           cfa_temp.reg = REGNO (dest);
2380           cfa_temp.offset = INTVAL (src);
2381           break;
2382
2383           /* Rule 7 */
2384         case IOR:
2385           gcc_assert (REG_P (XEXP (src, 0))
2386                       && (unsigned) REGNO (XEXP (src, 0)) == cfa_temp.reg
2387                       && CONST_INT_P (XEXP (src, 1)));
2388
2389           if ((unsigned) REGNO (dest) != cfa_temp.reg)
2390             cfa_temp.reg = REGNO (dest);
2391           cfa_temp.offset |= INTVAL (XEXP (src, 1));
2392           break;
2393
2394           /* Skip over HIGH, assuming it will be followed by a LO_SUM,
2395              which will fill in all of the bits.  */
2396           /* Rule 8 */
2397         case HIGH:
2398           break;
2399
2400           /* Rule 15 */
2401         case UNSPEC:
2402         case UNSPEC_VOLATILE:
2403           gcc_assert (targetm.dwarf_handle_frame_unspec);
2404           targetm.dwarf_handle_frame_unspec (label, expr, XINT (src, 1));
2405           return;
2406
2407           /* Rule 16 */
2408         case AND:
2409           /* If this AND operation happens on stack pointer in prologue,
2410              we assume the stack is realigned and we extract the
2411              alignment.  */
2412           if (fde && XEXP (src, 0) == stack_pointer_rtx)
2413             {
2414               gcc_assert (cfa_store.reg == REGNO (XEXP (src, 0)));
2415               fde->stack_realign = 1;
2416               fde->stack_realignment = INTVAL (XEXP (src, 1));
2417               cfa_store.offset = 0;
2418
2419               if (cfa.reg != STACK_POINTER_REGNUM
2420                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2421                 fde->drap_reg = cfa.reg;
2422             }
2423           return;
2424
2425         default:
2426           gcc_unreachable ();
2427         }
2428
2429       def_cfa_1 (label, &cfa);
2430       break;
2431
2432     case MEM:
2433
2434       /* Saving a register to the stack.  Make sure dest is relative to the
2435          CFA register.  */
2436       switch (GET_CODE (XEXP (dest, 0)))
2437         {
2438           /* Rule 10 */
2439           /* With a push.  */
2440         case PRE_MODIFY:
2441           /* We can't handle variable size modifications.  */
2442           gcc_assert (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
2443                       == CONST_INT);
2444           offset = -INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1));
2445
2446           gcc_assert (REGNO (XEXP (XEXP (dest, 0), 0)) == STACK_POINTER_REGNUM
2447                       && cfa_store.reg == STACK_POINTER_REGNUM);
2448
2449           cfa_store.offset += offset;
2450           if (cfa.reg == STACK_POINTER_REGNUM)
2451             cfa.offset = cfa_store.offset;
2452
2453           offset = -cfa_store.offset;
2454           break;
2455
2456           /* Rule 11 */
2457         case PRE_INC:
2458         case PRE_DEC:
2459           offset = GET_MODE_SIZE (GET_MODE (dest));
2460           if (GET_CODE (XEXP (dest, 0)) == PRE_INC)
2461             offset = -offset;
2462
2463           gcc_assert ((REGNO (XEXP (XEXP (dest, 0), 0))
2464                        == STACK_POINTER_REGNUM)
2465                       && cfa_store.reg == STACK_POINTER_REGNUM);
2466
2467           cfa_store.offset += offset;
2468
2469           /* Rule 18: If stack is aligned, we will use FP as a
2470              reference to represent the address of the stored
2471              regiser.  */
2472           if (fde
2473               && fde->stack_realign
2474               && src == hard_frame_pointer_rtx)
2475             {
2476               gcc_assert (cfa.reg != HARD_FRAME_POINTER_REGNUM);
2477               cfa_store.offset = 0;
2478             }
2479
2480           if (cfa.reg == STACK_POINTER_REGNUM)
2481             cfa.offset = cfa_store.offset;
2482
2483           offset = -cfa_store.offset;
2484           break;
2485
2486           /* Rule 12 */
2487           /* With an offset.  */
2488         case PLUS:
2489         case MINUS:
2490         case LO_SUM:
2491           {
2492             int regno;
2493
2494             gcc_assert (CONST_INT_P (XEXP (XEXP (dest, 0), 1))
2495                         && REG_P (XEXP (XEXP (dest, 0), 0)));
2496             offset = INTVAL (XEXP (XEXP (dest, 0), 1));
2497             if (GET_CODE (XEXP (dest, 0)) == MINUS)
2498               offset = -offset;
2499
2500             regno = REGNO (XEXP (XEXP (dest, 0), 0));
2501
2502             if (cfa_store.reg == (unsigned) regno)
2503               offset -= cfa_store.offset;
2504             else
2505               {
2506                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2507                 offset -= cfa_temp.offset;
2508               }
2509           }
2510           break;
2511
2512           /* Rule 13 */
2513           /* Without an offset.  */
2514         case REG:
2515           {
2516             int regno = REGNO (XEXP (dest, 0));
2517
2518             if (cfa_store.reg == (unsigned) regno)
2519               offset = -cfa_store.offset;
2520             else
2521               {
2522                 gcc_assert (cfa_temp.reg == (unsigned) regno);
2523                 offset = -cfa_temp.offset;
2524               }
2525           }
2526           break;
2527
2528           /* Rule 14 */
2529         case POST_INC:
2530           gcc_assert (cfa_temp.reg
2531                       == (unsigned) REGNO (XEXP (XEXP (dest, 0), 0)));
2532           offset = -cfa_temp.offset;
2533           cfa_temp.offset -= GET_MODE_SIZE (GET_MODE (dest));
2534           break;
2535
2536         default:
2537           gcc_unreachable ();
2538         }
2539
2540         /* Rule 17 */
2541         /* If the source operand of this MEM operation is not a
2542            register, basically the source is return address.  Here
2543            we only care how much stack grew and we don't save it.  */
2544       if (!REG_P (src))
2545         break;
2546
2547       if (REGNO (src) != STACK_POINTER_REGNUM
2548           && REGNO (src) != HARD_FRAME_POINTER_REGNUM
2549           && (unsigned) REGNO (src) == cfa.reg)
2550         {
2551           /* We're storing the current CFA reg into the stack.  */
2552
2553           if (cfa.offset == 0)
2554             {
2555               /* Rule 19 */
2556               /* If stack is aligned, putting CFA reg into stack means
2557                  we can no longer use reg + offset to represent CFA.
2558                  Here we use DW_CFA_def_cfa_expression instead.  The
2559                  result of this expression equals to the original CFA
2560                  value.  */
2561               if (fde
2562                   && fde->stack_realign
2563                   && cfa.indirect == 0
2564                   && cfa.reg != HARD_FRAME_POINTER_REGNUM)
2565                 {
2566                   dw_cfa_location cfa_exp;
2567
2568                   gcc_assert (fde->drap_reg == cfa.reg);
2569
2570                   cfa_exp.indirect = 1;
2571                   cfa_exp.reg = HARD_FRAME_POINTER_REGNUM;
2572                   cfa_exp.base_offset = offset;
2573                   cfa_exp.offset = 0;
2574
2575                   fde->drap_reg_saved = 1;
2576
2577                   def_cfa_1 (label, &cfa_exp);
2578                   break;
2579                 }
2580
2581               /* If the source register is exactly the CFA, assume
2582                  we're saving SP like any other register; this happens
2583                  on the ARM.  */
2584               def_cfa_1 (label, &cfa);
2585               queue_reg_save (label, stack_pointer_rtx, NULL_RTX, offset);
2586               break;
2587             }
2588           else
2589             {
2590               /* Otherwise, we'll need to look in the stack to
2591                  calculate the CFA.  */
2592               rtx x = XEXP (dest, 0);
2593
2594               if (!REG_P (x))
2595                 x = XEXP (x, 0);
2596               gcc_assert (REG_P (x));
2597
2598               cfa.reg = REGNO (x);
2599               cfa.base_offset = offset;
2600               cfa.indirect = 1;
2601               def_cfa_1 (label, &cfa);
2602               break;
2603             }
2604         }
2605
2606       def_cfa_1 (label, &cfa);
2607       {
2608         span = targetm.dwarf_register_span (src);
2609
2610         if (!span)
2611           queue_reg_save (label, src, NULL_RTX, offset);
2612         else
2613           {
2614             /* We have a PARALLEL describing where the contents of SRC
2615                live.  Queue register saves for each piece of the
2616                PARALLEL.  */
2617             int par_index;
2618             int limit;
2619             HOST_WIDE_INT span_offset = offset;
2620
2621             gcc_assert (GET_CODE (span) == PARALLEL);
2622
2623             limit = XVECLEN (span, 0);
2624             for (par_index = 0; par_index < limit; par_index++)
2625               {
2626                 rtx elem = XVECEXP (span, 0, par_index);
2627
2628                 queue_reg_save (label, elem, NULL_RTX, span_offset);
2629                 span_offset += GET_MODE_SIZE (GET_MODE (elem));
2630               }
2631           }
2632       }
2633       break;
2634
2635     default:
2636       gcc_unreachable ();
2637     }
2638 }
2639
2640 /* Record call frame debugging information for INSN, which either
2641    sets SP or FP (adjusting how we calculate the frame address) or saves a
2642    register to the stack.  If INSN is NULL_RTX, initialize our state.
2643
2644    If AFTER_P is false, we're being called before the insn is emitted,
2645    otherwise after.  Call instructions get invoked twice.  */
2646
2647 void
2648 dwarf2out_frame_debug (rtx insn, bool after_p)
2649 {
2650   const char *label;
2651   rtx note, n;
2652   bool handled_one = false;
2653
2654   if (insn == NULL_RTX)
2655     {
2656       size_t i;
2657
2658       /* Flush any queued register saves.  */
2659       flush_queued_reg_saves ();
2660
2661       /* Set up state for generating call frame debug info.  */
2662       lookup_cfa (&cfa);
2663       gcc_assert (cfa.reg
2664                   == (unsigned long)DWARF_FRAME_REGNUM (STACK_POINTER_REGNUM));
2665
2666       cfa.reg = STACK_POINTER_REGNUM;
2667       cfa_store = cfa;
2668       cfa_temp.reg = -1;
2669       cfa_temp.offset = 0;
2670
2671       for (i = 0; i < num_regs_saved_in_regs; i++)
2672         {
2673           regs_saved_in_regs[i].orig_reg = NULL_RTX;
2674           regs_saved_in_regs[i].saved_in_reg = NULL_RTX;
2675         }
2676       num_regs_saved_in_regs = 0;
2677
2678       if (barrier_args_size)
2679         {
2680           XDELETEVEC (barrier_args_size);
2681           barrier_args_size = NULL;
2682         }
2683       return;
2684     }
2685
2686   if (!NONJUMP_INSN_P (insn) || clobbers_queued_reg_save (insn))
2687     flush_queued_reg_saves ();
2688
2689   if (!RTX_FRAME_RELATED_P (insn))
2690     {
2691       /* ??? This should be done unconditionally since stack adjustments
2692          matter if the stack pointer is not the CFA register anymore but
2693          is still used to save registers.  */
2694       if (!ACCUMULATE_OUTGOING_ARGS)
2695         dwarf2out_notice_stack_adjust (insn, after_p);
2696       return;
2697     }
2698
2699   label = dwarf2out_cfi_label (false);
2700
2701   for (note = REG_NOTES (insn); note; note = XEXP (note, 1))
2702     switch (REG_NOTE_KIND (note))
2703       {
2704       case REG_FRAME_RELATED_EXPR:
2705         insn = XEXP (note, 0);
2706         goto found;
2707
2708       case REG_CFA_DEF_CFA:
2709         dwarf2out_frame_debug_def_cfa (XEXP (note, 0), label);
2710         handled_one = true;
2711         break;
2712
2713       case REG_CFA_ADJUST_CFA:
2714         n = XEXP (note, 0);
2715         if (n == NULL)
2716           {
2717             n = PATTERN (insn);
2718             if (GET_CODE (n) == PARALLEL)
2719               n = XVECEXP (n, 0, 0);
2720           }
2721         dwarf2out_frame_debug_adjust_cfa (n, label);
2722         handled_one = true;
2723         break;
2724
2725       case REG_CFA_OFFSET:
2726         n = XEXP (note, 0);
2727         if (n == NULL)
2728           n = single_set (insn);
2729         dwarf2out_frame_debug_cfa_offset (n, label);
2730         handled_one = true;
2731         break;
2732
2733       case REG_CFA_REGISTER:
2734         n = XEXP (note, 0);
2735         if (n == NULL)
2736           {
2737             n = PATTERN (insn);
2738             if (GET_CODE (n) == PARALLEL)
2739               n = XVECEXP (n, 0, 0);
2740           }
2741         dwarf2out_frame_debug_cfa_register (n, label);
2742         handled_one = true;
2743         break;
2744
2745       case REG_CFA_RESTORE:
2746         n = XEXP (note, 0);
2747         if (n == NULL)
2748           {
2749             n = PATTERN (insn);
2750             if (GET_CODE (n) == PARALLEL)
2751               n = XVECEXP (n, 0, 0);
2752             n = XEXP (n, 0);
2753           }
2754         dwarf2out_frame_debug_cfa_restore (n, label);
2755         handled_one = true;
2756         break;
2757
2758       case REG_CFA_SET_VDRAP:
2759         n = XEXP (note, 0);
2760         if (REG_P (n))
2761           {
2762             dw_fde_ref fde = current_fde ();
2763             if (fde)
2764               {
2765                 gcc_assert (fde->vdrap_reg == INVALID_REGNUM);
2766                 if (REG_P (n))
2767                   fde->vdrap_reg = REGNO (n);
2768               }
2769           }
2770         handled_one = true;
2771         break;
2772
2773       default:
2774         break;
2775       }
2776   if (handled_one)
2777     return;
2778
2779   insn = PATTERN (insn);
2780  found:
2781   dwarf2out_frame_debug_expr (insn, label);
2782 }
2783
2784 /* Determine if we need to save and restore CFI information around this
2785    epilogue.  If SIBCALL is true, then this is a sibcall epilogue.  If
2786    we do need to save/restore, then emit the save now, and insert a
2787    NOTE_INSN_CFA_RESTORE_STATE at the appropriate place in the stream.  */
2788
2789 void
2790 dwarf2out_begin_epilogue (rtx insn)
2791 {
2792   bool saw_frp = false;
2793   rtx i;
2794
2795   /* Scan forward to the return insn, noticing if there are possible
2796      frame related insns.  */
2797   for (i = NEXT_INSN (insn); i ; i = NEXT_INSN (i))
2798     {
2799       if (!INSN_P (i))
2800         continue;
2801
2802       /* Look for both regular and sibcalls to end the block.  */
2803       if (returnjump_p (i))
2804         break;
2805       if (CALL_P (i) && SIBLING_CALL_P (i))
2806         break;
2807
2808       if (GET_CODE (PATTERN (i)) == SEQUENCE)
2809         {
2810           int idx;
2811           rtx seq = PATTERN (i);
2812
2813           if (returnjump_p (XVECEXP (seq, 0, 0)))
2814             break;
2815           if (CALL_P (XVECEXP (seq, 0, 0))
2816               && SIBLING_CALL_P (XVECEXP (seq, 0, 0)))
2817             break;
2818
2819           for (idx = 0; idx < XVECLEN (seq, 0); idx++)
2820             if (RTX_FRAME_RELATED_P (XVECEXP (seq, 0, idx)))
2821               saw_frp = true;
2822         }
2823
2824       if (RTX_FRAME_RELATED_P (i))
2825         saw_frp = true;
2826     }
2827
2828   /* If the port doesn't emit epilogue unwind info, we don't need a
2829      save/restore pair.  */
2830   if (!saw_frp)
2831     return;
2832
2833   /* Otherwise, search forward to see if the return insn was the last
2834      basic block of the function.  If so, we don't need save/restore.  */
2835   gcc_assert (i != NULL);
2836   i = next_real_insn (i);
2837   if (i == NULL)
2838     return;
2839
2840   /* Insert the restore before that next real insn in the stream, and before
2841      a potential NOTE_INSN_EPILOGUE_BEG -- we do need these notes to be
2842      properly nested.  This should be after any label or alignment.  This
2843      will be pushed into the CFI stream by the function below.  */
2844   while (1)
2845     {
2846       rtx p = PREV_INSN (i);
2847       if (!NOTE_P (p))
2848         break;
2849       if (NOTE_KIND (p) == NOTE_INSN_BASIC_BLOCK)
2850         break;
2851       i = p;
2852     }
2853   emit_note_before (NOTE_INSN_CFA_RESTORE_STATE, i);
2854
2855   emit_cfa_remember = true;
2856
2857   /* And emulate the state save.  */
2858   gcc_assert (!cfa_remember.in_use);
2859   cfa_remember = cfa;
2860   cfa_remember.in_use = 1;
2861 }
2862
2863 /* A "subroutine" of dwarf2out_begin_epilogue.  Emit the restore required.  */
2864
2865 void
2866 dwarf2out_frame_debug_restore_state (void)
2867 {
2868   dw_cfi_ref cfi = new_cfi ();
2869   const char *label = dwarf2out_cfi_label (false);
2870
2871   cfi->dw_cfi_opc = DW_CFA_restore_state;
2872   add_fde_cfi (label, cfi);
2873
2874   gcc_assert (cfa_remember.in_use);
2875   cfa = cfa_remember;
2876   cfa_remember.in_use = 0;
2877 }
2878
2879 #endif
2880
2881 /* Describe for the GTY machinery what parts of dw_cfi_oprnd1 are used.  */
2882 static enum dw_cfi_oprnd_type dw_cfi_oprnd1_desc
2883  (enum dwarf_call_frame_info cfi);
2884
2885 static enum dw_cfi_oprnd_type
2886 dw_cfi_oprnd1_desc (enum dwarf_call_frame_info cfi)
2887 {
2888   switch (cfi)
2889     {
2890     case DW_CFA_nop:
2891     case DW_CFA_GNU_window_save:
2892     case DW_CFA_remember_state:
2893     case DW_CFA_restore_state:
2894       return dw_cfi_oprnd_unused;
2895
2896     case DW_CFA_set_loc:
2897     case DW_CFA_advance_loc1:
2898     case DW_CFA_advance_loc2:
2899     case DW_CFA_advance_loc4:
2900     case DW_CFA_MIPS_advance_loc8:
2901       return dw_cfi_oprnd_addr;
2902
2903     case DW_CFA_offset:
2904     case DW_CFA_offset_extended:
2905     case DW_CFA_def_cfa:
2906     case DW_CFA_offset_extended_sf:
2907     case DW_CFA_def_cfa_sf:
2908     case DW_CFA_restore:
2909     case DW_CFA_restore_extended:
2910     case DW_CFA_undefined:
2911     case DW_CFA_same_value:
2912     case DW_CFA_def_cfa_register:
2913     case DW_CFA_register:
2914     case DW_CFA_expression:
2915       return dw_cfi_oprnd_reg_num;
2916
2917     case DW_CFA_def_cfa_offset:
2918     case DW_CFA_GNU_args_size:
2919     case DW_CFA_def_cfa_offset_sf:
2920       return dw_cfi_oprnd_offset;
2921
2922     case DW_CFA_def_cfa_expression:
2923       return dw_cfi_oprnd_loc;
2924
2925     default:
2926       gcc_unreachable ();
2927     }
2928 }
2929
2930 /* Describe for the GTY machinery what parts of dw_cfi_oprnd2 are used.  */
2931 static enum dw_cfi_oprnd_type dw_cfi_oprnd2_desc
2932  (enum dwarf_call_frame_info cfi);
2933
2934 static enum dw_cfi_oprnd_type
2935 dw_cfi_oprnd2_desc (enum dwarf_call_frame_info cfi)
2936 {
2937   switch (cfi)
2938     {
2939     case DW_CFA_def_cfa:
2940     case DW_CFA_def_cfa_sf:
2941     case DW_CFA_offset:
2942     case DW_CFA_offset_extended_sf:
2943     case DW_CFA_offset_extended:
2944       return dw_cfi_oprnd_offset;
2945
2946     case DW_CFA_register:
2947       return dw_cfi_oprnd_reg_num;
2948
2949     case DW_CFA_expression:
2950       return dw_cfi_oprnd_loc;
2951
2952     default:
2953       return dw_cfi_oprnd_unused;
2954     }
2955 }
2956
2957 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
2958
2959 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
2960    switch to the data section instead, and write out a synthetic start label
2961    for collect2 the first time around.  */
2962
2963 static void
2964 switch_to_eh_frame_section (bool back)
2965 {
2966   tree label;
2967
2968 #ifdef EH_FRAME_SECTION_NAME
2969   if (eh_frame_section == 0)
2970     {
2971       int flags;
2972
2973       if (EH_TABLES_CAN_BE_READ_ONLY)
2974         {
2975           int fde_encoding;
2976           int per_encoding;
2977           int lsda_encoding;
2978
2979           fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1,
2980                                                        /*global=*/0);
2981           per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2,
2982                                                        /*global=*/1);
2983           lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0,
2984                                                         /*global=*/0);
2985           flags = ((! flag_pic
2986                     || ((fde_encoding & 0x70) != DW_EH_PE_absptr
2987                         && (fde_encoding & 0x70) != DW_EH_PE_aligned
2988                         && (per_encoding & 0x70) != DW_EH_PE_absptr
2989                         && (per_encoding & 0x70) != DW_EH_PE_aligned
2990                         && (lsda_encoding & 0x70) != DW_EH_PE_absptr
2991                         && (lsda_encoding & 0x70) != DW_EH_PE_aligned))
2992                    ? 0 : SECTION_WRITE);
2993         }
2994       else
2995         flags = SECTION_WRITE;
2996       eh_frame_section = get_section (EH_FRAME_SECTION_NAME, flags, NULL);
2997     }
2998 #endif
2999
3000   if (eh_frame_section)
3001     switch_to_section (eh_frame_section);
3002   else
3003     {
3004       /* We have no special eh_frame section.  Put the information in
3005          the data section and emit special labels to guide collect2.  */
3006       switch_to_section (data_section);
3007
3008       if (!back)
3009         {
3010           label = get_file_function_name ("F");
3011           ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3012           targetm.asm_out.globalize_label (asm_out_file,
3013                                            IDENTIFIER_POINTER (label));
3014           ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (label));
3015         }
3016     }
3017 }
3018
3019 /* Switch [BACK] to the eh or debug frame table section, depending on
3020    FOR_EH.  */
3021
3022 static void
3023 switch_to_frame_table_section (int for_eh, bool back)
3024 {
3025   if (for_eh)
3026     switch_to_eh_frame_section (back);
3027   else
3028     {
3029       if (!debug_frame_section)
3030         debug_frame_section = get_section (DEBUG_FRAME_SECTION,
3031                                            SECTION_DEBUG, NULL);
3032       switch_to_section (debug_frame_section);
3033     }
3034 }
3035
3036 /* Output a Call Frame Information opcode and its operand(s).  */
3037
3038 static void
3039 output_cfi (dw_cfi_ref cfi, dw_fde_ref fde, int for_eh)
3040 {
3041   unsigned long r;
3042   HOST_WIDE_INT off;
3043
3044   if (cfi->dw_cfi_opc == DW_CFA_advance_loc)
3045     dw2_asm_output_data (1, (cfi->dw_cfi_opc
3046                              | (cfi->dw_cfi_oprnd1.dw_cfi_offset & 0x3f)),
3047                          "DW_CFA_advance_loc " HOST_WIDE_INT_PRINT_HEX,
3048                          ((unsigned HOST_WIDE_INT)
3049                           cfi->dw_cfi_oprnd1.dw_cfi_offset));
3050   else if (cfi->dw_cfi_opc == DW_CFA_offset)
3051     {
3052       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3053       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3054                            "DW_CFA_offset, column 0x%lx", r);
3055       off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3056       dw2_asm_output_data_uleb128 (off, NULL);
3057     }
3058   else if (cfi->dw_cfi_opc == DW_CFA_restore)
3059     {
3060       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3061       dw2_asm_output_data (1, (cfi->dw_cfi_opc | (r & 0x3f)),
3062                            "DW_CFA_restore, column 0x%lx", r);
3063     }
3064   else
3065     {
3066       dw2_asm_output_data (1, cfi->dw_cfi_opc,
3067                            "%s", dwarf_cfi_name (cfi->dw_cfi_opc));
3068
3069       switch (cfi->dw_cfi_opc)
3070         {
3071         case DW_CFA_set_loc:
3072           if (for_eh)
3073             dw2_asm_output_encoded_addr_rtx (
3074                 ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0),
3075                 gen_rtx_SYMBOL_REF (Pmode, cfi->dw_cfi_oprnd1.dw_cfi_addr),
3076                 false, NULL);
3077           else
3078             dw2_asm_output_addr (DWARF2_ADDR_SIZE,
3079                                  cfi->dw_cfi_oprnd1.dw_cfi_addr, NULL);
3080           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3081           break;
3082
3083         case DW_CFA_advance_loc1:
3084           dw2_asm_output_delta (1, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3085                                 fde->dw_fde_current_label, NULL);
3086           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3087           break;
3088
3089         case DW_CFA_advance_loc2:
3090           dw2_asm_output_delta (2, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3091                                 fde->dw_fde_current_label, NULL);
3092           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3093           break;
3094
3095         case DW_CFA_advance_loc4:
3096           dw2_asm_output_delta (4, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3097                                 fde->dw_fde_current_label, NULL);
3098           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3099           break;
3100
3101         case DW_CFA_MIPS_advance_loc8:
3102           dw2_asm_output_delta (8, cfi->dw_cfi_oprnd1.dw_cfi_addr,
3103                                 fde->dw_fde_current_label, NULL);
3104           fde->dw_fde_current_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
3105           break;
3106
3107         case DW_CFA_offset_extended:
3108           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3109           dw2_asm_output_data_uleb128 (r, NULL);
3110           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3111           dw2_asm_output_data_uleb128 (off, NULL);
3112           break;
3113
3114         case DW_CFA_def_cfa:
3115           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3116           dw2_asm_output_data_uleb128 (r, NULL);
3117           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd2.dw_cfi_offset, NULL);
3118           break;
3119
3120         case DW_CFA_offset_extended_sf:
3121           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3122           dw2_asm_output_data_uleb128 (r, NULL);
3123           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3124           dw2_asm_output_data_sleb128 (off, NULL);
3125           break;
3126
3127         case DW_CFA_def_cfa_sf:
3128           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3129           dw2_asm_output_data_uleb128 (r, NULL);
3130           off = div_data_align (cfi->dw_cfi_oprnd2.dw_cfi_offset);
3131           dw2_asm_output_data_sleb128 (off, NULL);
3132           break;
3133
3134         case DW_CFA_restore_extended:
3135         case DW_CFA_undefined:
3136         case DW_CFA_same_value:
3137         case DW_CFA_def_cfa_register:
3138           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3139           dw2_asm_output_data_uleb128 (r, NULL);
3140           break;
3141
3142         case DW_CFA_register:
3143           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, for_eh);
3144           dw2_asm_output_data_uleb128 (r, NULL);
3145           r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, for_eh);
3146           dw2_asm_output_data_uleb128 (r, NULL);
3147           break;
3148
3149         case DW_CFA_def_cfa_offset:
3150         case DW_CFA_GNU_args_size:
3151           dw2_asm_output_data_uleb128 (cfi->dw_cfi_oprnd1.dw_cfi_offset, NULL);
3152           break;
3153
3154         case DW_CFA_def_cfa_offset_sf:
3155           off = div_data_align (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3156           dw2_asm_output_data_sleb128 (off, NULL);
3157           break;
3158
3159         case DW_CFA_GNU_window_save:
3160           break;
3161
3162         case DW_CFA_def_cfa_expression:
3163         case DW_CFA_expression:
3164           output_cfa_loc (cfi);
3165           break;
3166
3167         case DW_CFA_GNU_negative_offset_extended:
3168           /* Obsoleted by DW_CFA_offset_extended_sf.  */
3169           gcc_unreachable ();
3170
3171         default:
3172           break;
3173         }
3174     }
3175 }
3176
3177 /* Similar, but do it via assembler directives instead.  */
3178
3179 static void
3180 output_cfi_directive (dw_cfi_ref cfi)
3181 {
3182   unsigned long r, r2;
3183
3184   switch (cfi->dw_cfi_opc)
3185     {
3186     case DW_CFA_advance_loc:
3187     case DW_CFA_advance_loc1:
3188     case DW_CFA_advance_loc2:
3189     case DW_CFA_advance_loc4:
3190     case DW_CFA_MIPS_advance_loc8:
3191     case DW_CFA_set_loc:
3192       /* Should only be created by add_fde_cfi in a code path not
3193          followed when emitting via directives.  The assembler is
3194          going to take care of this for us.  */
3195       gcc_unreachable ();
3196
3197     case DW_CFA_offset:
3198     case DW_CFA_offset_extended:
3199     case DW_CFA_offset_extended_sf:
3200       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3201       fprintf (asm_out_file, "\t.cfi_offset %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3202                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3203       break;
3204
3205     case DW_CFA_restore:
3206     case DW_CFA_restore_extended:
3207       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3208       fprintf (asm_out_file, "\t.cfi_restore %lu\n", r);
3209       break;
3210
3211     case DW_CFA_undefined:
3212       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3213       fprintf (asm_out_file, "\t.cfi_undefined %lu\n", r);
3214       break;
3215
3216     case DW_CFA_same_value:
3217       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3218       fprintf (asm_out_file, "\t.cfi_same_value %lu\n", r);
3219       break;
3220
3221     case DW_CFA_def_cfa:
3222     case DW_CFA_def_cfa_sf:
3223       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3224       fprintf (asm_out_file, "\t.cfi_def_cfa %lu, "HOST_WIDE_INT_PRINT_DEC"\n",
3225                r, cfi->dw_cfi_oprnd2.dw_cfi_offset);
3226       break;
3227
3228     case DW_CFA_def_cfa_register:
3229       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3230       fprintf (asm_out_file, "\t.cfi_def_cfa_register %lu\n", r);
3231       break;
3232
3233     case DW_CFA_register:
3234       r = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd1.dw_cfi_reg_num, 1);
3235       r2 = DWARF2_FRAME_REG_OUT (cfi->dw_cfi_oprnd2.dw_cfi_reg_num, 1);
3236       fprintf (asm_out_file, "\t.cfi_register %lu, %lu\n", r, r2);
3237       break;
3238
3239     case DW_CFA_def_cfa_offset:
3240     case DW_CFA_def_cfa_offset_sf:
3241       fprintf (asm_out_file, "\t.cfi_def_cfa_offset "
3242                HOST_WIDE_INT_PRINT_DEC"\n",
3243                cfi->dw_cfi_oprnd1.dw_cfi_offset);
3244       break;
3245
3246     case DW_CFA_remember_state:
3247       fprintf (asm_out_file, "\t.cfi_remember_state\n");
3248       break;
3249     case DW_CFA_restore_state:
3250       fprintf (asm_out_file, "\t.cfi_restore_state\n");
3251       break;
3252
3253     case DW_CFA_GNU_args_size:
3254       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", DW_CFA_GNU_args_size);
3255       dw2_asm_output_data_uleb128_raw (cfi->dw_cfi_oprnd1.dw_cfi_offset);
3256       if (flag_debug_asm)
3257         fprintf (asm_out_file, "\t%s args_size "HOST_WIDE_INT_PRINT_DEC,
3258                  ASM_COMMENT_START, cfi->dw_cfi_oprnd1.dw_cfi_offset);
3259       fputc ('\n', asm_out_file);
3260       break;
3261
3262     case DW_CFA_GNU_window_save:
3263       fprintf (asm_out_file, "\t.cfi_window_save\n");
3264       break;
3265
3266     case DW_CFA_def_cfa_expression:
3267     case DW_CFA_expression:
3268       fprintf (asm_out_file, "\t.cfi_escape 0x%x,", cfi->dw_cfi_opc);
3269       output_cfa_loc_raw (cfi);
3270       fputc ('\n', asm_out_file);
3271       break;
3272
3273     default:
3274       gcc_unreachable ();
3275     }
3276 }
3277
3278 DEF_VEC_P (dw_cfi_ref);
3279 DEF_VEC_ALLOC_P (dw_cfi_ref, heap);
3280
3281 /* Output CFIs to bring current FDE to the same state as after executing
3282    CFIs in CFI chain.  DO_CFI_ASM is true if .cfi_* directives shall
3283    be emitted, false otherwise.  If it is false, FDE and FOR_EH are the
3284    other arguments to pass to output_cfi.  */
3285
3286 static void
3287 output_cfis (dw_cfi_ref cfi, bool do_cfi_asm, dw_fde_ref fde, bool for_eh)
3288 {
3289   struct dw_cfi_struct cfi_buf;
3290   dw_cfi_ref cfi2;
3291   dw_cfi_ref cfi_args_size = NULL, cfi_cfa = NULL, cfi_cfa_offset = NULL;
3292   VEC (dw_cfi_ref, heap) *regs = VEC_alloc (dw_cfi_ref, heap, 32);
3293   unsigned int len, idx;
3294
3295   for (;; cfi = cfi->dw_cfi_next)
3296     switch (cfi ? cfi->dw_cfi_opc : DW_CFA_nop)
3297       {
3298       case DW_CFA_advance_loc:
3299       case DW_CFA_advance_loc1:
3300       case DW_CFA_advance_loc2:
3301       case DW_CFA_advance_loc4:
3302       case DW_CFA_MIPS_advance_loc8:
3303       case DW_CFA_set_loc:
3304         /* All advances should be ignored.  */
3305         break;
3306       case DW_CFA_remember_state:
3307         {
3308           dw_cfi_ref args_size = cfi_args_size;
3309
3310           /* Skip everything between .cfi_remember_state and
3311              .cfi_restore_state.  */
3312           for (cfi2 = cfi->dw_cfi_next; cfi2; cfi2 = cfi2->dw_cfi_next)
3313             if (cfi2->dw_cfi_opc == DW_CFA_restore_state)
3314               break;
3315             else if (cfi2->dw_cfi_opc == DW_CFA_GNU_args_size)
3316               args_size = cfi2;
3317             else
3318               gcc_assert (cfi2->dw_cfi_opc != DW_CFA_remember_state);
3319
3320           if (cfi2 == NULL)
3321             goto flush_all;
3322           else
3323             {
3324               cfi = cfi2;
3325               cfi_args_size = args_size;
3326             }
3327           break;
3328         }
3329       case DW_CFA_GNU_args_size:
3330         cfi_args_size = cfi;
3331         break;
3332       case DW_CFA_GNU_window_save:
3333         goto flush_all;
3334       case DW_CFA_offset:
3335       case DW_CFA_offset_extended:
3336       case DW_CFA_offset_extended_sf:
3337       case DW_CFA_restore:
3338       case DW_CFA_restore_extended:
3339       case DW_CFA_undefined:
3340       case DW_CFA_same_value:
3341       case DW_CFA_register:
3342       case DW_CFA_val_offset:
3343       case DW_CFA_val_offset_sf:
3344       case DW_CFA_expression:
3345       case DW_CFA_val_expression:
3346       case DW_CFA_GNU_negative_offset_extended:
3347         if (VEC_length (dw_cfi_ref, regs) <= cfi->dw_cfi_oprnd1.dw_cfi_reg_num)
3348           VEC_safe_grow_cleared (dw_cfi_ref, heap, regs,
3349                                  cfi->dw_cfi_oprnd1.dw_cfi_reg_num + 1);
3350         VEC_replace (dw_cfi_ref, regs, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, cfi);
3351         break;
3352       case DW_CFA_def_cfa:
3353       case DW_CFA_def_cfa_sf:
3354       case DW_CFA_def_cfa_expression:
3355         cfi_cfa = cfi;
3356         cfi_cfa_offset = cfi;
3357         break;
3358       case DW_CFA_def_cfa_register:
3359         cfi_cfa = cfi;
3360         break;
3361       case DW_CFA_def_cfa_offset:
3362       case DW_CFA_def_cfa_offset_sf:
3363         cfi_cfa_offset = cfi;
3364         break;
3365       case DW_CFA_nop:
3366         gcc_assert (cfi == NULL);
3367       flush_all:
3368         len = VEC_length (dw_cfi_ref, regs);
3369         for (idx = 0; idx < len; idx++)
3370           {
3371             cfi2 = VEC_replace (dw_cfi_ref, regs, idx, NULL);
3372             if (cfi2 != NULL
3373                 && cfi2->dw_cfi_opc != DW_CFA_restore
3374                 && cfi2->dw_cfi_opc != DW_CFA_restore_extended)
3375               {
3376                 if (do_cfi_asm)
3377                   output_cfi_directive (cfi2);
3378                 else
3379                   output_cfi (cfi2, fde, for_eh);
3380               }
3381           }
3382         if (cfi_cfa && cfi_cfa_offset && cfi_cfa_offset != cfi_cfa)
3383           {
3384             gcc_assert (cfi_cfa->dw_cfi_opc != DW_CFA_def_cfa_expression);
3385             cfi_buf = *cfi_cfa;
3386             switch (cfi_cfa_offset->dw_cfi_opc)
3387               {
3388               case DW_CFA_def_cfa_offset:
3389                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa;
3390                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3391                 break;
3392               case DW_CFA_def_cfa_offset_sf:
3393                 cfi_buf.dw_cfi_opc = DW_CFA_def_cfa_sf;
3394                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd1;
3395                 break;
3396               case DW_CFA_def_cfa:
3397               case DW_CFA_def_cfa_sf:
3398                 cfi_buf.dw_cfi_opc = cfi_cfa_offset->dw_cfi_opc;
3399                 cfi_buf.dw_cfi_oprnd2 = cfi_cfa_offset->dw_cfi_oprnd2;
3400                 break;
3401               default:
3402                 gcc_unreachable ();
3403               }
3404             cfi_cfa = &cfi_buf;
3405           }
3406         else if (cfi_cfa_offset)
3407           cfi_cfa = cfi_cfa_offset;
3408         if (cfi_cfa)
3409           {
3410             if (do_cfi_asm)
3411               output_cfi_directive (cfi_cfa);
3412             else
3413               output_cfi (cfi_cfa, fde, for_eh);
3414           }
3415         cfi_cfa = NULL;
3416         cfi_cfa_offset = NULL;
3417         if (cfi_args_size
3418             && cfi_args_size->dw_cfi_oprnd1.dw_cfi_offset)
3419           {
3420             if (do_cfi_asm)
3421               output_cfi_directive (cfi_args_size);
3422             else
3423               output_cfi (cfi_args_size, fde, for_eh);
3424           }
3425         cfi_args_size = NULL;
3426         if (cfi == NULL)
3427           {
3428             VEC_free (dw_cfi_ref, heap, regs);
3429             return;
3430           }
3431         else if (do_cfi_asm)
3432           output_cfi_directive (cfi);
3433         else
3434           output_cfi (cfi, fde, for_eh);
3435         break;
3436       default:
3437         gcc_unreachable ();
3438     }
3439 }
3440
3441 /* Output one FDE.  */
3442
3443 static void
3444 output_fde (dw_fde_ref fde, bool for_eh, bool second,
3445             char *section_start_label, int fde_encoding, char *augmentation,
3446             bool any_lsda_needed, int lsda_encoding)
3447 {
3448   const char *begin, *end;
3449   static unsigned int j;
3450   char l1[20], l2[20];
3451   dw_cfi_ref cfi;
3452
3453   targetm.asm_out.unwind_label (asm_out_file, fde->decl, for_eh,
3454                                 /* empty */ 0);
3455   targetm.asm_out.internal_label (asm_out_file, FDE_LABEL,
3456                                   for_eh + j);
3457   ASM_GENERATE_INTERNAL_LABEL (l1, FDE_AFTER_SIZE_LABEL, for_eh + j);
3458   ASM_GENERATE_INTERNAL_LABEL (l2, FDE_END_LABEL, for_eh + j);
3459   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3460     dw2_asm_output_data (4, 0xffffffff, "Initial length escape value"
3461                          " indicating 64-bit DWARF extension");
3462   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3463                         "FDE Length");
3464   ASM_OUTPUT_LABEL (asm_out_file, l1);
3465
3466   if (for_eh)
3467     dw2_asm_output_delta (4, l1, section_start_label, "FDE CIE offset");
3468   else
3469     dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
3470                            debug_frame_section, "FDE CIE offset");
3471
3472   if (!fde->dw_fde_switched_sections)
3473     {
3474       begin = fde->dw_fde_begin;
3475       end = fde->dw_fde_end;
3476     }
3477   else
3478     {
3479       /* For the first section, prefer dw_fde_begin over
3480          dw_fde_{hot,cold}_section_label, as the latter
3481          might be separated from the real start of the
3482          function by alignment padding.  */
3483       if (!second)
3484         begin = fde->dw_fde_begin;
3485       else if (fde->dw_fde_switched_cold_to_hot)
3486         begin = fde->dw_fde_hot_section_label;
3487       else
3488         begin = fde->dw_fde_unlikely_section_label;
3489       if (second ^ fde->dw_fde_switched_cold_to_hot)
3490         end = fde->dw_fde_unlikely_section_end_label;
3491       else
3492         end = fde->dw_fde_hot_section_end_label;
3493     }
3494
3495   if (for_eh)
3496     {
3497       rtx sym_ref = gen_rtx_SYMBOL_REF (Pmode, begin);
3498       SYMBOL_REF_FLAGS (sym_ref) |= SYMBOL_FLAG_LOCAL;
3499       dw2_asm_output_encoded_addr_rtx (fde_encoding, sym_ref, false,
3500                                        "FDE initial location");
3501       dw2_asm_output_delta (size_of_encoded_value (fde_encoding),
3502                             end, begin, "FDE address range");
3503     }
3504   else
3505     {
3506       dw2_asm_output_addr (DWARF2_ADDR_SIZE, begin, "FDE initial location");
3507       dw2_asm_output_delta (DWARF2_ADDR_SIZE, end, begin, "FDE address range");
3508     }
3509
3510   if (augmentation[0])
3511     {
3512       if (any_lsda_needed)
3513         {
3514           int size = size_of_encoded_value (lsda_encoding);
3515
3516           if (lsda_encoding == DW_EH_PE_aligned)
3517             {
3518               int offset = (  4         /* Length */
3519                             + 4         /* CIE offset */
3520                             + 2 * size_of_encoded_value (fde_encoding)
3521                             + 1         /* Augmentation size */ );
3522               int pad = -offset & (PTR_SIZE - 1);
3523
3524               size += pad;
3525               gcc_assert (size_of_uleb128 (size) == 1);
3526             }
3527
3528           dw2_asm_output_data_uleb128 (size, "Augmentation size");
3529
3530           if (fde->uses_eh_lsda)
3531             {
3532               ASM_GENERATE_INTERNAL_LABEL (l1, second ? "LLSDAC" : "LLSDA",
3533                                            fde->funcdef_number);
3534               dw2_asm_output_encoded_addr_rtx (lsda_encoding,
3535                                                gen_rtx_SYMBOL_REF (Pmode, l1),
3536                                                false,
3537                                                "Language Specific Data Area");
3538             }
3539           else
3540             {
3541               if (lsda_encoding == DW_EH_PE_aligned)
3542                 ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
3543               dw2_asm_output_data (size_of_encoded_value (lsda_encoding), 0,
3544                                    "Language Specific Data Area (none)");
3545             }
3546         }
3547       else
3548         dw2_asm_output_data_uleb128 (0, "Augmentation size");
3549     }
3550
3551   /* Loop through the Call Frame Instructions associated with
3552      this FDE.  */
3553   fde->dw_fde_current_label = begin;
3554   if (!fde->dw_fde_switched_sections)
3555     for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3556       output_cfi (cfi, fde, for_eh);
3557   else if (!second)
3558     {
3559       if (fde->dw_fde_switch_cfi)
3560         for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
3561           {
3562             output_cfi (cfi, fde, for_eh);
3563             if (cfi == fde->dw_fde_switch_cfi)
3564               break;
3565           }
3566     }
3567   else
3568     {
3569       dw_cfi_ref cfi_next = fde->dw_fde_cfi;
3570
3571       if (fde->dw_fde_switch_cfi)
3572         {
3573           cfi_next = fde->dw_fde_switch_cfi->dw_cfi_next;
3574           fde->dw_fde_switch_cfi->dw_cfi_next = NULL;
3575           output_cfis (fde->dw_fde_cfi, false, fde, for_eh);
3576           fde->dw_fde_switch_cfi->dw_cfi_next = cfi_next;
3577         }
3578       for (cfi = cfi_next; cfi != NULL; cfi = cfi->dw_cfi_next)
3579         output_cfi (cfi, fde, for_eh);
3580     }
3581
3582   /* If we are to emit a ref/link from function bodies to their frame tables,
3583      do it now.  This is typically performed to make sure that tables
3584      associated with functions are dragged with them and not discarded in
3585      garbage collecting links. We need to do this on a per function basis to
3586      cope with -ffunction-sections.  */
3587
3588 #ifdef ASM_OUTPUT_DWARF_TABLE_REF
3589   /* Switch to the function section, emit the ref to the tables, and
3590      switch *back* into the table section.  */
3591   switch_to_section (function_section (fde->decl));
3592   ASM_OUTPUT_DWARF_TABLE_REF (section_start_label);
3593   switch_to_frame_table_section (for_eh, true);
3594 #endif
3595
3596   /* Pad the FDE out to an address sized boundary.  */
3597   ASM_OUTPUT_ALIGN (asm_out_file,
3598                     floor_log2 ((for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE)));
3599   ASM_OUTPUT_LABEL (asm_out_file, l2);
3600
3601   j += 2;
3602 }
3603
3604 /* Output the call frame information used to record information
3605    that relates to calculating the frame pointer, and records the
3606    location of saved registers.  */
3607
3608 static void
3609 output_call_frame_info (int for_eh)
3610 {
3611   unsigned int i;
3612   dw_fde_ref fde;
3613   dw_cfi_ref cfi;
3614   char l1[20], l2[20], section_start_label[20];
3615   bool any_lsda_needed = false;
3616   char augmentation[6];
3617   int augmentation_size;
3618   int fde_encoding = DW_EH_PE_absptr;
3619   int per_encoding = DW_EH_PE_absptr;
3620   int lsda_encoding = DW_EH_PE_absptr;
3621   int return_reg;
3622   rtx personality = NULL;
3623   int dw_cie_version;
3624
3625   /* Don't emit a CIE if there won't be any FDEs.  */
3626   if (fde_table_in_use == 0)
3627     return;
3628
3629   /* Nothing to do if the assembler's doing it all.  */
3630   if (dwarf2out_do_cfi_asm ())
3631     return;
3632
3633   /* If we make FDEs linkonce, we may have to emit an empty label for
3634      an FDE that wouldn't otherwise be emitted.  We want to avoid
3635      having an FDE kept around when the function it refers to is
3636      discarded.  Example where this matters: a primary function
3637      template in C++ requires EH information, but an explicit
3638      specialization doesn't.  */
3639   if (TARGET_USES_WEAK_UNWIND_INFO
3640       && ! flag_asynchronous_unwind_tables
3641       && flag_exceptions
3642       && for_eh)
3643     for (i = 0; i < fde_table_in_use; i++)
3644       if ((fde_table[i].nothrow || fde_table[i].all_throwers_are_sibcalls)
3645           && !fde_table[i].uses_eh_lsda
3646           && ! DECL_WEAK (fde_table[i].decl))
3647         targetm.asm_out.unwind_label (asm_out_file, fde_table[i].decl,
3648                                       for_eh, /* empty */ 1);
3649
3650   /* If we don't have any functions we'll want to unwind out of, don't
3651      emit any EH unwind information.  Note that if exceptions aren't
3652      enabled, we won't have collected nothrow information, and if we
3653      asked for asynchronous tables, we always want this info.  */
3654   if (for_eh)
3655     {
3656       bool any_eh_needed = !flag_exceptions || flag_asynchronous_unwind_tables;
3657
3658       for (i = 0; i < fde_table_in_use; i++)
3659         if (fde_table[i].uses_eh_lsda)
3660           any_eh_needed = any_lsda_needed = true;
3661         else if (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3662           any_eh_needed = true;
3663         else if (! fde_table[i].nothrow
3664                  && ! fde_table[i].all_throwers_are_sibcalls)
3665           any_eh_needed = true;
3666
3667       if (! any_eh_needed)
3668         return;
3669     }
3670
3671   /* We're going to be generating comments, so turn on app.  */
3672   if (flag_debug_asm)
3673     app_enable ();
3674
3675   /* Switch to the proper frame section, first time.  */
3676   switch_to_frame_table_section (for_eh, false);
3677
3678   ASM_GENERATE_INTERNAL_LABEL (section_start_label, FRAME_BEGIN_LABEL, for_eh);
3679   ASM_OUTPUT_LABEL (asm_out_file, section_start_label);
3680
3681   /* Output the CIE.  */
3682   ASM_GENERATE_INTERNAL_LABEL (l1, CIE_AFTER_SIZE_LABEL, for_eh);
3683   ASM_GENERATE_INTERNAL_LABEL (l2, CIE_END_LABEL, for_eh);
3684   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4 && !for_eh)
3685     dw2_asm_output_data (4, 0xffffffff,
3686       "Initial length escape value indicating 64-bit DWARF extension");
3687   dw2_asm_output_delta (for_eh ? 4 : DWARF_OFFSET_SIZE, l2, l1,
3688                         "Length of Common Information Entry");
3689   ASM_OUTPUT_LABEL (asm_out_file, l1);
3690
3691   /* Now that the CIE pointer is PC-relative for EH,
3692      use 0 to identify the CIE.  */
3693   dw2_asm_output_data ((for_eh ? 4 : DWARF_OFFSET_SIZE),
3694                        (for_eh ? 0 : DWARF_CIE_ID),
3695                        "CIE Identifier Tag");
3696
3697   /* Use the CIE version 3 for DWARF3; allow DWARF2 to continue to
3698      use CIE version 1, unless that would produce incorrect results
3699      due to overflowing the return register column.  */
3700   return_reg = DWARF2_FRAME_REG_OUT (DWARF_FRAME_RETURN_COLUMN, for_eh);
3701   dw_cie_version = 1;
3702   if (return_reg >= 256 || dwarf_version > 2)
3703     dw_cie_version = 3;
3704   dw2_asm_output_data (1, dw_cie_version, "CIE Version");
3705
3706   augmentation[0] = 0;
3707   augmentation_size = 0;
3708
3709   personality = current_unit_personality;
3710   if (for_eh)
3711     {
3712       char *p;
3713
3714       /* Augmentation:
3715          z      Indicates that a uleb128 is present to size the
3716                 augmentation section.
3717          L      Indicates the encoding (and thus presence) of
3718                 an LSDA pointer in the FDE augmentation.
3719          R      Indicates a non-default pointer encoding for
3720                 FDE code pointers.
3721          P      Indicates the presence of an encoding + language
3722                 personality routine in the CIE augmentation.  */
3723
3724       fde_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/1, /*global=*/0);
3725       per_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3726       lsda_encoding = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3727
3728       p = augmentation + 1;
3729       if (personality)
3730         {
3731           *p++ = 'P';
3732           augmentation_size += 1 + size_of_encoded_value (per_encoding);
3733           assemble_external_libcall (personality);
3734         }
3735       if (any_lsda_needed)
3736         {
3737           *p++ = 'L';
3738           augmentation_size += 1;
3739         }
3740       if (fde_encoding != DW_EH_PE_absptr)
3741         {
3742           *p++ = 'R';
3743           augmentation_size += 1;
3744         }
3745       if (p > augmentation + 1)
3746         {
3747           augmentation[0] = 'z';
3748           *p = '\0';
3749         }
3750
3751       /* Ug.  Some platforms can't do unaligned dynamic relocations at all.  */
3752       if (personality && per_encoding == DW_EH_PE_aligned)
3753         {
3754           int offset = (  4             /* Length */
3755                         + 4             /* CIE Id */
3756                         + 1             /* CIE version */
3757                         + strlen (augmentation) + 1     /* Augmentation */
3758                         + size_of_uleb128 (1)           /* Code alignment */
3759                         + size_of_sleb128 (DWARF_CIE_DATA_ALIGNMENT)
3760                         + 1             /* RA column */
3761                         + 1             /* Augmentation size */
3762                         + 1             /* Personality encoding */ );
3763           int pad = -offset & (PTR_SIZE - 1);
3764
3765           augmentation_size += pad;
3766
3767           /* Augmentations should be small, so there's scarce need to
3768              iterate for a solution.  Die if we exceed one uleb128 byte.  */
3769           gcc_assert (size_of_uleb128 (augmentation_size) == 1);
3770         }
3771     }
3772
3773   dw2_asm_output_nstring (augmentation, -1, "CIE Augmentation");
3774   dw2_asm_output_data_uleb128 (1, "CIE Code Alignment Factor");
3775   dw2_asm_output_data_sleb128 (DWARF_CIE_DATA_ALIGNMENT,
3776                                "CIE Data Alignment Factor");
3777
3778   if (dw_cie_version == 1)
3779     dw2_asm_output_data (1, return_reg, "CIE RA Column");
3780   else
3781     dw2_asm_output_data_uleb128 (return_reg, "CIE RA Column");
3782
3783   if (augmentation[0])
3784     {
3785       dw2_asm_output_data_uleb128 (augmentation_size, "Augmentation size");
3786       if (personality)
3787         {
3788           dw2_asm_output_data (1, per_encoding, "Personality (%s)",
3789                                eh_data_format_name (per_encoding));
3790           dw2_asm_output_encoded_addr_rtx (per_encoding,
3791                                            personality,
3792                                            true, NULL);
3793         }
3794
3795       if (any_lsda_needed)
3796         dw2_asm_output_data (1, lsda_encoding, "LSDA Encoding (%s)",
3797                              eh_data_format_name (lsda_encoding));
3798
3799       if (fde_encoding != DW_EH_PE_absptr)
3800         dw2_asm_output_data (1, fde_encoding, "FDE Encoding (%s)",
3801                              eh_data_format_name (fde_encoding));
3802     }
3803
3804   for (cfi = cie_cfi_head; cfi != NULL; cfi = cfi->dw_cfi_next)
3805     output_cfi (cfi, NULL, for_eh);
3806
3807   /* Pad the CIE out to an address sized boundary.  */
3808   ASM_OUTPUT_ALIGN (asm_out_file,
3809                     floor_log2 (for_eh ? PTR_SIZE : DWARF2_ADDR_SIZE));
3810   ASM_OUTPUT_LABEL (asm_out_file, l2);
3811
3812   /* Loop through all of the FDE's.  */
3813   for (i = 0; i < fde_table_in_use; i++)
3814     {
3815       unsigned int k;
3816       fde = &fde_table[i];
3817
3818       /* Don't emit EH unwind info for leaf functions that don't need it.  */
3819       if (for_eh && !flag_asynchronous_unwind_tables && flag_exceptions
3820           && (fde->nothrow || fde->all_throwers_are_sibcalls)
3821           && ! (TARGET_USES_WEAK_UNWIND_INFO && DECL_WEAK (fde_table[i].decl))
3822           && !fde->uses_eh_lsda)
3823         continue;
3824
3825       for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
3826         output_fde (fde, for_eh, k, section_start_label, fde_encoding,
3827                     augmentation, any_lsda_needed, lsda_encoding);
3828     }
3829
3830   if (for_eh && targetm.terminate_dw2_eh_frame_info)
3831     dw2_asm_output_data (4, 0, "End of Table");
3832 #ifdef MIPS_DEBUGGING_INFO
3833   /* Work around Irix 6 assembler bug whereby labels at the end of a section
3834      get a value of 0.  Putting .align 0 after the label fixes it.  */
3835   ASM_OUTPUT_ALIGN (asm_out_file, 0);
3836 #endif
3837
3838   /* Turn off app to make assembly quicker.  */
3839   if (flag_debug_asm)
3840     app_disable ();
3841 }
3842
3843 /* Emit .cfi_startproc and .cfi_personality/.cfi_lsda if needed.  */
3844
3845 static void
3846 dwarf2out_do_cfi_startproc (bool second)
3847 {
3848   int enc;
3849   rtx ref;
3850   rtx personality = get_personality_function (current_function_decl);
3851
3852   fprintf (asm_out_file, "\t.cfi_startproc\n");
3853
3854   if (personality)
3855     {
3856       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/2, /*global=*/1);
3857       ref = personality;
3858
3859       /* ??? The GAS support isn't entirely consistent.  We have to
3860          handle indirect support ourselves, but PC-relative is done
3861          in the assembler.  Further, the assembler can't handle any
3862          of the weirder relocation types.  */
3863       if (enc & DW_EH_PE_indirect)
3864         ref = dw2_force_const_mem (ref, true);
3865
3866       fprintf (asm_out_file, "\t.cfi_personality 0x%x,", enc);
3867       output_addr_const (asm_out_file, ref);
3868       fputc ('\n', asm_out_file);
3869     }
3870
3871   if (crtl->uses_eh_lsda)
3872     {
3873       char lab[20];
3874
3875       enc = ASM_PREFERRED_EH_DATA_FORMAT (/*code=*/0, /*global=*/0);
3876       ASM_GENERATE_INTERNAL_LABEL (lab, second ? "LLSDAC" : "LLSDA",
3877                                    current_function_funcdef_no);
3878       ref = gen_rtx_SYMBOL_REF (Pmode, lab);
3879       SYMBOL_REF_FLAGS (ref) = SYMBOL_FLAG_LOCAL;
3880
3881       if (enc & DW_EH_PE_indirect)
3882         ref = dw2_force_const_mem (ref, true);
3883
3884       fprintf (asm_out_file, "\t.cfi_lsda 0x%x,", enc);
3885       output_addr_const (asm_out_file, ref);
3886       fputc ('\n', asm_out_file);
3887     }
3888 }
3889
3890 /* Output a marker (i.e. a label) for the beginning of a function, before
3891    the prologue.  */
3892
3893 void
3894 dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
3895                           const char *file ATTRIBUTE_UNUSED)
3896 {
3897   char label[MAX_ARTIFICIAL_LABEL_BYTES];
3898   char * dup_label;
3899   dw_fde_ref fde;
3900   section *fnsec;
3901
3902   current_function_func_begin_label = NULL;
3903
3904 #ifdef TARGET_UNWIND_INFO
3905   /* ??? current_function_func_begin_label is also used by except.c
3906      for call-site information.  We must emit this label if it might
3907      be used.  */
3908   if ((! flag_exceptions || USING_SJLJ_EXCEPTIONS)
3909       && ! dwarf2out_do_frame ())
3910     return;
3911 #else
3912   if (! dwarf2out_do_frame ())
3913     return;
3914 #endif
3915
3916   fnsec = function_section (current_function_decl);
3917   switch_to_section (fnsec);
3918   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_BEGIN_LABEL,
3919                                current_function_funcdef_no);
3920   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, FUNC_BEGIN_LABEL,
3921                           current_function_funcdef_no);
3922   dup_label = xstrdup (label);
3923   current_function_func_begin_label = dup_label;
3924
3925 #ifdef TARGET_UNWIND_INFO
3926   /* We can elide the fde allocation if we're not emitting debug info.  */
3927   if (! dwarf2out_do_frame ())
3928     return;
3929 #endif
3930
3931   /* Expand the fde table if necessary.  */
3932   if (fde_table_in_use == fde_table_allocated)
3933     {
3934       fde_table_allocated += FDE_TABLE_INCREMENT;
3935       fde_table = GGC_RESIZEVEC (dw_fde_node, fde_table, fde_table_allocated);
3936       memset (fde_table + fde_table_in_use, 0,
3937               FDE_TABLE_INCREMENT * sizeof (dw_fde_node));
3938     }
3939
3940   /* Record the FDE associated with this function.  */
3941   current_funcdef_fde = fde_table_in_use;
3942
3943   /* Add the new FDE at the end of the fde_table.  */
3944   fde = &fde_table[fde_table_in_use++];
3945   fde->decl = current_function_decl;
3946   fde->dw_fde_begin = dup_label;
3947   fde->dw_fde_current_label = dup_label;
3948   fde->dw_fde_hot_section_label = NULL;
3949   fde->dw_fde_hot_section_end_label = NULL;
3950   fde->dw_fde_unlikely_section_label = NULL;
3951   fde->dw_fde_unlikely_section_end_label = NULL;
3952   fde->dw_fde_switched_sections = 0;
3953   fde->dw_fde_switched_cold_to_hot = 0;
3954   fde->dw_fde_end = NULL;
3955   fde->dw_fde_cfi = NULL;
3956   fde->dw_fde_switch_cfi = NULL;
3957   fde->funcdef_number = current_function_funcdef_no;
3958   fde->nothrow = crtl->nothrow;
3959   fde->uses_eh_lsda = crtl->uses_eh_lsda;
3960   fde->all_throwers_are_sibcalls = crtl->all_throwers_are_sibcalls;
3961   fde->drap_reg = INVALID_REGNUM;
3962   fde->vdrap_reg = INVALID_REGNUM;
3963   if (flag_reorder_blocks_and_partition)
3964     {
3965       section *unlikelysec;
3966       if (first_function_block_is_cold)
3967         fde->in_std_section = 1;
3968       else
3969         fde->in_std_section
3970           = (fnsec == text_section
3971              || (cold_text_section && fnsec == cold_text_section));
3972       unlikelysec = unlikely_text_section ();
3973       fde->cold_in_std_section
3974         = (unlikelysec == text_section
3975            || (cold_text_section && unlikelysec == cold_text_section));
3976     }
3977   else
3978     {
3979       fde->in_std_section
3980         = (fnsec == text_section
3981            || (cold_text_section && fnsec == cold_text_section));
3982       fde->cold_in_std_section = 0;
3983     }
3984
3985   args_size = old_args_size = 0;
3986
3987   /* We only want to output line number information for the genuine dwarf2
3988      prologue case, not the eh frame case.  */
3989 #ifdef DWARF2_DEBUGGING_INFO
3990   if (file)
3991     dwarf2out_source_line (line, file, 0, true);
3992 #endif
3993
3994   if (dwarf2out_do_cfi_asm ())
3995     dwarf2out_do_cfi_startproc (false);
3996   else
3997     {
3998       rtx personality = get_personality_function (current_function_decl);
3999       if (!current_unit_personality)
4000         current_unit_personality = personality;
4001
4002       /* We cannot keep a current personality per function as without CFI
4003          asm at the point where we emit the CFI data there is no current
4004          function anymore.  */
4005       if (personality
4006           && current_unit_personality != personality)
4007         sorry ("Multiple EH personalities are supported only with assemblers "
4008                "supporting .cfi.personality directive.");
4009     }
4010 }
4011
4012 /* Output a marker (i.e. a label) for the absolute end of the generated code
4013    for a function definition.  This gets called *after* the epilogue code has
4014    been generated.  */
4015
4016 void
4017 dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
4018                         const char *file ATTRIBUTE_UNUSED)
4019 {
4020   dw_fde_ref fde;
4021   char label[MAX_ARTIFICIAL_LABEL_BYTES];
4022
4023 #ifdef DWARF2_DEBUGGING_INFO
4024   last_var_location_insn = NULL_RTX;
4025 #endif
4026
4027   if (dwarf2out_do_cfi_asm ())
4028     fprintf (asm_out_file, "\t.cfi_endproc\n");
4029
4030   /* Output a label to mark the endpoint of the code generated for this
4031      function.  */
4032   ASM_GENERATE_INTERNAL_LABEL (label, FUNC_END_LABEL,
4033                                current_function_funcdef_no);
4034   ASM_OUTPUT_LABEL (asm_out_file, label);
4035   fde = current_fde ();
4036   gcc_assert (fde != NULL);
4037   fde->dw_fde_end = xstrdup (label);
4038 }
4039
4040 void
4041 dwarf2out_frame_init (void)
4042 {
4043   /* Allocate the initial hunk of the fde_table.  */
4044   fde_table = GGC_CNEWVEC (dw_fde_node, FDE_TABLE_INCREMENT);
4045   fde_table_allocated = FDE_TABLE_INCREMENT;
4046   fde_table_in_use = 0;
4047
4048   /* Generate the CFA instructions common to all FDE's.  Do it now for the
4049      sake of lookup_cfa.  */
4050
4051   /* On entry, the Canonical Frame Address is at SP.  */
4052   dwarf2out_def_cfa (NULL, STACK_POINTER_REGNUM, INCOMING_FRAME_SP_OFFSET);
4053
4054 #ifdef DWARF2_UNWIND_INFO
4055   if (DWARF2_UNWIND_INFO || DWARF2_FRAME_INFO)
4056     initial_return_save (INCOMING_RETURN_ADDR_RTX);
4057 #endif
4058 }
4059
4060 void
4061 dwarf2out_frame_finish (void)
4062 {
4063   /* Output call frame information.  */
4064   if (DWARF2_FRAME_INFO)
4065     output_call_frame_info (0);
4066
4067 #ifndef TARGET_UNWIND_INFO
4068   /* Output another copy for the unwinder.  */
4069   if (! USING_SJLJ_EXCEPTIONS && (flag_unwind_tables || flag_exceptions))
4070     output_call_frame_info (1);
4071 #endif
4072 }
4073
4074 /* Note that the current function section is being used for code.  */
4075
4076 static void
4077 dwarf2out_note_section_used (void)
4078 {
4079   section *sec = current_function_section ();
4080   if (sec == text_section)
4081     text_section_used = true;
4082   else if (sec == cold_text_section)
4083     cold_text_section_used = true;
4084 }
4085
4086 void
4087 dwarf2out_switch_text_section (void)
4088 {
4089   dw_fde_ref fde = current_fde ();
4090
4091   gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
4092
4093   fde->dw_fde_switched_sections = 1;
4094   fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
4095
4096   fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
4097   fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
4098   fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
4099   fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
4100   have_multiple_function_sections = true;
4101
4102   /* Reset the current label on switching text sections, so that we
4103      don't attempt to advance_loc4 between labels in different sections.  */
4104   fde->dw_fde_current_label = NULL;
4105
4106   /* There is no need to mark used sections when not debugging.  */
4107   if (cold_text_section != NULL)
4108     dwarf2out_note_section_used ();
4109
4110   if (dwarf2out_do_cfi_asm ())
4111     fprintf (asm_out_file, "\t.cfi_endproc\n");
4112
4113   /* Now do the real section switch.  */
4114   switch_to_section (current_function_section ());
4115
4116   if (dwarf2out_do_cfi_asm ())
4117     {
4118       dwarf2out_do_cfi_startproc (true);
4119       /* As this is a different FDE, insert all current CFI instructions
4120          again.  */
4121       output_cfis (fde->dw_fde_cfi, true, fde, true);
4122     }
4123   else
4124     {
4125       dw_cfi_ref cfi = fde->dw_fde_cfi;
4126
4127       cfi = fde->dw_fde_cfi;
4128       if (cfi)
4129         while (cfi->dw_cfi_next != NULL)
4130           cfi = cfi->dw_cfi_next;
4131       fde->dw_fde_switch_cfi = cfi;
4132     }
4133 }
4134 #endif
4135 \f
4136 /* And now, the subset of the debugging information support code necessary
4137    for emitting location expressions.  */
4138
4139 /* Data about a single source file.  */
4140 struct GTY(()) dwarf_file_data {
4141   const char * filename;
4142   int emitted_number;
4143 };
4144
4145 typedef struct dw_val_struct *dw_val_ref;
4146 typedef struct die_struct *dw_die_ref;
4147 typedef const struct die_struct *const_dw_die_ref;
4148 typedef struct dw_loc_descr_struct *dw_loc_descr_ref;
4149 typedef struct dw_loc_list_struct *dw_loc_list_ref;
4150
4151 typedef struct GTY(()) deferred_locations_struct
4152 {
4153   tree variable;
4154   dw_die_ref die;
4155 } deferred_locations;
4156
4157 DEF_VEC_O(deferred_locations);
4158 DEF_VEC_ALLOC_O(deferred_locations,gc);
4159
4160 static GTY(()) VEC(deferred_locations, gc) *deferred_locations_list;
4161
4162 DEF_VEC_P(dw_die_ref);
4163 DEF_VEC_ALLOC_P(dw_die_ref,heap);
4164
4165 /* Each DIE may have a series of attribute/value pairs.  Values
4166    can take on several forms.  The forms that are used in this
4167    implementation are listed below.  */
4168
4169 enum dw_val_class
4170 {
4171   dw_val_class_addr,
4172   dw_val_class_offset,
4173   dw_val_class_loc,
4174   dw_val_class_loc_list,
4175   dw_val_class_range_list,
4176   dw_val_class_const,
4177   dw_val_class_unsigned_const,
4178   dw_val_class_const_double,
4179   dw_val_class_vec,
4180   dw_val_class_flag,
4181   dw_val_class_die_ref,
4182   dw_val_class_fde_ref,
4183   dw_val_class_lbl_id,
4184   dw_val_class_lineptr,
4185   dw_val_class_str,
4186   dw_val_class_macptr,
4187   dw_val_class_file,
4188   dw_val_class_data8
4189 };
4190
4191 /* Describe a floating point constant value, or a vector constant value.  */
4192
4193 typedef struct GTY(()) dw_vec_struct {
4194   unsigned char * GTY((length ("%h.length"))) array;
4195   unsigned length;
4196   unsigned elt_size;
4197 }
4198 dw_vec_const;
4199
4200 /* The dw_val_node describes an attribute's value, as it is
4201    represented internally.  */
4202
4203 typedef struct GTY(()) dw_val_struct {
4204   enum dw_val_class val_class;
4205   union dw_val_struct_union
4206     {
4207       rtx GTY ((tag ("dw_val_class_addr"))) val_addr;
4208       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_offset"))) val_offset;
4209       dw_loc_list_ref GTY ((tag ("dw_val_class_loc_list"))) val_loc_list;
4210       dw_loc_descr_ref GTY ((tag ("dw_val_class_loc"))) val_loc;
4211       HOST_WIDE_INT GTY ((default)) val_int;
4212       unsigned HOST_WIDE_INT GTY ((tag ("dw_val_class_unsigned_const"))) val_unsigned;
4213       double_int GTY ((tag ("dw_val_class_const_double"))) val_double;
4214       dw_vec_const GTY ((tag ("dw_val_class_vec"))) val_vec;
4215       struct dw_val_die_union
4216         {
4217           dw_die_ref die;
4218           int external;
4219         } GTY ((tag ("dw_val_class_die_ref"))) val_die_ref;
4220       unsigned GTY ((tag ("dw_val_class_fde_ref"))) val_fde_index;
4221       struct indirect_string_node * GTY ((tag ("dw_val_class_str"))) val_str;
4222       char * GTY ((tag ("dw_val_class_lbl_id"))) val_lbl_id;
4223       unsigned char GTY ((tag ("dw_val_class_flag"))) val_flag;
4224       struct dwarf_file_data * GTY ((tag ("dw_val_class_file"))) val_file;
4225       unsigned char GTY ((tag ("dw_val_class_data8"))) val_data8[8];
4226     }
4227   GTY ((desc ("%1.val_class"))) v;
4228 }
4229 dw_val_node;
4230
4231 /* Locations in memory are described using a sequence of stack machine
4232    operations.  */
4233
4234 typedef struct GTY(()) dw_loc_descr_struct {
4235   dw_loc_descr_ref dw_loc_next;
4236   ENUM_BITFIELD (dwarf_location_atom) dw_loc_opc : 8;
4237   /* Used to distinguish DW_OP_addr with a direct symbol relocation
4238      from DW_OP_addr with a dtp-relative symbol relocation.  */
4239   unsigned int dtprel : 1;
4240   int dw_loc_addr;
4241   dw_val_node dw_loc_oprnd1;
4242   dw_val_node dw_loc_oprnd2;
4243 }
4244 dw_loc_descr_node;
4245
4246 /* Location lists are ranges + location descriptions for that range,
4247    so you can track variables that are in different places over
4248    their entire life.  */
4249 typedef struct GTY(()) dw_loc_list_struct {
4250   dw_loc_list_ref dw_loc_next;
4251   const char *begin; /* Label for begin address of range */
4252   const char *end;  /* Label for end address of range */
4253   char *ll_symbol; /* Label for beginning of location list.
4254                       Only on head of list */
4255   const char *section; /* Section this loclist is relative to */
4256   dw_loc_descr_ref expr;
4257 } dw_loc_list_node;
4258
4259 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
4260
4261 static dw_loc_descr_ref int_loc_descriptor (HOST_WIDE_INT);
4262
4263 /* Convert a DWARF stack opcode into its string name.  */
4264
4265 static const char *
4266 dwarf_stack_op_name (unsigned int op)
4267 {
4268   switch (op)
4269     {
4270     case DW_OP_addr:
4271       return "DW_OP_addr";
4272     case DW_OP_deref:
4273       return "DW_OP_deref";
4274     case DW_OP_const1u:
4275       return "DW_OP_const1u";
4276     case DW_OP_const1s:
4277       return "DW_OP_const1s";
4278     case DW_OP_const2u:
4279       return "DW_OP_const2u";
4280     case DW_OP_const2s:
4281       return "DW_OP_const2s";
4282     case DW_OP_const4u:
4283       return "DW_OP_const4u";
4284     case DW_OP_const4s:
4285       return "DW_OP_const4s";
4286     case DW_OP_const8u:
4287       return "DW_OP_const8u";
4288     case DW_OP_const8s:
4289       return "DW_OP_const8s";
4290     case DW_OP_constu:
4291       return "DW_OP_constu";
4292     case DW_OP_consts:
4293       return "DW_OP_consts";
4294     case DW_OP_dup:
4295       return "DW_OP_dup";
4296     case DW_OP_drop:
4297       return "DW_OP_drop";
4298     case DW_OP_over:
4299       return "DW_OP_over";
4300     case DW_OP_pick:
4301       return "DW_OP_pick";
4302     case DW_OP_swap:
4303       return "DW_OP_swap";
4304     case DW_OP_rot:
4305       return "DW_OP_rot";
4306     case DW_OP_xderef:
4307       return "DW_OP_xderef";
4308     case DW_OP_abs:
4309       return "DW_OP_abs";
4310     case DW_OP_and:
4311       return "DW_OP_and";
4312     case DW_OP_div:
4313       return "DW_OP_div";
4314     case DW_OP_minus:
4315       return "DW_OP_minus";
4316     case DW_OP_mod:
4317       return "DW_OP_mod";
4318     case DW_OP_mul:
4319       return "DW_OP_mul";
4320     case DW_OP_neg:
4321       return "DW_OP_neg";
4322     case DW_OP_not:
4323       return "DW_OP_not";
4324     case DW_OP_or:
4325       return "DW_OP_or";
4326     case DW_OP_plus:
4327       return "DW_OP_plus";
4328     case DW_OP_plus_uconst:
4329       return "DW_OP_plus_uconst";
4330     case DW_OP_shl:
4331       return "DW_OP_shl";
4332     case DW_OP_shr:
4333       return "DW_OP_shr";
4334     case DW_OP_shra:
4335       return "DW_OP_shra";
4336     case DW_OP_xor:
4337       return "DW_OP_xor";
4338     case DW_OP_bra:
4339       return "DW_OP_bra";
4340     case DW_OP_eq:
4341       return "DW_OP_eq";
4342     case DW_OP_ge:
4343       return "DW_OP_ge";
4344     case DW_OP_gt:
4345       return "DW_OP_gt";
4346     case DW_OP_le:
4347       return "DW_OP_le";
4348     case DW_OP_lt:
4349       return "DW_OP_lt";
4350     case DW_OP_ne:
4351       return "DW_OP_ne";
4352     case DW_OP_skip:
4353       return "DW_OP_skip";
4354     case DW_OP_lit0:
4355       return "DW_OP_lit0";
4356     case DW_OP_lit1:
4357       return "DW_OP_lit1";
4358     case DW_OP_lit2:
4359       return "DW_OP_lit2";
4360     case DW_OP_lit3:
4361       return "DW_OP_lit3";
4362     case DW_OP_lit4:
4363       return "DW_OP_lit4";
4364     case DW_OP_lit5:
4365       return "DW_OP_lit5";
4366     case DW_OP_lit6:
4367       return "DW_OP_lit6";
4368     case DW_OP_lit7:
4369       return "DW_OP_lit7";
4370     case DW_OP_lit8:
4371       return "DW_OP_lit8";
4372     case DW_OP_lit9:
4373       return "DW_OP_lit9";
4374     case DW_OP_lit10:
4375       return "DW_OP_lit10";
4376     case DW_OP_lit11:
4377       return "DW_OP_lit11";
4378     case DW_OP_lit12:
4379       return "DW_OP_lit12";
4380     case DW_OP_lit13:
4381       return "DW_OP_lit13";
4382     case DW_OP_lit14:
4383       return "DW_OP_lit14";
4384     case DW_OP_lit15:
4385       return "DW_OP_lit15";
4386     case DW_OP_lit16:
4387       return "DW_OP_lit16";
4388     case DW_OP_lit17:
4389       return "DW_OP_lit17";
4390     case DW_OP_lit18:
4391       return "DW_OP_lit18";
4392     case DW_OP_lit19:
4393       return "DW_OP_lit19";
4394     case DW_OP_lit20:
4395       return "DW_OP_lit20";
4396     case DW_OP_lit21:
4397       return "DW_OP_lit21";
4398     case DW_OP_lit22:
4399       return "DW_OP_lit22";
4400     case DW_OP_lit23:
4401       return "DW_OP_lit23";
4402     case DW_OP_lit24:
4403       return "DW_OP_lit24";
4404     case DW_OP_lit25:
4405       return "DW_OP_lit25";
4406     case DW_OP_lit26:
4407       return "DW_OP_lit26";
4408     case DW_OP_lit27:
4409       return "DW_OP_lit27";
4410     case DW_OP_lit28:
4411       return "DW_OP_lit28";
4412     case DW_OP_lit29:
4413       return "DW_OP_lit29";
4414     case DW_OP_lit30:
4415       return "DW_OP_lit30";
4416     case DW_OP_lit31:
4417       return "DW_OP_lit31";
4418     case DW_OP_reg0:
4419       return "DW_OP_reg0";
4420     case DW_OP_reg1:
4421       return "DW_OP_reg1";
4422     case DW_OP_reg2:
4423       return "DW_OP_reg2";
4424     case DW_OP_reg3:
4425       return "DW_OP_reg3";
4426     case DW_OP_reg4:
4427       return "DW_OP_reg4";
4428     case DW_OP_reg5:
4429       return "DW_OP_reg5";
4430     case DW_OP_reg6:
4431       return "DW_OP_reg6";
4432     case DW_OP_reg7:
4433       return "DW_OP_reg7";
4434     case DW_OP_reg8:
4435       return "DW_OP_reg8";
4436     case DW_OP_reg9:
4437       return "DW_OP_reg9";
4438     case DW_OP_reg10:
4439       return "DW_OP_reg10";
4440     case DW_OP_reg11:
4441       return "DW_OP_reg11";
4442     case DW_OP_reg12:
4443       return "DW_OP_reg12";
4444     case DW_OP_reg13:
4445       return "DW_OP_reg13";
4446     case DW_OP_reg14:
4447       return "DW_OP_reg14";
4448     case DW_OP_reg15:
4449       return "DW_OP_reg15";
4450     case DW_OP_reg16:
4451       return "DW_OP_reg16";
4452     case DW_OP_reg17:
4453       return "DW_OP_reg17";
4454     case DW_OP_reg18:
4455       return "DW_OP_reg18";
4456     case DW_OP_reg19:
4457       return "DW_OP_reg19";
4458     case DW_OP_reg20:
4459       return "DW_OP_reg20";
4460     case DW_OP_reg21:
4461       return "DW_OP_reg21";
4462     case DW_OP_reg22:
4463       return "DW_OP_reg22";
4464     case DW_OP_reg23:
4465       return "DW_OP_reg23";
4466     case DW_OP_reg24:
4467       return "DW_OP_reg24";
4468     case DW_OP_reg25:
4469       return "DW_OP_reg25";
4470     case DW_OP_reg26:
4471       return "DW_OP_reg26";
4472     case DW_OP_reg27:
4473       return "DW_OP_reg27";
4474     case DW_OP_reg28:
4475       return "DW_OP_reg28";
4476     case DW_OP_reg29:
4477       return "DW_OP_reg29";
4478     case DW_OP_reg30:
4479       return "DW_OP_reg30";
4480     case DW_OP_reg31:
4481       return "DW_OP_reg31";
4482     case DW_OP_breg0:
4483       return "DW_OP_breg0";
4484     case DW_OP_breg1:
4485       return "DW_OP_breg1";
4486     case DW_OP_breg2:
4487       return "DW_OP_breg2";
4488     case DW_OP_breg3:
4489       return "DW_OP_breg3";
4490     case DW_OP_breg4:
4491       return "DW_OP_breg4";
4492     case DW_OP_breg5:
4493       return "DW_OP_breg5";
4494     case DW_OP_breg6:
4495       return "DW_OP_breg6";
4496     case DW_OP_breg7:
4497       return "DW_OP_breg7";
4498     case DW_OP_breg8:
4499       return "DW_OP_breg8";
4500     case DW_OP_breg9:
4501       return "DW_OP_breg9";
4502     case DW_OP_breg10:
4503       return "DW_OP_breg10";
4504     case DW_OP_breg11:
4505       return "DW_OP_breg11";
4506     case DW_OP_breg12:
4507       return "DW_OP_breg12";
4508     case DW_OP_breg13:
4509       return "DW_OP_breg13";
4510     case DW_OP_breg14:
4511       return "DW_OP_breg14";
4512     case DW_OP_breg15:
4513       return "DW_OP_breg15";
4514     case DW_OP_breg16:
4515       return "DW_OP_breg16";
4516     case DW_OP_breg17:
4517       return "DW_OP_breg17";
4518     case DW_OP_breg18:
4519       return "DW_OP_breg18";
4520     case DW_OP_breg19:
4521       return "DW_OP_breg19";
4522     case DW_OP_breg20:
4523       return "DW_OP_breg20";
4524     case DW_OP_breg21:
4525       return "DW_OP_breg21";
4526     case DW_OP_breg22:
4527       return "DW_OP_breg22";
4528     case DW_OP_breg23:
4529       return "DW_OP_breg23";
4530     case DW_OP_breg24:
4531       return "DW_OP_breg24";
4532     case DW_OP_breg25:
4533       return "DW_OP_breg25";
4534     case DW_OP_breg26:
4535       return "DW_OP_breg26";
4536     case DW_OP_breg27:
4537       return "DW_OP_breg27";
4538     case DW_OP_breg28:
4539       return "DW_OP_breg28";
4540     case DW_OP_breg29:
4541       return "DW_OP_breg29";
4542     case DW_OP_breg30:
4543       return "DW_OP_breg30";
4544     case DW_OP_breg31:
4545       return "DW_OP_breg31";
4546     case DW_OP_regx:
4547       return "DW_OP_regx";
4548     case DW_OP_fbreg:
4549       return "DW_OP_fbreg";
4550     case DW_OP_bregx:
4551       return "DW_OP_bregx";
4552     case DW_OP_piece:
4553       return "DW_OP_piece";
4554     case DW_OP_deref_size:
4555       return "DW_OP_deref_size";
4556     case DW_OP_xderef_size:
4557       return "DW_OP_xderef_size";
4558     case DW_OP_nop:
4559       return "DW_OP_nop";
4560
4561     case DW_OP_push_object_address:
4562       return "DW_OP_push_object_address";
4563     case DW_OP_call2:
4564       return "DW_OP_call2";
4565     case DW_OP_call4:
4566       return "DW_OP_call4";
4567     case DW_OP_call_ref:
4568       return "DW_OP_call_ref";
4569     case DW_OP_implicit_value:
4570       return "DW_OP_implicit_value";
4571     case DW_OP_stack_value:
4572       return "DW_OP_stack_value";
4573     case DW_OP_form_tls_address:
4574       return "DW_OP_form_tls_address";
4575     case DW_OP_call_frame_cfa:
4576       return "DW_OP_call_frame_cfa";
4577     case DW_OP_bit_piece:
4578       return "DW_OP_bit_piece";
4579
4580     case DW_OP_GNU_push_tls_address:
4581       return "DW_OP_GNU_push_tls_address";
4582     case DW_OP_GNU_uninit:
4583       return "DW_OP_GNU_uninit";
4584     case DW_OP_GNU_encoded_addr:
4585       return "DW_OP_GNU_encoded_addr";
4586
4587     default:
4588       return "OP_<unknown>";
4589     }
4590 }
4591
4592 /* Return a pointer to a newly allocated location description.  Location
4593    descriptions are simple expression terms that can be strung
4594    together to form more complicated location (address) descriptions.  */
4595
4596 static inline dw_loc_descr_ref
4597 new_loc_descr (enum dwarf_location_atom op, unsigned HOST_WIDE_INT oprnd1,
4598                unsigned HOST_WIDE_INT oprnd2)
4599 {
4600   dw_loc_descr_ref descr = GGC_CNEW (dw_loc_descr_node);
4601
4602   descr->dw_loc_opc = op;
4603   descr->dw_loc_oprnd1.val_class = dw_val_class_unsigned_const;
4604   descr->dw_loc_oprnd1.v.val_unsigned = oprnd1;
4605   descr->dw_loc_oprnd2.val_class = dw_val_class_unsigned_const;
4606   descr->dw_loc_oprnd2.v.val_unsigned = oprnd2;
4607
4608   return descr;
4609 }
4610
4611 /* Return a pointer to a newly allocated location description for
4612    REG and OFFSET.  */
4613
4614 static inline dw_loc_descr_ref
4615 new_reg_loc_descr (unsigned int reg,  unsigned HOST_WIDE_INT offset)
4616 {
4617   if (reg <= 31)
4618     return new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + reg),
4619                           offset, 0);
4620   else
4621     return new_loc_descr (DW_OP_bregx, reg, offset);
4622 }
4623
4624 /* Add a location description term to a location description expression.  */
4625
4626 static inline void
4627 add_loc_descr (dw_loc_descr_ref *list_head, dw_loc_descr_ref descr)
4628 {
4629   dw_loc_descr_ref *d;
4630
4631   /* Find the end of the chain.  */
4632   for (d = list_head; (*d) != NULL; d = &(*d)->dw_loc_next)
4633     ;
4634
4635   *d = descr;
4636 }
4637
4638 /* Add a constant OFFSET to a location expression.  */
4639
4640 static void
4641 loc_descr_plus_const (dw_loc_descr_ref *list_head, HOST_WIDE_INT offset)
4642 {
4643   dw_loc_descr_ref loc;
4644   HOST_WIDE_INT *p;
4645
4646   gcc_assert (*list_head != NULL);
4647
4648   if (!offset)
4649     return;
4650
4651   /* Find the end of the chain.  */
4652   for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
4653     ;
4654
4655   p = NULL;
4656   if (loc->dw_loc_opc == DW_OP_fbreg
4657       || (loc->dw_loc_opc >= DW_OP_breg0 && loc->dw_loc_opc <= DW_OP_breg31))
4658     p = &loc->dw_loc_oprnd1.v.val_int;
4659   else if (loc->dw_loc_opc == DW_OP_bregx)
4660     p = &loc->dw_loc_oprnd2.v.val_int;
4661
4662   /* If the last operation is fbreg, breg{0..31,x}, optimize by adjusting its
4663      offset.  Don't optimize if an signed integer overflow would happen.  */
4664   if (p != NULL
4665       && ((offset > 0 && *p <= INTTYPE_MAXIMUM (HOST_WIDE_INT) - offset)
4666           || (offset < 0 && *p >= INTTYPE_MINIMUM (HOST_WIDE_INT) - offset)))
4667     *p += offset;
4668
4669   else if (offset > 0)
4670     loc->dw_loc_next = new_loc_descr (DW_OP_plus_uconst, offset, 0);
4671
4672   else
4673     {
4674       loc->dw_loc_next = int_loc_descriptor (offset);
4675       add_loc_descr (&loc->dw_loc_next, new_loc_descr (DW_OP_plus, 0, 0));
4676     }
4677 }
4678
4679 #ifdef DWARF2_DEBUGGING_INFO
4680 /* Add a constant OFFSET to a location list.  */
4681
4682 static void
4683 loc_list_plus_const (dw_loc_list_ref list_head, HOST_WIDE_INT offset)
4684 {
4685   dw_loc_list_ref d;
4686   for (d = list_head; d != NULL; d = d->dw_loc_next)
4687     loc_descr_plus_const (&d->expr, offset);
4688 }
4689 #endif
4690
4691 /* Return the size of a location descriptor.  */
4692
4693 static unsigned long
4694 size_of_loc_descr (dw_loc_descr_ref loc)
4695 {
4696   unsigned long size = 1;
4697
4698   switch (loc->dw_loc_opc)
4699     {
4700     case DW_OP_addr:
4701       size += DWARF2_ADDR_SIZE;
4702       break;
4703     case DW_OP_const1u:
4704     case DW_OP_const1s:
4705       size += 1;
4706       break;
4707     case DW_OP_const2u:
4708     case DW_OP_const2s:
4709       size += 2;
4710       break;
4711     case DW_OP_const4u:
4712     case DW_OP_const4s:
4713       size += 4;
4714       break;
4715     case DW_OP_const8u:
4716     case DW_OP_const8s:
4717       size += 8;
4718       break;
4719     case DW_OP_constu:
4720       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4721       break;
4722     case DW_OP_consts:
4723       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4724       break;
4725     case DW_OP_pick:
4726       size += 1;
4727       break;
4728     case DW_OP_plus_uconst:
4729       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4730       break;
4731     case DW_OP_skip:
4732     case DW_OP_bra:
4733       size += 2;
4734       break;
4735     case DW_OP_breg0:
4736     case DW_OP_breg1:
4737     case DW_OP_breg2:
4738     case DW_OP_breg3:
4739     case DW_OP_breg4:
4740     case DW_OP_breg5:
4741     case DW_OP_breg6:
4742     case DW_OP_breg7:
4743     case DW_OP_breg8:
4744     case DW_OP_breg9:
4745     case DW_OP_breg10:
4746     case DW_OP_breg11:
4747     case DW_OP_breg12:
4748     case DW_OP_breg13:
4749     case DW_OP_breg14:
4750     case DW_OP_breg15:
4751     case DW_OP_breg16:
4752     case DW_OP_breg17:
4753     case DW_OP_breg18:
4754     case DW_OP_breg19:
4755     case DW_OP_breg20:
4756     case DW_OP_breg21:
4757     case DW_OP_breg22:
4758     case DW_OP_breg23:
4759     case DW_OP_breg24:
4760     case DW_OP_breg25:
4761     case DW_OP_breg26:
4762     case DW_OP_breg27:
4763     case DW_OP_breg28:
4764     case DW_OP_breg29:
4765     case DW_OP_breg30:
4766     case DW_OP_breg31:
4767       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4768       break;
4769     case DW_OP_regx:
4770       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4771       break;
4772     case DW_OP_fbreg:
4773       size += size_of_sleb128 (loc->dw_loc_oprnd1.v.val_int);
4774       break;
4775     case DW_OP_bregx:
4776       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4777       size += size_of_sleb128 (loc->dw_loc_oprnd2.v.val_int);
4778       break;
4779     case DW_OP_piece:
4780       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
4781       break;
4782     case DW_OP_deref_size:
4783     case DW_OP_xderef_size:
4784       size += 1;
4785       break;
4786     case DW_OP_call2:
4787       size += 2;
4788       break;
4789     case DW_OP_call4:
4790       size += 4;
4791       break;
4792     case DW_OP_call_ref:
4793       size += DWARF2_ADDR_SIZE;
4794       break;
4795     case DW_OP_implicit_value:
4796       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned)
4797               + loc->dw_loc_oprnd1.v.val_unsigned;
4798       break;
4799     default:
4800       break;
4801     }
4802
4803   return size;
4804 }
4805
4806 /* Return the size of a series of location descriptors.  */
4807
4808 static unsigned long
4809 size_of_locs (dw_loc_descr_ref loc)
4810 {
4811   dw_loc_descr_ref l;
4812   unsigned long size;
4813
4814   /* If there are no skip or bra opcodes, don't fill in the dw_loc_addr
4815      field, to avoid writing to a PCH file.  */
4816   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4817     {
4818       if (l->dw_loc_opc == DW_OP_skip || l->dw_loc_opc == DW_OP_bra)
4819         break;
4820       size += size_of_loc_descr (l);
4821     }
4822   if (! l)
4823     return size;
4824
4825   for (size = 0, l = loc; l != NULL; l = l->dw_loc_next)
4826     {
4827       l->dw_loc_addr = size;
4828       size += size_of_loc_descr (l);
4829     }
4830
4831   return size;
4832 }
4833
4834 #ifdef DWARF2_DEBUGGING_INFO
4835 static HOST_WIDE_INT extract_int (const unsigned char *, unsigned);
4836 #endif
4837
4838 /* Output location description stack opcode's operands (if any).  */
4839
4840 static void
4841 output_loc_operands (dw_loc_descr_ref loc)
4842 {
4843   dw_val_ref val1 = &loc->dw_loc_oprnd1;
4844   dw_val_ref val2 = &loc->dw_loc_oprnd2;
4845
4846   switch (loc->dw_loc_opc)
4847     {
4848 #ifdef DWARF2_DEBUGGING_INFO
4849     case DW_OP_const2u:
4850     case DW_OP_const2s:
4851       dw2_asm_output_data (2, val1->v.val_int, NULL);
4852       break;
4853     case DW_OP_const4u:
4854     case DW_OP_const4s:
4855       dw2_asm_output_data (4, val1->v.val_int, NULL);
4856       break;
4857     case DW_OP_const8u:
4858     case DW_OP_const8s:
4859       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
4860       dw2_asm_output_data (8, val1->v.val_int, NULL);
4861       break;
4862     case DW_OP_skip:
4863     case DW_OP_bra:
4864       {
4865         int offset;
4866
4867         gcc_assert (val1->val_class == dw_val_class_loc);
4868         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
4869
4870         dw2_asm_output_data (2, offset, NULL);
4871       }
4872       break;
4873     case DW_OP_implicit_value:
4874       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4875       switch (val2->val_class)
4876         {
4877         case dw_val_class_const:
4878           dw2_asm_output_data (val1->v.val_unsigned, val2->v.val_int, NULL);
4879           break;
4880         case dw_val_class_vec:
4881           {
4882             unsigned int elt_size = val2->v.val_vec.elt_size;
4883             unsigned int len = val2->v.val_vec.length;
4884             unsigned int i;
4885             unsigned char *p;
4886
4887             if (elt_size > sizeof (HOST_WIDE_INT))
4888               {
4889                 elt_size /= 2;
4890                 len *= 2;
4891               }
4892             for (i = 0, p = val2->v.val_vec.array;
4893                  i < len;
4894                  i++, p += elt_size)
4895               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
4896                                    "fp or vector constant word %u", i);
4897           }
4898           break;
4899         case dw_val_class_const_double:
4900           {
4901             unsigned HOST_WIDE_INT first, second;
4902
4903             if (WORDS_BIG_ENDIAN)
4904               {
4905                 first = val2->v.val_double.high;
4906                 second = val2->v.val_double.low;
4907               }
4908             else
4909               {
4910                 first = val2->v.val_double.low;
4911                 second = val2->v.val_double.high;
4912               }
4913             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4914                                  first, NULL);
4915             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
4916                                  second, NULL);
4917           }
4918           break;
4919         case dw_val_class_addr:
4920           gcc_assert (val1->v.val_unsigned == DWARF2_ADDR_SIZE);
4921           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val2->v.val_addr, NULL);
4922           break;
4923         default:
4924           gcc_unreachable ();
4925         }
4926       break;
4927 #else
4928     case DW_OP_const2u:
4929     case DW_OP_const2s:
4930     case DW_OP_const4u:
4931     case DW_OP_const4s:
4932     case DW_OP_const8u:
4933     case DW_OP_const8s:
4934     case DW_OP_skip:
4935     case DW_OP_bra:
4936     case DW_OP_implicit_value:
4937       /* We currently don't make any attempt to make sure these are
4938          aligned properly like we do for the main unwind info, so
4939          don't support emitting things larger than a byte if we're
4940          only doing unwinding.  */
4941       gcc_unreachable ();
4942 #endif
4943     case DW_OP_const1u:
4944     case DW_OP_const1s:
4945       dw2_asm_output_data (1, val1->v.val_int, NULL);
4946       break;
4947     case DW_OP_constu:
4948       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4949       break;
4950     case DW_OP_consts:
4951       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4952       break;
4953     case DW_OP_pick:
4954       dw2_asm_output_data (1, val1->v.val_int, NULL);
4955       break;
4956     case DW_OP_plus_uconst:
4957       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4958       break;
4959     case DW_OP_breg0:
4960     case DW_OP_breg1:
4961     case DW_OP_breg2:
4962     case DW_OP_breg3:
4963     case DW_OP_breg4:
4964     case DW_OP_breg5:
4965     case DW_OP_breg6:
4966     case DW_OP_breg7:
4967     case DW_OP_breg8:
4968     case DW_OP_breg9:
4969     case DW_OP_breg10:
4970     case DW_OP_breg11:
4971     case DW_OP_breg12:
4972     case DW_OP_breg13:
4973     case DW_OP_breg14:
4974     case DW_OP_breg15:
4975     case DW_OP_breg16:
4976     case DW_OP_breg17:
4977     case DW_OP_breg18:
4978     case DW_OP_breg19:
4979     case DW_OP_breg20:
4980     case DW_OP_breg21:
4981     case DW_OP_breg22:
4982     case DW_OP_breg23:
4983     case DW_OP_breg24:
4984     case DW_OP_breg25:
4985     case DW_OP_breg26:
4986     case DW_OP_breg27:
4987     case DW_OP_breg28:
4988     case DW_OP_breg29:
4989     case DW_OP_breg30:
4990     case DW_OP_breg31:
4991       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4992       break;
4993     case DW_OP_regx:
4994       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
4995       break;
4996     case DW_OP_fbreg:
4997       dw2_asm_output_data_sleb128 (val1->v.val_int, NULL);
4998       break;
4999     case DW_OP_bregx:
5000       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5001       dw2_asm_output_data_sleb128 (val2->v.val_int, NULL);
5002       break;
5003     case DW_OP_piece:
5004       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
5005       break;
5006     case DW_OP_deref_size:
5007     case DW_OP_xderef_size:
5008       dw2_asm_output_data (1, val1->v.val_int, NULL);
5009       break;
5010
5011     case DW_OP_addr:
5012       if (loc->dtprel)
5013         {
5014           if (targetm.asm_out.output_dwarf_dtprel)
5015             {
5016               targetm.asm_out.output_dwarf_dtprel (asm_out_file,
5017                                                    DWARF2_ADDR_SIZE,
5018                                                    val1->v.val_addr);
5019               fputc ('\n', asm_out_file);
5020             }
5021           else
5022             gcc_unreachable ();
5023         }
5024       else
5025         {
5026 #ifdef DWARF2_DEBUGGING_INFO
5027           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, val1->v.val_addr, NULL);
5028 #else
5029           gcc_unreachable ();
5030 #endif
5031         }
5032       break;
5033
5034     default:
5035       /* Other codes have no operands.  */
5036       break;
5037     }
5038 }
5039
5040 /* Output a sequence of location operations.  */
5041
5042 static void
5043 output_loc_sequence (dw_loc_descr_ref loc)
5044 {
5045   for (; loc != NULL; loc = loc->dw_loc_next)
5046     {
5047       /* Output the opcode.  */
5048       dw2_asm_output_data (1, loc->dw_loc_opc,
5049                            "%s", dwarf_stack_op_name (loc->dw_loc_opc));
5050
5051       /* Output the operand(s) (if any).  */
5052       output_loc_operands (loc);
5053     }
5054 }
5055
5056 /* Output location description stack opcode's operands (if any).
5057    The output is single bytes on a line, suitable for .cfi_escape.  */
5058
5059 static void
5060 output_loc_operands_raw (dw_loc_descr_ref loc)
5061 {
5062   dw_val_ref val1 = &loc->dw_loc_oprnd1;
5063   dw_val_ref val2 = &loc->dw_loc_oprnd2;
5064
5065   switch (loc->dw_loc_opc)
5066     {
5067     case DW_OP_addr:
5068     case DW_OP_implicit_value:
5069       /* We cannot output addresses in .cfi_escape, only bytes.  */
5070       gcc_unreachable ();
5071
5072     case DW_OP_const1u:
5073     case DW_OP_const1s:
5074     case DW_OP_pick:
5075     case DW_OP_deref_size:
5076     case DW_OP_xderef_size:
5077       fputc (',', asm_out_file);
5078       dw2_asm_output_data_raw (1, val1->v.val_int);
5079       break;
5080
5081     case DW_OP_const2u:
5082     case DW_OP_const2s:
5083       fputc (',', asm_out_file);
5084       dw2_asm_output_data_raw (2, val1->v.val_int);
5085       break;
5086
5087     case DW_OP_const4u:
5088     case DW_OP_const4s:
5089       fputc (',', asm_out_file);
5090       dw2_asm_output_data_raw (4, val1->v.val_int);
5091       break;
5092
5093     case DW_OP_const8u:
5094     case DW_OP_const8s:
5095       gcc_assert (HOST_BITS_PER_WIDE_INT >= 64);
5096       fputc (',', asm_out_file);
5097       dw2_asm_output_data_raw (8, val1->v.val_int);
5098       break;
5099
5100     case DW_OP_skip:
5101     case DW_OP_bra:
5102       {
5103         int offset;
5104
5105         gcc_assert (val1->val_class == dw_val_class_loc);
5106         offset = val1->v.val_loc->dw_loc_addr - (loc->dw_loc_addr + 3);
5107
5108         fputc (',', asm_out_file);
5109         dw2_asm_output_data_raw (2, offset);
5110       }
5111       break;
5112
5113     case DW_OP_constu:
5114     case DW_OP_plus_uconst:
5115     case DW_OP_regx:
5116     case DW_OP_piece:
5117       fputc (',', asm_out_file);
5118       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5119       break;
5120
5121     case DW_OP_consts:
5122     case DW_OP_breg0:
5123     case DW_OP_breg1:
5124     case DW_OP_breg2:
5125     case DW_OP_breg3:
5126     case DW_OP_breg4:
5127     case DW_OP_breg5:
5128     case DW_OP_breg6:
5129     case DW_OP_breg7:
5130     case DW_OP_breg8:
5131     case DW_OP_breg9:
5132     case DW_OP_breg10:
5133     case DW_OP_breg11:
5134     case DW_OP_breg12:
5135     case DW_OP_breg13:
5136     case DW_OP_breg14:
5137     case DW_OP_breg15:
5138     case DW_OP_breg16:
5139     case DW_OP_breg17:
5140     case DW_OP_breg18:
5141     case DW_OP_breg19:
5142     case DW_OP_breg20:
5143     case DW_OP_breg21:
5144     case DW_OP_breg22:
5145     case DW_OP_breg23:
5146     case DW_OP_breg24:
5147     case DW_OP_breg25:
5148     case DW_OP_breg26:
5149     case DW_OP_breg27:
5150     case DW_OP_breg28:
5151     case DW_OP_breg29:
5152     case DW_OP_breg30:
5153     case DW_OP_breg31:
5154     case DW_OP_fbreg:
5155       fputc (',', asm_out_file);
5156       dw2_asm_output_data_sleb128_raw (val1->v.val_int);
5157       break;
5158
5159     case DW_OP_bregx:
5160       fputc (',', asm_out_file);
5161       dw2_asm_output_data_uleb128_raw (val1->v.val_unsigned);
5162       fputc (',', asm_out_file);
5163       dw2_asm_output_data_sleb128_raw (val2->v.val_int);
5164       break;
5165
5166     default:
5167       /* Other codes have no operands.  */
5168       break;
5169     }
5170 }
5171
5172 static void
5173 output_loc_sequence_raw (dw_loc_descr_ref loc)
5174 {
5175   while (1)
5176     {
5177       /* Output the opcode.  */
5178       fprintf (asm_out_file, "0x%x", loc->dw_loc_opc);
5179       output_loc_operands_raw (loc);
5180
5181       if (!loc->dw_loc_next)
5182         break;
5183       loc = loc->dw_loc_next;
5184
5185       fputc (',', asm_out_file);
5186     }
5187 }
5188
5189 /* This routine will generate the correct assembly data for a location
5190    description based on a cfi entry with a complex address.  */
5191
5192 static void
5193 output_cfa_loc (dw_cfi_ref cfi)
5194 {
5195   dw_loc_descr_ref loc;
5196   unsigned long size;
5197
5198   if (cfi->dw_cfi_opc == DW_CFA_expression)
5199     {
5200       dw2_asm_output_data (1, cfi->dw_cfi_oprnd1.dw_cfi_reg_num, NULL);
5201       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5202     }
5203   else
5204     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5205
5206   /* Output the size of the block.  */
5207   size = size_of_locs (loc);
5208   dw2_asm_output_data_uleb128 (size, NULL);
5209
5210   /* Now output the operations themselves.  */
5211   output_loc_sequence (loc);
5212 }
5213
5214 /* Similar, but used for .cfi_escape.  */
5215
5216 static void
5217 output_cfa_loc_raw (dw_cfi_ref cfi)
5218 {
5219   dw_loc_descr_ref loc;
5220   unsigned long size;
5221
5222   if (cfi->dw_cfi_opc == DW_CFA_expression)
5223     {
5224       fprintf (asm_out_file, "0x%x,", cfi->dw_cfi_oprnd1.dw_cfi_reg_num);
5225       loc = cfi->dw_cfi_oprnd2.dw_cfi_loc;
5226     }
5227   else
5228     loc = cfi->dw_cfi_oprnd1.dw_cfi_loc;
5229
5230   /* Output the size of the block.  */
5231   size = size_of_locs (loc);
5232   dw2_asm_output_data_uleb128_raw (size);
5233   fputc (',', asm_out_file);
5234
5235   /* Now output the operations themselves.  */
5236   output_loc_sequence_raw (loc);
5237 }
5238
5239 /* This function builds a dwarf location descriptor sequence from a
5240    dw_cfa_location, adding the given OFFSET to the result of the
5241    expression.  */
5242
5243 static struct dw_loc_descr_struct *
5244 build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset)
5245 {
5246   struct dw_loc_descr_struct *head, *tmp;
5247
5248   offset += cfa->offset;
5249
5250   if (cfa->indirect)
5251     {
5252       head = new_reg_loc_descr (cfa->reg, cfa->base_offset);
5253       head->dw_loc_oprnd1.val_class = dw_val_class_const;
5254       tmp = new_loc_descr (DW_OP_deref, 0, 0);
5255       add_loc_descr (&head, tmp);
5256       if (offset != 0)
5257         {
5258           tmp = new_loc_descr (DW_OP_plus_uconst, offset, 0);
5259           add_loc_descr (&head, tmp);
5260         }
5261     }
5262   else
5263     head = new_reg_loc_descr (cfa->reg, offset);
5264
5265   return head;
5266 }
5267
5268 /* This function builds a dwarf location descriptor sequence for
5269    the address at OFFSET from the CFA when stack is aligned to
5270    ALIGNMENT byte.  */
5271
5272 static struct dw_loc_descr_struct *
5273 build_cfa_aligned_loc (HOST_WIDE_INT offset, HOST_WIDE_INT alignment)
5274 {
5275   struct dw_loc_descr_struct *head;
5276   unsigned int dwarf_fp
5277     = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM);
5278
5279  /* When CFA is defined as FP+OFFSET, emulate stack alignment.  */
5280   if (cfa.reg == HARD_FRAME_POINTER_REGNUM && cfa.indirect == 0)
5281     {
5282       head = new_reg_loc_descr (dwarf_fp, 0);
5283       add_loc_descr (&head, int_loc_descriptor (alignment));
5284       add_loc_descr (&head, new_loc_descr (DW_OP_and, 0, 0));
5285       loc_descr_plus_const (&head, offset);
5286     }
5287   else
5288     head = new_reg_loc_descr (dwarf_fp, offset);
5289   return head;
5290 }
5291
5292 /* This function fills in aa dw_cfa_location structure from a dwarf location
5293    descriptor sequence.  */
5294
5295 static void
5296 get_cfa_from_loc_descr (dw_cfa_location *cfa, struct dw_loc_descr_struct *loc)
5297 {
5298   struct dw_loc_descr_struct *ptr;
5299   cfa->offset = 0;
5300   cfa->base_offset = 0;
5301   cfa->indirect = 0;
5302   cfa->reg = -1;
5303
5304   for (ptr = loc; ptr != NULL; ptr = ptr->dw_loc_next)
5305     {
5306       enum dwarf_location_atom op = ptr->dw_loc_opc;
5307
5308       switch (op)
5309         {
5310         case DW_OP_reg0:
5311         case DW_OP_reg1:
5312         case DW_OP_reg2:
5313         case DW_OP_reg3:
5314         case DW_OP_reg4:
5315         case DW_OP_reg5:
5316         case DW_OP_reg6:
5317         case DW_OP_reg7:
5318         case DW_OP_reg8:
5319         case DW_OP_reg9:
5320         case DW_OP_reg10:
5321         case DW_OP_reg11:
5322         case DW_OP_reg12:
5323         case DW_OP_reg13:
5324         case DW_OP_reg14:
5325         case DW_OP_reg15:
5326         case DW_OP_reg16:
5327         case DW_OP_reg17:
5328         case DW_OP_reg18:
5329         case DW_OP_reg19:
5330         case DW_OP_reg20:
5331         case DW_OP_reg21:
5332         case DW_OP_reg22:
5333         case DW_OP_reg23:
5334         case DW_OP_reg24:
5335         case DW_OP_reg25:
5336         case DW_OP_reg26:
5337         case DW_OP_reg27:
5338         case DW_OP_reg28:
5339         case DW_OP_reg29:
5340         case DW_OP_reg30:
5341         case DW_OP_reg31:
5342           cfa->reg = op - DW_OP_reg0;
5343           break;
5344         case DW_OP_regx:
5345           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5346           break;
5347         case DW_OP_breg0:
5348         case DW_OP_breg1:
5349         case DW_OP_breg2:
5350         case DW_OP_breg3:
5351         case DW_OP_breg4:
5352         case DW_OP_breg5:
5353         case DW_OP_breg6:
5354         case DW_OP_breg7:
5355         case DW_OP_breg8:
5356         case DW_OP_breg9:
5357         case DW_OP_breg10:
5358         case DW_OP_breg11:
5359         case DW_OP_breg12:
5360         case DW_OP_breg13:
5361         case DW_OP_breg14:
5362         case DW_OP_breg15:
5363         case DW_OP_breg16:
5364         case DW_OP_breg17:
5365         case DW_OP_breg18:
5366         case DW_OP_breg19:
5367         case DW_OP_breg20:
5368         case DW_OP_breg21:
5369         case DW_OP_breg22:
5370         case DW_OP_breg23:
5371         case DW_OP_breg24:
5372         case DW_OP_breg25:
5373         case DW_OP_breg26:
5374         case DW_OP_breg27:
5375         case DW_OP_breg28:
5376         case DW_OP_breg29:
5377         case DW_OP_breg30:
5378         case DW_OP_breg31:
5379           cfa->reg = op - DW_OP_breg0;
5380           cfa->base_offset = ptr->dw_loc_oprnd1.v.val_int;
5381           break;
5382         case DW_OP_bregx:
5383           cfa->reg = ptr->dw_loc_oprnd1.v.val_int;
5384           cfa->base_offset = ptr->dw_loc_oprnd2.v.val_int;
5385           break;
5386         case DW_OP_deref:
5387           cfa->indirect = 1;
5388           break;
5389         case DW_OP_plus_uconst:
5390           cfa->offset = ptr->dw_loc_oprnd1.v.val_unsigned;
5391           break;
5392         default:
5393           internal_error ("DW_LOC_OP %s not implemented",
5394                           dwarf_stack_op_name (ptr->dw_loc_opc));
5395         }
5396     }
5397 }
5398 #endif /* .debug_frame support */
5399 \f
5400 /* And now, the support for symbolic debugging information.  */
5401 #ifdef DWARF2_DEBUGGING_INFO
5402
5403 /* .debug_str support.  */
5404 static int output_indirect_string (void **, void *);
5405
5406 static void dwarf2out_init (const char *);
5407 static void dwarf2out_finish (const char *);
5408 static void dwarf2out_assembly_start (void);
5409 static void dwarf2out_define (unsigned int, const char *);
5410 static void dwarf2out_undef (unsigned int, const char *);
5411 static void dwarf2out_start_source_file (unsigned, const char *);
5412 static void dwarf2out_end_source_file (unsigned);
5413 static void dwarf2out_function_decl (tree);
5414 static void dwarf2out_begin_block (unsigned, unsigned);
5415 static void dwarf2out_end_block (unsigned, unsigned);
5416 static bool dwarf2out_ignore_block (const_tree);
5417 static void dwarf2out_global_decl (tree);
5418 static void dwarf2out_type_decl (tree, int);
5419 static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
5420 static void dwarf2out_imported_module_or_decl_1 (tree, tree, tree,
5421                                                  dw_die_ref);
5422 static void dwarf2out_abstract_function (tree);
5423 static void dwarf2out_var_location (rtx);
5424 static void dwarf2out_direct_call (tree);
5425 static void dwarf2out_virtual_call_token (tree, int);
5426 static void dwarf2out_copy_call_info (rtx, rtx);
5427 static void dwarf2out_virtual_call (int);
5428 static void dwarf2out_begin_function (tree);
5429 static void dwarf2out_set_name (tree, tree);
5430
5431 /* The debug hooks structure.  */
5432
5433 const struct gcc_debug_hooks dwarf2_debug_hooks =
5434 {
5435   dwarf2out_init,
5436   dwarf2out_finish,
5437   dwarf2out_assembly_start,
5438   dwarf2out_define,
5439   dwarf2out_undef,
5440   dwarf2out_start_source_file,
5441   dwarf2out_end_source_file,
5442   dwarf2out_begin_block,
5443   dwarf2out_end_block,
5444   dwarf2out_ignore_block,
5445   dwarf2out_source_line,
5446   dwarf2out_begin_prologue,
5447   debug_nothing_int_charstar,   /* end_prologue */
5448   dwarf2out_end_epilogue,
5449   dwarf2out_begin_function,
5450   debug_nothing_int,            /* end_function */
5451   dwarf2out_function_decl,      /* function_decl */
5452   dwarf2out_global_decl,
5453   dwarf2out_type_decl,          /* type_decl */
5454   dwarf2out_imported_module_or_decl,
5455   debug_nothing_tree,           /* deferred_inline_function */
5456   /* The DWARF 2 backend tries to reduce debugging bloat by not
5457      emitting the abstract description of inline functions until
5458      something tries to reference them.  */
5459   dwarf2out_abstract_function,  /* outlining_inline_function */
5460   debug_nothing_rtx,            /* label */
5461   debug_nothing_int,            /* handle_pch */
5462   dwarf2out_var_location,
5463   dwarf2out_switch_text_section,
5464   dwarf2out_direct_call,
5465   dwarf2out_virtual_call_token,
5466   dwarf2out_copy_call_info,
5467   dwarf2out_virtual_call,
5468   dwarf2out_set_name,
5469   1                             /* start_end_main_source_file */
5470 };
5471 #endif
5472 \f
5473 /* NOTE: In the comments in this file, many references are made to
5474    "Debugging Information Entries".  This term is abbreviated as `DIE'
5475    throughout the remainder of this file.  */
5476
5477 /* An internal representation of the DWARF output is built, and then
5478    walked to generate the DWARF debugging info.  The walk of the internal
5479    representation is done after the entire program has been compiled.
5480    The types below are used to describe the internal representation.  */
5481
5482 /* Various DIE's use offsets relative to the beginning of the
5483    .debug_info section to refer to each other.  */
5484
5485 typedef long int dw_offset;
5486
5487 /* Define typedefs here to avoid circular dependencies.  */
5488
5489 typedef struct dw_attr_struct *dw_attr_ref;
5490 typedef struct dw_line_info_struct *dw_line_info_ref;
5491 typedef struct dw_separate_line_info_struct *dw_separate_line_info_ref;
5492 typedef struct pubname_struct *pubname_ref;
5493 typedef struct dw_ranges_struct *dw_ranges_ref;
5494 typedef struct dw_ranges_by_label_struct *dw_ranges_by_label_ref;
5495 typedef struct comdat_type_struct *comdat_type_node_ref;
5496
5497 /* Each entry in the line_info_table maintains the file and
5498    line number associated with the label generated for that
5499    entry.  The label gives the PC value associated with
5500    the line number entry.  */
5501
5502 typedef struct GTY(()) dw_line_info_struct {
5503   unsigned long dw_file_num;
5504   unsigned long dw_line_num;
5505 }
5506 dw_line_info_entry;
5507
5508 /* Line information for functions in separate sections; each one gets its
5509    own sequence.  */
5510 typedef struct GTY(()) dw_separate_line_info_struct {
5511   unsigned long dw_file_num;
5512   unsigned long dw_line_num;
5513   unsigned long function;
5514 }
5515 dw_separate_line_info_entry;
5516
5517 /* Each DIE attribute has a field specifying the attribute kind,
5518    a link to the next attribute in the chain, and an attribute value.
5519    Attributes are typically linked below the DIE they modify.  */
5520
5521 typedef struct GTY(()) dw_attr_struct {
5522   enum dwarf_attribute dw_attr;
5523   dw_val_node dw_attr_val;
5524 }
5525 dw_attr_node;
5526
5527 DEF_VEC_O(dw_attr_node);
5528 DEF_VEC_ALLOC_O(dw_attr_node,gc);
5529
5530 /* The Debugging Information Entry (DIE) structure.  DIEs form a tree.
5531    The children of each node form a circular list linked by
5532    die_sib.  die_child points to the node *before* the "first" child node.  */
5533
5534 typedef struct GTY((chain_circular ("%h.die_sib"))) die_struct {
5535   enum dwarf_tag die_tag;
5536   union die_symbol_or_type_node
5537     {
5538       char * GTY ((tag ("0"))) die_symbol;
5539       comdat_type_node_ref GTY ((tag ("1"))) die_type_node;
5540     }
5541   GTY ((desc ("dwarf_version >= 4"))) die_id;
5542   VEC(dw_attr_node,gc) * die_attr;
5543   dw_die_ref die_parent;
5544   dw_die_ref die_child;
5545   dw_die_ref die_sib;
5546   dw_die_ref die_definition; /* ref from a specification to its definition */
5547   dw_offset die_offset;
5548   unsigned long die_abbrev;
5549   int die_mark;
5550   /* Die is used and must not be pruned as unused.  */
5551   int die_perennial_p;
5552   unsigned int decl_id;
5553 }
5554 die_node;
5555
5556 /* Evaluate 'expr' while 'c' is set to each child of DIE in order.  */
5557 #define FOR_EACH_CHILD(die, c, expr) do {       \
5558   c = die->die_child;                           \
5559   if (c) do {                                   \
5560     c = c->die_sib;                             \
5561     expr;                                       \
5562   } while (c != die->die_child);                \
5563 } while (0)
5564
5565 /* The pubname structure */
5566
5567 typedef struct GTY(()) pubname_struct {
5568   dw_die_ref die;
5569   const char *name;
5570 }
5571 pubname_entry;
5572
5573 DEF_VEC_O(pubname_entry);
5574 DEF_VEC_ALLOC_O(pubname_entry, gc);
5575
5576 struct GTY(()) dw_ranges_struct {
5577   /* If this is positive, it's a block number, otherwise it's a
5578      bitwise-negated index into dw_ranges_by_label.  */
5579   int num;
5580 };
5581
5582 struct GTY(()) dw_ranges_by_label_struct {
5583   const char *begin;
5584   const char *end;
5585 };
5586
5587 /* The comdat type node structure.  */
5588 typedef struct GTY(()) comdat_type_struct
5589 {
5590   dw_die_ref root_die;
5591   dw_die_ref type_die;
5592   char signature[DWARF_TYPE_SIGNATURE_SIZE];
5593   struct comdat_type_struct *next;
5594 }
5595 comdat_type_node;
5596
5597 /* The limbo die list structure.  */
5598 typedef struct GTY(()) limbo_die_struct {
5599   dw_die_ref die;
5600   tree created_for;
5601   struct limbo_die_struct *next;
5602 }
5603 limbo_die_node;
5604
5605 typedef struct GTY(()) skeleton_chain_struct
5606 {
5607   dw_die_ref old_die;
5608   dw_die_ref new_die;
5609   struct skeleton_chain_struct *parent;
5610 }
5611 skeleton_chain_node;
5612
5613 /* How to start an assembler comment.  */
5614 #ifndef ASM_COMMENT_START
5615 #define ASM_COMMENT_START ";#"
5616 #endif
5617
5618 /* Define a macro which returns nonzero for a TYPE_DECL which was
5619    implicitly generated for a tagged type.
5620
5621    Note that unlike the gcc front end (which generates a NULL named
5622    TYPE_DECL node for each complete tagged type, each array type, and
5623    each function type node created) the g++ front end generates a
5624    _named_ TYPE_DECL node for each tagged type node created.
5625    These TYPE_DECLs have DECL_ARTIFICIAL set, so we know not to
5626    generate a DW_TAG_typedef DIE for them.  */
5627
5628 #define TYPE_DECL_IS_STUB(decl)                         \
5629   (DECL_NAME (decl) == NULL_TREE                        \
5630    || (DECL_ARTIFICIAL (decl)                           \
5631        && is_tagged_type (TREE_TYPE (decl))             \
5632        && ((decl == TYPE_STUB_DECL (TREE_TYPE (decl)))  \
5633            /* This is necessary for stub decls that     \
5634               appear in nested inline functions.  */    \
5635            || (DECL_ABSTRACT_ORIGIN (decl) != NULL_TREE \
5636                && (decl_ultimate_origin (decl)          \
5637                    == TYPE_STUB_DECL (TREE_TYPE (decl)))))))
5638
5639 /* Information concerning the compilation unit's programming
5640    language, and compiler version.  */
5641
5642 /* Fixed size portion of the DWARF compilation unit header.  */
5643 #define DWARF_COMPILE_UNIT_HEADER_SIZE \
5644   (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 3)
5645
5646 /* Fixed size portion of the DWARF comdat type unit header.  */
5647 #define DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE \
5648   (DWARF_COMPILE_UNIT_HEADER_SIZE + DWARF_TYPE_SIGNATURE_SIZE \
5649    + DWARF_OFFSET_SIZE)
5650
5651 /* Fixed size portion of public names info.  */
5652 #define DWARF_PUBNAMES_HEADER_SIZE (2 * DWARF_OFFSET_SIZE + 2)
5653
5654 /* Fixed size portion of the address range info.  */
5655 #define DWARF_ARANGES_HEADER_SIZE                                       \
5656   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4,      \
5657                 DWARF2_ADDR_SIZE * 2)                                   \
5658    - DWARF_INITIAL_LENGTH_SIZE)
5659
5660 /* Size of padding portion in the address range info.  It must be
5661    aligned to twice the pointer size.  */
5662 #define DWARF_ARANGES_PAD_SIZE \
5663   (DWARF_ROUND (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4, \
5664                 DWARF2_ADDR_SIZE * 2)                              \
5665    - (DWARF_INITIAL_LENGTH_SIZE + DWARF_OFFSET_SIZE + 4))
5666
5667 /* Use assembler line directives if available.  */
5668 #ifndef DWARF2_ASM_LINE_DEBUG_INFO
5669 #ifdef HAVE_AS_DWARF2_DEBUG_LINE
5670 #define DWARF2_ASM_LINE_DEBUG_INFO 1
5671 #else
5672 #define DWARF2_ASM_LINE_DEBUG_INFO 0
5673 #endif
5674 #endif
5675
5676 /* Minimum line offset in a special line info. opcode.
5677    This value was chosen to give a reasonable range of values.  */
5678 #define DWARF_LINE_BASE  -10
5679
5680 /* First special line opcode - leave room for the standard opcodes.  */
5681 #define DWARF_LINE_OPCODE_BASE  10
5682
5683 /* Range of line offsets in a special line info. opcode.  */
5684 #define DWARF_LINE_RANGE  (254-DWARF_LINE_OPCODE_BASE+1)
5685
5686 /* Flag that indicates the initial value of the is_stmt_start flag.
5687    In the present implementation, we do not mark any lines as
5688    the beginning of a source statement, because that information
5689    is not made available by the GCC front-end.  */
5690 #define DWARF_LINE_DEFAULT_IS_STMT_START 1
5691
5692 #ifdef DWARF2_DEBUGGING_INFO
5693 /* This location is used by calc_die_sizes() to keep track
5694    the offset of each DIE within the .debug_info section.  */
5695 static unsigned long next_die_offset;
5696 #endif
5697
5698 /* Record the root of the DIE's built for the current compilation unit.  */
5699 static GTY(()) dw_die_ref comp_unit_die;
5700
5701 /* A list of type DIEs that have been separated into comdat sections.  */
5702 static GTY(()) comdat_type_node *comdat_type_list;
5703
5704 /* A list of DIEs with a NULL parent waiting to be relocated.  */
5705 static GTY(()) limbo_die_node *limbo_die_list;
5706
5707 /* A list of DIEs for which we may have to generate
5708    DW_AT_MIPS_linkage_name once their DECL_ASSEMBLER_NAMEs are
5709    set.  */
5710 static GTY(()) limbo_die_node *deferred_asm_name;
5711
5712 /* Filenames referenced by this compilation unit.  */
5713 static GTY((param_is (struct dwarf_file_data))) htab_t file_table;
5714
5715 /* A hash table of references to DIE's that describe declarations.
5716    The key is a DECL_UID() which is a unique number identifying each decl.  */
5717 static GTY ((param_is (struct die_struct))) htab_t decl_die_table;
5718
5719 /* A hash table of references to DIE's that describe COMMON blocks.
5720    The key is DECL_UID() ^ die_parent.  */
5721 static GTY ((param_is (struct die_struct))) htab_t common_block_die_table;
5722
5723 typedef struct GTY(()) die_arg_entry_struct {
5724     dw_die_ref die;
5725     tree arg;
5726 } die_arg_entry;
5727
5728 DEF_VEC_O(die_arg_entry);
5729 DEF_VEC_ALLOC_O(die_arg_entry,gc);
5730
5731 /* Node of the variable location list.  */
5732 struct GTY ((chain_next ("%h.next"))) var_loc_node {
5733   rtx GTY (()) var_loc_note;
5734   const char * GTY (()) label;
5735   struct var_loc_node * GTY (()) next;
5736 };
5737
5738 /* Variable location list.  */
5739 struct GTY (()) var_loc_list_def {
5740   struct var_loc_node * GTY (()) first;
5741
5742   /* Do not mark the last element of the chained list because
5743      it is marked through the chain.  */
5744   struct var_loc_node * GTY ((skip ("%h"))) last;
5745
5746   /* DECL_UID of the variable decl.  */
5747   unsigned int decl_id;
5748 };
5749 typedef struct var_loc_list_def var_loc_list;
5750
5751
5752 /* Table of decl location linked lists.  */
5753 static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
5754
5755 /* A pointer to the base of a list of references to DIE's that
5756    are uniquely identified by their tag, presence/absence of
5757    children DIE's, and list of attribute/value pairs.  */
5758 static GTY((length ("abbrev_die_table_allocated")))
5759   dw_die_ref *abbrev_die_table;
5760
5761 /* Number of elements currently allocated for abbrev_die_table.  */
5762 static GTY(()) unsigned abbrev_die_table_allocated;
5763
5764 /* Number of elements in type_die_table currently in use.  */
5765 static GTY(()) unsigned abbrev_die_table_in_use;
5766
5767 /* Size (in elements) of increments by which we may expand the
5768    abbrev_die_table.  */
5769 #define ABBREV_DIE_TABLE_INCREMENT 256
5770
5771 /* A pointer to the base of a table that contains line information
5772    for each source code line in .text in the compilation unit.  */
5773 static GTY((length ("line_info_table_allocated")))
5774      dw_line_info_ref line_info_table;
5775
5776 /* Number of elements currently allocated for line_info_table.  */
5777 static GTY(()) unsigned line_info_table_allocated;
5778
5779 /* Number of elements in line_info_table currently in use.  */
5780 static GTY(()) unsigned line_info_table_in_use;
5781
5782 /* A pointer to the base of a table that contains line information
5783    for each source code line outside of .text in the compilation unit.  */
5784 static GTY ((length ("separate_line_info_table_allocated")))
5785      dw_separate_line_info_ref separate_line_info_table;
5786
5787 /* Number of elements currently allocated for separate_line_info_table.  */
5788 static GTY(()) unsigned separate_line_info_table_allocated;
5789
5790 /* Number of elements in separate_line_info_table currently in use.  */
5791 static GTY(()) unsigned separate_line_info_table_in_use;
5792
5793 /* Size (in elements) of increments by which we may expand the
5794    line_info_table.  */
5795 #define LINE_INFO_TABLE_INCREMENT 1024
5796
5797 /* A pointer to the base of a table that contains a list of publicly
5798    accessible names.  */
5799 static GTY (()) VEC (pubname_entry, gc) *  pubname_table;
5800
5801 /* A pointer to the base of a table that contains a list of publicly
5802    accessible types.  */
5803 static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
5804
5805 /* Array of dies for which we should generate .debug_arange info.  */
5806 static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
5807
5808 /* Number of elements currently allocated for arange_table.  */
5809 static GTY(()) unsigned arange_table_allocated;
5810
5811 /* Number of elements in arange_table currently in use.  */
5812 static GTY(()) unsigned arange_table_in_use;
5813
5814 /* Size (in elements) of increments by which we may expand the
5815    arange_table.  */
5816 #define ARANGE_TABLE_INCREMENT 64
5817
5818 /* Array of dies for which we should generate .debug_ranges info.  */
5819 static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
5820
5821 /* Number of elements currently allocated for ranges_table.  */
5822 static GTY(()) unsigned ranges_table_allocated;
5823
5824 /* Number of elements in ranges_table currently in use.  */
5825 static GTY(()) unsigned ranges_table_in_use;
5826
5827 /* Array of pairs of labels referenced in ranges_table.  */
5828 static GTY ((length ("ranges_by_label_allocated")))
5829      dw_ranges_by_label_ref ranges_by_label;
5830
5831 /* Number of elements currently allocated for ranges_by_label.  */
5832 static GTY(()) unsigned ranges_by_label_allocated;
5833
5834 /* Number of elements in ranges_by_label currently in use.  */
5835 static GTY(()) unsigned ranges_by_label_in_use;
5836
5837 /* Size (in elements) of increments by which we may expand the
5838    ranges_table.  */
5839 #define RANGES_TABLE_INCREMENT 64
5840
5841 /* Whether we have location lists that need outputting */
5842 static GTY(()) bool have_location_lists;
5843
5844 /* Unique label counter.  */
5845 static GTY(()) unsigned int loclabel_num;
5846
5847 /* Unique label counter for point-of-call tables.  */
5848 static GTY(()) unsigned int poc_label_num;
5849
5850 /* The direct call table structure.  */
5851
5852 typedef struct GTY(()) dcall_struct {
5853   unsigned int poc_label_num;
5854   tree poc_decl;
5855   dw_die_ref targ_die;
5856 }
5857 dcall_entry;
5858
5859 DEF_VEC_O(dcall_entry);
5860 DEF_VEC_ALLOC_O(dcall_entry, gc);
5861
5862 /* The virtual call table structure.  */
5863
5864 typedef struct GTY(()) vcall_struct {
5865   unsigned int poc_label_num;
5866   unsigned int vtable_slot;
5867 }
5868 vcall_entry;
5869
5870 DEF_VEC_O(vcall_entry);
5871 DEF_VEC_ALLOC_O(vcall_entry, gc);
5872
5873 /* Pointers to the direct and virtual call tables.  */
5874 static GTY (()) VEC (dcall_entry, gc) * dcall_table = NULL;
5875 static GTY (()) VEC (vcall_entry, gc) * vcall_table = NULL;
5876
5877 /* A hash table to map INSN_UIDs to vtable slot indexes.  */
5878
5879 struct GTY (()) vcall_insn {
5880   int insn_uid;
5881   unsigned int vtable_slot;
5882 };
5883
5884 static GTY ((param_is (struct vcall_insn))) htab_t vcall_insn_table;
5885
5886 #ifdef DWARF2_DEBUGGING_INFO
5887 /* Record whether the function being analyzed contains inlined functions.  */
5888 static int current_function_has_inlines;
5889 #endif
5890 #if 0 && defined (MIPS_DEBUGGING_INFO)
5891 static int comp_unit_has_inlines;
5892 #endif
5893
5894 /* The last file entry emitted by maybe_emit_file().  */
5895 static GTY(()) struct dwarf_file_data * last_emitted_file;
5896
5897 /* Number of internal labels generated by gen_internal_sym().  */
5898 static GTY(()) int label_num;
5899
5900 /* Cached result of previous call to lookup_filename.  */
5901 static GTY(()) struct dwarf_file_data * file_table_last_lookup;
5902
5903 static GTY(()) VEC(die_arg_entry,gc) *tmpl_value_parm_die_table;
5904
5905 #ifdef DWARF2_DEBUGGING_INFO
5906
5907 /* Offset from the "steady-state frame pointer" to the frame base,
5908    within the current function.  */
5909 static HOST_WIDE_INT frame_pointer_fb_offset;
5910
5911 /* Forward declarations for functions defined in this file.  */
5912
5913 static int is_pseudo_reg (const_rtx);
5914 static tree type_main_variant (tree);
5915 static int is_tagged_type (const_tree);
5916 static const char *dwarf_tag_name (unsigned);
5917 static const char *dwarf_attr_name (unsigned);
5918 static const char *dwarf_form_name (unsigned);
5919 static tree decl_ultimate_origin (const_tree);
5920 static tree decl_class_context (tree);
5921 static void add_dwarf_attr (dw_die_ref, dw_attr_ref);
5922 static inline enum dw_val_class AT_class (dw_attr_ref);
5923 static void add_AT_flag (dw_die_ref, enum dwarf_attribute, unsigned);
5924 static inline unsigned AT_flag (dw_attr_ref);
5925 static void add_AT_int (dw_die_ref, enum dwarf_attribute, HOST_WIDE_INT);
5926 static inline HOST_WIDE_INT AT_int (dw_attr_ref);
5927 static void add_AT_unsigned (dw_die_ref, enum dwarf_attribute, unsigned HOST_WIDE_INT);
5928 static inline unsigned HOST_WIDE_INT AT_unsigned (dw_attr_ref);
5929 static void add_AT_double (dw_die_ref, enum dwarf_attribute,
5930                            HOST_WIDE_INT, unsigned HOST_WIDE_INT);
5931 static inline void add_AT_vec (dw_die_ref, enum dwarf_attribute, unsigned int,
5932                                unsigned int, unsigned char *);
5933 static void add_AT_data8 (dw_die_ref, enum dwarf_attribute, unsigned char *);
5934 static hashval_t debug_str_do_hash (const void *);
5935 static int debug_str_eq (const void *, const void *);
5936 static void add_AT_string (dw_die_ref, enum dwarf_attribute, const char *);
5937 static inline const char *AT_string (dw_attr_ref);
5938 static enum dwarf_form AT_string_form (dw_attr_ref);
5939 static void add_AT_die_ref (dw_die_ref, enum dwarf_attribute, dw_die_ref);
5940 static void add_AT_specification (dw_die_ref, dw_die_ref);
5941 static inline dw_die_ref AT_ref (dw_attr_ref);
5942 static inline int AT_ref_external (dw_attr_ref);
5943 static inline void set_AT_ref_external (dw_attr_ref, int);
5944 static void add_AT_fde_ref (dw_die_ref, enum dwarf_attribute, unsigned);
5945 static void add_AT_loc (dw_die_ref, enum dwarf_attribute, dw_loc_descr_ref);
5946 static inline dw_loc_descr_ref AT_loc (dw_attr_ref);
5947 static void add_AT_loc_list (dw_die_ref, enum dwarf_attribute,
5948                              dw_loc_list_ref);
5949 static inline dw_loc_list_ref AT_loc_list (dw_attr_ref);
5950 static void add_AT_addr (dw_die_ref, enum dwarf_attribute, rtx);
5951 static inline rtx AT_addr (dw_attr_ref);
5952 static void add_AT_lbl_id (dw_die_ref, enum dwarf_attribute, const char *);
5953 static void add_AT_lineptr (dw_die_ref, enum dwarf_attribute, const char *);
5954 static void add_AT_macptr (dw_die_ref, enum dwarf_attribute, const char *);
5955 static void add_AT_offset (dw_die_ref, enum dwarf_attribute,
5956                            unsigned HOST_WIDE_INT);
5957 static void add_AT_range_list (dw_die_ref, enum dwarf_attribute,
5958                                unsigned long);
5959 static inline const char *AT_lbl (dw_attr_ref);
5960 static dw_attr_ref get_AT (dw_die_ref, enum dwarf_attribute);
5961 static const char *get_AT_low_pc (dw_die_ref);
5962 static const char *get_AT_hi_pc (dw_die_ref);
5963 static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
5964 static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
5965 static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
5966 static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
5967 static bool is_c_family (void);
5968 static bool is_cxx (void);
5969 static bool is_java (void);
5970 static bool is_fortran (void);
5971 static bool is_ada (void);
5972 static void remove_AT (dw_die_ref, enum dwarf_attribute);
5973 static void remove_child_TAG (dw_die_ref, enum dwarf_tag);
5974 static void add_child_die (dw_die_ref, dw_die_ref);
5975 static dw_die_ref new_die (enum dwarf_tag, dw_die_ref, tree);
5976 static dw_die_ref lookup_type_die (tree);
5977 static void equate_type_number_to_die (tree, dw_die_ref);
5978 static hashval_t decl_die_table_hash (const void *);
5979 static int decl_die_table_eq (const void *, const void *);
5980 static dw_die_ref lookup_decl_die (tree);
5981 static hashval_t common_block_die_table_hash (const void *);
5982 static int common_block_die_table_eq (const void *, const void *);
5983 static hashval_t decl_loc_table_hash (const void *);
5984 static int decl_loc_table_eq (const void *, const void *);
5985 static var_loc_list *lookup_decl_loc (const_tree);
5986 static void equate_decl_number_to_die (tree, dw_die_ref);
5987 static struct var_loc_node *add_var_loc_to_decl (tree, rtx);
5988 static void print_spaces (FILE *);
5989 static void print_die (dw_die_ref, FILE *);
5990 static void print_dwarf_line_table (FILE *);
5991 static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
5992 static dw_die_ref pop_compile_unit (dw_die_ref);
5993 static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
5994 static void attr_checksum (dw_attr_ref, struct md5_ctx *, int *);
5995 static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
5996 static void checksum_sleb128 (HOST_WIDE_INT, struct md5_ctx *);
5997 static void checksum_uleb128 (unsigned HOST_WIDE_INT, struct md5_ctx *);
5998 static void loc_checksum_ordered (dw_loc_descr_ref, struct md5_ctx *);
5999 static void attr_checksum_ordered (enum dwarf_tag, dw_attr_ref,
6000                                    struct md5_ctx *, int *);
6001 struct checksum_attributes;
6002 static void collect_checksum_attributes (struct checksum_attributes *, dw_die_ref);
6003 static void die_checksum_ordered (dw_die_ref, struct md5_ctx *, int *);
6004 static void checksum_die_context (dw_die_ref, struct md5_ctx *);
6005 static void generate_type_signature (dw_die_ref, comdat_type_node *);
6006 static int same_loc_p (dw_loc_descr_ref, dw_loc_descr_ref, int *);
6007 static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
6008 static int same_attr_p (dw_attr_ref, dw_attr_ref, int *);
6009 static int same_die_p (dw_die_ref, dw_die_ref, int *);
6010 static int same_die_p_wrap (dw_die_ref, dw_die_ref);
6011 static void compute_section_prefix (dw_die_ref);
6012 static int is_type_die (dw_die_ref);
6013 static int is_comdat_die (dw_die_ref);
6014 static int is_symbol_die (dw_die_ref);
6015 static void assign_symbol_names (dw_die_ref);
6016 static void break_out_includes (dw_die_ref);
6017 static int is_declaration_die (dw_die_ref);
6018 static int should_move_die_to_comdat (dw_die_ref);
6019 static dw_die_ref clone_as_declaration (dw_die_ref);
6020 static dw_die_ref clone_die (dw_die_ref);
6021 static dw_die_ref clone_tree (dw_die_ref);
6022 static void copy_declaration_context (dw_die_ref, dw_die_ref);
6023 static void generate_skeleton_ancestor_tree (skeleton_chain_node *);
6024 static void generate_skeleton_bottom_up (skeleton_chain_node *);
6025 static dw_die_ref generate_skeleton (dw_die_ref);
6026 static dw_die_ref remove_child_or_replace_with_skeleton (dw_die_ref,
6027                                                          dw_die_ref);
6028 static void break_out_comdat_types (dw_die_ref);
6029 static dw_die_ref copy_ancestor_tree (dw_die_ref, dw_die_ref, htab_t);
6030 static void copy_decls_walk (dw_die_ref, dw_die_ref, htab_t);
6031 static void copy_decls_for_unworthy_types (dw_die_ref);
6032
6033 static hashval_t htab_cu_hash (const void *);
6034 static int htab_cu_eq (const void *, const void *);
6035 static void htab_cu_del (void *);
6036 static int check_duplicate_cu (dw_die_ref, htab_t, unsigned *);
6037 static void record_comdat_symbol_number (dw_die_ref, htab_t, unsigned);
6038 static void add_sibling_attributes (dw_die_ref);
6039 static void build_abbrev_table (dw_die_ref);
6040 static void output_location_lists (dw_die_ref);
6041 static int constant_size (unsigned HOST_WIDE_INT);
6042 static unsigned long size_of_die (dw_die_ref);
6043 static void calc_die_sizes (dw_die_ref);
6044 static void mark_dies (dw_die_ref);
6045 static void unmark_dies (dw_die_ref);
6046 static void unmark_all_dies (dw_die_ref);
6047 static unsigned long size_of_pubnames (VEC (pubname_entry,gc) *);
6048 static unsigned long size_of_aranges (void);
6049 static enum dwarf_form value_format (dw_attr_ref);
6050 static void output_value_format (dw_attr_ref);
6051 static void output_abbrev_section (void);
6052 static void output_die_symbol (dw_die_ref);
6053 static void output_die (dw_die_ref);
6054 static void output_compilation_unit_header (void);
6055 static void output_comp_unit (dw_die_ref, int);
6056 static void output_comdat_type_unit (comdat_type_node *);
6057 static const char *dwarf2_name (tree, int);
6058 static void add_pubname (tree, dw_die_ref);
6059 static void add_pubname_string (const char *, dw_die_ref);
6060 static void add_pubtype (tree, dw_die_ref);
6061 static void output_pubnames (VEC (pubname_entry,gc) *);
6062 static void add_arange (tree, dw_die_ref);
6063 static void output_aranges (void);
6064 static unsigned int add_ranges_num (int);
6065 static unsigned int add_ranges (const_tree);
6066 static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
6067                                   bool *);
6068 static void output_ranges (void);
6069 static void output_line_info (void);
6070 static void output_file_names (void);
6071 static dw_die_ref base_type_die (tree);
6072 static int is_base_type (tree);
6073 static dw_die_ref subrange_type_die (tree, tree, tree, dw_die_ref);
6074 static dw_die_ref modified_type_die (tree, int, int, dw_die_ref);
6075 static dw_die_ref generic_parameter_die (tree, tree, bool, dw_die_ref);
6076 static dw_die_ref template_parameter_pack_die (tree, tree, dw_die_ref);
6077 static int type_is_enum (const_tree);
6078 static unsigned int dbx_reg_number (const_rtx);
6079 static void add_loc_descr_op_piece (dw_loc_descr_ref *, int);
6080 static dw_loc_descr_ref reg_loc_descriptor (rtx, enum var_init_status);
6081 static dw_loc_descr_ref one_reg_loc_descriptor (unsigned int,
6082                                                 enum var_init_status);
6083 static dw_loc_descr_ref multiple_reg_loc_descriptor (rtx, rtx,
6084                                                      enum var_init_status);
6085 static dw_loc_descr_ref based_loc_descr (rtx, HOST_WIDE_INT,
6086                                          enum var_init_status);
6087 static int is_based_loc (const_rtx);
6088 static int resolve_one_addr (rtx *, void *);
6089 static dw_loc_descr_ref mem_loc_descriptor (rtx, enum machine_mode mode,
6090                                             enum var_init_status);
6091 static dw_loc_descr_ref concat_loc_descriptor (rtx, rtx,
6092                                                enum var_init_status);
6093 static dw_loc_descr_ref loc_descriptor (rtx, enum machine_mode mode,
6094                                         enum var_init_status);
6095 static dw_loc_list_ref loc_list_from_tree (tree, int);
6096 static dw_loc_descr_ref loc_descriptor_from_tree (tree, int);
6097 static HOST_WIDE_INT ceiling (HOST_WIDE_INT, unsigned int);
6098 static tree field_type (const_tree);
6099 static unsigned int simple_type_align_in_bits (const_tree);
6100 static unsigned int simple_decl_align_in_bits (const_tree);
6101 static unsigned HOST_WIDE_INT simple_type_size_in_bits (const_tree);
6102 static HOST_WIDE_INT field_byte_offset (const_tree);
6103 static void add_AT_location_description (dw_die_ref, enum dwarf_attribute,
6104                                          dw_loc_list_ref);
6105 static void add_data_member_location_attribute (dw_die_ref, tree);
6106 static bool add_const_value_attribute (dw_die_ref, rtx);
6107 static void insert_int (HOST_WIDE_INT, unsigned, unsigned char *);
6108 static void insert_float (const_rtx, unsigned char *);
6109 static rtx rtl_for_decl_location (tree);
6110 static bool add_location_or_const_value_attribute (dw_die_ref, tree,
6111                                                    enum dwarf_attribute);
6112 static bool tree_add_const_value_attribute (dw_die_ref, tree);
6113 static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
6114 static void add_name_attribute (dw_die_ref, const char *);
6115 static void add_comp_dir_attribute (dw_die_ref);
6116 static void add_bound_info (dw_die_ref, enum dwarf_attribute, tree);
6117 static void add_subscript_info (dw_die_ref, tree, bool);
6118 static void add_byte_size_attribute (dw_die_ref, tree);
6119 static void add_bit_offset_attribute (dw_die_ref, tree);
6120 static void add_bit_size_attribute (dw_die_ref, tree);
6121 static void add_prototyped_attribute (dw_die_ref, tree);
6122 static dw_die_ref add_abstract_origin_attribute (dw_die_ref, tree);
6123 static void add_pure_or_virtual_attribute (dw_die_ref, tree);
6124 static void add_src_coords_attributes (dw_die_ref, tree);
6125 static void add_name_and_src_coords_attributes (dw_die_ref, tree);
6126 static void push_decl_scope (tree);
6127 static void pop_decl_scope (void);
6128 static dw_die_ref scope_die_for (tree, dw_die_ref);
6129 static inline int local_scope_p (dw_die_ref);
6130 static inline int class_scope_p (dw_die_ref);
6131 static inline int class_or_namespace_scope_p (dw_die_ref);
6132 static void add_type_attribute (dw_die_ref, tree, int, int, dw_die_ref);
6133 static void add_calling_convention_attribute (dw_die_ref, tree);
6134 static const char *type_tag (const_tree);
6135 static tree member_declared_type (const_tree);
6136 #if 0
6137 static const char *decl_start_label (tree);
6138 #endif
6139 static void gen_array_type_die (tree, dw_die_ref);
6140 static void gen_descr_array_type_die (tree, struct array_descr_info *, dw_die_ref);
6141 #if 0
6142 static void gen_entry_point_die (tree, dw_die_ref);
6143 #endif
6144 static dw_die_ref gen_enumeration_type_die (tree, dw_die_ref);
6145 static dw_die_ref gen_formal_parameter_die (tree, tree, bool, dw_die_ref);
6146 static dw_die_ref gen_formal_parameter_pack_die  (tree, tree, dw_die_ref, tree*);
6147 static void gen_unspecified_parameters_die (tree, dw_die_ref);
6148 static void gen_formal_types_die (tree, dw_die_ref);
6149 static void gen_subprogram_die (tree, dw_die_ref);
6150 static void gen_variable_die (tree, tree, dw_die_ref);
6151 static void gen_const_die (tree, dw_die_ref);
6152 static void gen_label_die (tree, dw_die_ref);
6153 static void gen_lexical_block_die (tree, dw_die_ref, int);
6154 static void gen_inlined_subroutine_die (tree, dw_die_ref, int);
6155 static void gen_field_die (tree, dw_die_ref);
6156 static void gen_ptr_to_mbr_type_die (tree, dw_die_ref);
6157 static dw_die_ref gen_compile_unit_die (const char *);
6158 static void gen_inheritance_die (tree, tree, dw_die_ref);
6159 static void gen_member_die (tree, dw_die_ref);
6160 static void gen_struct_or_union_type_die (tree, dw_die_ref,
6161                                                 enum debug_info_usage);
6162 static void gen_subroutine_type_die (tree, dw_die_ref);
6163 static void gen_typedef_die (tree, dw_die_ref);
6164 static void gen_type_die (tree, dw_die_ref);
6165 static void gen_block_die (tree, dw_die_ref, int);
6166 static void decls_for_scope (tree, dw_die_ref, int);
6167 static int is_redundant_typedef (const_tree);
6168 static inline dw_die_ref get_context_die (tree);
6169 static void gen_namespace_die (tree, dw_die_ref);
6170 static void gen_decl_die (tree, tree, dw_die_ref);
6171 static dw_die_ref force_decl_die (tree);
6172 static dw_die_ref force_type_die (tree);
6173 static dw_die_ref setup_namespace_context (tree, dw_die_ref);
6174 static dw_die_ref declare_in_namespace (tree, dw_die_ref);
6175 static struct dwarf_file_data * lookup_filename (const char *);
6176 static void retry_incomplete_types (void);
6177 static void gen_type_die_for_member (tree, tree, dw_die_ref);
6178 static void gen_generic_params_dies (tree);
6179 static void splice_child_die (dw_die_ref, dw_die_ref);
6180 static int file_info_cmp (const void *, const void *);
6181 static dw_loc_list_ref new_loc_list (dw_loc_descr_ref, const char *,
6182                                      const char *, const char *);
6183 static void output_loc_list (dw_loc_list_ref);
6184 static char *gen_internal_sym (const char *);
6185
6186 static void prune_unmark_dies (dw_die_ref);
6187 static void prune_unused_types_mark (dw_die_ref, int);
6188 static void prune_unused_types_walk (dw_die_ref);
6189 static void prune_unused_types_walk_attribs (dw_die_ref);
6190 static void prune_unused_types_prune (dw_die_ref);
6191 static void prune_unused_types (void);
6192 static int maybe_emit_file (struct dwarf_file_data *fd);
6193 static void append_entry_to_tmpl_value_parm_die_table (dw_die_ref, tree);
6194 static void gen_remaining_tmpl_value_param_die_attribute (void);
6195
6196 /* Section names used to hold DWARF debugging information.  */
6197 #ifndef DEBUG_INFO_SECTION
6198 #define DEBUG_INFO_SECTION      ".debug_info"
6199 #endif
6200 #ifndef DEBUG_ABBREV_SECTION
6201 #define DEBUG_ABBREV_SECTION    ".debug_abbrev"
6202 #endif
6203 #ifndef DEBUG_ARANGES_SECTION
6204 #define DEBUG_ARANGES_SECTION   ".debug_aranges"
6205 #endif
6206 #ifndef DEBUG_MACINFO_SECTION
6207 #define DEBUG_MACINFO_SECTION   ".debug_macinfo"
6208 #endif
6209 #ifndef DEBUG_LINE_SECTION
6210 #define DEBUG_LINE_SECTION      ".debug_line"
6211 #endif
6212 #ifndef DEBUG_LOC_SECTION
6213 #define DEBUG_LOC_SECTION       ".debug_loc"
6214 #endif
6215 #ifndef DEBUG_PUBNAMES_SECTION
6216 #define DEBUG_PUBNAMES_SECTION  ".debug_pubnames"
6217 #endif
6218 #ifndef DEBUG_PUBTYPES_SECTION
6219 #define DEBUG_PUBTYPES_SECTION  ".debug_pubtypes"
6220 #endif
6221 #ifndef DEBUG_DCALL_SECTION
6222 #define DEBUG_DCALL_SECTION     ".debug_dcall"
6223 #endif
6224 #ifndef DEBUG_VCALL_SECTION
6225 #define DEBUG_VCALL_SECTION     ".debug_vcall"
6226 #endif
6227 #ifndef DEBUG_STR_SECTION
6228 #define DEBUG_STR_SECTION       ".debug_str"
6229 #endif
6230 #ifndef DEBUG_RANGES_SECTION
6231 #define DEBUG_RANGES_SECTION    ".debug_ranges"
6232 #endif
6233
6234 /* Standard ELF section names for compiled code and data.  */
6235 #ifndef TEXT_SECTION_NAME
6236 #define TEXT_SECTION_NAME       ".text"
6237 #endif
6238
6239 /* Section flags for .debug_str section.  */
6240 #define DEBUG_STR_SECTION_FLAGS \
6241   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
6242    ? SECTION_DEBUG | SECTION_MERGE | SECTION_STRINGS | 1        \
6243    : SECTION_DEBUG)
6244
6245 /* Labels we insert at beginning sections we can reference instead of
6246    the section names themselves.  */
6247
6248 #ifndef TEXT_SECTION_LABEL
6249 #define TEXT_SECTION_LABEL              "Ltext"
6250 #endif
6251 #ifndef COLD_TEXT_SECTION_LABEL
6252 #define COLD_TEXT_SECTION_LABEL         "Ltext_cold"
6253 #endif
6254 #ifndef DEBUG_LINE_SECTION_LABEL
6255 #define DEBUG_LINE_SECTION_LABEL        "Ldebug_line"
6256 #endif
6257 #ifndef DEBUG_INFO_SECTION_LABEL
6258 #define DEBUG_INFO_SECTION_LABEL        "Ldebug_info"
6259 #endif
6260 #ifndef DEBUG_ABBREV_SECTION_LABEL
6261 #define DEBUG_ABBREV_SECTION_LABEL      "Ldebug_abbrev"
6262 #endif
6263 #ifndef DEBUG_LOC_SECTION_LABEL
6264 #define DEBUG_LOC_SECTION_LABEL         "Ldebug_loc"
6265 #endif
6266 #ifndef DEBUG_RANGES_SECTION_LABEL
6267 #define DEBUG_RANGES_SECTION_LABEL      "Ldebug_ranges"
6268 #endif
6269 #ifndef DEBUG_MACINFO_SECTION_LABEL
6270 #define DEBUG_MACINFO_SECTION_LABEL     "Ldebug_macinfo"
6271 #endif
6272
6273 /* Definitions of defaults for formats and names of various special
6274    (artificial) labels which may be generated within this file (when the -g
6275    options is used and DWARF2_DEBUGGING_INFO is in effect.
6276    If necessary, these may be overridden from within the tm.h file, but
6277    typically, overriding these defaults is unnecessary.  */
6278
6279 static char text_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6280 static char text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6281 static char cold_text_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6282 static char cold_end_label[MAX_ARTIFICIAL_LABEL_BYTES];
6283 static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6284 static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6285 static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6286 static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6287 static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
6288 static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
6289
6290 #ifndef TEXT_END_LABEL
6291 #define TEXT_END_LABEL          "Letext"
6292 #endif
6293 #ifndef COLD_END_LABEL
6294 #define COLD_END_LABEL          "Letext_cold"
6295 #endif
6296 #ifndef BLOCK_BEGIN_LABEL
6297 #define BLOCK_BEGIN_LABEL       "LBB"
6298 #endif
6299 #ifndef BLOCK_END_LABEL
6300 #define BLOCK_END_LABEL         "LBE"
6301 #endif
6302 #ifndef LINE_CODE_LABEL
6303 #define LINE_CODE_LABEL         "LM"
6304 #endif
6305 #ifndef SEPARATE_LINE_CODE_LABEL
6306 #define SEPARATE_LINE_CODE_LABEL        "LSM"
6307 #endif
6308
6309 \f
6310 /* We allow a language front-end to designate a function that is to be
6311    called to "demangle" any name before it is put into a DIE.  */
6312
6313 static const char *(*demangle_name_func) (const char *);
6314
6315 void
6316 dwarf2out_set_demangle_name_func (const char *(*func) (const char *))
6317 {
6318   demangle_name_func = func;
6319 }
6320
6321 /* Test if rtl node points to a pseudo register.  */
6322
6323 static inline int
6324 is_pseudo_reg (const_rtx rtl)
6325 {
6326   return ((REG_P (rtl) && REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
6327           || (GET_CODE (rtl) == SUBREG
6328               && REGNO (SUBREG_REG (rtl)) >= FIRST_PSEUDO_REGISTER));
6329 }
6330
6331 /* Return a reference to a type, with its const and volatile qualifiers
6332    removed.  */
6333
6334 static inline tree
6335 type_main_variant (tree type)
6336 {
6337   type = TYPE_MAIN_VARIANT (type);
6338
6339   /* ??? There really should be only one main variant among any group of
6340      variants of a given type (and all of the MAIN_VARIANT values for all
6341      members of the group should point to that one type) but sometimes the C
6342      front-end messes this up for array types, so we work around that bug
6343      here.  */
6344   if (TREE_CODE (type) == ARRAY_TYPE)
6345     while (type != TYPE_MAIN_VARIANT (type))
6346       type = TYPE_MAIN_VARIANT (type);
6347
6348   return type;
6349 }
6350
6351 /* Return nonzero if the given type node represents a tagged type.  */
6352
6353 static inline int
6354 is_tagged_type (const_tree type)
6355 {
6356   enum tree_code code = TREE_CODE (type);
6357
6358   return (code == RECORD_TYPE || code == UNION_TYPE
6359           || code == QUAL_UNION_TYPE || code == ENUMERAL_TYPE);
6360 }
6361
6362 /* Convert a DIE tag into its string name.  */
6363
6364 static const char *
6365 dwarf_tag_name (unsigned int tag)
6366 {
6367   switch (tag)
6368     {
6369     case DW_TAG_padding:
6370       return "DW_TAG_padding";
6371     case DW_TAG_array_type:
6372       return "DW_TAG_array_type";
6373     case DW_TAG_class_type:
6374       return "DW_TAG_class_type";
6375     case DW_TAG_entry_point:
6376       return "DW_TAG_entry_point";
6377     case DW_TAG_enumeration_type:
6378       return "DW_TAG_enumeration_type";
6379     case DW_TAG_formal_parameter:
6380       return "DW_TAG_formal_parameter";
6381     case DW_TAG_imported_declaration:
6382       return "DW_TAG_imported_declaration";
6383     case DW_TAG_label:
6384       return "DW_TAG_label";
6385     case DW_TAG_lexical_block:
6386       return "DW_TAG_lexical_block";
6387     case DW_TAG_member:
6388       return "DW_TAG_member";
6389     case DW_TAG_pointer_type:
6390       return "DW_TAG_pointer_type";
6391     case DW_TAG_reference_type:
6392       return "DW_TAG_reference_type";
6393     case DW_TAG_compile_unit:
6394       return "DW_TAG_compile_unit";
6395     case DW_TAG_string_type:
6396       return "DW_TAG_string_type";
6397     case DW_TAG_structure_type:
6398       return "DW_TAG_structure_type";
6399     case DW_TAG_subroutine_type:
6400       return "DW_TAG_subroutine_type";
6401     case DW_TAG_typedef:
6402       return "DW_TAG_typedef";
6403     case DW_TAG_union_type:
6404       return "DW_TAG_union_type";
6405     case DW_TAG_unspecified_parameters:
6406       return "DW_TAG_unspecified_parameters";
6407     case DW_TAG_variant:
6408       return "DW_TAG_variant";
6409     case DW_TAG_common_block:
6410       return "DW_TAG_common_block";
6411     case DW_TAG_common_inclusion:
6412       return "DW_TAG_common_inclusion";
6413     case DW_TAG_inheritance:
6414       return "DW_TAG_inheritance";
6415     case DW_TAG_inlined_subroutine:
6416       return "DW_TAG_inlined_subroutine";
6417     case DW_TAG_module:
6418       return "DW_TAG_module";
6419     case DW_TAG_ptr_to_member_type:
6420       return "DW_TAG_ptr_to_member_type";
6421     case DW_TAG_set_type:
6422       return "DW_TAG_set_type";
6423     case DW_TAG_subrange_type:
6424       return "DW_TAG_subrange_type";
6425     case DW_TAG_with_stmt:
6426       return "DW_TAG_with_stmt";
6427     case DW_TAG_access_declaration:
6428       return "DW_TAG_access_declaration";
6429     case DW_TAG_base_type:
6430       return "DW_TAG_base_type";
6431     case DW_TAG_catch_block:
6432       return "DW_TAG_catch_block";
6433     case DW_TAG_const_type:
6434       return "DW_TAG_const_type";
6435     case DW_TAG_constant:
6436       return "DW_TAG_constant";
6437     case DW_TAG_enumerator:
6438       return "DW_TAG_enumerator";
6439     case DW_TAG_file_type:
6440       return "DW_TAG_file_type";
6441     case DW_TAG_friend:
6442       return "DW_TAG_friend";
6443     case DW_TAG_namelist:
6444       return "DW_TAG_namelist";
6445     case DW_TAG_namelist_item:
6446       return "DW_TAG_namelist_item";
6447     case DW_TAG_packed_type:
6448       return "DW_TAG_packed_type";
6449     case DW_TAG_subprogram:
6450       return "DW_TAG_subprogram";
6451     case DW_TAG_template_type_param:
6452       return "DW_TAG_template_type_param";
6453     case DW_TAG_template_value_param:
6454       return "DW_TAG_template_value_param";
6455     case DW_TAG_thrown_type:
6456       return "DW_TAG_thrown_type";
6457     case DW_TAG_try_block:
6458       return "DW_TAG_try_block";
6459     case DW_TAG_variant_part:
6460       return "DW_TAG_variant_part";
6461     case DW_TAG_variable:
6462       return "DW_TAG_variable";
6463     case DW_TAG_volatile_type:
6464       return "DW_TAG_volatile_type";
6465     case DW_TAG_dwarf_procedure:
6466       return "DW_TAG_dwarf_procedure";
6467     case DW_TAG_restrict_type:
6468       return "DW_TAG_restrict_type";
6469     case DW_TAG_interface_type:
6470       return "DW_TAG_interface_type";
6471     case DW_TAG_namespace:
6472       return "DW_TAG_namespace";
6473     case DW_TAG_imported_module:
6474       return "DW_TAG_imported_module";
6475     case DW_TAG_unspecified_type:
6476       return "DW_TAG_unspecified_type";
6477     case DW_TAG_partial_unit:
6478       return "DW_TAG_partial_unit";
6479     case DW_TAG_imported_unit:
6480       return "DW_TAG_imported_unit";
6481     case DW_TAG_condition:
6482       return "DW_TAG_condition";
6483     case DW_TAG_shared_type:
6484       return "DW_TAG_shared_type";
6485     case DW_TAG_type_unit:
6486       return "DW_TAG_type_unit";
6487     case DW_TAG_rvalue_reference_type:
6488       return "DW_TAG_rvalue_reference_type";
6489     case DW_TAG_template_alias:
6490       return "DW_TAG_template_alias";
6491     case DW_TAG_GNU_template_parameter_pack:
6492       return "DW_TAG_GNU_template_parameter_pack";
6493     case DW_TAG_GNU_formal_parameter_pack:
6494       return "DW_TAG_GNU_formal_parameter_pack";
6495     case DW_TAG_MIPS_loop:
6496       return "DW_TAG_MIPS_loop";
6497     case DW_TAG_format_label:
6498       return "DW_TAG_format_label";
6499     case DW_TAG_function_template:
6500       return "DW_TAG_function_template";
6501     case DW_TAG_class_template:
6502       return "DW_TAG_class_template";
6503     case DW_TAG_GNU_BINCL:
6504       return "DW_TAG_GNU_BINCL";
6505     case DW_TAG_GNU_EINCL:
6506       return "DW_TAG_GNU_EINCL";
6507     case DW_TAG_GNU_template_template_param:
6508       return "DW_TAG_GNU_template_template_param";
6509     default:
6510       return "DW_TAG_<unknown>";
6511     }
6512 }
6513
6514 /* Convert a DWARF attribute code into its string name.  */
6515
6516 static const char *
6517 dwarf_attr_name (unsigned int attr)
6518 {
6519   switch (attr)
6520     {
6521     case DW_AT_sibling:
6522       return "DW_AT_sibling";
6523     case DW_AT_location:
6524       return "DW_AT_location";
6525     case DW_AT_name:
6526       return "DW_AT_name";
6527     case DW_AT_ordering:
6528       return "DW_AT_ordering";
6529     case DW_AT_subscr_data:
6530       return "DW_AT_subscr_data";
6531     case DW_AT_byte_size:
6532       return "DW_AT_byte_size";
6533     case DW_AT_bit_offset:
6534       return "DW_AT_bit_offset";
6535     case DW_AT_bit_size:
6536       return "DW_AT_bit_size";
6537     case DW_AT_element_list:
6538       return "DW_AT_element_list";
6539     case DW_AT_stmt_list:
6540       return "DW_AT_stmt_list";
6541     case DW_AT_low_pc:
6542       return "DW_AT_low_pc";
6543     case DW_AT_high_pc:
6544       return "DW_AT_high_pc";
6545     case DW_AT_language:
6546       return "DW_AT_language";
6547     case DW_AT_member:
6548       return "DW_AT_member";
6549     case DW_AT_discr:
6550       return "DW_AT_discr";
6551     case DW_AT_discr_value:
6552       return "DW_AT_discr_value";
6553     case DW_AT_visibility:
6554       return "DW_AT_visibility";
6555     case DW_AT_import:
6556       return "DW_AT_import";
6557     case DW_AT_string_length:
6558       return "DW_AT_string_length";
6559     case DW_AT_common_reference:
6560       return "DW_AT_common_reference";
6561     case DW_AT_comp_dir:
6562       return "DW_AT_comp_dir";
6563     case DW_AT_const_value:
6564       return "DW_AT_const_value";
6565     case DW_AT_containing_type:
6566       return "DW_AT_containing_type";
6567     case DW_AT_default_value:
6568       return "DW_AT_default_value";
6569     case DW_AT_inline:
6570       return "DW_AT_inline";
6571     case DW_AT_is_optional:
6572       return "DW_AT_is_optional";
6573     case DW_AT_lower_bound:
6574       return "DW_AT_lower_bound";
6575     case DW_AT_producer:
6576       return "DW_AT_producer";
6577     case DW_AT_prototyped:
6578       return "DW_AT_prototyped";
6579     case DW_AT_return_addr:
6580       return "DW_AT_return_addr";
6581     case DW_AT_start_scope:
6582       return "DW_AT_start_scope";
6583     case DW_AT_bit_stride:
6584       return "DW_AT_bit_stride";
6585     case DW_AT_upper_bound:
6586       return "DW_AT_upper_bound";
6587     case DW_AT_abstract_origin:
6588       return "DW_AT_abstract_origin";
6589     case DW_AT_accessibility:
6590       return "DW_AT_accessibility";
6591     case DW_AT_address_class:
6592       return "DW_AT_address_class";
6593     case DW_AT_artificial:
6594       return "DW_AT_artificial";
6595     case DW_AT_base_types:
6596       return "DW_AT_base_types";
6597     case DW_AT_calling_convention:
6598       return "DW_AT_calling_convention";
6599     case DW_AT_count:
6600       return "DW_AT_count";
6601     case DW_AT_data_member_location:
6602       return "DW_AT_data_member_location";
6603     case DW_AT_decl_column:
6604       return "DW_AT_decl_column";
6605     case DW_AT_decl_file:
6606       return "DW_AT_decl_file";
6607     case DW_AT_decl_line:
6608       return "DW_AT_decl_line";
6609     case DW_AT_declaration:
6610       return "DW_AT_declaration";
6611     case DW_AT_discr_list:
6612       return "DW_AT_discr_list";
6613     case DW_AT_encoding:
6614       return "DW_AT_encoding";
6615     case DW_AT_external:
6616       return "DW_AT_external";
6617     case DW_AT_explicit:
6618       return "DW_AT_explicit";
6619     case DW_AT_frame_base:
6620       return "DW_AT_frame_base";
6621     case DW_AT_friend:
6622       return "DW_AT_friend";
6623     case DW_AT_identifier_case:
6624       return "DW_AT_identifier_case";
6625     case DW_AT_macro_info:
6626       return "DW_AT_macro_info";
6627     case DW_AT_namelist_items:
6628       return "DW_AT_namelist_items";
6629     case DW_AT_priority:
6630       return "DW_AT_priority";
6631     case DW_AT_segment:
6632       return "DW_AT_segment";
6633     case DW_AT_specification:
6634       return "DW_AT_specification";
6635     case DW_AT_static_link:
6636       return "DW_AT_static_link";
6637     case DW_AT_type:
6638       return "DW_AT_type";
6639     case DW_AT_use_location:
6640       return "DW_AT_use_location";
6641     case DW_AT_variable_parameter:
6642       return "DW_AT_variable_parameter";
6643     case DW_AT_virtuality:
6644       return "DW_AT_virtuality";
6645     case DW_AT_vtable_elem_location:
6646       return "DW_AT_vtable_elem_location";
6647
6648     case DW_AT_allocated:
6649       return "DW_AT_allocated";
6650     case DW_AT_associated:
6651       return "DW_AT_associated";
6652     case DW_AT_data_location:
6653       return "DW_AT_data_location";
6654     case DW_AT_byte_stride:
6655       return "DW_AT_byte_stride";
6656     case DW_AT_entry_pc:
6657       return "DW_AT_entry_pc";
6658     case DW_AT_use_UTF8:
6659       return "DW_AT_use_UTF8";
6660     case DW_AT_extension:
6661       return "DW_AT_extension";
6662     case DW_AT_ranges:
6663       return "DW_AT_ranges";
6664     case DW_AT_trampoline:
6665       return "DW_AT_trampoline";
6666     case DW_AT_call_column:
6667       return "DW_AT_call_column";
6668     case DW_AT_call_file:
6669       return "DW_AT_call_file";
6670     case DW_AT_call_line:
6671       return "DW_AT_call_line";
6672
6673     case DW_AT_signature:
6674       return "DW_AT_signature";
6675     case DW_AT_main_subprogram:
6676       return "DW_AT_main_subprogram";
6677     case DW_AT_data_bit_offset:
6678       return "DW_AT_data_bit_offset";
6679     case DW_AT_const_expr:
6680       return "DW_AT_const_expr";
6681     case DW_AT_enum_class:
6682       return "DW_AT_enum_class";
6683     case DW_AT_linkage_name:
6684       return "DW_AT_linkage_name";
6685
6686     case DW_AT_MIPS_fde:
6687       return "DW_AT_MIPS_fde";
6688     case DW_AT_MIPS_loop_begin:
6689       return "DW_AT_MIPS_loop_begin";
6690     case DW_AT_MIPS_tail_loop_begin:
6691       return "DW_AT_MIPS_tail_loop_begin";
6692     case DW_AT_MIPS_epilog_begin:
6693       return "DW_AT_MIPS_epilog_begin";
6694     case DW_AT_MIPS_loop_unroll_factor:
6695       return "DW_AT_MIPS_loop_unroll_factor";
6696     case DW_AT_MIPS_software_pipeline_depth:
6697       return "DW_AT_MIPS_software_pipeline_depth";
6698     case DW_AT_MIPS_linkage_name:
6699       return "DW_AT_MIPS_linkage_name";
6700     case DW_AT_MIPS_stride:
6701       return "DW_AT_MIPS_stride";
6702     case DW_AT_MIPS_abstract_name:
6703       return "DW_AT_MIPS_abstract_name";
6704     case DW_AT_MIPS_clone_origin:
6705       return "DW_AT_MIPS_clone_origin";
6706     case DW_AT_MIPS_has_inlines:
6707       return "DW_AT_MIPS_has_inlines";
6708
6709     case DW_AT_sf_names:
6710       return "DW_AT_sf_names";
6711     case DW_AT_src_info:
6712       return "DW_AT_src_info";
6713     case DW_AT_mac_info:
6714       return "DW_AT_mac_info";
6715     case DW_AT_src_coords:
6716       return "DW_AT_src_coords";
6717     case DW_AT_body_begin:
6718       return "DW_AT_body_begin";
6719     case DW_AT_body_end:
6720       return "DW_AT_body_end";
6721     case DW_AT_GNU_vector:
6722       return "DW_AT_GNU_vector";
6723     case DW_AT_GNU_guarded_by:
6724       return "DW_AT_GNU_guarded_by";
6725     case DW_AT_GNU_pt_guarded_by:
6726       return "DW_AT_GNU_pt_guarded_by";
6727     case DW_AT_GNU_guarded:
6728       return "DW_AT_GNU_guarded";
6729     case DW_AT_GNU_pt_guarded:
6730       return "DW_AT_GNU_pt_guarded";
6731     case DW_AT_GNU_locks_excluded:
6732       return "DW_AT_GNU_locks_excluded";
6733     case DW_AT_GNU_exclusive_locks_required:
6734       return "DW_AT_GNU_exclusive_locks_required";
6735     case DW_AT_GNU_shared_locks_required:
6736       return "DW_AT_GNU_shared_locks_required";
6737     case DW_AT_GNU_odr_signature:
6738       return "DW_AT_GNU_odr_signature";
6739     case DW_AT_GNU_template_name:
6740       return "DW_AT_GNU_template_name";
6741
6742     case DW_AT_VMS_rtnbeg_pd_address:
6743       return "DW_AT_VMS_rtnbeg_pd_address";
6744
6745     default:
6746       return "DW_AT_<unknown>";
6747     }
6748 }
6749
6750 /* Convert a DWARF value form code into its string name.  */
6751
6752 static const char *
6753 dwarf_form_name (unsigned int form)
6754 {
6755   switch (form)
6756     {
6757     case DW_FORM_addr:
6758       return "DW_FORM_addr";
6759     case DW_FORM_block2:
6760       return "DW_FORM_block2";
6761     case DW_FORM_block4:
6762       return "DW_FORM_block4";
6763     case DW_FORM_data2:
6764       return "DW_FORM_data2";
6765     case DW_FORM_data4:
6766       return "DW_FORM_data4";
6767     case DW_FORM_data8:
6768       return "DW_FORM_data8";
6769     case DW_FORM_string:
6770       return "DW_FORM_string";
6771     case DW_FORM_block:
6772       return "DW_FORM_block";
6773     case DW_FORM_block1:
6774       return "DW_FORM_block1";
6775     case DW_FORM_data1:
6776       return "DW_FORM_data1";
6777     case DW_FORM_flag:
6778       return "DW_FORM_flag";
6779     case DW_FORM_sdata:
6780       return "DW_FORM_sdata";
6781     case DW_FORM_strp:
6782       return "DW_FORM_strp";
6783     case DW_FORM_udata:
6784       return "DW_FORM_udata";
6785     case DW_FORM_ref_addr:
6786       return "DW_FORM_ref_addr";
6787     case DW_FORM_ref1:
6788       return "DW_FORM_ref1";
6789     case DW_FORM_ref2:
6790       return "DW_FORM_ref2";
6791     case DW_FORM_ref4:
6792       return "DW_FORM_ref4";
6793     case DW_FORM_ref8:
6794       return "DW_FORM_ref8";
6795     case DW_FORM_ref_udata:
6796       return "DW_FORM_ref_udata";
6797     case DW_FORM_indirect:
6798       return "DW_FORM_indirect";
6799     case DW_FORM_sec_offset:
6800       return "DW_FORM_sec_offset";
6801     case DW_FORM_exprloc:
6802       return "DW_FORM_exprloc";
6803     case DW_FORM_flag_present:
6804       return "DW_FORM_flag_present";
6805     case DW_FORM_ref_sig8:
6806       return "DW_FORM_ref_sig8";
6807     default:
6808       return "DW_FORM_<unknown>";
6809     }
6810 }
6811 \f
6812 /* Determine the "ultimate origin" of a decl.  The decl may be an inlined
6813    instance of an inlined instance of a decl which is local to an inline
6814    function, so we have to trace all of the way back through the origin chain
6815    to find out what sort of node actually served as the original seed for the
6816    given block.  */
6817
6818 static tree
6819 decl_ultimate_origin (const_tree decl)
6820 {
6821   if (!CODE_CONTAINS_STRUCT (TREE_CODE (decl), TS_DECL_COMMON))
6822     return NULL_TREE;
6823
6824   /* output_inline_function sets DECL_ABSTRACT_ORIGIN for all the
6825      nodes in the function to point to themselves; ignore that if
6826      we're trying to output the abstract instance of this function.  */
6827   if (DECL_ABSTRACT (decl) && DECL_ABSTRACT_ORIGIN (decl) == decl)
6828     return NULL_TREE;
6829
6830   /* Since the DECL_ABSTRACT_ORIGIN for a DECL is supposed to be the
6831      most distant ancestor, this should never happen.  */
6832   gcc_assert (!DECL_FROM_INLINE (DECL_ORIGIN (decl)));
6833
6834   return DECL_ABSTRACT_ORIGIN (decl);
6835 }
6836
6837 /* Get the class to which DECL belongs, if any.  In g++, the DECL_CONTEXT
6838    of a virtual function may refer to a base class, so we check the 'this'
6839    parameter.  */
6840
6841 static tree
6842 decl_class_context (tree decl)
6843 {
6844   tree context = NULL_TREE;
6845
6846   if (TREE_CODE (decl) != FUNCTION_DECL || ! DECL_VINDEX (decl))
6847     context = DECL_CONTEXT (decl);
6848   else
6849     context = TYPE_MAIN_VARIANT
6850       (TREE_TYPE (TREE_VALUE (TYPE_ARG_TYPES (TREE_TYPE (decl)))));
6851
6852   if (context && !TYPE_P (context))
6853     context = NULL_TREE;
6854
6855   return context;
6856 }
6857 \f
6858 /* Add an attribute/value pair to a DIE.  */
6859
6860 static inline void
6861 add_dwarf_attr (dw_die_ref die, dw_attr_ref attr)
6862 {
6863   /* Maybe this should be an assert?  */
6864   if (die == NULL)
6865     return;
6866
6867   if (die->die_attr == NULL)
6868     die->die_attr = VEC_alloc (dw_attr_node, gc, 1);
6869   VEC_safe_push (dw_attr_node, gc, die->die_attr, attr);
6870 }
6871
6872 static inline enum dw_val_class
6873 AT_class (dw_attr_ref a)
6874 {
6875   return a->dw_attr_val.val_class;
6876 }
6877
6878 /* Add a flag value attribute to a DIE.  */
6879
6880 static inline void
6881 add_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int flag)
6882 {
6883   dw_attr_node attr;
6884
6885   attr.dw_attr = attr_kind;
6886   attr.dw_attr_val.val_class = dw_val_class_flag;
6887   attr.dw_attr_val.v.val_flag = flag;
6888   add_dwarf_attr (die, &attr);
6889 }
6890
6891 static inline unsigned
6892 AT_flag (dw_attr_ref a)
6893 {
6894   gcc_assert (a && AT_class (a) == dw_val_class_flag);
6895   return a->dw_attr_val.v.val_flag;
6896 }
6897
6898 /* Add a signed integer attribute value to a DIE.  */
6899
6900 static inline void
6901 add_AT_int (dw_die_ref die, enum dwarf_attribute attr_kind, HOST_WIDE_INT int_val)
6902 {
6903   dw_attr_node attr;
6904
6905   attr.dw_attr = attr_kind;
6906   attr.dw_attr_val.val_class = dw_val_class_const;
6907   attr.dw_attr_val.v.val_int = int_val;
6908   add_dwarf_attr (die, &attr);
6909 }
6910
6911 static inline HOST_WIDE_INT
6912 AT_int (dw_attr_ref a)
6913 {
6914   gcc_assert (a && AT_class (a) == dw_val_class_const);
6915   return a->dw_attr_val.v.val_int;
6916 }
6917
6918 /* Add an unsigned integer attribute value to a DIE.  */
6919
6920 static inline void
6921 add_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind,
6922                  unsigned HOST_WIDE_INT unsigned_val)
6923 {
6924   dw_attr_node attr;
6925
6926   attr.dw_attr = attr_kind;
6927   attr.dw_attr_val.val_class = dw_val_class_unsigned_const;
6928   attr.dw_attr_val.v.val_unsigned = unsigned_val;
6929   add_dwarf_attr (die, &attr);
6930 }
6931
6932 static inline unsigned HOST_WIDE_INT
6933 AT_unsigned (dw_attr_ref a)
6934 {
6935   gcc_assert (a && AT_class (a) == dw_val_class_unsigned_const);
6936   return a->dw_attr_val.v.val_unsigned;
6937 }
6938
6939 /* Add an unsigned double integer attribute value to a DIE.  */
6940
6941 static inline void
6942 add_AT_double (dw_die_ref die, enum dwarf_attribute attr_kind,
6943                HOST_WIDE_INT high, unsigned HOST_WIDE_INT low)
6944 {
6945   dw_attr_node attr;
6946
6947   attr.dw_attr = attr_kind;
6948   attr.dw_attr_val.val_class = dw_val_class_const_double;
6949   attr.dw_attr_val.v.val_double.high = high;
6950   attr.dw_attr_val.v.val_double.low = low;
6951   add_dwarf_attr (die, &attr);
6952 }
6953
6954 /* Add a floating point attribute value to a DIE and return it.  */
6955
6956 static inline void
6957 add_AT_vec (dw_die_ref die, enum dwarf_attribute attr_kind,
6958             unsigned int length, unsigned int elt_size, unsigned char *array)
6959 {
6960   dw_attr_node attr;
6961
6962   attr.dw_attr = attr_kind;
6963   attr.dw_attr_val.val_class = dw_val_class_vec;
6964   attr.dw_attr_val.v.val_vec.length = length;
6965   attr.dw_attr_val.v.val_vec.elt_size = elt_size;
6966   attr.dw_attr_val.v.val_vec.array = array;
6967   add_dwarf_attr (die, &attr);
6968 }
6969
6970 /* Add an 8-byte data attribute value to a DIE.  */
6971
6972 static inline void
6973 add_AT_data8 (dw_die_ref die, enum dwarf_attribute attr_kind,
6974               unsigned char data8[8])
6975 {
6976   dw_attr_node attr;
6977
6978   attr.dw_attr = attr_kind;
6979   attr.dw_attr_val.val_class = dw_val_class_data8;
6980   memcpy (attr.dw_attr_val.v.val_data8, data8, 8);
6981   add_dwarf_attr (die, &attr);
6982 }
6983
6984 /* Hash and equality functions for debug_str_hash.  */
6985
6986 static hashval_t
6987 debug_str_do_hash (const void *x)
6988 {
6989   return htab_hash_string (((const struct indirect_string_node *)x)->str);
6990 }
6991
6992 static int
6993 debug_str_eq (const void *x1, const void *x2)
6994 {
6995   return strcmp ((((const struct indirect_string_node *)x1)->str),
6996                  (const char *)x2) == 0;
6997 }
6998
6999 /* Add STR to the indirect string hash table.  */
7000
7001 static struct indirect_string_node *
7002 find_AT_string (const char *str)
7003 {
7004   struct indirect_string_node *node;
7005   void **slot;
7006
7007   if (! debug_str_hash)
7008     debug_str_hash = htab_create_ggc (10, debug_str_do_hash,
7009                                       debug_str_eq, NULL);
7010
7011   slot = htab_find_slot_with_hash (debug_str_hash, str,
7012                                    htab_hash_string (str), INSERT);
7013   if (*slot == NULL)
7014     {
7015       node = (struct indirect_string_node *)
7016                ggc_alloc_cleared (sizeof (struct indirect_string_node));
7017       node->str = ggc_strdup (str);
7018       *slot = node;
7019     }
7020   else
7021     node = (struct indirect_string_node *) *slot;
7022
7023   node->refcount++;
7024   return node;
7025 }
7026
7027 /* Add a string attribute value to a DIE.  */
7028
7029 static inline void
7030 add_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind, const char *str)
7031 {
7032   dw_attr_node attr;
7033   struct indirect_string_node *node;
7034
7035   node = find_AT_string (str);
7036
7037   attr.dw_attr = attr_kind;
7038   attr.dw_attr_val.val_class = dw_val_class_str;
7039   attr.dw_attr_val.v.val_str = node;
7040   add_dwarf_attr (die, &attr);
7041 }
7042
7043 /* Create a label for an indirect string node, ensuring it is going to
7044    be output, unless its reference count goes down to zero.  */
7045
7046 static inline void
7047 gen_label_for_indirect_string (struct indirect_string_node *node)
7048 {
7049   char label[32];
7050
7051   if (node->label)
7052     return;
7053
7054   ASM_GENERATE_INTERNAL_LABEL (label, "LASF", dw2_string_counter);
7055   ++dw2_string_counter;
7056   node->label = xstrdup (label);
7057 }
7058
7059 /* Create a SYMBOL_REF rtx whose value is the initial address of a
7060    debug string STR.  */
7061
7062 static inline rtx
7063 get_debug_string_label (const char *str)
7064 {
7065   struct indirect_string_node *node = find_AT_string (str);
7066
7067   debug_str_hash_forced = true;
7068
7069   gen_label_for_indirect_string (node);
7070
7071   return gen_rtx_SYMBOL_REF (Pmode, node->label);
7072 }
7073
7074 static inline const char *
7075 AT_string (dw_attr_ref a)
7076 {
7077   gcc_assert (a && AT_class (a) == dw_val_class_str);
7078   return a->dw_attr_val.v.val_str->str;
7079 }
7080
7081 /* Find out whether a string should be output inline in DIE
7082    or out-of-line in .debug_str section.  */
7083
7084 static enum dwarf_form
7085 AT_string_form (dw_attr_ref a)
7086 {
7087   struct indirect_string_node *node;
7088   unsigned int len;
7089
7090   gcc_assert (a && AT_class (a) == dw_val_class_str);
7091
7092   node = a->dw_attr_val.v.val_str;
7093   if (node->form)
7094     return node->form;
7095
7096   len = strlen (node->str) + 1;
7097
7098   /* If the string is shorter or equal to the size of the reference, it is
7099      always better to put it inline.  */
7100   if (len <= DWARF_OFFSET_SIZE || node->refcount == 0)
7101     return node->form = DW_FORM_string;
7102
7103   /* If we cannot expect the linker to merge strings in .debug_str
7104      section, only put it into .debug_str if it is worth even in this
7105      single module.  */
7106   if (DWARF2_INDIRECT_STRING_SUPPORT_MISSING_ON_TARGET
7107       || ((debug_str_section->common.flags & SECTION_MERGE) == 0
7108       && (len - DWARF_OFFSET_SIZE) * node->refcount <= len))
7109     return node->form = DW_FORM_string;
7110
7111   gen_label_for_indirect_string (node);
7112
7113   return node->form = DW_FORM_strp;
7114 }
7115
7116 /* Add a DIE reference attribute value to a DIE.  */
7117
7118 static inline void
7119 add_AT_die_ref (dw_die_ref die, enum dwarf_attribute attr_kind, dw_die_ref targ_die)
7120 {
7121   dw_attr_node attr;
7122
7123   attr.dw_attr = attr_kind;
7124   attr.dw_attr_val.val_class = dw_val_class_die_ref;
7125   attr.dw_attr_val.v.val_die_ref.die = targ_die;
7126   attr.dw_attr_val.v.val_die_ref.external = 0;
7127   add_dwarf_attr (die, &attr);
7128 }
7129
7130 /* Add an AT_specification attribute to a DIE, and also make the back
7131    pointer from the specification to the definition.  */
7132
7133 static inline void
7134 add_AT_specification (dw_die_ref die, dw_die_ref targ_die)
7135 {
7136   add_AT_die_ref (die, DW_AT_specification, targ_die);
7137   gcc_assert (!targ_die->die_definition);
7138   targ_die->die_definition = die;
7139 }
7140
7141 static inline dw_die_ref
7142 AT_ref (dw_attr_ref a)
7143 {
7144   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7145   return a->dw_attr_val.v.val_die_ref.die;
7146 }
7147
7148 static inline int
7149 AT_ref_external (dw_attr_ref a)
7150 {
7151   if (a && AT_class (a) == dw_val_class_die_ref)
7152     return a->dw_attr_val.v.val_die_ref.external;
7153
7154   return 0;
7155 }
7156
7157 static inline void
7158 set_AT_ref_external (dw_attr_ref a, int i)
7159 {
7160   gcc_assert (a && AT_class (a) == dw_val_class_die_ref);
7161   a->dw_attr_val.v.val_die_ref.external = i;
7162 }
7163
7164 /* Add an FDE reference attribute value to a DIE.  */
7165
7166 static inline void
7167 add_AT_fde_ref (dw_die_ref die, enum dwarf_attribute attr_kind, unsigned int targ_fde)
7168 {
7169   dw_attr_node attr;
7170
7171   attr.dw_attr = attr_kind;
7172   attr.dw_attr_val.val_class = dw_val_class_fde_ref;
7173   attr.dw_attr_val.v.val_fde_index = targ_fde;
7174   add_dwarf_attr (die, &attr);
7175 }
7176
7177 /* Add a location description attribute value to a DIE.  */
7178
7179 static inline void
7180 add_AT_loc (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_descr_ref loc)
7181 {
7182   dw_attr_node attr;
7183
7184   attr.dw_attr = attr_kind;
7185   attr.dw_attr_val.val_class = dw_val_class_loc;
7186   attr.dw_attr_val.v.val_loc = loc;
7187   add_dwarf_attr (die, &attr);
7188 }
7189
7190 static inline dw_loc_descr_ref
7191 AT_loc (dw_attr_ref a)
7192 {
7193   gcc_assert (a && AT_class (a) == dw_val_class_loc);
7194   return a->dw_attr_val.v.val_loc;
7195 }
7196
7197 static inline void
7198 add_AT_loc_list (dw_die_ref die, enum dwarf_attribute attr_kind, dw_loc_list_ref loc_list)
7199 {
7200   dw_attr_node attr;
7201
7202   attr.dw_attr = attr_kind;
7203   attr.dw_attr_val.val_class = dw_val_class_loc_list;
7204   attr.dw_attr_val.v.val_loc_list = loc_list;
7205   add_dwarf_attr (die, &attr);
7206   have_location_lists = true;
7207 }
7208
7209 static inline dw_loc_list_ref
7210 AT_loc_list (dw_attr_ref a)
7211 {
7212   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7213   return a->dw_attr_val.v.val_loc_list;
7214 }
7215
7216 static inline dw_loc_list_ref *
7217 AT_loc_list_ptr (dw_attr_ref a)
7218 {
7219   gcc_assert (a && AT_class (a) == dw_val_class_loc_list);
7220   return &a->dw_attr_val.v.val_loc_list;
7221 }
7222
7223 /* Add an address constant attribute value to a DIE.  */
7224
7225 static inline void
7226 add_AT_addr (dw_die_ref die, enum dwarf_attribute attr_kind, rtx addr)
7227 {
7228   dw_attr_node attr;
7229
7230   attr.dw_attr = attr_kind;
7231   attr.dw_attr_val.val_class = dw_val_class_addr;
7232   attr.dw_attr_val.v.val_addr = addr;
7233   add_dwarf_attr (die, &attr);
7234 }
7235
7236 /* Get the RTX from to an address DIE attribute.  */
7237
7238 static inline rtx
7239 AT_addr (dw_attr_ref a)
7240 {
7241   gcc_assert (a && AT_class (a) == dw_val_class_addr);
7242   return a->dw_attr_val.v.val_addr;
7243 }
7244
7245 /* Add a file attribute value to a DIE.  */
7246
7247 static inline void
7248 add_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind,
7249              struct dwarf_file_data *fd)
7250 {
7251   dw_attr_node attr;
7252
7253   attr.dw_attr = attr_kind;
7254   attr.dw_attr_val.val_class = dw_val_class_file;
7255   attr.dw_attr_val.v.val_file = fd;
7256   add_dwarf_attr (die, &attr);
7257 }
7258
7259 /* Get the dwarf_file_data from a file DIE attribute.  */
7260
7261 static inline struct dwarf_file_data *
7262 AT_file (dw_attr_ref a)
7263 {
7264   gcc_assert (a && AT_class (a) == dw_val_class_file);
7265   return a->dw_attr_val.v.val_file;
7266 }
7267
7268 /* Add a label identifier attribute value to a DIE.  */
7269
7270 static inline void
7271 add_AT_lbl_id (dw_die_ref die, enum dwarf_attribute attr_kind, const char *lbl_id)
7272 {
7273   dw_attr_node attr;
7274
7275   attr.dw_attr = attr_kind;
7276   attr.dw_attr_val.val_class = dw_val_class_lbl_id;
7277   attr.dw_attr_val.v.val_lbl_id = xstrdup (lbl_id);
7278   add_dwarf_attr (die, &attr);
7279 }
7280
7281 /* Add a section offset attribute value to a DIE, an offset into the
7282    debug_line section.  */
7283
7284 static inline void
7285 add_AT_lineptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7286                 const char *label)
7287 {
7288   dw_attr_node attr;
7289
7290   attr.dw_attr = attr_kind;
7291   attr.dw_attr_val.val_class = dw_val_class_lineptr;
7292   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7293   add_dwarf_attr (die, &attr);
7294 }
7295
7296 /* Add a section offset attribute value to a DIE, an offset into the
7297    debug_macinfo section.  */
7298
7299 static inline void
7300 add_AT_macptr (dw_die_ref die, enum dwarf_attribute attr_kind,
7301                const char *label)
7302 {
7303   dw_attr_node attr;
7304
7305   attr.dw_attr = attr_kind;
7306   attr.dw_attr_val.val_class = dw_val_class_macptr;
7307   attr.dw_attr_val.v.val_lbl_id = xstrdup (label);
7308   add_dwarf_attr (die, &attr);
7309 }
7310
7311 /* Add an offset attribute value to a DIE.  */
7312
7313 static inline void
7314 add_AT_offset (dw_die_ref die, enum dwarf_attribute attr_kind,
7315                unsigned HOST_WIDE_INT offset)
7316 {
7317   dw_attr_node attr;
7318
7319   attr.dw_attr = attr_kind;
7320   attr.dw_attr_val.val_class = dw_val_class_offset;
7321   attr.dw_attr_val.v.val_offset = offset;
7322   add_dwarf_attr (die, &attr);
7323 }
7324
7325 /* Add an range_list attribute value to a DIE.  */
7326
7327 static void
7328 add_AT_range_list (dw_die_ref die, enum dwarf_attribute attr_kind,
7329                    long unsigned int offset)
7330 {
7331   dw_attr_node attr;
7332
7333   attr.dw_attr = attr_kind;
7334   attr.dw_attr_val.val_class = dw_val_class_range_list;
7335   attr.dw_attr_val.v.val_offset = offset;
7336   add_dwarf_attr (die, &attr);
7337 }
7338
7339 static inline const char *
7340 AT_lbl (dw_attr_ref a)
7341 {
7342   gcc_assert (a && (AT_class (a) == dw_val_class_lbl_id
7343                     || AT_class (a) == dw_val_class_lineptr
7344                     || AT_class (a) == dw_val_class_macptr));
7345   return a->dw_attr_val.v.val_lbl_id;
7346 }
7347
7348 /* Get the attribute of type attr_kind.  */
7349
7350 static dw_attr_ref
7351 get_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7352 {
7353   dw_attr_ref a;
7354   unsigned ix;
7355   dw_die_ref spec = NULL;
7356
7357   if (! die)
7358     return NULL;
7359
7360   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7361     if (a->dw_attr == attr_kind)
7362       return a;
7363     else if (a->dw_attr == DW_AT_specification
7364              || a->dw_attr == DW_AT_abstract_origin)
7365       spec = AT_ref (a);
7366
7367   if (spec)
7368     return get_AT (spec, attr_kind);
7369
7370   return NULL;
7371 }
7372
7373 /* Return the "low pc" attribute value, typically associated with a subprogram
7374    DIE.  Return null if the "low pc" attribute is either not present, or if it
7375    cannot be represented as an assembler label identifier.  */
7376
7377 static inline const char *
7378 get_AT_low_pc (dw_die_ref die)
7379 {
7380   dw_attr_ref a = get_AT (die, DW_AT_low_pc);
7381
7382   return a ? AT_lbl (a) : NULL;
7383 }
7384
7385 /* Return the "high pc" attribute value, typically associated with a subprogram
7386    DIE.  Return null if the "high pc" attribute is either not present, or if it
7387    cannot be represented as an assembler label identifier.  */
7388
7389 static inline const char *
7390 get_AT_hi_pc (dw_die_ref die)
7391 {
7392   dw_attr_ref a = get_AT (die, DW_AT_high_pc);
7393
7394   return a ? AT_lbl (a) : NULL;
7395 }
7396
7397 /* Return the value of the string attribute designated by ATTR_KIND, or
7398    NULL if it is not present.  */
7399
7400 static inline const char *
7401 get_AT_string (dw_die_ref die, enum dwarf_attribute attr_kind)
7402 {
7403   dw_attr_ref a = get_AT (die, attr_kind);
7404
7405   return a ? AT_string (a) : NULL;
7406 }
7407
7408 /* Return the value of the flag attribute designated by ATTR_KIND, or -1
7409    if it is not present.  */
7410
7411 static inline int
7412 get_AT_flag (dw_die_ref die, enum dwarf_attribute attr_kind)
7413 {
7414   dw_attr_ref a = get_AT (die, attr_kind);
7415
7416   return a ? AT_flag (a) : 0;
7417 }
7418
7419 /* Return the value of the unsigned attribute designated by ATTR_KIND, or 0
7420    if it is not present.  */
7421
7422 static inline unsigned
7423 get_AT_unsigned (dw_die_ref die, enum dwarf_attribute attr_kind)
7424 {
7425   dw_attr_ref a = get_AT (die, attr_kind);
7426
7427   return a ? AT_unsigned (a) : 0;
7428 }
7429
7430 static inline dw_die_ref
7431 get_AT_ref (dw_die_ref die, enum dwarf_attribute attr_kind)
7432 {
7433   dw_attr_ref a = get_AT (die, attr_kind);
7434
7435   return a ? AT_ref (a) : NULL;
7436 }
7437
7438 static inline struct dwarf_file_data *
7439 get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
7440 {
7441   dw_attr_ref a = get_AT (die, attr_kind);
7442
7443   return a ? AT_file (a) : NULL;
7444 }
7445
7446 /* Return TRUE if the language is C or C++.  */
7447
7448 static inline bool
7449 is_c_family (void)
7450 {
7451   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7452
7453   return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC
7454           || lang == DW_LANG_C99
7455           || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus);
7456 }
7457
7458 /* Return TRUE if the language is C++.  */
7459
7460 static inline bool
7461 is_cxx (void)
7462 {
7463   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7464
7465   return lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus;
7466 }
7467
7468 /* Return TRUE if the language is Fortran.  */
7469
7470 static inline bool
7471 is_fortran (void)
7472 {
7473   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7474
7475   return (lang == DW_LANG_Fortran77
7476           || lang == DW_LANG_Fortran90
7477           || lang == DW_LANG_Fortran95);
7478 }
7479
7480 /* Return TRUE if the language is Java.  */
7481
7482 static inline bool
7483 is_java (void)
7484 {
7485   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7486
7487   return lang == DW_LANG_Java;
7488 }
7489
7490 /* Return TRUE if the language is Ada.  */
7491
7492 static inline bool
7493 is_ada (void)
7494 {
7495   unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language);
7496
7497   return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
7498 }
7499
7500 /* Remove the specified attribute if present.  */
7501
7502 static void
7503 remove_AT (dw_die_ref die, enum dwarf_attribute attr_kind)
7504 {
7505   dw_attr_ref a;
7506   unsigned ix;
7507
7508   if (! die)
7509     return;
7510
7511   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7512     if (a->dw_attr == attr_kind)
7513       {
7514         if (AT_class (a) == dw_val_class_str)
7515           if (a->dw_attr_val.v.val_str->refcount)
7516             a->dw_attr_val.v.val_str->refcount--;
7517
7518         /* VEC_ordered_remove should help reduce the number of abbrevs
7519            that are needed.  */
7520         VEC_ordered_remove (dw_attr_node, die->die_attr, ix);
7521         return;
7522       }
7523 }
7524
7525 /* Remove CHILD from its parent.  PREV must have the property that
7526    PREV->DIE_SIB == CHILD.  Does not alter CHILD.  */
7527
7528 static void
7529 remove_child_with_prev (dw_die_ref child, dw_die_ref prev)
7530 {
7531   gcc_assert (child->die_parent == prev->die_parent);
7532   gcc_assert (prev->die_sib == child);
7533   if (prev == child)
7534     {
7535       gcc_assert (child->die_parent->die_child == child);
7536       prev = NULL;
7537     }
7538   else
7539     prev->die_sib = child->die_sib;
7540   if (child->die_parent->die_child == child)
7541     child->die_parent->die_child = prev;
7542 }
7543
7544 /* Replace OLD_CHILD with NEW_CHILD.  PREV must have the property that
7545    PREV->DIE_SIB == OLD_CHILD.  Does not alter OLD_CHILD.  */
7546
7547 static void
7548 replace_child (dw_die_ref old_child, dw_die_ref new_child, dw_die_ref prev)
7549 {
7550   dw_die_ref parent = old_child->die_parent;
7551
7552   gcc_assert (parent == prev->die_parent);
7553   gcc_assert (prev->die_sib == old_child);
7554
7555   new_child->die_parent = parent;
7556   if (prev == old_child)
7557     {
7558       gcc_assert (parent->die_child == old_child);
7559       new_child->die_sib = new_child;
7560     }
7561   else
7562     {
7563       prev->die_sib = new_child;
7564       new_child->die_sib = old_child->die_sib;
7565     }
7566   if (old_child->die_parent->die_child == old_child)
7567     old_child->die_parent->die_child = new_child;
7568 }
7569
7570 /* Move all children from OLD_PARENT to NEW_PARENT.  */
7571
7572 static void
7573 move_all_children (dw_die_ref old_parent, dw_die_ref new_parent)
7574 {
7575   dw_die_ref c;
7576   new_parent->die_child = old_parent->die_child;
7577   old_parent->die_child = NULL;
7578   FOR_EACH_CHILD (new_parent, c, c->die_parent = new_parent);
7579 }
7580
7581 /* Remove child DIE whose die_tag is TAG.  Do nothing if no child
7582    matches TAG.  */
7583
7584 static void
7585 remove_child_TAG (dw_die_ref die, enum dwarf_tag tag)
7586 {
7587   dw_die_ref c;
7588
7589   c = die->die_child;
7590   if (c) do {
7591     dw_die_ref prev = c;
7592     c = c->die_sib;
7593     while (c->die_tag == tag)
7594       {
7595         remove_child_with_prev (c, prev);
7596         /* Might have removed every child.  */
7597         if (c == c->die_sib)
7598           return;
7599         c = c->die_sib;
7600       }
7601   } while (c != die->die_child);
7602 }
7603
7604 /* Add a CHILD_DIE as the last child of DIE.  */
7605
7606 static void
7607 add_child_die (dw_die_ref die, dw_die_ref child_die)
7608 {
7609   /* FIXME this should probably be an assert.  */
7610   if (! die || ! child_die)
7611     return;
7612   gcc_assert (die != child_die);
7613
7614   child_die->die_parent = die;
7615   if (die->die_child)
7616     {
7617       child_die->die_sib = die->die_child->die_sib;
7618       die->die_child->die_sib = child_die;
7619     }
7620   else
7621     child_die->die_sib = child_die;
7622   die->die_child = child_die;
7623 }
7624
7625 /* Move CHILD, which must be a child of PARENT or the DIE for which PARENT
7626    is the specification, to the end of PARENT's list of children.
7627    This is done by removing and re-adding it.  */
7628
7629 static void
7630 splice_child_die (dw_die_ref parent, dw_die_ref child)
7631 {
7632   dw_die_ref p;
7633
7634   /* We want the declaration DIE from inside the class, not the
7635      specification DIE at toplevel.  */
7636   if (child->die_parent != parent)
7637     {
7638       dw_die_ref tmp = get_AT_ref (child, DW_AT_specification);
7639
7640       if (tmp)
7641         child = tmp;
7642     }
7643
7644   gcc_assert (child->die_parent == parent
7645               || (child->die_parent
7646                   == get_AT_ref (parent, DW_AT_specification)));
7647
7648   for (p = child->die_parent->die_child; ; p = p->die_sib)
7649     if (p->die_sib == child)
7650       {
7651         remove_child_with_prev (child, p);
7652         break;
7653       }
7654
7655   add_child_die (parent, child);
7656 }
7657
7658 /* Return a pointer to a newly created DIE node.  */
7659
7660 static inline dw_die_ref
7661 new_die (enum dwarf_tag tag_value, dw_die_ref parent_die, tree t)
7662 {
7663   dw_die_ref die = GGC_CNEW (die_node);
7664
7665   die->die_tag = tag_value;
7666
7667   if (parent_die != NULL)
7668     add_child_die (parent_die, die);
7669   else
7670     {
7671       limbo_die_node *limbo_node;
7672
7673       limbo_node = GGC_CNEW (limbo_die_node);
7674       limbo_node->die = die;
7675       limbo_node->created_for = t;
7676       limbo_node->next = limbo_die_list;
7677       limbo_die_list = limbo_node;
7678     }
7679
7680   return die;
7681 }
7682
7683 /* Return the DIE associated with the given type specifier.  */
7684
7685 static inline dw_die_ref
7686 lookup_type_die (tree type)
7687 {
7688   return TYPE_SYMTAB_DIE (type);
7689 }
7690
7691 /* Equate a DIE to a given type specifier.  */
7692
7693 static inline void
7694 equate_type_number_to_die (tree type, dw_die_ref type_die)
7695 {
7696   TYPE_SYMTAB_DIE (type) = type_die;
7697 }
7698
7699 /* Returns a hash value for X (which really is a die_struct).  */
7700
7701 static hashval_t
7702 decl_die_table_hash (const void *x)
7703 {
7704   return (hashval_t) ((const_dw_die_ref) x)->decl_id;
7705 }
7706
7707 /* Return nonzero if decl_id of die_struct X is the same as UID of decl *Y.  */
7708
7709 static int
7710 decl_die_table_eq (const void *x, const void *y)
7711 {
7712   return (((const_dw_die_ref) x)->decl_id == DECL_UID ((const_tree) y));
7713 }
7714
7715 /* Return the DIE associated with a given declaration.  */
7716
7717 static inline dw_die_ref
7718 lookup_decl_die (tree decl)
7719 {
7720   return (dw_die_ref) htab_find_with_hash (decl_die_table, decl, DECL_UID (decl));
7721 }
7722
7723 /* Returns a hash value for X (which really is a var_loc_list).  */
7724
7725 static hashval_t
7726 decl_loc_table_hash (const void *x)
7727 {
7728   return (hashval_t) ((const var_loc_list *) x)->decl_id;
7729 }
7730
7731 /* Return nonzero if decl_id of var_loc_list X is the same as
7732    UID of decl *Y.  */
7733
7734 static int
7735 decl_loc_table_eq (const void *x, const void *y)
7736 {
7737   return (((const var_loc_list *) x)->decl_id == DECL_UID ((const_tree) y));
7738 }
7739
7740 /* Return the var_loc list associated with a given declaration.  */
7741
7742 static inline var_loc_list *
7743 lookup_decl_loc (const_tree decl)
7744 {
7745   if (!decl_loc_table)
7746     return NULL;
7747   return (var_loc_list *)
7748     htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
7749 }
7750
7751 /* Equate a DIE to a particular declaration.  */
7752
7753 static void
7754 equate_decl_number_to_die (tree decl, dw_die_ref decl_die)
7755 {
7756   unsigned int decl_id = DECL_UID (decl);
7757   void **slot;
7758
7759   slot = htab_find_slot_with_hash (decl_die_table, decl, decl_id, INSERT);
7760   *slot = decl_die;
7761   decl_die->decl_id = decl_id;
7762 }
7763
7764 /* Add a variable location node to the linked list for DECL.  */
7765
7766 static struct var_loc_node *
7767 add_var_loc_to_decl (tree decl, rtx loc_note)
7768 {
7769   unsigned int decl_id = DECL_UID (decl);
7770   var_loc_list *temp;
7771   void **slot;
7772   struct var_loc_node *loc = NULL;
7773
7774   slot = htab_find_slot_with_hash (decl_loc_table, decl, decl_id, INSERT);
7775   if (*slot == NULL)
7776     {
7777       temp = GGC_CNEW (var_loc_list);
7778       temp->decl_id = decl_id;
7779       *slot = temp;
7780     }
7781   else
7782     temp = (var_loc_list *) *slot;
7783
7784   if (temp->last)
7785     {
7786       /* If the current location is the same as the end of the list,
7787          and either both or neither of the locations is uninitialized,
7788          we have nothing to do.  */
7789       if ((!rtx_equal_p (NOTE_VAR_LOCATION_LOC (temp->last->var_loc_note),
7790                          NOTE_VAR_LOCATION_LOC (loc_note)))
7791           || ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7792                != NOTE_VAR_LOCATION_STATUS (loc_note))
7793               && ((NOTE_VAR_LOCATION_STATUS (temp->last->var_loc_note)
7794                    == VAR_INIT_STATUS_UNINITIALIZED)
7795                   || (NOTE_VAR_LOCATION_STATUS (loc_note)
7796                       == VAR_INIT_STATUS_UNINITIALIZED))))
7797         {
7798           /* Add LOC to the end of list and update LAST.  */
7799           loc = GGC_CNEW (struct var_loc_node);
7800           temp->last->next = loc;
7801           temp->last = loc;
7802         }
7803     }
7804   else
7805     {
7806       loc = GGC_CNEW (struct var_loc_node);
7807       temp->first = loc;
7808       temp->last = loc;
7809     }
7810   return loc;
7811 }
7812 \f
7813 /* Keep track of the number of spaces used to indent the
7814    output of the debugging routines that print the structure of
7815    the DIE internal representation.  */
7816 static int print_indent;
7817
7818 /* Indent the line the number of spaces given by print_indent.  */
7819
7820 static inline void
7821 print_spaces (FILE *outfile)
7822 {
7823   fprintf (outfile, "%*s", print_indent, "");
7824 }
7825
7826 /* Print a type signature in hex.  */
7827
7828 static inline void
7829 print_signature (FILE *outfile, char *sig)
7830 {
7831   int i;
7832
7833   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
7834     fprintf (outfile, "%02x", sig[i] & 0xff);
7835 }
7836
7837 /* Print the information associated with a given DIE, and its children.
7838    This routine is a debugging aid only.  */
7839
7840 static void
7841 print_die (dw_die_ref die, FILE *outfile)
7842 {
7843   dw_attr_ref a;
7844   dw_die_ref c;
7845   unsigned ix;
7846
7847   print_spaces (outfile);
7848   fprintf (outfile, "DIE %4ld: %s\n",
7849            die->die_offset, dwarf_tag_name (die->die_tag));
7850   print_spaces (outfile);
7851   fprintf (outfile, "  abbrev id: %lu", die->die_abbrev);
7852   fprintf (outfile, " offset: %ld\n", die->die_offset);
7853   if (dwarf_version >= 4 && die->die_id.die_type_node)
7854     {
7855       print_spaces (outfile);
7856       fprintf (outfile, "  signature: ");
7857       print_signature (outfile, die->die_id.die_type_node->signature);
7858       fprintf (outfile, "\n");
7859     }
7860
7861   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
7862     {
7863       print_spaces (outfile);
7864       fprintf (outfile, "  %s: ", dwarf_attr_name (a->dw_attr));
7865
7866       switch (AT_class (a))
7867         {
7868         case dw_val_class_addr:
7869           fprintf (outfile, "address");
7870           break;
7871         case dw_val_class_offset:
7872           fprintf (outfile, "offset");
7873           break;
7874         case dw_val_class_loc:
7875           fprintf (outfile, "location descriptor");
7876           break;
7877         case dw_val_class_loc_list:
7878           fprintf (outfile, "location list -> label:%s",
7879                    AT_loc_list (a)->ll_symbol);
7880           break;
7881         case dw_val_class_range_list:
7882           fprintf (outfile, "range list");
7883           break;
7884         case dw_val_class_const:
7885           fprintf (outfile, HOST_WIDE_INT_PRINT_DEC, AT_int (a));
7886           break;
7887         case dw_val_class_unsigned_const:
7888           fprintf (outfile, HOST_WIDE_INT_PRINT_UNSIGNED, AT_unsigned (a));
7889           break;
7890         case dw_val_class_const_double:
7891           fprintf (outfile, "constant ("HOST_WIDE_INT_PRINT_DEC","\
7892                             HOST_WIDE_INT_PRINT_UNSIGNED")",
7893                    a->dw_attr_val.v.val_double.high,
7894                    a->dw_attr_val.v.val_double.low);
7895           break;
7896         case dw_val_class_vec:
7897           fprintf (outfile, "floating-point or vector constant");
7898           break;
7899         case dw_val_class_flag:
7900           fprintf (outfile, "%u", AT_flag (a));
7901           break;
7902         case dw_val_class_die_ref:
7903           if (AT_ref (a) != NULL)
7904             {
7905               if (dwarf_version >= 4 && AT_ref (a)->die_id.die_type_node)
7906                 {
7907                   fprintf (outfile, "die -> signature: ");
7908                   print_signature (outfile,
7909                                    AT_ref (a)->die_id.die_type_node->signature);
7910                 }
7911               else if (dwarf_version < 4 && AT_ref (a)->die_id.die_symbol)
7912                 fprintf (outfile, "die -> label: %s",
7913                          AT_ref (a)->die_id.die_symbol);
7914               else
7915                 fprintf (outfile, "die -> %ld", AT_ref (a)->die_offset);
7916             }
7917           else
7918             fprintf (outfile, "die -> <null>");
7919           break;
7920         case dw_val_class_lbl_id:
7921         case dw_val_class_lineptr:
7922         case dw_val_class_macptr:
7923           fprintf (outfile, "label: %s", AT_lbl (a));
7924           break;
7925         case dw_val_class_str:
7926           if (AT_string (a) != NULL)
7927             fprintf (outfile, "\"%s\"", AT_string (a));
7928           else
7929             fprintf (outfile, "<null>");
7930           break;
7931         case dw_val_class_file:
7932           fprintf (outfile, "\"%s\" (%d)", AT_file (a)->filename,
7933                    AT_file (a)->emitted_number);
7934           break;
7935         case dw_val_class_data8:
7936           {
7937             int i;
7938
7939             for (i = 0; i < 8; i++)
7940               fprintf (outfile, "%02x", a->dw_attr_val.v.val_data8[i]);
7941             break;
7942           }
7943         default:
7944           break;
7945         }
7946
7947       fprintf (outfile, "\n");
7948     }
7949
7950   if (die->die_child != NULL)
7951     {
7952       print_indent += 4;
7953       FOR_EACH_CHILD (die, c, print_die (c, outfile));
7954       print_indent -= 4;
7955     }
7956   if (print_indent == 0)
7957     fprintf (outfile, "\n");
7958 }
7959
7960 /* Print the contents of the source code line number correspondence table.
7961    This routine is a debugging aid only.  */
7962
7963 static void
7964 print_dwarf_line_table (FILE *outfile)
7965 {
7966   unsigned i;
7967   dw_line_info_ref line_info;
7968
7969   fprintf (outfile, "\n\nDWARF source line information\n");
7970   for (i = 1; i < line_info_table_in_use; i++)
7971     {
7972       line_info = &line_info_table[i];
7973       fprintf (outfile, "%5d: %4ld %6ld\n", i,
7974                line_info->dw_file_num,
7975                line_info->dw_line_num);
7976     }
7977
7978   fprintf (outfile, "\n\n");
7979 }
7980
7981 /* Print the information collected for a given DIE.  */
7982
7983 void
7984 debug_dwarf_die (dw_die_ref die)
7985 {
7986   print_die (die, stderr);
7987 }
7988
7989 /* Print all DWARF information collected for the compilation unit.
7990    This routine is a debugging aid only.  */
7991
7992 void
7993 debug_dwarf (void)
7994 {
7995   print_indent = 0;
7996   print_die (comp_unit_die, stderr);
7997   if (! DWARF2_ASM_LINE_DEBUG_INFO)
7998     print_dwarf_line_table (stderr);
7999 }
8000 \f
8001 /* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
8002    for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
8003    DIE that marks the start of the DIEs for this include file.  */
8004
8005 static dw_die_ref
8006 push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
8007 {
8008   const char *filename = get_AT_string (bincl_die, DW_AT_name);
8009   dw_die_ref new_unit = gen_compile_unit_die (filename);
8010
8011   new_unit->die_sib = old_unit;
8012   return new_unit;
8013 }
8014
8015 /* Close an include-file CU and reopen the enclosing one.  */
8016
8017 static dw_die_ref
8018 pop_compile_unit (dw_die_ref old_unit)
8019 {
8020   dw_die_ref new_unit = old_unit->die_sib;
8021
8022   old_unit->die_sib = NULL;
8023   return new_unit;
8024 }
8025
8026 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8027 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
8028
8029 /* Calculate the checksum of a location expression.  */
8030
8031 static inline void
8032 loc_checksum (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8033 {
8034   int tem;
8035
8036   tem = (loc->dtprel << 8) | ((unsigned int) loc->dw_loc_opc);
8037   CHECKSUM (tem);
8038   CHECKSUM (loc->dw_loc_oprnd1);
8039   CHECKSUM (loc->dw_loc_oprnd2);
8040 }
8041
8042 /* Calculate the checksum of an attribute.  */
8043
8044 static void
8045 attr_checksum (dw_attr_ref at, struct md5_ctx *ctx, int *mark)
8046 {
8047   dw_loc_descr_ref loc;
8048   rtx r;
8049
8050   CHECKSUM (at->dw_attr);
8051
8052   /* We don't care that this was compiled with a different compiler
8053      snapshot; if the output is the same, that's what matters.  */
8054   if (at->dw_attr == DW_AT_producer)
8055     return;
8056
8057   switch (AT_class (at))
8058     {
8059     case dw_val_class_const:
8060       CHECKSUM (at->dw_attr_val.v.val_int);
8061       break;
8062     case dw_val_class_unsigned_const:
8063       CHECKSUM (at->dw_attr_val.v.val_unsigned);
8064       break;
8065     case dw_val_class_const_double:
8066       CHECKSUM (at->dw_attr_val.v.val_double);
8067       break;
8068     case dw_val_class_vec:
8069       CHECKSUM (at->dw_attr_val.v.val_vec);
8070       break;
8071     case dw_val_class_flag:
8072       CHECKSUM (at->dw_attr_val.v.val_flag);
8073       break;
8074     case dw_val_class_str:
8075       CHECKSUM_STRING (AT_string (at));
8076       break;
8077
8078     case dw_val_class_addr:
8079       r = AT_addr (at);
8080       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8081       CHECKSUM_STRING (XSTR (r, 0));
8082       break;
8083
8084     case dw_val_class_offset:
8085       CHECKSUM (at->dw_attr_val.v.val_offset);
8086       break;
8087
8088     case dw_val_class_loc:
8089       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8090         loc_checksum (loc, ctx);
8091       break;
8092
8093     case dw_val_class_die_ref:
8094       die_checksum (AT_ref (at), ctx, mark);
8095       break;
8096
8097     case dw_val_class_fde_ref:
8098     case dw_val_class_lbl_id:
8099     case dw_val_class_lineptr:
8100     case dw_val_class_macptr:
8101       break;
8102
8103     case dw_val_class_file:
8104       CHECKSUM_STRING (AT_file (at)->filename);
8105       break;
8106
8107     case dw_val_class_data8:
8108       CHECKSUM (at->dw_attr_val.v.val_data8);
8109       break;
8110
8111     default:
8112       break;
8113     }
8114 }
8115
8116 /* Calculate the checksum of a DIE.  */
8117
8118 static void
8119 die_checksum (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8120 {
8121   dw_die_ref c;
8122   dw_attr_ref a;
8123   unsigned ix;
8124
8125   /* To avoid infinite recursion.  */
8126   if (die->die_mark)
8127     {
8128       CHECKSUM (die->die_mark);
8129       return;
8130     }
8131   die->die_mark = ++(*mark);
8132
8133   CHECKSUM (die->die_tag);
8134
8135   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8136     attr_checksum (a, ctx, mark);
8137
8138   FOR_EACH_CHILD (die, c, die_checksum (c, ctx, mark));
8139 }
8140
8141 #undef CHECKSUM
8142 #undef CHECKSUM_STRING
8143
8144 /* For DWARF-4 types, include the trailing NULL when checksumming strings.  */
8145 #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
8146 #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO) + 1, ctx)
8147 #define CHECKSUM_SLEB128(FOO) checksum_sleb128 ((FOO), ctx)
8148 #define CHECKSUM_ULEB128(FOO) checksum_uleb128 ((FOO), ctx)
8149 #define CHECKSUM_ATTR(FOO) \
8150   if (FOO) attr_checksum_ordered (die->die_tag, (FOO), ctx, mark)
8151
8152 /* Calculate the checksum of a number in signed LEB128 format.  */
8153
8154 static void
8155 checksum_sleb128 (HOST_WIDE_INT value, struct md5_ctx *ctx)
8156 {
8157   unsigned char byte;
8158   bool more;
8159
8160   while (1)
8161     {
8162       byte = (value & 0x7f);
8163       value >>= 7;
8164       more = !((value == 0 && (byte & 0x40) == 0)
8165                 || (value == -1 && (byte & 0x40) != 0));
8166       if (more)
8167         byte |= 0x80;
8168       CHECKSUM (byte);
8169       if (!more)
8170         break;
8171     }
8172 }
8173
8174 /* Calculate the checksum of a number in unsigned LEB128 format.  */
8175
8176 static void
8177 checksum_uleb128 (unsigned HOST_WIDE_INT value, struct md5_ctx *ctx)
8178 {
8179   while (1)
8180     {
8181       unsigned char byte = (value & 0x7f);
8182       value >>= 7;
8183       if (value != 0)
8184         /* More bytes to follow.  */
8185         byte |= 0x80;
8186       CHECKSUM (byte);
8187       if (value == 0)
8188         break;
8189     }
8190 }
8191
8192 /* Checksum the context of the DIE.  This adds the names of any
8193    surrounding namespaces or structures to the checksum.  */
8194
8195 static void
8196 checksum_die_context (dw_die_ref die, struct md5_ctx *ctx)
8197 {
8198   const char *name;
8199   dw_die_ref spec;
8200   int tag = die->die_tag;
8201
8202   if (tag != DW_TAG_namespace
8203       && tag != DW_TAG_structure_type
8204       && tag != DW_TAG_class_type)
8205     return;
8206
8207   name = get_AT_string (die, DW_AT_name);
8208
8209   spec = get_AT_ref (die, DW_AT_specification);
8210   if (spec != NULL)
8211     die = spec;
8212
8213   if (die->die_parent != NULL)
8214     checksum_die_context (die->die_parent, ctx);
8215
8216   CHECKSUM_ULEB128 ('C');
8217   CHECKSUM_ULEB128 (tag);
8218   if (name != NULL)
8219     CHECKSUM_STRING (name);
8220 }
8221
8222 /* Calculate the checksum of a location expression.  */
8223
8224 static inline void
8225 loc_checksum_ordered (dw_loc_descr_ref loc, struct md5_ctx *ctx)
8226 {
8227   /* Special case for lone DW_OP_plus_uconst: checksum as if the location
8228      were emitted as a DW_FORM_sdata instead of a location expression.  */
8229   if (loc->dw_loc_opc == DW_OP_plus_uconst && loc->dw_loc_next == NULL)
8230     {
8231       CHECKSUM_ULEB128 (DW_FORM_sdata);
8232       CHECKSUM_SLEB128 ((HOST_WIDE_INT) loc->dw_loc_oprnd1.v.val_unsigned);
8233       return;
8234     }
8235
8236   /* Otherwise, just checksum the raw location expression.  */
8237   while (loc != NULL)
8238     {
8239       CHECKSUM_ULEB128 (loc->dw_loc_opc);
8240       CHECKSUM (loc->dw_loc_oprnd1);
8241       CHECKSUM (loc->dw_loc_oprnd2);
8242       loc = loc->dw_loc_next;
8243     }
8244 }
8245
8246 /* Calculate the checksum of an attribute.  */
8247
8248 static void
8249 attr_checksum_ordered (enum dwarf_tag tag, dw_attr_ref at,
8250                        struct md5_ctx *ctx, int *mark)
8251 {
8252   dw_loc_descr_ref loc;
8253   rtx r;
8254
8255   if (AT_class (at) == dw_val_class_die_ref)
8256     {
8257       dw_die_ref target_die = AT_ref (at);
8258
8259       /* For pointer and reference types, we checksum only the (qualified)
8260          name of the target type (if there is a name).  For friend entries,
8261          we checksum only the (qualified) name of the target type or function.
8262          This allows the checksum to remain the same whether the target type
8263          is complete or not.  */
8264       if ((at->dw_attr == DW_AT_type
8265            && (tag == DW_TAG_pointer_type
8266                || tag == DW_TAG_reference_type
8267                || tag == DW_TAG_ptr_to_member_type))
8268           || (at->dw_attr == DW_AT_friend
8269               && tag == DW_TAG_friend))
8270         {
8271           dw_attr_ref name_attr = get_AT (target_die, DW_AT_name);
8272
8273           if (name_attr != NULL)
8274             {
8275               dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8276
8277               if (decl == NULL)
8278                 decl = target_die;
8279               CHECKSUM_ULEB128 ('N');
8280               CHECKSUM_ULEB128 (at->dw_attr);
8281               if (decl->die_parent != NULL)
8282                 checksum_die_context (decl->die_parent, ctx);
8283               CHECKSUM_ULEB128 ('E');
8284               CHECKSUM_STRING (AT_string (name_attr));
8285               return;
8286             }
8287         }
8288
8289       /* For all other references to another DIE, we check to see if the
8290          target DIE has already been visited.  If it has, we emit a
8291          backward reference; if not, we descend recursively.  */
8292       if (target_die->die_mark > 0)
8293         {
8294           CHECKSUM_ULEB128 ('R');
8295           CHECKSUM_ULEB128 (at->dw_attr);
8296           CHECKSUM_ULEB128 (target_die->die_mark);
8297         }
8298       else
8299         {
8300           dw_die_ref decl = get_AT_ref (target_die, DW_AT_specification);
8301
8302           if (decl == NULL)
8303             decl = target_die;
8304           target_die->die_mark = ++(*mark);
8305           CHECKSUM_ULEB128 ('T');
8306           CHECKSUM_ULEB128 (at->dw_attr);
8307           if (decl->die_parent != NULL)
8308             checksum_die_context (decl->die_parent, ctx);
8309           die_checksum_ordered (target_die, ctx, mark);
8310         }
8311       return;
8312     }
8313
8314   CHECKSUM_ULEB128 ('A');
8315   CHECKSUM_ULEB128 (at->dw_attr);
8316
8317   switch (AT_class (at))
8318     {
8319     case dw_val_class_const:
8320       CHECKSUM_ULEB128 (DW_FORM_sdata);
8321       CHECKSUM_SLEB128 (at->dw_attr_val.v.val_int);
8322       break;
8323
8324     case dw_val_class_unsigned_const:
8325       CHECKSUM_ULEB128 (DW_FORM_sdata);
8326       CHECKSUM_SLEB128 ((int) at->dw_attr_val.v.val_unsigned);
8327       break;
8328
8329     case dw_val_class_const_double:
8330       CHECKSUM_ULEB128 (DW_FORM_block);
8331       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_double));
8332       CHECKSUM (at->dw_attr_val.v.val_double);
8333       break;
8334
8335     case dw_val_class_vec:
8336       CHECKSUM_ULEB128 (DW_FORM_block);
8337       CHECKSUM_ULEB128 (sizeof (at->dw_attr_val.v.val_vec));
8338       CHECKSUM (at->dw_attr_val.v.val_vec);
8339       break;
8340
8341     case dw_val_class_flag:
8342       CHECKSUM_ULEB128 (DW_FORM_flag);
8343       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_flag ? 1 : 0);
8344       break;
8345
8346     case dw_val_class_str:
8347       CHECKSUM_ULEB128 (DW_FORM_string);
8348       CHECKSUM_STRING (AT_string (at));
8349       break;
8350
8351     case dw_val_class_addr:
8352       r = AT_addr (at);
8353       gcc_assert (GET_CODE (r) == SYMBOL_REF);
8354       CHECKSUM_ULEB128 (DW_FORM_string);
8355       CHECKSUM_STRING (XSTR (r, 0));
8356       break;
8357
8358     case dw_val_class_offset:
8359       CHECKSUM_ULEB128 (DW_FORM_sdata);
8360       CHECKSUM_ULEB128 (at->dw_attr_val.v.val_offset);
8361       break;
8362
8363     case dw_val_class_loc:
8364       for (loc = AT_loc (at); loc; loc = loc->dw_loc_next)
8365         loc_checksum_ordered (loc, ctx);
8366       break;
8367
8368     case dw_val_class_fde_ref:
8369     case dw_val_class_lbl_id:
8370     case dw_val_class_lineptr:
8371     case dw_val_class_macptr:
8372       break;
8373
8374     case dw_val_class_file:
8375       CHECKSUM_ULEB128 (DW_FORM_string);
8376       CHECKSUM_STRING (AT_file (at)->filename);
8377       break;
8378
8379     case dw_val_class_data8:
8380       CHECKSUM (at->dw_attr_val.v.val_data8);
8381       break;
8382
8383     default:
8384       break;
8385     }
8386 }
8387
8388 struct checksum_attributes
8389 {
8390   dw_attr_ref at_name;
8391   dw_attr_ref at_type;
8392   dw_attr_ref at_friend;
8393   dw_attr_ref at_accessibility;
8394   dw_attr_ref at_address_class;
8395   dw_attr_ref at_allocated;
8396   dw_attr_ref at_artificial;
8397   dw_attr_ref at_associated;
8398   dw_attr_ref at_binary_scale;
8399   dw_attr_ref at_bit_offset;
8400   dw_attr_ref at_bit_size;
8401   dw_attr_ref at_bit_stride;
8402   dw_attr_ref at_byte_size;
8403   dw_attr_ref at_byte_stride;
8404   dw_attr_ref at_const_value;
8405   dw_attr_ref at_containing_type;
8406   dw_attr_ref at_count;
8407   dw_attr_ref at_data_location;
8408   dw_attr_ref at_data_member_location;
8409   dw_attr_ref at_decimal_scale;
8410   dw_attr_ref at_decimal_sign;
8411   dw_attr_ref at_default_value;
8412   dw_attr_ref at_digit_count;
8413   dw_attr_ref at_discr;
8414   dw_attr_ref at_discr_list;
8415   dw_attr_ref at_discr_value;
8416   dw_attr_ref at_encoding;
8417   dw_attr_ref at_endianity;
8418   dw_attr_ref at_explicit;
8419   dw_attr_ref at_is_optional;
8420   dw_attr_ref at_location;
8421   dw_attr_ref at_lower_bound;
8422   dw_attr_ref at_mutable;
8423   dw_attr_ref at_ordering;
8424   dw_attr_ref at_picture_string;
8425   dw_attr_ref at_prototyped;
8426   dw_attr_ref at_small;
8427   dw_attr_ref at_segment;
8428   dw_attr_ref at_string_length;
8429   dw_attr_ref at_threads_scaled;
8430   dw_attr_ref at_upper_bound;
8431   dw_attr_ref at_use_location;
8432   dw_attr_ref at_use_UTF8;
8433   dw_attr_ref at_variable_parameter;
8434   dw_attr_ref at_virtuality;
8435   dw_attr_ref at_visibility;
8436   dw_attr_ref at_vtable_elem_location;
8437 };
8438
8439 /* Collect the attributes that we will want to use for the checksum.  */
8440
8441 static void
8442 collect_checksum_attributes (struct checksum_attributes *attrs, dw_die_ref die)
8443 {
8444   dw_attr_ref a;
8445   unsigned ix;
8446
8447   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
8448     {
8449       switch (a->dw_attr)
8450         {
8451         case DW_AT_name:
8452           attrs->at_name = a;
8453           break;
8454         case DW_AT_type:
8455           attrs->at_type = a;
8456           break;
8457         case DW_AT_friend:
8458           attrs->at_friend = a;
8459           break;
8460         case DW_AT_accessibility:
8461           attrs->at_accessibility = a;
8462           break;
8463         case DW_AT_address_class:
8464           attrs->at_address_class = a;
8465           break;
8466         case DW_AT_allocated:
8467           attrs->at_allocated = a;
8468           break;
8469         case DW_AT_artificial:
8470           attrs->at_artificial = a;
8471           break;
8472         case DW_AT_associated:
8473           attrs->at_associated = a;
8474           break;
8475         case DW_AT_binary_scale:
8476           attrs->at_binary_scale = a;
8477           break;
8478         case DW_AT_bit_offset:
8479           attrs->at_bit_offset = a;
8480           break;
8481         case DW_AT_bit_size:
8482           attrs->at_bit_size = a;
8483           break;
8484         case DW_AT_bit_stride:
8485           attrs->at_bit_stride = a;
8486           break;
8487         case DW_AT_byte_size:
8488           attrs->at_byte_size = a;
8489           break;
8490         case DW_AT_byte_stride:
8491           attrs->at_byte_stride = a;
8492           break;
8493         case DW_AT_const_value:
8494           attrs->at_const_value = a;
8495           break;
8496         case DW_AT_containing_type:
8497           attrs->at_containing_type = a;
8498           break;
8499         case DW_AT_count:
8500           attrs->at_count = a;
8501           break;
8502         case DW_AT_data_location:
8503           attrs->at_data_location = a;
8504           break;
8505         case DW_AT_data_member_location:
8506           attrs->at_data_member_location = a;
8507           break;
8508         case DW_AT_decimal_scale:
8509           attrs->at_decimal_scale = a;
8510           break;
8511         case DW_AT_decimal_sign:
8512           attrs->at_decimal_sign = a;
8513           break;
8514         case DW_AT_default_value:
8515           attrs->at_default_value = a;
8516           break;
8517         case DW_AT_digit_count:
8518           attrs->at_digit_count = a;
8519           break;
8520         case DW_AT_discr:
8521           attrs->at_discr = a;
8522           break;
8523         case DW_AT_discr_list:
8524           attrs->at_discr_list = a;
8525           break;
8526         case DW_AT_discr_value:
8527           attrs->at_discr_value = a;
8528           break;
8529         case DW_AT_encoding:
8530           attrs->at_encoding = a;
8531           break;
8532         case DW_AT_endianity:
8533           attrs->at_endianity = a;
8534           break;
8535         case DW_AT_explicit:
8536           attrs->at_explicit = a;
8537           break;
8538         case DW_AT_is_optional:
8539           attrs->at_is_optional = a;
8540           break;
8541         case DW_AT_location:
8542           attrs->at_location = a;
8543           break;
8544         case DW_AT_lower_bound:
8545           attrs->at_lower_bound = a;
8546           break;
8547         case DW_AT_mutable:
8548           attrs->at_mutable = a;
8549           break;
8550         case DW_AT_ordering:
8551           attrs->at_ordering = a;
8552           break;
8553         case DW_AT_picture_string:
8554           attrs->at_picture_string = a;
8555           break;
8556         case DW_AT_prototyped:
8557           attrs->at_prototyped = a;
8558           break;
8559         case DW_AT_small:
8560           attrs->at_small = a;
8561           break;
8562         case DW_AT_segment:
8563           attrs->at_segment = a;
8564           break;
8565         case DW_AT_string_length:
8566           attrs->at_string_length = a;
8567           break;
8568         case DW_AT_threads_scaled:
8569           attrs->at_threads_scaled = a;
8570           break;
8571         case DW_AT_upper_bound:
8572           attrs->at_upper_bound = a;
8573           break;
8574         case DW_AT_use_location:
8575           attrs->at_use_location = a;
8576           break;
8577         case DW_AT_use_UTF8:
8578           attrs->at_use_UTF8 = a;
8579           break;
8580         case DW_AT_variable_parameter:
8581           attrs->at_variable_parameter = a;
8582           break;
8583         case DW_AT_virtuality:
8584           attrs->at_virtuality = a;
8585           break;
8586         case DW_AT_visibility:
8587           attrs->at_visibility = a;
8588           break;
8589         case DW_AT_vtable_elem_location:
8590           attrs->at_vtable_elem_location = a;
8591           break;
8592         default:
8593           break;
8594         }
8595     }
8596 }
8597
8598 /* Calculate the checksum of a DIE, using an ordered subset of attributes.  */
8599
8600 static void
8601 die_checksum_ordered (dw_die_ref die, struct md5_ctx *ctx, int *mark)
8602 {
8603   dw_die_ref c;
8604   dw_die_ref decl;
8605   struct checksum_attributes attrs;
8606
8607   CHECKSUM_ULEB128 ('D');
8608   CHECKSUM_ULEB128 (die->die_tag);
8609
8610   memset (&attrs, 0, sizeof (attrs));
8611
8612   decl = get_AT_ref (die, DW_AT_specification);
8613   if (decl != NULL)
8614     collect_checksum_attributes (&attrs, decl);
8615   collect_checksum_attributes (&attrs, die);
8616
8617   CHECKSUM_ATTR (attrs.at_name);
8618   CHECKSUM_ATTR (attrs.at_accessibility);
8619   CHECKSUM_ATTR (attrs.at_address_class);
8620   CHECKSUM_ATTR (attrs.at_allocated);
8621   CHECKSUM_ATTR (attrs.at_artificial);
8622   CHECKSUM_ATTR (attrs.at_associated);
8623   CHECKSUM_ATTR (attrs.at_binary_scale);
8624   CHECKSUM_ATTR (attrs.at_bit_offset);
8625   CHECKSUM_ATTR (attrs.at_bit_size);
8626   CHECKSUM_ATTR (attrs.at_bit_stride);
8627   CHECKSUM_ATTR (attrs.at_byte_size);
8628   CHECKSUM_ATTR (attrs.at_byte_stride);
8629   CHECKSUM_ATTR (attrs.at_const_value);
8630   CHECKSUM_ATTR (attrs.at_containing_type);
8631   CHECKSUM_ATTR (attrs.at_count);
8632   CHECKSUM_ATTR (attrs.at_data_location);
8633   CHECKSUM_ATTR (attrs.at_data_member_location);
8634   CHECKSUM_ATTR (attrs.at_decimal_scale);
8635   CHECKSUM_ATTR (attrs.at_decimal_sign);
8636   CHECKSUM_ATTR (attrs.at_default_value);
8637   CHECKSUM_ATTR (attrs.at_digit_count);
8638   CHECKSUM_ATTR (attrs.at_discr);
8639   CHECKSUM_ATTR (attrs.at_discr_list);
8640   CHECKSUM_ATTR (attrs.at_discr_value);
8641   CHECKSUM_ATTR (attrs.at_encoding);
8642   CHECKSUM_ATTR (attrs.at_endianity);
8643   CHECKSUM_ATTR (attrs.at_explicit);
8644   CHECKSUM_ATTR (attrs.at_is_optional);
8645   CHECKSUM_ATTR (attrs.at_location);
8646   CHECKSUM_ATTR (attrs.at_lower_bound);
8647   CHECKSUM_ATTR (attrs.at_mutable);
8648   CHECKSUM_ATTR (attrs.at_ordering);
8649   CHECKSUM_ATTR (attrs.at_picture_string);
8650   CHECKSUM_ATTR (attrs.at_prototyped);
8651   CHECKSUM_ATTR (attrs.at_small);
8652   CHECKSUM_ATTR (attrs.at_segment);
8653   CHECKSUM_ATTR (attrs.at_string_length);
8654   CHECKSUM_ATTR (attrs.at_threads_scaled);
8655   CHECKSUM_ATTR (attrs.at_upper_bound);
8656   CHECKSUM_ATTR (attrs.at_use_location);
8657   CHECKSUM_ATTR (attrs.at_use_UTF8);
8658   CHECKSUM_ATTR (attrs.at_variable_parameter);
8659   CHECKSUM_ATTR (attrs.at_virtuality);
8660   CHECKSUM_ATTR (attrs.at_visibility);
8661   CHECKSUM_ATTR (attrs.at_vtable_elem_location);
8662   CHECKSUM_ATTR (attrs.at_type);
8663   CHECKSUM_ATTR (attrs.at_friend);
8664
8665   /* Checksum the child DIEs, except for nested types and member functions.  */
8666   c = die->die_child;
8667   if (c) do {
8668     dw_attr_ref name_attr;
8669
8670     c = c->die_sib;
8671     name_attr = get_AT (c, DW_AT_name);
8672     if ((is_type_die (c) || c->die_tag == DW_TAG_subprogram)
8673         && name_attr != NULL)
8674       {
8675         CHECKSUM_ULEB128 ('S');
8676         CHECKSUM_ULEB128 (c->die_tag);
8677         CHECKSUM_STRING (AT_string (name_attr));
8678       }
8679     else
8680       {
8681         /* Mark this DIE so it gets processed when unmarking.  */
8682         if (c->die_mark == 0)
8683           c->die_mark = -1;
8684         die_checksum_ordered (c, ctx, mark);
8685       }
8686   } while (c != die->die_child);
8687
8688   CHECKSUM_ULEB128 (0);
8689 }
8690
8691 #undef CHECKSUM
8692 #undef CHECKSUM_STRING
8693 #undef CHECKSUM_ATTR
8694 #undef CHECKSUM_LEB128
8695 #undef CHECKSUM_ULEB128
8696
8697 /* Generate the type signature for DIE.  This is computed by generating an
8698    MD5 checksum over the DIE's tag, its relevant attributes, and its
8699    children.  Attributes that are references to other DIEs are processed
8700    by recursion, using the MARK field to prevent infinite recursion.
8701    If the DIE is nested inside a namespace or another type, we also
8702    need to include that context in the signature.  The lower 64 bits
8703    of the resulting MD5 checksum comprise the signature.  */
8704
8705 static void
8706 generate_type_signature (dw_die_ref die, comdat_type_node *type_node)
8707 {
8708   int mark;
8709   const char *name;
8710   unsigned char checksum[16];
8711   struct md5_ctx ctx;
8712   dw_die_ref decl;
8713
8714   name = get_AT_string (die, DW_AT_name);
8715   decl = get_AT_ref (die, DW_AT_specification);
8716
8717   /* First, compute a signature for just the type name (and its surrounding
8718      context, if any.  This is stored in the type unit DIE for link-time
8719      ODR (one-definition rule) checking.  */
8720
8721   if (is_cxx() && name != NULL)
8722     {
8723       md5_init_ctx (&ctx);
8724
8725       /* Checksum the names of surrounding namespaces and structures.  */
8726       if (decl != NULL && decl->die_parent != NULL)
8727         checksum_die_context (decl->die_parent, &ctx);
8728
8729       md5_process_bytes (&die->die_tag, sizeof (die->die_tag), &ctx);
8730       md5_process_bytes (name, strlen (name) + 1, &ctx);
8731       md5_finish_ctx (&ctx, checksum);
8732
8733       add_AT_data8 (type_node->root_die, DW_AT_GNU_odr_signature, &checksum[8]);
8734     }
8735
8736   /* Next, compute the complete type signature.  */
8737
8738   md5_init_ctx (&ctx);
8739   mark = 1;
8740   die->die_mark = mark;
8741
8742   /* Checksum the names of surrounding namespaces and structures.  */
8743   if (decl != NULL && decl->die_parent != NULL)
8744     checksum_die_context (decl->die_parent, &ctx);
8745
8746   /* Checksum the DIE and its children.  */
8747   die_checksum_ordered (die, &ctx, &mark);
8748   unmark_all_dies (die);
8749   md5_finish_ctx (&ctx, checksum);
8750
8751   /* Store the signature in the type node and link the type DIE and the
8752      type node together.  */
8753   memcpy (type_node->signature, &checksum[16 - DWARF_TYPE_SIGNATURE_SIZE],
8754           DWARF_TYPE_SIGNATURE_SIZE);
8755   die->die_id.die_type_node = type_node;
8756   type_node->type_die = die;
8757
8758   /* If the DIE is a specification, link its declaration to the type node
8759      as well.  */
8760   if (decl != NULL)
8761     decl->die_id.die_type_node = type_node;
8762 }
8763
8764 /* Do the location expressions look same?  */
8765 static inline int
8766 same_loc_p (dw_loc_descr_ref loc1, dw_loc_descr_ref loc2, int *mark)
8767 {
8768   return loc1->dw_loc_opc == loc2->dw_loc_opc
8769          && same_dw_val_p (&loc1->dw_loc_oprnd1, &loc2->dw_loc_oprnd1, mark)
8770          && same_dw_val_p (&loc1->dw_loc_oprnd2, &loc2->dw_loc_oprnd2, mark);
8771 }
8772
8773 /* Do the values look the same?  */
8774 static int
8775 same_dw_val_p (const dw_val_node *v1, const dw_val_node *v2, int *mark)
8776 {
8777   dw_loc_descr_ref loc1, loc2;
8778   rtx r1, r2;
8779
8780   if (v1->val_class != v2->val_class)
8781     return 0;
8782
8783   switch (v1->val_class)
8784     {
8785     case dw_val_class_const:
8786       return v1->v.val_int == v2->v.val_int;
8787     case dw_val_class_unsigned_const:
8788       return v1->v.val_unsigned == v2->v.val_unsigned;
8789     case dw_val_class_const_double:
8790       return v1->v.val_double.high == v2->v.val_double.high
8791              && v1->v.val_double.low == v2->v.val_double.low;
8792     case dw_val_class_vec:
8793       if (v1->v.val_vec.length != v2->v.val_vec.length
8794           || v1->v.val_vec.elt_size != v2->v.val_vec.elt_size)
8795         return 0;
8796       if (memcmp (v1->v.val_vec.array, v2->v.val_vec.array,
8797                   v1->v.val_vec.length * v1->v.val_vec.elt_size))
8798         return 0;
8799       return 1;
8800     case dw_val_class_flag:
8801       return v1->v.val_flag == v2->v.val_flag;
8802     case dw_val_class_str:
8803       return !strcmp(v1->v.val_str->str, v2->v.val_str->str);
8804
8805     case dw_val_class_addr:
8806       r1 = v1->v.val_addr;
8807       r2 = v2->v.val_addr;
8808       if (GET_CODE (r1) != GET_CODE (r2))
8809         return 0;
8810       return !rtx_equal_p (r1, r2);
8811
8812     case dw_val_class_offset:
8813       return v1->v.val_offset == v2->v.val_offset;
8814
8815     case dw_val_class_loc:
8816       for (loc1 = v1->v.val_loc, loc2 = v2->v.val_loc;
8817            loc1 && loc2;
8818            loc1 = loc1->dw_loc_next, loc2 = loc2->dw_loc_next)
8819         if (!same_loc_p (loc1, loc2, mark))
8820           return 0;
8821       return !loc1 && !loc2;
8822
8823     case dw_val_class_die_ref:
8824       return same_die_p (v1->v.val_die_ref.die, v2->v.val_die_ref.die, mark);
8825
8826     case dw_val_class_fde_ref:
8827     case dw_val_class_lbl_id:
8828     case dw_val_class_lineptr:
8829     case dw_val_class_macptr:
8830       return 1;
8831
8832     case dw_val_class_file:
8833       return v1->v.val_file == v2->v.val_file;
8834
8835     case dw_val_class_data8:
8836       return !memcmp (v1->v.val_data8, v2->v.val_data8, 8);
8837
8838     default:
8839       return 1;
8840     }
8841 }
8842
8843 /* Do the attributes look the same?  */
8844
8845 static int
8846 same_attr_p (dw_attr_ref at1, dw_attr_ref at2, int *mark)
8847 {
8848   if (at1->dw_attr != at2->dw_attr)
8849     return 0;
8850
8851   /* We don't care that this was compiled with a different compiler
8852      snapshot; if the output is the same, that's what matters. */
8853   if (at1->dw_attr == DW_AT_producer)
8854     return 1;
8855
8856   return same_dw_val_p (&at1->dw_attr_val, &at2->dw_attr_val, mark);
8857 }
8858
8859 /* Do the dies look the same?  */
8860
8861 static int
8862 same_die_p (dw_die_ref die1, dw_die_ref die2, int *mark)
8863 {
8864   dw_die_ref c1, c2;
8865   dw_attr_ref a1;
8866   unsigned ix;
8867
8868   /* To avoid infinite recursion.  */
8869   if (die1->die_mark)
8870     return die1->die_mark == die2->die_mark;
8871   die1->die_mark = die2->die_mark = ++(*mark);
8872
8873   if (die1->die_tag != die2->die_tag)
8874     return 0;
8875
8876   if (VEC_length (dw_attr_node, die1->die_attr)
8877       != VEC_length (dw_attr_node, die2->die_attr))
8878     return 0;
8879
8880   for (ix = 0; VEC_iterate (dw_attr_node, die1->die_attr, ix, a1); ix++)
8881     if (!same_attr_p (a1, VEC_index (dw_attr_node, die2->die_attr, ix), mark))
8882       return 0;
8883
8884   c1 = die1->die_child;
8885   c2 = die2->die_child;
8886   if (! c1)
8887     {
8888       if (c2)
8889         return 0;
8890     }
8891   else
8892     for (;;)
8893       {
8894         if (!same_die_p (c1, c2, mark))
8895           return 0;
8896         c1 = c1->die_sib;
8897         c2 = c2->die_sib;
8898         if (c1 == die1->die_child)
8899           {
8900             if (c2 == die2->die_child)
8901               break;
8902             else
8903               return 0;
8904           }
8905     }
8906
8907   return 1;
8908 }
8909
8910 /* Do the dies look the same?  Wrapper around same_die_p.  */
8911
8912 static int
8913 same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
8914 {
8915   int mark = 0;
8916   int ret = same_die_p (die1, die2, &mark);
8917
8918   unmark_all_dies (die1);
8919   unmark_all_dies (die2);
8920
8921   return ret;
8922 }
8923
8924 /* The prefix to attach to symbols on DIEs in the current comdat debug
8925    info section.  */
8926 static char *comdat_symbol_id;
8927
8928 /* The index of the current symbol within the current comdat CU.  */
8929 static unsigned int comdat_symbol_number;
8930
8931 /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
8932    children, and set comdat_symbol_id accordingly.  */
8933
8934 static void
8935 compute_section_prefix (dw_die_ref unit_die)
8936 {
8937   const char *die_name = get_AT_string (unit_die, DW_AT_name);
8938   const char *base = die_name ? lbasename (die_name) : "anonymous";
8939   char *name = XALLOCAVEC (char, strlen (base) + 64);
8940   char *p;
8941   int i, mark;
8942   unsigned char checksum[16];
8943   struct md5_ctx ctx;
8944
8945   /* Compute the checksum of the DIE, then append part of it as hex digits to
8946      the name filename of the unit.  */
8947
8948   md5_init_ctx (&ctx);
8949   mark = 0;
8950   die_checksum (unit_die, &ctx, &mark);
8951   unmark_all_dies (unit_die);
8952   md5_finish_ctx (&ctx, checksum);
8953
8954   sprintf (name, "%s.", base);
8955   clean_symbol_name (name);
8956
8957   p = name + strlen (name);
8958   for (i = 0; i < 4; i++)
8959     {
8960       sprintf (p, "%.2x", checksum[i]);
8961       p += 2;
8962     }
8963
8964   comdat_symbol_id = unit_die->die_id.die_symbol = xstrdup (name);
8965   comdat_symbol_number = 0;
8966 }
8967
8968 /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
8969
8970 static int
8971 is_type_die (dw_die_ref die)
8972 {
8973   switch (die->die_tag)
8974     {
8975     case DW_TAG_array_type:
8976     case DW_TAG_class_type:
8977     case DW_TAG_interface_type:
8978     case DW_TAG_enumeration_type:
8979     case DW_TAG_pointer_type:
8980     case DW_TAG_reference_type:
8981     case DW_TAG_string_type:
8982     case DW_TAG_structure_type:
8983     case DW_TAG_subroutine_type:
8984     case DW_TAG_union_type:
8985     case DW_TAG_ptr_to_member_type:
8986     case DW_TAG_set_type:
8987     case DW_TAG_subrange_type:
8988     case DW_TAG_base_type:
8989     case DW_TAG_const_type:
8990     case DW_TAG_file_type:
8991     case DW_TAG_packed_type:
8992     case DW_TAG_volatile_type:
8993     case DW_TAG_typedef:
8994       return 1;
8995     default:
8996       return 0;
8997     }
8998 }
8999
9000 /* Returns 1 iff C is the sort of DIE that should go into a COMDAT CU.
9001    Basically, we want to choose the bits that are likely to be shared between
9002    compilations (types) and leave out the bits that are specific to individual
9003    compilations (functions).  */
9004
9005 static int
9006 is_comdat_die (dw_die_ref c)
9007 {
9008   /* I think we want to leave base types and __vtbl_ptr_type in the main CU, as
9009      we do for stabs.  The advantage is a greater likelihood of sharing between
9010      objects that don't include headers in the same order (and therefore would
9011      put the base types in a different comdat).  jason 8/28/00 */
9012
9013   if (c->die_tag == DW_TAG_base_type)
9014     return 0;
9015
9016   if (c->die_tag == DW_TAG_pointer_type
9017       || c->die_tag == DW_TAG_reference_type
9018       || c->die_tag == DW_TAG_const_type
9019       || c->die_tag == DW_TAG_volatile_type)
9020     {
9021       dw_die_ref t = get_AT_ref (c, DW_AT_type);
9022
9023       return t ? is_comdat_die (t) : 0;
9024     }
9025
9026   return is_type_die (c);
9027 }
9028
9029 /* Returns 1 iff C is the sort of DIE that might be referred to from another
9030    compilation unit.  */
9031
9032 static int
9033 is_symbol_die (dw_die_ref c)
9034 {
9035   return (is_type_die (c)
9036           || is_declaration_die (c)
9037           || c->die_tag == DW_TAG_namespace
9038           || c->die_tag == DW_TAG_module);
9039 }
9040
9041 static char *
9042 gen_internal_sym (const char *prefix)
9043 {
9044   char buf[256];
9045
9046   ASM_GENERATE_INTERNAL_LABEL (buf, prefix, label_num++);
9047   return xstrdup (buf);
9048 }
9049
9050 /* Assign symbols to all worthy DIEs under DIE.  */
9051
9052 static void
9053 assign_symbol_names (dw_die_ref die)
9054 {
9055   dw_die_ref c;
9056
9057   if (is_symbol_die (die))
9058     {
9059       if (comdat_symbol_id)
9060         {
9061           char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
9062
9063           sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
9064                    comdat_symbol_id, comdat_symbol_number++);
9065           die->die_id.die_symbol = xstrdup (p);
9066         }
9067       else
9068         die->die_id.die_symbol = gen_internal_sym ("LDIE");
9069     }
9070
9071   FOR_EACH_CHILD (die, c, assign_symbol_names (c));
9072 }
9073
9074 struct cu_hash_table_entry
9075 {
9076   dw_die_ref cu;
9077   unsigned min_comdat_num, max_comdat_num;
9078   struct cu_hash_table_entry *next;
9079 };
9080
9081 /* Routines to manipulate hash table of CUs.  */
9082 static hashval_t
9083 htab_cu_hash (const void *of)
9084 {
9085   const struct cu_hash_table_entry *const entry =
9086     (const struct cu_hash_table_entry *) of;
9087
9088   return htab_hash_string (entry->cu->die_id.die_symbol);
9089 }
9090
9091 static int
9092 htab_cu_eq (const void *of1, const void *of2)
9093 {
9094   const struct cu_hash_table_entry *const entry1 =
9095     (const struct cu_hash_table_entry *) of1;
9096   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9097
9098   return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
9099 }
9100
9101 static void
9102 htab_cu_del (void *what)
9103 {
9104   struct cu_hash_table_entry *next,
9105     *entry = (struct cu_hash_table_entry *) what;
9106
9107   while (entry)
9108     {
9109       next = entry->next;
9110       free (entry);
9111       entry = next;
9112     }
9113 }
9114
9115 /* Check whether we have already seen this CU and set up SYM_NUM
9116    accordingly.  */
9117 static int
9118 check_duplicate_cu (dw_die_ref cu, htab_t htable, unsigned int *sym_num)
9119 {
9120   struct cu_hash_table_entry dummy;
9121   struct cu_hash_table_entry **slot, *entry, *last = &dummy;
9122
9123   dummy.max_comdat_num = 0;
9124
9125   slot = (struct cu_hash_table_entry **)
9126     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9127         INSERT);
9128   entry = *slot;
9129
9130   for (; entry; last = entry, entry = entry->next)
9131     {
9132       if (same_die_p_wrap (cu, entry->cu))
9133         break;
9134     }
9135
9136   if (entry)
9137     {
9138       *sym_num = entry->min_comdat_num;
9139       return 1;
9140     }
9141
9142   entry = XCNEW (struct cu_hash_table_entry);
9143   entry->cu = cu;
9144   entry->min_comdat_num = *sym_num = last->max_comdat_num;
9145   entry->next = *slot;
9146   *slot = entry;
9147
9148   return 0;
9149 }
9150
9151 /* Record SYM_NUM to record of CU in HTABLE.  */
9152 static void
9153 record_comdat_symbol_number (dw_die_ref cu, htab_t htable, unsigned int sym_num)
9154 {
9155   struct cu_hash_table_entry **slot, *entry;
9156
9157   slot = (struct cu_hash_table_entry **)
9158     htab_find_slot_with_hash (htable, cu, htab_hash_string (cu->die_id.die_symbol),
9159         NO_INSERT);
9160   entry = *slot;
9161
9162   entry->max_comdat_num = sym_num;
9163 }
9164
9165 /* Traverse the DIE (which is always comp_unit_die), and set up
9166    additional compilation units for each of the include files we see
9167    bracketed by BINCL/EINCL.  */
9168
9169 static void
9170 break_out_includes (dw_die_ref die)
9171 {
9172   dw_die_ref c;
9173   dw_die_ref unit = NULL;
9174   limbo_die_node *node, **pnode;
9175   htab_t cu_hash_table;
9176
9177   c = die->die_child;
9178   if (c) do {
9179     dw_die_ref prev = c;
9180     c = c->die_sib;
9181     while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
9182            || (unit && is_comdat_die (c)))
9183       {
9184         dw_die_ref next = c->die_sib;
9185
9186         /* This DIE is for a secondary CU; remove it from the main one.  */
9187         remove_child_with_prev (c, prev);
9188
9189         if (c->die_tag == DW_TAG_GNU_BINCL)
9190           unit = push_new_compile_unit (unit, c);
9191         else if (c->die_tag == DW_TAG_GNU_EINCL)
9192           unit = pop_compile_unit (unit);
9193         else
9194           add_child_die (unit, c);
9195         c = next;
9196         if (c == die->die_child)
9197           break;
9198       }
9199   } while (c != die->die_child);
9200
9201 #if 0
9202   /* We can only use this in debugging, since the frontend doesn't check
9203      to make sure that we leave every include file we enter.  */
9204   gcc_assert (!unit);
9205 #endif
9206
9207   assign_symbol_names (die);
9208   cu_hash_table = htab_create (10, htab_cu_hash, htab_cu_eq, htab_cu_del);
9209   for (node = limbo_die_list, pnode = &limbo_die_list;
9210        node;
9211        node = node->next)
9212     {
9213       int is_dupl;
9214
9215       compute_section_prefix (node->die);
9216       is_dupl = check_duplicate_cu (node->die, cu_hash_table,
9217                         &comdat_symbol_number);
9218       assign_symbol_names (node->die);
9219       if (is_dupl)
9220         *pnode = node->next;
9221       else
9222         {
9223           pnode = &node->next;
9224           record_comdat_symbol_number (node->die, cu_hash_table,
9225                 comdat_symbol_number);
9226         }
9227     }
9228   htab_delete (cu_hash_table);
9229 }
9230
9231 /* Return non-zero if this DIE is a declaration.  */
9232
9233 static int
9234 is_declaration_die (dw_die_ref die)
9235 {
9236   dw_attr_ref a;
9237   unsigned ix;
9238
9239   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9240     if (a->dw_attr == DW_AT_declaration)
9241       return 1;
9242
9243   return 0;
9244 }
9245
9246 /* Return non-zero if this is a type DIE that should be moved to a
9247    COMDAT .debug_types section.  */
9248
9249 static int
9250 should_move_die_to_comdat (dw_die_ref die)
9251 {
9252   switch (die->die_tag)
9253     {
9254     case DW_TAG_class_type:
9255     case DW_TAG_structure_type:
9256     case DW_TAG_enumeration_type:
9257     case DW_TAG_union_type:
9258       /* Don't move declarations or inlined instances.  */
9259       if (is_declaration_die (die) || get_AT (die, DW_AT_abstract_origin))
9260         return 0;
9261       return 1;
9262     case DW_TAG_array_type:
9263     case DW_TAG_interface_type:
9264     case DW_TAG_pointer_type:
9265     case DW_TAG_reference_type:
9266     case DW_TAG_string_type:
9267     case DW_TAG_subroutine_type:
9268     case DW_TAG_ptr_to_member_type:
9269     case DW_TAG_set_type:
9270     case DW_TAG_subrange_type:
9271     case DW_TAG_base_type:
9272     case DW_TAG_const_type:
9273     case DW_TAG_file_type:
9274     case DW_TAG_packed_type:
9275     case DW_TAG_volatile_type:
9276     case DW_TAG_typedef:
9277     default:
9278       return 0;
9279     }
9280 }
9281
9282 /* Make a clone of DIE.  */
9283
9284 static dw_die_ref
9285 clone_die (dw_die_ref die)
9286 {
9287   dw_die_ref clone;
9288   dw_attr_ref a;
9289   unsigned ix;
9290
9291   clone = GGC_CNEW (die_node);
9292   clone->die_tag = die->die_tag;
9293
9294   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9295     add_dwarf_attr (clone, a);
9296
9297   return clone;
9298 }
9299
9300 /* Make a clone of the tree rooted at DIE.  */
9301
9302 static dw_die_ref
9303 clone_tree (dw_die_ref die)
9304 {
9305   dw_die_ref c;
9306   dw_die_ref clone = clone_die (die);
9307
9308   FOR_EACH_CHILD (die, c, add_child_die (clone, clone_tree(c)));
9309
9310   return clone;
9311 }
9312
9313 /* Make a clone of DIE as a declaration.  */
9314
9315 static dw_die_ref
9316 clone_as_declaration (dw_die_ref die)
9317 {
9318   dw_die_ref clone;
9319   dw_die_ref decl;
9320   dw_attr_ref a;
9321   unsigned ix;
9322
9323   /* If the DIE is already a declaration, just clone it.  */
9324   if (is_declaration_die (die))
9325     return clone_die (die);
9326
9327   /* If the DIE is a specification, just clone its declaration DIE.  */
9328   decl = get_AT_ref (die, DW_AT_specification);
9329   if (decl != NULL)
9330     return clone_die (decl);
9331
9332   clone = GGC_CNEW (die_node);
9333   clone->die_tag = die->die_tag;
9334
9335   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9336     {
9337       /* We don't want to copy over all attributes.
9338          For example we don't want DW_AT_byte_size because otherwise we will no
9339          longer have a declaration and GDB will treat it as a definition.  */
9340
9341       switch (a->dw_attr)
9342         {
9343         case DW_AT_artificial:
9344         case DW_AT_containing_type:
9345         case DW_AT_external:
9346         case DW_AT_name:
9347         case DW_AT_type:
9348         case DW_AT_virtuality:
9349         case DW_AT_MIPS_linkage_name:
9350           add_dwarf_attr (clone, a);
9351           break;
9352         case DW_AT_byte_size:
9353         default:
9354           break;
9355         }
9356     }
9357
9358   if (die->die_id.die_type_node)
9359     add_AT_die_ref (clone, DW_AT_signature, die);
9360
9361   add_AT_flag (clone, DW_AT_declaration, 1);
9362   return clone;
9363 }
9364
9365 /* Copy the declaration context to the new compile unit DIE.  This includes
9366    any surrounding namespace or type declarations.  If the DIE has an
9367    AT_specification attribute, it also includes attributes and children
9368    attached to the specification.  */
9369
9370 static void
9371 copy_declaration_context (dw_die_ref unit, dw_die_ref die)
9372 {
9373   dw_die_ref decl;
9374   dw_die_ref new_decl;
9375
9376   decl = get_AT_ref (die, DW_AT_specification);
9377   if (decl == NULL)
9378     decl = die;
9379   else
9380     {
9381       unsigned ix;
9382       dw_die_ref c;
9383       dw_attr_ref a;
9384
9385       /* Copy the type node pointer from the new DIE to the original
9386          declaration DIE so we can forward references later.  */
9387       decl->die_id.die_type_node = die->die_id.die_type_node;
9388
9389       remove_AT (die, DW_AT_specification);
9390
9391       for (ix = 0; VEC_iterate (dw_attr_node, decl->die_attr, ix, a); ix++)
9392         {
9393           if (a->dw_attr != DW_AT_name
9394               && a->dw_attr != DW_AT_declaration
9395               && a->dw_attr != DW_AT_external)
9396             add_dwarf_attr (die, a);
9397         }
9398
9399       FOR_EACH_CHILD (decl, c, add_child_die (die, clone_tree(c)));
9400     }
9401
9402   if (decl->die_parent != NULL
9403       && decl->die_parent->die_tag != DW_TAG_compile_unit
9404       && decl->die_parent->die_tag != DW_TAG_type_unit)
9405     {
9406       new_decl = copy_ancestor_tree (unit, decl, NULL);
9407       if (new_decl != NULL)
9408         {
9409           remove_AT (new_decl, DW_AT_signature);
9410           add_AT_specification (die, new_decl);
9411         }
9412     }
9413 }
9414
9415 /* Generate the skeleton ancestor tree for the given NODE, then clone
9416    the DIE and add the clone into the tree.  */
9417
9418 static void
9419 generate_skeleton_ancestor_tree (skeleton_chain_node *node)
9420 {
9421   if (node->new_die != NULL)
9422     return;
9423
9424   node->new_die = clone_as_declaration (node->old_die);
9425
9426   if (node->parent != NULL)
9427     {
9428       generate_skeleton_ancestor_tree (node->parent);
9429       add_child_die (node->parent->new_die, node->new_die);
9430     }
9431 }
9432
9433 /* Generate a skeleton tree of DIEs containing any declarations that are
9434    found in the original tree.  We traverse the tree looking for declaration
9435    DIEs, and construct the skeleton from the bottom up whenever we find one.  */
9436
9437 static void
9438 generate_skeleton_bottom_up (skeleton_chain_node *parent)
9439 {
9440   skeleton_chain_node node;
9441   dw_die_ref c;
9442   dw_die_ref first;
9443   dw_die_ref prev = NULL;
9444   dw_die_ref next = NULL;
9445
9446   node.parent = parent;
9447
9448   first = c = parent->old_die->die_child;
9449   if (c)
9450     next = c->die_sib;
9451   if (c) do {
9452     if (prev == NULL || prev->die_sib == c)
9453       prev = c;
9454     c = next;
9455     next = (c == first ? NULL : c->die_sib);
9456     node.old_die = c;
9457     node.new_die = NULL;
9458     if (is_declaration_die (c))
9459       {
9460         /* Clone the existing DIE, move the original to the skeleton
9461            tree (which is in the main CU), and put the clone, with
9462            all the original's children, where the original came from.  */
9463         dw_die_ref clone = clone_die (c);
9464         move_all_children (c, clone);
9465
9466         replace_child (c, clone, prev);
9467         generate_skeleton_ancestor_tree (parent);
9468         add_child_die (parent->new_die, c);
9469         node.new_die = c;
9470         c = clone;
9471       }
9472     generate_skeleton_bottom_up (&node);
9473   } while (next != NULL);
9474 }
9475
9476 /* Wrapper function for generate_skeleton_bottom_up.  */
9477
9478 static dw_die_ref
9479 generate_skeleton (dw_die_ref die)
9480 {
9481   skeleton_chain_node node;
9482
9483   node.old_die = die;
9484   node.new_die = NULL;
9485   node.parent = NULL;
9486
9487   /* If this type definition is nested inside another type,
9488      always leave at least a declaration in its place.  */
9489   if (die->die_parent != NULL && is_type_die (die->die_parent))
9490     node.new_die = clone_as_declaration (die);
9491
9492   generate_skeleton_bottom_up (&node);
9493   return node.new_die;
9494 }
9495
9496 /* Remove the DIE from its parent, possibly replacing it with a cloned
9497    declaration.  The original DIE will be moved to a new compile unit
9498    so that existing references to it follow it to the new location.  If
9499    any of the original DIE's descendants is a declaration, we need to
9500    replace the original DIE with a skeleton tree and move the
9501    declarations back into the skeleton tree.  */
9502
9503 static dw_die_ref
9504 remove_child_or_replace_with_skeleton (dw_die_ref child, dw_die_ref prev)
9505 {
9506   dw_die_ref skeleton;
9507
9508   skeleton = generate_skeleton (child);
9509   if (skeleton == NULL)
9510     remove_child_with_prev (child, prev);
9511   else
9512     {
9513       skeleton->die_id.die_type_node = child->die_id.die_type_node;
9514       replace_child (child, skeleton, prev);
9515     }
9516
9517   return skeleton;
9518 }
9519
9520 /* Traverse the DIE and set up additional .debug_types sections for each
9521    type worthy of being placed in a COMDAT section.  */
9522
9523 static void
9524 break_out_comdat_types (dw_die_ref die)
9525 {
9526   dw_die_ref c;
9527   dw_die_ref first;
9528   dw_die_ref prev = NULL;
9529   dw_die_ref next = NULL;
9530   dw_die_ref unit = NULL;
9531
9532   first = c = die->die_child;
9533   if (c)
9534     next = c->die_sib;
9535   if (c) do {
9536     if (prev == NULL || prev->die_sib == c)
9537       prev = c;
9538     c = next;
9539     next = (c == first ? NULL : c->die_sib);
9540     if (should_move_die_to_comdat (c))
9541       {
9542         dw_die_ref replacement;
9543         comdat_type_node_ref type_node;
9544
9545         /* Create a new type unit DIE as the root for the new tree, and
9546            add it to the list of comdat types.  */
9547         unit = new_die (DW_TAG_type_unit, NULL, NULL);
9548         add_AT_unsigned (unit, DW_AT_language,
9549                          get_AT_unsigned (comp_unit_die, DW_AT_language));
9550         type_node = GGC_CNEW (comdat_type_node);
9551         type_node->root_die = unit;
9552         type_node->next = comdat_type_list;
9553         comdat_type_list = type_node;
9554
9555         /* Generate the type signature.  */
9556         generate_type_signature (c, type_node);
9557
9558         /* Copy the declaration context, attributes, and children of the
9559            declaration into the new compile unit DIE.  */
9560         copy_declaration_context (unit, c);
9561
9562         /* Remove this DIE from the main CU.  */
9563         replacement = remove_child_or_replace_with_skeleton (c, prev);
9564
9565         /* Break out nested types into their own type units.  */
9566         break_out_comdat_types (c);
9567
9568         /* Add the DIE to the new compunit.  */
9569         add_child_die (unit, c);
9570
9571         if (replacement != NULL)
9572           c = replacement;
9573       }
9574     else if (c->die_tag == DW_TAG_namespace
9575              || c->die_tag == DW_TAG_class_type
9576              || c->die_tag == DW_TAG_structure_type
9577              || c->die_tag == DW_TAG_union_type)
9578       {
9579         /* Look for nested types that can be broken out.  */
9580         break_out_comdat_types (c);
9581       }
9582   } while (next != NULL);
9583 }
9584
9585 /* Structure to map a DIE in one CU to its copy in a comdat type unit.  */
9586
9587 struct decl_table_entry
9588 {
9589   dw_die_ref orig;
9590   dw_die_ref copy;
9591 };
9592
9593 /* Routines to manipulate hash table of copied declarations.  */
9594
9595 static hashval_t
9596 htab_decl_hash (const void *of)
9597 {
9598   const struct decl_table_entry *const entry =
9599     (const struct decl_table_entry *) of;
9600
9601   return htab_hash_pointer (entry->orig);
9602 }
9603
9604 static int
9605 htab_decl_eq (const void *of1, const void *of2)
9606 {
9607   const struct decl_table_entry *const entry1 =
9608     (const struct decl_table_entry *) of1;
9609   const struct die_struct *const entry2 = (const struct die_struct *) of2;
9610
9611   return entry1->orig == entry2;
9612 }
9613
9614 static void
9615 htab_decl_del (void *what)
9616 {
9617   struct decl_table_entry *entry = (struct decl_table_entry *) what;
9618
9619   free (entry);
9620 }
9621
9622 /* Copy DIE and its ancestors, up to, but not including, the compile unit
9623    or type unit entry, to a new tree.  Adds the new tree to UNIT and returns
9624    a pointer to the copy of DIE.  If DECL_TABLE is provided, it is used
9625    to check if the ancestor has already been copied into UNIT.  */
9626
9627 static dw_die_ref
9628 copy_ancestor_tree (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9629 {
9630   dw_die_ref parent = die->die_parent;
9631   dw_die_ref new_parent = unit;
9632   dw_die_ref copy;
9633   void **slot = NULL;
9634   struct decl_table_entry *entry = NULL;
9635
9636   if (decl_table)
9637     {
9638       /* Check if the entry has already been copied to UNIT.  */
9639       slot = htab_find_slot_with_hash (decl_table, die,
9640                                        htab_hash_pointer (die), INSERT);
9641       if (*slot != HTAB_EMPTY_ENTRY)
9642         {
9643           entry = (struct decl_table_entry *) *slot;
9644           return entry->copy;
9645         }
9646
9647       /* Record in DECL_TABLE that DIE has been copied to UNIT.  */
9648       entry = XCNEW (struct decl_table_entry);
9649       entry->orig = die;
9650       entry->copy = NULL;
9651       *slot = entry;
9652     }
9653
9654   if (parent != NULL)
9655     {
9656       dw_die_ref spec = get_AT_ref (parent, DW_AT_specification);
9657       if (spec != NULL)
9658         parent = spec;
9659       if (parent->die_tag != DW_TAG_compile_unit
9660           && parent->die_tag != DW_TAG_type_unit)
9661         new_parent = copy_ancestor_tree (unit, parent, decl_table);
9662     }
9663
9664   copy = clone_as_declaration (die);
9665   add_child_die (new_parent, copy);
9666
9667   if (decl_table != NULL)
9668     {
9669       /* Make sure the copy is marked as part of the type unit.  */
9670       copy->die_mark = 1;
9671       /* Record the pointer to the copy.  */
9672       entry->copy = copy;
9673     }
9674
9675   return copy;
9676 }
9677
9678 /* Walk the DIE and its children, looking for references to incomplete
9679    or trivial types that are unmarked (i.e., that are not in the current
9680    type_unit).  */
9681
9682 static void
9683 copy_decls_walk (dw_die_ref unit, dw_die_ref die, htab_t decl_table)
9684 {
9685   dw_die_ref c;
9686   dw_attr_ref a;
9687   unsigned ix;
9688
9689   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9690     {
9691       if (AT_class (a) == dw_val_class_die_ref)
9692         {
9693           dw_die_ref targ = AT_ref (a);
9694           comdat_type_node_ref type_node = targ->die_id.die_type_node;
9695           void **slot;
9696           struct decl_table_entry *entry;
9697
9698           if (targ->die_mark != 0 || type_node != NULL)
9699             continue;
9700
9701           slot = htab_find_slot_with_hash (decl_table, targ,
9702                                            htab_hash_pointer (targ), INSERT);
9703
9704           if (*slot != HTAB_EMPTY_ENTRY)
9705             {
9706               /* TARG has already been copied, so we just need to
9707                  modify the reference to point to the copy.  */
9708               entry = (struct decl_table_entry *) *slot;
9709               a->dw_attr_val.v.val_die_ref.die = entry->copy;
9710             }
9711           else
9712             {
9713               dw_die_ref parent = unit;
9714               dw_die_ref copy = clone_tree (targ);
9715
9716               /* Make sure the cloned tree is marked as part of the
9717                  type unit.  */
9718               mark_dies (copy);
9719
9720               /* Record in DECL_TABLE that TARG has been copied.
9721                  Need to do this now, before the recursive call,
9722                  because DECL_TABLE may be expanded and SLOT
9723                  would no longer be a valid pointer.  */
9724               entry = XCNEW (struct decl_table_entry);
9725               entry->orig = targ;
9726               entry->copy = copy;
9727               *slot = entry;
9728
9729               /* If TARG has surrounding context, copy its ancestor tree
9730                  into the new type unit.  */
9731               if (targ->die_parent != NULL
9732                   && targ->die_parent->die_tag != DW_TAG_compile_unit
9733                   && targ->die_parent->die_tag != DW_TAG_type_unit)
9734                 parent = copy_ancestor_tree (unit, targ->die_parent,
9735                                              decl_table);
9736
9737               add_child_die (parent, copy);
9738               a->dw_attr_val.v.val_die_ref.die = copy;
9739
9740               /* Make sure the newly-copied DIE is walked.  If it was
9741                  installed in a previously-added context, it won't
9742                  get visited otherwise.  */
9743               if (parent != unit)
9744                 copy_decls_walk (unit, parent, decl_table);
9745             }
9746         }
9747     }
9748
9749   FOR_EACH_CHILD (die, c, copy_decls_walk (unit, c, decl_table));
9750 }
9751
9752 /* Copy declarations for "unworthy" types into the new comdat section.
9753    Incomplete types, modified types, and certain other types aren't broken
9754    out into comdat sections of their own, so they don't have a signature,
9755    and we need to copy the declaration into the same section so that we
9756    don't have an external reference.  */
9757
9758 static void
9759 copy_decls_for_unworthy_types (dw_die_ref unit)
9760 {
9761   htab_t decl_table;
9762
9763   mark_dies (unit);
9764   decl_table = htab_create (10, htab_decl_hash, htab_decl_eq, htab_decl_del);
9765   copy_decls_walk (unit, unit, decl_table);
9766   htab_delete (decl_table);
9767   unmark_dies (unit);
9768 }
9769
9770 /* Traverse the DIE and add a sibling attribute if it may have the
9771    effect of speeding up access to siblings.  To save some space,
9772    avoid generating sibling attributes for DIE's without children.  */
9773
9774 static void
9775 add_sibling_attributes (dw_die_ref die)
9776 {
9777   dw_die_ref c;
9778
9779   if (! die->die_child)
9780     return;
9781
9782   if (die->die_parent && die != die->die_parent->die_child)
9783     add_AT_die_ref (die, DW_AT_sibling, die->die_sib);
9784
9785   FOR_EACH_CHILD (die, c, add_sibling_attributes (c));
9786 }
9787
9788 /* Output all location lists for the DIE and its children.  */
9789
9790 static void
9791 output_location_lists (dw_die_ref die)
9792 {
9793   dw_die_ref c;
9794   dw_attr_ref a;
9795   unsigned ix;
9796
9797   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9798     if (AT_class (a) == dw_val_class_loc_list)
9799       output_loc_list (AT_loc_list (a));
9800
9801   FOR_EACH_CHILD (die, c, output_location_lists (c));
9802 }
9803
9804 /* The format of each DIE (and its attribute value pairs) is encoded in an
9805    abbreviation table.  This routine builds the abbreviation table and assigns
9806    a unique abbreviation id for each abbreviation entry.  The children of each
9807    die are visited recursively.  */
9808
9809 static void
9810 build_abbrev_table (dw_die_ref die)
9811 {
9812   unsigned long abbrev_id;
9813   unsigned int n_alloc;
9814   dw_die_ref c;
9815   dw_attr_ref a;
9816   unsigned ix;
9817
9818   /* Scan the DIE references, and mark as external any that refer to
9819      DIEs from other CUs (i.e. those which are not marked).  */
9820   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9821     if (AT_class (a) == dw_val_class_die_ref
9822         && AT_ref (a)->die_mark == 0)
9823       {
9824         gcc_assert (dwarf_version >= 4 || AT_ref (a)->die_id.die_symbol);
9825         set_AT_ref_external (a, 1);
9826       }
9827
9828   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
9829     {
9830       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
9831       dw_attr_ref die_a, abbrev_a;
9832       unsigned ix;
9833       bool ok = true;
9834
9835       if (abbrev->die_tag != die->die_tag)
9836         continue;
9837       if ((abbrev->die_child != NULL) != (die->die_child != NULL))
9838         continue;
9839
9840       if (VEC_length (dw_attr_node, abbrev->die_attr)
9841           != VEC_length (dw_attr_node, die->die_attr))
9842         continue;
9843
9844       for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, die_a); ix++)
9845         {
9846           abbrev_a = VEC_index (dw_attr_node, abbrev->die_attr, ix);
9847           if ((abbrev_a->dw_attr != die_a->dw_attr)
9848               || (value_format (abbrev_a) != value_format (die_a)))
9849             {
9850               ok = false;
9851               break;
9852             }
9853         }
9854       if (ok)
9855         break;
9856     }
9857
9858   if (abbrev_id >= abbrev_die_table_in_use)
9859     {
9860       if (abbrev_die_table_in_use >= abbrev_die_table_allocated)
9861         {
9862           n_alloc = abbrev_die_table_allocated + ABBREV_DIE_TABLE_INCREMENT;
9863           abbrev_die_table = GGC_RESIZEVEC (dw_die_ref, abbrev_die_table,
9864                                             n_alloc);
9865
9866           memset (&abbrev_die_table[abbrev_die_table_allocated], 0,
9867                  (n_alloc - abbrev_die_table_allocated) * sizeof (dw_die_ref));
9868           abbrev_die_table_allocated = n_alloc;
9869         }
9870
9871       ++abbrev_die_table_in_use;
9872       abbrev_die_table[abbrev_id] = die;
9873     }
9874
9875   die->die_abbrev = abbrev_id;
9876   FOR_EACH_CHILD (die, c, build_abbrev_table (c));
9877 }
9878 \f
9879 /* Return the power-of-two number of bytes necessary to represent VALUE.  */
9880
9881 static int
9882 constant_size (unsigned HOST_WIDE_INT value)
9883 {
9884   int log;
9885
9886   if (value == 0)
9887     log = 0;
9888   else
9889     log = floor_log2 (value);
9890
9891   log = log / 8;
9892   log = 1 << (floor_log2 (log) + 1);
9893
9894   return log;
9895 }
9896
9897 /* Return the size of a DIE as it is represented in the
9898    .debug_info section.  */
9899
9900 static unsigned long
9901 size_of_die (dw_die_ref die)
9902 {
9903   unsigned long size = 0;
9904   dw_attr_ref a;
9905   unsigned ix;
9906
9907   size += size_of_uleb128 (die->die_abbrev);
9908   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
9909     {
9910       switch (AT_class (a))
9911         {
9912         case dw_val_class_addr:
9913           size += DWARF2_ADDR_SIZE;
9914           break;
9915         case dw_val_class_offset:
9916           size += DWARF_OFFSET_SIZE;
9917           break;
9918         case dw_val_class_loc:
9919           {
9920             unsigned long lsize = size_of_locs (AT_loc (a));
9921
9922             /* Block length.  */
9923             if (dwarf_version >= 4)
9924               size += size_of_uleb128 (lsize);
9925             else
9926               size += constant_size (lsize);
9927             size += lsize;
9928           }
9929           break;
9930         case dw_val_class_loc_list:
9931           size += DWARF_OFFSET_SIZE;
9932           break;
9933         case dw_val_class_range_list:
9934           size += DWARF_OFFSET_SIZE;
9935           break;
9936         case dw_val_class_const:
9937           size += size_of_sleb128 (AT_int (a));
9938           break;
9939         case dw_val_class_unsigned_const:
9940           size += constant_size (AT_unsigned (a));
9941           break;
9942         case dw_val_class_const_double:
9943           size += 2 * HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR;
9944           if (HOST_BITS_PER_WIDE_INT >= 64)
9945             size++; /* block */
9946           break;
9947         case dw_val_class_vec:
9948           size += constant_size (a->dw_attr_val.v.val_vec.length
9949                                  * a->dw_attr_val.v.val_vec.elt_size)
9950                   + a->dw_attr_val.v.val_vec.length
9951                     * a->dw_attr_val.v.val_vec.elt_size; /* block */
9952           break;
9953         case dw_val_class_flag:
9954           if (dwarf_version >= 4)
9955             /* Currently all add_AT_flag calls pass in 1 as last argument,
9956                so DW_FORM_flag_present can be used.  If that ever changes,
9957                we'll need to use DW_FORM_flag and have some optimization
9958                in build_abbrev_table that will change those to
9959                DW_FORM_flag_present if it is set to 1 in all DIEs using
9960                the same abbrev entry.  */
9961             gcc_assert (a->dw_attr_val.v.val_flag == 1);
9962           else
9963             size += 1;
9964           break;
9965         case dw_val_class_die_ref:
9966           if (AT_ref_external (a))
9967             {
9968               /* In DWARF4, we use DW_FORM_sig8; for earlier versions
9969                  we use DW_FORM_ref_addr.  In DWARF2, DW_FORM_ref_addr
9970                  is sized by target address length, whereas in DWARF3
9971                  it's always sized as an offset.  */
9972               if (dwarf_version >= 4)
9973                 size += DWARF_TYPE_SIGNATURE_SIZE;
9974               else if (dwarf_version == 2)
9975                 size += DWARF2_ADDR_SIZE;
9976               else
9977                 size += DWARF_OFFSET_SIZE;
9978             }
9979           else
9980             size += DWARF_OFFSET_SIZE;
9981           break;
9982         case dw_val_class_fde_ref:
9983           size += DWARF_OFFSET_SIZE;
9984           break;
9985         case dw_val_class_lbl_id:
9986           size += DWARF2_ADDR_SIZE;
9987           break;
9988         case dw_val_class_lineptr:
9989         case dw_val_class_macptr:
9990           size += DWARF_OFFSET_SIZE;
9991           break;
9992         case dw_val_class_str:
9993           if (AT_string_form (a) == DW_FORM_strp)
9994             size += DWARF_OFFSET_SIZE;
9995           else
9996             size += strlen (a->dw_attr_val.v.val_str->str) + 1;
9997           break;
9998         case dw_val_class_file:
9999           size += constant_size (maybe_emit_file (a->dw_attr_val.v.val_file));
10000           break;
10001         case dw_val_class_data8:
10002           size += 8;
10003           break;
10004         default:
10005           gcc_unreachable ();
10006         }
10007     }
10008
10009   return size;
10010 }
10011
10012 /* Size the debugging information associated with a given DIE.  Visits the
10013    DIE's children recursively.  Updates the global variable next_die_offset, on
10014    each time through.  Uses the current value of next_die_offset to update the
10015    die_offset field in each DIE.  */
10016
10017 static void
10018 calc_die_sizes (dw_die_ref die)
10019 {
10020   dw_die_ref c;
10021
10022   die->die_offset = next_die_offset;
10023   next_die_offset += size_of_die (die);
10024
10025   FOR_EACH_CHILD (die, c, calc_die_sizes (c));
10026
10027   if (die->die_child != NULL)
10028     /* Count the null byte used to terminate sibling lists.  */
10029     next_die_offset += 1;
10030 }
10031
10032 /* Set the marks for a die and its children.  We do this so
10033    that we know whether or not a reference needs to use FORM_ref_addr; only
10034    DIEs in the same CU will be marked.  We used to clear out the offset
10035    and use that as the flag, but ran into ordering problems.  */
10036
10037 static void
10038 mark_dies (dw_die_ref die)
10039 {
10040   dw_die_ref c;
10041
10042   gcc_assert (!die->die_mark);
10043
10044   die->die_mark = 1;
10045   FOR_EACH_CHILD (die, c, mark_dies (c));
10046 }
10047
10048 /* Clear the marks for a die and its children.  */
10049
10050 static void
10051 unmark_dies (dw_die_ref die)
10052 {
10053   dw_die_ref c;
10054
10055   if (dwarf_version < 4)
10056     gcc_assert (die->die_mark);
10057
10058   die->die_mark = 0;
10059   FOR_EACH_CHILD (die, c, unmark_dies (c));
10060 }
10061
10062 /* Clear the marks for a die, its children and referred dies.  */
10063
10064 static void
10065 unmark_all_dies (dw_die_ref die)
10066 {
10067   dw_die_ref c;
10068   dw_attr_ref a;
10069   unsigned ix;
10070
10071   if (!die->die_mark)
10072     return;
10073   die->die_mark = 0;
10074
10075   FOR_EACH_CHILD (die, c, unmark_all_dies (c));
10076
10077   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10078     if (AT_class (a) == dw_val_class_die_ref)
10079       unmark_all_dies (AT_ref (a));
10080 }
10081
10082 /* Return the size of the .debug_pubnames or .debug_pubtypes table
10083    generated for the compilation unit.  */
10084
10085 static unsigned long
10086 size_of_pubnames (VEC (pubname_entry, gc) * names)
10087 {
10088   unsigned long size;
10089   unsigned i;
10090   pubname_ref p;
10091
10092   size = DWARF_PUBNAMES_HEADER_SIZE;
10093   for (i = 0; VEC_iterate (pubname_entry, names, i, p); i++)
10094     if (names != pubtype_table
10095         || p->die->die_offset != 0
10096         || !flag_eliminate_unused_debug_types)
10097       size += strlen (p->name) + DWARF_OFFSET_SIZE + 1;
10098
10099   size += DWARF_OFFSET_SIZE;
10100   return size;
10101 }
10102
10103 /* Return the size of the information in the .debug_aranges section.  */
10104
10105 static unsigned long
10106 size_of_aranges (void)
10107 {
10108   unsigned long size;
10109
10110   size = DWARF_ARANGES_HEADER_SIZE;
10111
10112   /* Count the address/length pair for this compilation unit.  */
10113   if (text_section_used)
10114     size += 2 * DWARF2_ADDR_SIZE;
10115   if (cold_text_section_used)
10116     size += 2 * DWARF2_ADDR_SIZE;
10117   size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
10118
10119   /* Count the two zero words used to terminated the address range table.  */
10120   size += 2 * DWARF2_ADDR_SIZE;
10121   return size;
10122 }
10123 \f
10124 /* Select the encoding of an attribute value.  */
10125
10126 static enum dwarf_form
10127 value_format (dw_attr_ref a)
10128 {
10129   switch (a->dw_attr_val.val_class)
10130     {
10131     case dw_val_class_addr:
10132       /* Only very few attributes allow DW_FORM_addr.  */
10133       switch (a->dw_attr)
10134         {
10135         case DW_AT_low_pc:
10136         case DW_AT_high_pc:
10137         case DW_AT_entry_pc:
10138         case DW_AT_trampoline:
10139           return DW_FORM_addr;
10140         default:
10141           break;
10142         }
10143       switch (DWARF2_ADDR_SIZE)
10144         {
10145         case 1:
10146           return DW_FORM_data1;
10147         case 2:
10148           return DW_FORM_data2;
10149         case 4:
10150           return DW_FORM_data4;
10151         case 8:
10152           return DW_FORM_data8;
10153         default:
10154           gcc_unreachable ();
10155         }
10156     case dw_val_class_range_list:
10157     case dw_val_class_loc_list:
10158       if (dwarf_version >= 4)
10159         return DW_FORM_sec_offset;
10160       /* FALLTHRU */
10161     case dw_val_class_offset:
10162       switch (DWARF_OFFSET_SIZE)
10163         {
10164         case 4:
10165           return DW_FORM_data4;
10166         case 8:
10167           return DW_FORM_data8;
10168         default:
10169           gcc_unreachable ();
10170         }
10171     case dw_val_class_loc:
10172       if (dwarf_version >= 4)
10173         return DW_FORM_exprloc;
10174       switch (constant_size (size_of_locs (AT_loc (a))))
10175         {
10176         case 1:
10177           return DW_FORM_block1;
10178         case 2:
10179           return DW_FORM_block2;
10180         default:
10181           gcc_unreachable ();
10182         }
10183     case dw_val_class_const:
10184       return DW_FORM_sdata;
10185     case dw_val_class_unsigned_const:
10186       switch (constant_size (AT_unsigned (a)))
10187         {
10188         case 1:
10189           return DW_FORM_data1;
10190         case 2:
10191           return DW_FORM_data2;
10192         case 4:
10193           return DW_FORM_data4;
10194         case 8:
10195           return DW_FORM_data8;
10196         default:
10197           gcc_unreachable ();
10198         }
10199     case dw_val_class_const_double:
10200       switch (HOST_BITS_PER_WIDE_INT)
10201         {
10202         case 8:
10203           return DW_FORM_data2;
10204         case 16:
10205           return DW_FORM_data4;
10206         case 32:
10207           return DW_FORM_data8;
10208         case 64:
10209         default:
10210           return DW_FORM_block1;
10211         }
10212     case dw_val_class_vec:
10213       switch (constant_size (a->dw_attr_val.v.val_vec.length
10214                              * a->dw_attr_val.v.val_vec.elt_size))
10215         {
10216         case 1:
10217           return DW_FORM_block1;
10218         case 2:
10219           return DW_FORM_block2;
10220         case 4:
10221           return DW_FORM_block4;
10222         default:
10223           gcc_unreachable ();
10224         }
10225     case dw_val_class_flag:
10226       if (dwarf_version >= 4)
10227         {
10228           /* Currently all add_AT_flag calls pass in 1 as last argument,
10229              so DW_FORM_flag_present can be used.  If that ever changes,
10230              we'll need to use DW_FORM_flag and have some optimization
10231              in build_abbrev_table that will change those to
10232              DW_FORM_flag_present if it is set to 1 in all DIEs using
10233              the same abbrev entry.  */
10234           gcc_assert (a->dw_attr_val.v.val_flag == 1);
10235           return DW_FORM_flag_present;
10236         }
10237       return DW_FORM_flag;
10238     case dw_val_class_die_ref:
10239       if (AT_ref_external (a))
10240         return dwarf_version >= 4 ? DW_FORM_sig8 : DW_FORM_ref_addr;
10241       else
10242         return DW_FORM_ref;
10243     case dw_val_class_fde_ref:
10244       return DW_FORM_data;
10245     case dw_val_class_lbl_id:
10246       return DW_FORM_addr;
10247     case dw_val_class_lineptr:
10248     case dw_val_class_macptr:
10249       return dwarf_version >= 4 ? DW_FORM_sec_offset : DW_FORM_data;
10250     case dw_val_class_str:
10251       return AT_string_form (a);
10252     case dw_val_class_file:
10253       switch (constant_size (maybe_emit_file (a->dw_attr_val.v.val_file)))
10254         {
10255         case 1:
10256           return DW_FORM_data1;
10257         case 2:
10258           return DW_FORM_data2;
10259         case 4:
10260           return DW_FORM_data4;
10261         default:
10262           gcc_unreachable ();
10263         }
10264
10265     case dw_val_class_data8:
10266       return DW_FORM_data8;
10267
10268     default:
10269       gcc_unreachable ();
10270     }
10271 }
10272
10273 /* Output the encoding of an attribute value.  */
10274
10275 static void
10276 output_value_format (dw_attr_ref a)
10277 {
10278   enum dwarf_form form = value_format (a);
10279
10280   dw2_asm_output_data_uleb128 (form, "(%s)", dwarf_form_name (form));
10281 }
10282
10283 /* Output the .debug_abbrev section which defines the DIE abbreviation
10284    table.  */
10285
10286 static void
10287 output_abbrev_section (void)
10288 {
10289   unsigned long abbrev_id;
10290
10291   for (abbrev_id = 1; abbrev_id < abbrev_die_table_in_use; ++abbrev_id)
10292     {
10293       dw_die_ref abbrev = abbrev_die_table[abbrev_id];
10294       unsigned ix;
10295       dw_attr_ref a_attr;
10296
10297       dw2_asm_output_data_uleb128 (abbrev_id, "(abbrev code)");
10298       dw2_asm_output_data_uleb128 (abbrev->die_tag, "(TAG: %s)",
10299                                    dwarf_tag_name (abbrev->die_tag));
10300
10301       if (abbrev->die_child != NULL)
10302         dw2_asm_output_data (1, DW_children_yes, "DW_children_yes");
10303       else
10304         dw2_asm_output_data (1, DW_children_no, "DW_children_no");
10305
10306       for (ix = 0; VEC_iterate (dw_attr_node, abbrev->die_attr, ix, a_attr);
10307            ix++)
10308         {
10309           dw2_asm_output_data_uleb128 (a_attr->dw_attr, "(%s)",
10310                                        dwarf_attr_name (a_attr->dw_attr));
10311           output_value_format (a_attr);
10312         }
10313
10314       dw2_asm_output_data (1, 0, NULL);
10315       dw2_asm_output_data (1, 0, NULL);
10316     }
10317
10318   /* Terminate the table.  */
10319   dw2_asm_output_data (1, 0, NULL);
10320 }
10321
10322 /* Output a symbol we can use to refer to this DIE from another CU.  */
10323
10324 static inline void
10325 output_die_symbol (dw_die_ref die)
10326 {
10327   char *sym = die->die_id.die_symbol;
10328
10329   if (sym == 0)
10330     return;
10331
10332   if (strncmp (sym, DIE_LABEL_PREFIX, sizeof (DIE_LABEL_PREFIX) - 1) == 0)
10333     /* We make these global, not weak; if the target doesn't support
10334        .linkonce, it doesn't support combining the sections, so debugging
10335        will break.  */
10336     targetm.asm_out.globalize_label (asm_out_file, sym);
10337
10338   ASM_OUTPUT_LABEL (asm_out_file, sym);
10339 }
10340
10341 /* Return a new location list, given the begin and end range, and the
10342    expression.  */
10343
10344 static inline dw_loc_list_ref
10345 new_loc_list (dw_loc_descr_ref expr, const char *begin, const char *end,
10346               const char *section)
10347 {
10348   dw_loc_list_ref retlist = GGC_CNEW (dw_loc_list_node);
10349
10350   retlist->begin = begin;
10351   retlist->end = end;
10352   retlist->expr = expr;
10353   retlist->section = section;
10354
10355   return retlist;
10356 }
10357
10358 /* Generate a new internal symbol for this location list node, if it
10359    hasn't got one yet.  */
10360
10361 static inline void
10362 gen_llsym (dw_loc_list_ref list)
10363 {
10364   gcc_assert (!list->ll_symbol);
10365   list->ll_symbol = gen_internal_sym ("LLST");
10366 }
10367
10368 /* Output the location list given to us.  */
10369
10370 static void
10371 output_loc_list (dw_loc_list_ref list_head)
10372 {
10373   dw_loc_list_ref curr = list_head;
10374
10375   ASM_OUTPUT_LABEL (asm_out_file, list_head->ll_symbol);
10376
10377   /* Walk the location list, and output each range + expression.  */
10378   for (curr = list_head; curr != NULL; curr = curr->dw_loc_next)
10379     {
10380       unsigned long size;
10381       /* Don't output an entry that starts and ends at the same address.  */
10382       if (strcmp (curr->begin, curr->end) == 0)
10383         continue;
10384       if (!have_multiple_function_sections)
10385         {
10386           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->begin, curr->section,
10387                                 "Location list begin address (%s)",
10388                                 list_head->ll_symbol);
10389           dw2_asm_output_delta (DWARF2_ADDR_SIZE, curr->end, curr->section,
10390                                 "Location list end address (%s)",
10391                                 list_head->ll_symbol);
10392         }
10393       else
10394         {
10395           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->begin,
10396                                "Location list begin address (%s)",
10397                                list_head->ll_symbol);
10398           dw2_asm_output_addr (DWARF2_ADDR_SIZE, curr->end,
10399                                "Location list end address (%s)",
10400                                list_head->ll_symbol);
10401         }
10402       size = size_of_locs (curr->expr);
10403
10404       /* Output the block length for this list of location operations.  */
10405       gcc_assert (size <= 0xffff);
10406       dw2_asm_output_data (2, size, "%s", "Location expression size");
10407
10408       output_loc_sequence (curr->expr);
10409     }
10410
10411   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10412                        "Location list terminator begin (%s)",
10413                        list_head->ll_symbol);
10414   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0,
10415                        "Location list terminator end (%s)",
10416                        list_head->ll_symbol);
10417 }
10418
10419 /* Output a type signature.  */
10420
10421 static inline void
10422 output_signature (const char *sig, const char *name)
10423 {
10424   int i;
10425
10426   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10427     dw2_asm_output_data (1, sig[i], i == 0 ? "%s" : NULL, name);
10428 }
10429
10430 /* Output the DIE and its attributes.  Called recursively to generate
10431    the definitions of each child DIE.  */
10432
10433 static void
10434 output_die (dw_die_ref die)
10435 {
10436   dw_attr_ref a;
10437   dw_die_ref c;
10438   unsigned long size;
10439   unsigned ix;
10440
10441   /* If someone in another CU might refer to us, set up a symbol for
10442      them to point to.  */
10443   if (dwarf_version < 4 && die->die_id.die_symbol)
10444     output_die_symbol (die);
10445
10446   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (0x%lx) %s)",
10447                                (unsigned long)die->die_offset,
10448                                dwarf_tag_name (die->die_tag));
10449
10450   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
10451     {
10452       const char *name = dwarf_attr_name (a->dw_attr);
10453
10454       switch (AT_class (a))
10455         {
10456         case dw_val_class_addr:
10457           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE, AT_addr (a), "%s", name);
10458           break;
10459
10460         case dw_val_class_offset:
10461           dw2_asm_output_data (DWARF_OFFSET_SIZE, a->dw_attr_val.v.val_offset,
10462                                "%s", name);
10463           break;
10464
10465         case dw_val_class_range_list:
10466           {
10467             char *p = strchr (ranges_section_label, '\0');
10468
10469             sprintf (p, "+" HOST_WIDE_INT_PRINT_HEX,
10470                      a->dw_attr_val.v.val_offset);
10471             dw2_asm_output_offset (DWARF_OFFSET_SIZE, ranges_section_label,
10472                                    debug_ranges_section, "%s", name);
10473             *p = '\0';
10474           }
10475           break;
10476
10477         case dw_val_class_loc:
10478           size = size_of_locs (AT_loc (a));
10479
10480           /* Output the block length for this list of location operations.  */
10481           if (dwarf_version >= 4)
10482             dw2_asm_output_data_uleb128 (size, "%s", name);
10483           else
10484             dw2_asm_output_data (constant_size (size), size, "%s", name);
10485
10486           output_loc_sequence (AT_loc (a));
10487           break;
10488
10489         case dw_val_class_const:
10490           /* ??? It would be slightly more efficient to use a scheme like is
10491              used for unsigned constants below, but gdb 4.x does not sign
10492              extend.  Gdb 5.x does sign extend.  */
10493           dw2_asm_output_data_sleb128 (AT_int (a), "%s", name);
10494           break;
10495
10496         case dw_val_class_unsigned_const:
10497           dw2_asm_output_data (constant_size (AT_unsigned (a)),
10498                                AT_unsigned (a), "%s", name);
10499           break;
10500
10501         case dw_val_class_const_double:
10502           {
10503             unsigned HOST_WIDE_INT first, second;
10504
10505             if (HOST_BITS_PER_WIDE_INT >= 64)
10506               dw2_asm_output_data (1,
10507                                    2 * HOST_BITS_PER_WIDE_INT
10508                                    / HOST_BITS_PER_CHAR,
10509                                    NULL);
10510
10511             if (WORDS_BIG_ENDIAN)
10512               {
10513                 first = a->dw_attr_val.v.val_double.high;
10514                 second = a->dw_attr_val.v.val_double.low;
10515               }
10516             else
10517               {
10518                 first = a->dw_attr_val.v.val_double.low;
10519                 second = a->dw_attr_val.v.val_double.high;
10520               }
10521
10522             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10523                                  first, name);
10524             dw2_asm_output_data (HOST_BITS_PER_WIDE_INT / HOST_BITS_PER_CHAR,
10525                                  second, NULL);
10526           }
10527           break;
10528
10529         case dw_val_class_vec:
10530           {
10531             unsigned int elt_size = a->dw_attr_val.v.val_vec.elt_size;
10532             unsigned int len = a->dw_attr_val.v.val_vec.length;
10533             unsigned int i;
10534             unsigned char *p;
10535
10536             dw2_asm_output_data (constant_size (len * elt_size),
10537                                  len * elt_size, "%s", name);
10538             if (elt_size > sizeof (HOST_WIDE_INT))
10539               {
10540                 elt_size /= 2;
10541                 len *= 2;
10542               }
10543             for (i = 0, p = a->dw_attr_val.v.val_vec.array;
10544                  i < len;
10545                  i++, p += elt_size)
10546               dw2_asm_output_data (elt_size, extract_int (p, elt_size),
10547                                    "fp or vector constant word %u", i);
10548             break;
10549           }
10550
10551         case dw_val_class_flag:
10552           if (dwarf_version >= 4)
10553             {
10554               /* Currently all add_AT_flag calls pass in 1 as last argument,
10555                  so DW_FORM_flag_present can be used.  If that ever changes,
10556                  we'll need to use DW_FORM_flag and have some optimization
10557                  in build_abbrev_table that will change those to
10558                  DW_FORM_flag_present if it is set to 1 in all DIEs using
10559                  the same abbrev entry.  */
10560               gcc_assert (AT_flag (a) == 1);
10561               if (flag_debug_asm)
10562                 fprintf (asm_out_file, "\t\t\t%s %s\n",
10563                          ASM_COMMENT_START, name);
10564               break;
10565             }
10566           dw2_asm_output_data (1, AT_flag (a), "%s", name);
10567           break;
10568
10569         case dw_val_class_loc_list:
10570           {
10571             char *sym = AT_loc_list (a)->ll_symbol;
10572
10573             gcc_assert (sym);
10574             dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section,
10575                                    "%s", name);
10576           }
10577           break;
10578
10579         case dw_val_class_die_ref:
10580           if (AT_ref_external (a))
10581             {
10582               if (dwarf_version >= 4)
10583                 {
10584                   comdat_type_node_ref type_node =
10585                     AT_ref (a)->die_id.die_type_node;
10586
10587                   gcc_assert (type_node);
10588                   output_signature (type_node->signature, name);
10589                 }
10590               else
10591                 {
10592                   char *sym = AT_ref (a)->die_id.die_symbol;
10593                   int size;
10594
10595                   gcc_assert (sym);
10596                   /* In DWARF2, DW_FORM_ref_addr is sized by target address
10597                      length, whereas in DWARF3 it's always sized as an
10598                      offset.  */
10599                   if (dwarf_version == 2)
10600                     size = DWARF2_ADDR_SIZE;
10601                   else
10602                     size = DWARF_OFFSET_SIZE;
10603                   dw2_asm_output_offset (size, sym, debug_info_section, "%s",
10604                                          name);
10605                 }
10606             }
10607           else
10608             {
10609               gcc_assert (AT_ref (a)->die_offset);
10610               dw2_asm_output_data (DWARF_OFFSET_SIZE, AT_ref (a)->die_offset,
10611                                    "%s", name);
10612             }
10613           break;
10614
10615         case dw_val_class_fde_ref:
10616           {
10617             char l1[20];
10618
10619             ASM_GENERATE_INTERNAL_LABEL (l1, FDE_LABEL,
10620                                          a->dw_attr_val.v.val_fde_index * 2);
10621             dw2_asm_output_offset (DWARF_OFFSET_SIZE, l1, debug_frame_section,
10622                                    "%s", name);
10623           }
10624           break;
10625
10626         case dw_val_class_lbl_id:
10627           dw2_asm_output_addr (DWARF2_ADDR_SIZE, AT_lbl (a), "%s", name);
10628           break;
10629
10630         case dw_val_class_lineptr:
10631           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10632                                  debug_line_section, "%s", name);
10633           break;
10634
10635         case dw_val_class_macptr:
10636           dw2_asm_output_offset (DWARF_OFFSET_SIZE, AT_lbl (a),
10637                                  debug_macinfo_section, "%s", name);
10638           break;
10639
10640         case dw_val_class_str:
10641           if (AT_string_form (a) == DW_FORM_strp)
10642             dw2_asm_output_offset (DWARF_OFFSET_SIZE,
10643                                    a->dw_attr_val.v.val_str->label,
10644                                    debug_str_section,
10645                                    "%s: \"%s\"", name, AT_string (a));
10646           else
10647             dw2_asm_output_nstring (AT_string (a), -1, "%s", name);
10648           break;
10649
10650         case dw_val_class_file:
10651           {
10652             int f = maybe_emit_file (a->dw_attr_val.v.val_file);
10653
10654             dw2_asm_output_data (constant_size (f), f, "%s (%s)", name,
10655                                  a->dw_attr_val.v.val_file->filename);
10656             break;
10657           }
10658
10659         case dw_val_class_data8:
10660           {
10661             int i;
10662
10663             for (i = 0; i < 8; i++)
10664               dw2_asm_output_data (1, a->dw_attr_val.v.val_data8[i],
10665                                    i == 0 ? "%s" : NULL, name);
10666             break;
10667           }
10668
10669         default:
10670           gcc_unreachable ();
10671         }
10672     }
10673
10674   FOR_EACH_CHILD (die, c, output_die (c));
10675
10676   /* Add null byte to terminate sibling list.  */
10677   if (die->die_child != NULL)
10678     dw2_asm_output_data (1, 0, "end of children of DIE 0x%lx",
10679                          (unsigned long) die->die_offset);
10680 }
10681
10682 /* Output the compilation unit that appears at the beginning of the
10683    .debug_info section, and precedes the DIE descriptions.  */
10684
10685 static void
10686 output_compilation_unit_header (void)
10687 {
10688   int ver = dwarf_version;
10689
10690   /* Don't mark the output as DWARF-4 until we make full use of the
10691      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
10692      selects only a few extensions from the DWARF-4 spec.  */
10693   if (ver > 3)
10694     ver = 3;
10695   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10696     dw2_asm_output_data (4, 0xffffffff,
10697       "Initial length escape value indicating 64-bit DWARF extension");
10698   dw2_asm_output_data (DWARF_OFFSET_SIZE,
10699                        next_die_offset - DWARF_INITIAL_LENGTH_SIZE,
10700                        "Length of Compilation Unit Info");
10701   dw2_asm_output_data (2, ver, "DWARF version number");
10702   dw2_asm_output_offset (DWARF_OFFSET_SIZE, abbrev_section_label,
10703                          debug_abbrev_section,
10704                          "Offset Into Abbrev. Section");
10705   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
10706 }
10707
10708 /* Output the compilation unit DIE and its children.  */
10709
10710 static void
10711 output_comp_unit (dw_die_ref die, int output_if_empty)
10712 {
10713   const char *secname;
10714   char *oldsym, *tmp;
10715
10716   /* Unless we are outputting main CU, we may throw away empty ones.  */
10717   if (!output_if_empty && die->die_child == NULL)
10718     return;
10719
10720   /* Even if there are no children of this DIE, we must output the information
10721      about the compilation unit.  Otherwise, on an empty translation unit, we
10722      will generate a present, but empty, .debug_info section.  IRIX 6.5 `nm'
10723      will then complain when examining the file.  First mark all the DIEs in
10724      this CU so we know which get local refs.  */
10725   mark_dies (die);
10726
10727   build_abbrev_table (die);
10728
10729   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10730   next_die_offset = DWARF_COMPILE_UNIT_HEADER_SIZE;
10731   calc_die_sizes (die);
10732
10733   oldsym = die->die_id.die_symbol;
10734   if (oldsym)
10735     {
10736       tmp = XALLOCAVEC (char, strlen (oldsym) + 24);
10737
10738       sprintf (tmp, ".gnu.linkonce.wi.%s", oldsym);
10739       secname = tmp;
10740       die->die_id.die_symbol = NULL;
10741       switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10742     }
10743   else
10744     switch_to_section (debug_info_section);
10745
10746   /* Output debugging information.  */
10747   output_compilation_unit_header ();
10748   output_die (die);
10749
10750   /* Leave the marks on the main CU, so we can check them in
10751      output_pubnames.  */
10752   if (oldsym)
10753     {
10754       unmark_dies (die);
10755       die->die_id.die_symbol = oldsym;
10756     }
10757 }
10758
10759 /* Output a comdat type unit DIE and its children.  */
10760
10761 static void
10762 output_comdat_type_unit (comdat_type_node *node)
10763 {
10764   const char *secname;
10765   char *tmp;
10766   int i;
10767 #if defined (OBJECT_FORMAT_ELF)
10768   tree comdat_key;
10769 #endif
10770
10771   /* First mark all the DIEs in this CU so we know which get local refs.  */
10772   mark_dies (node->root_die);
10773
10774   build_abbrev_table (node->root_die);
10775
10776   /* Initialize the beginning DIE offset - and calculate sizes/offsets.  */
10777   next_die_offset = DWARF_COMDAT_TYPE_UNIT_HEADER_SIZE;
10778   calc_die_sizes (node->root_die);
10779
10780 #if defined (OBJECT_FORMAT_ELF)
10781   secname = ".debug_types";
10782   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10783   sprintf (tmp, "wt.");
10784   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10785     sprintf (tmp + 3 + i * 2, "%02x", node->signature[i] & 0xff);
10786   comdat_key = get_identifier (tmp);
10787   targetm.asm_out.named_section (secname,
10788                                  SECTION_DEBUG | SECTION_LINKONCE,
10789                                  comdat_key);
10790 #else
10791   tmp = XALLOCAVEC (char, 18 + DWARF_TYPE_SIGNATURE_SIZE * 2);
10792   sprintf (tmp, ".gnu.linkonce.wt.");
10793   for (i = 0; i < DWARF_TYPE_SIGNATURE_SIZE; i++)
10794     sprintf (tmp + 17 + i * 2, "%02x", node->signature[i] & 0xff);
10795   secname = tmp;
10796   switch_to_section (get_section (secname, SECTION_DEBUG, NULL));
10797 #endif
10798
10799   /* Output debugging information.  */
10800   output_compilation_unit_header ();
10801   output_signature (node->signature, "Type Signature");
10802   dw2_asm_output_data (DWARF_OFFSET_SIZE, node->type_die->die_offset,
10803                        "Offset to Type DIE");
10804   output_die (node->root_die);
10805
10806   unmark_dies (node->root_die);
10807 }
10808
10809 /* Return the DWARF2/3 pubname associated with a decl.  */
10810
10811 static const char *
10812 dwarf2_name (tree decl, int scope)
10813 {
10814   return lang_hooks.dwarf_name (decl, scope ? 1 : 0);
10815 }
10816
10817 /* Add a new entry to .debug_pubnames if appropriate.  */
10818
10819 static void
10820 add_pubname_string (const char *str, dw_die_ref die)
10821 {
10822   pubname_entry e;
10823
10824   e.die = die;
10825   e.name = xstrdup (str);
10826   VEC_safe_push (pubname_entry, gc, pubname_table, &e);
10827 }
10828
10829 static void
10830 add_pubname (tree decl, dw_die_ref die)
10831 {
10832   if (TREE_PUBLIC (decl))
10833     {
10834       const char *name = dwarf2_name (decl, 1);
10835       if (name)
10836         add_pubname_string (name, die);
10837     }
10838 }
10839
10840 /* Add a new entry to .debug_pubtypes if appropriate.  */
10841
10842 static void
10843 add_pubtype (tree decl, dw_die_ref die)
10844 {
10845   pubname_entry e;
10846
10847   e.name = NULL;
10848   if ((TREE_PUBLIC (decl)
10849        || die->die_parent == comp_unit_die)
10850       && (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
10851     {
10852       e.die = die;
10853       if (TYPE_P (decl))
10854         {
10855           if (TYPE_NAME (decl))
10856             {
10857               if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
10858                 e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
10859               else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
10860                        && DECL_NAME (TYPE_NAME (decl)))
10861                 e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
10862               else
10863                e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
10864             }
10865         }
10866       else
10867         {
10868           e.name = dwarf2_name (decl, 1);
10869           if (e.name)
10870             e.name = xstrdup (e.name);
10871         }
10872
10873       /* If we don't have a name for the type, there's no point in adding
10874          it to the table.  */
10875       if (e.name && e.name[0] != '\0')
10876         VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
10877     }
10878 }
10879
10880 /* Output the public names table used to speed up access to externally
10881    visible names; or the public types table used to find type definitions.  */
10882
10883 static void
10884 output_pubnames (VEC (pubname_entry, gc) * names)
10885 {
10886   unsigned i;
10887   unsigned long pubnames_length = size_of_pubnames (names);
10888   pubname_ref pub;
10889
10890   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10891     dw2_asm_output_data (4, 0xffffffff,
10892       "Initial length escape value indicating 64-bit DWARF extension");
10893   if (names == pubname_table)
10894     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10895                          "Length of Public Names Info");
10896   else
10897     dw2_asm_output_data (DWARF_OFFSET_SIZE, pubnames_length,
10898                          "Length of Public Type Names Info");
10899   /* Version number for pubnames/pubtypes is still 2, even in DWARF3.  */
10900   dw2_asm_output_data (2, 2, "DWARF Version");
10901   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10902                          debug_info_section,
10903                          "Offset of Compilation Unit Info");
10904   dw2_asm_output_data (DWARF_OFFSET_SIZE, next_die_offset,
10905                        "Compilation Unit Length");
10906
10907   for (i = 0; VEC_iterate (pubname_entry, names, i, pub); i++)
10908     {
10909       /* We shouldn't see pubnames for DIEs outside of the main CU.  */
10910       if (names == pubname_table)
10911         gcc_assert (pub->die->die_mark);
10912
10913       if (names != pubtype_table
10914           || pub->die->die_offset != 0
10915           || !flag_eliminate_unused_debug_types)
10916         {
10917           dw2_asm_output_data (DWARF_OFFSET_SIZE, pub->die->die_offset,
10918                                "DIE offset");
10919
10920           dw2_asm_output_nstring (pub->name, -1, "external name");
10921         }
10922     }
10923
10924   dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
10925 }
10926
10927 /* Add a new entry to .debug_aranges if appropriate.  */
10928
10929 static void
10930 add_arange (tree decl, dw_die_ref die)
10931 {
10932   if (! DECL_SECTION_NAME (decl))
10933     return;
10934
10935   if (arange_table_in_use == arange_table_allocated)
10936     {
10937       arange_table_allocated += ARANGE_TABLE_INCREMENT;
10938       arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
10939                                     arange_table_allocated);
10940       memset (arange_table + arange_table_in_use, 0,
10941               ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
10942     }
10943
10944   arange_table[arange_table_in_use++] = die;
10945 }
10946
10947 /* Output the information that goes into the .debug_aranges table.
10948    Namely, define the beginning and ending address range of the
10949    text section generated for this compilation unit.  */
10950
10951 static void
10952 output_aranges (void)
10953 {
10954   unsigned i;
10955   unsigned long aranges_length = size_of_aranges ();
10956
10957   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
10958     dw2_asm_output_data (4, 0xffffffff,
10959       "Initial length escape value indicating 64-bit DWARF extension");
10960   dw2_asm_output_data (DWARF_OFFSET_SIZE, aranges_length,
10961                        "Length of Address Ranges Info");
10962   /* Version number for aranges is still 2, even in DWARF3.  */
10963   dw2_asm_output_data (2, 2, "DWARF Version");
10964   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
10965                          debug_info_section,
10966                          "Offset of Compilation Unit Info");
10967   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Size of Address");
10968   dw2_asm_output_data (1, 0, "Size of Segment Descriptor");
10969
10970   /* We need to align to twice the pointer size here.  */
10971   if (DWARF_ARANGES_PAD_SIZE)
10972     {
10973       /* Pad using a 2 byte words so that padding is correct for any
10974          pointer size.  */
10975       dw2_asm_output_data (2, 0, "Pad to %d byte boundary",
10976                            2 * DWARF2_ADDR_SIZE);
10977       for (i = 2; i < (unsigned) DWARF_ARANGES_PAD_SIZE; i += 2)
10978         dw2_asm_output_data (2, 0, NULL);
10979     }
10980
10981   /* It is necessary not to output these entries if the sections were
10982      not used; if the sections were not used, the length will be 0 and
10983      the address may end up as 0 if the section is discarded by ld
10984      --gc-sections, leaving an invalid (0, 0) entry that can be
10985      confused with the terminator.  */
10986   if (text_section_used)
10987     {
10988       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_section_label, "Address");
10989       dw2_asm_output_delta (DWARF2_ADDR_SIZE, text_end_label,
10990                             text_section_label, "Length");
10991     }
10992   if (cold_text_section_used)
10993     {
10994       dw2_asm_output_addr (DWARF2_ADDR_SIZE, cold_text_section_label,
10995                            "Address");
10996       dw2_asm_output_delta (DWARF2_ADDR_SIZE, cold_end_label,
10997                             cold_text_section_label, "Length");
10998     }
10999
11000   for (i = 0; i < arange_table_in_use; i++)
11001     {
11002       dw_die_ref die = arange_table[i];
11003
11004       /* We shouldn't see aranges for DIEs outside of the main CU.  */
11005       gcc_assert (die->die_mark);
11006
11007       if (die->die_tag == DW_TAG_subprogram)
11008         {
11009           dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
11010                                "Address");
11011           dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
11012                                 get_AT_low_pc (die), "Length");
11013         }
11014       else
11015         {
11016           /* A static variable; extract the symbol from DW_AT_location.
11017              Note that this code isn't currently hit, as we only emit
11018              aranges for functions (jason 9/23/99).  */
11019           dw_attr_ref a = get_AT (die, DW_AT_location);
11020           dw_loc_descr_ref loc;
11021
11022           gcc_assert (a && AT_class (a) == dw_val_class_loc);
11023
11024           loc = AT_loc (a);
11025           gcc_assert (loc->dw_loc_opc == DW_OP_addr);
11026
11027           dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
11028                                    loc->dw_loc_oprnd1.v.val_addr, "Address");
11029           dw2_asm_output_data (DWARF2_ADDR_SIZE,
11030                                get_AT_unsigned (die, DW_AT_byte_size),
11031                                "Length");
11032         }
11033     }
11034
11035   /* Output the terminator words.  */
11036   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11037   dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11038 }
11039
11040 /* Add a new entry to .debug_ranges.  Return the offset at which it
11041    was placed.  */
11042
11043 static unsigned int
11044 add_ranges_num (int num)
11045 {
11046   unsigned int in_use = ranges_table_in_use;
11047
11048   if (in_use == ranges_table_allocated)
11049     {
11050       ranges_table_allocated += RANGES_TABLE_INCREMENT;
11051       ranges_table = GGC_RESIZEVEC (struct dw_ranges_struct, ranges_table,
11052                                     ranges_table_allocated);
11053       memset (ranges_table + ranges_table_in_use, 0,
11054               RANGES_TABLE_INCREMENT * sizeof (struct dw_ranges_struct));
11055     }
11056
11057   ranges_table[in_use].num = num;
11058   ranges_table_in_use = in_use + 1;
11059
11060   return in_use * 2 * DWARF2_ADDR_SIZE;
11061 }
11062
11063 /* Add a new entry to .debug_ranges corresponding to a block, or a
11064    range terminator if BLOCK is NULL.  */
11065
11066 static unsigned int
11067 add_ranges (const_tree block)
11068 {
11069   return add_ranges_num (block ? BLOCK_NUMBER (block) : 0);
11070 }
11071
11072 /* Add a new entry to .debug_ranges corresponding to a pair of
11073    labels.  */
11074
11075 static void
11076 add_ranges_by_labels (dw_die_ref die, const char *begin, const char *end,
11077                       bool *added)
11078 {
11079   unsigned int in_use = ranges_by_label_in_use;
11080   unsigned int offset;
11081
11082   if (in_use == ranges_by_label_allocated)
11083     {
11084       ranges_by_label_allocated += RANGES_TABLE_INCREMENT;
11085       ranges_by_label = GGC_RESIZEVEC (struct dw_ranges_by_label_struct,
11086                                        ranges_by_label,
11087                                        ranges_by_label_allocated);
11088       memset (ranges_by_label + ranges_by_label_in_use, 0,
11089               RANGES_TABLE_INCREMENT
11090               * sizeof (struct dw_ranges_by_label_struct));
11091     }
11092
11093   ranges_by_label[in_use].begin = begin;
11094   ranges_by_label[in_use].end = end;
11095   ranges_by_label_in_use = in_use + 1;
11096
11097   offset = add_ranges_num (-(int)in_use - 1);
11098   if (!*added)
11099     {
11100       add_AT_range_list (die, DW_AT_ranges, offset);
11101       *added = true;
11102     }
11103 }
11104
11105 static void
11106 output_ranges (void)
11107 {
11108   unsigned i;
11109   static const char *const start_fmt = "Offset 0x%x";
11110   const char *fmt = start_fmt;
11111
11112   for (i = 0; i < ranges_table_in_use; i++)
11113     {
11114       int block_num = ranges_table[i].num;
11115
11116       if (block_num > 0)
11117         {
11118           char blabel[MAX_ARTIFICIAL_LABEL_BYTES];
11119           char elabel[MAX_ARTIFICIAL_LABEL_BYTES];
11120
11121           ASM_GENERATE_INTERNAL_LABEL (blabel, BLOCK_BEGIN_LABEL, block_num);
11122           ASM_GENERATE_INTERNAL_LABEL (elabel, BLOCK_END_LABEL, block_num);
11123
11124           /* If all code is in the text section, then the compilation
11125              unit base address defaults to DW_AT_low_pc, which is the
11126              base of the text section.  */
11127           if (!have_multiple_function_sections)
11128             {
11129               dw2_asm_output_delta (DWARF2_ADDR_SIZE, blabel,
11130                                     text_section_label,
11131                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11132               dw2_asm_output_delta (DWARF2_ADDR_SIZE, elabel,
11133                                     text_section_label, NULL);
11134             }
11135
11136           /* Otherwise, the compilation unit base address is zero,
11137              which allows us to use absolute addresses, and not worry
11138              about whether the target supports cross-section
11139              arithmetic.  */
11140           else
11141             {
11142               dw2_asm_output_addr (DWARF2_ADDR_SIZE, blabel,
11143                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11144               dw2_asm_output_addr (DWARF2_ADDR_SIZE, elabel, NULL);
11145             }
11146
11147           fmt = NULL;
11148         }
11149
11150       /* Negative block_num stands for an index into ranges_by_label.  */
11151       else if (block_num < 0)
11152         {
11153           int lab_idx = - block_num - 1;
11154
11155           if (!have_multiple_function_sections)
11156             {
11157               gcc_unreachable ();
11158 #if 0
11159               /* If we ever use add_ranges_by_labels () for a single
11160                  function section, all we have to do is to take out
11161                  the #if 0 above.  */
11162               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11163                                     ranges_by_label[lab_idx].begin,
11164                                     text_section_label,
11165                                     fmt, i * 2 * DWARF2_ADDR_SIZE);
11166               dw2_asm_output_delta (DWARF2_ADDR_SIZE,
11167                                     ranges_by_label[lab_idx].end,
11168                                     text_section_label, NULL);
11169 #endif
11170             }
11171           else
11172             {
11173               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11174                                    ranges_by_label[lab_idx].begin,
11175                                    fmt, i * 2 * DWARF2_ADDR_SIZE);
11176               dw2_asm_output_addr (DWARF2_ADDR_SIZE,
11177                                    ranges_by_label[lab_idx].end,
11178                                    NULL);
11179             }
11180         }
11181       else
11182         {
11183           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11184           dw2_asm_output_data (DWARF2_ADDR_SIZE, 0, NULL);
11185           fmt = start_fmt;
11186         }
11187     }
11188 }
11189
11190 /* Data structure containing information about input files.  */
11191 struct file_info
11192 {
11193   const char *path;     /* Complete file name.  */
11194   const char *fname;    /* File name part.  */
11195   int length;           /* Length of entire string.  */
11196   struct dwarf_file_data * file_idx;    /* Index in input file table.  */
11197   int dir_idx;          /* Index in directory table.  */
11198 };
11199
11200 /* Data structure containing information about directories with source
11201    files.  */
11202 struct dir_info
11203 {
11204   const char *path;     /* Path including directory name.  */
11205   int length;           /* Path length.  */
11206   int prefix;           /* Index of directory entry which is a prefix.  */
11207   int count;            /* Number of files in this directory.  */
11208   int dir_idx;          /* Index of directory used as base.  */
11209 };
11210
11211 /* Callback function for file_info comparison.  We sort by looking at
11212    the directories in the path.  */
11213
11214 static int
11215 file_info_cmp (const void *p1, const void *p2)
11216 {
11217   const struct file_info *const s1 = (const struct file_info *) p1;
11218   const struct file_info *const s2 = (const struct file_info *) p2;
11219   const unsigned char *cp1;
11220   const unsigned char *cp2;
11221
11222   /* Take care of file names without directories.  We need to make sure that
11223      we return consistent values to qsort since some will get confused if
11224      we return the same value when identical operands are passed in opposite
11225      orders.  So if neither has a directory, return 0 and otherwise return
11226      1 or -1 depending on which one has the directory.  */
11227   if ((s1->path == s1->fname || s2->path == s2->fname))
11228     return (s2->path == s2->fname) - (s1->path == s1->fname);
11229
11230   cp1 = (const unsigned char *) s1->path;
11231   cp2 = (const unsigned char *) s2->path;
11232
11233   while (1)
11234     {
11235       ++cp1;
11236       ++cp2;
11237       /* Reached the end of the first path?  If so, handle like above.  */
11238       if ((cp1 == (const unsigned char *) s1->fname)
11239           || (cp2 == (const unsigned char *) s2->fname))
11240         return ((cp2 == (const unsigned char *) s2->fname)
11241                 - (cp1 == (const unsigned char *) s1->fname));
11242
11243       /* Character of current path component the same?  */
11244       else if (*cp1 != *cp2)
11245         return *cp1 - *cp2;
11246     }
11247 }
11248
11249 struct file_name_acquire_data
11250 {
11251   struct file_info *files;
11252   int used_files;
11253   int max_files;
11254 };
11255
11256 /* Traversal function for the hash table.  */
11257
11258 static int
11259 file_name_acquire (void ** slot, void *data)
11260 {
11261   struct file_name_acquire_data *fnad = (struct file_name_acquire_data *) data;
11262   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
11263   struct file_info *fi;
11264   const char *f;
11265
11266   gcc_assert (fnad->max_files >= d->emitted_number);
11267
11268   if (! d->emitted_number)
11269     return 1;
11270
11271   gcc_assert (fnad->max_files != fnad->used_files);
11272
11273   fi = fnad->files + fnad->used_files++;
11274
11275   /* Skip all leading "./".  */
11276   f = d->filename;
11277   while (f[0] == '.' && IS_DIR_SEPARATOR (f[1]))
11278     f += 2;
11279
11280   /* Create a new array entry.  */
11281   fi->path = f;
11282   fi->length = strlen (f);
11283   fi->file_idx = d;
11284
11285   /* Search for the file name part.  */
11286   f = strrchr (f, DIR_SEPARATOR);
11287 #if defined (DIR_SEPARATOR_2)
11288   {
11289     char *g = strrchr (fi->path, DIR_SEPARATOR_2);
11290
11291     if (g != NULL)
11292       {
11293         if (f == NULL || f < g)
11294           f = g;
11295       }
11296   }
11297 #endif
11298
11299   fi->fname = f == NULL ? fi->path : f + 1;
11300   return 1;
11301 }
11302
11303 /* Output the directory table and the file name table.  We try to minimize
11304    the total amount of memory needed.  A heuristic is used to avoid large
11305    slowdowns with many input files.  */
11306
11307 static void
11308 output_file_names (void)
11309 {
11310   struct file_name_acquire_data fnad;
11311   int numfiles;
11312   struct file_info *files;
11313   struct dir_info *dirs;
11314   int *saved;
11315   int *savehere;
11316   int *backmap;
11317   int ndirs;
11318   int idx_offset;
11319   int i;
11320
11321   if (!last_emitted_file)
11322     {
11323       dw2_asm_output_data (1, 0, "End directory table");
11324       dw2_asm_output_data (1, 0, "End file name table");
11325       return;
11326     }
11327
11328   numfiles = last_emitted_file->emitted_number;
11329
11330   /* Allocate the various arrays we need.  */
11331   files = XALLOCAVEC (struct file_info, numfiles);
11332   dirs = XALLOCAVEC (struct dir_info, numfiles);
11333
11334   fnad.files = files;
11335   fnad.used_files = 0;
11336   fnad.max_files = numfiles;
11337   htab_traverse (file_table, file_name_acquire, &fnad);
11338   gcc_assert (fnad.used_files == fnad.max_files);
11339
11340   qsort (files, numfiles, sizeof (files[0]), file_info_cmp);
11341
11342   /* Find all the different directories used.  */
11343   dirs[0].path = files[0].path;
11344   dirs[0].length = files[0].fname - files[0].path;
11345   dirs[0].prefix = -1;
11346   dirs[0].count = 1;
11347   dirs[0].dir_idx = 0;
11348   files[0].dir_idx = 0;
11349   ndirs = 1;
11350
11351   for (i = 1; i < numfiles; i++)
11352     if (files[i].fname - files[i].path == dirs[ndirs - 1].length
11353         && memcmp (dirs[ndirs - 1].path, files[i].path,
11354                    dirs[ndirs - 1].length) == 0)
11355       {
11356         /* Same directory as last entry.  */
11357         files[i].dir_idx = ndirs - 1;
11358         ++dirs[ndirs - 1].count;
11359       }
11360     else
11361       {
11362         int j;
11363
11364         /* This is a new directory.  */
11365         dirs[ndirs].path = files[i].path;
11366         dirs[ndirs].length = files[i].fname - files[i].path;
11367         dirs[ndirs].count = 1;
11368         dirs[ndirs].dir_idx = ndirs;
11369         files[i].dir_idx = ndirs;
11370
11371         /* Search for a prefix.  */
11372         dirs[ndirs].prefix = -1;
11373         for (j = 0; j < ndirs; j++)
11374           if (dirs[j].length < dirs[ndirs].length
11375               && dirs[j].length > 1
11376               && (dirs[ndirs].prefix == -1
11377                   || dirs[j].length > dirs[dirs[ndirs].prefix].length)
11378               && memcmp (dirs[j].path, dirs[ndirs].path, dirs[j].length) == 0)
11379             dirs[ndirs].prefix = j;
11380
11381         ++ndirs;
11382       }
11383
11384   /* Now to the actual work.  We have to find a subset of the directories which
11385      allow expressing the file name using references to the directory table
11386      with the least amount of characters.  We do not do an exhaustive search
11387      where we would have to check out every combination of every single
11388      possible prefix.  Instead we use a heuristic which provides nearly optimal
11389      results in most cases and never is much off.  */
11390   saved = XALLOCAVEC (int, ndirs);
11391   savehere = XALLOCAVEC (int, ndirs);
11392
11393   memset (saved, '\0', ndirs * sizeof (saved[0]));
11394   for (i = 0; i < ndirs; i++)
11395     {
11396       int j;
11397       int total;
11398
11399       /* We can always save some space for the current directory.  But this
11400          does not mean it will be enough to justify adding the directory.  */
11401       savehere[i] = dirs[i].length;
11402       total = (savehere[i] - saved[i]) * dirs[i].count;
11403
11404       for (j = i + 1; j < ndirs; j++)
11405         {
11406           savehere[j] = 0;
11407           if (saved[j] < dirs[i].length)
11408             {
11409               /* Determine whether the dirs[i] path is a prefix of the
11410                  dirs[j] path.  */
11411               int k;
11412
11413               k = dirs[j].prefix;
11414               while (k != -1 && k != (int) i)
11415                 k = dirs[k].prefix;
11416
11417               if (k == (int) i)
11418                 {
11419                   /* Yes it is.  We can possibly save some memory by
11420                      writing the filenames in dirs[j] relative to
11421                      dirs[i].  */
11422                   savehere[j] = dirs[i].length;
11423                   total += (savehere[j] - saved[j]) * dirs[j].count;
11424                 }
11425             }
11426         }
11427
11428       /* Check whether we can save enough to justify adding the dirs[i]
11429          directory.  */
11430       if (total > dirs[i].length + 1)
11431         {
11432           /* It's worthwhile adding.  */
11433           for (j = i; j < ndirs; j++)
11434             if (savehere[j] > 0)
11435               {
11436                 /* Remember how much we saved for this directory so far.  */
11437                 saved[j] = savehere[j];
11438
11439                 /* Remember the prefix directory.  */
11440                 dirs[j].dir_idx = i;
11441               }
11442         }
11443     }
11444
11445   /* Emit the directory name table.  */
11446   idx_offset = dirs[0].length > 0 ? 1 : 0;
11447   for (i = 1 - idx_offset; i < ndirs; i++)
11448     dw2_asm_output_nstring (dirs[i].path,
11449                             dirs[i].length
11450                              - !DWARF2_DIR_SHOULD_END_WITH_SEPARATOR,
11451                             "Directory Entry: 0x%x", i + idx_offset);
11452
11453   dw2_asm_output_data (1, 0, "End directory table");
11454
11455   /* We have to emit them in the order of emitted_number since that's
11456      used in the debug info generation.  To do this efficiently we
11457      generate a back-mapping of the indices first.  */
11458   backmap = XALLOCAVEC (int, numfiles);
11459   for (i = 0; i < numfiles; i++)
11460     backmap[files[i].file_idx->emitted_number - 1] = i;
11461
11462   /* Now write all the file names.  */
11463   for (i = 0; i < numfiles; i++)
11464     {
11465       int file_idx = backmap[i];
11466       int dir_idx = dirs[files[file_idx].dir_idx].dir_idx;
11467
11468 #ifdef VMS_DEBUGGING_INFO
11469 #define MAX_VMS_VERSION_LEN 6 /* ";32768" */
11470
11471       /* Setting these fields can lead to debugger miscomparisons,
11472          but VMS Debug requires them to be set correctly.  */
11473
11474       int ver;
11475       long long cdt;
11476       long siz;
11477       int maxfilelen = strlen (files[file_idx].path)
11478                                + dirs[dir_idx].length
11479                                + MAX_VMS_VERSION_LEN + 1;
11480       char *filebuf = XALLOCAVEC (char, maxfilelen);
11481
11482       vms_file_stats_name (files[file_idx].path, 0, 0, 0, &ver);
11483       snprintf (filebuf, maxfilelen, "%s;%d",
11484                 files[file_idx].path + dirs[dir_idx].length, ver);
11485
11486       dw2_asm_output_nstring
11487         (filebuf, -1, "File Entry: 0x%x", (unsigned) i + 1);
11488
11489       /* Include directory index.  */
11490       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11491
11492       /* Modification time.  */
11493       dw2_asm_output_data_uleb128
11494         ((vms_file_stats_name (files[file_idx].path, &cdt, 0, 0, 0) == 0)
11495           ? cdt : 0,
11496          NULL);
11497
11498       /* File length in bytes.  */
11499       dw2_asm_output_data_uleb128
11500         ((vms_file_stats_name (files[file_idx].path, 0, &siz, 0, 0) == 0)
11501           ? siz : 0,
11502          NULL);
11503 #else
11504       dw2_asm_output_nstring (files[file_idx].path + dirs[dir_idx].length, -1,
11505                               "File Entry: 0x%x", (unsigned) i + 1);
11506
11507       /* Include directory index.  */
11508       dw2_asm_output_data_uleb128 (dir_idx + idx_offset, NULL);
11509
11510       /* Modification time.  */
11511       dw2_asm_output_data_uleb128 (0, NULL);
11512
11513       /* File length in bytes.  */
11514       dw2_asm_output_data_uleb128 (0, NULL);
11515 #endif
11516     }
11517
11518   dw2_asm_output_data (1, 0, "End file name table");
11519 }
11520
11521
11522 /* Output the source line number correspondence information.  This
11523    information goes into the .debug_line section.  */
11524
11525 static void
11526 output_line_info (void)
11527 {
11528   char l1[20], l2[20], p1[20], p2[20];
11529   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11530   char prev_line_label[MAX_ARTIFICIAL_LABEL_BYTES];
11531   unsigned opc;
11532   unsigned n_op_args;
11533   unsigned long lt_index;
11534   unsigned long current_line;
11535   long line_offset;
11536   long line_delta;
11537   unsigned long current_file;
11538   unsigned long function;
11539   int ver = dwarf_version;
11540
11541   /* Don't mark the output as DWARF-4 until we make full use of the
11542      version 4 extensions, and gdb supports them.  For now, -gdwarf-4
11543      selects only a few extensions from the DWARF-4 spec.  */
11544   if (ver > 3)
11545     ver = 3;
11546
11547   ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0);
11548   ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0);
11549   ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0);
11550   ASM_GENERATE_INTERNAL_LABEL (p2, LN_PROLOG_END_LABEL, 0);
11551
11552   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11553     dw2_asm_output_data (4, 0xffffffff,
11554       "Initial length escape value indicating 64-bit DWARF extension");
11555   dw2_asm_output_delta (DWARF_OFFSET_SIZE, l2, l1,
11556                         "Length of Source Line Info");
11557   ASM_OUTPUT_LABEL (asm_out_file, l1);
11558
11559   dw2_asm_output_data (2, ver, "DWARF Version");
11560   dw2_asm_output_delta (DWARF_OFFSET_SIZE, p2, p1, "Prolog Length");
11561   ASM_OUTPUT_LABEL (asm_out_file, p1);
11562
11563   /* Define the architecture-dependent minimum instruction length (in
11564    bytes).  In this implementation of DWARF, this field is used for
11565    information purposes only.  Since GCC generates assembly language,
11566    we have no a priori knowledge of how many instruction bytes are
11567    generated for each source line, and therefore can use only the
11568    DW_LNE_set_address and DW_LNS_fixed_advance_pc line information
11569    commands.  Accordingly, we fix this as `1', which is "correct
11570    enough" for all architectures, and don't let the target override.  */
11571   dw2_asm_output_data (1, 1,
11572                        "Minimum Instruction Length");
11573
11574   dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START,
11575                        "Default is_stmt_start flag");
11576   dw2_asm_output_data (1, DWARF_LINE_BASE,
11577                        "Line Base Value (Special Opcodes)");
11578   dw2_asm_output_data (1, DWARF_LINE_RANGE,
11579                        "Line Range Value (Special Opcodes)");
11580   dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE,
11581                        "Special Opcode Base");
11582
11583   for (opc = 1; opc < DWARF_LINE_OPCODE_BASE; opc++)
11584     {
11585       switch (opc)
11586         {
11587         case DW_LNS_advance_pc:
11588         case DW_LNS_advance_line:
11589         case DW_LNS_set_file:
11590         case DW_LNS_set_column:
11591         case DW_LNS_fixed_advance_pc:
11592           n_op_args = 1;
11593           break;
11594         default:
11595           n_op_args = 0;
11596           break;
11597         }
11598
11599       dw2_asm_output_data (1, n_op_args, "opcode: 0x%x has %d args",
11600                            opc, n_op_args);
11601     }
11602
11603   /* Write out the information about the files we use.  */
11604   output_file_names ();
11605   ASM_OUTPUT_LABEL (asm_out_file, p2);
11606
11607   /* We used to set the address register to the first location in the text
11608      section here, but that didn't accomplish anything since we already
11609      have a line note for the opening brace of the first function.  */
11610
11611   /* Generate the line number to PC correspondence table, encoded as
11612      a series of state machine operations.  */
11613   current_file = 1;
11614   current_line = 1;
11615
11616   if (cfun && in_cold_section_p)
11617     strcpy (prev_line_label, crtl->subsections.cold_section_label);
11618   else
11619     strcpy (prev_line_label, text_section_label);
11620   for (lt_index = 1; lt_index < line_info_table_in_use; ++lt_index)
11621     {
11622       dw_line_info_ref line_info = &line_info_table[lt_index];
11623
11624 #if 0
11625       /* Disable this optimization for now; GDB wants to see two line notes
11626          at the beginning of a function so it can find the end of the
11627          prologue.  */
11628
11629       /* Don't emit anything for redundant notes.  Just updating the
11630          address doesn't accomplish anything, because we already assume
11631          that anything after the last address is this line.  */
11632       if (line_info->dw_line_num == current_line
11633           && line_info->dw_file_num == current_file)
11634         continue;
11635 #endif
11636
11637       /* Emit debug info for the address of the current line.
11638
11639          Unfortunately, we have little choice here currently, and must always
11640          use the most general form.  GCC does not know the address delta
11641          itself, so we can't use DW_LNS_advance_pc.  Many ports do have length
11642          attributes which will give an upper bound on the address range.  We
11643          could perhaps use length attributes to determine when it is safe to
11644          use DW_LNS_fixed_advance_pc.  */
11645
11646       ASM_GENERATE_INTERNAL_LABEL (line_label, LINE_CODE_LABEL, lt_index);
11647       if (0)
11648         {
11649           /* This can handle deltas up to 0xffff.  This takes 3 bytes.  */
11650           dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11651                                "DW_LNS_fixed_advance_pc");
11652           dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11653         }
11654       else
11655         {
11656           /* This can handle any delta.  This takes
11657              4+DWARF2_ADDR_SIZE bytes.  */
11658           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11659           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11660           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11661           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11662         }
11663
11664       strcpy (prev_line_label, line_label);
11665
11666       /* Emit debug info for the source file of the current line, if
11667          different from the previous line.  */
11668       if (line_info->dw_file_num != current_file)
11669         {
11670           current_file = line_info->dw_file_num;
11671           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11672           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11673         }
11674
11675       /* Emit debug info for the current line number, choosing the encoding
11676          that uses the least amount of space.  */
11677       if (line_info->dw_line_num != current_line)
11678         {
11679           line_offset = line_info->dw_line_num - current_line;
11680           line_delta = line_offset - DWARF_LINE_BASE;
11681           current_line = line_info->dw_line_num;
11682           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11683             /* This can handle deltas from -10 to 234, using the current
11684                definitions of DWARF_LINE_BASE and DWARF_LINE_RANGE.  This
11685                takes 1 byte.  */
11686             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11687                                  "line %lu", current_line);
11688           else
11689             {
11690               /* This can handle any delta.  This takes at least 4 bytes,
11691                  depending on the value being encoded.  */
11692               dw2_asm_output_data (1, DW_LNS_advance_line,
11693                                    "advance to line %lu", current_line);
11694               dw2_asm_output_data_sleb128 (line_offset, NULL);
11695               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11696             }
11697         }
11698       else
11699         /* We still need to start a new row, so output a copy insn.  */
11700         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11701     }
11702
11703   /* Emit debug info for the address of the end of the function.  */
11704   if (0)
11705     {
11706       dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11707                            "DW_LNS_fixed_advance_pc");
11708       dw2_asm_output_delta (2, text_end_label, prev_line_label, NULL);
11709     }
11710   else
11711     {
11712       dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11713       dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11714       dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11715       dw2_asm_output_addr (DWARF2_ADDR_SIZE, text_end_label, NULL);
11716     }
11717
11718   dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11719   dw2_asm_output_data_uleb128 (1, NULL);
11720   dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11721
11722   function = 0;
11723   current_file = 1;
11724   current_line = 1;
11725   for (lt_index = 0; lt_index < separate_line_info_table_in_use;)
11726     {
11727       dw_separate_line_info_ref line_info
11728         = &separate_line_info_table[lt_index];
11729
11730 #if 0
11731       /* Don't emit anything for redundant notes.  */
11732       if (line_info->dw_line_num == current_line
11733           && line_info->dw_file_num == current_file
11734           && line_info->function == function)
11735         goto cont;
11736 #endif
11737
11738       /* Emit debug info for the address of the current line.  If this is
11739          a new function, or the first line of a function, then we need
11740          to handle it differently.  */
11741       ASM_GENERATE_INTERNAL_LABEL (line_label, SEPARATE_LINE_CODE_LABEL,
11742                                    lt_index);
11743       if (function != line_info->function)
11744         {
11745           function = line_info->function;
11746
11747           /* Set the address register to the first line in the function.  */
11748           dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11749           dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11750           dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11751           dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11752         }
11753       else
11754         {
11755           /* ??? See the DW_LNS_advance_pc comment above.  */
11756           if (0)
11757             {
11758               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11759                                    "DW_LNS_fixed_advance_pc");
11760               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11761             }
11762           else
11763             {
11764               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11765               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11766               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11767               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11768             }
11769         }
11770
11771       strcpy (prev_line_label, line_label);
11772
11773       /* Emit debug info for the source file of the current line, if
11774          different from the previous line.  */
11775       if (line_info->dw_file_num != current_file)
11776         {
11777           current_file = line_info->dw_file_num;
11778           dw2_asm_output_data (1, DW_LNS_set_file, "DW_LNS_set_file");
11779           dw2_asm_output_data_uleb128 (current_file, "%lu", current_file);
11780         }
11781
11782       /* Emit debug info for the current line number, choosing the encoding
11783          that uses the least amount of space.  */
11784       if (line_info->dw_line_num != current_line)
11785         {
11786           line_offset = line_info->dw_line_num - current_line;
11787           line_delta = line_offset - DWARF_LINE_BASE;
11788           current_line = line_info->dw_line_num;
11789           if (line_delta >= 0 && line_delta < (DWARF_LINE_RANGE - 1))
11790             dw2_asm_output_data (1, DWARF_LINE_OPCODE_BASE + line_delta,
11791                                  "line %lu", current_line);
11792           else
11793             {
11794               dw2_asm_output_data (1, DW_LNS_advance_line,
11795                                    "advance to line %lu", current_line);
11796               dw2_asm_output_data_sleb128 (line_offset, NULL);
11797               dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11798             }
11799         }
11800       else
11801         dw2_asm_output_data (1, DW_LNS_copy, "DW_LNS_copy");
11802
11803 #if 0
11804     cont:
11805 #endif
11806
11807       lt_index++;
11808
11809       /* If we're done with a function, end its sequence.  */
11810       if (lt_index == separate_line_info_table_in_use
11811           || separate_line_info_table[lt_index].function != function)
11812         {
11813           current_file = 1;
11814           current_line = 1;
11815
11816           /* Emit debug info for the address of the end of the function.  */
11817           ASM_GENERATE_INTERNAL_LABEL (line_label, FUNC_END_LABEL, function);
11818           if (0)
11819             {
11820               dw2_asm_output_data (1, DW_LNS_fixed_advance_pc,
11821                                    "DW_LNS_fixed_advance_pc");
11822               dw2_asm_output_delta (2, line_label, prev_line_label, NULL);
11823             }
11824           else
11825             {
11826               dw2_asm_output_data (1, 0, "DW_LNE_set_address");
11827               dw2_asm_output_data_uleb128 (1 + DWARF2_ADDR_SIZE, NULL);
11828               dw2_asm_output_data (1, DW_LNE_set_address, NULL);
11829               dw2_asm_output_addr (DWARF2_ADDR_SIZE, line_label, NULL);
11830             }
11831
11832           /* Output the marker for the end of this sequence.  */
11833           dw2_asm_output_data (1, 0, "DW_LNE_end_sequence");
11834           dw2_asm_output_data_uleb128 (1, NULL);
11835           dw2_asm_output_data (1, DW_LNE_end_sequence, NULL);
11836         }
11837     }
11838
11839   /* Output the marker for the end of the line number info.  */
11840   ASM_OUTPUT_LABEL (asm_out_file, l2);
11841 }
11842
11843 /* Return the size of the .debug_dcall table for the compilation unit.  */
11844
11845 static unsigned long
11846 size_of_dcall_table (void)
11847 {
11848   unsigned long size;
11849   unsigned int i;
11850   dcall_entry *p;
11851   tree last_poc_decl = NULL;
11852
11853   /* Header:  version + debug info section pointer + pointer size.  */
11854   size = 2 + DWARF_OFFSET_SIZE + 1;
11855
11856   /* Each entry:  code label + DIE offset.  */
11857   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11858     {
11859       gcc_assert (p->targ_die != NULL);
11860       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11861       if (p->poc_decl != last_poc_decl)
11862         {
11863           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11864           gcc_assert (poc_die);
11865           last_poc_decl = p->poc_decl;
11866           if (poc_die)
11867             size += (DWARF_OFFSET_SIZE
11868                      + size_of_uleb128 (poc_die->die_offset));
11869         }
11870       size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->targ_die->die_offset);
11871     }
11872
11873   return size;
11874 }
11875
11876 /* Output the direct call table used to disambiguate PC values when
11877    identical function have been merged.  */
11878
11879 static void
11880 output_dcall_table (void)
11881 {
11882   unsigned i;
11883   unsigned long dcall_length = size_of_dcall_table ();
11884   dcall_entry *p;
11885   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11886   tree last_poc_decl = NULL;
11887
11888   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11889     dw2_asm_output_data (4, 0xffffffff,
11890       "Initial length escape value indicating 64-bit DWARF extension");
11891   dw2_asm_output_data (DWARF_OFFSET_SIZE, dcall_length,
11892                        "Length of Direct Call Table");
11893   dw2_asm_output_data (2, 4, "Version number");
11894   dw2_asm_output_offset (DWARF_OFFSET_SIZE, debug_info_section_label,
11895                          debug_info_section,
11896                          "Offset of Compilation Unit Info");
11897   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11898
11899   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, p); i++)
11900     {
11901       /* Insert a "from" entry when the point-of-call DIE offset changes.  */
11902       if (p->poc_decl != last_poc_decl)
11903         {
11904           dw_die_ref poc_die = lookup_decl_die (p->poc_decl);
11905           last_poc_decl = p->poc_decl;
11906           if (poc_die)
11907             {
11908               dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, "New caller");
11909               dw2_asm_output_data_uleb128 (poc_die->die_offset,
11910                                            "Caller DIE offset");
11911             }
11912         }
11913       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11914       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11915       dw2_asm_output_data_uleb128 (p->targ_die->die_offset,
11916                                    "Callee DIE offset");
11917     }
11918 }
11919 \f
11920 /* Return the size of the .debug_vcall table for the compilation unit.  */
11921
11922 static unsigned long
11923 size_of_vcall_table (void)
11924 {
11925   unsigned long size;
11926   unsigned int i;
11927   vcall_entry *p;
11928
11929   /* Header:  version + pointer size.  */
11930   size = 2 + 1;
11931
11932   /* Each entry:  code label + vtable slot index.  */
11933   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11934     size += DWARF_OFFSET_SIZE + size_of_uleb128 (p->vtable_slot);
11935
11936   return size;
11937 }
11938
11939 /* Output the virtual call table used to disambiguate PC values when
11940    identical function have been merged.  */
11941
11942 static void
11943 output_vcall_table (void)
11944 {
11945   unsigned i;
11946   unsigned long vcall_length = size_of_vcall_table ();
11947   vcall_entry *p;
11948   char poc_label[MAX_ARTIFICIAL_LABEL_BYTES];
11949
11950   if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
11951     dw2_asm_output_data (4, 0xffffffff,
11952       "Initial length escape value indicating 64-bit DWARF extension");
11953   dw2_asm_output_data (DWARF_OFFSET_SIZE, vcall_length,
11954                        "Length of Virtual Call Table");
11955   dw2_asm_output_data (2, 4, "Version number");
11956   dw2_asm_output_data (1, DWARF2_ADDR_SIZE, "Pointer Size (in bytes)");
11957
11958   for (i = 0; VEC_iterate (vcall_entry, vcall_table, i, p); i++)
11959     {
11960       ASM_GENERATE_INTERNAL_LABEL (poc_label, "LPOC", p->poc_label_num);
11961       dw2_asm_output_addr (DWARF_OFFSET_SIZE, poc_label, "Point of call");
11962       dw2_asm_output_data_uleb128 (p->vtable_slot, "Vtable slot");
11963     }
11964 }
11965 \f
11966 /* Given a pointer to a tree node for some base type, return a pointer to
11967    a DIE that describes the given type.
11968
11969    This routine must only be called for GCC type nodes that correspond to
11970    Dwarf base (fundamental) types.  */
11971
11972 static dw_die_ref
11973 base_type_die (tree type)
11974 {
11975   dw_die_ref base_type_result;
11976   enum dwarf_type encoding;
11977
11978   if (TREE_CODE (type) == ERROR_MARK || TREE_CODE (type) == VOID_TYPE)
11979     return 0;
11980
11981   /* If this is a subtype that should not be emitted as a subrange type,
11982      use the base type.  See subrange_type_for_debug_p.  */
11983   if (TREE_CODE (type) == INTEGER_TYPE && TREE_TYPE (type) != NULL_TREE)
11984     type = TREE_TYPE (type);
11985
11986   switch (TREE_CODE (type))
11987     {
11988     case INTEGER_TYPE:
11989       if (TYPE_STRING_FLAG (type))
11990         {
11991           if (TYPE_UNSIGNED (type))
11992             encoding = DW_ATE_unsigned_char;
11993           else
11994             encoding = DW_ATE_signed_char;
11995         }
11996       else if (TYPE_UNSIGNED (type))
11997         encoding = DW_ATE_unsigned;
11998       else
11999         encoding = DW_ATE_signed;
12000       break;
12001
12002     case REAL_TYPE:
12003       if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
12004         {
12005           if (dwarf_version >= 3 || !dwarf_strict)
12006             encoding = DW_ATE_decimal_float;
12007           else
12008             encoding = DW_ATE_lo_user;
12009         }
12010       else
12011         encoding = DW_ATE_float;
12012       break;
12013
12014     case FIXED_POINT_TYPE:
12015       if (!(dwarf_version >= 3 || !dwarf_strict))
12016         encoding = DW_ATE_lo_user;
12017       else if (TYPE_UNSIGNED (type))
12018         encoding = DW_ATE_unsigned_fixed;
12019       else
12020         encoding = DW_ATE_signed_fixed;
12021       break;
12022
12023       /* Dwarf2 doesn't know anything about complex ints, so use
12024          a user defined type for it.  */
12025     case COMPLEX_TYPE:
12026       if (TREE_CODE (TREE_TYPE (type)) == REAL_TYPE)
12027         encoding = DW_ATE_complex_float;
12028       else
12029         encoding = DW_ATE_lo_user;
12030       break;
12031
12032     case BOOLEAN_TYPE:
12033       /* GNU FORTRAN/Ada/C++ BOOLEAN type.  */
12034       encoding = DW_ATE_boolean;
12035       break;
12036
12037     default:
12038       /* No other TREE_CODEs are Dwarf fundamental types.  */
12039       gcc_unreachable ();
12040     }
12041
12042   base_type_result = new_die (DW_TAG_base_type, comp_unit_die, type);
12043
12044   /* This probably indicates a bug.  */
12045   if (! TYPE_NAME (type))
12046     add_name_attribute (base_type_result, "__unknown__");
12047
12048   add_AT_unsigned (base_type_result, DW_AT_byte_size,
12049                    int_size_in_bytes (type));
12050   add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
12051
12052   return base_type_result;
12053 }
12054
12055 /* Given a pointer to an arbitrary ..._TYPE tree node, return nonzero if the
12056    given input type is a Dwarf "fundamental" type.  Otherwise return null.  */
12057
12058 static inline int
12059 is_base_type (tree type)
12060 {
12061   switch (TREE_CODE (type))
12062     {
12063     case ERROR_MARK:
12064     case VOID_TYPE:
12065     case INTEGER_TYPE:
12066     case REAL_TYPE:
12067     case FIXED_POINT_TYPE:
12068     case COMPLEX_TYPE:
12069     case BOOLEAN_TYPE:
12070       return 1;
12071
12072     case ARRAY_TYPE:
12073     case RECORD_TYPE:
12074     case UNION_TYPE:
12075     case QUAL_UNION_TYPE:
12076     case ENUMERAL_TYPE:
12077     case FUNCTION_TYPE:
12078     case METHOD_TYPE:
12079     case POINTER_TYPE:
12080     case REFERENCE_TYPE:
12081     case OFFSET_TYPE:
12082     case LANG_TYPE:
12083     case VECTOR_TYPE:
12084       return 0;
12085
12086     default:
12087       gcc_unreachable ();
12088     }
12089
12090   return 0;
12091 }
12092
12093 /* Given a pointer to a tree node, assumed to be some kind of a ..._TYPE
12094    node, return the size in bits for the type if it is a constant, or else
12095    return the alignment for the type if the type's size is not constant, or
12096    else return BITS_PER_WORD if the type actually turns out to be an
12097    ERROR_MARK node.  */
12098
12099 static inline unsigned HOST_WIDE_INT
12100 simple_type_size_in_bits (const_tree type)
12101 {
12102   if (TREE_CODE (type) == ERROR_MARK)
12103     return BITS_PER_WORD;
12104   else if (TYPE_SIZE (type) == NULL_TREE)
12105     return 0;
12106   else if (host_integerp (TYPE_SIZE (type), 1))
12107     return tree_low_cst (TYPE_SIZE (type), 1);
12108   else
12109     return TYPE_ALIGN (type);
12110 }
12111
12112 /*  Given a pointer to a tree node for a subrange type, return a pointer
12113     to a DIE that describes the given type.  */
12114
12115 static dw_die_ref
12116 subrange_type_die (tree type, tree low, tree high, dw_die_ref context_die)
12117 {
12118   dw_die_ref subrange_die;
12119   const HOST_WIDE_INT size_in_bytes = int_size_in_bytes (type);
12120
12121   if (context_die == NULL)
12122     context_die = comp_unit_die;
12123
12124   subrange_die = new_die (DW_TAG_subrange_type, context_die, type);
12125
12126   if (int_size_in_bytes (TREE_TYPE (type)) != size_in_bytes)
12127     {
12128       /* The size of the subrange type and its base type do not match,
12129          so we need to generate a size attribute for the subrange type.  */
12130       add_AT_unsigned (subrange_die, DW_AT_byte_size, size_in_bytes);
12131     }
12132
12133   if (low)
12134     add_bound_info (subrange_die, DW_AT_lower_bound, low);
12135   if (high)
12136     add_bound_info (subrange_die, DW_AT_upper_bound, high);
12137
12138   return subrange_die;
12139 }
12140
12141 /* Given a pointer to an arbitrary ..._TYPE tree node, return a debugging
12142    entry that chains various modifiers in front of the given type.  */
12143
12144 static dw_die_ref
12145 modified_type_die (tree type, int is_const_type, int is_volatile_type,
12146                    dw_die_ref context_die)
12147 {
12148   enum tree_code code = TREE_CODE (type);
12149   dw_die_ref mod_type_die;
12150   dw_die_ref sub_die = NULL;
12151   tree item_type = NULL;
12152   tree qualified_type;
12153   tree name, low, high;
12154
12155   if (code == ERROR_MARK)
12156     return NULL;
12157
12158   /* See if we already have the appropriately qualified variant of
12159      this type.  */
12160   qualified_type
12161     = get_qualified_type (type,
12162                           ((is_const_type ? TYPE_QUAL_CONST : 0)
12163                            | (is_volatile_type ? TYPE_QUAL_VOLATILE : 0)));
12164
12165   /* If we do, then we can just use its DIE, if it exists.  */
12166   if (qualified_type)
12167     {
12168       mod_type_die = lookup_type_die (qualified_type);
12169       if (mod_type_die)
12170         return mod_type_die;
12171     }
12172
12173   name = qualified_type ? TYPE_NAME (qualified_type) : NULL;
12174
12175   /* Handle C typedef types.  */
12176   if (name && TREE_CODE (name) == TYPE_DECL && DECL_ORIGINAL_TYPE (name))
12177     {
12178       tree dtype = TREE_TYPE (name);
12179
12180       if (qualified_type == dtype)
12181         {
12182           /* For a named type, use the typedef.  */
12183           gen_type_die (qualified_type, context_die);
12184           return lookup_type_die (qualified_type);
12185         }
12186       else if (is_const_type < TYPE_READONLY (dtype)
12187                || is_volatile_type < TYPE_VOLATILE (dtype)
12188                || (is_const_type <= TYPE_READONLY (dtype)
12189                    && is_volatile_type <= TYPE_VOLATILE (dtype)
12190                    && DECL_ORIGINAL_TYPE (name) != type))
12191         /* cv-unqualified version of named type.  Just use the unnamed
12192            type to which it refers.  */
12193         return modified_type_die (DECL_ORIGINAL_TYPE (name),
12194                                   is_const_type, is_volatile_type,
12195                                   context_die);
12196       /* Else cv-qualified version of named type; fall through.  */
12197     }
12198
12199   if (is_const_type)
12200     {
12201       mod_type_die = new_die (DW_TAG_const_type, comp_unit_die, type);
12202       sub_die = modified_type_die (type, 0, is_volatile_type, context_die);
12203     }
12204   else if (is_volatile_type)
12205     {
12206       mod_type_die = new_die (DW_TAG_volatile_type, comp_unit_die, type);
12207       sub_die = modified_type_die (type, 0, 0, context_die);
12208     }
12209   else if (code == POINTER_TYPE)
12210     {
12211       mod_type_die = new_die (DW_TAG_pointer_type, comp_unit_die, type);
12212       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12213                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12214       item_type = TREE_TYPE (type);
12215       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12216         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12217                          TYPE_ADDR_SPACE (item_type));
12218     }
12219   else if (code == REFERENCE_TYPE)
12220     {
12221       mod_type_die = new_die (DW_TAG_reference_type, comp_unit_die, type);
12222       add_AT_unsigned (mod_type_die, DW_AT_byte_size,
12223                        simple_type_size_in_bits (type) / BITS_PER_UNIT);
12224       item_type = TREE_TYPE (type);
12225       if (!ADDR_SPACE_GENERIC_P (TYPE_ADDR_SPACE (item_type)))
12226         add_AT_unsigned (mod_type_die, DW_AT_address_class,
12227                          TYPE_ADDR_SPACE (item_type));
12228     }
12229   else if (code == INTEGER_TYPE
12230            && TREE_TYPE (type) != NULL_TREE
12231            && subrange_type_for_debug_p (type, &low, &high))
12232     {
12233       mod_type_die = subrange_type_die (type, low, high, context_die);
12234       item_type = TREE_TYPE (type);
12235     }
12236   else if (is_base_type (type))
12237     mod_type_die = base_type_die (type);
12238   else
12239     {
12240       gen_type_die (type, context_die);
12241
12242       /* We have to get the type_main_variant here (and pass that to the
12243          `lookup_type_die' routine) because the ..._TYPE node we have
12244          might simply be a *copy* of some original type node (where the
12245          copy was created to help us keep track of typedef names) and
12246          that copy might have a different TYPE_UID from the original
12247          ..._TYPE node.  */
12248       if (TREE_CODE (type) != VECTOR_TYPE)
12249         return lookup_type_die (type_main_variant (type));
12250       else
12251         /* Vectors have the debugging information in the type,
12252            not the main variant.  */
12253         return lookup_type_die (type);
12254     }
12255
12256   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,
12257      don't output a DW_TAG_typedef, since there isn't one in the
12258      user's program; just attach a DW_AT_name to the type.
12259      Don't attach a DW_AT_name to DW_TAG_const_type or DW_TAG_volatile_type
12260      if the base type already has the same name.  */
12261   if (name
12262       && ((TREE_CODE (name) != TYPE_DECL
12263            && (qualified_type == TYPE_MAIN_VARIANT (type)
12264                || (!is_const_type && !is_volatile_type)))
12265           || (TREE_CODE (name) == TYPE_DECL
12266               && TREE_TYPE (name) == qualified_type
12267               && DECL_NAME (name))))
12268     {
12269       if (TREE_CODE (name) == TYPE_DECL)
12270         /* Could just call add_name_and_src_coords_attributes here,
12271            but since this is a builtin type it doesn't have any
12272            useful source coordinates anyway.  */
12273         name = DECL_NAME (name);
12274       add_name_attribute (mod_type_die, IDENTIFIER_POINTER (name));
12275     }
12276
12277   if (qualified_type)
12278     equate_type_number_to_die (qualified_type, mod_type_die);
12279
12280   if (item_type)
12281     /* We must do this after the equate_type_number_to_die call, in case
12282        this is a recursive type.  This ensures that the modified_type_die
12283        recursion will terminate even if the type is recursive.  Recursive
12284        types are possible in Ada.  */
12285     sub_die = modified_type_die (item_type,
12286                                  TYPE_READONLY (item_type),
12287                                  TYPE_VOLATILE (item_type),
12288                                  context_die);
12289
12290   if (sub_die != NULL)
12291     add_AT_die_ref (mod_type_die, DW_AT_type, sub_die);
12292
12293   return mod_type_die;
12294 }
12295
12296 /* Generate DIEs for the generic parameters of T.
12297    T must be either a generic type or a generic function.
12298    See http://gcc.gnu.org/wiki/TemplateParmsDwarf for more.  */
12299
12300 static void
12301 gen_generic_params_dies (tree t)
12302 {
12303   tree parms, args;
12304   int parms_num, i;
12305   dw_die_ref die = NULL;
12306
12307   if (!t || (TYPE_P (t) && !COMPLETE_TYPE_P (t)))
12308     return;
12309
12310   if (TYPE_P (t))
12311     die = lookup_type_die (t);
12312   else if (DECL_P (t))
12313     die = lookup_decl_die (t);
12314
12315   gcc_assert (die);
12316
12317   parms = lang_hooks.get_innermost_generic_parms (t);
12318   if (!parms)
12319     /* T has no generic parameter. It means T is neither a generic type
12320        or function. End of story.  */
12321     return;
12322
12323   parms_num = TREE_VEC_LENGTH (parms);
12324   args = lang_hooks.get_innermost_generic_args (t);
12325   for (i = 0; i < parms_num; i++)
12326     {
12327       tree parm, arg, arg_pack_elems;
12328
12329       parm = TREE_VEC_ELT (parms, i);
12330       arg = TREE_VEC_ELT (args, i);
12331       arg_pack_elems = lang_hooks.types.get_argument_pack_elems (arg);
12332       gcc_assert (parm && TREE_VALUE (parm) && arg);
12333
12334       if (parm && TREE_VALUE (parm) && arg)
12335         {
12336           /* If PARM represents a template parameter pack,
12337              emit a DW_TAG_GNU_template_parameter_pack DIE, followed
12338              by DW_TAG_template_*_parameter DIEs for the argument
12339              pack elements of ARG. Note that ARG would then be
12340              an argument pack.  */
12341           if (arg_pack_elems)
12342             template_parameter_pack_die (TREE_VALUE (parm),
12343                                          arg_pack_elems,
12344                                          die);
12345           else
12346             generic_parameter_die (TREE_VALUE (parm), arg,
12347                                    true /* Emit DW_AT_name */, die);
12348         }
12349     }
12350 }
12351
12352 /* Create and return a DIE for PARM which should be
12353    the representation of a generic type parameter.
12354    For instance, in the C++ front end, PARM would be a template parameter.
12355    ARG is the argument to PARM.
12356    EMIT_NAME_P if tree, the DIE will have DW_AT_name attribute set to the
12357    name of the PARM.
12358    PARENT_DIE is the parent DIE which the new created DIE should be added to,
12359    as a child node.  */
12360
12361 static dw_die_ref
12362 generic_parameter_die (tree parm, tree arg,
12363                        bool emit_name_p,
12364                        dw_die_ref parent_die)
12365 {
12366   dw_die_ref tmpl_die = NULL;
12367   const char *name = NULL;
12368
12369   if (!parm || !DECL_NAME (parm) || !arg)
12370     return NULL;
12371
12372   /* We support non-type generic parameters and arguments,
12373      type generic parameters and arguments, as well as
12374      generic generic parameters (a.k.a. template template parameters in C++)
12375      and arguments.  */
12376   if (TREE_CODE (parm) == PARM_DECL)
12377     /* PARM is a nontype generic parameter  */
12378     tmpl_die = new_die (DW_TAG_template_value_param, parent_die, parm);
12379   else if (TREE_CODE (parm) == TYPE_DECL)
12380     /* PARM is a type generic parameter.  */
12381     tmpl_die = new_die (DW_TAG_template_type_param, parent_die, parm);
12382   else if (lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12383     /* PARM is a generic generic parameter.
12384        Its DIE is a GNU extension. It shall have a
12385        DW_AT_name attribute to represent the name of the template template
12386        parameter, and a DW_AT_GNU_template_name attribute to represent the
12387        name of the template template argument.  */
12388     tmpl_die = new_die (DW_TAG_GNU_template_template_param,
12389                         parent_die, parm);
12390   else
12391     gcc_unreachable ();
12392
12393   if (tmpl_die)
12394     {
12395       tree tmpl_type;
12396
12397       /* If PARM is a generic parameter pack, it means we are
12398          emitting debug info for a template argument pack element.
12399          In other terms, ARG is a template argument pack element.
12400          In that case, we don't emit any DW_AT_name attribute for
12401          the die.  */
12402       if (emit_name_p)
12403         {
12404           name = IDENTIFIER_POINTER (DECL_NAME (parm));
12405           gcc_assert (name);
12406           add_AT_string (tmpl_die, DW_AT_name, name);
12407         }
12408
12409       if (!lang_hooks.decls.generic_generic_parameter_decl_p (parm))
12410         {
12411           /* DWARF3, 5.6.8 says if PARM is a non-type generic parameter
12412              TMPL_DIE should have a child DW_AT_type attribute that is set
12413              to the type of the argument to PARM, which is ARG.
12414              If PARM is a type generic parameter, TMPL_DIE should have a
12415              child DW_AT_type that is set to ARG.  */
12416           tmpl_type = TYPE_P (arg) ? arg : TREE_TYPE (arg);
12417           add_type_attribute (tmpl_die, tmpl_type, 0,
12418                               TREE_THIS_VOLATILE (tmpl_type),
12419                               parent_die);
12420         }
12421       else
12422         {
12423           /* So TMPL_DIE is a DIE representing a
12424              a generic generic template parameter, a.k.a template template
12425              parameter in C++ and arg is a template.  */
12426
12427           /* The DW_AT_GNU_template_name attribute of the DIE must be set
12428              to the name of the argument.  */
12429           name = dwarf2_name (TYPE_P (arg) ? TYPE_NAME (arg) : arg, 1);
12430           if (name)
12431             add_AT_string (tmpl_die, DW_AT_GNU_template_name, name);
12432         }
12433
12434       if (TREE_CODE (parm) == PARM_DECL)
12435         /* So PARM is a non-type generic parameter.
12436            DWARF3 5.6.8 says we must set a DW_AT_const_value child
12437            attribute of TMPL_DIE which value represents the value
12438            of ARG.
12439            We must be careful here:
12440            The value of ARG might reference some function decls.
12441            We might currently be emitting debug info for a generic
12442            type and types are emitted before function decls, we don't
12443            know if the function decls referenced by ARG will actually be
12444            emitted after cgraph computations.
12445            So must defer the generation of the DW_AT_const_value to
12446            after cgraph is ready.  */
12447         append_entry_to_tmpl_value_parm_die_table (tmpl_die, arg);
12448     }
12449
12450   return tmpl_die;
12451 }
12452
12453 /* Generate and return a  DW_TAG_GNU_template_parameter_pack DIE representing.
12454    PARM_PACK must be a template parameter pack. The returned DIE
12455    will be child DIE of PARENT_DIE.  */
12456
12457 static dw_die_ref
12458 template_parameter_pack_die (tree parm_pack,
12459                              tree parm_pack_args,
12460                              dw_die_ref parent_die)
12461 {
12462   dw_die_ref die;
12463   int j;
12464
12465   gcc_assert (parent_die && parm_pack);
12466
12467   die = new_die (DW_TAG_GNU_template_parameter_pack, parent_die, parm_pack);
12468   add_name_and_src_coords_attributes (die, parm_pack);
12469   for (j = 0; j < TREE_VEC_LENGTH (parm_pack_args); j++)
12470     generic_parameter_die (parm_pack,
12471                            TREE_VEC_ELT (parm_pack_args, j),
12472                            false /* Don't emit DW_AT_name */,
12473                            die);
12474   return die;
12475 }
12476
12477 /* Given a pointer to an arbitrary ..._TYPE tree node, return true if it is
12478    an enumerated type.  */
12479
12480 static inline int
12481 type_is_enum (const_tree type)
12482 {
12483   return TREE_CODE (type) == ENUMERAL_TYPE;
12484 }
12485
12486 /* Return the DBX register number described by a given RTL node.  */
12487
12488 static unsigned int
12489 dbx_reg_number (const_rtx rtl)
12490 {
12491   unsigned regno = REGNO (rtl);
12492
12493   gcc_assert (regno < FIRST_PSEUDO_REGISTER);
12494
12495 #ifdef LEAF_REG_REMAP
12496   if (current_function_uses_only_leaf_regs)
12497     {
12498       int leaf_reg = LEAF_REG_REMAP (regno);
12499       if (leaf_reg != -1)
12500         regno = (unsigned) leaf_reg;
12501     }
12502 #endif
12503
12504   return DBX_REGISTER_NUMBER (regno);
12505 }
12506
12507 /* Optionally add a DW_OP_piece term to a location description expression.
12508    DW_OP_piece is only added if the location description expression already
12509    doesn't end with DW_OP_piece.  */
12510
12511 static void
12512 add_loc_descr_op_piece (dw_loc_descr_ref *list_head, int size)
12513 {
12514   dw_loc_descr_ref loc;
12515
12516   if (*list_head != NULL)
12517     {
12518       /* Find the end of the chain.  */
12519       for (loc = *list_head; loc->dw_loc_next != NULL; loc = loc->dw_loc_next)
12520         ;
12521
12522       if (loc->dw_loc_opc != DW_OP_piece)
12523         loc->dw_loc_next = new_loc_descr (DW_OP_piece, size, 0);
12524     }
12525 }
12526
12527 /* Return a location descriptor that designates a machine register or
12528    zero if there is none.  */
12529
12530 static dw_loc_descr_ref
12531 reg_loc_descriptor (rtx rtl, enum var_init_status initialized)
12532 {
12533   rtx regs;
12534
12535   if (REGNO (rtl) >= FIRST_PSEUDO_REGISTER)
12536     return 0;
12537
12538   regs = targetm.dwarf_register_span (rtl);
12539
12540   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
12541     return multiple_reg_loc_descriptor (rtl, regs, initialized);
12542   else
12543     return one_reg_loc_descriptor (dbx_reg_number (rtl), initialized);
12544 }
12545
12546 /* Return a location descriptor that designates a machine register for
12547    a given hard register number.  */
12548
12549 static dw_loc_descr_ref
12550 one_reg_loc_descriptor (unsigned int regno, enum var_init_status initialized)
12551 {
12552   dw_loc_descr_ref reg_loc_descr;
12553
12554   if (regno <= 31)
12555     reg_loc_descr
12556       = new_loc_descr ((enum dwarf_location_atom) (DW_OP_reg0 + regno), 0, 0);
12557   else
12558     reg_loc_descr = new_loc_descr (DW_OP_regx, regno, 0);
12559
12560   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12561     add_loc_descr (&reg_loc_descr, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12562
12563   return reg_loc_descr;
12564 }
12565
12566 /* Given an RTL of a register, return a location descriptor that
12567    designates a value that spans more than one register.  */
12568
12569 static dw_loc_descr_ref
12570 multiple_reg_loc_descriptor (rtx rtl, rtx regs,
12571                              enum var_init_status initialized)
12572 {
12573   int nregs, size, i;
12574   unsigned reg;
12575   dw_loc_descr_ref loc_result = NULL;
12576
12577   reg = REGNO (rtl);
12578 #ifdef LEAF_REG_REMAP
12579   if (current_function_uses_only_leaf_regs)
12580     {
12581       int leaf_reg = LEAF_REG_REMAP (reg);
12582       if (leaf_reg != -1)
12583         reg = (unsigned) leaf_reg;
12584     }
12585 #endif
12586   gcc_assert ((unsigned) DBX_REGISTER_NUMBER (reg) == dbx_reg_number (rtl));
12587   nregs = hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)];
12588
12589   /* Simple, contiguous registers.  */
12590   if (regs == NULL_RTX)
12591     {
12592       size = GET_MODE_SIZE (GET_MODE (rtl)) / nregs;
12593
12594       loc_result = NULL;
12595       while (nregs--)
12596         {
12597           dw_loc_descr_ref t;
12598
12599           t = one_reg_loc_descriptor (DBX_REGISTER_NUMBER (reg),
12600                                       VAR_INIT_STATUS_INITIALIZED);
12601           add_loc_descr (&loc_result, t);
12602           add_loc_descr_op_piece (&loc_result, size);
12603           ++reg;
12604         }
12605       return loc_result;
12606     }
12607
12608   /* Now onto stupid register sets in non contiguous locations.  */
12609
12610   gcc_assert (GET_CODE (regs) == PARALLEL);
12611
12612   size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12613   loc_result = NULL;
12614
12615   for (i = 0; i < XVECLEN (regs, 0); ++i)
12616     {
12617       dw_loc_descr_ref t;
12618
12619       t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)),
12620                                   VAR_INIT_STATUS_INITIALIZED);
12621       add_loc_descr (&loc_result, t);
12622       size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0)));
12623       add_loc_descr_op_piece (&loc_result, size);
12624     }
12625
12626   if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
12627     add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12628   return loc_result;
12629 }
12630
12631 #endif /* DWARF2_DEBUGGING_INFO */
12632
12633 #if defined (DWARF2_DEBUGGING_INFO) || defined (DWARF2_UNWIND_INFO)
12634
12635 /* Return a location descriptor that designates a constant.  */
12636
12637 static dw_loc_descr_ref
12638 int_loc_descriptor (HOST_WIDE_INT i)
12639 {
12640   enum dwarf_location_atom op;
12641
12642   /* Pick the smallest representation of a constant, rather than just
12643      defaulting to the LEB encoding.  */
12644   if (i >= 0)
12645     {
12646       if (i <= 31)
12647         op = (enum dwarf_location_atom) (DW_OP_lit0 + i);
12648       else if (i <= 0xff)
12649         op = DW_OP_const1u;
12650       else if (i <= 0xffff)
12651         op = DW_OP_const2u;
12652       else if (HOST_BITS_PER_WIDE_INT == 32
12653                || i <= 0xffffffff)
12654         op = DW_OP_const4u;
12655       else
12656         op = DW_OP_constu;
12657     }
12658   else
12659     {
12660       if (i >= -0x80)
12661         op = DW_OP_const1s;
12662       else if (i >= -0x8000)
12663         op = DW_OP_const2s;
12664       else if (HOST_BITS_PER_WIDE_INT == 32
12665                || i >= -0x80000000)
12666         op = DW_OP_const4s;
12667       else
12668         op = DW_OP_consts;
12669     }
12670
12671   return new_loc_descr (op, i, 0);
12672 }
12673 #endif
12674
12675 #ifdef DWARF2_DEBUGGING_INFO
12676 /* Return loc description representing "address" of integer value.
12677    This can appear only as toplevel expression.  */
12678
12679 static dw_loc_descr_ref
12680 address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
12681 {
12682   int litsize;
12683   dw_loc_descr_ref loc_result = NULL;
12684
12685   if (!(dwarf_version >= 4 || !dwarf_strict))
12686     return NULL;
12687
12688   if (i >= 0)
12689     {
12690       if (i <= 31)
12691         litsize = 1;
12692       else if (i <= 0xff)
12693         litsize = 2;
12694       else if (i <= 0xffff)
12695         litsize = 3;
12696       else if (HOST_BITS_PER_WIDE_INT == 32
12697                || i <= 0xffffffff)
12698         litsize = 5;
12699       else
12700         litsize = 1 + size_of_uleb128 ((unsigned HOST_WIDE_INT) i);
12701     }
12702   else
12703     {
12704       if (i >= -0x80)
12705         litsize = 2;
12706       else if (i >= -0x8000)
12707         litsize = 3;
12708       else if (HOST_BITS_PER_WIDE_INT == 32
12709                || i >= -0x80000000)
12710         litsize = 5;
12711       else
12712         litsize = 1 + size_of_sleb128 (i);
12713     }
12714   /* Determine if DW_OP_stack_value or DW_OP_implicit_value
12715      is more compact.  For DW_OP_stack_value we need:
12716      litsize + 1 (DW_OP_stack_value)
12717      and for DW_OP_implicit_value:
12718      1 (DW_OP_implicit_value) + 1 (length) + size.  */
12719   if ((int) DWARF2_ADDR_SIZE >= size && litsize + 1 <= 1 + 1 + size)
12720     {
12721       loc_result = int_loc_descriptor (i);
12722       add_loc_descr (&loc_result,
12723                      new_loc_descr (DW_OP_stack_value, 0, 0));
12724       return loc_result;
12725     }
12726
12727   loc_result = new_loc_descr (DW_OP_implicit_value,
12728                               size, 0);
12729   loc_result->dw_loc_oprnd2.val_class = dw_val_class_const;
12730   loc_result->dw_loc_oprnd2.v.val_int = i;
12731   return loc_result;
12732 }
12733
12734 /* Return a location descriptor that designates a base+offset location.  */
12735
12736 static dw_loc_descr_ref
12737 based_loc_descr (rtx reg, HOST_WIDE_INT offset,
12738                  enum var_init_status initialized)
12739 {
12740   unsigned int regno;
12741   dw_loc_descr_ref result;
12742   dw_fde_ref fde = current_fde ();
12743
12744   /* We only use "frame base" when we're sure we're talking about the
12745      post-prologue local stack frame.  We do this by *not* running
12746      register elimination until this point, and recognizing the special
12747      argument pointer and soft frame pointer rtx's.  */
12748   if (reg == arg_pointer_rtx || reg == frame_pointer_rtx)
12749     {
12750       rtx elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
12751
12752       if (elim != reg)
12753         {
12754           if (GET_CODE (elim) == PLUS)
12755             {
12756               offset += INTVAL (XEXP (elim, 1));
12757               elim = XEXP (elim, 0);
12758             }
12759           gcc_assert ((SUPPORTS_STACK_ALIGNMENT
12760                        && (elim == hard_frame_pointer_rtx
12761                            || elim == stack_pointer_rtx))
12762                       || elim == (frame_pointer_needed
12763                                   ? hard_frame_pointer_rtx
12764                                   : stack_pointer_rtx));
12765
12766           /* If drap register is used to align stack, use frame
12767              pointer + offset to access stack variables.  If stack
12768              is aligned without drap, use stack pointer + offset to
12769              access stack variables.  */
12770           if (crtl->stack_realign_tried
12771               && reg == frame_pointer_rtx)
12772             {
12773               int base_reg
12774                 = DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
12775                                       ? HARD_FRAME_POINTER_REGNUM
12776                                       : STACK_POINTER_REGNUM);
12777               return new_reg_loc_descr (base_reg, offset);
12778             }
12779
12780           offset += frame_pointer_fb_offset;
12781           return new_loc_descr (DW_OP_fbreg, offset, 0);
12782         }
12783     }
12784   else if (!optimize
12785            && fde
12786            && (fde->drap_reg == REGNO (reg)
12787                || fde->vdrap_reg == REGNO (reg)))
12788     {
12789       /* Use cfa+offset to represent the location of arguments passed
12790          on the stack when drap is used to align stack.
12791          Only do this when not optimizing, for optimized code var-tracking
12792          is supposed to track where the arguments live and the register
12793          used as vdrap or drap in some spot might be used for something
12794          else in other part of the routine.  */
12795       return new_loc_descr (DW_OP_fbreg, offset, 0);
12796     }
12797
12798   regno = dbx_reg_number (reg);
12799   if (regno <= 31)
12800     result = new_loc_descr ((enum dwarf_location_atom) (DW_OP_breg0 + regno),
12801                             offset, 0);
12802   else
12803     result = new_loc_descr (DW_OP_bregx, regno, offset);
12804
12805   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
12806     add_loc_descr (&result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
12807
12808   return result;
12809 }
12810
12811 /* Return true if this RTL expression describes a base+offset calculation.  */
12812
12813 static inline int
12814 is_based_loc (const_rtx rtl)
12815 {
12816   return (GET_CODE (rtl) == PLUS
12817           && ((REG_P (XEXP (rtl, 0))
12818                && REGNO (XEXP (rtl, 0)) < FIRST_PSEUDO_REGISTER
12819                && CONST_INT_P (XEXP (rtl, 1)))));
12820 }
12821
12822 /* Try to handle TLS MEMs, for which mem_loc_descriptor on XEXP (mem, 0)
12823    failed.  */
12824
12825 static dw_loc_descr_ref
12826 tls_mem_loc_descriptor (rtx mem)
12827 {
12828   tree base;
12829   dw_loc_descr_ref loc_result;
12830
12831   if (MEM_EXPR (mem) == NULL_TREE || MEM_OFFSET (mem) == NULL_RTX)
12832     return NULL;
12833
12834   base = get_base_address (MEM_EXPR (mem));
12835   if (base == NULL
12836       || TREE_CODE (base) != VAR_DECL
12837       || !DECL_THREAD_LOCAL_P (base))
12838     return NULL;
12839
12840   loc_result = loc_descriptor_from_tree (MEM_EXPR (mem), 1);
12841   if (loc_result == NULL)
12842     return NULL;
12843
12844   if (INTVAL (MEM_OFFSET (mem)))
12845     loc_descr_plus_const (&loc_result, INTVAL (MEM_OFFSET (mem)));
12846
12847   return loc_result;
12848 }
12849
12850 /* Output debug info about reason why we failed to expand expression as dwarf
12851    expression.  */
12852
12853 static void
12854 expansion_failed (tree expr, rtx rtl, char const *reason)
12855 {
12856   if (dump_file && (dump_flags & TDF_DETAILS))
12857     {
12858       fprintf (dump_file, "Failed to expand as dwarf: ");
12859       if (expr)
12860         print_generic_expr (dump_file, expr, dump_flags);
12861       if (rtl)
12862         {
12863           fprintf (dump_file, "\n");
12864           print_rtl (dump_file, rtl);
12865         }
12866       fprintf (dump_file, "\nReason: %s\n", reason);
12867     }
12868 }
12869
12870 /* Helper function for const_ok_for_output, called either directly
12871    or via for_each_rtx.  */
12872
12873 static int
12874 const_ok_for_output_1 (rtx *rtlp, void *data ATTRIBUTE_UNUSED)
12875 {
12876   rtx rtl = *rtlp;
12877
12878   if (GET_CODE (rtl) == UNSPEC)
12879     {
12880       /* If delegitimize_address couldn't do anything with the UNSPEC, assume
12881          we can't express it in the debug info.  */
12882 #ifdef ENABLE_CHECKING
12883       inform (current_function_decl
12884               ? DECL_SOURCE_LOCATION (current_function_decl)
12885               : UNKNOWN_LOCATION,
12886               "non-delegitimized UNSPEC %d found in variable location",
12887               XINT (rtl, 1));
12888 #endif
12889       expansion_failed (NULL_TREE, rtl,
12890                         "UNSPEC hasn't been delegitimized.\n");
12891       return 1;
12892     }
12893
12894   if (GET_CODE (rtl) != SYMBOL_REF)
12895     return 0;
12896
12897   if (CONSTANT_POOL_ADDRESS_P (rtl))
12898     {
12899       bool marked;
12900       get_pool_constant_mark (rtl, &marked);
12901       /* If all references to this pool constant were optimized away,
12902          it was not output and thus we can't represent it.  */
12903       if (!marked)
12904         {
12905           expansion_failed (NULL_TREE, rtl,
12906                             "Constant was removed from constant pool.\n");
12907           return 1;
12908         }
12909     }
12910
12911   if (SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
12912     return 1;
12913
12914   /* Avoid references to external symbols in debug info, on several targets
12915      the linker might even refuse to link when linking a shared library,
12916      and in many other cases the relocations for .debug_info/.debug_loc are
12917      dropped, so the address becomes zero anyway.  Hidden symbols, guaranteed
12918      to be defined within the same shared library or executable are fine.  */
12919   if (SYMBOL_REF_EXTERNAL_P (rtl))
12920     {
12921       tree decl = SYMBOL_REF_DECL (rtl);
12922
12923       if (decl == NULL || !targetm.binds_local_p (decl))
12924         {
12925           expansion_failed (NULL_TREE, rtl,
12926                             "Symbol not defined in current TU.\n");
12927           return 1;
12928         }
12929     }
12930
12931   return 0;
12932 }
12933
12934 /* Return true if constant RTL can be emitted in DW_OP_addr or
12935    DW_AT_const_value.  TLS SYMBOL_REFs, external SYMBOL_REFs or
12936    non-marked constant pool SYMBOL_REFs can't be referenced in it.  */
12937
12938 static bool
12939 const_ok_for_output (rtx rtl)
12940 {
12941   if (GET_CODE (rtl) == SYMBOL_REF)
12942     return const_ok_for_output_1 (&rtl, NULL) == 0;
12943
12944   if (GET_CODE (rtl) == CONST)
12945     return for_each_rtx (&XEXP (rtl, 0), const_ok_for_output_1, NULL) == 0;
12946
12947   return true;
12948 }
12949
12950 /* The following routine converts the RTL for a variable or parameter
12951    (resident in memory) into an equivalent Dwarf representation of a
12952    mechanism for getting the address of that same variable onto the top of a
12953    hypothetical "address evaluation" stack.
12954
12955    When creating memory location descriptors, we are effectively transforming
12956    the RTL for a memory-resident object into its Dwarf postfix expression
12957    equivalent.  This routine recursively descends an RTL tree, turning
12958    it into Dwarf postfix code as it goes.
12959
12960    MODE is the mode of the memory reference, needed to handle some
12961    autoincrement addressing modes.
12962
12963    CAN_USE_FBREG is a flag whether we can use DW_AT_frame_base in the
12964    location list for RTL.
12965
12966    Return 0 if we can't represent the location.  */
12967
12968 static dw_loc_descr_ref
12969 mem_loc_descriptor (rtx rtl, enum machine_mode mode,
12970                     enum var_init_status initialized)
12971 {
12972   dw_loc_descr_ref mem_loc_result = NULL;
12973   enum dwarf_location_atom op;
12974   dw_loc_descr_ref op0, op1;
12975
12976   /* Note that for a dynamically sized array, the location we will generate a
12977      description of here will be the lowest numbered location which is
12978      actually within the array.  That's *not* necessarily the same as the
12979      zeroth element of the array.  */
12980
12981   rtl = targetm.delegitimize_address (rtl);
12982
12983   switch (GET_CODE (rtl))
12984     {
12985     case POST_INC:
12986     case POST_DEC:
12987     case POST_MODIFY:
12988       return mem_loc_descriptor (XEXP (rtl, 0), mode, initialized);
12989
12990     case SUBREG:
12991       /* The case of a subreg may arise when we have a local (register)
12992          variable or a formal (register) parameter which doesn't quite fill
12993          up an entire register.  For now, just assume that it is
12994          legitimate to make the Dwarf info refer to the whole register which
12995          contains the given subreg.  */
12996       if (!subreg_lowpart_p (rtl))
12997         break;
12998       rtl = SUBREG_REG (rtl);
12999       if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13000         break;
13001       if (GET_MODE_CLASS (GET_MODE (rtl)) != MODE_INT)
13002         break;
13003       mem_loc_result = mem_loc_descriptor (rtl, mode, initialized);
13004       break;
13005
13006     case REG:
13007       /* Whenever a register number forms a part of the description of the
13008          method for calculating the (dynamic) address of a memory resident
13009          object, DWARF rules require the register number be referred to as
13010          a "base register".  This distinction is not based in any way upon
13011          what category of register the hardware believes the given register
13012          belongs to.  This is strictly DWARF terminology we're dealing with
13013          here. Note that in cases where the location of a memory-resident
13014          data object could be expressed as: OP_ADD (OP_BASEREG (basereg),
13015          OP_CONST (0)) the actual DWARF location descriptor that we generate
13016          may just be OP_BASEREG (basereg).  This may look deceptively like
13017          the object in question was allocated to a register (rather than in
13018          memory) so DWARF consumers need to be aware of the subtle
13019          distinction between OP_REG and OP_BASEREG.  */
13020       if (REGNO (rtl) < FIRST_PSEUDO_REGISTER)
13021         mem_loc_result = based_loc_descr (rtl, 0, VAR_INIT_STATUS_INITIALIZED);
13022       else if (stack_realign_drap
13023                && crtl->drap_reg
13024                && crtl->args.internal_arg_pointer == rtl
13025                && REGNO (crtl->drap_reg) < FIRST_PSEUDO_REGISTER)
13026         {
13027           /* If RTL is internal_arg_pointer, which has been optimized
13028              out, use DRAP instead.  */
13029           mem_loc_result = based_loc_descr (crtl->drap_reg, 0,
13030                                             VAR_INIT_STATUS_INITIALIZED);
13031         }
13032       break;
13033
13034     case SIGN_EXTEND:
13035     case ZERO_EXTEND:
13036       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13037                                 VAR_INIT_STATUS_INITIALIZED);
13038       if (op0 == 0)
13039         break;
13040       else
13041         {
13042           int shift = DWARF2_ADDR_SIZE
13043                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13044           shift *= BITS_PER_UNIT;
13045           if (GET_CODE (rtl) == SIGN_EXTEND)
13046             op = DW_OP_shra;
13047           else
13048             op = DW_OP_shr;
13049           mem_loc_result = op0;
13050           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13051           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13052           add_loc_descr (&mem_loc_result, int_loc_descriptor (shift));
13053           add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13054         }
13055       break;
13056
13057     case MEM:
13058       mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13059                                            VAR_INIT_STATUS_INITIALIZED);
13060       if (mem_loc_result == NULL)
13061         mem_loc_result = tls_mem_loc_descriptor (rtl);
13062       if (mem_loc_result != 0)
13063         {
13064           if (GET_MODE_SIZE (GET_MODE (rtl)) > DWARF2_ADDR_SIZE)
13065             {
13066               expansion_failed (NULL_TREE, rtl, "DWARF address size mismatch");
13067               return 0;
13068             }
13069           else if (GET_MODE_SIZE (GET_MODE (rtl)) == DWARF2_ADDR_SIZE)
13070             add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_deref, 0, 0));
13071           else
13072             add_loc_descr (&mem_loc_result,
13073                            new_loc_descr (DW_OP_deref_size,
13074                                           GET_MODE_SIZE (GET_MODE (rtl)), 0));
13075         }
13076       else
13077         {
13078           rtx new_rtl = avoid_constant_pool_reference (rtl);
13079           if (new_rtl != rtl)
13080             return mem_loc_descriptor (new_rtl, mode, initialized);
13081         }
13082       break;
13083
13084     case LO_SUM:
13085          rtl = XEXP (rtl, 1);
13086
13087       /* ... fall through ...  */
13088
13089     case LABEL_REF:
13090       /* Some ports can transform a symbol ref into a label ref, because
13091          the symbol ref is too far away and has to be dumped into a constant
13092          pool.  */
13093     case CONST:
13094     case SYMBOL_REF:
13095       if (GET_CODE (rtl) == SYMBOL_REF
13096           && SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
13097         {
13098           dw_loc_descr_ref temp;
13099
13100           /* If this is not defined, we have no way to emit the data.  */
13101           if (!targetm.have_tls || !targetm.asm_out.output_dwarf_dtprel)
13102             break;
13103
13104           temp = new_loc_descr (DW_OP_addr, 0, 0);
13105           temp->dw_loc_oprnd1.val_class = dw_val_class_addr;
13106           temp->dw_loc_oprnd1.v.val_addr = rtl;
13107           temp->dtprel = true;
13108
13109           mem_loc_result = new_loc_descr (DW_OP_GNU_push_tls_address, 0, 0);
13110           add_loc_descr (&mem_loc_result, temp);
13111
13112           break;
13113         }
13114
13115       if (!const_ok_for_output (rtl))
13116         break;
13117
13118     symref:
13119       mem_loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13120       mem_loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13121       mem_loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13122       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13123       break;
13124
13125     case CONCAT:
13126     case CONCATN:
13127     case VAR_LOCATION:
13128       expansion_failed (NULL_TREE, rtl,
13129                         "CONCAT/CONCATN/VAR_LOCATION is handled only by loc_descriptor");
13130       return 0;
13131
13132     case PRE_MODIFY:
13133       /* Extract the PLUS expression nested inside and fall into
13134          PLUS code below.  */
13135       rtl = XEXP (rtl, 1);
13136       goto plus;
13137
13138     case PRE_INC:
13139     case PRE_DEC:
13140       /* Turn these into a PLUS expression and fall into the PLUS code
13141          below.  */
13142       rtl = gen_rtx_PLUS (word_mode, XEXP (rtl, 0),
13143                           GEN_INT (GET_CODE (rtl) == PRE_INC
13144                                    ? GET_MODE_UNIT_SIZE (mode)
13145                                    : -GET_MODE_UNIT_SIZE (mode)));
13146
13147       /* ... fall through ...  */
13148
13149     case PLUS:
13150     plus:
13151       if (is_based_loc (rtl))
13152         mem_loc_result = based_loc_descr (XEXP (rtl, 0),
13153                                           INTVAL (XEXP (rtl, 1)),
13154                                           VAR_INIT_STATUS_INITIALIZED);
13155       else
13156         {
13157           mem_loc_result = mem_loc_descriptor (XEXP (rtl, 0), mode,
13158                                                VAR_INIT_STATUS_INITIALIZED);
13159           if (mem_loc_result == 0)
13160             break;
13161
13162           if (CONST_INT_P (XEXP (rtl, 1)))
13163             loc_descr_plus_const (&mem_loc_result, INTVAL (XEXP (rtl, 1)));
13164           else
13165             {
13166               dw_loc_descr_ref mem_loc_result2
13167                 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13168                                       VAR_INIT_STATUS_INITIALIZED);
13169               if (mem_loc_result2 == 0)
13170                 break;
13171               add_loc_descr (&mem_loc_result, mem_loc_result2);
13172               add_loc_descr (&mem_loc_result,
13173                              new_loc_descr (DW_OP_plus, 0, 0));
13174             }
13175         }
13176       break;
13177
13178     /* If a pseudo-reg is optimized away, it is possible for it to
13179        be replaced with a MEM containing a multiply or shift.  */
13180     case MINUS:
13181       op = DW_OP_minus;
13182       goto do_binop;
13183
13184     case MULT:
13185       op = DW_OP_mul;
13186       goto do_binop;
13187
13188     case DIV:
13189       op = DW_OP_div;
13190       goto do_binop;
13191
13192     case UMOD:
13193       op = DW_OP_mod;
13194       goto do_binop;
13195
13196     case ASHIFT:
13197       op = DW_OP_shl;
13198       goto do_binop;
13199
13200     case ASHIFTRT:
13201       op = DW_OP_shra;
13202       goto do_binop;
13203
13204     case LSHIFTRT:
13205       op = DW_OP_shr;
13206       goto do_binop;
13207
13208     case AND:
13209       op = DW_OP_and;
13210       goto do_binop;
13211
13212     case IOR:
13213       op = DW_OP_or;
13214       goto do_binop;
13215
13216     case XOR:
13217       op = DW_OP_xor;
13218       goto do_binop;
13219
13220     do_binop:
13221       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13222                                 VAR_INIT_STATUS_INITIALIZED);
13223       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13224                                 VAR_INIT_STATUS_INITIALIZED);
13225
13226       if (op0 == 0 || op1 == 0)
13227         break;
13228
13229       mem_loc_result = op0;
13230       add_loc_descr (&mem_loc_result, op1);
13231       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13232       break;
13233
13234     case MOD:
13235       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13236                                 VAR_INIT_STATUS_INITIALIZED);
13237       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13238                                 VAR_INIT_STATUS_INITIALIZED);
13239
13240       if (op0 == 0 || op1 == 0)
13241         break;
13242
13243       mem_loc_result = op0;
13244       add_loc_descr (&mem_loc_result, op1);
13245       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13246       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_over, 0, 0));
13247       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_div, 0, 0));
13248       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13249       add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_minus, 0, 0));
13250       break;
13251
13252     case NOT:
13253       op = DW_OP_not;
13254       goto do_unop;
13255
13256     case ABS:
13257       op = DW_OP_abs;
13258       goto do_unop;
13259
13260     case NEG:
13261       op = DW_OP_neg;
13262       goto do_unop;
13263
13264     do_unop:
13265       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13266                                 VAR_INIT_STATUS_INITIALIZED);
13267
13268       if (op0 == 0)
13269         break;
13270
13271       mem_loc_result = op0;
13272       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13273       break;
13274
13275     case CONST_INT:
13276       mem_loc_result = int_loc_descriptor (INTVAL (rtl));
13277       break;
13278
13279     case EQ:
13280       op = DW_OP_eq;
13281       goto do_scompare;
13282
13283     case GE:
13284       op = DW_OP_ge;
13285       goto do_scompare;
13286
13287     case GT:
13288       op = DW_OP_gt;
13289       goto do_scompare;
13290
13291     case LE:
13292       op = DW_OP_le;
13293       goto do_scompare;
13294
13295     case LT:
13296       op = DW_OP_lt;
13297       goto do_scompare;
13298
13299     case NE:
13300       op = DW_OP_ne;
13301       goto do_scompare;
13302
13303     do_scompare:
13304       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13305           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13306         break;
13307       else
13308         {
13309           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13310
13311           if (op_mode == VOIDmode)
13312             op_mode = GET_MODE (XEXP (rtl, 1));
13313           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13314             break;
13315
13316           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13317                                     VAR_INIT_STATUS_INITIALIZED);
13318           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13319                                     VAR_INIT_STATUS_INITIALIZED);
13320
13321           if (op0 == 0 || op1 == 0)
13322             break;
13323
13324           if (op_mode != VOIDmode
13325               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13326             {
13327               int shift = DWARF2_ADDR_SIZE - GET_MODE_SIZE (op_mode);
13328               shift *= BITS_PER_UNIT;
13329               /* For eq/ne, if the operands are known to be zero-extended,
13330                  there is no need to do the fancy shifting up.  */
13331               if (op == DW_OP_eq || op == DW_OP_ne)
13332                 {
13333                   dw_loc_descr_ref last0, last1;
13334                   for (last0 = op0;
13335                        last0->dw_loc_next != NULL;
13336                        last0 = last0->dw_loc_next)
13337                     ;
13338                   for (last1 = op1;
13339                        last1->dw_loc_next != NULL;
13340                        last1 = last1->dw_loc_next)
13341                     ;
13342                   /* deref_size zero extends, and for constants we can check
13343                      whether they are zero extended or not.  */
13344                   if (((last0->dw_loc_opc == DW_OP_deref_size
13345                         && last0->dw_loc_oprnd1.v.val_int
13346                            <= GET_MODE_SIZE (op_mode))
13347                        || (CONST_INT_P (XEXP (rtl, 0))
13348                             && (unsigned HOST_WIDE_INT) INTVAL (XEXP (rtl, 0))
13349                                == (INTVAL (XEXP (rtl, 0))
13350                                    & GET_MODE_MASK (op_mode))))
13351                       && ((last1->dw_loc_opc == DW_OP_deref_size
13352                            && last1->dw_loc_oprnd1.v.val_int
13353                               <= GET_MODE_SIZE (op_mode))
13354                           || (CONST_INT_P (XEXP (rtl, 1))
13355                               && (unsigned HOST_WIDE_INT)
13356                                  INTVAL (XEXP (rtl, 1))
13357                                  == (INTVAL (XEXP (rtl, 1))
13358                                      & GET_MODE_MASK (op_mode)))))
13359                     goto do_compare;
13360                 }
13361               add_loc_descr (&op0, int_loc_descriptor (shift));
13362               add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13363               if (CONST_INT_P (XEXP (rtl, 1)))
13364                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) << shift);
13365               else
13366                 {
13367                   add_loc_descr (&op1, int_loc_descriptor (shift));
13368                   add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13369                 }
13370             }
13371         }
13372
13373     do_compare:
13374       mem_loc_result = op0;
13375       add_loc_descr (&mem_loc_result, op1);
13376       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13377       if (STORE_FLAG_VALUE != 1)
13378         {
13379           add_loc_descr (&mem_loc_result,
13380                          int_loc_descriptor (STORE_FLAG_VALUE));
13381           add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_mul, 0, 0));
13382         }
13383       break;
13384
13385     case GEU:
13386       op = DW_OP_ge;
13387       goto do_ucompare;
13388
13389     case GTU:
13390       op = DW_OP_gt;
13391       goto do_ucompare;
13392
13393     case LEU:
13394       op = DW_OP_le;
13395       goto do_ucompare;
13396
13397     case LTU:
13398       op = DW_OP_lt;
13399       goto do_ucompare;
13400
13401     do_ucompare:
13402       if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13403           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 1))) > DWARF2_ADDR_SIZE)
13404         break;
13405       else
13406         {
13407           enum machine_mode op_mode = GET_MODE (XEXP (rtl, 0));
13408
13409           if (op_mode == VOIDmode)
13410             op_mode = GET_MODE (XEXP (rtl, 1));
13411           if (op_mode != VOIDmode && GET_MODE_CLASS (op_mode) != MODE_INT)
13412             break;
13413
13414           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13415                                     VAR_INIT_STATUS_INITIALIZED);
13416           op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13417                                     VAR_INIT_STATUS_INITIALIZED);
13418
13419           if (op0 == 0 || op1 == 0)
13420             break;
13421
13422           if (op_mode != VOIDmode
13423               && GET_MODE_SIZE (op_mode) < DWARF2_ADDR_SIZE)
13424             {
13425               HOST_WIDE_INT mask = GET_MODE_MASK (op_mode);
13426               dw_loc_descr_ref last0, last1;
13427               for (last0 = op0;
13428                    last0->dw_loc_next != NULL;
13429                    last0 = last0->dw_loc_next)
13430                 ;
13431               for (last1 = op1;
13432                    last1->dw_loc_next != NULL;
13433                    last1 = last1->dw_loc_next)
13434                 ;
13435               if (CONST_INT_P (XEXP (rtl, 0)))
13436                 op0 = int_loc_descriptor (INTVAL (XEXP (rtl, 0)) & mask);
13437               /* deref_size zero extends, so no need to mask it again.  */
13438               else if (last0->dw_loc_opc != DW_OP_deref_size
13439                        || last0->dw_loc_oprnd1.v.val_int
13440                           > GET_MODE_SIZE (op_mode))
13441                 {
13442                   add_loc_descr (&op0, int_loc_descriptor (mask));
13443                   add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13444                 }
13445               if (CONST_INT_P (XEXP (rtl, 1)))
13446                 op1 = int_loc_descriptor (INTVAL (XEXP (rtl, 1)) & mask);
13447               /* deref_size zero extends, so no need to mask it again.  */
13448               else if (last1->dw_loc_opc != DW_OP_deref_size
13449                        || last1->dw_loc_oprnd1.v.val_int
13450                           > GET_MODE_SIZE (op_mode))
13451                 {
13452                   add_loc_descr (&op1, int_loc_descriptor (mask));
13453                   add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13454                 }
13455             }
13456           else
13457             {
13458               HOST_WIDE_INT bias = 1;
13459               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13460               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13461               if (CONST_INT_P (XEXP (rtl, 1)))
13462                 op1 = int_loc_descriptor ((unsigned HOST_WIDE_INT) bias
13463                                           + INTVAL (XEXP (rtl, 1)));
13464               else
13465                 add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst,
13466                                                     bias, 0));
13467             }
13468         }
13469       goto do_compare;
13470
13471     case SMIN:
13472     case SMAX:
13473     case UMIN:
13474     case UMAX:
13475       if (GET_MODE_CLASS (GET_MODE (XEXP (rtl, 0))) != MODE_INT
13476           || GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) > DWARF2_ADDR_SIZE
13477           || GET_MODE (XEXP (rtl, 0)) != GET_MODE (XEXP (rtl, 1)))
13478         break;
13479
13480       op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13481                                 VAR_INIT_STATUS_INITIALIZED);
13482       op1 = mem_loc_descriptor (XEXP (rtl, 1), mode,
13483                                 VAR_INIT_STATUS_INITIALIZED);
13484
13485       if (op0 == 0 || op1 == 0)
13486         break;
13487
13488       add_loc_descr (&op0, new_loc_descr (DW_OP_dup, 0, 0));
13489       add_loc_descr (&op1, new_loc_descr (DW_OP_swap, 0, 0));
13490       add_loc_descr (&op1, new_loc_descr (DW_OP_over, 0, 0));
13491       if (GET_CODE (rtl) == UMIN || GET_CODE (rtl) == UMAX)
13492         {
13493           if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13494             {
13495               HOST_WIDE_INT mask = GET_MODE_MASK (GET_MODE (XEXP (rtl, 0)));
13496               add_loc_descr (&op0, int_loc_descriptor (mask));
13497               add_loc_descr (&op0, new_loc_descr (DW_OP_and, 0, 0));
13498               add_loc_descr (&op1, int_loc_descriptor (mask));
13499               add_loc_descr (&op1, new_loc_descr (DW_OP_and, 0, 0));
13500             }
13501           else
13502             {
13503               HOST_WIDE_INT bias = 1;
13504               bias <<= (DWARF2_ADDR_SIZE * BITS_PER_UNIT - 1);
13505               add_loc_descr (&op0, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13506               add_loc_descr (&op1, new_loc_descr (DW_OP_plus_uconst, bias, 0));
13507             }
13508         }
13509       else if (GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0))) < DWARF2_ADDR_SIZE)
13510         {
13511           int shift = DWARF2_ADDR_SIZE
13512                       - GET_MODE_SIZE (GET_MODE (XEXP (rtl, 0)));
13513           shift *= BITS_PER_UNIT;
13514           add_loc_descr (&op0, int_loc_descriptor (shift));
13515           add_loc_descr (&op0, new_loc_descr (DW_OP_shl, 0, 0));
13516           add_loc_descr (&op1, int_loc_descriptor (shift));
13517           add_loc_descr (&op1, new_loc_descr (DW_OP_shl, 0, 0));
13518         }
13519
13520       if (GET_CODE (rtl) == SMIN || GET_CODE (rtl) == UMIN)
13521         op = DW_OP_lt;
13522       else
13523         op = DW_OP_gt;
13524       mem_loc_result = op0;
13525       add_loc_descr (&mem_loc_result, op1);
13526       add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13527       {
13528         dw_loc_descr_ref bra_node, drop_node;
13529
13530         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
13531         add_loc_descr (&mem_loc_result, bra_node);
13532         add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_swap, 0, 0));
13533         drop_node = new_loc_descr (DW_OP_drop, 0, 0);
13534         add_loc_descr (&mem_loc_result, drop_node);
13535         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
13536         bra_node->dw_loc_oprnd1.v.val_loc = drop_node;
13537       }
13538       break;
13539
13540     case ZERO_EXTRACT:
13541     case SIGN_EXTRACT:
13542       if (CONST_INT_P (XEXP (rtl, 1))
13543           && CONST_INT_P (XEXP (rtl, 2))
13544           && ((unsigned) INTVAL (XEXP (rtl, 1))
13545               + (unsigned) INTVAL (XEXP (rtl, 2))
13546               <= GET_MODE_BITSIZE (GET_MODE (rtl)))
13547           && GET_MODE_BITSIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13548           && GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0))) <= DWARF2_ADDR_SIZE)
13549         {
13550           int shift, size;
13551           op0 = mem_loc_descriptor (XEXP (rtl, 0), mode,
13552                                     VAR_INIT_STATUS_INITIALIZED);
13553           if (op0 == 0)
13554             break;
13555           if (GET_CODE (rtl) == SIGN_EXTRACT)
13556             op = DW_OP_shra;
13557           else
13558             op = DW_OP_shr;
13559           mem_loc_result = op0;
13560           size = INTVAL (XEXP (rtl, 1));
13561           shift = INTVAL (XEXP (rtl, 2));
13562           if (BITS_BIG_ENDIAN)
13563             shift = GET_MODE_BITSIZE (GET_MODE (XEXP (rtl, 0)))
13564                     - shift - size;
13565           if (shift + size != (int) DWARF2_ADDR_SIZE)
13566             {
13567               add_loc_descr (&mem_loc_result,
13568                              int_loc_descriptor (DWARF2_ADDR_SIZE
13569                                                  - shift - size));
13570               add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_shl, 0, 0));
13571             }
13572           if (size != (int) DWARF2_ADDR_SIZE)
13573             {
13574               add_loc_descr (&mem_loc_result,
13575                              int_loc_descriptor (DWARF2_ADDR_SIZE - size));
13576               add_loc_descr (&mem_loc_result, new_loc_descr (op, 0, 0));
13577             }
13578         }
13579       break;
13580
13581     case COMPARE:
13582     case IF_THEN_ELSE:
13583     case ROTATE:
13584     case ROTATERT:
13585     case TRUNCATE:
13586       /* In theory, we could implement the above.  */
13587       /* DWARF cannot represent the unsigned compare operations
13588          natively.  */
13589     case SS_MULT:
13590     case US_MULT:
13591     case SS_DIV:
13592     case US_DIV:
13593     case SS_PLUS:
13594     case US_PLUS:
13595     case SS_MINUS:
13596     case US_MINUS:
13597     case SS_NEG:
13598     case US_NEG:
13599     case SS_ABS:
13600     case SS_ASHIFT:
13601     case US_ASHIFT:
13602     case SS_TRUNCATE:
13603     case US_TRUNCATE:
13604     case UDIV:
13605     case UNORDERED:
13606     case ORDERED:
13607     case UNEQ:
13608     case UNGE:
13609     case UNGT:
13610     case UNLE:
13611     case UNLT:
13612     case LTGT:
13613     case FLOAT_EXTEND:
13614     case FLOAT_TRUNCATE:
13615     case FLOAT:
13616     case UNSIGNED_FLOAT:
13617     case FIX:
13618     case UNSIGNED_FIX:
13619     case FRACT_CONVERT:
13620     case UNSIGNED_FRACT_CONVERT:
13621     case SAT_FRACT:
13622     case UNSIGNED_SAT_FRACT:
13623     case SQRT:
13624     case BSWAP:
13625     case FFS:
13626     case CLZ:
13627     case CTZ:
13628     case POPCOUNT:
13629     case PARITY:
13630     case ASM_OPERANDS:
13631     case VEC_MERGE:
13632     case VEC_SELECT:
13633     case VEC_CONCAT:
13634     case VEC_DUPLICATE:
13635     case UNSPEC:
13636     case HIGH:
13637       /* If delegitimize_address couldn't do anything with the UNSPEC, we
13638          can't express it in the debug info.  This can happen e.g. with some
13639          TLS UNSPECs.  */
13640       break;
13641
13642     case CONST_STRING:
13643       resolve_one_addr (&rtl, NULL);
13644       goto symref;
13645
13646     default:
13647 #ifdef ENABLE_CHECKING
13648       print_rtl (stderr, rtl);
13649       gcc_unreachable ();
13650 #else
13651       break;
13652 #endif
13653     }
13654
13655   if (mem_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13656     add_loc_descr (&mem_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13657
13658   return mem_loc_result;
13659 }
13660
13661 /* Return a descriptor that describes the concatenation of two locations.
13662    This is typically a complex variable.  */
13663
13664 static dw_loc_descr_ref
13665 concat_loc_descriptor (rtx x0, rtx x1, enum var_init_status initialized)
13666 {
13667   dw_loc_descr_ref cc_loc_result = NULL;
13668   dw_loc_descr_ref x0_ref
13669     = loc_descriptor (x0, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13670   dw_loc_descr_ref x1_ref
13671     = loc_descriptor (x1, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13672
13673   if (x0_ref == 0 || x1_ref == 0)
13674     return 0;
13675
13676   cc_loc_result = x0_ref;
13677   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x0)));
13678
13679   add_loc_descr (&cc_loc_result, x1_ref);
13680   add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x1)));
13681
13682   if (initialized == VAR_INIT_STATUS_UNINITIALIZED)
13683     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13684
13685   return cc_loc_result;
13686 }
13687
13688 /* Return a descriptor that describes the concatenation of N
13689    locations.  */
13690
13691 static dw_loc_descr_ref
13692 concatn_loc_descriptor (rtx concatn, enum var_init_status initialized)
13693 {
13694   unsigned int i;
13695   dw_loc_descr_ref cc_loc_result = NULL;
13696   unsigned int n = XVECLEN (concatn, 0);
13697
13698   for (i = 0; i < n; ++i)
13699     {
13700       dw_loc_descr_ref ref;
13701       rtx x = XVECEXP (concatn, 0, i);
13702
13703       ref = loc_descriptor (x, VOIDmode, VAR_INIT_STATUS_INITIALIZED);
13704       if (ref == NULL)
13705         return NULL;
13706
13707       add_loc_descr (&cc_loc_result, ref);
13708       add_loc_descr_op_piece (&cc_loc_result, GET_MODE_SIZE (GET_MODE (x)));
13709     }
13710
13711   if (cc_loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED)
13712     add_loc_descr (&cc_loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0));
13713
13714   return cc_loc_result;
13715 }
13716
13717 /* Output a proper Dwarf location descriptor for a variable or parameter
13718    which is either allocated in a register or in a memory location.  For a
13719    register, we just generate an OP_REG and the register number.  For a
13720    memory location we provide a Dwarf postfix expression describing how to
13721    generate the (dynamic) address of the object onto the address stack.
13722
13723    MODE is mode of the decl if this loc_descriptor is going to be used in
13724    .debug_loc section where DW_OP_stack_value and DW_OP_implicit_value are
13725    allowed, VOIDmode otherwise.
13726
13727    If we don't know how to describe it, return 0.  */
13728
13729 static dw_loc_descr_ref
13730 loc_descriptor (rtx rtl, enum machine_mode mode,
13731                 enum var_init_status initialized)
13732 {
13733   dw_loc_descr_ref loc_result = NULL;
13734
13735   switch (GET_CODE (rtl))
13736     {
13737     case SUBREG:
13738       /* The case of a subreg may arise when we have a local (register)
13739          variable or a formal (register) parameter which doesn't quite fill
13740          up an entire register.  For now, just assume that it is
13741          legitimate to make the Dwarf info refer to the whole register which
13742          contains the given subreg.  */
13743       loc_result = loc_descriptor (SUBREG_REG (rtl), mode, initialized);
13744       break;
13745
13746     case REG:
13747       loc_result = reg_loc_descriptor (rtl, initialized);
13748       break;
13749
13750     case SIGN_EXTEND:
13751     case ZERO_EXTEND:
13752       loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13753       break;
13754
13755     case MEM:
13756       loc_result = mem_loc_descriptor (XEXP (rtl, 0), GET_MODE (rtl),
13757                                        initialized);
13758       if (loc_result == NULL)
13759         loc_result = tls_mem_loc_descriptor (rtl);
13760       if (loc_result == NULL)
13761         {
13762           rtx new_rtl = avoid_constant_pool_reference (rtl);
13763           if (new_rtl != rtl)
13764             loc_result = loc_descriptor (new_rtl, mode, initialized);
13765         }
13766       break;
13767
13768     case CONCAT:
13769       loc_result = concat_loc_descriptor (XEXP (rtl, 0), XEXP (rtl, 1),
13770                                           initialized);
13771       break;
13772
13773     case CONCATN:
13774       loc_result = concatn_loc_descriptor (rtl, initialized);
13775       break;
13776
13777     case VAR_LOCATION:
13778       /* Single part.  */
13779       if (GET_CODE (PAT_VAR_LOCATION_LOC (rtl)) != PARALLEL)
13780         {
13781           rtx loc = PAT_VAR_LOCATION_LOC (rtl);
13782           if (GET_CODE (loc) == EXPR_LIST)
13783             loc = XEXP (loc, 0);
13784           loc_result = loc_descriptor (loc, mode, initialized);
13785           break;
13786         }
13787
13788       rtl = XEXP (rtl, 1);
13789       /* FALLTHRU */
13790
13791     case PARALLEL:
13792       {
13793         rtvec par_elems = XVEC (rtl, 0);
13794         int num_elem = GET_NUM_ELEM (par_elems);
13795         enum machine_mode mode;
13796         int i;
13797
13798         /* Create the first one, so we have something to add to.  */
13799         loc_result = loc_descriptor (XEXP (RTVEC_ELT (par_elems, 0), 0),
13800                                      VOIDmode, initialized);
13801         if (loc_result == NULL)
13802           return NULL;
13803         mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, 0), 0));
13804         add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13805         for (i = 1; i < num_elem; i++)
13806           {
13807             dw_loc_descr_ref temp;
13808
13809             temp = loc_descriptor (XEXP (RTVEC_ELT (par_elems, i), 0),
13810                                    VOIDmode, initialized);
13811             if (temp == NULL)
13812               return NULL;
13813             add_loc_descr (&loc_result, temp);
13814             mode = GET_MODE (XEXP (RTVEC_ELT (par_elems, i), 0));
13815             add_loc_descr_op_piece (&loc_result, GET_MODE_SIZE (mode));
13816           }
13817       }
13818       break;
13819
13820     case CONST_INT:
13821       if (mode != VOIDmode && mode != BLKmode)
13822         loc_result = address_of_int_loc_descriptor (GET_MODE_SIZE (mode),
13823                                                     INTVAL (rtl));
13824       break;
13825
13826     case CONST_DOUBLE:
13827       if (mode == VOIDmode)
13828         mode = GET_MODE (rtl);
13829
13830       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13831         {
13832           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13833
13834           /* Note that a CONST_DOUBLE rtx could represent either an integer
13835              or a floating-point constant.  A CONST_DOUBLE is used whenever
13836              the constant requires more than one word in order to be
13837              adequately represented.  We output CONST_DOUBLEs as blocks.  */
13838           loc_result = new_loc_descr (DW_OP_implicit_value,
13839                                       GET_MODE_SIZE (mode), 0);
13840           if (SCALAR_FLOAT_MODE_P (mode))
13841             {
13842               unsigned int length = GET_MODE_SIZE (mode);
13843               unsigned char *array = GGC_NEWVEC (unsigned char, length);
13844
13845               insert_float (rtl, array);
13846               loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13847               loc_result->dw_loc_oprnd2.v.val_vec.length = length / 4;
13848               loc_result->dw_loc_oprnd2.v.val_vec.elt_size = 4;
13849               loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13850             }
13851           else
13852             {
13853               loc_result->dw_loc_oprnd2.val_class = dw_val_class_const_double;
13854               loc_result->dw_loc_oprnd2.v.val_double.high
13855                 = CONST_DOUBLE_HIGH (rtl);
13856               loc_result->dw_loc_oprnd2.v.val_double.low
13857                 = CONST_DOUBLE_LOW (rtl);
13858             }
13859         }
13860       break;
13861
13862     case CONST_VECTOR:
13863       if (mode == VOIDmode)
13864         mode = GET_MODE (rtl);
13865
13866       if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
13867         {
13868           unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
13869           unsigned int length = CONST_VECTOR_NUNITS (rtl);
13870           unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
13871           unsigned int i;
13872           unsigned char *p;
13873
13874           gcc_assert (mode == GET_MODE (rtl) || VOIDmode == GET_MODE (rtl));
13875           switch (GET_MODE_CLASS (mode))
13876             {
13877             case MODE_VECTOR_INT:
13878               for (i = 0, p = array; i < length; i++, p += elt_size)
13879                 {
13880                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13881                   HOST_WIDE_INT lo, hi;
13882
13883                   switch (GET_CODE (elt))
13884                     {
13885                     case CONST_INT:
13886                       lo = INTVAL (elt);
13887                       hi = -(lo < 0);
13888                       break;
13889
13890                     case CONST_DOUBLE:
13891                       lo = CONST_DOUBLE_LOW (elt);
13892                       hi = CONST_DOUBLE_HIGH (elt);
13893                       break;
13894
13895                     default:
13896                       gcc_unreachable ();
13897                     }
13898
13899                   if (elt_size <= sizeof (HOST_WIDE_INT))
13900                     insert_int (lo, elt_size, p);
13901                   else
13902                     {
13903                       unsigned char *p0 = p;
13904                       unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
13905
13906                       gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
13907                       if (WORDS_BIG_ENDIAN)
13908                         {
13909                           p0 = p1;
13910                           p1 = p;
13911                         }
13912                       insert_int (lo, sizeof (HOST_WIDE_INT), p0);
13913                       insert_int (hi, sizeof (HOST_WIDE_INT), p1);
13914                     }
13915                 }
13916               break;
13917
13918             case MODE_VECTOR_FLOAT:
13919               for (i = 0, p = array; i < length; i++, p += elt_size)
13920                 {
13921                   rtx elt = CONST_VECTOR_ELT (rtl, i);
13922                   insert_float (elt, p);
13923                 }
13924               break;
13925
13926             default:
13927               gcc_unreachable ();
13928             }
13929
13930           loc_result = new_loc_descr (DW_OP_implicit_value,
13931                                       length * elt_size, 0);
13932           loc_result->dw_loc_oprnd2.val_class = dw_val_class_vec;
13933           loc_result->dw_loc_oprnd2.v.val_vec.length = length;
13934           loc_result->dw_loc_oprnd2.v.val_vec.elt_size = elt_size;
13935           loc_result->dw_loc_oprnd2.v.val_vec.array = array;
13936         }
13937       break;
13938
13939     case CONST:
13940       if (mode == VOIDmode
13941           || GET_CODE (XEXP (rtl, 0)) == CONST_INT
13942           || GET_CODE (XEXP (rtl, 0)) == CONST_DOUBLE
13943           || GET_CODE (XEXP (rtl, 0)) == CONST_VECTOR)
13944         {
13945           loc_result = loc_descriptor (XEXP (rtl, 0), mode, initialized);
13946           break;
13947         }
13948       /* FALLTHROUGH */
13949     case SYMBOL_REF:
13950       if (!const_ok_for_output (rtl))
13951         break;
13952     case LABEL_REF:
13953       if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
13954           && (dwarf_version >= 4 || !dwarf_strict))
13955         {
13956           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
13957           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
13958           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
13959           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
13960           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
13961         }
13962       break;
13963
13964     default:
13965       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
13966           && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
13967           && (dwarf_version >= 4 || !dwarf_strict))
13968         {
13969           /* Value expression.  */
13970           loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
13971           if (loc_result)
13972             add_loc_descr (&loc_result,
13973                            new_loc_descr (DW_OP_stack_value, 0, 0));
13974         }
13975       break;
13976     }
13977
13978   return loc_result;
13979 }
13980
13981 /* We need to figure out what section we should use as the base for the
13982    address ranges where a given location is valid.
13983    1. If this particular DECL has a section associated with it, use that.
13984    2. If this function has a section associated with it, use that.
13985    3. Otherwise, use the text section.
13986    XXX: If you split a variable across multiple sections, we won't notice.  */
13987
13988 static const char *
13989 secname_for_decl (const_tree decl)
13990 {
13991   const char *secname;
13992
13993   if (VAR_OR_FUNCTION_DECL_P (decl) && DECL_SECTION_NAME (decl))
13994     {
13995       tree sectree = DECL_SECTION_NAME (decl);
13996       secname = TREE_STRING_POINTER (sectree);
13997     }
13998   else if (current_function_decl && DECL_SECTION_NAME (current_function_decl))
13999     {
14000       tree sectree = DECL_SECTION_NAME (current_function_decl);
14001       secname = TREE_STRING_POINTER (sectree);
14002     }
14003   else if (cfun && in_cold_section_p)
14004     secname = crtl->subsections.cold_section_label;
14005   else
14006     secname = text_section_label;
14007
14008   return secname;
14009 }
14010
14011 /* Return true when DECL_BY_REFERENCE is defined and set for DECL.  */
14012
14013 static bool
14014 decl_by_reference_p (tree decl)
14015 {
14016   return ((TREE_CODE (decl) == PARM_DECL || TREE_CODE (decl) == RESULT_DECL
14017            || TREE_CODE (decl) == VAR_DECL)
14018           && DECL_BY_REFERENCE (decl));
14019 }
14020
14021 /* Helper function for dw_loc_list.  Compute proper Dwarf location descriptor
14022    for VARLOC.  */
14023
14024 static dw_loc_descr_ref
14025 dw_loc_list_1 (tree loc, rtx varloc, int want_address,
14026                enum var_init_status initialized)
14027 {
14028   int have_address = 0;
14029   dw_loc_descr_ref descr;
14030   enum machine_mode mode;
14031
14032   if (want_address != 2)
14033     {
14034       gcc_assert (GET_CODE (varloc) == VAR_LOCATION);
14035       /* Single part.  */
14036       if (GET_CODE (PAT_VAR_LOCATION_LOC (varloc)) != PARALLEL)
14037         {
14038           varloc = PAT_VAR_LOCATION_LOC (varloc);
14039           if (GET_CODE (varloc) == EXPR_LIST)
14040             varloc = XEXP (varloc, 0);
14041           mode = GET_MODE (varloc);
14042           if (MEM_P (varloc))
14043             {
14044               rtx addr = XEXP (varloc, 0);
14045               descr = mem_loc_descriptor (addr, mode, initialized);
14046               if (descr)
14047                 have_address = 1;
14048               else
14049                 {
14050                   rtx x = avoid_constant_pool_reference (varloc);
14051                   if (x != varloc)
14052                     descr = mem_loc_descriptor (x, mode, initialized);
14053                 }
14054             }
14055           else
14056             descr = mem_loc_descriptor (varloc, mode, initialized);
14057         }
14058       else
14059         return 0;
14060     }
14061   else
14062     {
14063       descr = loc_descriptor (varloc, DECL_MODE (loc), initialized);
14064       have_address = 1;
14065     }
14066
14067   if (!descr)
14068     return 0;
14069
14070   if (want_address == 2 && !have_address
14071       && (dwarf_version >= 4 || !dwarf_strict))
14072     {
14073       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14074         {
14075           expansion_failed (loc, NULL_RTX,
14076                             "DWARF address size mismatch");
14077           return 0;
14078         }
14079       add_loc_descr (&descr, new_loc_descr (DW_OP_stack_value, 0, 0));
14080       have_address = 1;
14081     }
14082   /* Show if we can't fill the request for an address.  */
14083   if (want_address && !have_address)
14084     {
14085       expansion_failed (loc, NULL_RTX,
14086                         "Want address and only have value");
14087       return 0;
14088     }
14089
14090   /* If we've got an address and don't want one, dereference.  */
14091   if (!want_address && have_address)
14092     {
14093       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14094       enum dwarf_location_atom op;
14095
14096       if (size > DWARF2_ADDR_SIZE || size == -1)
14097         {
14098           expansion_failed (loc, NULL_RTX,
14099                             "DWARF address size mismatch");
14100           return 0;
14101         }
14102       else if (size == DWARF2_ADDR_SIZE)
14103         op = DW_OP_deref;
14104       else
14105         op = DW_OP_deref_size;
14106
14107       add_loc_descr (&descr, new_loc_descr (op, size, 0));
14108     }
14109
14110   return descr;
14111 }
14112
14113 /* Return the dwarf representation of the location list LOC_LIST of
14114    DECL.  WANT_ADDRESS has the same meaning as in loc_list_from_tree
14115    function.  */
14116
14117 static dw_loc_list_ref
14118 dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
14119 {
14120   const char *endname, *secname;
14121   rtx varloc;
14122   enum var_init_status initialized;
14123   struct var_loc_node *node;
14124   dw_loc_descr_ref descr;
14125   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
14126   dw_loc_list_ref list = NULL;
14127   dw_loc_list_ref *listp = &list;
14128
14129   /* Now that we know what section we are using for a base,
14130      actually construct the list of locations.
14131      The first location information is what is passed to the
14132      function that creates the location list, and the remaining
14133      locations just get added on to that list.
14134      Note that we only know the start address for a location
14135      (IE location changes), so to build the range, we use
14136      the range [current location start, next location start].
14137      This means we have to special case the last node, and generate
14138      a range of [last location start, end of function label].  */
14139
14140   secname = secname_for_decl (decl);
14141
14142   for (node = loc_list->first; node->next; node = node->next)
14143     if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14144       {
14145         /* The variable has a location between NODE->LABEL and
14146            NODE->NEXT->LABEL.  */
14147         initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14148         varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14149         descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14150         if (descr)
14151           {
14152             *listp = new_loc_list (descr, node->label, node->next->label,
14153                                    secname);
14154             listp = &(*listp)->dw_loc_next;
14155           }
14156       }
14157
14158   /* If the variable has a location at the last label
14159      it keeps its location until the end of function.  */
14160   if (NOTE_VAR_LOCATION_LOC (node->var_loc_note) != NULL_RTX)
14161     {
14162       initialized = NOTE_VAR_LOCATION_STATUS (node->var_loc_note);
14163       varloc = NOTE_VAR_LOCATION (node->var_loc_note);
14164       descr = dw_loc_list_1 (decl, varloc, want_address, initialized);
14165       if (descr)
14166         {
14167           if (!current_function_decl)
14168             endname = text_end_label;
14169           else
14170             {
14171               ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
14172                                            current_function_funcdef_no);
14173               endname = ggc_strdup (label_id);
14174             }
14175
14176           *listp = new_loc_list (descr, node->label, endname, secname);
14177           listp = &(*listp)->dw_loc_next;
14178         }
14179     }
14180
14181   /* Try to avoid the overhead of a location list emitting a location
14182      expression instead, but only if we didn't have more than one
14183      location entry in the first place.  If some entries were not
14184      representable, we don't want to pretend a single entry that was
14185      applies to the entire scope in which the variable is
14186      available.  */
14187   if (list && loc_list->first->next)
14188     gen_llsym (list);
14189
14190   return list;
14191 }
14192
14193 /* Return if the loc_list has only single element and thus can be represented
14194    as location description.   */
14195
14196 static bool
14197 single_element_loc_list_p (dw_loc_list_ref list)
14198 {
14199   gcc_assert (!list->dw_loc_next || list->ll_symbol);
14200   return !list->ll_symbol;
14201 }
14202
14203 /* To each location in list LIST add loc descr REF.  */
14204
14205 static void
14206 add_loc_descr_to_each (dw_loc_list_ref list, dw_loc_descr_ref ref)
14207 {
14208   dw_loc_descr_ref copy;
14209   add_loc_descr (&list->expr, ref);
14210   list = list->dw_loc_next;
14211   while (list)
14212     {
14213       copy = GGC_CNEW (dw_loc_descr_node);
14214       memcpy (copy, ref, sizeof (dw_loc_descr_node));
14215       add_loc_descr (&list->expr, copy);
14216       while (copy->dw_loc_next)
14217         {
14218           dw_loc_descr_ref new_copy = GGC_CNEW (dw_loc_descr_node);
14219           memcpy (new_copy, copy->dw_loc_next, sizeof (dw_loc_descr_node));
14220           copy->dw_loc_next = new_copy;
14221           copy = new_copy;
14222         }
14223       list = list->dw_loc_next;
14224     }
14225 }
14226
14227 /* Given two lists RET and LIST
14228    produce location list that is result of adding expression in LIST
14229    to expression in RET on each possition in program.
14230    Might be destructive on both RET and LIST.
14231
14232    TODO: We handle only simple cases of RET or LIST having at most one
14233    element. General case would inolve sorting the lists in program order
14234    and merging them that will need some additional work.
14235    Adding that will improve quality of debug info especially for SRA-ed
14236    structures.  */
14237
14238 static void
14239 add_loc_list (dw_loc_list_ref *ret, dw_loc_list_ref list)
14240 {
14241   if (!list)
14242     return;
14243   if (!*ret)
14244     {
14245       *ret = list;
14246       return;
14247     }
14248   if (!list->dw_loc_next)
14249     {
14250       add_loc_descr_to_each (*ret, list->expr);
14251       return;
14252     }
14253   if (!(*ret)->dw_loc_next)
14254     {
14255       add_loc_descr_to_each (list, (*ret)->expr);
14256       *ret = list;
14257       return;
14258     }
14259   expansion_failed (NULL_TREE, NULL_RTX,
14260                     "Don't know how to merge two non-trivial"
14261                     " location lists.\n");
14262   *ret = NULL;
14263   return;
14264 }
14265
14266 /* LOC is constant expression.  Try a luck, look it up in constant
14267    pool and return its loc_descr of its address.  */
14268
14269 static dw_loc_descr_ref
14270 cst_pool_loc_descr (tree loc)
14271 {
14272   /* Get an RTL for this, if something has been emitted.  */
14273   rtx rtl = lookup_constant_def (loc);
14274   enum machine_mode mode;
14275
14276   if (!rtl || !MEM_P (rtl))
14277     {
14278       gcc_assert (!rtl);
14279       return 0;
14280     }
14281   gcc_assert (GET_CODE (XEXP (rtl, 0)) == SYMBOL_REF);
14282
14283   /* TODO: We might get more coverage if we was actually delaying expansion
14284      of all expressions till end of compilation when constant pools are fully
14285      populated.  */
14286   if (!TREE_ASM_WRITTEN (SYMBOL_REF_DECL (XEXP (rtl, 0))))
14287     {
14288       expansion_failed (loc, NULL_RTX,
14289                         "CST value in contant pool but not marked.");
14290       return 0;
14291     }
14292   mode = GET_MODE (rtl);
14293   rtl = XEXP (rtl, 0);
14294   return mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14295 }
14296
14297 /* Return dw_loc_list representing address of addr_expr LOC
14298    by looking for innder INDIRECT_REF expression and turing it
14299    into simple arithmetics.  */
14300
14301 static dw_loc_list_ref
14302 loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
14303 {
14304   tree obj, offset;
14305   HOST_WIDE_INT bitsize, bitpos, bytepos;
14306   enum machine_mode mode;
14307   int volatilep;
14308   int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14309   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14310
14311   obj = get_inner_reference (TREE_OPERAND (loc, 0),
14312                              &bitsize, &bitpos, &offset, &mode,
14313                              &unsignedp, &volatilep, false);
14314   STRIP_NOPS (obj);
14315   if (bitpos % BITS_PER_UNIT)
14316     {
14317       expansion_failed (loc, NULL_RTX, "bitfield access");
14318       return 0;
14319     }
14320   if (!INDIRECT_REF_P (obj))
14321     {
14322       expansion_failed (obj,
14323                         NULL_RTX, "no indirect ref in inner refrence");
14324       return 0;
14325     }
14326   if (!offset && !bitpos)
14327     list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
14328   else if (toplev
14329            && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
14330            && (dwarf_version >= 4 || !dwarf_strict))
14331     {
14332       list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
14333       if (!list_ret)
14334         return 0;
14335       if (offset)
14336         {
14337           /* Variable offset.  */
14338           list_ret1 = loc_list_from_tree (offset, 0);
14339           if (list_ret1 == 0)
14340             return 0;
14341           add_loc_list (&list_ret, list_ret1);
14342           if (!list_ret)
14343             return 0;
14344           add_loc_descr_to_each (list_ret,
14345                                  new_loc_descr (DW_OP_plus, 0, 0));
14346         }
14347       bytepos = bitpos / BITS_PER_UNIT;
14348       if (bytepos > 0)
14349         add_loc_descr_to_each (list_ret,
14350                                new_loc_descr (DW_OP_plus_uconst,
14351                                               bytepos, 0));
14352       else if (bytepos < 0)
14353         loc_list_plus_const (list_ret, bytepos);
14354       add_loc_descr_to_each (list_ret,
14355                              new_loc_descr (DW_OP_stack_value, 0, 0));
14356     }
14357   return list_ret;
14358 }
14359
14360
14361 /* Generate Dwarf location list representing LOC.
14362    If WANT_ADDRESS is false, expression computing LOC will be computed
14363    If WANT_ADDRESS is 1, expression computing address of LOC will be returned
14364    if WANT_ADDRESS is 2, expression computing address useable in location
14365      will be returned (i.e. DW_OP_reg can be used
14366      to refer to register values).  */
14367
14368 static dw_loc_list_ref
14369 loc_list_from_tree (tree loc, int want_address)
14370 {
14371   dw_loc_descr_ref ret = NULL, ret1 = NULL;
14372   dw_loc_list_ref list_ret = NULL, list_ret1 = NULL;
14373   int have_address = 0;
14374   enum dwarf_location_atom op;
14375
14376   /* ??? Most of the time we do not take proper care for sign/zero
14377      extending the values properly.  Hopefully this won't be a real
14378      problem...  */
14379
14380   switch (TREE_CODE (loc))
14381     {
14382     case ERROR_MARK:
14383       expansion_failed (loc, NULL_RTX, "ERROR_MARK");
14384       return 0;
14385
14386     case PLACEHOLDER_EXPR:
14387       /* This case involves extracting fields from an object to determine the
14388          position of other fields.  We don't try to encode this here.  The
14389          only user of this is Ada, which encodes the needed information using
14390          the names of types.  */
14391       expansion_failed (loc, NULL_RTX, "PLACEHOLDER_EXPR");
14392       return 0;
14393
14394     case CALL_EXPR:
14395       expansion_failed (loc, NULL_RTX, "CALL_EXPR");
14396       /* There are no opcodes for these operations.  */
14397       return 0;
14398
14399     case PREINCREMENT_EXPR:
14400     case PREDECREMENT_EXPR:
14401     case POSTINCREMENT_EXPR:
14402     case POSTDECREMENT_EXPR:
14403       expansion_failed (loc, NULL_RTX, "PRE/POST INDCREMENT/DECREMENT");
14404       /* There are no opcodes for these operations.  */
14405       return 0;
14406
14407     case ADDR_EXPR:
14408       /* If we already want an address, see if there is INDIRECT_REF inside
14409          e.g. for &this->field.  */
14410       if (want_address)
14411         {
14412           list_ret = loc_list_for_address_of_addr_expr_of_indirect_ref
14413                        (loc, want_address == 2);
14414           if (list_ret)
14415             have_address = 1;
14416           else if (decl_address_ip_invariant_p (TREE_OPERAND (loc, 0))
14417                    && (ret = cst_pool_loc_descr (loc)))
14418             have_address = 1;
14419         }
14420         /* Otherwise, process the argument and look for the address.  */
14421       if (!list_ret && !ret)
14422         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 1);
14423       else
14424         {
14425           if (want_address)
14426             expansion_failed (loc, NULL_RTX, "need address of ADDR_EXPR");
14427           return NULL;
14428         }
14429       break;
14430
14431     case VAR_DECL:
14432       if (DECL_THREAD_LOCAL_P (loc))
14433         {
14434           rtx rtl;
14435           enum dwarf_location_atom first_op;
14436           enum dwarf_location_atom second_op;
14437           bool dtprel = false;
14438
14439           if (targetm.have_tls)
14440             {
14441               /* If this is not defined, we have no way to emit the
14442                  data.  */
14443               if (!targetm.asm_out.output_dwarf_dtprel)
14444                 return 0;
14445
14446                /* The way DW_OP_GNU_push_tls_address is specified, we
14447                   can only look up addresses of objects in the current
14448                   module.  */
14449               if (DECL_EXTERNAL (loc) && !targetm.binds_local_p (loc))
14450                 return 0;
14451               first_op = DW_OP_addr;
14452               dtprel = true;
14453               second_op = DW_OP_GNU_push_tls_address;
14454             }
14455           else
14456             {
14457               if (!targetm.emutls.debug_form_tls_address
14458                   || !(dwarf_version >= 3 || !dwarf_strict))
14459                 return 0;
14460               loc = emutls_decl (loc);
14461               first_op = DW_OP_addr;
14462               second_op = DW_OP_form_tls_address;
14463             }
14464
14465           rtl = rtl_for_decl_location (loc);
14466           if (rtl == NULL_RTX)
14467             return 0;
14468
14469           if (!MEM_P (rtl))
14470             return 0;
14471           rtl = XEXP (rtl, 0);
14472           if (! CONSTANT_P (rtl))
14473             return 0;
14474
14475           ret = new_loc_descr (first_op, 0, 0);
14476           ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14477           ret->dw_loc_oprnd1.v.val_addr = rtl;
14478           ret->dtprel = dtprel;
14479
14480           ret1 = new_loc_descr (second_op, 0, 0);
14481           add_loc_descr (&ret, ret1);
14482
14483           have_address = 1;
14484           break;
14485         }
14486       /* FALLTHRU */
14487
14488     case PARM_DECL:
14489       if (DECL_HAS_VALUE_EXPR_P (loc))
14490         return loc_list_from_tree (DECL_VALUE_EXPR (loc),
14491                                    want_address);
14492       /* FALLTHRU */
14493
14494     case RESULT_DECL:
14495     case FUNCTION_DECL:
14496       {
14497         rtx rtl;
14498         var_loc_list *loc_list = lookup_decl_loc (loc);
14499
14500         if (loc_list && loc_list->first)
14501           {
14502             list_ret = dw_loc_list (loc_list, loc, want_address);
14503             have_address = want_address != 0;
14504             break;
14505           }
14506         rtl = rtl_for_decl_location (loc);
14507         if (rtl == NULL_RTX)
14508           {
14509             expansion_failed (loc, NULL_RTX, "DECL has no RTL");
14510             return 0;
14511           }
14512         else if (CONST_INT_P (rtl))
14513           {
14514             HOST_WIDE_INT val = INTVAL (rtl);
14515             if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14516               val &= GET_MODE_MASK (DECL_MODE (loc));
14517             ret = int_loc_descriptor (val);
14518           }
14519         else if (GET_CODE (rtl) == CONST_STRING)
14520           {
14521             expansion_failed (loc, NULL_RTX, "CONST_STRING");
14522             return 0;
14523           }
14524         else if (CONSTANT_P (rtl) && const_ok_for_output (rtl))
14525           {
14526             ret = new_loc_descr (DW_OP_addr, 0, 0);
14527             ret->dw_loc_oprnd1.val_class = dw_val_class_addr;
14528             ret->dw_loc_oprnd1.v.val_addr = rtl;
14529           }
14530         else
14531           {
14532             enum machine_mode mode;
14533
14534             /* Certain constructs can only be represented at top-level.  */
14535             if (want_address == 2)
14536               {
14537                 ret = loc_descriptor (rtl, VOIDmode,
14538                                       VAR_INIT_STATUS_INITIALIZED);
14539                 have_address = 1;
14540               }
14541             else
14542               {
14543                 mode = GET_MODE (rtl);
14544                 if (MEM_P (rtl))
14545                   {
14546                     rtl = XEXP (rtl, 0);
14547                     have_address = 1;
14548                   }
14549                 ret = mem_loc_descriptor (rtl, mode, VAR_INIT_STATUS_INITIALIZED);
14550               }
14551             if (!ret)
14552               expansion_failed (loc, rtl,
14553                                 "failed to produce loc descriptor for rtl");
14554           }
14555       }
14556       break;
14557
14558     case INDIRECT_REF:
14559     case ALIGN_INDIRECT_REF:
14560     case MISALIGNED_INDIRECT_REF:
14561       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14562       have_address = 1;
14563       break;
14564
14565     case COMPOUND_EXPR:
14566       return loc_list_from_tree (TREE_OPERAND (loc, 1), want_address);
14567
14568     CASE_CONVERT:
14569     case VIEW_CONVERT_EXPR:
14570     case SAVE_EXPR:
14571     case MODIFY_EXPR:
14572       return loc_list_from_tree (TREE_OPERAND (loc, 0), want_address);
14573
14574     case COMPONENT_REF:
14575     case BIT_FIELD_REF:
14576     case ARRAY_REF:
14577     case ARRAY_RANGE_REF:
14578     case REALPART_EXPR:
14579     case IMAGPART_EXPR:
14580       {
14581         tree obj, offset;
14582         HOST_WIDE_INT bitsize, bitpos, bytepos;
14583         enum machine_mode mode;
14584         int volatilep;
14585         int unsignedp = TYPE_UNSIGNED (TREE_TYPE (loc));
14586
14587         obj = get_inner_reference (loc, &bitsize, &bitpos, &offset, &mode,
14588                                    &unsignedp, &volatilep, false);
14589
14590         gcc_assert (obj != loc);
14591
14592         list_ret = loc_list_from_tree (obj,
14593                                        want_address == 2
14594                                        && !bitpos && !offset ? 2 : 1);
14595         /* TODO: We can extract value of the small expression via shifting even
14596            for nonzero bitpos.  */
14597         if (list_ret == 0)
14598           return 0;
14599         if (bitpos % BITS_PER_UNIT != 0 || bitsize % BITS_PER_UNIT != 0)
14600           {
14601             expansion_failed (loc, NULL_RTX,
14602                               "bitfield access");
14603             return 0;
14604           }
14605
14606         if (offset != NULL_TREE)
14607           {
14608             /* Variable offset.  */
14609             list_ret1 = loc_list_from_tree (offset, 0);
14610             if (list_ret1 == 0)
14611               return 0;
14612             add_loc_list (&list_ret, list_ret1);
14613             if (!list_ret)
14614               return 0;
14615             add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus, 0, 0));
14616           }
14617
14618         bytepos = bitpos / BITS_PER_UNIT;
14619         if (bytepos > 0)
14620           add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_plus_uconst, bytepos, 0));
14621         else if (bytepos < 0)
14622           loc_list_plus_const (list_ret, bytepos);
14623
14624         have_address = 1;
14625         break;
14626       }
14627
14628     case INTEGER_CST:
14629       if ((want_address || !host_integerp (loc, 0))
14630           && (ret = cst_pool_loc_descr (loc)))
14631         have_address = 1;
14632       else if (want_address == 2
14633                && host_integerp (loc, 0)
14634                && (ret = address_of_int_loc_descriptor
14635                            (int_size_in_bytes (TREE_TYPE (loc)),
14636                             tree_low_cst (loc, 0))))
14637         have_address = 1;
14638       else if (host_integerp (loc, 0))
14639         ret = int_loc_descriptor (tree_low_cst (loc, 0));
14640       else
14641         {
14642           expansion_failed (loc, NULL_RTX,
14643                             "Integer operand is not host integer");
14644           return 0;
14645         }
14646       break;
14647
14648     case CONSTRUCTOR:
14649     case REAL_CST:
14650     case STRING_CST:
14651     case COMPLEX_CST:
14652       if ((ret = cst_pool_loc_descr (loc)))
14653         have_address = 1;
14654       else
14655       /* We can construct small constants here using int_loc_descriptor.  */
14656         expansion_failed (loc, NULL_RTX,
14657                           "constructor or constant not in constant pool");
14658       break;
14659
14660     case TRUTH_AND_EXPR:
14661     case TRUTH_ANDIF_EXPR:
14662     case BIT_AND_EXPR:
14663       op = DW_OP_and;
14664       goto do_binop;
14665
14666     case TRUTH_XOR_EXPR:
14667     case BIT_XOR_EXPR:
14668       op = DW_OP_xor;
14669       goto do_binop;
14670
14671     case TRUTH_OR_EXPR:
14672     case TRUTH_ORIF_EXPR:
14673     case BIT_IOR_EXPR:
14674       op = DW_OP_or;
14675       goto do_binop;
14676
14677     case FLOOR_DIV_EXPR:
14678     case CEIL_DIV_EXPR:
14679     case ROUND_DIV_EXPR:
14680     case TRUNC_DIV_EXPR:
14681       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14682         return 0;
14683       op = DW_OP_div;
14684       goto do_binop;
14685
14686     case MINUS_EXPR:
14687       op = DW_OP_minus;
14688       goto do_binop;
14689
14690     case FLOOR_MOD_EXPR:
14691     case CEIL_MOD_EXPR:
14692     case ROUND_MOD_EXPR:
14693     case TRUNC_MOD_EXPR:
14694       if (TYPE_UNSIGNED (TREE_TYPE (loc)))
14695         {
14696           op = DW_OP_mod;
14697           goto do_binop;
14698         }
14699       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14700       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14701       if (list_ret == 0 || list_ret1 == 0)
14702         return 0;
14703
14704       add_loc_list (&list_ret, list_ret1);
14705       if (list_ret == 0)
14706         return 0;
14707       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14708       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_over, 0, 0));
14709       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_div, 0, 0));
14710       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_mul, 0, 0));
14711       add_loc_descr_to_each (list_ret, new_loc_descr (DW_OP_minus, 0, 0));
14712       break;
14713
14714     case MULT_EXPR:
14715       op = DW_OP_mul;
14716       goto do_binop;
14717
14718     case LSHIFT_EXPR:
14719       op = DW_OP_shl;
14720       goto do_binop;
14721
14722     case RSHIFT_EXPR:
14723       op = (TYPE_UNSIGNED (TREE_TYPE (loc)) ? DW_OP_shr : DW_OP_shra);
14724       goto do_binop;
14725
14726     case POINTER_PLUS_EXPR:
14727     case PLUS_EXPR:
14728       if (TREE_CODE (TREE_OPERAND (loc, 1)) == INTEGER_CST
14729           && host_integerp (TREE_OPERAND (loc, 1), 0))
14730         {
14731           list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14732           if (list_ret == 0)
14733             return 0;
14734
14735           loc_list_plus_const (list_ret, tree_low_cst (TREE_OPERAND (loc, 1), 0));
14736           break;
14737         }
14738
14739       op = DW_OP_plus;
14740       goto do_binop;
14741
14742     case LE_EXPR:
14743       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14744         return 0;
14745
14746       op = DW_OP_le;
14747       goto do_binop;
14748
14749     case GE_EXPR:
14750       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14751         return 0;
14752
14753       op = DW_OP_ge;
14754       goto do_binop;
14755
14756     case LT_EXPR:
14757       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14758         return 0;
14759
14760       op = DW_OP_lt;
14761       goto do_binop;
14762
14763     case GT_EXPR:
14764       if (TYPE_UNSIGNED (TREE_TYPE (TREE_OPERAND (loc, 0))))
14765         return 0;
14766
14767       op = DW_OP_gt;
14768       goto do_binop;
14769
14770     case EQ_EXPR:
14771       op = DW_OP_eq;
14772       goto do_binop;
14773
14774     case NE_EXPR:
14775       op = DW_OP_ne;
14776       goto do_binop;
14777
14778     do_binop:
14779       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14780       list_ret1 = loc_list_from_tree (TREE_OPERAND (loc, 1), 0);
14781       if (list_ret == 0 || list_ret1 == 0)
14782         return 0;
14783
14784       add_loc_list (&list_ret, list_ret1);
14785       if (list_ret == 0)
14786         return 0;
14787       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14788       break;
14789
14790     case TRUTH_NOT_EXPR:
14791     case BIT_NOT_EXPR:
14792       op = DW_OP_not;
14793       goto do_unop;
14794
14795     case ABS_EXPR:
14796       op = DW_OP_abs;
14797       goto do_unop;
14798
14799     case NEGATE_EXPR:
14800       op = DW_OP_neg;
14801       goto do_unop;
14802
14803     do_unop:
14804       list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14805       if (list_ret == 0)
14806         return 0;
14807
14808       add_loc_descr_to_each (list_ret, new_loc_descr (op, 0, 0));
14809       break;
14810
14811     case MIN_EXPR:
14812     case MAX_EXPR:
14813       {
14814         const enum tree_code code =
14815           TREE_CODE (loc) == MIN_EXPR ? GT_EXPR : LT_EXPR;
14816
14817         loc = build3 (COND_EXPR, TREE_TYPE (loc),
14818                       build2 (code, integer_type_node,
14819                               TREE_OPERAND (loc, 0), TREE_OPERAND (loc, 1)),
14820                       TREE_OPERAND (loc, 1), TREE_OPERAND (loc, 0));
14821       }
14822
14823       /* ... fall through ...  */
14824
14825     case COND_EXPR:
14826       {
14827         dw_loc_descr_ref lhs
14828           = loc_descriptor_from_tree (TREE_OPERAND (loc, 1), 0);
14829         dw_loc_list_ref rhs
14830           = loc_list_from_tree (TREE_OPERAND (loc, 2), 0);
14831         dw_loc_descr_ref bra_node, jump_node, tmp;
14832
14833         list_ret = loc_list_from_tree (TREE_OPERAND (loc, 0), 0);
14834         if (list_ret == 0 || lhs == 0 || rhs == 0)
14835           return 0;
14836
14837         bra_node = new_loc_descr (DW_OP_bra, 0, 0);
14838         add_loc_descr_to_each (list_ret, bra_node);
14839
14840         add_loc_list (&list_ret, rhs);
14841         jump_node = new_loc_descr (DW_OP_skip, 0, 0);
14842         add_loc_descr_to_each (list_ret, jump_node);
14843
14844         add_loc_descr_to_each (list_ret, lhs);
14845         bra_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14846         bra_node->dw_loc_oprnd1.v.val_loc = lhs;
14847
14848         /* ??? Need a node to point the skip at.  Use a nop.  */
14849         tmp = new_loc_descr (DW_OP_nop, 0, 0);
14850         add_loc_descr_to_each (list_ret, tmp);
14851         jump_node->dw_loc_oprnd1.val_class = dw_val_class_loc;
14852         jump_node->dw_loc_oprnd1.v.val_loc = tmp;
14853       }
14854       break;
14855
14856     case FIX_TRUNC_EXPR:
14857       return 0;
14858
14859     default:
14860       /* Leave front-end specific codes as simply unknown.  This comes
14861          up, for instance, with the C STMT_EXPR.  */
14862       if ((unsigned int) TREE_CODE (loc)
14863           >= (unsigned int) LAST_AND_UNUSED_TREE_CODE)
14864         {
14865           expansion_failed (loc, NULL_RTX,
14866                             "language specific tree node");
14867           return 0;
14868         }
14869
14870 #ifdef ENABLE_CHECKING
14871       /* Otherwise this is a generic code; we should just lists all of
14872          these explicitly.  We forgot one.  */
14873       gcc_unreachable ();
14874 #else
14875       /* In a release build, we want to degrade gracefully: better to
14876          generate incomplete debugging information than to crash.  */
14877       return NULL;
14878 #endif
14879     }
14880
14881   if (!ret && !list_ret)
14882     return 0;
14883
14884   if (want_address == 2 && !have_address
14885       && (dwarf_version >= 4 || !dwarf_strict))
14886     {
14887       if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
14888         {
14889           expansion_failed (loc, NULL_RTX,
14890                             "DWARF address size mismatch");
14891           return 0;
14892         }
14893       if (ret)
14894         add_loc_descr (&ret, new_loc_descr (DW_OP_stack_value, 0, 0));
14895       else
14896         add_loc_descr_to_each (list_ret,
14897                                new_loc_descr (DW_OP_stack_value, 0, 0));
14898       have_address = 1;
14899     }
14900   /* Show if we can't fill the request for an address.  */
14901   if (want_address && !have_address)
14902     {
14903       expansion_failed (loc, NULL_RTX,
14904                         "Want address and only have value");
14905       return 0;
14906     }
14907
14908   gcc_assert (!ret || !list_ret);
14909
14910   /* If we've got an address and don't want one, dereference.  */
14911   if (!want_address && have_address)
14912     {
14913       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (loc));
14914
14915       if (size > DWARF2_ADDR_SIZE || size == -1)
14916         {
14917           expansion_failed (loc, NULL_RTX,
14918                             "DWARF address size mismatch");
14919           return 0;
14920         }
14921       else if (size == DWARF2_ADDR_SIZE)
14922         op = DW_OP_deref;
14923       else
14924         op = DW_OP_deref_size;
14925
14926       if (ret)
14927         add_loc_descr (&ret, new_loc_descr (op, size, 0));
14928       else
14929         add_loc_descr_to_each (list_ret, new_loc_descr (op, size, 0));
14930     }
14931   if (ret)
14932     list_ret = new_loc_list (ret, NULL, NULL, NULL);
14933
14934   return list_ret;
14935 }
14936
14937 /* Same as above but return only single location expression.  */
14938 static dw_loc_descr_ref
14939 loc_descriptor_from_tree (tree loc, int want_address)
14940 {
14941   dw_loc_list_ref ret = loc_list_from_tree (loc, want_address);
14942   if (!ret)
14943     return NULL;
14944   if (ret->dw_loc_next)
14945     {
14946       expansion_failed (loc, NULL_RTX,
14947                         "Location list where only loc descriptor needed");
14948       return NULL;
14949     }
14950   return ret->expr;
14951 }
14952
14953 /* Given a value, round it up to the lowest multiple of `boundary'
14954    which is not less than the value itself.  */
14955
14956 static inline HOST_WIDE_INT
14957 ceiling (HOST_WIDE_INT value, unsigned int boundary)
14958 {
14959   return (((value + boundary - 1) / boundary) * boundary);
14960 }
14961
14962 /* Given a pointer to what is assumed to be a FIELD_DECL node, return a
14963    pointer to the declared type for the relevant field variable, or return
14964    `integer_type_node' if the given node turns out to be an
14965    ERROR_MARK node.  */
14966
14967 static inline tree
14968 field_type (const_tree decl)
14969 {
14970   tree type;
14971
14972   if (TREE_CODE (decl) == ERROR_MARK)
14973     return integer_type_node;
14974
14975   type = DECL_BIT_FIELD_TYPE (decl);
14976   if (type == NULL_TREE)
14977     type = TREE_TYPE (decl);
14978
14979   return type;
14980 }
14981
14982 /* Given a pointer to a tree node, return the alignment in bits for
14983    it, or else return BITS_PER_WORD if the node actually turns out to
14984    be an ERROR_MARK node.  */
14985
14986 static inline unsigned
14987 simple_type_align_in_bits (const_tree type)
14988 {
14989   return (TREE_CODE (type) != ERROR_MARK) ? TYPE_ALIGN (type) : BITS_PER_WORD;
14990 }
14991
14992 static inline unsigned
14993 simple_decl_align_in_bits (const_tree decl)
14994 {
14995   return (TREE_CODE (decl) != ERROR_MARK) ? DECL_ALIGN (decl) : BITS_PER_WORD;
14996 }
14997
14998 /* Return the result of rounding T up to ALIGN.  */
14999
15000 static inline HOST_WIDE_INT
15001 round_up_to_align (HOST_WIDE_INT t, unsigned int align)
15002 {
15003   /* We must be careful if T is negative because HOST_WIDE_INT can be
15004      either "above" or "below" unsigned int as per the C promotion
15005      rules, depending on the host, thus making the signedness of the
15006      direct multiplication and division unpredictable.  */
15007   unsigned HOST_WIDE_INT u = (unsigned HOST_WIDE_INT) t;
15008
15009   u += align - 1;
15010   u /= align;
15011   u *= align;
15012
15013   return (HOST_WIDE_INT) u;
15014 }
15015
15016 /* Given a pointer to a FIELD_DECL, compute and return the byte offset of the
15017    lowest addressed byte of the "containing object" for the given FIELD_DECL,
15018    or return 0 if we are unable to determine what that offset is, either
15019    because the argument turns out to be a pointer to an ERROR_MARK node, or
15020    because the offset is actually variable.  (We can't handle the latter case
15021    just yet).  */
15022
15023 static HOST_WIDE_INT
15024 field_byte_offset (const_tree decl)
15025 {
15026   HOST_WIDE_INT object_offset_in_bits;
15027   HOST_WIDE_INT bitpos_int;
15028
15029   if (TREE_CODE (decl) == ERROR_MARK)
15030     return 0;
15031
15032   gcc_assert (TREE_CODE (decl) == FIELD_DECL);
15033
15034   /* We cannot yet cope with fields whose positions are variable, so
15035      for now, when we see such things, we simply return 0.  Someday, we may
15036      be able to handle such cases, but it will be damn difficult.  */
15037   if (! host_integerp (bit_position (decl), 0))
15038     return 0;
15039
15040   bitpos_int = int_bit_position (decl);
15041
15042 #ifdef PCC_BITFIELD_TYPE_MATTERS
15043   if (PCC_BITFIELD_TYPE_MATTERS)
15044     {
15045       tree type;
15046       tree field_size_tree;
15047       HOST_WIDE_INT deepest_bitpos;
15048       unsigned HOST_WIDE_INT field_size_in_bits;
15049       unsigned int type_align_in_bits;
15050       unsigned int decl_align_in_bits;
15051       unsigned HOST_WIDE_INT type_size_in_bits;
15052
15053       type = field_type (decl);
15054       type_size_in_bits = simple_type_size_in_bits (type);
15055       type_align_in_bits = simple_type_align_in_bits (type);
15056
15057       field_size_tree = DECL_SIZE (decl);
15058
15059       /* The size could be unspecified if there was an error, or for
15060          a flexible array member.  */
15061       if (!field_size_tree)
15062         field_size_tree = bitsize_zero_node;
15063
15064       /* If the size of the field is not constant, use the type size.  */
15065       if (host_integerp (field_size_tree, 1))
15066         field_size_in_bits = tree_low_cst (field_size_tree, 1);
15067       else
15068         field_size_in_bits = type_size_in_bits;
15069
15070       decl_align_in_bits = simple_decl_align_in_bits (decl);
15071
15072       /* The GCC front-end doesn't make any attempt to keep track of the
15073          starting bit offset (relative to the start of the containing
15074          structure type) of the hypothetical "containing object" for a
15075          bit-field.  Thus, when computing the byte offset value for the
15076          start of the "containing object" of a bit-field, we must deduce
15077          this information on our own. This can be rather tricky to do in
15078          some cases.  For example, handling the following structure type
15079          definition when compiling for an i386/i486 target (which only
15080          aligns long long's to 32-bit boundaries) can be very tricky:
15081
15082          struct S { int field1; long long field2:31; };
15083
15084          Fortunately, there is a simple rule-of-thumb which can be used
15085          in such cases.  When compiling for an i386/i486, GCC will
15086          allocate 8 bytes for the structure shown above.  It decides to
15087          do this based upon one simple rule for bit-field allocation.
15088          GCC allocates each "containing object" for each bit-field at
15089          the first (i.e. lowest addressed) legitimate alignment boundary
15090          (based upon the required minimum alignment for the declared
15091          type of the field) which it can possibly use, subject to the
15092          condition that there is still enough available space remaining
15093          in the containing object (when allocated at the selected point)
15094          to fully accommodate all of the bits of the bit-field itself.
15095
15096          This simple rule makes it obvious why GCC allocates 8 bytes for
15097          each object of the structure type shown above.  When looking
15098          for a place to allocate the "containing object" for `field2',
15099          the compiler simply tries to allocate a 64-bit "containing
15100          object" at each successive 32-bit boundary (starting at zero)
15101          until it finds a place to allocate that 64- bit field such that
15102          at least 31 contiguous (and previously unallocated) bits remain
15103          within that selected 64 bit field.  (As it turns out, for the
15104          example above, the compiler finds it is OK to allocate the
15105          "containing object" 64-bit field at bit-offset zero within the
15106          structure type.)
15107
15108          Here we attempt to work backwards from the limited set of facts
15109          we're given, and we try to deduce from those facts, where GCC
15110          must have believed that the containing object started (within
15111          the structure type). The value we deduce is then used (by the
15112          callers of this routine) to generate DW_AT_location and
15113          DW_AT_bit_offset attributes for fields (both bit-fields and, in
15114          the case of DW_AT_location, regular fields as well).  */
15115
15116       /* Figure out the bit-distance from the start of the structure to
15117          the "deepest" bit of the bit-field.  */
15118       deepest_bitpos = bitpos_int + field_size_in_bits;
15119
15120       /* This is the tricky part.  Use some fancy footwork to deduce
15121          where the lowest addressed bit of the containing object must
15122          be.  */
15123       object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15124
15125       /* Round up to type_align by default.  This works best for
15126          bitfields.  */
15127       object_offset_in_bits
15128         = round_up_to_align (object_offset_in_bits, type_align_in_bits);
15129
15130       if (object_offset_in_bits > bitpos_int)
15131         {
15132           object_offset_in_bits = deepest_bitpos - type_size_in_bits;
15133
15134           /* Round up to decl_align instead.  */
15135           object_offset_in_bits
15136             = round_up_to_align (object_offset_in_bits, decl_align_in_bits);
15137         }
15138     }
15139   else
15140 #endif
15141     object_offset_in_bits = bitpos_int;
15142
15143   return object_offset_in_bits / BITS_PER_UNIT;
15144 }
15145 \f
15146 /* The following routines define various Dwarf attributes and any data
15147    associated with them.  */
15148
15149 /* Add a location description attribute value to a DIE.
15150
15151    This emits location attributes suitable for whole variables and
15152    whole parameters.  Note that the location attributes for struct fields are
15153    generated by the routine `data_member_location_attribute' below.  */
15154
15155 static inline void
15156 add_AT_location_description (dw_die_ref die, enum dwarf_attribute attr_kind,
15157                              dw_loc_list_ref descr)
15158 {
15159   if (descr == 0)
15160     return;
15161   if (single_element_loc_list_p (descr))
15162     add_AT_loc (die, attr_kind, descr->expr);
15163   else
15164     add_AT_loc_list (die, attr_kind, descr);
15165 }
15166
15167 /* Attach the specialized form of location attribute used for data members of
15168    struct and union types.  In the special case of a FIELD_DECL node which
15169    represents a bit-field, the "offset" part of this special location
15170    descriptor must indicate the distance in bytes from the lowest-addressed
15171    byte of the containing struct or union type to the lowest-addressed byte of
15172    the "containing object" for the bit-field.  (See the `field_byte_offset'
15173    function above).
15174
15175    For any given bit-field, the "containing object" is a hypothetical object
15176    (of some integral or enum type) within which the given bit-field lives.  The
15177    type of this hypothetical "containing object" is always the same as the
15178    declared type of the individual bit-field itself (for GCC anyway... the
15179    DWARF spec doesn't actually mandate this).  Note that it is the size (in
15180    bytes) of the hypothetical "containing object" which will be given in the
15181    DW_AT_byte_size attribute for this bit-field.  (See the
15182    `byte_size_attribute' function below.)  It is also used when calculating the
15183    value of the DW_AT_bit_offset attribute.  (See the `bit_offset_attribute'
15184    function below.)  */
15185
15186 static void
15187 add_data_member_location_attribute (dw_die_ref die, tree decl)
15188 {
15189   HOST_WIDE_INT offset;
15190   dw_loc_descr_ref loc_descr = 0;
15191
15192   if (TREE_CODE (decl) == TREE_BINFO)
15193     {
15194       /* We're working on the TAG_inheritance for a base class.  */
15195       if (BINFO_VIRTUAL_P (decl) && is_cxx ())
15196         {
15197           /* For C++ virtual bases we can't just use BINFO_OFFSET, as they
15198              aren't at a fixed offset from all (sub)objects of the same
15199              type.  We need to extract the appropriate offset from our
15200              vtable.  The following dwarf expression means
15201
15202                BaseAddr = ObAddr + *((*ObAddr) - Offset)
15203
15204              This is specific to the V3 ABI, of course.  */
15205
15206           dw_loc_descr_ref tmp;
15207
15208           /* Make a copy of the object address.  */
15209           tmp = new_loc_descr (DW_OP_dup, 0, 0);
15210           add_loc_descr (&loc_descr, tmp);
15211
15212           /* Extract the vtable address.  */
15213           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15214           add_loc_descr (&loc_descr, tmp);
15215
15216           /* Calculate the address of the offset.  */
15217           offset = tree_low_cst (BINFO_VPTR_FIELD (decl), 0);
15218           gcc_assert (offset < 0);
15219
15220           tmp = int_loc_descriptor (-offset);
15221           add_loc_descr (&loc_descr, tmp);
15222           tmp = new_loc_descr (DW_OP_minus, 0, 0);
15223           add_loc_descr (&loc_descr, tmp);
15224
15225           /* Extract the offset.  */
15226           tmp = new_loc_descr (DW_OP_deref, 0, 0);
15227           add_loc_descr (&loc_descr, tmp);
15228
15229           /* Add it to the object address.  */
15230           tmp = new_loc_descr (DW_OP_plus, 0, 0);
15231           add_loc_descr (&loc_descr, tmp);
15232         }
15233       else
15234         offset = tree_low_cst (BINFO_OFFSET (decl), 0);
15235     }
15236   else
15237     offset = field_byte_offset (decl);
15238
15239   if (! loc_descr)
15240     {
15241       if (dwarf_version > 2)
15242         {
15243           /* Don't need to output a location expression, just the constant. */
15244           add_AT_int (die, DW_AT_data_member_location, offset);
15245           return;
15246         }
15247       else
15248         {
15249           enum dwarf_location_atom op;
15250
15251           /* The DWARF2 standard says that we should assume that the structure
15252              address is already on the stack, so we can specify a structure
15253              field address by using DW_OP_plus_uconst.  */
15254
15255 #ifdef MIPS_DEBUGGING_INFO
15256           /* ??? The SGI dwarf reader does not handle the DW_OP_plus_uconst
15257              operator correctly.  It works only if we leave the offset on the
15258              stack.  */
15259           op = DW_OP_constu;
15260 #else
15261           op = DW_OP_plus_uconst;
15262 #endif
15263
15264           loc_descr = new_loc_descr (op, offset, 0);
15265         }
15266     }
15267
15268   add_AT_loc (die, DW_AT_data_member_location, loc_descr);
15269 }
15270
15271 /* Writes integer values to dw_vec_const array.  */
15272
15273 static void
15274 insert_int (HOST_WIDE_INT val, unsigned int size, unsigned char *dest)
15275 {
15276   while (size != 0)
15277     {
15278       *dest++ = val & 0xff;
15279       val >>= 8;
15280       --size;
15281     }
15282 }
15283
15284 /* Reads integers from dw_vec_const array.  Inverse of insert_int.  */
15285
15286 static HOST_WIDE_INT
15287 extract_int (const unsigned char *src, unsigned int size)
15288 {
15289   HOST_WIDE_INT val = 0;
15290
15291   src += size;
15292   while (size != 0)
15293     {
15294       val <<= 8;
15295       val |= *--src & 0xff;
15296       --size;
15297     }
15298   return val;
15299 }
15300
15301 /* Writes floating point values to dw_vec_const array.  */
15302
15303 static void
15304 insert_float (const_rtx rtl, unsigned char *array)
15305 {
15306   REAL_VALUE_TYPE rv;
15307   long val[4];
15308   int i;
15309
15310   REAL_VALUE_FROM_CONST_DOUBLE (rv, rtl);
15311   real_to_target (val, &rv, GET_MODE (rtl));
15312
15313   /* real_to_target puts 32-bit pieces in each long.  Pack them.  */
15314   for (i = 0; i < GET_MODE_SIZE (GET_MODE (rtl)) / 4; i++)
15315     {
15316       insert_int (val[i], 4, array);
15317       array += 4;
15318     }
15319 }
15320
15321 /* Attach a DW_AT_const_value attribute for a variable or a parameter which
15322    does not have a "location" either in memory or in a register.  These
15323    things can arise in GNU C when a constant is passed as an actual parameter
15324    to an inlined function.  They can also arise in C++ where declared
15325    constants do not necessarily get memory "homes".  */
15326
15327 static bool
15328 add_const_value_attribute (dw_die_ref die, rtx rtl)
15329 {
15330   switch (GET_CODE (rtl))
15331     {
15332     case CONST_INT:
15333       {
15334         HOST_WIDE_INT val = INTVAL (rtl);
15335
15336         if (val < 0)
15337           add_AT_int (die, DW_AT_const_value, val);
15338         else
15339           add_AT_unsigned (die, DW_AT_const_value, (unsigned HOST_WIDE_INT) val);
15340       }
15341       return true;
15342
15343     case CONST_DOUBLE:
15344       /* Note that a CONST_DOUBLE rtx could represent either an integer or a
15345          floating-point constant.  A CONST_DOUBLE is used whenever the
15346          constant requires more than one word in order to be adequately
15347          represented.  */
15348       {
15349         enum machine_mode mode = GET_MODE (rtl);
15350
15351         if (SCALAR_FLOAT_MODE_P (mode))
15352           {
15353             unsigned int length = GET_MODE_SIZE (mode);
15354             unsigned char *array = GGC_NEWVEC (unsigned char, length);
15355
15356             insert_float (rtl, array);
15357             add_AT_vec (die, DW_AT_const_value, length / 4, 4, array);
15358           }
15359         else
15360           add_AT_double (die, DW_AT_const_value,
15361                          CONST_DOUBLE_HIGH (rtl), CONST_DOUBLE_LOW (rtl));
15362       }
15363       return true;
15364
15365     case CONST_VECTOR:
15366       {
15367         enum machine_mode mode = GET_MODE (rtl);
15368         unsigned int elt_size = GET_MODE_UNIT_SIZE (mode);
15369         unsigned int length = CONST_VECTOR_NUNITS (rtl);
15370         unsigned char *array = GGC_NEWVEC (unsigned char, length * elt_size);
15371         unsigned int i;
15372         unsigned char *p;
15373
15374         switch (GET_MODE_CLASS (mode))
15375           {
15376           case MODE_VECTOR_INT:
15377             for (i = 0, p = array; i < length; i++, p += elt_size)
15378               {
15379                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15380                 HOST_WIDE_INT lo, hi;
15381
15382                 switch (GET_CODE (elt))
15383                   {
15384                   case CONST_INT:
15385                     lo = INTVAL (elt);
15386                     hi = -(lo < 0);
15387                     break;
15388
15389                   case CONST_DOUBLE:
15390                     lo = CONST_DOUBLE_LOW (elt);
15391                     hi = CONST_DOUBLE_HIGH (elt);
15392                     break;
15393
15394                   default:
15395                     gcc_unreachable ();
15396                   }
15397
15398                 if (elt_size <= sizeof (HOST_WIDE_INT))
15399                   insert_int (lo, elt_size, p);
15400                 else
15401                   {
15402                     unsigned char *p0 = p;
15403                     unsigned char *p1 = p + sizeof (HOST_WIDE_INT);
15404
15405                     gcc_assert (elt_size == 2 * sizeof (HOST_WIDE_INT));
15406                     if (WORDS_BIG_ENDIAN)
15407                       {
15408                         p0 = p1;
15409                         p1 = p;
15410                       }
15411                     insert_int (lo, sizeof (HOST_WIDE_INT), p0);
15412                     insert_int (hi, sizeof (HOST_WIDE_INT), p1);
15413                   }
15414               }
15415             break;
15416
15417           case MODE_VECTOR_FLOAT:
15418             for (i = 0, p = array; i < length; i++, p += elt_size)
15419               {
15420                 rtx elt = CONST_VECTOR_ELT (rtl, i);
15421                 insert_float (elt, p);
15422               }
15423             break;
15424
15425           default:
15426             gcc_unreachable ();
15427           }
15428
15429         add_AT_vec (die, DW_AT_const_value, length, elt_size, array);
15430       }
15431       return true;
15432
15433     case CONST_STRING:
15434       if (dwarf_version >= 4 || !dwarf_strict)
15435         {
15436           dw_loc_descr_ref loc_result;
15437           resolve_one_addr (&rtl, NULL);
15438         rtl_addr:
15439           loc_result = new_loc_descr (DW_OP_addr, 0, 0);
15440           loc_result->dw_loc_oprnd1.val_class = dw_val_class_addr;
15441           loc_result->dw_loc_oprnd1.v.val_addr = rtl;
15442           add_loc_descr (&loc_result, new_loc_descr (DW_OP_stack_value, 0, 0));
15443           add_AT_loc (die, DW_AT_location, loc_result);
15444           VEC_safe_push (rtx, gc, used_rtx_array, rtl);
15445           return true;
15446         }
15447       return false;
15448
15449     case CONST:
15450       if (CONSTANT_P (XEXP (rtl, 0)))
15451         return add_const_value_attribute (die, XEXP (rtl, 0));
15452       /* FALLTHROUGH */
15453     case SYMBOL_REF:
15454       if (!const_ok_for_output (rtl))
15455         return false;
15456     case LABEL_REF:
15457       if (dwarf_version >= 4 || !dwarf_strict)
15458         goto rtl_addr;
15459       return false;
15460
15461     case PLUS:
15462       /* In cases where an inlined instance of an inline function is passed
15463          the address of an `auto' variable (which is local to the caller) we
15464          can get a situation where the DECL_RTL of the artificial local
15465          variable (for the inlining) which acts as a stand-in for the
15466          corresponding formal parameter (of the inline function) will look
15467          like (plus:SI (reg:SI FRAME_PTR) (const_int ...)).  This is not
15468          exactly a compile-time constant expression, but it isn't the address
15469          of the (artificial) local variable either.  Rather, it represents the
15470          *value* which the artificial local variable always has during its
15471          lifetime.  We currently have no way to represent such quasi-constant
15472          values in Dwarf, so for now we just punt and generate nothing.  */
15473       return false;
15474
15475     case HIGH:
15476     case CONST_FIXED:
15477       return false;
15478
15479     case MEM:
15480       if (GET_CODE (XEXP (rtl, 0)) == CONST_STRING
15481           && MEM_READONLY_P (rtl)
15482           && GET_MODE (rtl) == BLKmode)
15483         {
15484           add_AT_string (die, DW_AT_const_value, XSTR (XEXP (rtl, 0), 0));
15485           return true;
15486         }
15487       return false;
15488
15489     default:
15490       /* No other kinds of rtx should be possible here.  */
15491       gcc_unreachable ();
15492     }
15493   return false;
15494 }
15495
15496 /* Determine whether the evaluation of EXPR references any variables
15497    or functions which aren't otherwise used (and therefore may not be
15498    output).  */
15499 static tree
15500 reference_to_unused (tree * tp, int * walk_subtrees,
15501                      void * data ATTRIBUTE_UNUSED)
15502 {
15503   if (! EXPR_P (*tp) && ! CONSTANT_CLASS_P (*tp))
15504     *walk_subtrees = 0;
15505
15506   if (DECL_P (*tp) && ! TREE_PUBLIC (*tp) && ! TREE_USED (*tp)
15507       && ! TREE_ASM_WRITTEN (*tp))
15508     return *tp;
15509   /* ???  The C++ FE emits debug information for using decls, so
15510      putting gcc_unreachable here falls over.  See PR31899.  For now
15511      be conservative.  */
15512   else if (!cgraph_global_info_ready
15513            && (TREE_CODE (*tp) == VAR_DECL || TREE_CODE (*tp) == FUNCTION_DECL))
15514     return *tp;
15515   else if (TREE_CODE (*tp) == VAR_DECL)
15516     {
15517       struct varpool_node *node = varpool_node (*tp);
15518       if (!node->needed)
15519         return *tp;
15520     }
15521   else if (TREE_CODE (*tp) == FUNCTION_DECL
15522            && (!DECL_EXTERNAL (*tp) || DECL_DECLARED_INLINE_P (*tp)))
15523     {
15524       /* The call graph machinery must have finished analyzing,
15525          optimizing and gimplifying the CU by now.
15526          So if *TP has no call graph node associated
15527          to it, it means *TP will not be emitted.  */
15528       if (!cgraph_get_node (*tp))
15529         return *tp;
15530     }
15531   else if (TREE_CODE (*tp) == STRING_CST && !TREE_ASM_WRITTEN (*tp))
15532     return *tp;
15533
15534   return NULL_TREE;
15535 }
15536
15537 /* Generate an RTL constant from a decl initializer INIT with decl type TYPE,
15538    for use in a later add_const_value_attribute call.  */
15539
15540 static rtx
15541 rtl_for_decl_init (tree init, tree type)
15542 {
15543   rtx rtl = NULL_RTX;
15544
15545   /* If a variable is initialized with a string constant without embedded
15546      zeros, build CONST_STRING.  */
15547   if (TREE_CODE (init) == STRING_CST && TREE_CODE (type) == ARRAY_TYPE)
15548     {
15549       tree enttype = TREE_TYPE (type);
15550       tree domain = TYPE_DOMAIN (type);
15551       enum machine_mode mode = TYPE_MODE (enttype);
15552
15553       if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_SIZE (mode) == 1
15554           && domain
15555           && integer_zerop (TYPE_MIN_VALUE (domain))
15556           && compare_tree_int (TYPE_MAX_VALUE (domain),
15557                                TREE_STRING_LENGTH (init) - 1) == 0
15558           && ((size_t) TREE_STRING_LENGTH (init)
15559               == strlen (TREE_STRING_POINTER (init)) + 1))
15560         {
15561           rtl = gen_rtx_CONST_STRING (VOIDmode,
15562                                       ggc_strdup (TREE_STRING_POINTER (init)));
15563           rtl = gen_rtx_MEM (BLKmode, rtl);
15564           MEM_READONLY_P (rtl) = 1;
15565         }
15566     }
15567   /* Other aggregates, and complex values, could be represented using
15568      CONCAT: FIXME!  */
15569   else if (AGGREGATE_TYPE_P (type) || TREE_CODE (type) == COMPLEX_TYPE)
15570     ;
15571   /* Vectors only work if their mode is supported by the target.
15572      FIXME: generic vectors ought to work too.  */
15573   else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_MODE (type) == BLKmode)
15574     ;
15575   /* If the initializer is something that we know will expand into an
15576      immediate RTL constant, expand it now.  We must be careful not to
15577      reference variables which won't be output.  */
15578   else if (initializer_constant_valid_p (init, type)
15579            && ! walk_tree (&init, reference_to_unused, NULL, NULL))
15580     {
15581       /* Convert vector CONSTRUCTOR initializers to VECTOR_CST if
15582          possible.  */
15583       if (TREE_CODE (type) == VECTOR_TYPE)
15584         switch (TREE_CODE (init))
15585           {
15586           case VECTOR_CST:
15587             break;
15588           case CONSTRUCTOR:
15589             if (TREE_CONSTANT (init))
15590               {
15591                 VEC(constructor_elt,gc) *elts = CONSTRUCTOR_ELTS (init);
15592                 bool constant_p = true;
15593                 tree value;
15594                 unsigned HOST_WIDE_INT ix;
15595
15596                 /* Even when ctor is constant, it might contain non-*_CST
15597                    elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
15598                    belong into VECTOR_CST nodes.  */
15599                 FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
15600                   if (!CONSTANT_CLASS_P (value))
15601                     {
15602                       constant_p = false;
15603                       break;
15604                     }
15605
15606                 if (constant_p)
15607                   {
15608                     init = build_vector_from_ctor (type, elts);
15609                     break;
15610                   }
15611               }
15612             /* FALLTHRU */
15613
15614           default:
15615             return NULL;
15616           }
15617
15618       rtl = expand_expr (init, NULL_RTX, VOIDmode, EXPAND_INITIALIZER);
15619
15620       /* If expand_expr returns a MEM, it wasn't immediate.  */
15621       gcc_assert (!rtl || !MEM_P (rtl));
15622     }
15623
15624   return rtl;
15625 }
15626
15627 /* Generate RTL for the variable DECL to represent its location.  */
15628
15629 static rtx
15630 rtl_for_decl_location (tree decl)
15631 {
15632   rtx rtl;
15633
15634   /* Here we have to decide where we are going to say the parameter "lives"
15635      (as far as the debugger is concerned).  We only have a couple of
15636      choices.  GCC provides us with DECL_RTL and with DECL_INCOMING_RTL.
15637
15638      DECL_RTL normally indicates where the parameter lives during most of the
15639      activation of the function.  If optimization is enabled however, this
15640      could be either NULL or else a pseudo-reg.  Both of those cases indicate
15641      that the parameter doesn't really live anywhere (as far as the code
15642      generation parts of GCC are concerned) during most of the function's
15643      activation.  That will happen (for example) if the parameter is never
15644      referenced within the function.
15645
15646      We could just generate a location descriptor here for all non-NULL
15647      non-pseudo values of DECL_RTL and ignore all of the rest, but we can be
15648      a little nicer than that if we also consider DECL_INCOMING_RTL in cases
15649      where DECL_RTL is NULL or is a pseudo-reg.
15650
15651      Note however that we can only get away with using DECL_INCOMING_RTL as
15652      a backup substitute for DECL_RTL in certain limited cases.  In cases
15653      where DECL_ARG_TYPE (decl) indicates the same type as TREE_TYPE (decl),
15654      we can be sure that the parameter was passed using the same type as it is
15655      declared to have within the function, and that its DECL_INCOMING_RTL
15656      points us to a place where a value of that type is passed.
15657
15658      In cases where DECL_ARG_TYPE (decl) and TREE_TYPE (decl) are different,
15659      we cannot (in general) use DECL_INCOMING_RTL as a substitute for DECL_RTL
15660      because in these cases DECL_INCOMING_RTL points us to a value of some
15661      type which is *different* from the type of the parameter itself.  Thus,
15662      if we tried to use DECL_INCOMING_RTL to generate a location attribute in
15663      such cases, the debugger would end up (for example) trying to fetch a
15664      `float' from a place which actually contains the first part of a
15665      `double'.  That would lead to really incorrect and confusing
15666      output at debug-time.
15667
15668      So, in general, we *do not* use DECL_INCOMING_RTL as a backup for DECL_RTL
15669      in cases where DECL_ARG_TYPE (decl) != TREE_TYPE (decl).  There
15670      are a couple of exceptions however.  On little-endian machines we can
15671      get away with using DECL_INCOMING_RTL even when DECL_ARG_TYPE (decl) is
15672      not the same as TREE_TYPE (decl), but only when DECL_ARG_TYPE (decl) is
15673      an integral type that is smaller than TREE_TYPE (decl). These cases arise
15674      when (on a little-endian machine) a non-prototyped function has a
15675      parameter declared to be of type `short' or `char'.  In such cases,
15676      TREE_TYPE (decl) will be `short' or `char', DECL_ARG_TYPE (decl) will
15677      be `int', and DECL_INCOMING_RTL will point to the lowest-order byte of the
15678      passed `int' value.  If the debugger then uses that address to fetch
15679      a `short' or a `char' (on a little-endian machine) the result will be
15680      the correct data, so we allow for such exceptional cases below.
15681
15682      Note that our goal here is to describe the place where the given formal
15683      parameter lives during most of the function's activation (i.e. between the
15684      end of the prologue and the start of the epilogue).  We'll do that as best
15685      as we can. Note however that if the given formal parameter is modified
15686      sometime during the execution of the function, then a stack backtrace (at
15687      debug-time) will show the function as having been called with the *new*
15688      value rather than the value which was originally passed in.  This happens
15689      rarely enough that it is not a major problem, but it *is* a problem, and
15690      I'd like to fix it.
15691
15692      A future version of dwarf2out.c may generate two additional attributes for
15693      any given DW_TAG_formal_parameter DIE which will describe the "passed
15694      type" and the "passed location" for the given formal parameter in addition
15695      to the attributes we now generate to indicate the "declared type" and the
15696      "active location" for each parameter.  This additional set of attributes
15697      could be used by debuggers for stack backtraces. Separately, note that
15698      sometimes DECL_RTL can be NULL and DECL_INCOMING_RTL can be NULL also.
15699      This happens (for example) for inlined-instances of inline function formal
15700      parameters which are never referenced.  This really shouldn't be
15701      happening.  All PARM_DECL nodes should get valid non-NULL
15702      DECL_INCOMING_RTL values.  FIXME.  */
15703
15704   /* Use DECL_RTL as the "location" unless we find something better.  */
15705   rtl = DECL_RTL_IF_SET (decl);
15706
15707   /* When generating abstract instances, ignore everything except
15708      constants, symbols living in memory, and symbols living in
15709      fixed registers.  */
15710   if (! reload_completed)
15711     {
15712       if (rtl
15713           && (CONSTANT_P (rtl)
15714               || (MEM_P (rtl)
15715                   && CONSTANT_P (XEXP (rtl, 0)))
15716               || (REG_P (rtl)
15717                   && TREE_CODE (decl) == VAR_DECL
15718                   && TREE_STATIC (decl))))
15719         {
15720           rtl = targetm.delegitimize_address (rtl);
15721           return rtl;
15722         }
15723       rtl = NULL_RTX;
15724     }
15725   else if (TREE_CODE (decl) == PARM_DECL)
15726     {
15727       if (rtl == NULL_RTX || is_pseudo_reg (rtl))
15728         {
15729           tree declared_type = TREE_TYPE (decl);
15730           tree passed_type = DECL_ARG_TYPE (decl);
15731           enum machine_mode dmode = TYPE_MODE (declared_type);
15732           enum machine_mode pmode = TYPE_MODE (passed_type);
15733
15734           /* This decl represents a formal parameter which was optimized out.
15735              Note that DECL_INCOMING_RTL may be NULL in here, but we handle
15736              all cases where (rtl == NULL_RTX) just below.  */
15737           if (dmode == pmode)
15738             rtl = DECL_INCOMING_RTL (decl);
15739           else if (SCALAR_INT_MODE_P (dmode)
15740                    && GET_MODE_SIZE (dmode) <= GET_MODE_SIZE (pmode)
15741                    && DECL_INCOMING_RTL (decl))
15742             {
15743               rtx inc = DECL_INCOMING_RTL (decl);
15744               if (REG_P (inc))
15745                 rtl = inc;
15746               else if (MEM_P (inc))
15747                 {
15748                   if (BYTES_BIG_ENDIAN)
15749                     rtl = adjust_address_nv (inc, dmode,
15750                                              GET_MODE_SIZE (pmode)
15751                                              - GET_MODE_SIZE (dmode));
15752                   else
15753                     rtl = inc;
15754                 }
15755             }
15756         }
15757
15758       /* If the parm was passed in registers, but lives on the stack, then
15759          make a big endian correction if the mode of the type of the
15760          parameter is not the same as the mode of the rtl.  */
15761       /* ??? This is the same series of checks that are made in dbxout.c before
15762          we reach the big endian correction code there.  It isn't clear if all
15763          of these checks are necessary here, but keeping them all is the safe
15764          thing to do.  */
15765       else if (MEM_P (rtl)
15766                && XEXP (rtl, 0) != const0_rtx
15767                && ! CONSTANT_P (XEXP (rtl, 0))
15768                /* Not passed in memory.  */
15769                && !MEM_P (DECL_INCOMING_RTL (decl))
15770                /* Not passed by invisible reference.  */
15771                && (!REG_P (XEXP (rtl, 0))
15772                    || REGNO (XEXP (rtl, 0)) == HARD_FRAME_POINTER_REGNUM
15773                    || REGNO (XEXP (rtl, 0)) == STACK_POINTER_REGNUM
15774 #if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
15775                    || REGNO (XEXP (rtl, 0)) == ARG_POINTER_REGNUM
15776 #endif
15777                      )
15778                /* Big endian correction check.  */
15779                && BYTES_BIG_ENDIAN
15780                && TYPE_MODE (TREE_TYPE (decl)) != GET_MODE (rtl)
15781                && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)))
15782                    < UNITS_PER_WORD))
15783         {
15784           int offset = (UNITS_PER_WORD
15785                         - GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl))));
15786
15787           rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15788                              plus_constant (XEXP (rtl, 0), offset));
15789         }
15790     }
15791   else if (TREE_CODE (decl) == VAR_DECL
15792            && rtl
15793            && MEM_P (rtl)
15794            && GET_MODE (rtl) != TYPE_MODE (TREE_TYPE (decl))
15795            && BYTES_BIG_ENDIAN)
15796     {
15797       int rsize = GET_MODE_SIZE (GET_MODE (rtl));
15798       int dsize = GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (decl)));
15799
15800       /* If a variable is declared "register" yet is smaller than
15801          a register, then if we store the variable to memory, it
15802          looks like we're storing a register-sized value, when in
15803          fact we are not.  We need to adjust the offset of the
15804          storage location to reflect the actual value's bytes,
15805          else gdb will not be able to display it.  */
15806       if (rsize > dsize)
15807         rtl = gen_rtx_MEM (TYPE_MODE (TREE_TYPE (decl)),
15808                            plus_constant (XEXP (rtl, 0), rsize-dsize));
15809     }
15810
15811   /* A variable with no DECL_RTL but a DECL_INITIAL is a compile-time constant,
15812      and will have been substituted directly into all expressions that use it.
15813      C does not have such a concept, but C++ and other languages do.  */
15814   if (!rtl && TREE_CODE (decl) == VAR_DECL && DECL_INITIAL (decl))
15815     rtl = rtl_for_decl_init (DECL_INITIAL (decl), TREE_TYPE (decl));
15816
15817   if (rtl)
15818     rtl = targetm.delegitimize_address (rtl);
15819
15820   /* If we don't look past the constant pool, we risk emitting a
15821      reference to a constant pool entry that isn't referenced from
15822      code, and thus is not emitted.  */
15823   if (rtl)
15824     rtl = avoid_constant_pool_reference (rtl);
15825
15826   /* Try harder to get a rtl.  If this symbol ends up not being emitted
15827      in the current CU, resolve_addr will remove the expression referencing
15828      it.  */
15829   if (rtl == NULL_RTX
15830       && TREE_CODE (decl) == VAR_DECL
15831       && !DECL_EXTERNAL (decl)
15832       && TREE_STATIC (decl)
15833       && DECL_NAME (decl)
15834       && !DECL_HARD_REGISTER (decl)
15835       && DECL_MODE (decl) != VOIDmode)
15836     {
15837       rtl = make_decl_rtl_for_debug (decl);
15838       if (!MEM_P (rtl)
15839           || GET_CODE (XEXP (rtl, 0)) != SYMBOL_REF
15840           || SYMBOL_REF_DECL (XEXP (rtl, 0)) != decl)
15841         rtl = NULL_RTX;
15842     }
15843
15844   return rtl;
15845 }
15846
15847 /* Check whether decl is a Fortran COMMON symbol.  If not, NULL_TREE is
15848    returned.  If so, the decl for the COMMON block is returned, and the
15849    value is the offset into the common block for the symbol.  */
15850
15851 static tree
15852 fortran_common (tree decl, HOST_WIDE_INT *value)
15853 {
15854   tree val_expr, cvar;
15855   enum machine_mode mode;
15856   HOST_WIDE_INT bitsize, bitpos;
15857   tree offset;
15858   int volatilep = 0, unsignedp = 0;
15859
15860   /* If the decl isn't a VAR_DECL, or if it isn't static, or if
15861      it does not have a value (the offset into the common area), or if it
15862      is thread local (as opposed to global) then it isn't common, and shouldn't
15863      be handled as such.  */
15864   if (TREE_CODE (decl) != VAR_DECL
15865       || !TREE_STATIC (decl)
15866       || !DECL_HAS_VALUE_EXPR_P (decl)
15867       || !is_fortran ())
15868     return NULL_TREE;
15869
15870   val_expr = DECL_VALUE_EXPR (decl);
15871   if (TREE_CODE (val_expr) != COMPONENT_REF)
15872     return NULL_TREE;
15873
15874   cvar = get_inner_reference (val_expr, &bitsize, &bitpos, &offset,
15875                               &mode, &unsignedp, &volatilep, true);
15876
15877   if (cvar == NULL_TREE
15878       || TREE_CODE (cvar) != VAR_DECL
15879       || DECL_ARTIFICIAL (cvar)
15880       || !TREE_PUBLIC (cvar))
15881     return NULL_TREE;
15882
15883   *value = 0;
15884   if (offset != NULL)
15885     {
15886       if (!host_integerp (offset, 0))
15887         return NULL_TREE;
15888       *value = tree_low_cst (offset, 0);
15889     }
15890   if (bitpos != 0)
15891     *value += bitpos / BITS_PER_UNIT;
15892
15893   return cvar;
15894 }
15895
15896 /* Generate *either* a DW_AT_location attribute or else a DW_AT_const_value
15897    data attribute for a variable or a parameter.  We generate the
15898    DW_AT_const_value attribute only in those cases where the given variable
15899    or parameter does not have a true "location" either in memory or in a
15900    register.  This can happen (for example) when a constant is passed as an
15901    actual argument in a call to an inline function.  (It's possible that
15902    these things can crop up in other ways also.)  Note that one type of
15903    constant value which can be passed into an inlined function is a constant
15904    pointer.  This can happen for example if an actual argument in an inlined
15905    function call evaluates to a compile-time constant address.  */
15906
15907 static bool
15908 add_location_or_const_value_attribute (dw_die_ref die, tree decl,
15909                                        enum dwarf_attribute attr)
15910 {
15911   rtx rtl;
15912   dw_loc_list_ref list;
15913   var_loc_list *loc_list;
15914
15915   if (TREE_CODE (decl) == ERROR_MARK)
15916     return false;
15917
15918   gcc_assert (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL
15919               || TREE_CODE (decl) == RESULT_DECL);
15920
15921   /* Try to get some constant RTL for this decl, and use that as the value of
15922      the location.  */
15923
15924   rtl = rtl_for_decl_location (decl);
15925   if (rtl && (CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15926       && add_const_value_attribute (die, rtl))
15927     return true;
15928
15929   /* See if we have single element location list that is equivalent to
15930      a constant value.  That way we are better to use add_const_value_attribute
15931      rather than expanding constant value equivalent.  */
15932   loc_list = lookup_decl_loc (decl);
15933   if (loc_list
15934       && loc_list->first
15935       && loc_list->first == loc_list->last
15936       && NOTE_VAR_LOCATION (loc_list->first->var_loc_note)
15937       && NOTE_VAR_LOCATION_LOC (loc_list->first->var_loc_note))
15938     {
15939       struct var_loc_node *node;
15940
15941       node = loc_list->first;
15942       rtl = NOTE_VAR_LOCATION_LOC (node->var_loc_note);
15943       if (GET_CODE (rtl) == EXPR_LIST)
15944         rtl = XEXP (rtl, 0);
15945       if ((CONSTANT_P (rtl) || GET_CODE (rtl) == CONST_STRING)
15946           && add_const_value_attribute (die, rtl))
15947          return true;
15948     }
15949   list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
15950   if (list)
15951     {
15952       add_AT_location_description (die, attr, list);
15953       return true;
15954     }
15955   /* None of that worked, so it must not really have a location;
15956      try adding a constant value attribute from the DECL_INITIAL.  */
15957   return tree_add_const_value_attribute_for_decl (die, decl);
15958 }
15959
15960 /* Add VARIABLE and DIE into deferred locations list.  */
15961
15962 static void
15963 defer_location (tree variable, dw_die_ref die)
15964 {
15965   deferred_locations entry;
15966   entry.variable = variable;
15967   entry.die = die;
15968   VEC_safe_push (deferred_locations, gc, deferred_locations_list, &entry);
15969 }
15970
15971 /* Helper function for tree_add_const_value_attribute.  Natively encode
15972    initializer INIT into an array.  Return true if successful.  */
15973
15974 static bool
15975 native_encode_initializer (tree init, unsigned char *array, int size)
15976 {
15977   tree type;
15978
15979   if (init == NULL_TREE)
15980     return false;
15981
15982   STRIP_NOPS (init);
15983   switch (TREE_CODE (init))
15984     {
15985     case STRING_CST:
15986       type = TREE_TYPE (init);
15987       if (TREE_CODE (type) == ARRAY_TYPE)
15988         {
15989           tree enttype = TREE_TYPE (type);
15990           enum machine_mode mode = TYPE_MODE (enttype);
15991
15992           if (GET_MODE_CLASS (mode) != MODE_INT || GET_MODE_SIZE (mode) != 1)
15993             return false;
15994           if (int_size_in_bytes (type) != size)
15995             return false;
15996           if (size > TREE_STRING_LENGTH (init))
15997             {
15998               memcpy (array, TREE_STRING_POINTER (init),
15999                       TREE_STRING_LENGTH (init));
16000               memset (array + TREE_STRING_LENGTH (init),
16001                       '\0', size - TREE_STRING_LENGTH (init));
16002             }
16003           else
16004             memcpy (array, TREE_STRING_POINTER (init), size);
16005           return true;
16006         }
16007       return false;
16008     case CONSTRUCTOR:
16009       type = TREE_TYPE (init);
16010       if (int_size_in_bytes (type) != size)
16011         return false;
16012       if (TREE_CODE (type) == ARRAY_TYPE)
16013         {
16014           HOST_WIDE_INT min_index;
16015           unsigned HOST_WIDE_INT cnt;
16016           int curpos = 0, fieldsize;
16017           constructor_elt *ce;
16018
16019           if (TYPE_DOMAIN (type) == NULL_TREE
16020               || !host_integerp (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0))
16021             return false;
16022
16023           fieldsize = int_size_in_bytes (TREE_TYPE (type));
16024           if (fieldsize <= 0)
16025             return false;
16026
16027           min_index = tree_low_cst (TYPE_MIN_VALUE (TYPE_DOMAIN (type)), 0);
16028           memset (array, '\0', size);
16029           for (cnt = 0;
16030                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16031                cnt++)
16032             {
16033               tree val = ce->value;
16034               tree index = ce->index;
16035               int pos = curpos;
16036               if (index && TREE_CODE (index) == RANGE_EXPR)
16037                 pos = (tree_low_cst (TREE_OPERAND (index, 0), 0) - min_index)
16038                       * fieldsize;
16039               else if (index)
16040                 pos = (tree_low_cst (index, 0) - min_index) * fieldsize;
16041
16042               if (val)
16043                 {
16044                   STRIP_NOPS (val);
16045                   if (!native_encode_initializer (val, array + pos, fieldsize))
16046                     return false;
16047                 }
16048               curpos = pos + fieldsize;
16049               if (index && TREE_CODE (index) == RANGE_EXPR)
16050                 {
16051                   int count = tree_low_cst (TREE_OPERAND (index, 1), 0)
16052                               - tree_low_cst (TREE_OPERAND (index, 0), 0);
16053                   while (count > 0)
16054                     {
16055                       if (val)
16056                         memcpy (array + curpos, array + pos, fieldsize);
16057                       curpos += fieldsize;
16058                     }
16059                 }
16060               gcc_assert (curpos <= size);
16061             }
16062           return true;
16063         }
16064       else if (TREE_CODE (type) == RECORD_TYPE
16065                || TREE_CODE (type) == UNION_TYPE)
16066         {
16067           tree field = NULL_TREE;
16068           unsigned HOST_WIDE_INT cnt;
16069           constructor_elt *ce;
16070
16071           if (int_size_in_bytes (type) != size)
16072             return false;
16073
16074           if (TREE_CODE (type) == RECORD_TYPE)
16075             field = TYPE_FIELDS (type);
16076
16077           for (cnt = 0;
16078                VEC_iterate (constructor_elt, CONSTRUCTOR_ELTS (init), cnt, ce);
16079                cnt++, field = field ? TREE_CHAIN (field) : 0)
16080             {
16081               tree val = ce->value;
16082               int pos, fieldsize;
16083
16084               if (ce->index != 0)
16085                 field = ce->index;
16086
16087               if (val)
16088                 STRIP_NOPS (val);
16089
16090               if (field == NULL_TREE || DECL_BIT_FIELD (field))
16091                 return false;
16092
16093               if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE
16094                   && TYPE_DOMAIN (TREE_TYPE (field))
16095                   && ! TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (field))))
16096                 return false;
16097               else if (DECL_SIZE_UNIT (field) == NULL_TREE
16098                        || !host_integerp (DECL_SIZE_UNIT (field), 0))
16099                 return false;
16100               fieldsize = tree_low_cst (DECL_SIZE_UNIT (field), 0);
16101               pos = int_byte_position (field);
16102               gcc_assert (pos + fieldsize <= size);
16103               if (val
16104                   && !native_encode_initializer (val, array + pos, fieldsize))
16105                 return false;
16106             }
16107           return true;
16108         }
16109       return false;
16110     case VIEW_CONVERT_EXPR:
16111     case NON_LVALUE_EXPR:
16112       return native_encode_initializer (TREE_OPERAND (init, 0), array, size);
16113     default:
16114       return native_encode_expr (init, array, size) == size;
16115     }
16116 }
16117
16118 /* Attach a DW_AT_const_value attribute to DIE. The value of the
16119    attribute is the const value T.  */
16120
16121 static bool
16122 tree_add_const_value_attribute (dw_die_ref die, tree t)
16123 {
16124   tree init;
16125   tree type = TREE_TYPE (t);
16126   rtx rtl;
16127
16128   if (!t || !TREE_TYPE (t) || TREE_TYPE (t) == error_mark_node)
16129     return false;
16130
16131   init = t;
16132   gcc_assert (!DECL_P (init));
16133
16134   rtl = rtl_for_decl_init (init, type);
16135   if (rtl)
16136     return add_const_value_attribute (die, rtl);
16137   /* If the host and target are sane, try harder.  */
16138   else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8
16139            && initializer_constant_valid_p (init, type))
16140     {
16141       HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (init));
16142       if (size > 0 && (int) size == size)
16143         {
16144           unsigned char *array = GGC_CNEWVEC (unsigned char, size);
16145
16146           if (native_encode_initializer (init, array, size))
16147             {
16148               add_AT_vec (die, DW_AT_const_value, size, 1, array);
16149               return true;
16150             }
16151         }
16152     }
16153   return false;
16154 }
16155
16156 /* Attach a DW_AT_const_value attribute to VAR_DIE. The value of the
16157    attribute is the const value of T, where T is an integral constant
16158    variable with static storage duration
16159    (so it can't be a PARM_DECL or a RESULT_DECL).  */
16160
16161 static bool
16162 tree_add_const_value_attribute_for_decl (dw_die_ref var_die, tree decl)
16163 {
16164
16165   if (!decl
16166       || (TREE_CODE (decl) != VAR_DECL
16167           && TREE_CODE (decl) != CONST_DECL))
16168     return false;
16169
16170     if (TREE_READONLY (decl)
16171         && ! TREE_THIS_VOLATILE (decl)
16172         && DECL_INITIAL (decl))
16173       /* OK */;
16174     else
16175       return false;
16176
16177   /* Don't add DW_AT_const_value if abstract origin already has one.  */
16178   if (get_AT (var_die, DW_AT_const_value))
16179     return false;
16180
16181   return tree_add_const_value_attribute (var_die, DECL_INITIAL (decl));
16182 }
16183
16184 /* Convert the CFI instructions for the current function into a
16185    location list.  This is used for DW_AT_frame_base when we targeting
16186    a dwarf2 consumer that does not support the dwarf3
16187    DW_OP_call_frame_cfa.  OFFSET is a constant to be added to all CFA
16188    expressions.  */
16189
16190 static dw_loc_list_ref
16191 convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
16192 {
16193   dw_fde_ref fde;
16194   dw_loc_list_ref list, *list_tail;
16195   dw_cfi_ref cfi;
16196   dw_cfa_location last_cfa, next_cfa;
16197   const char *start_label, *last_label, *section;
16198   dw_cfa_location remember;
16199
16200   fde = current_fde ();
16201   gcc_assert (fde != NULL);
16202
16203   section = secname_for_decl (current_function_decl);
16204   list_tail = &list;
16205   list = NULL;
16206
16207   memset (&next_cfa, 0, sizeof (next_cfa));
16208   next_cfa.reg = INVALID_REGNUM;
16209   remember = next_cfa;
16210
16211   start_label = fde->dw_fde_begin;
16212
16213   /* ??? Bald assumption that the CIE opcode list does not contain
16214      advance opcodes.  */
16215   for (cfi = cie_cfi_head; cfi; cfi = cfi->dw_cfi_next)
16216     lookup_cfa_1 (cfi, &next_cfa, &remember);
16217
16218   last_cfa = next_cfa;
16219   last_label = start_label;
16220
16221   for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
16222     switch (cfi->dw_cfi_opc)
16223       {
16224       case DW_CFA_set_loc:
16225       case DW_CFA_advance_loc1:
16226       case DW_CFA_advance_loc2:
16227       case DW_CFA_advance_loc4:
16228         if (!cfa_equal_p (&last_cfa, &next_cfa))
16229           {
16230             *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16231                                        start_label, last_label, section);
16232
16233             list_tail = &(*list_tail)->dw_loc_next;
16234             last_cfa = next_cfa;
16235             start_label = last_label;
16236           }
16237         last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
16238         break;
16239
16240       case DW_CFA_advance_loc:
16241         /* The encoding is complex enough that we should never emit this.  */
16242         gcc_unreachable ();
16243
16244       default:
16245         lookup_cfa_1 (cfi, &next_cfa, &remember);
16246         break;
16247       }
16248
16249   if (!cfa_equal_p (&last_cfa, &next_cfa))
16250     {
16251       *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
16252                                  start_label, last_label, section);
16253       list_tail = &(*list_tail)->dw_loc_next;
16254       start_label = last_label;
16255     }
16256
16257   *list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
16258                              start_label, fde->dw_fde_end, section);
16259
16260   if (list && list->dw_loc_next)
16261     gen_llsym (list);
16262
16263   return list;
16264 }
16265
16266 /* Compute a displacement from the "steady-state frame pointer" to the
16267    frame base (often the same as the CFA), and store it in
16268    frame_pointer_fb_offset.  OFFSET is added to the displacement
16269    before the latter is negated.  */
16270
16271 static void
16272 compute_frame_pointer_to_fb_displacement (HOST_WIDE_INT offset)
16273 {
16274   rtx reg, elim;
16275
16276 #ifdef FRAME_POINTER_CFA_OFFSET
16277   reg = frame_pointer_rtx;
16278   offset += FRAME_POINTER_CFA_OFFSET (current_function_decl);
16279 #else
16280   reg = arg_pointer_rtx;
16281   offset += ARG_POINTER_CFA_OFFSET (current_function_decl);
16282 #endif
16283
16284   elim = eliminate_regs (reg, VOIDmode, NULL_RTX);
16285   if (GET_CODE (elim) == PLUS)
16286     {
16287       offset += INTVAL (XEXP (elim, 1));
16288       elim = XEXP (elim, 0);
16289     }
16290
16291   gcc_assert ((SUPPORTS_STACK_ALIGNMENT
16292                && (elim == hard_frame_pointer_rtx
16293                    || elim == stack_pointer_rtx))
16294               || elim == (frame_pointer_needed
16295                           ? hard_frame_pointer_rtx
16296                           : stack_pointer_rtx));
16297
16298   frame_pointer_fb_offset = -offset;
16299 }
16300
16301 /* Generate a DW_AT_name attribute given some string value to be included as
16302    the value of the attribute.  */
16303
16304 static void
16305 add_name_attribute (dw_die_ref die, const char *name_string)
16306 {
16307   if (name_string != NULL && *name_string != 0)
16308     {
16309       if (demangle_name_func)
16310         name_string = (*demangle_name_func) (name_string);
16311
16312       add_AT_string (die, DW_AT_name, name_string);
16313     }
16314 }
16315
16316 /* Generate a DW_AT_comp_dir attribute for DIE.  */
16317
16318 static void
16319 add_comp_dir_attribute (dw_die_ref die)
16320 {
16321   const char *wd = get_src_pwd ();
16322   char *wd1;
16323
16324   if (wd == NULL)
16325     return;
16326
16327   if (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR)
16328     {
16329       int wdlen;
16330
16331       wdlen = strlen (wd);
16332       wd1 = GGC_NEWVEC (char, wdlen + 2);
16333       strcpy (wd1, wd);
16334       wd1 [wdlen] = DIR_SEPARATOR;
16335       wd1 [wdlen + 1] = 0;
16336       wd = wd1;
16337     }
16338
16339     add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd));
16340 }
16341
16342 /* Given a tree node describing an array bound (either lower or upper) output
16343    a representation for that bound.  */
16344
16345 static void
16346 add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree bound)
16347 {
16348   int want_address = 2;
16349
16350   switch (TREE_CODE (bound))
16351     {
16352     case ERROR_MARK:
16353       return;
16354
16355     /* All fixed-bounds are represented by INTEGER_CST nodes.  */
16356     case INTEGER_CST:
16357       {
16358         unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound));
16359
16360         /* Use the default if possible.  */
16361         if (bound_attr == DW_AT_lower_bound
16362             && (((is_c_family () || is_java ()) && integer_zerop (bound))
16363                 || (is_fortran () && integer_onep (bound))))
16364           ;
16365
16366         /* Otherwise represent the bound as an unsigned value with the
16367            precision of its type.  The precision and signedness of the
16368            type will be necessary to re-interpret it unambiguously.  */
16369         else if (prec < HOST_BITS_PER_WIDE_INT)
16370           {
16371             unsigned HOST_WIDE_INT mask
16372               = ((unsigned HOST_WIDE_INT) 1 << prec) - 1;
16373             add_AT_unsigned (subrange_die, bound_attr,
16374                              TREE_INT_CST_LOW (bound) & mask);
16375           }
16376         else if (prec == HOST_BITS_PER_WIDE_INT
16377                  || TREE_INT_CST_HIGH (bound) == 0)
16378           add_AT_unsigned (subrange_die, bound_attr,
16379                            TREE_INT_CST_LOW (bound));
16380         else
16381           add_AT_double (subrange_die, bound_attr, TREE_INT_CST_HIGH (bound),
16382                          TREE_INT_CST_LOW (bound));
16383       }
16384       break;
16385
16386     CASE_CONVERT:
16387     case VIEW_CONVERT_EXPR:
16388       add_bound_info (subrange_die, bound_attr, TREE_OPERAND (bound, 0));
16389       break;
16390
16391     case SAVE_EXPR:
16392       break;
16393
16394     case VAR_DECL:
16395     case PARM_DECL:
16396     case RESULT_DECL:
16397       {
16398         dw_die_ref decl_die = lookup_decl_die (bound);
16399
16400         /* ??? Can this happen, or should the variable have been bound
16401            first?  Probably it can, since I imagine that we try to create
16402            the types of parameters in the order in which they exist in
16403            the list, and won't have created a forward reference to a
16404            later parameter.  */
16405         if (decl_die != NULL)
16406           {
16407             add_AT_die_ref (subrange_die, bound_attr, decl_die);
16408             break;
16409           }
16410         want_address = 0;
16411       }
16412       /* FALLTHRU */
16413
16414     default:
16415       {
16416         /* Otherwise try to create a stack operation procedure to
16417            evaluate the value of the array bound.  */
16418
16419         dw_die_ref ctx, decl_die;
16420         dw_loc_list_ref list;
16421
16422         list = loc_list_from_tree (bound, want_address);
16423         if (list == NULL)
16424           break;
16425
16426         if (single_element_loc_list_p (list))
16427           {
16428             add_AT_loc (subrange_die, bound_attr, list->expr);
16429             break;
16430           }
16431
16432         if (current_function_decl == 0)
16433           ctx = comp_unit_die;
16434         else
16435           ctx = lookup_decl_die (current_function_decl);
16436
16437         decl_die = new_die (DW_TAG_variable, ctx, bound);
16438         add_AT_flag (decl_die, DW_AT_artificial, 1);
16439         add_type_attribute (decl_die, TREE_TYPE (bound), 1, 0, ctx);
16440         add_AT_location_description (decl_die, DW_AT_location, list);
16441         add_AT_die_ref (subrange_die, bound_attr, decl_die);
16442         break;
16443       }
16444     }
16445 }
16446
16447 /* Add subscript info to TYPE_DIE, describing an array TYPE, collapsing
16448    possibly nested array subscripts in a flat sequence if COLLAPSE_P is true.
16449    Note that the block of subscript information for an array type also
16450    includes information about the element type of the given array type.  */
16451
16452 static void
16453 add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
16454 {
16455   unsigned dimension_number;
16456   tree lower, upper;
16457   dw_die_ref subrange_die;
16458
16459   for (dimension_number = 0;
16460        TREE_CODE (type) == ARRAY_TYPE && (dimension_number == 0 || collapse_p);
16461        type = TREE_TYPE (type), dimension_number++)
16462     {
16463       tree domain = TYPE_DOMAIN (type);
16464
16465       if (TYPE_STRING_FLAG (type) && is_fortran () && dimension_number > 0)
16466         break;
16467
16468       /* Arrays come in three flavors: Unspecified bounds, fixed bounds,
16469          and (in GNU C only) variable bounds.  Handle all three forms
16470          here.  */
16471       subrange_die = new_die (DW_TAG_subrange_type, type_die, NULL);
16472       if (domain)
16473         {
16474           /* We have an array type with specified bounds.  */
16475           lower = TYPE_MIN_VALUE (domain);
16476           upper = TYPE_MAX_VALUE (domain);
16477
16478           /* Define the index type.  */
16479           if (TREE_TYPE (domain))
16480             {
16481               /* ??? This is probably an Ada unnamed subrange type.  Ignore the
16482                  TREE_TYPE field.  We can't emit debug info for this
16483                  because it is an unnamed integral type.  */
16484               if (TREE_CODE (domain) == INTEGER_TYPE
16485                   && TYPE_NAME (domain) == NULL_TREE
16486                   && TREE_CODE (TREE_TYPE (domain)) == INTEGER_TYPE
16487                   && TYPE_NAME (TREE_TYPE (domain)) == NULL_TREE)
16488                 ;
16489               else
16490                 add_type_attribute (subrange_die, TREE_TYPE (domain), 0, 0,
16491                                     type_die);
16492             }
16493
16494           /* ??? If upper is NULL, the array has unspecified length,
16495              but it does have a lower bound.  This happens with Fortran
16496                dimension arr(N:*)
16497              Since the debugger is definitely going to need to know N
16498              to produce useful results, go ahead and output the lower
16499              bound solo, and hope the debugger can cope.  */
16500
16501           add_bound_info (subrange_die, DW_AT_lower_bound, lower);
16502           if (upper)
16503             add_bound_info (subrange_die, DW_AT_upper_bound, upper);
16504         }
16505
16506       /* Otherwise we have an array type with an unspecified length.  The
16507          DWARF-2 spec does not say how to handle this; let's just leave out the
16508          bounds.  */
16509     }
16510 }
16511
16512 static void
16513 add_byte_size_attribute (dw_die_ref die, tree tree_node)
16514 {
16515   unsigned size;
16516
16517   switch (TREE_CODE (tree_node))
16518     {
16519     case ERROR_MARK:
16520       size = 0;
16521       break;
16522     case ENUMERAL_TYPE:
16523     case RECORD_TYPE:
16524     case UNION_TYPE:
16525     case QUAL_UNION_TYPE:
16526       size = int_size_in_bytes (tree_node);
16527       break;
16528     case FIELD_DECL:
16529       /* For a data member of a struct or union, the DW_AT_byte_size is
16530          generally given as the number of bytes normally allocated for an
16531          object of the *declared* type of the member itself.  This is true
16532          even for bit-fields.  */
16533       size = simple_type_size_in_bits (field_type (tree_node)) / BITS_PER_UNIT;
16534       break;
16535     default:
16536       gcc_unreachable ();
16537     }
16538
16539   /* Note that `size' might be -1 when we get to this point.  If it is, that
16540      indicates that the byte size of the entity in question is variable.  We
16541      have no good way of expressing this fact in Dwarf at the present time,
16542      so just let the -1 pass on through.  */
16543   add_AT_unsigned (die, DW_AT_byte_size, size);
16544 }
16545
16546 /* For a FIELD_DECL node which represents a bit-field, output an attribute
16547    which specifies the distance in bits from the highest order bit of the
16548    "containing object" for the bit-field to the highest order bit of the
16549    bit-field itself.
16550
16551    For any given bit-field, the "containing object" is a hypothetical object
16552    (of some integral or enum type) within which the given bit-field lives.  The
16553    type of this hypothetical "containing object" is always the same as the
16554    declared type of the individual bit-field itself.  The determination of the
16555    exact location of the "containing object" for a bit-field is rather
16556    complicated.  It's handled by the `field_byte_offset' function (above).
16557
16558    Note that it is the size (in bytes) of the hypothetical "containing object"
16559    which will be given in the DW_AT_byte_size attribute for this bit-field.
16560    (See `byte_size_attribute' above).  */
16561
16562 static inline void
16563 add_bit_offset_attribute (dw_die_ref die, tree decl)
16564 {
16565   HOST_WIDE_INT object_offset_in_bytes = field_byte_offset (decl);
16566   tree type = DECL_BIT_FIELD_TYPE (decl);
16567   HOST_WIDE_INT bitpos_int;
16568   HOST_WIDE_INT highest_order_object_bit_offset;
16569   HOST_WIDE_INT highest_order_field_bit_offset;
16570   HOST_WIDE_INT unsigned bit_offset;
16571
16572   /* Must be a field and a bit field.  */
16573   gcc_assert (type && TREE_CODE (decl) == FIELD_DECL);
16574
16575   /* We can't yet handle bit-fields whose offsets are variable, so if we
16576      encounter such things, just return without generating any attribute
16577      whatsoever.  Likewise for variable or too large size.  */
16578   if (! host_integerp (bit_position (decl), 0)
16579       || ! host_integerp (DECL_SIZE (decl), 1))
16580     return;
16581
16582   bitpos_int = int_bit_position (decl);
16583
16584   /* Note that the bit offset is always the distance (in bits) from the
16585      highest-order bit of the "containing object" to the highest-order bit of
16586      the bit-field itself.  Since the "high-order end" of any object or field
16587      is different on big-endian and little-endian machines, the computation
16588      below must take account of these differences.  */
16589   highest_order_object_bit_offset = object_offset_in_bytes * BITS_PER_UNIT;
16590   highest_order_field_bit_offset = bitpos_int;
16591
16592   if (! BYTES_BIG_ENDIAN)
16593     {
16594       highest_order_field_bit_offset += tree_low_cst (DECL_SIZE (decl), 0);
16595       highest_order_object_bit_offset += simple_type_size_in_bits (type);
16596     }
16597
16598   bit_offset
16599     = (! BYTES_BIG_ENDIAN
16600        ? highest_order_object_bit_offset - highest_order_field_bit_offset
16601        : highest_order_field_bit_offset - highest_order_object_bit_offset);
16602
16603   add_AT_unsigned (die, DW_AT_bit_offset, bit_offset);
16604 }
16605
16606 /* For a FIELD_DECL node which represents a bit field, output an attribute
16607    which specifies the length in bits of the given field.  */
16608
16609 static inline void
16610 add_bit_size_attribute (dw_die_ref die, tree decl)
16611 {
16612   /* Must be a field and a bit field.  */
16613   gcc_assert (TREE_CODE (decl) == FIELD_DECL
16614               && DECL_BIT_FIELD_TYPE (decl));
16615
16616   if (host_integerp (DECL_SIZE (decl), 1))
16617     add_AT_unsigned (die, DW_AT_bit_size, tree_low_cst (DECL_SIZE (decl), 1));
16618 }
16619
16620 /* If the compiled language is ANSI C, then add a 'prototyped'
16621    attribute, if arg types are given for the parameters of a function.  */
16622
16623 static inline void
16624 add_prototyped_attribute (dw_die_ref die, tree func_type)
16625 {
16626   if (get_AT_unsigned (comp_unit_die, DW_AT_language) == DW_LANG_C89
16627       && TYPE_ARG_TYPES (func_type) != NULL)
16628     add_AT_flag (die, DW_AT_prototyped, 1);
16629 }
16630
16631 /* Add an 'abstract_origin' attribute below a given DIE.  The DIE is found
16632    by looking in either the type declaration or object declaration
16633    equate table.  */
16634
16635 static inline dw_die_ref
16636 add_abstract_origin_attribute (dw_die_ref die, tree origin)
16637 {
16638   dw_die_ref origin_die = NULL;
16639
16640   if (TREE_CODE (origin) != FUNCTION_DECL)
16641     {
16642       /* We may have gotten separated from the block for the inlined
16643          function, if we're in an exception handler or some such; make
16644          sure that the abstract function has been written out.
16645
16646          Doing this for nested functions is wrong, however; functions are
16647          distinct units, and our context might not even be inline.  */
16648       tree fn = origin;
16649
16650       if (TYPE_P (fn))
16651         fn = TYPE_STUB_DECL (fn);
16652
16653       fn = decl_function_context (fn);
16654       if (fn)
16655         dwarf2out_abstract_function (fn);
16656     }
16657
16658   if (DECL_P (origin))
16659     origin_die = lookup_decl_die (origin);
16660   else if (TYPE_P (origin))
16661     origin_die = lookup_type_die (origin);
16662
16663   /* XXX: Functions that are never lowered don't always have correct block
16664      trees (in the case of java, they simply have no block tree, in some other
16665      languages).  For these functions, there is nothing we can really do to
16666      output correct debug info for inlined functions in all cases.  Rather
16667      than die, we'll just produce deficient debug info now, in that we will
16668      have variables without a proper abstract origin.  In the future, when all
16669      functions are lowered, we should re-add a gcc_assert (origin_die)
16670      here.  */
16671
16672   if (origin_die)
16673     add_AT_die_ref (die, DW_AT_abstract_origin, origin_die);
16674   return origin_die;
16675 }
16676
16677 /* We do not currently support the pure_virtual attribute.  */
16678
16679 static inline void
16680 add_pure_or_virtual_attribute (dw_die_ref die, tree func_decl)
16681 {
16682   if (DECL_VINDEX (func_decl))
16683     {
16684       add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
16685
16686       if (host_integerp (DECL_VINDEX (func_decl), 0))
16687         add_AT_loc (die, DW_AT_vtable_elem_location,
16688                     new_loc_descr (DW_OP_constu,
16689                                    tree_low_cst (DECL_VINDEX (func_decl), 0),
16690                                    0));
16691
16692       /* GNU extension: Record what type this method came from originally.  */
16693       if (debug_info_level > DINFO_LEVEL_TERSE
16694           && DECL_CONTEXT (func_decl))
16695         add_AT_die_ref (die, DW_AT_containing_type,
16696                         lookup_type_die (DECL_CONTEXT (func_decl)));
16697     }
16698 }
16699 \f
16700 /* Add source coordinate attributes for the given decl.  */
16701
16702 static void
16703 add_src_coords_attributes (dw_die_ref die, tree decl)
16704 {
16705   expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
16706
16707   add_AT_file (die, DW_AT_decl_file, lookup_filename (s.file));
16708   add_AT_unsigned (die, DW_AT_decl_line, s.line);
16709 }
16710
16711 /* Add a DW_AT_name attribute and source coordinate attribute for the
16712    given decl, but only if it actually has a name.  */
16713
16714 static void
16715 add_name_and_src_coords_attributes (dw_die_ref die, tree decl)
16716 {
16717   tree decl_name;
16718
16719   decl_name = DECL_NAME (decl);
16720   if (decl_name != NULL && IDENTIFIER_POINTER (decl_name) != NULL)
16721     {
16722       const char *name = dwarf2_name (decl, 0);
16723       if (name)
16724         add_name_attribute (die, name);
16725       if (! DECL_ARTIFICIAL (decl))
16726         add_src_coords_attributes (die, decl);
16727
16728       if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
16729           && TREE_PUBLIC (decl)
16730           && !DECL_ABSTRACT (decl)
16731           && !(TREE_CODE (decl) == VAR_DECL && DECL_REGISTER (decl))
16732           && !is_fortran ())
16733         {
16734           /* Defer until we have an assembler name set.  */
16735           if (!DECL_ASSEMBLER_NAME_SET_P (decl))
16736             {
16737               limbo_die_node *asm_name;
16738
16739               asm_name = GGC_CNEW (limbo_die_node);
16740               asm_name->die = die;
16741               asm_name->created_for = decl;
16742               asm_name->next = deferred_asm_name;
16743               deferred_asm_name = asm_name;
16744             }
16745           else if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
16746             add_AT_string (die, DW_AT_MIPS_linkage_name,
16747                            IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
16748         }
16749     }
16750
16751 #ifdef VMS_DEBUGGING_INFO
16752   /* Get the function's name, as described by its RTL.  This may be different
16753      from the DECL_NAME name used in the source file.  */
16754   if (TREE_CODE (decl) == FUNCTION_DECL && TREE_ASM_WRITTEN (decl))
16755     {
16756       add_AT_addr (die, DW_AT_VMS_rtnbeg_pd_address,
16757                    XEXP (DECL_RTL (decl), 0));
16758       VEC_safe_push (rtx, gc, used_rtx_array, XEXP (DECL_RTL (decl), 0));
16759     }
16760 #endif
16761 }
16762
16763 /* Push a new declaration scope.  */
16764
16765 static void
16766 push_decl_scope (tree scope)
16767 {
16768   VEC_safe_push (tree, gc, decl_scope_table, scope);
16769 }
16770
16771 /* Pop a declaration scope.  */
16772
16773 static inline void
16774 pop_decl_scope (void)
16775 {
16776   VEC_pop (tree, decl_scope_table);
16777 }
16778
16779 /* Return the DIE for the scope that immediately contains this type.
16780    Non-named types get global scope.  Named types nested in other
16781    types get their containing scope if it's open, or global scope
16782    otherwise.  All other types (i.e. function-local named types) get
16783    the current active scope.  */
16784
16785 static dw_die_ref
16786 scope_die_for (tree t, dw_die_ref context_die)
16787 {
16788   dw_die_ref scope_die = NULL;
16789   tree containing_scope;
16790   int i;
16791
16792   /* Non-types always go in the current scope.  */
16793   gcc_assert (TYPE_P (t));
16794
16795   containing_scope = TYPE_CONTEXT (t);
16796
16797   /* Use the containing namespace if it was passed in (for a declaration).  */
16798   if (containing_scope && TREE_CODE (containing_scope) == NAMESPACE_DECL)
16799     {
16800       if (context_die == lookup_decl_die (containing_scope))
16801         /* OK */;
16802       else
16803         containing_scope = NULL_TREE;
16804     }
16805
16806   /* Ignore function type "scopes" from the C frontend.  They mean that
16807      a tagged type is local to a parmlist of a function declarator, but
16808      that isn't useful to DWARF.  */
16809   if (containing_scope && TREE_CODE (containing_scope) == FUNCTION_TYPE)
16810     containing_scope = NULL_TREE;
16811
16812   if (containing_scope == NULL_TREE)
16813     scope_die = comp_unit_die;
16814   else if (TYPE_P (containing_scope))
16815     {
16816       /* For types, we can just look up the appropriate DIE.  But
16817          first we check to see if we're in the middle of emitting it
16818          so we know where the new DIE should go.  */
16819       for (i = VEC_length (tree, decl_scope_table) - 1; i >= 0; --i)
16820         if (VEC_index (tree, decl_scope_table, i) == containing_scope)
16821           break;
16822
16823       if (i < 0)
16824         {
16825           gcc_assert (debug_info_level <= DINFO_LEVEL_TERSE
16826                       || TREE_ASM_WRITTEN (containing_scope));
16827
16828           /* If none of the current dies are suitable, we get file scope.  */
16829           scope_die = comp_unit_die;
16830         }
16831       else
16832         scope_die = lookup_type_die (containing_scope);
16833     }
16834   else
16835     scope_die = context_die;
16836
16837   return scope_die;
16838 }
16839
16840 /* Returns nonzero if CONTEXT_DIE is internal to a function.  */
16841
16842 static inline int
16843 local_scope_p (dw_die_ref context_die)
16844 {
16845   for (; context_die; context_die = context_die->die_parent)
16846     if (context_die->die_tag == DW_TAG_inlined_subroutine
16847         || context_die->die_tag == DW_TAG_subprogram)
16848       return 1;
16849
16850   return 0;
16851 }
16852
16853 /* Returns nonzero if CONTEXT_DIE is a class.  */
16854
16855 static inline int
16856 class_scope_p (dw_die_ref context_die)
16857 {
16858   return (context_die
16859           && (context_die->die_tag == DW_TAG_structure_type
16860               || context_die->die_tag == DW_TAG_class_type
16861               || context_die->die_tag == DW_TAG_interface_type
16862               || context_die->die_tag == DW_TAG_union_type));
16863 }
16864
16865 /* Returns nonzero if CONTEXT_DIE is a class or namespace, for deciding
16866    whether or not to treat a DIE in this context as a declaration.  */
16867
16868 static inline int
16869 class_or_namespace_scope_p (dw_die_ref context_die)
16870 {
16871   return (class_scope_p (context_die)
16872           || (context_die && context_die->die_tag == DW_TAG_namespace));
16873 }
16874
16875 /* Many forms of DIEs require a "type description" attribute.  This
16876    routine locates the proper "type descriptor" die for the type given
16877    by 'type', and adds a DW_AT_type attribute below the given die.  */
16878
16879 static void
16880 add_type_attribute (dw_die_ref object_die, tree type, int decl_const,
16881                     int decl_volatile, dw_die_ref context_die)
16882 {
16883   enum tree_code code  = TREE_CODE (type);
16884   dw_die_ref type_die  = NULL;
16885
16886   /* ??? If this type is an unnamed subrange type of an integral, floating-point
16887      or fixed-point type, use the inner type.  This is because we have no
16888      support for unnamed types in base_type_die.  This can happen if this is
16889      an Ada subrange type.  Correct solution is emit a subrange type die.  */
16890   if ((code == INTEGER_TYPE || code == REAL_TYPE || code == FIXED_POINT_TYPE)
16891       && TREE_TYPE (type) != 0 && TYPE_NAME (type) == 0)
16892     type = TREE_TYPE (type), code = TREE_CODE (type);
16893
16894   if (code == ERROR_MARK
16895       /* Handle a special case.  For functions whose return type is void, we
16896          generate *no* type attribute.  (Note that no object may have type
16897          `void', so this only applies to function return types).  */
16898       || code == VOID_TYPE)
16899     return;
16900
16901   type_die = modified_type_die (type,
16902                                 decl_const || TYPE_READONLY (type),
16903                                 decl_volatile || TYPE_VOLATILE (type),
16904                                 context_die);
16905
16906   if (type_die != NULL)
16907     add_AT_die_ref (object_die, DW_AT_type, type_die);
16908 }
16909
16910 /* Given an object die, add the calling convention attribute for the
16911    function call type.  */
16912 static void
16913 add_calling_convention_attribute (dw_die_ref subr_die, tree decl)
16914 {
16915   enum dwarf_calling_convention value = DW_CC_normal;
16916
16917   value = ((enum dwarf_calling_convention)
16918            targetm.dwarf_calling_convention (TREE_TYPE (decl)));
16919
16920   /* DWARF doesn't provide a way to identify a program's source-level
16921      entry point.  DW_AT_calling_convention attributes are only meant
16922      to describe functions' calling conventions.  However, lacking a
16923      better way to signal the Fortran main program, we use this for the
16924      time being, following existing custom.  */
16925   if (is_fortran ()
16926       && !strcmp (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)), "MAIN__"))
16927     value = DW_CC_program;
16928
16929   /* Only add the attribute if the backend requests it, and
16930      is not DW_CC_normal.  */
16931   if (value && (value != DW_CC_normal))
16932     add_AT_unsigned (subr_die, DW_AT_calling_convention, value);
16933 }
16934
16935 /* Given a tree pointer to a struct, class, union, or enum type node, return
16936    a pointer to the (string) tag name for the given type, or zero if the type
16937    was declared without a tag.  */
16938
16939 static const char *
16940 type_tag (const_tree type)
16941 {
16942   const char *name = 0;
16943
16944   if (TYPE_NAME (type) != 0)
16945     {
16946       tree t = 0;
16947
16948       /* Find the IDENTIFIER_NODE for the type name.  */
16949       if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
16950         t = TYPE_NAME (type);
16951
16952       /* The g++ front end makes the TYPE_NAME of *each* tagged type point to
16953          a TYPE_DECL node, regardless of whether or not a `typedef' was
16954          involved.  */
16955       else if (TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
16956                && ! DECL_IGNORED_P (TYPE_NAME (type)))
16957         {
16958           /* We want to be extra verbose.  Don't call dwarf_name if
16959              DECL_NAME isn't set.  The default hook for decl_printable_name
16960              doesn't like that, and in this context it's correct to return
16961              0, instead of "<anonymous>" or the like.  */
16962           if (DECL_NAME (TYPE_NAME (type)))
16963             name = lang_hooks.dwarf_name (TYPE_NAME (type), 2);
16964         }
16965
16966       /* Now get the name as a string, or invent one.  */
16967       if (!name && t != 0)
16968         name = IDENTIFIER_POINTER (t);
16969     }
16970
16971   return (name == 0 || *name == '\0') ? 0 : name;
16972 }
16973
16974 /* Return the type associated with a data member, make a special check
16975    for bit field types.  */
16976
16977 static inline tree
16978 member_declared_type (const_tree member)
16979 {
16980   return (DECL_BIT_FIELD_TYPE (member)
16981           ? DECL_BIT_FIELD_TYPE (member) : TREE_TYPE (member));
16982 }
16983
16984 /* Get the decl's label, as described by its RTL. This may be different
16985    from the DECL_NAME name used in the source file.  */
16986
16987 #if 0
16988 static const char *
16989 decl_start_label (tree decl)
16990 {
16991   rtx x;
16992   const char *fnname;
16993
16994   x = DECL_RTL (decl);
16995   gcc_assert (MEM_P (x));
16996
16997   x = XEXP (x, 0);
16998   gcc_assert (GET_CODE (x) == SYMBOL_REF);
16999
17000   fnname = XSTR (x, 0);
17001   return fnname;
17002 }
17003 #endif
17004 \f
17005 /* These routines generate the internal representation of the DIE's for
17006    the compilation unit.  Debugging information is collected by walking
17007    the declaration trees passed in from dwarf2out_decl().  */
17008
17009 static void
17010 gen_array_type_die (tree type, dw_die_ref context_die)
17011 {
17012   dw_die_ref scope_die = scope_die_for (type, context_die);
17013   dw_die_ref array_die;
17014
17015   /* GNU compilers represent multidimensional array types as sequences of one
17016      dimensional array types whose element types are themselves array types.
17017      We sometimes squish that down to a single array_type DIE with multiple
17018      subscripts in the Dwarf debugging info.  The draft Dwarf specification
17019      say that we are allowed to do this kind of compression in C, because
17020      there is no difference between an array of arrays and a multidimensional
17021      array.  We don't do this for Ada to remain as close as possible to the
17022      actual representation, which is especially important against the language
17023      flexibilty wrt arrays of variable size.  */
17024
17025   bool collapse_nested_arrays = !is_ada ();
17026   tree element_type;
17027
17028   /* Emit DW_TAG_string_type for Fortran character types (with kind 1 only, as
17029      DW_TAG_string_type doesn't have DW_AT_type attribute).  */
17030   if (TYPE_STRING_FLAG (type)
17031       && TREE_CODE (type) == ARRAY_TYPE
17032       && is_fortran ()
17033       && TYPE_MODE (TREE_TYPE (type)) == TYPE_MODE (char_type_node))
17034     {
17035       HOST_WIDE_INT size;
17036
17037       array_die = new_die (DW_TAG_string_type, scope_die, type);
17038       add_name_attribute (array_die, type_tag (type));
17039       equate_type_number_to_die (type, array_die);
17040       size = int_size_in_bytes (type);
17041       if (size >= 0)
17042         add_AT_unsigned (array_die, DW_AT_byte_size, size);
17043       else if (TYPE_DOMAIN (type) != NULL_TREE
17044                && TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE
17045                && DECL_P (TYPE_MAX_VALUE (TYPE_DOMAIN (type))))
17046         {
17047           tree szdecl = TYPE_MAX_VALUE (TYPE_DOMAIN (type));
17048           dw_loc_list_ref loc = loc_list_from_tree (szdecl, 2);
17049
17050           size = int_size_in_bytes (TREE_TYPE (szdecl));
17051           if (loc && size > 0)
17052             {
17053               add_AT_location_description (array_die, DW_AT_string_length, loc);
17054               if (size != DWARF2_ADDR_SIZE)
17055                 add_AT_unsigned (array_die, DW_AT_byte_size, size);
17056             }
17057         }
17058       return;
17059     }
17060
17061   /* ??? The SGI dwarf reader fails for array of array of enum types
17062      (e.g. const enum machine_mode insn_operand_mode[2][10]) unless the inner
17063      array type comes before the outer array type.  We thus call gen_type_die
17064      before we new_die and must prevent nested array types collapsing for this
17065      target.  */
17066
17067 #ifdef MIPS_DEBUGGING_INFO
17068   gen_type_die (TREE_TYPE (type), context_die);
17069   collapse_nested_arrays = false;
17070 #endif
17071
17072   array_die = new_die (DW_TAG_array_type, scope_die, type);
17073   add_name_attribute (array_die, type_tag (type));
17074   equate_type_number_to_die (type, array_die);
17075
17076   if (TREE_CODE (type) == VECTOR_TYPE)
17077     {
17078       /* The frontend feeds us a representation for the vector as a struct
17079          containing an array.  Pull out the array type.  */
17080       type = TREE_TYPE (TYPE_FIELDS (TYPE_DEBUG_REPRESENTATION_TYPE (type)));
17081       add_AT_flag (array_die, DW_AT_GNU_vector, 1);
17082     }
17083
17084   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17085   if (is_fortran ()
17086       && TREE_CODE (type) == ARRAY_TYPE
17087       && TREE_CODE (TREE_TYPE (type)) == ARRAY_TYPE
17088       && !TYPE_STRING_FLAG (TREE_TYPE (type)))
17089     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17090
17091 #if 0
17092   /* We default the array ordering.  SDB will probably do
17093      the right things even if DW_AT_ordering is not present.  It's not even
17094      an issue until we start to get into multidimensional arrays anyway.  If
17095      SDB is ever caught doing the Wrong Thing for multi-dimensional arrays,
17096      then we'll have to put the DW_AT_ordering attribute back in.  (But if
17097      and when we find out that we need to put these in, we will only do so
17098      for multidimensional arrays.  */
17099   add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_row_major);
17100 #endif
17101
17102 #ifdef MIPS_DEBUGGING_INFO
17103   /* The SGI compilers handle arrays of unknown bound by setting
17104      AT_declaration and not emitting any subrange DIEs.  */
17105   if (! TYPE_DOMAIN (type))
17106     add_AT_flag (array_die, DW_AT_declaration, 1);
17107   else
17108 #endif
17109     add_subscript_info (array_die, type, collapse_nested_arrays);
17110
17111   /* Add representation of the type of the elements of this array type and
17112      emit the corresponding DIE if we haven't done it already.  */
17113   element_type = TREE_TYPE (type);
17114   if (collapse_nested_arrays)
17115     while (TREE_CODE (element_type) == ARRAY_TYPE)
17116       {
17117         if (TYPE_STRING_FLAG (element_type) && is_fortran ())
17118           break;
17119         element_type = TREE_TYPE (element_type);
17120       }
17121
17122 #ifndef MIPS_DEBUGGING_INFO
17123   gen_type_die (element_type, context_die);
17124 #endif
17125
17126   add_type_attribute (array_die, element_type, 0, 0, context_die);
17127
17128   if (get_AT (array_die, DW_AT_name))
17129     add_pubtype (type, array_die);
17130 }
17131
17132 static dw_loc_descr_ref
17133 descr_info_loc (tree val, tree base_decl)
17134 {
17135   HOST_WIDE_INT size;
17136   dw_loc_descr_ref loc, loc2;
17137   enum dwarf_location_atom op;
17138
17139   if (val == base_decl)
17140     return new_loc_descr (DW_OP_push_object_address, 0, 0);
17141
17142   switch (TREE_CODE (val))
17143     {
17144     CASE_CONVERT:
17145       return descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17146     case VAR_DECL:
17147       return loc_descriptor_from_tree (val, 0);
17148     case INTEGER_CST:
17149       if (host_integerp (val, 0))
17150         return int_loc_descriptor (tree_low_cst (val, 0));
17151       break;
17152     case INDIRECT_REF:
17153       size = int_size_in_bytes (TREE_TYPE (val));
17154       if (size < 0)
17155         break;
17156       loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17157       if (!loc)
17158         break;
17159       if (size == DWARF2_ADDR_SIZE)
17160         add_loc_descr (&loc, new_loc_descr (DW_OP_deref, 0, 0));
17161       else
17162         add_loc_descr (&loc, new_loc_descr (DW_OP_deref_size, size, 0));
17163       return loc;
17164     case POINTER_PLUS_EXPR:
17165     case PLUS_EXPR:
17166       if (host_integerp (TREE_OPERAND (val, 1), 1)
17167           && (unsigned HOST_WIDE_INT) tree_low_cst (TREE_OPERAND (val, 1), 1)
17168              < 16384)
17169         {
17170           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17171           if (!loc)
17172             break;
17173           loc_descr_plus_const (&loc, tree_low_cst (TREE_OPERAND (val, 1), 0));
17174         }
17175       else
17176         {
17177           op = DW_OP_plus;
17178         do_binop:
17179           loc = descr_info_loc (TREE_OPERAND (val, 0), base_decl);
17180           if (!loc)
17181             break;
17182           loc2 = descr_info_loc (TREE_OPERAND (val, 1), base_decl);
17183           if (!loc2)
17184             break;
17185           add_loc_descr (&loc, loc2);
17186           add_loc_descr (&loc2, new_loc_descr (op, 0, 0));
17187         }
17188       return loc;
17189     case MINUS_EXPR:
17190       op = DW_OP_minus;
17191       goto do_binop;
17192     case MULT_EXPR:
17193       op = DW_OP_mul;
17194       goto do_binop;
17195     case EQ_EXPR:
17196       op = DW_OP_eq;
17197       goto do_binop;
17198     case NE_EXPR:
17199       op = DW_OP_ne;
17200       goto do_binop;
17201     default:
17202       break;
17203     }
17204   return NULL;
17205 }
17206
17207 static void
17208 add_descr_info_field (dw_die_ref die, enum dwarf_attribute attr,
17209                       tree val, tree base_decl)
17210 {
17211   dw_loc_descr_ref loc;
17212
17213   if (host_integerp (val, 0))
17214     {
17215       add_AT_unsigned (die, attr, tree_low_cst (val, 0));
17216       return;
17217     }
17218
17219   loc = descr_info_loc (val, base_decl);
17220   if (!loc)
17221     return;
17222
17223   add_AT_loc (die, attr, loc);
17224 }
17225
17226 /* This routine generates DIE for array with hidden descriptor, details
17227    are filled into *info by a langhook.  */
17228
17229 static void
17230 gen_descr_array_type_die (tree type, struct array_descr_info *info,
17231                           dw_die_ref context_die)
17232 {
17233   dw_die_ref scope_die = scope_die_for (type, context_die);
17234   dw_die_ref array_die;
17235   int dim;
17236
17237   array_die = new_die (DW_TAG_array_type, scope_die, type);
17238   add_name_attribute (array_die, type_tag (type));
17239   equate_type_number_to_die (type, array_die);
17240
17241   /* For Fortran multidimensional arrays use DW_ORD_col_major ordering.  */
17242   if (is_fortran ()
17243       && info->ndimensions >= 2)
17244     add_AT_unsigned (array_die, DW_AT_ordering, DW_ORD_col_major);
17245
17246   if (info->data_location)
17247     add_descr_info_field (array_die, DW_AT_data_location, info->data_location,
17248                           info->base_decl);
17249   if (info->associated)
17250     add_descr_info_field (array_die, DW_AT_associated, info->associated,
17251                           info->base_decl);
17252   if (info->allocated)
17253     add_descr_info_field (array_die, DW_AT_allocated, info->allocated,
17254                           info->base_decl);
17255
17256   for (dim = 0; dim < info->ndimensions; dim++)
17257     {
17258       dw_die_ref subrange_die
17259         = new_die (DW_TAG_subrange_type, array_die, NULL);
17260
17261       if (info->dimen[dim].lower_bound)
17262         {
17263           /* If it is the default value, omit it.  */
17264           if ((is_c_family () || is_java ())
17265               && integer_zerop (info->dimen[dim].lower_bound))
17266             ;
17267           else if (is_fortran ()
17268                    && integer_onep (info->dimen[dim].lower_bound))
17269             ;
17270           else
17271             add_descr_info_field (subrange_die, DW_AT_lower_bound,
17272                                   info->dimen[dim].lower_bound,
17273                                   info->base_decl);
17274         }
17275       if (info->dimen[dim].upper_bound)
17276         add_descr_info_field (subrange_die, DW_AT_upper_bound,
17277                               info->dimen[dim].upper_bound,
17278                               info->base_decl);
17279       if (info->dimen[dim].stride)
17280         add_descr_info_field (subrange_die, DW_AT_byte_stride,
17281                               info->dimen[dim].stride,
17282                               info->base_decl);
17283     }
17284
17285   gen_type_die (info->element_type, context_die);
17286   add_type_attribute (array_die, info->element_type, 0, 0, context_die);
17287
17288   if (get_AT (array_die, DW_AT_name))
17289     add_pubtype (type, array_die);
17290 }
17291
17292 #if 0
17293 static void
17294 gen_entry_point_die (tree decl, dw_die_ref context_die)
17295 {
17296   tree origin = decl_ultimate_origin (decl);
17297   dw_die_ref decl_die = new_die (DW_TAG_entry_point, context_die, decl);
17298
17299   if (origin != NULL)
17300     add_abstract_origin_attribute (decl_die, origin);
17301   else
17302     {
17303       add_name_and_src_coords_attributes (decl_die, decl);
17304       add_type_attribute (decl_die, TREE_TYPE (TREE_TYPE (decl)),
17305                           0, 0, context_die);
17306     }
17307
17308   if (DECL_ABSTRACT (decl))
17309     equate_decl_number_to_die (decl, decl_die);
17310   else
17311     add_AT_lbl_id (decl_die, DW_AT_low_pc, decl_start_label (decl));
17312 }
17313 #endif
17314
17315 /* Walk through the list of incomplete types again, trying once more to
17316    emit full debugging info for them.  */
17317
17318 static void
17319 retry_incomplete_types (void)
17320 {
17321   int i;
17322
17323   for (i = VEC_length (tree, incomplete_types) - 1; i >= 0; i--)
17324     if (should_emit_struct_debug (VEC_index (tree, incomplete_types, i),
17325                                   DINFO_USAGE_DIR_USE))
17326       gen_type_die (VEC_index (tree, incomplete_types, i), comp_unit_die);
17327 }
17328
17329 /* Determine what tag to use for a record type.  */
17330
17331 static enum dwarf_tag
17332 record_type_tag (tree type)
17333 {
17334   if (! lang_hooks.types.classify_record)
17335     return DW_TAG_structure_type;
17336
17337   switch (lang_hooks.types.classify_record (type))
17338     {
17339     case RECORD_IS_STRUCT:
17340       return DW_TAG_structure_type;
17341
17342     case RECORD_IS_CLASS:
17343       return DW_TAG_class_type;
17344
17345     case RECORD_IS_INTERFACE:
17346       if (dwarf_version >= 3 || !dwarf_strict)
17347         return DW_TAG_interface_type;
17348       return DW_TAG_structure_type;
17349
17350     default:
17351       gcc_unreachable ();
17352     }
17353 }
17354
17355 /* Generate a DIE to represent an enumeration type.  Note that these DIEs
17356    include all of the information about the enumeration values also. Each
17357    enumerated type name/value is listed as a child of the enumerated type
17358    DIE.  */
17359
17360 static dw_die_ref
17361 gen_enumeration_type_die (tree type, dw_die_ref context_die)
17362 {
17363   dw_die_ref type_die = lookup_type_die (type);
17364
17365   if (type_die == NULL)
17366     {
17367       type_die = new_die (DW_TAG_enumeration_type,
17368                           scope_die_for (type, context_die), type);
17369       equate_type_number_to_die (type, type_die);
17370       add_name_attribute (type_die, type_tag (type));
17371     }
17372   else if (! TYPE_SIZE (type))
17373     return type_die;
17374   else
17375     remove_AT (type_die, DW_AT_declaration);
17376
17377   /* Handle a GNU C/C++ extension, i.e. incomplete enum types.  If the
17378      given enum type is incomplete, do not generate the DW_AT_byte_size
17379      attribute or the DW_AT_element_list attribute.  */
17380   if (TYPE_SIZE (type))
17381     {
17382       tree link;
17383
17384       TREE_ASM_WRITTEN (type) = 1;
17385       add_byte_size_attribute (type_die, type);
17386       if (TYPE_STUB_DECL (type) != NULL_TREE)
17387         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
17388
17389       /* If the first reference to this type was as the return type of an
17390          inline function, then it may not have a parent.  Fix this now.  */
17391       if (type_die->die_parent == NULL)
17392         add_child_die (scope_die_for (type, context_die), type_die);
17393
17394       for (link = TYPE_VALUES (type);
17395            link != NULL; link = TREE_CHAIN (link))
17396         {
17397           dw_die_ref enum_die = new_die (DW_TAG_enumerator, type_die, link);
17398           tree value = TREE_VALUE (link);
17399
17400           add_name_attribute (enum_die,
17401                               IDENTIFIER_POINTER (TREE_PURPOSE (link)));
17402
17403           if (TREE_CODE (value) == CONST_DECL)
17404             value = DECL_INITIAL (value);
17405
17406           if (host_integerp (value, TYPE_UNSIGNED (TREE_TYPE (value))))
17407             /* DWARF2 does not provide a way of indicating whether or
17408                not enumeration constants are signed or unsigned.  GDB
17409                always assumes the values are signed, so we output all
17410                values as if they were signed.  That means that
17411                enumeration constants with very large unsigned values
17412                will appear to have negative values in the debugger.  */
17413             add_AT_int (enum_die, DW_AT_const_value,
17414                         tree_low_cst (value, tree_int_cst_sgn (value) > 0));
17415         }
17416     }
17417   else
17418     add_AT_flag (type_die, DW_AT_declaration, 1);
17419
17420   if (get_AT (type_die, DW_AT_name))
17421     add_pubtype (type, type_die);
17422
17423   return type_die;
17424 }
17425
17426 /* Generate a DIE to represent either a real live formal parameter decl or to
17427    represent just the type of some formal parameter position in some function
17428    type.
17429
17430    Note that this routine is a bit unusual because its argument may be a
17431    ..._DECL node (i.e. either a PARM_DECL or perhaps a VAR_DECL which
17432    represents an inlining of some PARM_DECL) or else some sort of a ..._TYPE
17433    node.  If it's the former then this function is being called to output a
17434    DIE to represent a formal parameter object (or some inlining thereof).  If
17435    it's the latter, then this function is only being called to output a
17436    DW_TAG_formal_parameter DIE to stand as a placeholder for some formal
17437    argument type of some subprogram type.
17438    If EMIT_NAME_P is true, name and source coordinate attributes
17439    are emitted.  */
17440
17441 static dw_die_ref
17442 gen_formal_parameter_die (tree node, tree origin, bool emit_name_p,
17443                           dw_die_ref context_die)
17444 {
17445   tree node_or_origin = node ? node : origin;
17446   tree ultimate_origin;
17447   dw_die_ref parm_die
17448     = new_die (DW_TAG_formal_parameter, context_die, node);
17449
17450   switch (TREE_CODE_CLASS (TREE_CODE (node_or_origin)))
17451     {
17452     case tcc_declaration:
17453       ultimate_origin = decl_ultimate_origin (node_or_origin);
17454       if (node || ultimate_origin)
17455         origin = ultimate_origin;
17456       if (origin != NULL)
17457         add_abstract_origin_attribute (parm_die, origin);
17458       else
17459         {
17460           tree type = TREE_TYPE (node);
17461           if (emit_name_p)
17462             add_name_and_src_coords_attributes (parm_die, node);
17463           if (decl_by_reference_p (node))
17464             add_type_attribute (parm_die, TREE_TYPE (type), 0, 0,
17465                                 context_die);
17466           else
17467             add_type_attribute (parm_die, type,
17468                                 TREE_READONLY (node),
17469                                 TREE_THIS_VOLATILE (node),
17470                                 context_die);
17471           if (DECL_ARTIFICIAL (node))
17472             add_AT_flag (parm_die, DW_AT_artificial, 1);
17473         }
17474
17475       if (node && node != origin)
17476         equate_decl_number_to_die (node, parm_die);
17477       if (! DECL_ABSTRACT (node_or_origin))
17478         add_location_or_const_value_attribute (parm_die, node_or_origin,
17479                                                DW_AT_location);
17480
17481       break;
17482
17483     case tcc_type:
17484       /* We were called with some kind of a ..._TYPE node.  */
17485       add_type_attribute (parm_die, node_or_origin, 0, 0, context_die);
17486       break;
17487
17488     default:
17489       gcc_unreachable ();
17490     }
17491
17492   return parm_die;
17493 }
17494
17495 /* Generate and return a DW_TAG_GNU_formal_parameter_pack. Also generate
17496    children DW_TAG_formal_parameter DIEs representing the arguments of the
17497    parameter pack.
17498
17499    PARM_PACK must be a function parameter pack.
17500    PACK_ARG is the first argument of the parameter pack. Its TREE_CHAIN
17501    must point to the subsequent arguments of the function PACK_ARG belongs to.
17502    SUBR_DIE is the DIE of the function PACK_ARG belongs to.
17503    If NEXT_ARG is non NULL, *NEXT_ARG is set to the function argument
17504    following the last one for which a DIE was generated.  */
17505
17506 static dw_die_ref
17507 gen_formal_parameter_pack_die  (tree parm_pack,
17508                                 tree pack_arg,
17509                                 dw_die_ref subr_die,
17510                                 tree *next_arg)
17511 {
17512   tree arg;
17513   dw_die_ref parm_pack_die;
17514
17515   gcc_assert (parm_pack
17516               && lang_hooks.function_parameter_pack_p (parm_pack)
17517               && subr_die);
17518
17519   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, parm_pack);
17520   add_src_coords_attributes (parm_pack_die, parm_pack);
17521
17522   for (arg = pack_arg; arg; arg = TREE_CHAIN (arg))
17523     {
17524       if (! lang_hooks.decls.function_parm_expanded_from_pack_p (arg,
17525                                                                  parm_pack))
17526         break;
17527       gen_formal_parameter_die (arg, NULL,
17528                                 false /* Don't emit name attribute.  */,
17529                                 parm_pack_die);
17530     }
17531   if (next_arg)
17532     *next_arg = arg;
17533   return parm_pack_die;
17534 }
17535
17536 /* Generate a special type of DIE used as a stand-in for a trailing ellipsis
17537    at the end of an (ANSI prototyped) formal parameters list.  */
17538
17539 static void
17540 gen_unspecified_parameters_die (tree decl_or_type, dw_die_ref context_die)
17541 {
17542   new_die (DW_TAG_unspecified_parameters, context_die, decl_or_type);
17543 }
17544
17545 /* Generate a list of nameless DW_TAG_formal_parameter DIEs (and perhaps a
17546    DW_TAG_unspecified_parameters DIE) to represent the types of the formal
17547    parameters as specified in some function type specification (except for
17548    those which appear as part of a function *definition*).  */
17549
17550 static void
17551 gen_formal_types_die (tree function_or_method_type, dw_die_ref context_die)
17552 {
17553   tree link;
17554   tree formal_type = NULL;
17555   tree first_parm_type;
17556   tree arg;
17557
17558   if (TREE_CODE (function_or_method_type) == FUNCTION_DECL)
17559     {
17560       arg = DECL_ARGUMENTS (function_or_method_type);
17561       function_or_method_type = TREE_TYPE (function_or_method_type);
17562     }
17563   else
17564     arg = NULL_TREE;
17565
17566   first_parm_type = TYPE_ARG_TYPES (function_or_method_type);
17567
17568   /* Make our first pass over the list of formal parameter types and output a
17569      DW_TAG_formal_parameter DIE for each one.  */
17570   for (link = first_parm_type; link; )
17571     {
17572       dw_die_ref parm_die;
17573
17574       formal_type = TREE_VALUE (link);
17575       if (formal_type == void_type_node)
17576         break;
17577
17578       /* Output a (nameless) DIE to represent the formal parameter itself.  */
17579       parm_die = gen_formal_parameter_die (formal_type, NULL,
17580                                            true /* Emit name attribute.  */,
17581                                            context_die);
17582       if ((TREE_CODE (function_or_method_type) == METHOD_TYPE
17583            && link == first_parm_type)
17584           || (arg && DECL_ARTIFICIAL (arg)))
17585         add_AT_flag (parm_die, DW_AT_artificial, 1);
17586
17587       link = TREE_CHAIN (link);
17588       if (arg)
17589         arg = TREE_CHAIN (arg);
17590     }
17591
17592   /* If this function type has an ellipsis, add a
17593      DW_TAG_unspecified_parameters DIE to the end of the parameter list.  */
17594   if (formal_type != void_type_node)
17595     gen_unspecified_parameters_die (function_or_method_type, context_die);
17596
17597   /* Make our second (and final) pass over the list of formal parameter types
17598      and output DIEs to represent those types (as necessary).  */
17599   for (link = TYPE_ARG_TYPES (function_or_method_type);
17600        link && TREE_VALUE (link);
17601        link = TREE_CHAIN (link))
17602     gen_type_die (TREE_VALUE (link), context_die);
17603 }
17604
17605 /* We want to generate the DIE for TYPE so that we can generate the
17606    die for MEMBER, which has been defined; we will need to refer back
17607    to the member declaration nested within TYPE.  If we're trying to
17608    generate minimal debug info for TYPE, processing TYPE won't do the
17609    trick; we need to attach the member declaration by hand.  */
17610
17611 static void
17612 gen_type_die_for_member (tree type, tree member, dw_die_ref context_die)
17613 {
17614   gen_type_die (type, context_die);
17615
17616   /* If we're trying to avoid duplicate debug info, we may not have
17617      emitted the member decl for this function.  Emit it now.  */
17618   if (TYPE_STUB_DECL (type)
17619       && TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))
17620       && ! lookup_decl_die (member))
17621     {
17622       dw_die_ref type_die;
17623       gcc_assert (!decl_ultimate_origin (member));
17624
17625       push_decl_scope (type);
17626       type_die = lookup_type_die (type);
17627       if (TREE_CODE (member) == FUNCTION_DECL)
17628         gen_subprogram_die (member, type_die);
17629       else if (TREE_CODE (member) == FIELD_DECL)
17630         {
17631           /* Ignore the nameless fields that are used to skip bits but handle
17632              C++ anonymous unions and structs.  */
17633           if (DECL_NAME (member) != NULL_TREE
17634               || TREE_CODE (TREE_TYPE (member)) == UNION_TYPE
17635               || TREE_CODE (TREE_TYPE (member)) == RECORD_TYPE)
17636             {
17637               gen_type_die (member_declared_type (member), type_die);
17638               gen_field_die (member, type_die);
17639             }
17640         }
17641       else
17642         gen_variable_die (member, NULL_TREE, type_die);
17643
17644       pop_decl_scope ();
17645     }
17646 }
17647
17648 /* Generate the DWARF2 info for the "abstract" instance of a function which we
17649    may later generate inlined and/or out-of-line instances of.  */
17650
17651 static void
17652 dwarf2out_abstract_function (tree decl)
17653 {
17654   dw_die_ref old_die;
17655   tree save_fn;
17656   tree context;
17657   int was_abstract;
17658   htab_t old_decl_loc_table;
17659
17660   /* Make sure we have the actual abstract inline, not a clone.  */
17661   decl = DECL_ORIGIN (decl);
17662
17663   old_die = lookup_decl_die (decl);
17664   if (old_die && get_AT (old_die, DW_AT_inline))
17665     /* We've already generated the abstract instance.  */
17666     return;
17667
17668   /* We can be called while recursively when seeing block defining inlined subroutine
17669      DIE.  Be sure to not clobber the outer location table nor use it or we would
17670      get locations in abstract instantces.  */
17671   old_decl_loc_table = decl_loc_table;
17672   decl_loc_table = NULL;
17673
17674   /* Be sure we've emitted the in-class declaration DIE (if any) first, so
17675      we don't get confused by DECL_ABSTRACT.  */
17676   if (debug_info_level > DINFO_LEVEL_TERSE)
17677     {
17678       context = decl_class_context (decl);
17679       if (context)
17680         gen_type_die_for_member
17681           (context, decl, decl_function_context (decl) ? NULL : comp_unit_die);
17682     }
17683
17684   /* Pretend we've just finished compiling this function.  */
17685   save_fn = current_function_decl;
17686   current_function_decl = decl;
17687   push_cfun (DECL_STRUCT_FUNCTION (decl));
17688
17689   was_abstract = DECL_ABSTRACT (decl);
17690   set_decl_abstract_flags (decl, 1);
17691   dwarf2out_decl (decl);
17692   if (! was_abstract)
17693     set_decl_abstract_flags (decl, 0);
17694
17695   current_function_decl = save_fn;
17696   decl_loc_table = old_decl_loc_table;
17697   pop_cfun ();
17698 }
17699
17700 /* Helper function of premark_used_types() which gets called through
17701    htab_traverse.
17702
17703    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17704    marked as unused by prune_unused_types.  */
17705
17706 static int
17707 premark_used_types_helper (void **slot, void *data ATTRIBUTE_UNUSED)
17708 {
17709   tree type;
17710   dw_die_ref die;
17711
17712   type = (tree) *slot;
17713   die = lookup_type_die (type);
17714   if (die != NULL)
17715     die->die_perennial_p = 1;
17716   return 1;
17717 }
17718
17719 /* Helper function of premark_types_used_by_global_vars which gets called
17720    through htab_traverse.
17721
17722    Marks the DIE of a given type in *SLOT as perennial, so it never gets
17723    marked as unused by prune_unused_types. The DIE of the type is marked
17724    only if the global variable using the type will actually be emitted.  */
17725
17726 static int
17727 premark_types_used_by_global_vars_helper (void **slot,
17728                                           void *data ATTRIBUTE_UNUSED)
17729 {
17730   struct types_used_by_vars_entry *entry;
17731   dw_die_ref die;
17732
17733   entry = (struct types_used_by_vars_entry *) *slot;
17734   gcc_assert (entry->type != NULL
17735               && entry->var_decl != NULL);
17736   die = lookup_type_die (entry->type);
17737   if (die)
17738     {
17739       /* Ask cgraph if the global variable really is to be emitted.
17740          If yes, then we'll keep the DIE of ENTRY->TYPE.  */
17741       struct varpool_node *node = varpool_node (entry->var_decl);
17742       if (node->needed)
17743         {
17744           die->die_perennial_p = 1;
17745           /* Keep the parent DIEs as well.  */
17746           while ((die = die->die_parent) && die->die_perennial_p == 0)
17747             die->die_perennial_p = 1;
17748         }
17749     }
17750   return 1;
17751 }
17752
17753 /* Mark all members of used_types_hash as perennial.  */
17754
17755 static void
17756 premark_used_types (void)
17757 {
17758   if (cfun && cfun->used_types_hash)
17759     htab_traverse (cfun->used_types_hash, premark_used_types_helper, NULL);
17760 }
17761
17762 /* Mark all members of types_used_by_vars_entry as perennial.  */
17763
17764 static void
17765 premark_types_used_by_global_vars (void)
17766 {
17767   if (types_used_by_vars_hash)
17768     htab_traverse (types_used_by_vars_hash,
17769                    premark_types_used_by_global_vars_helper, NULL);
17770 }
17771
17772 /* Generate a DIE to represent a declared function (either file-scope or
17773    block-local).  */
17774
17775 static void
17776 gen_subprogram_die (tree decl, dw_die_ref context_die)
17777 {
17778   char label_id[MAX_ARTIFICIAL_LABEL_BYTES];
17779   tree origin = decl_ultimate_origin (decl);
17780   dw_die_ref subr_die;
17781   tree fn_arg_types;
17782   tree outer_scope;
17783   dw_die_ref old_die = lookup_decl_die (decl);
17784   int declaration = (current_function_decl != decl
17785                      || class_or_namespace_scope_p (context_die));
17786
17787   premark_used_types ();
17788
17789   /* It is possible to have both DECL_ABSTRACT and DECLARATION be true if we
17790      started to generate the abstract instance of an inline, decided to output
17791      its containing class, and proceeded to emit the declaration of the inline
17792      from the member list for the class.  If so, DECLARATION takes priority;
17793      we'll get back to the abstract instance when done with the class.  */
17794
17795   /* The class-scope declaration DIE must be the primary DIE.  */
17796   if (origin && declaration && class_or_namespace_scope_p (context_die))
17797     {
17798       origin = NULL;
17799       gcc_assert (!old_die);
17800     }
17801
17802   /* Now that the C++ front end lazily declares artificial member fns, we
17803      might need to retrofit the declaration into its class.  */
17804   if (!declaration && !origin && !old_die
17805       && DECL_CONTEXT (decl) && TYPE_P (DECL_CONTEXT (decl))
17806       && !class_or_namespace_scope_p (context_die)
17807       && debug_info_level > DINFO_LEVEL_TERSE)
17808     old_die = force_decl_die (decl);
17809
17810   if (origin != NULL)
17811     {
17812       gcc_assert (!declaration || local_scope_p (context_die));
17813
17814       /* Fixup die_parent for the abstract instance of a nested
17815          inline function.  */
17816       if (old_die && old_die->die_parent == NULL)
17817         add_child_die (context_die, old_die);
17818
17819       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17820       add_abstract_origin_attribute (subr_die, origin);
17821     }
17822   else if (old_die)
17823     {
17824       expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
17825       struct dwarf_file_data * file_index = lookup_filename (s.file);
17826
17827       if (!get_AT_flag (old_die, DW_AT_declaration)
17828           /* We can have a normal definition following an inline one in the
17829              case of redefinition of GNU C extern inlines.
17830              It seems reasonable to use AT_specification in this case.  */
17831           && !get_AT (old_die, DW_AT_inline))
17832         {
17833           /* Detect and ignore this case, where we are trying to output
17834              something we have already output.  */
17835           return;
17836         }
17837
17838       /* If the definition comes from the same place as the declaration,
17839          maybe use the old DIE.  We always want the DIE for this function
17840          that has the *_pc attributes to be under comp_unit_die so the
17841          debugger can find it.  We also need to do this for abstract
17842          instances of inlines, since the spec requires the out-of-line copy
17843          to have the same parent.  For local class methods, this doesn't
17844          apply; we just use the old DIE.  */
17845       if ((old_die->die_parent == comp_unit_die || context_die == NULL)
17846           && (DECL_ARTIFICIAL (decl)
17847               || (get_AT_file (old_die, DW_AT_decl_file) == file_index
17848                   && (get_AT_unsigned (old_die, DW_AT_decl_line)
17849                       == (unsigned) s.line))))
17850         {
17851           subr_die = old_die;
17852
17853           /* Clear out the declaration attribute and the formal parameters.
17854              Do not remove all children, because it is possible that this
17855              declaration die was forced using force_decl_die(). In such
17856              cases die that forced declaration die (e.g. TAG_imported_module)
17857              is one of the children that we do not want to remove.  */
17858           remove_AT (subr_die, DW_AT_declaration);
17859           remove_child_TAG (subr_die, DW_TAG_formal_parameter);
17860         }
17861       else
17862         {
17863           subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17864           add_AT_specification (subr_die, old_die);
17865           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
17866             add_AT_file (subr_die, DW_AT_decl_file, file_index);
17867           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
17868             add_AT_unsigned (subr_die, DW_AT_decl_line, s.line);
17869         }
17870     }
17871   else
17872     {
17873       subr_die = new_die (DW_TAG_subprogram, context_die, decl);
17874
17875       if (TREE_PUBLIC (decl))
17876         add_AT_flag (subr_die, DW_AT_external, 1);
17877
17878       add_name_and_src_coords_attributes (subr_die, decl);
17879       if (debug_info_level > DINFO_LEVEL_TERSE)
17880         {
17881           add_prototyped_attribute (subr_die, TREE_TYPE (decl));
17882           add_type_attribute (subr_die, TREE_TYPE (TREE_TYPE (decl)),
17883                               0, 0, context_die);
17884         }
17885
17886       add_pure_or_virtual_attribute (subr_die, decl);
17887       if (DECL_ARTIFICIAL (decl))
17888         add_AT_flag (subr_die, DW_AT_artificial, 1);
17889
17890       if (TREE_PROTECTED (decl))
17891         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_protected);
17892       else if (TREE_PRIVATE (decl))
17893         add_AT_unsigned (subr_die, DW_AT_accessibility, DW_ACCESS_private);
17894     }
17895
17896   if (declaration)
17897     {
17898       if (!old_die || !get_AT (old_die, DW_AT_inline))
17899         {
17900           add_AT_flag (subr_die, DW_AT_declaration, 1);
17901
17902           /* If this is an explicit function declaration then generate
17903              a DW_AT_explicit attribute.  */
17904           if (lang_hooks.decls.function_decl_explicit_p (decl)
17905               && (dwarf_version >= 3 || !dwarf_strict))
17906             add_AT_flag (subr_die, DW_AT_explicit, 1);
17907
17908           /* The first time we see a member function, it is in the context of
17909              the class to which it belongs.  We make sure of this by emitting
17910              the class first.  The next time is the definition, which is
17911              handled above.  The two may come from the same source text.
17912
17913              Note that force_decl_die() forces function declaration die. It is
17914              later reused to represent definition.  */
17915           equate_decl_number_to_die (decl, subr_die);
17916         }
17917     }
17918   else if (DECL_ABSTRACT (decl))
17919     {
17920       if (DECL_DECLARED_INLINE_P (decl))
17921         {
17922           if (cgraph_function_possibly_inlined_p (decl))
17923             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
17924           else
17925             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_not_inlined);
17926         }
17927       else
17928         {
17929           if (cgraph_function_possibly_inlined_p (decl))
17930             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_inlined);
17931           else
17932             add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_not_inlined);
17933         }
17934
17935       if (DECL_DECLARED_INLINE_P (decl)
17936           && lookup_attribute ("artificial", DECL_ATTRIBUTES (decl)))
17937         add_AT_flag (subr_die, DW_AT_artificial, 1);
17938
17939       equate_decl_number_to_die (decl, subr_die);
17940     }
17941   else if (!DECL_EXTERNAL (decl))
17942     {
17943       HOST_WIDE_INT cfa_fb_offset;
17944
17945       if (!old_die || !get_AT (old_die, DW_AT_inline))
17946         equate_decl_number_to_die (decl, subr_die);
17947
17948       if (!flag_reorder_blocks_and_partition)
17949         {
17950           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_BEGIN_LABEL,
17951                                        current_function_funcdef_no);
17952           add_AT_lbl_id (subr_die, DW_AT_low_pc, label_id);
17953           ASM_GENERATE_INTERNAL_LABEL (label_id, FUNC_END_LABEL,
17954                                        current_function_funcdef_no);
17955           add_AT_lbl_id (subr_die, DW_AT_high_pc, label_id);
17956
17957           add_pubname (decl, subr_die);
17958           add_arange (decl, subr_die);
17959         }
17960       else
17961         {  /* Do nothing for now; maybe need to duplicate die, one for
17962               hot section and one for cold section, then use the hot/cold
17963               section begin/end labels to generate the aranges...  */
17964           /*
17965             add_AT_lbl_id (subr_die, DW_AT_low_pc, hot_section_label);
17966             add_AT_lbl_id (subr_die, DW_AT_high_pc, hot_section_end_label);
17967             add_AT_lbl_id (subr_die, DW_AT_lo_user, unlikely_section_label);
17968             add_AT_lbl_id (subr_die, DW_AT_hi_user, cold_section_end_label);
17969
17970             add_pubname (decl, subr_die);
17971             add_arange (decl, subr_die);
17972             add_arange (decl, subr_die);
17973            */
17974         }
17975
17976 #ifdef MIPS_DEBUGGING_INFO
17977       /* Add a reference to the FDE for this routine.  */
17978       add_AT_fde_ref (subr_die, DW_AT_MIPS_fde, current_funcdef_fde);
17979 #endif
17980
17981       cfa_fb_offset = CFA_FRAME_BASE_OFFSET (decl);
17982
17983       /* We define the "frame base" as the function's CFA.  This is more
17984          convenient for several reasons: (1) It's stable across the prologue
17985          and epilogue, which makes it better than just a frame pointer,
17986          (2) With dwarf3, there exists a one-byte encoding that allows us
17987          to reference the .debug_frame data by proxy, but failing that,
17988          (3) We can at least reuse the code inspection and interpretation
17989          code that determines the CFA position at various points in the
17990          function.  */
17991       if (dwarf_version >= 3)
17992         {
17993           dw_loc_descr_ref op = new_loc_descr (DW_OP_call_frame_cfa, 0, 0);
17994           add_AT_loc (subr_die, DW_AT_frame_base, op);
17995         }
17996       else
17997         {
17998           dw_loc_list_ref list = convert_cfa_to_fb_loc_list (cfa_fb_offset);
17999           if (list->dw_loc_next)
18000             add_AT_loc_list (subr_die, DW_AT_frame_base, list);
18001           else
18002             add_AT_loc (subr_die, DW_AT_frame_base, list->expr);
18003         }
18004
18005       /* Compute a displacement from the "steady-state frame pointer" to
18006          the CFA.  The former is what all stack slots and argument slots
18007          will reference in the rtl; the later is what we've told the
18008          debugger about.  We'll need to adjust all frame_base references
18009          by this displacement.  */
18010       compute_frame_pointer_to_fb_displacement (cfa_fb_offset);
18011
18012       if (cfun->static_chain_decl)
18013         add_AT_location_description (subr_die, DW_AT_static_link,
18014                  loc_list_from_tree (cfun->static_chain_decl, 2));
18015     }
18016
18017   /* Generate child dies for template paramaters.  */
18018   if (debug_info_level > DINFO_LEVEL_TERSE)
18019     gen_generic_params_dies (decl);
18020
18021   /* Now output descriptions of the arguments for this function. This gets
18022      (unnecessarily?) complex because of the fact that the DECL_ARGUMENT list
18023      for a FUNCTION_DECL doesn't indicate cases where there was a trailing
18024      `...' at the end of the formal parameter list.  In order to find out if
18025      there was a trailing ellipsis or not, we must instead look at the type
18026      associated with the FUNCTION_DECL.  This will be a node of type
18027      FUNCTION_TYPE. If the chain of type nodes hanging off of this
18028      FUNCTION_TYPE node ends with a void_type_node then there should *not* be
18029      an ellipsis at the end.  */
18030
18031   /* In the case where we are describing a mere function declaration, all we
18032      need to do here (and all we *can* do here) is to describe the *types* of
18033      its formal parameters.  */
18034   if (debug_info_level <= DINFO_LEVEL_TERSE)
18035     ;
18036   else if (declaration)
18037     gen_formal_types_die (decl, subr_die);
18038   else
18039     {
18040       /* Generate DIEs to represent all known formal parameters.  */
18041       tree parm = DECL_ARGUMENTS (decl);
18042       tree generic_decl = lang_hooks.decls.get_generic_function_decl (decl);
18043       tree generic_decl_parm = generic_decl
18044                                 ? DECL_ARGUMENTS (generic_decl)
18045                                 : NULL;
18046
18047       /* Now we want to walk the list of parameters of the function and
18048          emit their relevant DIEs.
18049
18050          We consider the case of DECL being an instance of a generic function
18051          as well as it being a normal function.
18052
18053          If DECL is an instance of a generic function we walk the
18054          parameters of the generic function declaration _and_ the parameters of
18055          DECL itself. This is useful because we want to emit specific DIEs for
18056          function parameter packs and those are declared as part of the
18057          generic function declaration. In that particular case,
18058          the parameter pack yields a DW_TAG_GNU_formal_parameter_pack DIE.
18059          That DIE has children DIEs representing the set of arguments
18060          of the pack. Note that the set of pack arguments can be empty.
18061          In that case, the DW_TAG_GNU_formal_parameter_pack DIE will not have any
18062          children DIE.
18063
18064          Otherwise, we just consider the parameters of DECL.  */
18065       while (generic_decl_parm || parm)
18066         {
18067           if (generic_decl_parm
18068               && lang_hooks.function_parameter_pack_p (generic_decl_parm))
18069             gen_formal_parameter_pack_die (generic_decl_parm,
18070                                            parm, subr_die,
18071                                            &parm);
18072           else if (parm)
18073             {
18074               gen_decl_die (parm, NULL, subr_die);
18075               parm = TREE_CHAIN (parm);
18076             }
18077
18078           if (generic_decl_parm)
18079             generic_decl_parm = TREE_CHAIN (generic_decl_parm);
18080         }
18081
18082       /* Decide whether we need an unspecified_parameters DIE at the end.
18083          There are 2 more cases to do this for: 1) the ansi ... declaration -
18084          this is detectable when the end of the arg list is not a
18085          void_type_node 2) an unprototyped function declaration (not a
18086          definition).  This just means that we have no info about the
18087          parameters at all.  */
18088       fn_arg_types = TYPE_ARG_TYPES (TREE_TYPE (decl));
18089       if (fn_arg_types != NULL)
18090         {
18091           /* This is the prototyped case, check for....  */
18092           if (TREE_VALUE (tree_last (fn_arg_types)) != void_type_node)
18093             gen_unspecified_parameters_die (decl, subr_die);
18094         }
18095       else if (DECL_INITIAL (decl) == NULL_TREE)
18096         gen_unspecified_parameters_die (decl, subr_die);
18097     }
18098
18099   /* Output Dwarf info for all of the stuff within the body of the function
18100      (if it has one - it may be just a declaration).  */
18101   outer_scope = DECL_INITIAL (decl);
18102
18103   /* OUTER_SCOPE is a pointer to the outermost BLOCK node created to represent
18104      a function.  This BLOCK actually represents the outermost binding contour
18105      for the function, i.e. the contour in which the function's formal
18106      parameters and labels get declared. Curiously, it appears that the front
18107      end doesn't actually put the PARM_DECL nodes for the current function onto
18108      the BLOCK_VARS list for this outer scope, but are strung off of the
18109      DECL_ARGUMENTS list for the function instead.
18110
18111      The BLOCK_VARS list for the `outer_scope' does provide us with a list of
18112      the LABEL_DECL nodes for the function however, and we output DWARF info
18113      for those in decls_for_scope.  Just within the `outer_scope' there will be
18114      a BLOCK node representing the function's outermost pair of curly braces,
18115      and any blocks used for the base and member initializers of a C++
18116      constructor function.  */
18117   if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK)
18118     {
18119       /* Emit a DW_TAG_variable DIE for a named return value.  */
18120       if (DECL_NAME (DECL_RESULT (decl)))
18121         gen_decl_die (DECL_RESULT (decl), NULL, subr_die);
18122
18123       current_function_has_inlines = 0;
18124       decls_for_scope (outer_scope, subr_die, 0);
18125
18126 #if 0 && defined (MIPS_DEBUGGING_INFO)
18127       if (current_function_has_inlines)
18128         {
18129           add_AT_flag (subr_die, DW_AT_MIPS_has_inlines, 1);
18130           if (! comp_unit_has_inlines)
18131             {
18132               add_AT_flag (comp_unit_die, DW_AT_MIPS_has_inlines, 1);
18133               comp_unit_has_inlines = 1;
18134             }
18135         }
18136 #endif
18137     }
18138   /* Add the calling convention attribute if requested.  */
18139   add_calling_convention_attribute (subr_die, decl);
18140
18141 }
18142
18143 /* Returns a hash value for X (which really is a die_struct).  */
18144
18145 static hashval_t
18146 common_block_die_table_hash (const void *x)
18147 {
18148   const_dw_die_ref d = (const_dw_die_ref) x;
18149   return (hashval_t) d->decl_id ^ htab_hash_pointer (d->die_parent);
18150 }
18151
18152 /* Return nonzero if decl_id and die_parent of die_struct X is the same
18153    as decl_id and die_parent of die_struct Y.  */
18154
18155 static int
18156 common_block_die_table_eq (const void *x, const void *y)
18157 {
18158   const_dw_die_ref d = (const_dw_die_ref) x;
18159   const_dw_die_ref e = (const_dw_die_ref) y;
18160   return d->decl_id == e->decl_id && d->die_parent == e->die_parent;
18161 }
18162
18163 /* Generate a DIE to represent a declared data object.
18164    Either DECL or ORIGIN must be non-null.  */
18165
18166 static void
18167 gen_variable_die (tree decl, tree origin, dw_die_ref context_die)
18168 {
18169   HOST_WIDE_INT off;
18170   tree com_decl;
18171   tree decl_or_origin = decl ? decl : origin;
18172   tree ultimate_origin;
18173   dw_die_ref var_die;
18174   dw_die_ref old_die = decl ? lookup_decl_die (decl) : NULL;
18175   dw_die_ref origin_die;
18176   int declaration = (DECL_EXTERNAL (decl_or_origin)
18177                      || class_or_namespace_scope_p (context_die));
18178
18179   ultimate_origin = decl_ultimate_origin (decl_or_origin);
18180   if (decl || ultimate_origin)
18181     origin = ultimate_origin;
18182   com_decl = fortran_common (decl_or_origin, &off);
18183
18184   /* Symbol in common gets emitted as a child of the common block, in the form
18185      of a data member.  */
18186   if (com_decl)
18187     {
18188       dw_die_ref com_die;
18189       dw_loc_list_ref loc;
18190       die_node com_die_arg;
18191
18192       var_die = lookup_decl_die (decl_or_origin);
18193       if (var_die)
18194         {
18195           if (get_AT (var_die, DW_AT_location) == NULL)
18196             {
18197               loc = loc_list_from_tree (com_decl, off ? 1 : 2);
18198               if (loc)
18199                 {
18200                   if (off)
18201                     {
18202                       /* Optimize the common case.  */
18203                       if (single_element_loc_list_p (loc)
18204                           && loc->expr->dw_loc_opc == DW_OP_addr
18205                           && loc->expr->dw_loc_next == NULL
18206                           && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr)
18207                              == SYMBOL_REF)
18208                         loc->expr->dw_loc_oprnd1.v.val_addr
18209                           = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18210                         else
18211                           loc_list_plus_const (loc, off);
18212                     }
18213                   add_AT_location_description (var_die, DW_AT_location, loc);
18214                   remove_AT (var_die, DW_AT_declaration);
18215                 }
18216             }
18217           return;
18218         }
18219
18220       if (common_block_die_table == NULL)
18221         common_block_die_table
18222           = htab_create_ggc (10, common_block_die_table_hash,
18223                              common_block_die_table_eq, NULL);
18224
18225       com_die_arg.decl_id = DECL_UID (com_decl);
18226       com_die_arg.die_parent = context_die;
18227       com_die = (dw_die_ref) htab_find (common_block_die_table, &com_die_arg);
18228       loc = loc_list_from_tree (com_decl, 2);
18229       if (com_die == NULL)
18230         {
18231           const char *cnam
18232             = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
18233           void **slot;
18234
18235           com_die = new_die (DW_TAG_common_block, context_die, decl);
18236           add_name_and_src_coords_attributes (com_die, com_decl);
18237           if (loc)
18238             {
18239               add_AT_location_description (com_die, DW_AT_location, loc);
18240               /* Avoid sharing the same loc descriptor between
18241                  DW_TAG_common_block and DW_TAG_variable.  */
18242               loc = loc_list_from_tree (com_decl, 2);
18243             }
18244           else if (DECL_EXTERNAL (decl))
18245             add_AT_flag (com_die, DW_AT_declaration, 1);
18246           add_pubname_string (cnam, com_die); /* ??? needed? */
18247           com_die->decl_id = DECL_UID (com_decl);
18248           slot = htab_find_slot (common_block_die_table, com_die, INSERT);
18249           *slot = (void *) com_die;
18250         }
18251       else if (get_AT (com_die, DW_AT_location) == NULL && loc)
18252         {
18253           add_AT_location_description (com_die, DW_AT_location, loc);
18254           loc = loc_list_from_tree (com_decl, 2);
18255           remove_AT (com_die, DW_AT_declaration);
18256         }
18257       var_die = new_die (DW_TAG_variable, com_die, decl);
18258       add_name_and_src_coords_attributes (var_die, decl);
18259       add_type_attribute (var_die, TREE_TYPE (decl), TREE_READONLY (decl),
18260                           TREE_THIS_VOLATILE (decl), context_die);
18261       add_AT_flag (var_die, DW_AT_external, 1);
18262       if (loc)
18263         {
18264           if (off)
18265             {
18266               /* Optimize the common case.  */
18267               if (single_element_loc_list_p (loc)
18268                   && loc->expr->dw_loc_opc == DW_OP_addr
18269                   && loc->expr->dw_loc_next == NULL
18270                   && GET_CODE (loc->expr->dw_loc_oprnd1.v.val_addr) == SYMBOL_REF)
18271                 loc->expr->dw_loc_oprnd1.v.val_addr
18272                   = plus_constant (loc->expr->dw_loc_oprnd1.v.val_addr, off);
18273               else
18274                 loc_list_plus_const (loc, off);
18275             }
18276           add_AT_location_description (var_die, DW_AT_location, loc);
18277         }
18278       else if (DECL_EXTERNAL (decl))
18279         add_AT_flag (var_die, DW_AT_declaration, 1);
18280       equate_decl_number_to_die (decl, var_die);
18281       return;
18282     }
18283
18284   /* If the compiler emitted a definition for the DECL declaration
18285      and if we already emitted a DIE for it, don't emit a second
18286      DIE for it again.  */
18287   if (old_die
18288       && declaration)
18289     return;
18290
18291   /* For static data members, the declaration in the class is supposed
18292      to have DW_TAG_member tag; the specification should still be
18293      DW_TAG_variable referencing the DW_TAG_member DIE.  */
18294   if (declaration && class_scope_p (context_die))
18295     var_die = new_die (DW_TAG_member, context_die, decl);
18296   else
18297     var_die = new_die (DW_TAG_variable, context_die, decl);
18298
18299   origin_die = NULL;
18300   if (origin != NULL)
18301     origin_die = add_abstract_origin_attribute (var_die, origin);
18302
18303   /* Loop unrolling can create multiple blocks that refer to the same
18304      static variable, so we must test for the DW_AT_declaration flag.
18305
18306      ??? Loop unrolling/reorder_blocks should perhaps be rewritten to
18307      copy decls and set the DECL_ABSTRACT flag on them instead of
18308      sharing them.
18309
18310      ??? Duplicated blocks have been rewritten to use .debug_ranges.
18311
18312      ??? The declare_in_namespace support causes us to get two DIEs for one
18313      variable, both of which are declarations.  We want to avoid considering
18314      one to be a specification, so we must test that this DIE is not a
18315      declaration.  */
18316   else if (old_die && TREE_STATIC (decl) && ! declaration
18317            && get_AT_flag (old_die, DW_AT_declaration) == 1)
18318     {
18319       /* This is a definition of a C++ class level static.  */
18320       add_AT_specification (var_die, old_die);
18321       if (DECL_NAME (decl))
18322         {
18323           expanded_location s = expand_location (DECL_SOURCE_LOCATION (decl));
18324           struct dwarf_file_data * file_index = lookup_filename (s.file);
18325
18326           if (get_AT_file (old_die, DW_AT_decl_file) != file_index)
18327             add_AT_file (var_die, DW_AT_decl_file, file_index);
18328
18329           if (get_AT_unsigned (old_die, DW_AT_decl_line) != (unsigned) s.line)
18330             add_AT_unsigned (var_die, DW_AT_decl_line, s.line);
18331         }
18332     }
18333   else
18334     {
18335       tree type = TREE_TYPE (decl);
18336
18337       add_name_and_src_coords_attributes (var_die, decl);
18338       if (decl_by_reference_p (decl))
18339         add_type_attribute (var_die, TREE_TYPE (type), 0, 0, context_die);
18340       else
18341         add_type_attribute (var_die, type, TREE_READONLY (decl),
18342                             TREE_THIS_VOLATILE (decl), context_die);
18343
18344       if (TREE_PUBLIC (decl))
18345         add_AT_flag (var_die, DW_AT_external, 1);
18346
18347       if (DECL_ARTIFICIAL (decl))
18348         add_AT_flag (var_die, DW_AT_artificial, 1);
18349
18350       if (TREE_PROTECTED (decl))
18351         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_protected);
18352       else if (TREE_PRIVATE (decl))
18353         add_AT_unsigned (var_die, DW_AT_accessibility, DW_ACCESS_private);
18354     }
18355
18356   if (declaration)
18357     add_AT_flag (var_die, DW_AT_declaration, 1);
18358
18359   if (decl && (DECL_ABSTRACT (decl) || declaration))
18360     equate_decl_number_to_die (decl, var_die);
18361
18362   if (! declaration
18363       && (! DECL_ABSTRACT (decl_or_origin)
18364           /* Local static vars are shared between all clones/inlines,
18365              so emit DW_AT_location on the abstract DIE if DECL_RTL is
18366              already set.  */
18367           || (TREE_CODE (decl_or_origin) == VAR_DECL
18368               && TREE_STATIC (decl_or_origin)
18369               && DECL_RTL_SET_P (decl_or_origin)))
18370       /* When abstract origin already has DW_AT_location attribute, no need
18371          to add it again.  */
18372       && (origin_die == NULL || get_AT (origin_die, DW_AT_location) == NULL))
18373     {
18374       if (TREE_CODE (decl_or_origin) == VAR_DECL && TREE_STATIC (decl_or_origin)
18375           && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
18376         defer_location (decl_or_origin, var_die);
18377       else
18378         add_location_or_const_value_attribute (var_die,
18379                                                decl_or_origin,
18380                                                DW_AT_location);
18381       add_pubname (decl_or_origin, var_die);
18382     }
18383   else
18384     tree_add_const_value_attribute_for_decl (var_die, decl_or_origin);
18385 }
18386
18387 /* Generate a DIE to represent a named constant.  */
18388
18389 static void
18390 gen_const_die (tree decl, dw_die_ref context_die)
18391 {
18392   dw_die_ref const_die;
18393   tree type = TREE_TYPE (decl);
18394
18395   const_die = new_die (DW_TAG_constant, context_die, decl);
18396   add_name_and_src_coords_attributes (const_die, decl);
18397   add_type_attribute (const_die, type, 1, 0, context_die);
18398   if (TREE_PUBLIC (decl))
18399     add_AT_flag (const_die, DW_AT_external, 1);
18400   if (DECL_ARTIFICIAL (decl))
18401     add_AT_flag (const_die, DW_AT_artificial, 1);
18402   tree_add_const_value_attribute_for_decl (const_die, decl);
18403 }
18404
18405 /* Generate a DIE to represent a label identifier.  */
18406
18407 static void
18408 gen_label_die (tree decl, dw_die_ref context_die)
18409 {
18410   tree origin = decl_ultimate_origin (decl);
18411   dw_die_ref lbl_die = new_die (DW_TAG_label, context_die, decl);
18412   rtx insn;
18413   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18414
18415   if (origin != NULL)
18416     add_abstract_origin_attribute (lbl_die, origin);
18417   else
18418     add_name_and_src_coords_attributes (lbl_die, decl);
18419
18420   if (DECL_ABSTRACT (decl))
18421     equate_decl_number_to_die (decl, lbl_die);
18422   else
18423     {
18424       insn = DECL_RTL_IF_SET (decl);
18425
18426       /* Deleted labels are programmer specified labels which have been
18427          eliminated because of various optimizations.  We still emit them
18428          here so that it is possible to put breakpoints on them.  */
18429       if (insn
18430           && (LABEL_P (insn)
18431               || ((NOTE_P (insn)
18432                    && NOTE_KIND (insn) == NOTE_INSN_DELETED_LABEL))))
18433         {
18434           /* When optimization is enabled (via -O) some parts of the compiler
18435              (e.g. jump.c and cse.c) may try to delete CODE_LABEL insns which
18436              represent source-level labels which were explicitly declared by
18437              the user.  This really shouldn't be happening though, so catch
18438              it if it ever does happen.  */
18439           gcc_assert (!INSN_DELETED_P (insn));
18440
18441           ASM_GENERATE_INTERNAL_LABEL (label, "L", CODE_LABEL_NUMBER (insn));
18442           add_AT_lbl_id (lbl_die, DW_AT_low_pc, label);
18443         }
18444     }
18445 }
18446
18447 /* A helper function for gen_inlined_subroutine_die.  Add source coordinate
18448    attributes to the DIE for a block STMT, to describe where the inlined
18449    function was called from.  This is similar to add_src_coords_attributes.  */
18450
18451 static inline void
18452 add_call_src_coords_attributes (tree stmt, dw_die_ref die)
18453 {
18454   expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
18455
18456   if (dwarf_version >= 3 || !dwarf_strict)
18457     {
18458       add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
18459       add_AT_unsigned (die, DW_AT_call_line, s.line);
18460     }
18461 }
18462
18463
18464 /* A helper function for gen_lexical_block_die and gen_inlined_subroutine_die.
18465    Add low_pc and high_pc attributes to the DIE for a block STMT.  */
18466
18467 static inline void
18468 add_high_low_attributes (tree stmt, dw_die_ref die)
18469 {
18470   char label[MAX_ARTIFICIAL_LABEL_BYTES];
18471
18472   if (BLOCK_FRAGMENT_CHAIN (stmt)
18473       && (dwarf_version >= 3 || !dwarf_strict))
18474     {
18475       tree chain;
18476
18477       if (inlined_function_outer_scope_p (stmt))
18478         {
18479           ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18480                                        BLOCK_NUMBER (stmt));
18481           add_AT_lbl_id (die, DW_AT_entry_pc, label);
18482         }
18483
18484       add_AT_range_list (die, DW_AT_ranges, add_ranges (stmt));
18485
18486       chain = BLOCK_FRAGMENT_CHAIN (stmt);
18487       do
18488         {
18489           add_ranges (chain);
18490           chain = BLOCK_FRAGMENT_CHAIN (chain);
18491         }
18492       while (chain);
18493       add_ranges (NULL);
18494     }
18495   else
18496     {
18497       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_BEGIN_LABEL,
18498                                    BLOCK_NUMBER (stmt));
18499       add_AT_lbl_id (die, DW_AT_low_pc, label);
18500       ASM_GENERATE_INTERNAL_LABEL (label, BLOCK_END_LABEL,
18501                                    BLOCK_NUMBER (stmt));
18502       add_AT_lbl_id (die, DW_AT_high_pc, label);
18503     }
18504 }
18505
18506 /* Generate a DIE for a lexical block.  */
18507
18508 static void
18509 gen_lexical_block_die (tree stmt, dw_die_ref context_die, int depth)
18510 {
18511   dw_die_ref stmt_die = new_die (DW_TAG_lexical_block, context_die, stmt);
18512
18513   if (! BLOCK_ABSTRACT (stmt) && TREE_ASM_WRITTEN (stmt))
18514     add_high_low_attributes (stmt, stmt_die);
18515
18516   decls_for_scope (stmt, stmt_die, depth);
18517 }
18518
18519 /* Generate a DIE for an inlined subprogram.  */
18520
18521 static void
18522 gen_inlined_subroutine_die (tree stmt, dw_die_ref context_die, int depth)
18523 {
18524   tree decl;
18525
18526   /* The instance of function that is effectively being inlined shall not
18527      be abstract.  */
18528   gcc_assert (! BLOCK_ABSTRACT (stmt));
18529
18530   decl = block_ultimate_origin (stmt);
18531
18532   /* Emit info for the abstract instance first, if we haven't yet.  We
18533      must emit this even if the block is abstract, otherwise when we
18534      emit the block below (or elsewhere), we may end up trying to emit
18535      a die whose origin die hasn't been emitted, and crashing.  */
18536   dwarf2out_abstract_function (decl);
18537
18538   if (! BLOCK_ABSTRACT (stmt))
18539     {
18540       dw_die_ref subr_die
18541         = new_die (DW_TAG_inlined_subroutine, context_die, stmt);
18542
18543       add_abstract_origin_attribute (subr_die, decl);
18544       if (TREE_ASM_WRITTEN (stmt))
18545         add_high_low_attributes (stmt, subr_die);
18546       add_call_src_coords_attributes (stmt, subr_die);
18547
18548       decls_for_scope (stmt, subr_die, depth);
18549       current_function_has_inlines = 1;
18550     }
18551 }
18552
18553 /* Generate a DIE for a field in a record, or structure.  */
18554
18555 static void
18556 gen_field_die (tree decl, dw_die_ref context_die)
18557 {
18558   dw_die_ref decl_die;
18559
18560   if (TREE_TYPE (decl) == error_mark_node)
18561     return;
18562
18563   decl_die = new_die (DW_TAG_member, context_die, decl);
18564   add_name_and_src_coords_attributes (decl_die, decl);
18565   add_type_attribute (decl_die, member_declared_type (decl),
18566                       TREE_READONLY (decl), TREE_THIS_VOLATILE (decl),
18567                       context_die);
18568
18569   if (DECL_BIT_FIELD_TYPE (decl))
18570     {
18571       add_byte_size_attribute (decl_die, decl);
18572       add_bit_size_attribute (decl_die, decl);
18573       add_bit_offset_attribute (decl_die, decl);
18574     }
18575
18576   if (TREE_CODE (DECL_FIELD_CONTEXT (decl)) != UNION_TYPE)
18577     add_data_member_location_attribute (decl_die, decl);
18578
18579   if (DECL_ARTIFICIAL (decl))
18580     add_AT_flag (decl_die, DW_AT_artificial, 1);
18581
18582   if (TREE_PROTECTED (decl))
18583     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_protected);
18584   else if (TREE_PRIVATE (decl))
18585     add_AT_unsigned (decl_die, DW_AT_accessibility, DW_ACCESS_private);
18586
18587   /* Equate decl number to die, so that we can look up this decl later on.  */
18588   equate_decl_number_to_die (decl, decl_die);
18589 }
18590
18591 #if 0
18592 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18593    Use modified_type_die instead.
18594    We keep this code here just in case these types of DIEs may be needed to
18595    represent certain things in other languages (e.g. Pascal) someday.  */
18596
18597 static void
18598 gen_pointer_type_die (tree type, dw_die_ref context_die)
18599 {
18600   dw_die_ref ptr_die
18601     = new_die (DW_TAG_pointer_type, scope_die_for (type, context_die), type);
18602
18603   equate_type_number_to_die (type, ptr_die);
18604   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18605   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18606 }
18607
18608 /* Don't generate either pointer_type DIEs or reference_type DIEs here.
18609    Use modified_type_die instead.
18610    We keep this code here just in case these types of DIEs may be needed to
18611    represent certain things in other languages (e.g. Pascal) someday.  */
18612
18613 static void
18614 gen_reference_type_die (tree type, dw_die_ref context_die)
18615 {
18616   dw_die_ref ref_die
18617     = new_die (DW_TAG_reference_type, scope_die_for (type, context_die), type);
18618
18619   equate_type_number_to_die (type, ref_die);
18620   add_type_attribute (ref_die, TREE_TYPE (type), 0, 0, context_die);
18621   add_AT_unsigned (mod_type_die, DW_AT_byte_size, PTR_SIZE);
18622 }
18623 #endif
18624
18625 /* Generate a DIE for a pointer to a member type.  */
18626
18627 static void
18628 gen_ptr_to_mbr_type_die (tree type, dw_die_ref context_die)
18629 {
18630   dw_die_ref ptr_die
18631     = new_die (DW_TAG_ptr_to_member_type,
18632                scope_die_for (type, context_die), type);
18633
18634   equate_type_number_to_die (type, ptr_die);
18635   add_AT_die_ref (ptr_die, DW_AT_containing_type,
18636                   lookup_type_die (TYPE_OFFSET_BASETYPE (type)));
18637   add_type_attribute (ptr_die, TREE_TYPE (type), 0, 0, context_die);
18638 }
18639
18640 /* Generate the DIE for the compilation unit.  */
18641
18642 static dw_die_ref
18643 gen_compile_unit_die (const char *filename)
18644 {
18645   dw_die_ref die;
18646   char producer[250];
18647   const char *language_string = lang_hooks.name;
18648   int language;
18649
18650   die = new_die (DW_TAG_compile_unit, NULL, NULL);
18651
18652   if (filename)
18653     {
18654       add_name_attribute (die, filename);
18655       /* Don't add cwd for <built-in>.  */
18656       if (!IS_ABSOLUTE_PATH (filename) && filename[0] != '<')
18657         add_comp_dir_attribute (die);
18658     }
18659
18660   sprintf (producer, "%s %s", language_string, version_string);
18661
18662 #ifdef MIPS_DEBUGGING_INFO
18663   /* The MIPS/SGI compilers place the 'cc' command line options in the producer
18664      string.  The SGI debugger looks for -g, -g1, -g2, or -g3; if they do
18665      not appear in the producer string, the debugger reaches the conclusion
18666      that the object file is stripped and has no debugging information.
18667      To get the MIPS/SGI debugger to believe that there is debugging
18668      information in the object file, we add a -g to the producer string.  */
18669   if (debug_info_level > DINFO_LEVEL_TERSE)
18670     strcat (producer, " -g");
18671 #endif
18672
18673   add_AT_string (die, DW_AT_producer, producer);
18674
18675   language = DW_LANG_C89;
18676   if (strcmp (language_string, "GNU C++") == 0)
18677     language = DW_LANG_C_plus_plus;
18678   else if (strcmp (language_string, "GNU F77") == 0)
18679     language = DW_LANG_Fortran77;
18680   else if (strcmp (language_string, "GNU Pascal") == 0)
18681     language = DW_LANG_Pascal83;
18682   else if (dwarf_version >= 3 || !dwarf_strict)
18683     {
18684       if (strcmp (language_string, "GNU Ada") == 0)
18685         language = DW_LANG_Ada95;
18686       else if (strcmp (language_string, "GNU Fortran") == 0)
18687         language = DW_LANG_Fortran95;
18688       else if (strcmp (language_string, "GNU Java") == 0)
18689         language = DW_LANG_Java;
18690       else if (strcmp (language_string, "GNU Objective-C") == 0)
18691         language = DW_LANG_ObjC;
18692       else if (strcmp (language_string, "GNU Objective-C++") == 0)
18693         language = DW_LANG_ObjC_plus_plus;
18694     }
18695
18696   add_AT_unsigned (die, DW_AT_language, language);
18697   return die;
18698 }
18699
18700 /* Generate the DIE for a base class.  */
18701
18702 static void
18703 gen_inheritance_die (tree binfo, tree access, dw_die_ref context_die)
18704 {
18705   dw_die_ref die = new_die (DW_TAG_inheritance, context_die, binfo);
18706
18707   add_type_attribute (die, BINFO_TYPE (binfo), 0, 0, context_die);
18708   add_data_member_location_attribute (die, binfo);
18709
18710   if (BINFO_VIRTUAL_P (binfo))
18711     add_AT_unsigned (die, DW_AT_virtuality, DW_VIRTUALITY_virtual);
18712
18713   if (access == access_public_node)
18714     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_public);
18715   else if (access == access_protected_node)
18716     add_AT_unsigned (die, DW_AT_accessibility, DW_ACCESS_protected);
18717 }
18718
18719 /* Generate a DIE for a class member.  */
18720
18721 static void
18722 gen_member_die (tree type, dw_die_ref context_die)
18723 {
18724   tree member;
18725   tree binfo = TYPE_BINFO (type);
18726   dw_die_ref child;
18727
18728   /* If this is not an incomplete type, output descriptions of each of its
18729      members. Note that as we output the DIEs necessary to represent the
18730      members of this record or union type, we will also be trying to output
18731      DIEs to represent the *types* of those members. However the `type'
18732      function (above) will specifically avoid generating type DIEs for member
18733      types *within* the list of member DIEs for this (containing) type except
18734      for those types (of members) which are explicitly marked as also being
18735      members of this (containing) type themselves.  The g++ front- end can
18736      force any given type to be treated as a member of some other (containing)
18737      type by setting the TYPE_CONTEXT of the given (member) type to point to
18738      the TREE node representing the appropriate (containing) type.  */
18739
18740   /* First output info about the base classes.  */
18741   if (binfo)
18742     {
18743       VEC(tree,gc) *accesses = BINFO_BASE_ACCESSES (binfo);
18744       int i;
18745       tree base;
18746
18747       for (i = 0; BINFO_BASE_ITERATE (binfo, i, base); i++)
18748         gen_inheritance_die (base,
18749                              (accesses ? VEC_index (tree, accesses, i)
18750                               : access_public_node), context_die);
18751     }
18752
18753   /* Now output info about the data members and type members.  */
18754   for (member = TYPE_FIELDS (type); member; member = TREE_CHAIN (member))
18755     {
18756       /* If we thought we were generating minimal debug info for TYPE
18757          and then changed our minds, some of the member declarations
18758          may have already been defined.  Don't define them again, but
18759          do put them in the right order.  */
18760
18761       child = lookup_decl_die (member);
18762       if (child)
18763         splice_child_die (context_die, child);
18764       else
18765         gen_decl_die (member, NULL, context_die);
18766     }
18767
18768   /* Now output info about the function members (if any).  */
18769   for (member = TYPE_METHODS (type); member; member = TREE_CHAIN (member))
18770     {
18771       /* Don't include clones in the member list.  */
18772       if (DECL_ABSTRACT_ORIGIN (member))
18773         continue;
18774
18775       child = lookup_decl_die (member);
18776       if (child)
18777         splice_child_die (context_die, child);
18778       else
18779         gen_decl_die (member, NULL, context_die);
18780     }
18781 }
18782
18783 /* Generate a DIE for a structure or union type.  If TYPE_DECL_SUPPRESS_DEBUG
18784    is set, we pretend that the type was never defined, so we only get the
18785    member DIEs needed by later specification DIEs.  */
18786
18787 static void
18788 gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
18789                                 enum debug_info_usage usage)
18790 {
18791   dw_die_ref type_die = lookup_type_die (type);
18792   dw_die_ref scope_die = 0;
18793   int nested = 0;
18794   int complete = (TYPE_SIZE (type)
18795                   && (! TYPE_STUB_DECL (type)
18796                       || ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
18797   int ns_decl = (context_die && context_die->die_tag == DW_TAG_namespace);
18798   complete = complete && should_emit_struct_debug (type, usage);
18799
18800   if (type_die && ! complete)
18801     return;
18802
18803   if (TYPE_CONTEXT (type) != NULL_TREE
18804       && (AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
18805           || TREE_CODE (TYPE_CONTEXT (type)) == NAMESPACE_DECL))
18806     nested = 1;
18807
18808   scope_die = scope_die_for (type, context_die);
18809
18810   if (! type_die || (nested && scope_die == comp_unit_die))
18811     /* First occurrence of type or toplevel definition of nested class.  */
18812     {
18813       dw_die_ref old_die = type_die;
18814
18815       type_die = new_die (TREE_CODE (type) == RECORD_TYPE
18816                           ? record_type_tag (type) : DW_TAG_union_type,
18817                           scope_die, type);
18818       equate_type_number_to_die (type, type_die);
18819       if (old_die)
18820         add_AT_specification (type_die, old_die);
18821       else
18822         add_name_attribute (type_die, type_tag (type));
18823     }
18824   else
18825     remove_AT (type_die, DW_AT_declaration);
18826
18827   /* Generate child dies for template paramaters.  */
18828   if (debug_info_level > DINFO_LEVEL_TERSE
18829       && COMPLETE_TYPE_P (type))
18830     gen_generic_params_dies (type);
18831
18832   /* If this type has been completed, then give it a byte_size attribute and
18833      then give a list of members.  */
18834   if (complete && !ns_decl)
18835     {
18836       /* Prevent infinite recursion in cases where the type of some member of
18837          this type is expressed in terms of this type itself.  */
18838       TREE_ASM_WRITTEN (type) = 1;
18839       add_byte_size_attribute (type_die, type);
18840       if (TYPE_STUB_DECL (type) != NULL_TREE)
18841         add_src_coords_attributes (type_die, TYPE_STUB_DECL (type));
18842
18843       /* If the first reference to this type was as the return type of an
18844          inline function, then it may not have a parent.  Fix this now.  */
18845       if (type_die->die_parent == NULL)
18846         add_child_die (scope_die, type_die);
18847
18848       push_decl_scope (type);
18849       gen_member_die (type, type_die);
18850       pop_decl_scope ();
18851
18852       /* GNU extension: Record what type our vtable lives in.  */
18853       if (TYPE_VFIELD (type))
18854         {
18855           tree vtype = DECL_FCONTEXT (TYPE_VFIELD (type));
18856
18857           gen_type_die (vtype, context_die);
18858           add_AT_die_ref (type_die, DW_AT_containing_type,
18859                           lookup_type_die (vtype));
18860         }
18861     }
18862   else
18863     {
18864       add_AT_flag (type_die, DW_AT_declaration, 1);
18865
18866       /* We don't need to do this for function-local types.  */
18867       if (TYPE_STUB_DECL (type)
18868           && ! decl_function_context (TYPE_STUB_DECL (type)))
18869         VEC_safe_push (tree, gc, incomplete_types, type);
18870     }
18871
18872   if (get_AT (type_die, DW_AT_name))
18873     add_pubtype (type, type_die);
18874 }
18875
18876 /* Generate a DIE for a subroutine _type_.  */
18877
18878 static void
18879 gen_subroutine_type_die (tree type, dw_die_ref context_die)
18880 {
18881   tree return_type = TREE_TYPE (type);
18882   dw_die_ref subr_die
18883     = new_die (DW_TAG_subroutine_type,
18884                scope_die_for (type, context_die), type);
18885
18886   equate_type_number_to_die (type, subr_die);
18887   add_prototyped_attribute (subr_die, type);
18888   add_type_attribute (subr_die, return_type, 0, 0, context_die);
18889   gen_formal_types_die (type, subr_die);
18890
18891   if (get_AT (subr_die, DW_AT_name))
18892     add_pubtype (type, subr_die);
18893 }
18894
18895 /* Generate a DIE for a type definition.  */
18896
18897 static void
18898 gen_typedef_die (tree decl, dw_die_ref context_die)
18899 {
18900   dw_die_ref type_die;
18901   tree origin;
18902
18903   if (TREE_ASM_WRITTEN (decl))
18904     return;
18905
18906   TREE_ASM_WRITTEN (decl) = 1;
18907   type_die = new_die (DW_TAG_typedef, context_die, decl);
18908   origin = decl_ultimate_origin (decl);
18909   if (origin != NULL)
18910     add_abstract_origin_attribute (type_die, origin);
18911   else
18912     {
18913       tree type;
18914
18915       add_name_and_src_coords_attributes (type_die, decl);
18916       if (DECL_ORIGINAL_TYPE (decl))
18917         {
18918           type = DECL_ORIGINAL_TYPE (decl);
18919
18920           gcc_assert (type != TREE_TYPE (decl));
18921           equate_type_number_to_die (TREE_TYPE (decl), type_die);
18922         }
18923       else
18924         type = TREE_TYPE (decl);
18925
18926       add_type_attribute (type_die, type, TREE_READONLY (decl),
18927                           TREE_THIS_VOLATILE (decl), context_die);
18928     }
18929
18930   if (DECL_ABSTRACT (decl))
18931     equate_decl_number_to_die (decl, type_die);
18932
18933   if (get_AT (type_die, DW_AT_name))
18934     add_pubtype (decl, type_die);
18935 }
18936
18937 /* Generate a type description DIE.  */
18938
18939 static void
18940 gen_type_die_with_usage (tree type, dw_die_ref context_die,
18941                                 enum debug_info_usage usage)
18942 {
18943   int need_pop;
18944   struct array_descr_info info;
18945
18946   if (type == NULL_TREE || type == error_mark_node)
18947     return;
18948
18949   /* If TYPE is a typedef type variant, let's generate debug info
18950      for the parent typedef which TYPE is a type of.  */
18951   if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
18952       && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
18953     {
18954       if (TREE_ASM_WRITTEN (type))
18955         return;
18956
18957       /* Prevent broken recursion; we can't hand off to the same type.  */
18958       gcc_assert (DECL_ORIGINAL_TYPE (TYPE_NAME (type)) != type);
18959
18960       /* Use the DIE of the containing namespace as the parent DIE of
18961          the type description DIE we want to generate.  */
18962       if (DECL_CONTEXT (TYPE_NAME (type))
18963           && TREE_CODE (DECL_CONTEXT (TYPE_NAME (type))) == NAMESPACE_DECL)
18964         context_die = get_context_die (DECL_CONTEXT (TYPE_NAME (type)));
18965
18966       TREE_ASM_WRITTEN (type) = 1;
18967       gen_decl_die (TYPE_NAME (type), NULL, context_die);
18968       return;
18969     }
18970
18971   /* If this is an array type with hidden descriptor, handle it first.  */
18972   if (!TREE_ASM_WRITTEN (type)
18973       && lang_hooks.types.get_array_descr_info
18974       && lang_hooks.types.get_array_descr_info (type, &info)
18975       && (dwarf_version >= 3 || !dwarf_strict))
18976     {
18977       gen_descr_array_type_die (type, &info, context_die);
18978       TREE_ASM_WRITTEN (type) = 1;
18979       return;
18980     }
18981
18982   /* We are going to output a DIE to represent the unqualified version
18983      of this type (i.e. without any const or volatile qualifiers) so
18984      get the main variant (i.e. the unqualified version) of this type
18985      now.  (Vectors are special because the debugging info is in the
18986      cloned type itself).  */
18987   if (TREE_CODE (type) != VECTOR_TYPE)
18988     type = type_main_variant (type);
18989
18990   if (TREE_ASM_WRITTEN (type))
18991     return;
18992
18993   switch (TREE_CODE (type))
18994     {
18995     case ERROR_MARK:
18996       break;
18997
18998     case POINTER_TYPE:
18999     case REFERENCE_TYPE:
19000       /* We must set TREE_ASM_WRITTEN in case this is a recursive type.  This
19001          ensures that the gen_type_die recursion will terminate even if the
19002          type is recursive.  Recursive types are possible in Ada.  */
19003       /* ??? We could perhaps do this for all types before the switch
19004          statement.  */
19005       TREE_ASM_WRITTEN (type) = 1;
19006
19007       /* For these types, all that is required is that we output a DIE (or a
19008          set of DIEs) to represent the "basis" type.  */
19009       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19010                                 DINFO_USAGE_IND_USE);
19011       break;
19012
19013     case OFFSET_TYPE:
19014       /* This code is used for C++ pointer-to-data-member types.
19015          Output a description of the relevant class type.  */
19016       gen_type_die_with_usage (TYPE_OFFSET_BASETYPE (type), context_die,
19017                                         DINFO_USAGE_IND_USE);
19018
19019       /* Output a description of the type of the object pointed to.  */
19020       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19021                                         DINFO_USAGE_IND_USE);
19022
19023       /* Now output a DIE to represent this pointer-to-data-member type
19024          itself.  */
19025       gen_ptr_to_mbr_type_die (type, context_die);
19026       break;
19027
19028     case FUNCTION_TYPE:
19029       /* Force out return type (in case it wasn't forced out already).  */
19030       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19031                                         DINFO_USAGE_DIR_USE);
19032       gen_subroutine_type_die (type, context_die);
19033       break;
19034
19035     case METHOD_TYPE:
19036       /* Force out return type (in case it wasn't forced out already).  */
19037       gen_type_die_with_usage (TREE_TYPE (type), context_die,
19038                                         DINFO_USAGE_DIR_USE);
19039       gen_subroutine_type_die (type, context_die);
19040       break;
19041
19042     case ARRAY_TYPE:
19043       gen_array_type_die (type, context_die);
19044       break;
19045
19046     case VECTOR_TYPE:
19047       gen_array_type_die (type, context_die);
19048       break;
19049
19050     case ENUMERAL_TYPE:
19051     case RECORD_TYPE:
19052     case UNION_TYPE:
19053     case QUAL_UNION_TYPE:
19054       /* If this is a nested type whose containing class hasn't been written
19055          out yet, writing it out will cover this one, too.  This does not apply
19056          to instantiations of member class templates; they need to be added to
19057          the containing class as they are generated.  FIXME: This hurts the
19058          idea of combining type decls from multiple TUs, since we can't predict
19059          what set of template instantiations we'll get.  */
19060       if (TYPE_CONTEXT (type)
19061           && AGGREGATE_TYPE_P (TYPE_CONTEXT (type))
19062           && ! TREE_ASM_WRITTEN (TYPE_CONTEXT (type)))
19063         {
19064           gen_type_die_with_usage (TYPE_CONTEXT (type), context_die, usage);
19065
19066           if (TREE_ASM_WRITTEN (type))
19067             return;
19068
19069           /* If that failed, attach ourselves to the stub.  */
19070           push_decl_scope (TYPE_CONTEXT (type));
19071           context_die = lookup_type_die (TYPE_CONTEXT (type));
19072           need_pop = 1;
19073         }
19074       else if (TYPE_CONTEXT (type) != NULL_TREE
19075                && (TREE_CODE (TYPE_CONTEXT (type)) == FUNCTION_DECL))
19076         {
19077           /* If this type is local to a function that hasn't been written
19078              out yet, use a NULL context for now; it will be fixed up in
19079              decls_for_scope.  */
19080           context_die = lookup_decl_die (TYPE_CONTEXT (type));
19081           need_pop = 0;
19082         }
19083       else
19084         {
19085           context_die = declare_in_namespace (type, context_die);
19086           need_pop = 0;
19087         }
19088
19089       if (TREE_CODE (type) == ENUMERAL_TYPE)
19090         {
19091           /* This might have been written out by the call to
19092              declare_in_namespace.  */
19093           if (!TREE_ASM_WRITTEN (type))
19094             gen_enumeration_type_die (type, context_die);
19095         }
19096       else
19097         gen_struct_or_union_type_die (type, context_die, usage);
19098
19099       if (need_pop)
19100         pop_decl_scope ();
19101
19102       /* Don't set TREE_ASM_WRITTEN on an incomplete struct; we want to fix
19103          it up if it is ever completed.  gen_*_type_die will set it for us
19104          when appropriate.  */
19105       return;
19106
19107     case VOID_TYPE:
19108     case INTEGER_TYPE:
19109     case REAL_TYPE:
19110     case FIXED_POINT_TYPE:
19111     case COMPLEX_TYPE:
19112     case BOOLEAN_TYPE:
19113       /* No DIEs needed for fundamental types.  */
19114       break;
19115
19116     case LANG_TYPE:
19117       /* No Dwarf representation currently defined.  */
19118       break;
19119
19120     default:
19121       gcc_unreachable ();
19122     }
19123
19124   TREE_ASM_WRITTEN (type) = 1;
19125 }
19126
19127 static void
19128 gen_type_die (tree type, dw_die_ref context_die)
19129 {
19130   gen_type_die_with_usage (type, context_die, DINFO_USAGE_DIR_USE);
19131 }
19132
19133 /* Generate a DW_TAG_lexical_block DIE followed by DIEs to represent all of the
19134    things which are local to the given block.  */
19135
19136 static void
19137 gen_block_die (tree stmt, dw_die_ref context_die, int depth)
19138 {
19139   int must_output_die = 0;
19140   bool inlined_func;
19141
19142   /* Ignore blocks that are NULL.  */
19143   if (stmt == NULL_TREE)
19144     return;
19145
19146   inlined_func = inlined_function_outer_scope_p (stmt);
19147
19148   /* If the block is one fragment of a non-contiguous block, do not
19149      process the variables, since they will have been done by the
19150      origin block.  Do process subblocks.  */
19151   if (BLOCK_FRAGMENT_ORIGIN (stmt))
19152     {
19153       tree sub;
19154
19155       for (sub = BLOCK_SUBBLOCKS (stmt); sub; sub = BLOCK_CHAIN (sub))
19156         gen_block_die (sub, context_die, depth + 1);
19157
19158       return;
19159     }
19160
19161   /* Determine if we need to output any Dwarf DIEs at all to represent this
19162      block.  */
19163   if (inlined_func)
19164     /* The outer scopes for inlinings *must* always be represented.  We
19165        generate DW_TAG_inlined_subroutine DIEs for them.  (See below.) */
19166     must_output_die = 1;
19167   else
19168     {
19169       /* Determine if this block directly contains any "significant"
19170          local declarations which we will need to output DIEs for.  */
19171       if (debug_info_level > DINFO_LEVEL_TERSE)
19172         /* We are not in terse mode so *any* local declaration counts
19173            as being a "significant" one.  */
19174         must_output_die = ((BLOCK_VARS (stmt) != NULL
19175                             || BLOCK_NUM_NONLOCALIZED_VARS (stmt))
19176                            && (TREE_USED (stmt)
19177                                || TREE_ASM_WRITTEN (stmt)
19178                                || BLOCK_ABSTRACT (stmt)));
19179       else if ((TREE_USED (stmt)
19180                 || TREE_ASM_WRITTEN (stmt)
19181                 || BLOCK_ABSTRACT (stmt))
19182                && !dwarf2out_ignore_block (stmt))
19183         must_output_die = 1;
19184     }
19185
19186   /* It would be a waste of space to generate a Dwarf DW_TAG_lexical_block
19187      DIE for any block which contains no significant local declarations at
19188      all.  Rather, in such cases we just call `decls_for_scope' so that any
19189      needed Dwarf info for any sub-blocks will get properly generated. Note
19190      that in terse mode, our definition of what constitutes a "significant"
19191      local declaration gets restricted to include only inlined function
19192      instances and local (nested) function definitions.  */
19193   if (must_output_die)
19194     {
19195       if (inlined_func)
19196         {
19197           /* If STMT block is abstract, that means we have been called
19198              indirectly from dwarf2out_abstract_function.
19199              That function rightfully marks the descendent blocks (of
19200              the abstract function it is dealing with) as being abstract,
19201              precisely to prevent us from emitting any
19202              DW_TAG_inlined_subroutine DIE as a descendent
19203              of an abstract function instance. So in that case, we should
19204              not call gen_inlined_subroutine_die.
19205
19206              Later though, when cgraph asks dwarf2out to emit info
19207              for the concrete instance of the function decl into which
19208              the concrete instance of STMT got inlined, the later will lead
19209              to the generation of a DW_TAG_inlined_subroutine DIE.  */
19210           if (! BLOCK_ABSTRACT (stmt))
19211             gen_inlined_subroutine_die (stmt, context_die, depth);
19212         }
19213       else
19214         gen_lexical_block_die (stmt, context_die, depth);
19215     }
19216   else
19217     decls_for_scope (stmt, context_die, depth);
19218 }
19219
19220 /* Process variable DECL (or variable with origin ORIGIN) within
19221    block STMT and add it to CONTEXT_DIE.  */
19222 static void
19223 process_scope_var (tree stmt, tree decl, tree origin, dw_die_ref context_die)
19224 {
19225   dw_die_ref die;
19226   tree decl_or_origin = decl ? decl : origin;
19227
19228   if (TREE_CODE (decl_or_origin) == FUNCTION_DECL)
19229     die = lookup_decl_die (decl_or_origin);
19230   else if (TREE_CODE (decl_or_origin) == TYPE_DECL
19231            && TYPE_DECL_IS_STUB (decl_or_origin))
19232     die = lookup_type_die (TREE_TYPE (decl_or_origin));
19233   else
19234     die = NULL;
19235
19236   if (die != NULL && die->die_parent == NULL)
19237     add_child_die (context_die, die);
19238   else if (TREE_CODE (decl_or_origin) == IMPORTED_DECL)
19239     dwarf2out_imported_module_or_decl_1 (decl_or_origin, DECL_NAME (decl_or_origin),
19240                                          stmt, context_die);
19241   else
19242     gen_decl_die (decl, origin, context_die);
19243 }
19244
19245 /* Generate all of the decls declared within a given scope and (recursively)
19246    all of its sub-blocks.  */
19247
19248 static void
19249 decls_for_scope (tree stmt, dw_die_ref context_die, int depth)
19250 {
19251   tree decl;
19252   unsigned int i;
19253   tree subblocks;
19254
19255   /* Ignore NULL blocks.  */
19256   if (stmt == NULL_TREE)
19257     return;
19258
19259   /* Output the DIEs to represent all of the data objects and typedefs
19260      declared directly within this block but not within any nested
19261      sub-blocks.  Also, nested function and tag DIEs have been
19262      generated with a parent of NULL; fix that up now.  */
19263   for (decl = BLOCK_VARS (stmt); decl != NULL; decl = TREE_CHAIN (decl))
19264     process_scope_var (stmt, decl, NULL_TREE, context_die);
19265   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (stmt); i++)
19266     process_scope_var (stmt, NULL, BLOCK_NONLOCALIZED_VAR (stmt, i),
19267                        context_die);
19268
19269   /* If we're at -g1, we're not interested in subblocks.  */
19270   if (debug_info_level <= DINFO_LEVEL_TERSE)
19271     return;
19272
19273   /* Output the DIEs to represent all sub-blocks (and the items declared
19274      therein) of this block.  */
19275   for (subblocks = BLOCK_SUBBLOCKS (stmt);
19276        subblocks != NULL;
19277        subblocks = BLOCK_CHAIN (subblocks))
19278     gen_block_die (subblocks, context_die, depth + 1);
19279 }
19280
19281 /* Is this a typedef we can avoid emitting?  */
19282
19283 static inline int
19284 is_redundant_typedef (const_tree decl)
19285 {
19286   if (TYPE_DECL_IS_STUB (decl))
19287     return 1;
19288
19289   if (DECL_ARTIFICIAL (decl)
19290       && DECL_CONTEXT (decl)
19291       && is_tagged_type (DECL_CONTEXT (decl))
19292       && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
19293       && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
19294     /* Also ignore the artificial member typedef for the class name.  */
19295     return 1;
19296
19297   return 0;
19298 }
19299
19300 /* Returns the DIE for a context.  */
19301
19302 static inline dw_die_ref
19303 get_context_die (tree context)
19304 {
19305   if (context)
19306     {
19307       /* Find die that represents this context.  */
19308       if (TYPE_P (context))
19309         return force_type_die (TYPE_MAIN_VARIANT (context));
19310       else
19311         return force_decl_die (context);
19312     }
19313   return comp_unit_die;
19314 }
19315
19316 /* Returns the DIE for decl.  A DIE will always be returned.  */
19317
19318 static dw_die_ref
19319 force_decl_die (tree decl)
19320 {
19321   dw_die_ref decl_die;
19322   unsigned saved_external_flag;
19323   tree save_fn = NULL_TREE;
19324   decl_die = lookup_decl_die (decl);
19325   if (!decl_die)
19326     {
19327       dw_die_ref context_die = get_context_die (DECL_CONTEXT (decl));
19328
19329       decl_die = lookup_decl_die (decl);
19330       if (decl_die)
19331         return decl_die;
19332
19333       switch (TREE_CODE (decl))
19334         {
19335         case FUNCTION_DECL:
19336           /* Clear current_function_decl, so that gen_subprogram_die thinks
19337              that this is a declaration. At this point, we just want to force
19338              declaration die.  */
19339           save_fn = current_function_decl;
19340           current_function_decl = NULL_TREE;
19341           gen_subprogram_die (decl, context_die);
19342           current_function_decl = save_fn;
19343           break;
19344
19345         case VAR_DECL:
19346           /* Set external flag to force declaration die. Restore it after
19347            gen_decl_die() call.  */
19348           saved_external_flag = DECL_EXTERNAL (decl);
19349           DECL_EXTERNAL (decl) = 1;
19350           gen_decl_die (decl, NULL, context_die);
19351           DECL_EXTERNAL (decl) = saved_external_flag;
19352           break;
19353
19354         case NAMESPACE_DECL:
19355           if (dwarf_version >= 3 || !dwarf_strict)
19356             dwarf2out_decl (decl);
19357           else
19358             /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace.  */
19359             decl_die = comp_unit_die;
19360           break;
19361
19362         default:
19363           gcc_unreachable ();
19364         }
19365
19366       /* We should be able to find the DIE now.  */
19367       if (!decl_die)
19368         decl_die = lookup_decl_die (decl);
19369       gcc_assert (decl_die);
19370     }
19371
19372   return decl_die;
19373 }
19374
19375 /* Returns the DIE for TYPE, that must not be a base type.  A DIE is
19376    always returned.  */
19377
19378 static dw_die_ref
19379 force_type_die (tree type)
19380 {
19381   dw_die_ref type_die;
19382
19383   type_die = lookup_type_die (type);
19384   if (!type_die)
19385     {
19386       dw_die_ref context_die = get_context_die (TYPE_CONTEXT (type));
19387
19388       type_die = modified_type_die (type, TYPE_READONLY (type),
19389                                     TYPE_VOLATILE (type), context_die);
19390       gcc_assert (type_die);
19391     }
19392   return type_die;
19393 }
19394
19395 /* Force out any required namespaces to be able to output DECL,
19396    and return the new context_die for it, if it's changed.  */
19397
19398 static dw_die_ref
19399 setup_namespace_context (tree thing, dw_die_ref context_die)
19400 {
19401   tree context = (DECL_P (thing)
19402                   ? DECL_CONTEXT (thing) : TYPE_CONTEXT (thing));
19403   if (context && TREE_CODE (context) == NAMESPACE_DECL)
19404     /* Force out the namespace.  */
19405     context_die = force_decl_die (context);
19406
19407   return context_die;
19408 }
19409
19410 /* Emit a declaration DIE for THING (which is either a DECL or a tagged
19411    type) within its namespace, if appropriate.
19412
19413    For compatibility with older debuggers, namespace DIEs only contain
19414    declarations; all definitions are emitted at CU scope.  */
19415
19416 static dw_die_ref
19417 declare_in_namespace (tree thing, dw_die_ref context_die)
19418 {
19419   dw_die_ref ns_context;
19420
19421   if (debug_info_level <= DINFO_LEVEL_TERSE)
19422     return context_die;
19423
19424   /* If this decl is from an inlined function, then don't try to emit it in its
19425      namespace, as we will get confused.  It would have already been emitted
19426      when the abstract instance of the inline function was emitted anyways.  */
19427   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
19428     return context_die;
19429
19430   ns_context = setup_namespace_context (thing, context_die);
19431
19432   if (ns_context != context_die)
19433     {
19434       if (is_fortran ())
19435         return ns_context;
19436       if (DECL_P (thing))
19437         gen_decl_die (thing, NULL, ns_context);
19438       else
19439         gen_type_die (thing, ns_context);
19440     }
19441   return context_die;
19442 }
19443
19444 /* Generate a DIE for a namespace or namespace alias.  */
19445
19446 static void
19447 gen_namespace_die (tree decl, dw_die_ref context_die)
19448 {
19449   dw_die_ref namespace_die;
19450
19451   /* Namespace aliases have a DECL_ABSTRACT_ORIGIN of the namespace
19452      they are an alias of.  */
19453   if (DECL_ABSTRACT_ORIGIN (decl) == NULL)
19454     {
19455       /* Output a real namespace or module.  */
19456       context_die = setup_namespace_context (decl, comp_unit_die);
19457       namespace_die = new_die (is_fortran ()
19458                                ? DW_TAG_module : DW_TAG_namespace,
19459                                context_die, decl);
19460       /* For Fortran modules defined in different CU don't add src coords.  */
19461       if (namespace_die->die_tag == DW_TAG_module && DECL_EXTERNAL (decl))
19462         {
19463           const char *name = dwarf2_name (decl, 0);
19464           if (name)
19465             add_name_attribute (namespace_die, name);
19466         }
19467       else
19468         add_name_and_src_coords_attributes (namespace_die, decl);
19469       if (DECL_EXTERNAL (decl))
19470         add_AT_flag (namespace_die, DW_AT_declaration, 1);
19471       equate_decl_number_to_die (decl, namespace_die);
19472     }
19473   else
19474     {
19475       /* Output a namespace alias.  */
19476
19477       /* Force out the namespace we are an alias of, if necessary.  */
19478       dw_die_ref origin_die
19479         = force_decl_die (DECL_ABSTRACT_ORIGIN (decl));
19480
19481       if (DECL_CONTEXT (decl) == NULL_TREE
19482           || TREE_CODE (DECL_CONTEXT (decl)) == NAMESPACE_DECL)
19483         context_die = setup_namespace_context (decl, comp_unit_die);
19484       /* Now create the namespace alias DIE.  */
19485       namespace_die = new_die (DW_TAG_imported_declaration, context_die, decl);
19486       add_name_and_src_coords_attributes (namespace_die, decl);
19487       add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
19488       equate_decl_number_to_die (decl, namespace_die);
19489     }
19490 }
19491
19492 /* Generate Dwarf debug information for a decl described by DECL.  */
19493
19494 static void
19495 gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
19496 {
19497   tree decl_or_origin = decl ? decl : origin;
19498   tree class_origin = NULL, ultimate_origin;
19499
19500   if (DECL_P (decl_or_origin) && DECL_IGNORED_P (decl_or_origin))
19501     return;
19502
19503   switch (TREE_CODE (decl_or_origin))
19504     {
19505     case ERROR_MARK:
19506       break;
19507
19508     case CONST_DECL:
19509       if (!is_fortran ())
19510         {
19511           /* The individual enumerators of an enum type get output when we output
19512              the Dwarf representation of the relevant enum type itself.  */
19513           break;
19514         }
19515
19516       /* Emit its type.  */
19517       gen_type_die (TREE_TYPE (decl), context_die);
19518
19519       /* And its containing namespace.  */
19520       context_die = declare_in_namespace (decl, context_die);
19521
19522       gen_const_die (decl, context_die);
19523       break;
19524
19525     case FUNCTION_DECL:
19526       /* Don't output any DIEs to represent mere function declarations,
19527          unless they are class members or explicit block externs.  */
19528       if (DECL_INITIAL (decl_or_origin) == NULL_TREE
19529           && DECL_CONTEXT (decl_or_origin) == NULL_TREE
19530           && (current_function_decl == NULL_TREE
19531               || DECL_ARTIFICIAL (decl_or_origin)))
19532         break;
19533
19534 #if 0
19535       /* FIXME */
19536       /* This doesn't work because the C frontend sets DECL_ABSTRACT_ORIGIN
19537          on local redeclarations of global functions.  That seems broken.  */
19538       if (current_function_decl != decl)
19539         /* This is only a declaration.  */;
19540 #endif
19541
19542       /* If we're emitting a clone, emit info for the abstract instance.  */
19543       if (origin || DECL_ORIGIN (decl) != decl)
19544         dwarf2out_abstract_function (origin
19545                                      ? DECL_ORIGIN (origin)
19546                                      : DECL_ABSTRACT_ORIGIN (decl));
19547
19548       /* If we're emitting an out-of-line copy of an inline function,
19549          emit info for the abstract instance and set up to refer to it.  */
19550       else if (cgraph_function_possibly_inlined_p (decl)
19551                && ! DECL_ABSTRACT (decl)
19552                && ! class_or_namespace_scope_p (context_die)
19553                /* dwarf2out_abstract_function won't emit a die if this is just
19554                   a declaration.  We must avoid setting DECL_ABSTRACT_ORIGIN in
19555                   that case, because that works only if we have a die.  */
19556                && DECL_INITIAL (decl) != NULL_TREE)
19557         {
19558           dwarf2out_abstract_function (decl);
19559           set_decl_origin_self (decl);
19560         }
19561
19562       /* Otherwise we're emitting the primary DIE for this decl.  */
19563       else if (debug_info_level > DINFO_LEVEL_TERSE)
19564         {
19565           /* Before we describe the FUNCTION_DECL itself, make sure that we
19566              have described its return type.  */
19567           gen_type_die (TREE_TYPE (TREE_TYPE (decl)), context_die);
19568
19569           /* And its virtual context.  */
19570           if (DECL_VINDEX (decl) != NULL_TREE)
19571             gen_type_die (DECL_CONTEXT (decl), context_die);
19572
19573           /* And its containing type.  */
19574           if (!origin)
19575             origin = decl_class_context (decl);
19576           if (origin != NULL_TREE)
19577             gen_type_die_for_member (origin, decl, context_die);
19578
19579           /* And its containing namespace.  */
19580           context_die = declare_in_namespace (decl, context_die);
19581         }
19582
19583       /* Now output a DIE to represent the function itself.  */
19584       if (decl)
19585         gen_subprogram_die (decl, context_die);
19586       break;
19587
19588     case TYPE_DECL:
19589       /* If we are in terse mode, don't generate any DIEs to represent any
19590          actual typedefs.  */
19591       if (debug_info_level <= DINFO_LEVEL_TERSE)
19592         break;
19593
19594       /* In the special case of a TYPE_DECL node representing the declaration
19595          of some type tag, if the given TYPE_DECL is marked as having been
19596          instantiated from some other (original) TYPE_DECL node (e.g. one which
19597          was generated within the original definition of an inline function) we
19598          used to generate a special (abbreviated) DW_TAG_structure_type,
19599          DW_TAG_union_type, or DW_TAG_enumeration_type DIE here.  But nothing
19600          should be actually referencing those DIEs, as variable DIEs with that
19601          type would be emitted already in the abstract origin, so it was always
19602          removed during unused type prunning.  Don't add anything in this
19603          case.  */
19604       if (TYPE_DECL_IS_STUB (decl) && decl_ultimate_origin (decl) != NULL_TREE)
19605         break;
19606
19607       if (is_redundant_typedef (decl))
19608         gen_type_die (TREE_TYPE (decl), context_die);
19609       else
19610         /* Output a DIE to represent the typedef itself.  */
19611         gen_typedef_die (decl, context_die);
19612       break;
19613
19614     case LABEL_DECL:
19615       if (debug_info_level >= DINFO_LEVEL_NORMAL)
19616         gen_label_die (decl, context_die);
19617       break;
19618
19619     case VAR_DECL:
19620     case RESULT_DECL:
19621       /* If we are in terse mode, don't generate any DIEs to represent any
19622          variable declarations or definitions.  */
19623       if (debug_info_level <= DINFO_LEVEL_TERSE)
19624         break;
19625
19626       /* Output any DIEs that are needed to specify the type of this data
19627          object.  */
19628       if (decl_by_reference_p (decl_or_origin))
19629         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19630       else
19631         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19632
19633       /* And its containing type.  */
19634       class_origin = decl_class_context (decl_or_origin);
19635       if (class_origin != NULL_TREE)
19636         gen_type_die_for_member (class_origin, decl_or_origin, context_die);
19637
19638       /* And its containing namespace.  */
19639       context_die = declare_in_namespace (decl_or_origin, context_die);
19640
19641       /* Now output the DIE to represent the data object itself.  This gets
19642          complicated because of the possibility that the VAR_DECL really
19643          represents an inlined instance of a formal parameter for an inline
19644          function.  */
19645       ultimate_origin = decl_ultimate_origin (decl_or_origin);
19646       if (ultimate_origin != NULL_TREE
19647           && TREE_CODE (ultimate_origin) == PARM_DECL)
19648         gen_formal_parameter_die (decl, origin,
19649                                   true /* Emit name attribute.  */,
19650                                   context_die);
19651       else
19652         gen_variable_die (decl, origin, context_die);
19653       break;
19654
19655     case FIELD_DECL:
19656       /* Ignore the nameless fields that are used to skip bits but handle C++
19657          anonymous unions and structs.  */
19658       if (DECL_NAME (decl) != NULL_TREE
19659           || TREE_CODE (TREE_TYPE (decl)) == UNION_TYPE
19660           || TREE_CODE (TREE_TYPE (decl)) == RECORD_TYPE)
19661         {
19662           gen_type_die (member_declared_type (decl), context_die);
19663           gen_field_die (decl, context_die);
19664         }
19665       break;
19666
19667     case PARM_DECL:
19668       if (DECL_BY_REFERENCE (decl_or_origin))
19669         gen_type_die (TREE_TYPE (TREE_TYPE (decl_or_origin)), context_die);
19670       else
19671         gen_type_die (TREE_TYPE (decl_or_origin), context_die);
19672       gen_formal_parameter_die (decl, origin,
19673                                 true /* Emit name attribute.  */,
19674                                 context_die);
19675       break;
19676
19677     case NAMESPACE_DECL:
19678     case IMPORTED_DECL:
19679       if (dwarf_version >= 3 || !dwarf_strict)
19680         gen_namespace_die (decl, context_die);
19681       break;
19682
19683     default:
19684       /* Probably some frontend-internal decl.  Assume we don't care.  */
19685       gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES);
19686       break;
19687     }
19688 }
19689 \f
19690 /* Output debug information for global decl DECL.  Called from toplev.c after
19691    compilation proper has finished.  */
19692
19693 static void
19694 dwarf2out_global_decl (tree decl)
19695 {
19696   /* Output DWARF2 information for file-scope tentative data object
19697      declarations, file-scope (extern) function declarations (which
19698      had no corresponding body) and file-scope tagged type declarations
19699      and definitions which have not yet been forced out.  */
19700   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
19701     dwarf2out_decl (decl);
19702 }
19703
19704 /* Output debug information for type decl DECL.  Called from toplev.c
19705    and from language front ends (to record built-in types).  */
19706 static void
19707 dwarf2out_type_decl (tree decl, int local)
19708 {
19709   if (!local)
19710     dwarf2out_decl (decl);
19711 }
19712
19713 /* Output debug information for imported module or decl DECL.
19714    NAME is non-NULL name in the lexical block if the decl has been renamed.
19715    LEXICAL_BLOCK is the lexical block (which TREE_CODE is a BLOCK)
19716    that DECL belongs to.
19717    LEXICAL_BLOCK_DIE is the DIE of LEXICAL_BLOCK.  */
19718 static void
19719 dwarf2out_imported_module_or_decl_1 (tree decl,
19720                                      tree name,
19721                                      tree lexical_block,
19722                                      dw_die_ref lexical_block_die)
19723 {
19724   expanded_location xloc;
19725   dw_die_ref imported_die = NULL;
19726   dw_die_ref at_import_die;
19727
19728   if (TREE_CODE (decl) == IMPORTED_DECL)
19729     {
19730       xloc = expand_location (DECL_SOURCE_LOCATION (decl));
19731       decl = IMPORTED_DECL_ASSOCIATED_DECL (decl);
19732       gcc_assert (decl);
19733     }
19734   else
19735     xloc = expand_location (input_location);
19736
19737   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
19738     {
19739       if (is_base_type (TREE_TYPE (decl)))
19740         at_import_die = base_type_die (TREE_TYPE (decl));
19741       else
19742         at_import_die = force_type_die (TREE_TYPE (decl));
19743       /* For namespace N { typedef void T; } using N::T; base_type_die
19744          returns NULL, but DW_TAG_imported_declaration requires
19745          the DW_AT_import tag.  Force creation of DW_TAG_typedef.  */
19746       if (!at_import_die)
19747         {
19748           gcc_assert (TREE_CODE (decl) == TYPE_DECL);
19749           gen_typedef_die (decl, get_context_die (DECL_CONTEXT (decl)));
19750           at_import_die = lookup_type_die (TREE_TYPE (decl));
19751           gcc_assert (at_import_die);
19752         }
19753     }
19754   else
19755     {
19756       at_import_die = lookup_decl_die (decl);
19757       if (!at_import_die)
19758         {
19759           /* If we're trying to avoid duplicate debug info, we may not have
19760              emitted the member decl for this field.  Emit it now.  */
19761           if (TREE_CODE (decl) == FIELD_DECL)
19762             {
19763               tree type = DECL_CONTEXT (decl);
19764
19765               if (TYPE_CONTEXT (type)
19766                   && TYPE_P (TYPE_CONTEXT (type))
19767                   && !should_emit_struct_debug (TYPE_CONTEXT (type),
19768                                                 DINFO_USAGE_DIR_USE))
19769                 return;
19770               gen_type_die_for_member (type, decl,
19771                                        get_context_die (TYPE_CONTEXT (type)));
19772             }
19773           at_import_die = force_decl_die (decl);
19774         }
19775     }
19776
19777   if (TREE_CODE (decl) == NAMESPACE_DECL)
19778     {
19779       if (dwarf_version >= 3 || !dwarf_strict)
19780         imported_die = new_die (DW_TAG_imported_module,
19781                                 lexical_block_die,
19782                                 lexical_block);
19783       else
19784         return;
19785     }
19786   else
19787     imported_die = new_die (DW_TAG_imported_declaration,
19788                             lexical_block_die,
19789                             lexical_block);
19790
19791   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
19792   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
19793   if (name)
19794     add_AT_string (imported_die, DW_AT_name,
19795                    IDENTIFIER_POINTER (name));
19796   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
19797 }
19798
19799 /* Output debug information for imported module or decl DECL.
19800    NAME is non-NULL name in context if the decl has been renamed.
19801    CHILD is true if decl is one of the renamed decls as part of
19802    importing whole module.  */
19803
19804 static void
19805 dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
19806                                    bool child)
19807 {
19808   /* dw_die_ref at_import_die;  */
19809   dw_die_ref scope_die;
19810
19811   if (debug_info_level <= DINFO_LEVEL_TERSE)
19812     return;
19813
19814   gcc_assert (decl);
19815
19816   /* To emit DW_TAG_imported_module or DW_TAG_imported_decl, we need two DIEs.
19817      We need decl DIE for reference and scope die. First, get DIE for the decl
19818      itself.  */
19819
19820   /* Get the scope die for decl context. Use comp_unit_die for global module
19821      or decl. If die is not found for non globals, force new die.  */
19822   if (context
19823       && TYPE_P (context)
19824       && !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
19825     return;
19826
19827   if (!(dwarf_version >= 3 || !dwarf_strict))
19828     return;
19829
19830   scope_die = get_context_die (context);
19831
19832   if (child)
19833     {
19834       gcc_assert (scope_die->die_child);
19835       gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
19836       gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
19837       scope_die = scope_die->die_child;
19838     }
19839
19840   /* OK, now we have DIEs for decl as well as scope. Emit imported die.  */
19841   dwarf2out_imported_module_or_decl_1 (decl, name, context, scope_die);
19842
19843 }
19844
19845 /* Write the debugging output for DECL.  */
19846
19847 void
19848 dwarf2out_decl (tree decl)
19849 {
19850   dw_die_ref context_die = comp_unit_die;
19851
19852   switch (TREE_CODE (decl))
19853     {
19854     case ERROR_MARK:
19855       return;
19856
19857     case FUNCTION_DECL:
19858       /* What we would really like to do here is to filter out all mere
19859          file-scope declarations of file-scope functions which are never
19860          referenced later within this translation unit (and keep all of ones
19861          that *are* referenced later on) but we aren't clairvoyant, so we have
19862          no idea which functions will be referenced in the future (i.e. later
19863          on within the current translation unit). So here we just ignore all
19864          file-scope function declarations which are not also definitions.  If
19865          and when the debugger needs to know something about these functions,
19866          it will have to hunt around and find the DWARF information associated
19867          with the definition of the function.
19868
19869          We can't just check DECL_EXTERNAL to find out which FUNCTION_DECL
19870          nodes represent definitions and which ones represent mere
19871          declarations.  We have to check DECL_INITIAL instead. That's because
19872          the C front-end supports some weird semantics for "extern inline"
19873          function definitions.  These can get inlined within the current
19874          translation unit (and thus, we need to generate Dwarf info for their
19875          abstract instances so that the Dwarf info for the concrete inlined
19876          instances can have something to refer to) but the compiler never
19877          generates any out-of-lines instances of such things (despite the fact
19878          that they *are* definitions).
19879
19880          The important point is that the C front-end marks these "extern
19881          inline" functions as DECL_EXTERNAL, but we need to generate DWARF for
19882          them anyway. Note that the C++ front-end also plays some similar games
19883          for inline function definitions appearing within include files which
19884          also contain `#pragma interface' pragmas.  */
19885       if (DECL_INITIAL (decl) == NULL_TREE)
19886         return;
19887
19888       /* If we're a nested function, initially use a parent of NULL; if we're
19889          a plain function, this will be fixed up in decls_for_scope.  If
19890          we're a method, it will be ignored, since we already have a DIE.  */
19891       if (decl_function_context (decl)
19892           /* But if we're in terse mode, we don't care about scope.  */
19893           && debug_info_level > DINFO_LEVEL_TERSE)
19894         context_die = NULL;
19895       break;
19896
19897     case VAR_DECL:
19898       /* Ignore this VAR_DECL if it refers to a file-scope extern data object
19899          declaration and if the declaration was never even referenced from
19900          within this entire compilation unit.  We suppress these DIEs in
19901          order to save space in the .debug section (by eliminating entries
19902          which are probably useless).  Note that we must not suppress
19903          block-local extern declarations (whether used or not) because that
19904          would screw-up the debugger's name lookup mechanism and cause it to
19905          miss things which really ought to be in scope at a given point.  */
19906       if (DECL_EXTERNAL (decl) && !TREE_USED (decl))
19907         return;
19908
19909       /* For local statics lookup proper context die.  */
19910       if (TREE_STATIC (decl) && decl_function_context (decl))
19911         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19912
19913       /* If we are in terse mode, don't generate any DIEs to represent any
19914          variable declarations or definitions.  */
19915       if (debug_info_level <= DINFO_LEVEL_TERSE)
19916         return;
19917       break;
19918
19919     case CONST_DECL:
19920       if (debug_info_level <= DINFO_LEVEL_TERSE)
19921         return;
19922       if (!is_fortran ())
19923         return;
19924       if (TREE_STATIC (decl) && decl_function_context (decl))
19925         context_die = lookup_decl_die (DECL_CONTEXT (decl));
19926       break;
19927
19928     case NAMESPACE_DECL:
19929     case IMPORTED_DECL:
19930       if (debug_info_level <= DINFO_LEVEL_TERSE)
19931         return;
19932       if (lookup_decl_die (decl) != NULL)
19933         return;
19934       break;
19935
19936     case TYPE_DECL:
19937       /* Don't emit stubs for types unless they are needed by other DIEs.  */
19938       if (TYPE_DECL_SUPPRESS_DEBUG (decl))
19939         return;
19940
19941       /* Don't bother trying to generate any DIEs to represent any of the
19942          normal built-in types for the language we are compiling.  */
19943       if (DECL_IS_BUILTIN (decl))
19944         {
19945           /* OK, we need to generate one for `bool' so GDB knows what type
19946              comparisons have.  */
19947           if (is_cxx ()
19948               && TREE_CODE (TREE_TYPE (decl)) == BOOLEAN_TYPE
19949               && ! DECL_IGNORED_P (decl))
19950             modified_type_die (TREE_TYPE (decl), 0, 0, NULL);
19951
19952           return;
19953         }
19954
19955       /* If we are in terse mode, don't generate any DIEs for types.  */
19956       if (debug_info_level <= DINFO_LEVEL_TERSE)
19957         return;
19958
19959       /* If we're a function-scope tag, initially use a parent of NULL;
19960          this will be fixed up in decls_for_scope.  */
19961       if (decl_function_context (decl))
19962         context_die = NULL;
19963
19964       break;
19965
19966     default:
19967       return;
19968     }
19969
19970   gen_decl_die (decl, NULL, context_die);
19971 }
19972
19973 /* Write the debugging output for DECL.  */
19974
19975 static void
19976 dwarf2out_function_decl (tree decl)
19977 {
19978   dwarf2out_decl (decl);
19979
19980   htab_empty (decl_loc_table);
19981 }
19982
19983 /* Output a marker (i.e. a label) for the beginning of the generated code for
19984    a lexical block.  */
19985
19986 static void
19987 dwarf2out_begin_block (unsigned int line ATTRIBUTE_UNUSED,
19988                        unsigned int blocknum)
19989 {
19990   switch_to_section (current_function_section ());
19991   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_BEGIN_LABEL, blocknum);
19992 }
19993
19994 /* Output a marker (i.e. a label) for the end of the generated code for a
19995    lexical block.  */
19996
19997 static void
19998 dwarf2out_end_block (unsigned int line ATTRIBUTE_UNUSED, unsigned int blocknum)
19999 {
20000   switch_to_section (current_function_section ());
20001   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, BLOCK_END_LABEL, blocknum);
20002 }
20003
20004 /* Returns nonzero if it is appropriate not to emit any debugging
20005    information for BLOCK, because it doesn't contain any instructions.
20006
20007    Don't allow this for blocks with nested functions or local classes
20008    as we would end up with orphans, and in the presence of scheduling
20009    we may end up calling them anyway.  */
20010
20011 static bool
20012 dwarf2out_ignore_block (const_tree block)
20013 {
20014   tree decl;
20015   unsigned int i;
20016
20017   for (decl = BLOCK_VARS (block); decl; decl = TREE_CHAIN (decl))
20018     if (TREE_CODE (decl) == FUNCTION_DECL
20019         || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20020       return 0;
20021   for (i = 0; i < BLOCK_NUM_NONLOCALIZED_VARS (block); i++)
20022     {
20023       decl = BLOCK_NONLOCALIZED_VAR (block, i);
20024       if (TREE_CODE (decl) == FUNCTION_DECL
20025           || (TREE_CODE (decl) == TYPE_DECL && TYPE_DECL_IS_STUB (decl)))
20026       return 0;
20027     }
20028
20029   return 1;
20030 }
20031
20032 /* Hash table routines for file_hash.  */
20033
20034 static int
20035 file_table_eq (const void *p1_p, const void *p2_p)
20036 {
20037   const struct dwarf_file_data *const p1 =
20038     (const struct dwarf_file_data *) p1_p;
20039   const char *const p2 = (const char *) p2_p;
20040   return strcmp (p1->filename, p2) == 0;
20041 }
20042
20043 static hashval_t
20044 file_table_hash (const void *p_p)
20045 {
20046   const struct dwarf_file_data *const p = (const struct dwarf_file_data *) p_p;
20047   return htab_hash_string (p->filename);
20048 }
20049
20050 /* Lookup FILE_NAME (in the list of filenames that we know about here in
20051    dwarf2out.c) and return its "index".  The index of each (known) filename is
20052    just a unique number which is associated with only that one filename.  We
20053    need such numbers for the sake of generating labels (in the .debug_sfnames
20054    section) and references to those files numbers (in the .debug_srcinfo
20055    and.debug_macinfo sections).  If the filename given as an argument is not
20056    found in our current list, add it to the list and assign it the next
20057    available unique index number.  In order to speed up searches, we remember
20058    the index of the filename was looked up last.  This handles the majority of
20059    all searches.  */
20060
20061 static struct dwarf_file_data *
20062 lookup_filename (const char *file_name)
20063 {
20064   void ** slot;
20065   struct dwarf_file_data * created;
20066
20067   /* Check to see if the file name that was searched on the previous
20068      call matches this file name.  If so, return the index.  */
20069   if (file_table_last_lookup
20070       && (file_name == file_table_last_lookup->filename
20071           || strcmp (file_table_last_lookup->filename, file_name) == 0))
20072     return file_table_last_lookup;
20073
20074   /* Didn't match the previous lookup, search the table.  */
20075   slot = htab_find_slot_with_hash (file_table, file_name,
20076                                    htab_hash_string (file_name), INSERT);
20077   if (*slot)
20078     return (struct dwarf_file_data *) *slot;
20079
20080   created = GGC_NEW (struct dwarf_file_data);
20081   created->filename = file_name;
20082   created->emitted_number = 0;
20083   *slot = created;
20084   return created;
20085 }
20086
20087 /* If the assembler will construct the file table, then translate the compiler
20088    internal file table number into the assembler file table number, and emit
20089    a .file directive if we haven't already emitted one yet.  The file table
20090    numbers are different because we prune debug info for unused variables and
20091    types, which may include filenames.  */
20092
20093 static int
20094 maybe_emit_file (struct dwarf_file_data * fd)
20095 {
20096   if (! fd->emitted_number)
20097     {
20098       if (last_emitted_file)
20099         fd->emitted_number = last_emitted_file->emitted_number + 1;
20100       else
20101         fd->emitted_number = 1;
20102       last_emitted_file = fd;
20103
20104       if (DWARF2_ASM_LINE_DEBUG_INFO)
20105         {
20106           fprintf (asm_out_file, "\t.file %u ", fd->emitted_number);
20107           output_quoted_string (asm_out_file,
20108                                 remap_debug_filename (fd->filename));
20109           fputc ('\n', asm_out_file);
20110         }
20111     }
20112
20113   return fd->emitted_number;
20114 }
20115
20116 /* Schedule generation of a DW_AT_const_value attribute to DIE.
20117    That generation should happen after function debug info has been
20118    generated. The value of the attribute is the constant value of ARG.  */
20119
20120 static void
20121 append_entry_to_tmpl_value_parm_die_table (dw_die_ref die, tree arg)
20122 {
20123   die_arg_entry entry;
20124
20125   if (!die || !arg)
20126     return;
20127
20128   if (!tmpl_value_parm_die_table)
20129     tmpl_value_parm_die_table
20130       = VEC_alloc (die_arg_entry, gc, 32);
20131
20132   entry.die = die;
20133   entry.arg = arg;
20134   VEC_safe_push (die_arg_entry, gc,
20135                  tmpl_value_parm_die_table,
20136                  &entry);
20137 }
20138
20139 /* Add a DW_AT_const_value attribute to DIEs that were scheduled
20140    by append_entry_to_tmpl_value_parm_die_table. This function must
20141    be called after function DIEs have been generated.  */
20142
20143 static void
20144 gen_remaining_tmpl_value_param_die_attribute (void)
20145 {
20146   if (tmpl_value_parm_die_table)
20147     {
20148       unsigned i;
20149       die_arg_entry *e;
20150
20151       for (i = 0;
20152            VEC_iterate (die_arg_entry, tmpl_value_parm_die_table, i, e);
20153            i++)
20154         tree_add_const_value_attribute (e->die, e->arg);
20155     }
20156 }
20157
20158
20159 /* Replace DW_AT_name for the decl with name.  */
20160
20161 static void
20162 dwarf2out_set_name (tree decl, tree name)
20163 {
20164   dw_die_ref die;
20165   dw_attr_ref attr;
20166   const char *dname;
20167
20168   die = TYPE_SYMTAB_DIE (decl);
20169   if (!die)
20170     return;
20171
20172   dname = dwarf2_name (name, 0);
20173   if (!dname)
20174     return;
20175
20176   attr = get_AT (die, DW_AT_name);
20177   if (attr)
20178     {
20179       struct indirect_string_node *node;
20180
20181       node = find_AT_string (dname);
20182       /* replace the string.  */
20183       attr->dw_attr_val.v.val_str = node;
20184     }
20185
20186   else
20187     add_name_attribute (die, dname);
20188 }
20189
20190 /* Called by the final INSN scan whenever we see a direct function call.
20191    Make an entry into the direct call table, recording the point of call
20192    and a reference to the target function's debug entry.  */
20193
20194 static void
20195 dwarf2out_direct_call (tree targ)
20196 {
20197   dcall_entry e;
20198   tree origin = decl_ultimate_origin (targ);
20199
20200   /* If this is a clone, use the abstract origin as the target.  */
20201   if (origin)
20202     targ = origin;
20203
20204   e.poc_label_num = poc_label_num++;
20205   e.poc_decl = current_function_decl;
20206   e.targ_die = force_decl_die (targ);
20207   VEC_safe_push (dcall_entry, gc, dcall_table, &e);
20208
20209   /* Drop a label at the return point to mark the point of call.  */
20210   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20211 }
20212
20213 /* Returns a hash value for X (which really is a struct vcall_insn).  */
20214
20215 static hashval_t
20216 vcall_insn_table_hash (const void *x)
20217 {
20218   return (hashval_t) ((const struct vcall_insn *) x)->insn_uid;
20219 }
20220
20221 /* Return nonzero if insn_uid of struct vcall_insn *X is the same as
20222    insnd_uid of *Y.  */
20223
20224 static int
20225 vcall_insn_table_eq (const void *x, const void *y)
20226 {
20227   return (((const struct vcall_insn *) x)->insn_uid
20228           == ((const struct vcall_insn *) y)->insn_uid);
20229 }
20230
20231 /* Associate VTABLE_SLOT with INSN_UID in the VCALL_INSN_TABLE.  */
20232
20233 static void
20234 store_vcall_insn (unsigned int vtable_slot, int insn_uid)
20235 {
20236   struct vcall_insn *item = GGC_NEW (struct vcall_insn);
20237   struct vcall_insn **slot;
20238
20239   gcc_assert (item);
20240   item->insn_uid = insn_uid;
20241   item->vtable_slot = vtable_slot;
20242   slot = (struct vcall_insn **)
20243       htab_find_slot_with_hash (vcall_insn_table, &item,
20244                                 (hashval_t) insn_uid, INSERT);
20245   *slot = item;
20246 }
20247
20248 /* Return the VTABLE_SLOT associated with INSN_UID.  */
20249
20250 static unsigned int
20251 lookup_vcall_insn (unsigned int insn_uid)
20252 {
20253   struct vcall_insn item;
20254   struct vcall_insn *p;
20255
20256   item.insn_uid = insn_uid;
20257   item.vtable_slot = 0;
20258   p = (struct vcall_insn *) htab_find_with_hash (vcall_insn_table,
20259                                                  (void *) &item,
20260                                                  (hashval_t) insn_uid);
20261   if (p == NULL)
20262     return (unsigned int) -1;
20263   return p->vtable_slot;
20264 }
20265
20266
20267 /* Called when lowering indirect calls to RTL.  We make a note of INSN_UID
20268    and the OBJ_TYPE_REF_TOKEN from ADDR.  For C++ virtual calls, the token
20269    is the vtable slot index that we will need to put in the virtual call
20270    table later.  */
20271
20272 static void
20273 dwarf2out_virtual_call_token (tree addr, int insn_uid)
20274 {
20275   if (is_cxx() && TREE_CODE (addr) == OBJ_TYPE_REF)
20276     {
20277       tree token = OBJ_TYPE_REF_TOKEN (addr);
20278       if (TREE_CODE (token) == INTEGER_CST)
20279         store_vcall_insn (TREE_INT_CST_LOW (token), insn_uid);
20280     }
20281 }
20282
20283 /* Called when scheduling RTL, when a CALL_INSN is split.  Copies the
20284    OBJ_TYPE_REF_TOKEN previously associated with OLD_INSN and associates it
20285    with NEW_INSN.  */
20286
20287 static void
20288 dwarf2out_copy_call_info (rtx old_insn, rtx new_insn)
20289 {
20290   unsigned int vtable_slot = lookup_vcall_insn (INSN_UID (old_insn));
20291
20292   if (vtable_slot != (unsigned int) -1)
20293     store_vcall_insn (vtable_slot, INSN_UID (new_insn));
20294 }
20295
20296 /* Called by the final INSN scan whenever we see a virtual function call.
20297    Make an entry into the virtual call table, recording the point of call
20298    and the slot index of the vtable entry used to call the virtual member
20299    function.  The slot index was associated with the INSN_UID during the
20300    lowering to RTL.  */
20301
20302 static void
20303 dwarf2out_virtual_call (int insn_uid)
20304 {
20305   unsigned int vtable_slot = lookup_vcall_insn (insn_uid);
20306   vcall_entry e;
20307
20308   if (vtable_slot == (unsigned int) -1)
20309     return;
20310
20311   e.poc_label_num = poc_label_num++;
20312   e.vtable_slot = vtable_slot;
20313   VEC_safe_push (vcall_entry, gc, vcall_table, &e);
20314
20315   /* Drop a label at the return point to mark the point of call.  */
20316   ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LPOC", e.poc_label_num);
20317 }
20318
20319 /* Called by the final INSN scan whenever we see a var location.  We
20320    use it to drop labels in the right places, and throw the location in
20321    our lookup table.  */
20322
20323 static void
20324 dwarf2out_var_location (rtx loc_note)
20325 {
20326   char loclabel[MAX_ARTIFICIAL_LABEL_BYTES + 2];
20327   struct var_loc_node *newloc;
20328   rtx next_real;
20329   static const char *last_label;
20330   static const char *last_postcall_label;
20331   static bool last_in_cold_section_p;
20332   tree decl;
20333
20334   if (!DECL_P (NOTE_VAR_LOCATION_DECL (loc_note)))
20335     return;
20336
20337   next_real = next_real_insn (loc_note);
20338   /* If there are no instructions which would be affected by this note,
20339      don't do anything.  */
20340   if (next_real == NULL_RTX)
20341     return;
20342
20343   decl = NOTE_VAR_LOCATION_DECL (loc_note);
20344   newloc = add_var_loc_to_decl (decl, loc_note);
20345   if (newloc == NULL)
20346     return;
20347
20348   /* If there were no real insns between note we processed last time
20349      and this note, use the label we emitted last time.  */
20350   if (last_var_location_insn == NULL_RTX
20351       || last_var_location_insn != next_real
20352       || last_in_cold_section_p != in_cold_section_p)
20353     {
20354       ASM_GENERATE_INTERNAL_LABEL (loclabel, "LVL", loclabel_num);
20355       ASM_OUTPUT_DEBUG_LABEL (asm_out_file, "LVL", loclabel_num);
20356       loclabel_num++;
20357       last_label = ggc_strdup (loclabel);
20358       last_postcall_label = NULL;
20359     }
20360   newloc->var_loc_note = loc_note;
20361   newloc->next = NULL;
20362
20363   if (!NOTE_DURING_CALL_P (loc_note))
20364     newloc->label = last_label;
20365   else
20366     {
20367       if (!last_postcall_label)
20368         {
20369           sprintf (loclabel, "%s-1", last_label);
20370           last_postcall_label = ggc_strdup (loclabel);
20371         }
20372       newloc->label = last_postcall_label;
20373     }
20374
20375   last_var_location_insn = next_real;
20376   last_in_cold_section_p = in_cold_section_p;
20377 }
20378
20379 /* We need to reset the locations at the beginning of each
20380    function. We can't do this in the end_function hook, because the
20381    declarations that use the locations won't have been output when
20382    that hook is called.  Also compute have_multiple_function_sections here.  */
20383
20384 static void
20385 dwarf2out_begin_function (tree fun)
20386 {
20387   if (function_section (fun) != text_section)
20388     have_multiple_function_sections = true;
20389
20390   dwarf2out_note_section_used ();
20391 }
20392
20393 /* Output a label to mark the beginning of a source code line entry
20394    and record information relating to this source line, in
20395    'line_info_table' for later output of the .debug_line section.  */
20396
20397 static void
20398 dwarf2out_source_line (unsigned int line, const char *filename,
20399                        int discriminator, bool is_stmt)
20400 {
20401   static bool last_is_stmt = true;
20402
20403   if (debug_info_level >= DINFO_LEVEL_NORMAL
20404       && line != 0)
20405     {
20406       int file_num = maybe_emit_file (lookup_filename (filename));
20407
20408       switch_to_section (current_function_section ());
20409
20410       /* If requested, emit something human-readable.  */
20411       if (flag_debug_asm)
20412         fprintf (asm_out_file, "\t%s %s:%d\n", ASM_COMMENT_START,
20413                  filename, line);
20414
20415       if (DWARF2_ASM_LINE_DEBUG_INFO)
20416         {
20417           /* Emit the .loc directive understood by GNU as.  */
20418           fprintf (asm_out_file, "\t.loc %d %d 0", file_num, line);
20419           if (is_stmt != last_is_stmt)
20420             {
20421               fprintf (asm_out_file, " is_stmt %d", is_stmt ? 1 : 0);
20422               last_is_stmt = is_stmt;
20423             }
20424           if (SUPPORTS_DISCRIMINATOR && discriminator != 0)
20425             fprintf (asm_out_file, " discriminator %d", discriminator);
20426           fputc ('\n', asm_out_file);
20427
20428           /* Indicate that line number info exists.  */
20429           line_info_table_in_use++;
20430         }
20431       else if (function_section (current_function_decl) != text_section)
20432         {
20433           dw_separate_line_info_ref line_info;
20434           targetm.asm_out.internal_label (asm_out_file,
20435                                           SEPARATE_LINE_CODE_LABEL,
20436                                           separate_line_info_table_in_use);
20437
20438           /* Expand the line info table if necessary.  */
20439           if (separate_line_info_table_in_use
20440               == separate_line_info_table_allocated)
20441             {
20442               separate_line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20443               separate_line_info_table
20444                 = GGC_RESIZEVEC (dw_separate_line_info_entry,
20445                                  separate_line_info_table,
20446                                  separate_line_info_table_allocated);
20447               memset (separate_line_info_table
20448                        + separate_line_info_table_in_use,
20449                       0,
20450                       (LINE_INFO_TABLE_INCREMENT
20451                        * sizeof (dw_separate_line_info_entry)));
20452             }
20453
20454           /* Add the new entry at the end of the line_info_table.  */
20455           line_info
20456             = &separate_line_info_table[separate_line_info_table_in_use++];
20457           line_info->dw_file_num = file_num;
20458           line_info->dw_line_num = line;
20459           line_info->function = current_function_funcdef_no;
20460         }
20461       else
20462         {
20463           dw_line_info_ref line_info;
20464
20465           targetm.asm_out.internal_label (asm_out_file, LINE_CODE_LABEL,
20466                                      line_info_table_in_use);
20467
20468           /* Expand the line info table if necessary.  */
20469           if (line_info_table_in_use == line_info_table_allocated)
20470             {
20471               line_info_table_allocated += LINE_INFO_TABLE_INCREMENT;
20472               line_info_table
20473                 = GGC_RESIZEVEC (dw_line_info_entry, line_info_table,
20474                                  line_info_table_allocated);
20475               memset (line_info_table + line_info_table_in_use, 0,
20476                       LINE_INFO_TABLE_INCREMENT * sizeof (dw_line_info_entry));
20477             }
20478
20479           /* Add the new entry at the end of the line_info_table.  */
20480           line_info = &line_info_table[line_info_table_in_use++];
20481           line_info->dw_file_num = file_num;
20482           line_info->dw_line_num = line;
20483         }
20484     }
20485 }
20486
20487 /* Record the beginning of a new source file.  */
20488
20489 static void
20490 dwarf2out_start_source_file (unsigned int lineno, const char *filename)
20491 {
20492   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20493     {
20494       /* Record the beginning of the file for break_out_includes.  */
20495       dw_die_ref bincl_die;
20496
20497       bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die, NULL);
20498       add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
20499     }
20500
20501   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20502     {
20503       int file_num = maybe_emit_file (lookup_filename (filename));
20504
20505       switch_to_section (debug_macinfo_section);
20506       dw2_asm_output_data (1, DW_MACINFO_start_file, "Start new file");
20507       dw2_asm_output_data_uleb128 (lineno, "Included from line number %d",
20508                                    lineno);
20509
20510       dw2_asm_output_data_uleb128 (file_num, "file %s", filename);
20511     }
20512 }
20513
20514 /* Record the end of a source file.  */
20515
20516 static void
20517 dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
20518 {
20519   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
20520     /* Record the end of the file for break_out_includes.  */
20521     new_die (DW_TAG_GNU_EINCL, comp_unit_die, NULL);
20522
20523   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20524     {
20525       switch_to_section (debug_macinfo_section);
20526       dw2_asm_output_data (1, DW_MACINFO_end_file, "End file");
20527     }
20528 }
20529
20530 /* Called from debug_define in toplev.c.  The `buffer' parameter contains
20531    the tail part of the directive line, i.e. the part which is past the
20532    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20533
20534 static void
20535 dwarf2out_define (unsigned int lineno ATTRIBUTE_UNUSED,
20536                   const char *buffer ATTRIBUTE_UNUSED)
20537 {
20538   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20539     {
20540       switch_to_section (debug_macinfo_section);
20541       dw2_asm_output_data (1, DW_MACINFO_define, "Define macro");
20542       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20543       dw2_asm_output_nstring (buffer, -1, "The macro");
20544     }
20545 }
20546
20547 /* Called from debug_undef in toplev.c.  The `buffer' parameter contains
20548    the tail part of the directive line, i.e. the part which is past the
20549    initial whitespace, #, whitespace, directive-name, whitespace part.  */
20550
20551 static void
20552 dwarf2out_undef (unsigned int lineno ATTRIBUTE_UNUSED,
20553                  const char *buffer ATTRIBUTE_UNUSED)
20554 {
20555   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20556     {
20557       switch_to_section (debug_macinfo_section);
20558       dw2_asm_output_data (1, DW_MACINFO_undef, "Undefine macro");
20559       dw2_asm_output_data_uleb128 (lineno, "At line number %d", lineno);
20560       dw2_asm_output_nstring (buffer, -1, "The macro");
20561     }
20562 }
20563
20564 /* Set up for Dwarf output at the start of compilation.  */
20565
20566 static void
20567 dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
20568 {
20569   /* Allocate the file_table.  */
20570   file_table = htab_create_ggc (50, file_table_hash,
20571                                 file_table_eq, NULL);
20572
20573   /* Allocate the decl_die_table.  */
20574   decl_die_table = htab_create_ggc (10, decl_die_table_hash,
20575                                     decl_die_table_eq, NULL);
20576
20577   /* Allocate the decl_loc_table.  */
20578   decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
20579                                     decl_loc_table_eq, NULL);
20580
20581   /* Allocate the initial hunk of the decl_scope_table.  */
20582   decl_scope_table = VEC_alloc (tree, gc, 256);
20583
20584   /* Allocate the initial hunk of the abbrev_die_table.  */
20585   abbrev_die_table = GGC_CNEWVEC (dw_die_ref, ABBREV_DIE_TABLE_INCREMENT);
20586   abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
20587   /* Zero-th entry is allocated, but unused.  */
20588   abbrev_die_table_in_use = 1;
20589
20590   /* Allocate the initial hunk of the line_info_table.  */
20591   line_info_table = GGC_CNEWVEC (dw_line_info_entry, LINE_INFO_TABLE_INCREMENT);
20592   line_info_table_allocated = LINE_INFO_TABLE_INCREMENT;
20593
20594   /* Zero-th entry is allocated, but unused.  */
20595   line_info_table_in_use = 1;
20596
20597   /* Allocate the pubtypes and pubnames vectors.  */
20598   pubname_table = VEC_alloc (pubname_entry, gc, 32);
20599   pubtype_table = VEC_alloc (pubname_entry, gc, 32);
20600
20601   /* Allocate the table that maps insn UIDs to vtable slot indexes.  */
20602   vcall_insn_table = htab_create_ggc (10, vcall_insn_table_hash,
20603                                       vcall_insn_table_eq, NULL);
20604
20605   /* Generate the initial DIE for the .debug section.  Note that the (string)
20606      value given in the DW_AT_name attribute of the DW_TAG_compile_unit DIE
20607      will (typically) be a relative pathname and that this pathname should be
20608      taken as being relative to the directory from which the compiler was
20609      invoked when the given (base) source file was compiled.  We will fill
20610      in this value in dwarf2out_finish.  */
20611   comp_unit_die = gen_compile_unit_die (NULL);
20612
20613   incomplete_types = VEC_alloc (tree, gc, 64);
20614
20615   used_rtx_array = VEC_alloc (rtx, gc, 32);
20616
20617   debug_info_section = get_section (DEBUG_INFO_SECTION,
20618                                     SECTION_DEBUG, NULL);
20619   debug_abbrev_section = get_section (DEBUG_ABBREV_SECTION,
20620                                       SECTION_DEBUG, NULL);
20621   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
20622                                        SECTION_DEBUG, NULL);
20623   debug_macinfo_section = get_section (DEBUG_MACINFO_SECTION,
20624                                        SECTION_DEBUG, NULL);
20625   debug_line_section = get_section (DEBUG_LINE_SECTION,
20626                                     SECTION_DEBUG, NULL);
20627   debug_loc_section = get_section (DEBUG_LOC_SECTION,
20628                                    SECTION_DEBUG, NULL);
20629   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
20630                                         SECTION_DEBUG, NULL);
20631   debug_pubtypes_section = get_section (DEBUG_PUBTYPES_SECTION,
20632                                         SECTION_DEBUG, NULL);
20633   debug_dcall_section = get_section (DEBUG_DCALL_SECTION,
20634                                      SECTION_DEBUG, NULL);
20635   debug_vcall_section = get_section (DEBUG_VCALL_SECTION,
20636                                      SECTION_DEBUG, NULL);
20637   debug_str_section = get_section (DEBUG_STR_SECTION,
20638                                    DEBUG_STR_SECTION_FLAGS, NULL);
20639   debug_ranges_section = get_section (DEBUG_RANGES_SECTION,
20640                                       SECTION_DEBUG, NULL);
20641   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
20642                                      SECTION_DEBUG, NULL);
20643
20644   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
20645   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
20646                                DEBUG_ABBREV_SECTION_LABEL, 0);
20647   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
20648   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
20649                                COLD_TEXT_SECTION_LABEL, 0);
20650   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
20651
20652   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
20653                                DEBUG_INFO_SECTION_LABEL, 0);
20654   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
20655                                DEBUG_LINE_SECTION_LABEL, 0);
20656   ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
20657                                DEBUG_RANGES_SECTION_LABEL, 0);
20658   switch_to_section (debug_abbrev_section);
20659   ASM_OUTPUT_LABEL (asm_out_file, abbrev_section_label);
20660   switch_to_section (debug_info_section);
20661   ASM_OUTPUT_LABEL (asm_out_file, debug_info_section_label);
20662   switch_to_section (debug_line_section);
20663   ASM_OUTPUT_LABEL (asm_out_file, debug_line_section_label);
20664
20665   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
20666     {
20667       switch_to_section (debug_macinfo_section);
20668       ASM_GENERATE_INTERNAL_LABEL (macinfo_section_label,
20669                                    DEBUG_MACINFO_SECTION_LABEL, 0);
20670       ASM_OUTPUT_LABEL (asm_out_file, macinfo_section_label);
20671     }
20672
20673   switch_to_section (text_section);
20674   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
20675   if (flag_reorder_blocks_and_partition)
20676     {
20677       cold_text_section = unlikely_text_section ();
20678       switch_to_section (cold_text_section);
20679       ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
20680     }
20681
20682 }
20683
20684 /* Called before cgraph_optimize starts outputtting functions, variables
20685    and toplevel asms into assembly.  */
20686
20687 static void
20688 dwarf2out_assembly_start (void)
20689 {
20690   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
20691     {
20692 #ifndef TARGET_UNWIND_INFO
20693       if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
20694 #endif
20695         fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
20696     }
20697 }
20698
20699 /* A helper function for dwarf2out_finish called through
20700    htab_traverse.  Emit one queued .debug_str string.  */
20701
20702 static int
20703 output_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20704 {
20705   struct indirect_string_node *node = (struct indirect_string_node *) *h;
20706
20707   if (node->label && node->refcount)
20708     {
20709       switch_to_section (debug_str_section);
20710       ASM_OUTPUT_LABEL (asm_out_file, node->label);
20711       assemble_string (node->str, strlen (node->str) + 1);
20712     }
20713
20714   return 1;
20715 }
20716
20717 #if ENABLE_ASSERT_CHECKING
20718 /* Verify that all marks are clear.  */
20719
20720 static void
20721 verify_marks_clear (dw_die_ref die)
20722 {
20723   dw_die_ref c;
20724
20725   gcc_assert (! die->die_mark);
20726   FOR_EACH_CHILD (die, c, verify_marks_clear (c));
20727 }
20728 #endif /* ENABLE_ASSERT_CHECKING */
20729
20730 /* Clear the marks for a die and its children.
20731    Be cool if the mark isn't set.  */
20732
20733 static void
20734 prune_unmark_dies (dw_die_ref die)
20735 {
20736   dw_die_ref c;
20737
20738   if (die->die_mark)
20739     die->die_mark = 0;
20740   FOR_EACH_CHILD (die, c, prune_unmark_dies (c));
20741 }
20742
20743 /* Given DIE that we're marking as used, find any other dies
20744    it references as attributes and mark them as used.  */
20745
20746 static void
20747 prune_unused_types_walk_attribs (dw_die_ref die)
20748 {
20749   dw_attr_ref a;
20750   unsigned ix;
20751
20752   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20753     {
20754       if (a->dw_attr_val.val_class == dw_val_class_die_ref)
20755         {
20756           /* A reference to another DIE.
20757              Make sure that it will get emitted.
20758              If it was broken out into a comdat group, don't follow it.  */
20759           if (dwarf_version < 4
20760               || a->dw_attr == DW_AT_specification
20761               || a->dw_attr_val.v.val_die_ref.die->die_id.die_type_node == NULL)
20762             prune_unused_types_mark (a->dw_attr_val.v.val_die_ref.die, 1);
20763         }
20764       /* Set the string's refcount to 0 so that prune_unused_types_mark
20765          accounts properly for it.  */
20766       if (AT_class (a) == dw_val_class_str)
20767         a->dw_attr_val.v.val_str->refcount = 0;
20768     }
20769 }
20770
20771
20772 /* Mark DIE as being used.  If DOKIDS is true, then walk down
20773    to DIE's children.  */
20774
20775 static void
20776 prune_unused_types_mark (dw_die_ref die, int dokids)
20777 {
20778   dw_die_ref c;
20779
20780   if (die->die_mark == 0)
20781     {
20782       /* We haven't done this node yet.  Mark it as used.  */
20783       die->die_mark = 1;
20784
20785       /* We also have to mark its parents as used.
20786          (But we don't want to mark our parents' kids due to this.)  */
20787       if (die->die_parent)
20788         prune_unused_types_mark (die->die_parent, 0);
20789
20790       /* Mark any referenced nodes.  */
20791       prune_unused_types_walk_attribs (die);
20792
20793       /* If this node is a specification,
20794          also mark the definition, if it exists.  */
20795       if (get_AT_flag (die, DW_AT_declaration) && die->die_definition)
20796         prune_unused_types_mark (die->die_definition, 1);
20797     }
20798
20799   if (dokids && die->die_mark != 2)
20800     {
20801       /* We need to walk the children, but haven't done so yet.
20802          Remember that we've walked the kids.  */
20803       die->die_mark = 2;
20804
20805       /* If this is an array type, we need to make sure our
20806          kids get marked, even if they're types.  If we're
20807          breaking out types into comdat sections, do this
20808          for all type definitions.  */
20809       if (die->die_tag == DW_TAG_array_type
20810           || (dwarf_version >= 4
20811               && is_type_die (die) && ! is_declaration_die (die)))
20812         FOR_EACH_CHILD (die, c, prune_unused_types_mark (c, 1));
20813       else
20814         FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20815     }
20816 }
20817
20818 /* For local classes, look if any static member functions were emitted
20819    and if so, mark them.  */
20820
20821 static void
20822 prune_unused_types_walk_local_classes (dw_die_ref die)
20823 {
20824   dw_die_ref c;
20825
20826   if (die->die_mark == 2)
20827     return;
20828
20829   switch (die->die_tag)
20830     {
20831     case DW_TAG_structure_type:
20832     case DW_TAG_union_type:
20833     case DW_TAG_class_type:
20834       break;
20835
20836     case DW_TAG_subprogram:
20837       if (!get_AT_flag (die, DW_AT_declaration)
20838           || die->die_definition != NULL)
20839         prune_unused_types_mark (die, 1);
20840       return;
20841
20842     default:
20843       return;
20844     }
20845
20846   /* Mark children.  */
20847   FOR_EACH_CHILD (die, c, prune_unused_types_walk_local_classes (c));
20848 }
20849
20850 /* Walk the tree DIE and mark types that we actually use.  */
20851
20852 static void
20853 prune_unused_types_walk (dw_die_ref die)
20854 {
20855   dw_die_ref c;
20856
20857   /* Don't do anything if this node is already marked and
20858      children have been marked as well.  */
20859   if (die->die_mark == 2)
20860     return;
20861
20862   switch (die->die_tag)
20863     {
20864     case DW_TAG_structure_type:
20865     case DW_TAG_union_type:
20866     case DW_TAG_class_type:
20867       if (die->die_perennial_p)
20868         break;
20869
20870       for (c = die->die_parent; c; c = c->die_parent)
20871         if (c->die_tag == DW_TAG_subprogram)
20872           break;
20873
20874       /* Finding used static member functions inside of classes
20875          is needed just for local classes, because for other classes
20876          static member function DIEs with DW_AT_specification
20877          are emitted outside of the DW_TAG_*_type.  If we ever change
20878          it, we'd need to call this even for non-local classes.  */
20879       if (c)
20880         prune_unused_types_walk_local_classes (die);
20881
20882       /* It's a type node --- don't mark it.  */
20883       return;
20884
20885     case DW_TAG_const_type:
20886     case DW_TAG_packed_type:
20887     case DW_TAG_pointer_type:
20888     case DW_TAG_reference_type:
20889     case DW_TAG_volatile_type:
20890     case DW_TAG_typedef:
20891     case DW_TAG_array_type:
20892     case DW_TAG_interface_type:
20893     case DW_TAG_friend:
20894     case DW_TAG_variant_part:
20895     case DW_TAG_enumeration_type:
20896     case DW_TAG_subroutine_type:
20897     case DW_TAG_string_type:
20898     case DW_TAG_set_type:
20899     case DW_TAG_subrange_type:
20900     case DW_TAG_ptr_to_member_type:
20901     case DW_TAG_file_type:
20902       if (die->die_perennial_p)
20903         break;
20904
20905       /* It's a type node --- don't mark it.  */
20906       return;
20907
20908     default:
20909       /* Mark everything else.  */
20910       break;
20911   }
20912
20913   if (die->die_mark == 0)
20914     {
20915       die->die_mark = 1;
20916
20917       /* Now, mark any dies referenced from here.  */
20918       prune_unused_types_walk_attribs (die);
20919     }
20920
20921   die->die_mark = 2;
20922
20923   /* Mark children.  */
20924   FOR_EACH_CHILD (die, c, prune_unused_types_walk (c));
20925 }
20926
20927 /* Increment the string counts on strings referred to from DIE's
20928    attributes.  */
20929
20930 static void
20931 prune_unused_types_update_strings (dw_die_ref die)
20932 {
20933   dw_attr_ref a;
20934   unsigned ix;
20935
20936   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
20937     if (AT_class (a) == dw_val_class_str)
20938       {
20939         struct indirect_string_node *s = a->dw_attr_val.v.val_str;
20940         s->refcount++;
20941         /* Avoid unnecessarily putting strings that are used less than
20942            twice in the hash table.  */
20943         if (s->refcount
20944             == ((DEBUG_STR_SECTION_FLAGS & SECTION_MERGE) ? 1 : 2))
20945           {
20946             void ** slot;
20947             slot = htab_find_slot_with_hash (debug_str_hash, s->str,
20948                                              htab_hash_string (s->str),
20949                                              INSERT);
20950             gcc_assert (*slot == NULL);
20951             *slot = s;
20952           }
20953       }
20954 }
20955
20956 /* Remove from the tree DIE any dies that aren't marked.  */
20957
20958 static void
20959 prune_unused_types_prune (dw_die_ref die)
20960 {
20961   dw_die_ref c;
20962
20963   gcc_assert (die->die_mark);
20964   prune_unused_types_update_strings (die);
20965
20966   if (! die->die_child)
20967     return;
20968
20969   c = die->die_child;
20970   do {
20971     dw_die_ref prev = c;
20972     for (c = c->die_sib; ! c->die_mark; c = c->die_sib)
20973       if (c == die->die_child)
20974         {
20975           /* No marked children between 'prev' and the end of the list.  */
20976           if (prev == c)
20977             /* No marked children at all.  */
20978             die->die_child = NULL;
20979           else
20980             {
20981               prev->die_sib = c->die_sib;
20982               die->die_child = prev;
20983             }
20984           return;
20985         }
20986
20987     if (c != prev->die_sib)
20988       prev->die_sib = c;
20989     prune_unused_types_prune (c);
20990   } while (c != die->die_child);
20991 }
20992
20993 /* A helper function for dwarf2out_finish called through
20994    htab_traverse.  Clear .debug_str strings that we haven't already
20995    decided to emit.  */
20996
20997 static int
20998 prune_indirect_string (void **h, void *v ATTRIBUTE_UNUSED)
20999 {
21000   struct indirect_string_node *node = (struct indirect_string_node *) *h;
21001
21002   if (!node->label || !node->refcount)
21003     htab_clear_slot (debug_str_hash, h);
21004
21005   return 1;
21006 }
21007
21008 /* Remove dies representing declarations that we never use.  */
21009
21010 static void
21011 prune_unused_types (void)
21012 {
21013   unsigned int i;
21014   limbo_die_node *node;
21015   comdat_type_node *ctnode;
21016   pubname_ref pub;
21017   dcall_entry *dcall;
21018
21019 #if ENABLE_ASSERT_CHECKING
21020   /* All the marks should already be clear.  */
21021   verify_marks_clear (comp_unit_die);
21022   for (node = limbo_die_list; node; node = node->next)
21023     verify_marks_clear (node->die);
21024   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21025     verify_marks_clear (ctnode->root_die);
21026 #endif /* ENABLE_ASSERT_CHECKING */
21027
21028   /* Mark types that are used in global variables.  */
21029   premark_types_used_by_global_vars ();
21030
21031   /* Set the mark on nodes that are actually used.  */
21032   prune_unused_types_walk (comp_unit_die);
21033   for (node = limbo_die_list; node; node = node->next)
21034     prune_unused_types_walk (node->die);
21035   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21036     {
21037       prune_unused_types_walk (ctnode->root_die);
21038       prune_unused_types_mark (ctnode->type_die, 1);
21039     }
21040
21041   /* Also set the mark on nodes referenced from the
21042      pubname_table or arange_table.  */
21043   for (i = 0; VEC_iterate (pubname_entry, pubname_table, i, pub); i++)
21044     prune_unused_types_mark (pub->die, 1);
21045   for (i = 0; i < arange_table_in_use; i++)
21046     prune_unused_types_mark (arange_table[i], 1);
21047
21048   /* Mark nodes referenced from the direct call table.  */
21049   for (i = 0; VEC_iterate (dcall_entry, dcall_table, i, dcall); i++)
21050     prune_unused_types_mark (dcall->targ_die, 1);
21051
21052   /* Get rid of nodes that aren't marked; and update the string counts.  */
21053   if (debug_str_hash && debug_str_hash_forced)
21054     htab_traverse (debug_str_hash, prune_indirect_string, NULL);
21055   else if (debug_str_hash)
21056     htab_empty (debug_str_hash);
21057   prune_unused_types_prune (comp_unit_die);
21058   for (node = limbo_die_list; node; node = node->next)
21059     prune_unused_types_prune (node->die);
21060   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21061     prune_unused_types_prune (ctnode->root_die);
21062
21063   /* Leave the marks clear.  */
21064   prune_unmark_dies (comp_unit_die);
21065   for (node = limbo_die_list; node; node = node->next)
21066     prune_unmark_dies (node->die);
21067   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
21068     prune_unmark_dies (ctnode->root_die);
21069 }
21070
21071 /* Set the parameter to true if there are any relative pathnames in
21072    the file table.  */
21073 static int
21074 file_table_relative_p (void ** slot, void *param)
21075 {
21076   bool *p = (bool *) param;
21077   struct dwarf_file_data *d = (struct dwarf_file_data *) *slot;
21078   if (!IS_ABSOLUTE_PATH (d->filename))
21079     {
21080       *p = true;
21081       return 0;
21082     }
21083   return 1;
21084 }
21085
21086 /* Routines to manipulate hash table of comdat type units.  */
21087
21088 static hashval_t
21089 htab_ct_hash (const void *of)
21090 {
21091   hashval_t h;
21092   const comdat_type_node *const type_node = (const comdat_type_node *) of;
21093
21094   memcpy (&h, type_node->signature, sizeof (h));
21095   return h;
21096 }
21097
21098 static int
21099 htab_ct_eq (const void *of1, const void *of2)
21100 {
21101   const comdat_type_node *const type_node_1 = (const comdat_type_node *) of1;
21102   const comdat_type_node *const type_node_2 = (const comdat_type_node *) of2;
21103
21104   return (! memcmp (type_node_1->signature, type_node_2->signature,
21105                     DWARF_TYPE_SIGNATURE_SIZE));
21106 }
21107
21108 /* Move a DW_AT_MIPS_linkage_name attribute just added to dw_die_ref
21109    to the location it would have been added, should we know its
21110    DECL_ASSEMBLER_NAME when we added other attributes.  This will
21111    probably improve compactness of debug info, removing equivalent
21112    abbrevs, and hide any differences caused by deferring the
21113    computation of the assembler name, triggered by e.g. PCH.  */
21114
21115 static inline void
21116 move_linkage_attr (dw_die_ref die)
21117 {
21118   unsigned ix = VEC_length (dw_attr_node, die->die_attr);
21119   dw_attr_node linkage = *VEC_index (dw_attr_node, die->die_attr, ix - 1);
21120
21121   gcc_assert (linkage.dw_attr == DW_AT_MIPS_linkage_name);
21122
21123   while (--ix > 0)
21124     {
21125       dw_attr_node *prev = VEC_index (dw_attr_node, die->die_attr, ix - 1);
21126
21127       if (prev->dw_attr == DW_AT_decl_line || prev->dw_attr == DW_AT_name)
21128         break;
21129     }
21130
21131   if (ix != VEC_length (dw_attr_node, die->die_attr) - 1)
21132     {
21133       VEC_pop (dw_attr_node, die->die_attr);
21134       VEC_quick_insert (dw_attr_node, die->die_attr, ix, &linkage);
21135     }
21136 }
21137
21138 /* Helper function for resolve_addr, attempt to resolve
21139    one CONST_STRING, return non-zero if not successful.  Similarly verify that
21140    SYMBOL_REFs refer to variables emitted in the current CU.  */
21141
21142 static int
21143 resolve_one_addr (rtx *addr, void *data ATTRIBUTE_UNUSED)
21144 {
21145   rtx rtl = *addr;
21146
21147   if (GET_CODE (rtl) == CONST_STRING)
21148     {
21149       size_t len = strlen (XSTR (rtl, 0)) + 1;
21150       tree t = build_string (len, XSTR (rtl, 0));
21151       tree tlen = build_int_cst (NULL_TREE, len - 1);
21152       TREE_TYPE (t)
21153         = build_array_type (char_type_node, build_index_type (tlen));
21154       rtl = lookup_constant_def (t);
21155       if (!rtl || !MEM_P (rtl))
21156         return 1;
21157       rtl = XEXP (rtl, 0);
21158       VEC_safe_push (rtx, gc, used_rtx_array, rtl);
21159       *addr = rtl;
21160       return 0;
21161     }
21162
21163   if (GET_CODE (rtl) == SYMBOL_REF
21164       && SYMBOL_REF_DECL (rtl)
21165       && TREE_CODE (SYMBOL_REF_DECL (rtl)) == VAR_DECL
21166       && !TREE_ASM_WRITTEN (SYMBOL_REF_DECL (rtl)))
21167     return 1;
21168
21169   if (GET_CODE (rtl) == CONST
21170       && for_each_rtx (&XEXP (rtl, 0), resolve_one_addr, NULL))
21171     return 1;
21172
21173   return 0;
21174 }
21175
21176 /* Helper function for resolve_addr, handle one location
21177    expression, return false if at least one CONST_STRING or SYMBOL_REF in
21178    the location list couldn't be resolved.  */
21179
21180 static bool
21181 resolve_addr_in_expr (dw_loc_descr_ref loc)
21182 {
21183   for (; loc; loc = loc->dw_loc_next)
21184     if ((loc->dw_loc_opc == DW_OP_addr
21185          && resolve_one_addr (&loc->dw_loc_oprnd1.v.val_addr, NULL))
21186         || (loc->dw_loc_opc == DW_OP_implicit_value
21187             && loc->dw_loc_oprnd2.val_class == dw_val_class_addr
21188             && resolve_one_addr (&loc->dw_loc_oprnd2.v.val_addr, NULL)))
21189       return false;
21190   return true;
21191 }
21192
21193 /* Resolve DW_OP_addr and DW_AT_const_value CONST_STRING arguments to
21194    an address in .rodata section if the string literal is emitted there,
21195    or remove the containing location list or replace DW_AT_const_value
21196    with DW_AT_location and empty location expression, if it isn't found
21197    in .rodata.  Similarly for SYMBOL_REFs, keep only those that refer
21198    to something that has been emitted in the current CU.  */
21199
21200 static void
21201 resolve_addr (dw_die_ref die)
21202 {
21203   dw_die_ref c;
21204   dw_attr_ref a;
21205   dw_loc_list_ref *curr;
21206   unsigned ix;
21207
21208   for (ix = 0; VEC_iterate (dw_attr_node, die->die_attr, ix, a); ix++)
21209     switch (AT_class (a))
21210       {
21211       case dw_val_class_loc_list:
21212         curr = AT_loc_list_ptr (a);
21213         while (*curr)
21214           {
21215             if (!resolve_addr_in_expr ((*curr)->expr))
21216               {
21217                 dw_loc_list_ref next = (*curr)->dw_loc_next;
21218                 if (next && (*curr)->ll_symbol)
21219                   {
21220                     gcc_assert (!next->ll_symbol);
21221                     next->ll_symbol = (*curr)->ll_symbol;
21222                   }
21223                 *curr = next;
21224               }
21225             else
21226               curr = &(*curr)->dw_loc_next;
21227           }
21228         if (!AT_loc_list (a))
21229           {
21230             remove_AT (die, a->dw_attr);
21231             ix--;
21232           }
21233         break;
21234       case dw_val_class_loc:
21235         if (!resolve_addr_in_expr (AT_loc (a)))
21236           {
21237             remove_AT (die, a->dw_attr);
21238             ix--;
21239           }
21240         break;
21241       case dw_val_class_addr:
21242         if (a->dw_attr == DW_AT_const_value
21243             && resolve_one_addr (&a->dw_attr_val.v.val_addr, NULL))
21244           {
21245             remove_AT (die, a->dw_attr);
21246             ix--;
21247           }
21248         break;
21249       default:
21250         break;
21251       }
21252
21253   FOR_EACH_CHILD (die, c, resolve_addr (c));
21254 }
21255
21256 /* Output stuff that dwarf requires at the end of every file,
21257    and generate the DWARF-2 debugging info.  */
21258
21259 static void
21260 dwarf2out_finish (const char *filename)
21261 {
21262   limbo_die_node *node, *next_node;
21263   comdat_type_node *ctnode;
21264   htab_t comdat_type_table;
21265   dw_die_ref die = 0;
21266   unsigned int i;
21267
21268   gen_remaining_tmpl_value_param_die_attribute ();
21269
21270   /* Add the name for the main input file now.  We delayed this from
21271      dwarf2out_init to avoid complications with PCH.  */
21272   add_name_attribute (comp_unit_die, remap_debug_filename (filename));
21273   if (!IS_ABSOLUTE_PATH (filename))
21274     add_comp_dir_attribute (comp_unit_die);
21275   else if (get_AT (comp_unit_die, DW_AT_comp_dir) == NULL)
21276     {
21277       bool p = false;
21278       htab_traverse (file_table, file_table_relative_p, &p);
21279       if (p)
21280         add_comp_dir_attribute (comp_unit_die);
21281     }
21282
21283   for (i = 0; i < VEC_length (deferred_locations, deferred_locations_list); i++)
21284     {
21285       add_location_or_const_value_attribute (
21286         VEC_index (deferred_locations, deferred_locations_list, i)->die,
21287         VEC_index (deferred_locations, deferred_locations_list, i)->variable,
21288         DW_AT_location);
21289     }
21290
21291   /* Traverse the limbo die list, and add parent/child links.  The only
21292      dies without parents that should be here are concrete instances of
21293      inline functions, and the comp_unit_die.  We can ignore the comp_unit_die.
21294      For concrete instances, we can get the parent die from the abstract
21295      instance.  */
21296   for (node = limbo_die_list; node; node = next_node)
21297     {
21298       next_node = node->next;
21299       die = node->die;
21300
21301       if (die->die_parent == NULL)
21302         {
21303           dw_die_ref origin = get_AT_ref (die, DW_AT_abstract_origin);
21304
21305           if (origin)
21306             add_child_die (origin->die_parent, die);
21307           else if (die == comp_unit_die)
21308             ;
21309           else if (errorcount > 0 || sorrycount > 0)
21310             /* It's OK to be confused by errors in the input.  */
21311             add_child_die (comp_unit_die, die);
21312           else
21313             {
21314               /* In certain situations, the lexical block containing a
21315                  nested function can be optimized away, which results
21316                  in the nested function die being orphaned.  Likewise
21317                  with the return type of that nested function.  Force
21318                  this to be a child of the containing function.
21319
21320                  It may happen that even the containing function got fully
21321                  inlined and optimized out.  In that case we are lost and
21322                  assign the empty child.  This should not be big issue as
21323                  the function is likely unreachable too.  */
21324               tree context = NULL_TREE;
21325
21326               gcc_assert (node->created_for);
21327
21328               if (DECL_P (node->created_for))
21329                 context = DECL_CONTEXT (node->created_for);
21330               else if (TYPE_P (node->created_for))
21331                 context = TYPE_CONTEXT (node->created_for);
21332
21333               gcc_assert (context
21334                           && (TREE_CODE (context) == FUNCTION_DECL
21335                               || TREE_CODE (context) == NAMESPACE_DECL));
21336
21337               origin = lookup_decl_die (context);
21338               if (origin)
21339                 add_child_die (origin, die);
21340               else
21341                 add_child_die (comp_unit_die, die);
21342             }
21343         }
21344     }
21345
21346   limbo_die_list = NULL;
21347
21348   resolve_addr (comp_unit_die);
21349
21350   for (node = deferred_asm_name; node; node = node->next)
21351     {
21352       tree decl = node->created_for;
21353       if (DECL_ASSEMBLER_NAME (decl) != DECL_NAME (decl))
21354         {
21355           add_AT_string (node->die, DW_AT_MIPS_linkage_name,
21356                          IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
21357           move_linkage_attr (node->die);
21358         }
21359     }
21360
21361   deferred_asm_name = NULL;
21362
21363   /* Walk through the list of incomplete types again, trying once more to
21364      emit full debugging info for them.  */
21365   retry_incomplete_types ();
21366
21367   if (flag_eliminate_unused_debug_types)
21368     prune_unused_types ();
21369
21370   /* Generate separate CUs for each of the include files we've seen.
21371      They will go into limbo_die_list.  */
21372   if (flag_eliminate_dwarf2_dups && dwarf_version < 4)
21373     break_out_includes (comp_unit_die);
21374
21375   /* Generate separate COMDAT sections for type DIEs. */
21376   if (dwarf_version >= 4)
21377     {
21378       break_out_comdat_types (comp_unit_die);
21379
21380       /* Each new type_unit DIE was added to the limbo die list when created.
21381          Since these have all been added to comdat_type_list, clear the
21382          limbo die list.  */
21383       limbo_die_list = NULL;
21384
21385       /* For each new comdat type unit, copy declarations for incomplete
21386          types to make the new unit self-contained (i.e., no direct
21387          references to the main compile unit).  */
21388       for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21389         copy_decls_for_unworthy_types (ctnode->root_die);
21390       copy_decls_for_unworthy_types (comp_unit_die);
21391
21392       /* In the process of copying declarations from one unit to another,
21393          we may have left some declarations behind that are no longer
21394          referenced.  Prune them.  */
21395       prune_unused_types ();
21396     }
21397
21398   /* Traverse the DIE's and add add sibling attributes to those DIE's
21399      that have children.  */
21400   add_sibling_attributes (comp_unit_die);
21401   for (node = limbo_die_list; node; node = node->next)
21402     add_sibling_attributes (node->die);
21403   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21404     add_sibling_attributes (ctnode->root_die);
21405
21406   /* Output a terminator label for the .text section.  */
21407   switch_to_section (text_section);
21408   targetm.asm_out.internal_label (asm_out_file, TEXT_END_LABEL, 0);
21409   if (flag_reorder_blocks_and_partition)
21410     {
21411       switch_to_section (unlikely_text_section ());
21412       targetm.asm_out.internal_label (asm_out_file, COLD_END_LABEL, 0);
21413     }
21414
21415   /* We can only use the low/high_pc attributes if all of the code was
21416      in .text.  */
21417   if (!have_multiple_function_sections
21418       || !(dwarf_version >= 3 || !dwarf_strict))
21419     {
21420       add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
21421       add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
21422     }
21423
21424   else
21425     {
21426       unsigned fde_idx = 0;
21427       bool range_list_added = false;
21428
21429       /* We need to give .debug_loc and .debug_ranges an appropriate
21430          "base address".  Use zero so that these addresses become
21431          absolute.  Historically, we've emitted the unexpected
21432          DW_AT_entry_pc instead of DW_AT_low_pc for this purpose.
21433          Emit both to give time for other tools to adapt.  */
21434       add_AT_addr (comp_unit_die, DW_AT_low_pc, const0_rtx);
21435       add_AT_addr (comp_unit_die, DW_AT_entry_pc, const0_rtx);
21436
21437       if (text_section_used)
21438         add_ranges_by_labels (comp_unit_die, text_section_label,
21439                               text_end_label, &range_list_added);
21440       if (flag_reorder_blocks_and_partition && cold_text_section_used)
21441         add_ranges_by_labels (comp_unit_die, cold_text_section_label,
21442                               cold_end_label, &range_list_added);
21443
21444       for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
21445         {
21446           dw_fde_ref fde = &fde_table[fde_idx];
21447
21448           if (fde->dw_fde_switched_sections)
21449             {
21450               if (!fde->in_std_section)
21451                 add_ranges_by_labels (comp_unit_die,
21452                                       fde->dw_fde_hot_section_label,
21453                                       fde->dw_fde_hot_section_end_label,
21454                                       &range_list_added);
21455               if (!fde->cold_in_std_section)
21456                 add_ranges_by_labels (comp_unit_die,
21457                                       fde->dw_fde_unlikely_section_label,
21458                                       fde->dw_fde_unlikely_section_end_label,
21459                                       &range_list_added);
21460             }
21461           else if (!fde->in_std_section)
21462             add_ranges_by_labels (comp_unit_die, fde->dw_fde_begin,
21463                                   fde->dw_fde_end, &range_list_added);
21464         }
21465
21466       if (range_list_added)
21467         add_ranges (NULL);
21468     }
21469
21470   /* Output location list section if necessary.  */
21471   if (have_location_lists)
21472     {
21473       /* Output the location lists info.  */
21474       switch_to_section (debug_loc_section);
21475       ASM_GENERATE_INTERNAL_LABEL (loc_section_label,
21476                                    DEBUG_LOC_SECTION_LABEL, 0);
21477       ASM_OUTPUT_LABEL (asm_out_file, loc_section_label);
21478       output_location_lists (die);
21479     }
21480
21481   if (debug_info_level >= DINFO_LEVEL_NORMAL)
21482     add_AT_lineptr (comp_unit_die, DW_AT_stmt_list,
21483                     debug_line_section_label);
21484
21485   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21486     add_AT_macptr (comp_unit_die, DW_AT_macro_info, macinfo_section_label);
21487
21488   /* Output all of the compilation units.  We put the main one last so that
21489      the offsets are available to output_pubnames.  */
21490   for (node = limbo_die_list; node; node = node->next)
21491     output_comp_unit (node->die, 0);
21492
21493   comdat_type_table = htab_create (100, htab_ct_hash, htab_ct_eq, NULL);
21494   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
21495     {
21496       void **slot = htab_find_slot (comdat_type_table, ctnode, INSERT);
21497
21498       /* Don't output duplicate types.  */
21499       if (*slot != HTAB_EMPTY_ENTRY)
21500         continue;
21501
21502       /* Add a pointer to the line table for the main compilation unit
21503          so that the debugger can make sense of DW_AT_decl_file
21504          attributes.  */
21505       if (debug_info_level >= DINFO_LEVEL_NORMAL)
21506         add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
21507                         debug_line_section_label);
21508
21509       output_comdat_type_unit (ctnode);
21510       *slot = ctnode;
21511     }
21512   htab_delete (comdat_type_table);
21513
21514   /* Output the main compilation unit if non-empty or if .debug_macinfo
21515      has been emitted.  */
21516   output_comp_unit (comp_unit_die, debug_info_level >= DINFO_LEVEL_VERBOSE);
21517
21518   /* Output the abbreviation table.  */
21519   switch_to_section (debug_abbrev_section);
21520   output_abbrev_section ();
21521
21522   /* Output public names table if necessary.  */
21523   if (!VEC_empty (pubname_entry, pubname_table))
21524     {
21525       switch_to_section (debug_pubnames_section);
21526       output_pubnames (pubname_table);
21527     }
21528
21529   /* Output public types table if necessary.  */
21530   /* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
21531      It shouldn't hurt to emit it always, since pure DWARF2 consumers
21532      simply won't look for the section.  */
21533   if (!VEC_empty (pubname_entry, pubtype_table))
21534     {
21535       switch_to_section (debug_pubtypes_section);
21536       output_pubnames (pubtype_table);
21537     }
21538
21539   /* Output direct and virtual call tables if necessary.  */
21540   if (!VEC_empty (dcall_entry, dcall_table))
21541     {
21542       switch_to_section (debug_dcall_section);
21543       output_dcall_table ();
21544     }
21545   if (!VEC_empty (vcall_entry, vcall_table))
21546     {
21547       switch_to_section (debug_vcall_section);
21548       output_vcall_table ();
21549     }
21550
21551   /* Output the address range information.  We only put functions in the arange
21552      table, so don't write it out if we don't have any.  */
21553   if (fde_table_in_use)
21554     {
21555       switch_to_section (debug_aranges_section);
21556       output_aranges ();
21557     }
21558
21559   /* Output ranges section if necessary.  */
21560   if (ranges_table_in_use)
21561     {
21562       switch_to_section (debug_ranges_section);
21563       ASM_OUTPUT_LABEL (asm_out_file, ranges_section_label);
21564       output_ranges ();
21565     }
21566
21567   /* Output the source line correspondence table.  We must do this
21568      even if there is no line information.  Otherwise, on an empty
21569      translation unit, we will generate a present, but empty,
21570      .debug_info section.  IRIX 6.5 `nm' will then complain when
21571      examining the file.  This is done late so that any filenames
21572      used by the debug_info section are marked as 'used'.  */
21573   if (! DWARF2_ASM_LINE_DEBUG_INFO)
21574     {
21575       switch_to_section (debug_line_section);
21576       output_line_info ();
21577     }
21578
21579   /* Have to end the macro section.  */
21580   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
21581     {
21582       switch_to_section (debug_macinfo_section);
21583       dw2_asm_output_data (1, 0, "End compilation unit");
21584     }
21585
21586   /* If we emitted any DW_FORM_strp form attribute, output the string
21587      table too.  */
21588   if (debug_str_hash)
21589     htab_traverse (debug_str_hash, output_indirect_string, NULL);
21590 }
21591 #else
21592
21593 /* This should never be used, but its address is needed for comparisons.  */
21594 const struct gcc_debug_hooks dwarf2_debug_hooks =
21595 {
21596   0,            /* init */
21597   0,            /* finish */
21598   0,            /* assembly_start */
21599   0,            /* define */
21600   0,            /* undef */
21601   0,            /* start_source_file */
21602   0,            /* end_source_file */
21603   0,            /* begin_block */
21604   0,            /* end_block */
21605   0,            /* ignore_block */
21606   0,            /* source_line */
21607   0,            /* begin_prologue */
21608   0,            /* end_prologue */
21609   0,            /* end_epilogue */
21610   0,            /* begin_function */
21611   0,            /* end_function */
21612   0,            /* function_decl */
21613   0,            /* global_decl */
21614   0,            /* type_decl */
21615   0,            /* imported_module_or_decl */
21616   0,            /* deferred_inline_function */
21617   0,            /* outlining_inline_function */
21618   0,            /* label */
21619   0,            /* handle_pch */
21620   0,            /* var_location */
21621   0,            /* switch_text_section */
21622   0,            /* direct_call */
21623   0,            /* virtual_call_token */
21624   0,            /* copy_call_info */
21625   0,            /* virtual_call */
21626   0,            /* set_name */
21627   0             /* start_end_main_source_file */
21628 };
21629
21630 #endif /* DWARF2_DEBUGGING_INFO */
21631
21632 #include "gt-dwarf2out.h"